element-ui-wbi 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,11 +9,11 @@
9
9
  /******/ (function() { // webpackBootstrap
10
10
  /******/ var __webpack_modules__ = ({
11
11
 
12
- /***/ 2601:
12
+ /***/ 2792:
13
13
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
14
14
 
15
15
  "use strict";
16
- eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n Http: function() { return /* reexport */ Http; },\n \"default\": function() { return /* binding */ entry_lib; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: function() { return hasBrowserEnv; },\n hasStandardBrowserEnv: function() { return hasStandardBrowserEnv; },\n hasStandardBrowserWebWorkerEnv: function() { return hasStandardBrowserWebWorkerEnv; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=template&id=26b70fb4&scoped=true\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.total > 0 ? _c('div', [_c('el-pagination', _vm._b({\n attrs: {\n \"background\": \"\",\n \"current-page\": _vm.currentPage,\n \"page-size\": _vm.pageSize,\n \"page-sizes\": _vm.pageSizes,\n \"total\": _vm.total,\n \"layout\": \"prev, pager, next\"\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange\n }\n }, 'el-pagination', _vm.$attrs, false))], 1) : _vm._e();\n};\nvar staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var Indexvue_type_script_lang_js = ({\n name: 'Pagination',\n props: {\n total: {\n required: true,\n type: Number,\n default: 0\n },\n page: {\n type: Number,\n default: 1\n },\n limit: {\n type: Number,\n default: 20\n },\n pageSizes: {\n type: Array,\n default() {\n return [10, 15, 20, 30, 50];\n }\n }\n },\n computed: {\n currentPage: {\n get() {\n return this.page;\n },\n set(val) {\n this.$emit('update:page', val);\n }\n },\n pageSize: {\n get() {\n return this.limit;\n },\n set(val) {\n this.$emit('update:limit', val);\n }\n },\n totalCount: {\n get() {\n return this.total;\n },\n set(val) {\n this.$emit('update:total', val);\n }\n }\n },\n methods: {\n handleSizeChange(val) {\n this.$emit('pagination', {\n page: this.currentPage,\n limit: val\n });\n },\n handleCurrentChange(val) {\n this.$emit('pagination', {\n page: val,\n limit: this.pageSize\n });\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var pagination_Indexvue_type_script_lang_js = (Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n pagination_Indexvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n \"26b70fb4\",\n null\n \n)\n\n/* harmony default export */ var Index = (component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=template&id=d8da1446&scoped=true\nvar Indexvue_type_template_id_d8da1446_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('div', {\n staticClass: \"page-table\",\n attrs: {\n \"id\": this.tableId\n }\n }, [_c('div', {\n staticClass: \"table\"\n }, [_c('el-scrollbar', {\n staticStyle: {\n \"height\": \"100%\"\n }\n }, [_c('el-table', _vm._b({\n ref: _vm.tableId,\n attrs: {\n \"stripe\": \"\",\n \"data\": _vm.list,\n \"row-key\": _vm.rowKey,\n \"load\": _vm.load,\n \"highlight-current-row\": _vm.hlightCurrentRow,\n \"default-expand-all\": _vm.defaultExpandAll\n },\n on: {\n \"select\": _vm.handelSelectionChange,\n \"select-all\": _vm.selectAll,\n \"row-click\": _vm.handleRowClick,\n \"expand-change\": val => _vm.$emit('expand-change', val)\n }\n }, 'el-table', _vm.$attrs, false), [_vm.showCheckBox ? _c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"60px\",\n \"align\": \"center\"\n }\n }) : _vm._e(), _vm.sortNum ? _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60px\",\n \"label\": \"序号\",\n \"align\": \"center\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function (scope) {\n return [_vm.page ? _c('span', [_vm._v(_vm._s((_vm.params.page - 1) * _vm.params.limit + scope.$index + 1))]) : _c('span', [_vm._v(_vm._s(scope.$index + 1))])];\n }\n }], null, false, 2786008021)\n }) : _vm._e(), _vm._t(\"default\")], 2)], 1)], 1), _vm.page ? _c('Pagination', {\n attrs: {\n \"total\": _vm.total,\n \"page\": _vm.params.page,\n \"limit\": _vm.params.limit\n },\n on: {\n \"update:page\": function ($event) {\n return _vm.$set(_vm.params, \"page\", $event);\n },\n \"pagination\": _vm.getList\n }\n }) : _vm._e()], 1);\n};\nvar Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var page_table_Indexvue_type_script_lang_js = ({\n name: 'PageTable',\n props: {\n // 自定义数据\n data: {\n type: Array,\n default: null\n },\n // 请求地址\n url: {\n type: String,\n default: ''\n },\n // 请求方式\n method: {\n type: String,\n default: 'get'\n },\n // 是否显示序号\n sortNum: {\n type: Boolean,\n default: true\n },\n // 是否分页\n page: {\n type: Boolean,\n default: true\n },\n // 树形表格时,是否全部展开\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n // 初始请求参数\n defaultParams: {\n type: Object,\n default: () => ({})\n },\n // 默认选中数据\n defaultSelect: {\n type: Array,\n default: () => []\n },\n rowKey: {\n type: String,\n default: 'id'\n },\n hlightCurrentRow: {\n ype: Boolean,\n default: false\n }\n },\n watch: {\n data(newVal) {\n this.list = newVal;\n },\n defaultSelect: {\n handler() {\n this.setChecked();\n },\n deep: true\n },\n defaultParams(newVal, oldVal) {\n for (const key in newVal) {\n if (newVal[key] != oldVal[key]) {\n this.params = {\n page: 1,\n limit: 15,\n ...newVal\n };\n this.getList();\n break;\n }\n }\n }\n },\n data() {\n return {\n showCheckBox: false,\n params: {\n page: 1,\n limit: 15,\n ...this.defaultParams\n },\n total: 0,\n list: [],\n tableId: `table_${Math.random().toString(36).substring(2, 16)}`,\n selectData: {},\n selectIds: []\n };\n },\n mounted() {\n if (this.$listeners['selection-change']) {\n this.showCheckBox = true;\n }\n if (this.data) {\n this.list = this.data;\n return;\n }\n for (const item of this.defaultSelect) {\n this.selectData[item[this.rowKey]] = item;\n }\n this.getList();\n },\n methods: {\n // 获取数据\n getList(pageOption) {\n if (!this.url) {\n return;\n }\n if (pageOption) {\n this.params.page = pageOption.page;\n this.params.limit = pageOption.limit;\n }\n if (!this.page) {\n delete this.params.page;\n delete this.params.limit;\n }\n const storageParams = sessionStorage.getItem(this.$route.path);\n if (storageParams) {\n sessionStorage.setItem(this.$route.path, JSON.stringify(this.params));\n }\n switch (this.method) {\n case 'get':\n http.get(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n case 'post':\n http.post(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n default:\n break;\n }\n },\n _setData(res) {\n if (this.page) {\n this.list = res.data.records;\n this.total = res.data.total;\n } else {\n this.list = res.data;\n }\n this.setChecked();\n },\n // 设置默认选中\n setChecked() {\n if (this.defaultSelect.length > 0) {\n this.selectIds = this.defaultSelect.map(item => item[this.rowKey]);\n if (this.showCheckBox && this.list) {\n this.$nextTick(() => {\n // 默认选中数据\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n if (this.selectIds.includes(item[this.rowKey])) {\n this.$refs[this.tableId].toggleRowSelection(item, true);\n this.selectData[item[this.rowKey]] = item;\n } else {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n delete this.selectData[item[this.rowKey]];\n }\n }\n }\n });\n }\n } else {\n this.selectIds = [];\n this.selectData = {};\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n }\n }\n }\n },\n // 条件查询\n query(params = {}) {\n if (Object.keys(params).length > 0) {\n this.params = {\n ...this.params,\n ...params,\n page: 1\n };\n }\n this.getList();\n },\n // 点击行\n handleRowClick(row, column, event) {\n this.$emit('row-click', row, column, event);\n },\n handelSelectionChange(_, row) {\n if (this.selectData[row[this.rowKey]]) {\n delete this.selectData[row[this.rowKey]];\n } else {\n this.selectData[row[this.rowKey]] = row;\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n // 全选/全不选\n selectAll(selection) {\n if (selection.length > 0) {\n for (const item of selection) {\n this.selectData[item[this.rowKey]] = item;\n }\n } else {\n for (const item of this.list) {\n delete this.selectData[item[this.rowKey]];\n }\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n setCurrent(index) {\n this.$refs[this.tableId].setCurrentRow(this.list[index]);\n },\n getData() {\n return this.list;\n },\n load(tree, treeNode, resolve) {\n this.$emit('load', tree, treeNode, resolve);\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_page_table_Indexvue_type_script_lang_js = (page_table_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar Index_component = normalizeComponent(\n components_page_table_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_d8da1446_scoped_true_render,\n Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns,\n false,\n null,\n \"d8da1446\",\n null\n \n)\n\n/* harmony default export */ var page_table_Index = (Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=template&id=4148762e&scoped=true\nvar Indexvue_type_template_id_4148762e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-dialog', _vm._b({\n directives: [{\n name: \"dialogDrag\",\n rawName: \"v-dialogDrag\"\n }],\n staticStyle: {\n \"margin-top\": \"0\"\n },\n attrs: {\n \"title\": _vm.title,\n \"visible\": _vm.dialogVisible,\n \"before-close\": _vm.handleClose,\n \"center\": \"\",\n \"close-on-click-modal\": false,\n \"show-close\": _vm.showClose,\n \"append-to-body\": \"\"\n }\n }, 'el-dialog', _vm.$attrs, false), [_c('div', {\n staticStyle: {\n \"overflow-y\": \"auto\",\n \"overflow-x\": \"hidden\",\n \"position\": \"relative\"\n },\n style: {\n maxHeight: _vm.maxHeight,\n minHeight: _vm.minHeight\n }\n }, [_vm._t(\"default\")], 2), _c('div', {\n staticStyle: {\n \"text-align\": \"center\"\n },\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_vm._t(\"footer\")], 2)]);\n};\nvar Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(4100);\nvar external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);\n;// CONCATENATED MODULE: ./src/components/dialog/dialog-drag.js\n// v-dialogDrag: 弹窗拖拽\n\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('dialogDrag', {\n bind(el) {\n const dialogHeaderEl = el.querySelector('.el-dialog__header');\n const dragDom = el.querySelector('.el-dialog');\n dialogHeaderEl.style.cursor = 'move';\n\n // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);\n const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);\n dialogHeaderEl.onmousedown = event => {\n // 鼠标按下,计算当前元素距离可视区的距离\n const disX = event.clientX - dialogHeaderEl.offsetLeft;\n const disY = event.clientY - dialogHeaderEl.offsetTop;\n\n // 获取到的值带px 正则匹配替换\n let styL = null;\n let styT = null;\n\n // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n if (sty.left.includes('\\%')) {\n styL = +document.body.clientWidth * (+sty.left.replace(/\\%/g, '') / 100);\n styT = +document.body.clientHeight * (+sty.top.replace(/\\%/g, '') / 100);\n } else {\n styL = +sty.left.replace(/\\px/g, '');\n styT = +sty.top.replace(/\\px/g, '');\n }\n document.onmousemove = function (e) {\n // 通过事件委托,计算移动的距离\n const l = e.clientX - disX;\n const t = e.clientY - disY;\n\n // 移动当前元素\n dragDom.style.left = `${l + styL}px`;\n dragDom.style.top = `${t + styT}px`;\n };\n document.onmouseup = function () {\n document.onmousemove = null;\n document.onmouseup = null;\n };\n };\n }\n});\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('removeAriaHidden', {\n bind(el) {\n let ariaEls = el.querySelectorAll('.el-radio__original');\n ariaEls.forEach(item => {\n item.removeAttribute('aria-hidden');\n });\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=script&lang=js\n\n/* harmony default export */ var dialog_Indexvue_type_script_lang_js = ({\n name: 'Dialog',\n props: {\n title: {\n type: String,\n default: '提示'\n },\n maxHeight: {\n type: String,\n default: '60vh'\n },\n minHeight: {\n type: String,\n default: '150px'\n }\n },\n data() {\n return {\n dialogVisible: true,\n showClose: false\n };\n },\n mounted() {\n if (this.$listeners['close']) {\n this.showClose = true;\n }\n },\n methods: {\n handleClose() {\n this.$emit('close');\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_dialog_Indexvue_type_script_lang_js = (dialog_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar dialog_Index_component = normalizeComponent(\n components_dialog_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_4148762e_scoped_true_render,\n Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns,\n false,\n null,\n \"4148762e\",\n null\n \n)\n\n/* harmony default export */ var dialog_Index = (dialog_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=template&id=0c5de06e&scoped=true\nvar Indexvue_type_template_id_0c5de06e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-card', {\n staticStyle: {\n \"height\": \"calc(100% - 2px)\",\n \"overflow\": \"auto\"\n },\n attrs: {\n \"shadow\": _vm.shadow\n }\n }, [_c('div', {\n staticClass: \"clearfix\",\n attrs: {\n \"slot\": \"header\"\n },\n slot: \"header\"\n }, [_c('div', {\n staticStyle: {\n \"font-size\": \"16px\"\n }\n }, [_vm.$slots['card-title'] ? [_vm._t(\"card-title\")] : [_vm._v(\" \" + _vm._s(_vm.title) + \" \")]], 2), _c('div', {\n staticStyle: {\n \"flex\": \"1\",\n \"position\": \"relative\"\n }\n }, [_c('div', {\n staticStyle: {\n \"position\": \"absolute\",\n \"right\": \"0px\",\n \"top\": \"-14px\",\n \"width\": \"100%\",\n \"text-align\": \"right\"\n }\n }, [_vm._t(\"card-tools\")], 2)])]), _vm._t(\"default\")], 2);\n};\nvar Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var card_Indexvue_type_script_lang_js = ({\n name: 'Card',\n props: {\n title: {\n type: String,\n default: ''\n },\n shadow: {\n type: String,\n default: ''\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_card_Indexvue_type_script_lang_js = (card_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar card_Index_component = normalizeComponent(\n components_card_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_0c5de06e_scoped_true_render,\n Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns,\n false,\n null,\n \"0c5de06e\",\n null\n \n)\n\n/* harmony default export */ var card_Index = (card_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=template&id=5e81e05e&scoped=true\nvar Indexvue_type_template_id_5e81e05e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.show ? _c('div', [_vm.data.length > 0 ? _vm._l(_vm.data, function (item) {\n return _c('auth-tree', {\n key: item.id,\n attrs: {\n \"data\": item,\n \"props\": _vm.props\n },\n on: {\n \"on-node-expand\": data => _vm.onExpand(data),\n \"on-node-checked\": data => _vm.onChecked(data)\n }\n });\n }) : _vm._e()], 2) : _vm._e();\n};\nvar Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n;// CONCATENATED MODULE: ./src/components/tree/tree.js\n\n// 是否有子节点\nconst hasChildren = data => {\n return Array.isArray(data.children) && data.children.length > 0;\n};\n\n// 创建节点\nconst renderLabel = (h, data, context) => {\n const {\n props,\n listeners\n } = context;\n const clickHandler = listeners['on-node-expand'];\n const checkedHandler = listeners['on-node-checked'];\n const label = data[props.props.label];\n const childNodes = [];\n childNodes.push(label);\n const icoClass = [];\n if (hasChildren(data)) {\n if (data.expand) {\n icoClass.push('icon-icon-dwon');\n } else {\n icoClass.push('icon-icon_right');\n }\n }\n return h('li', {}, [h('i', {\n domProps: {\n className: `iconfont ${icoClass.join(' ')}`\n },\n style: {\n marginLeft: `${14 * data._leve}px`,\n fontSize: '12px',\n transform: 'translateY(-2px)',\n color: '#666'\n },\n on: {\n click: () => {\n clickHandler(data);\n }\n }\n }, ''), h('i', {\n domProps: {\n className: data.checked ? 'iconfont icon-fangxingxuanzhongfil' : 'iconfont icon-fangxingweixuanzhong'\n },\n style: {\n color: '#666'\n },\n on: {\n click: () => {\n checkedHandler(data);\n }\n }\n }, ''), h('span', {}, childNodes)]);\n};\n\n// 创建 node 子节点\nconst renderChildren = (h, list, expand, context) => {\n if (Array.isArray(list) && list.length) {\n const children = list.map(item => {\n return renderNode(h, item, context);\n });\n let cls = ['tree-node-children'];\n if (!expand) {\n cls.push('expand');\n }\n return h('div', {\n domProps: {\n className: cls.join(' ')\n }\n }, children);\n }\n return '';\n};\nconst renderNode = (h, data, context) => {\n const childNodes = [];\n childNodes.push(renderLabel(h, data, context));\n const children = data.children;\n if (hasChildren(data)) {\n childNodes.push(renderChildren(h, children, data.expand, context));\n }\n return h('ul', {\n domProps: {\n className: 'node'\n }\n }, childNodes);\n};\nconst tree_render = (h, context) => {\n const {\n props\n } = context;\n return renderNode(h, props.data, context);\n};\n/* harmony default export */ var tree = (tree_render);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var tree_Indexvue_type_script_lang_js = ({\n name: 'Tree',\n components: {\n AuthTree: {\n render: tree,\n functional: true\n }\n },\n props: {\n data: {\n type: Array,\n default: () => {\n return [];\n }\n },\n props: {\n type: Object,\n default: () => {\n return {\n label: 'name'\n };\n }\n }\n },\n data() {\n return {\n name: 1,\n show: false,\n list: [],\n checked: false\n };\n },\n methods: {\n init(data, leve) {\n data._leve = leve;\n if (data.children && data.children.length > 0) {\n leve++;\n for (const i in data.children) {\n this.init(data.children[i], leve);\n }\n }\n },\n // 刷新\n refresh() {\n this.show = false;\n this.$nextTick(() => {\n this.show = true;\n });\n },\n // 展开/隐藏\n onExpand(data) {\n data.expand = !data.expand;\n this.refresh();\n },\n // 选中/取消选中\n onChecked(data) {\n data.checked = !data.checked;\n this.toolerChecked(this.data, data);\n this.setParentChecked(this.data);\n this.refresh();\n },\n toolerChecked(list, node) {\n for (const i in list) {\n if (list[i].id === node.id) {\n this.setChildChecked(list[i].children, list[i].checked);\n } else {\n this.toolerChecked(list[i].children, node);\n }\n }\n },\n // 选中节点时,设置子节点全选\n setChildChecked(children, checked) {\n for (const i in children) {\n children[i].checked = checked;\n this.setChildChecked(children[i].children, checked);\n }\n },\n // 设置父节点选中\n setParentChecked(data) {\n for (const i in data) {\n this.checked = false;\n if (data[i].children && data[i].children.length > 0) {\n this.childIsChecked(data[i].children);\n if (this.checked) {\n data[i].checked = this.checked;\n }\n this.setParentChecked(data[i].children);\n }\n }\n this.refresh();\n },\n // 判断节点的子节点是否有选中\n childIsChecked(children) {\n for (const i in children) {\n if (children[i].checked) {\n this.checked = true;\n } else {\n this.childIsChecked(children[i].children);\n }\n }\n },\n // 设置默认选中\n setDefaultChecked(defaultIds) {\n for (const i in defaultIds) {\n this.setChecked(this.data, defaultIds[i]);\n }\n this.setParentChecked(this.data);\n },\n // 根据所给的id,设置改项选中\n setChecked(data, id) {\n for (const i in data) {\n if (data[i].id === id) {\n data[i].checked = true;\n break;\n } else {\n if (data[i].children && data[i].children.length > 0) {\n this.setChecked(data[i].children, id);\n }\n }\n }\n },\n // 获取选中选的key\n getCheckedKeys() {\n const keys = [];\n this._getCheckedKeys(this.data, keys);\n return keys;\n },\n // 遍历出选中选的key\n _getCheckedKeys(data, keys) {\n for (const i in data) {\n if (data[i].checked) {\n keys.push(data[i].id);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedKeys(data[i].children, keys);\n }\n }\n },\n // 获取选中选的节点\n getCheckedNodes() {\n const nodes = [];\n this._getCheckedNodes(this.data, nodes);\n return nodes;\n },\n // 遍历出选中选的节点\n _getCheckedNodes(data, nodes) {\n for (const i in data) {\n if (data[i].checked) {\n nodes.push(data[i]);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedNodes(data[i].children, nodes);\n }\n }\n }\n },\n watch: {\n data: {\n handler() {\n for (const i in this.data) {\n this.init(this.data[i], 0);\n }\n this.refresh();\n },\n immediate: true,\n deep: true\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_tree_Indexvue_type_script_lang_js = (tree_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar tree_Index_component = normalizeComponent(\n components_tree_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_5e81e05e_scoped_true_render,\n Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns,\n false,\n null,\n \"5e81e05e\",\n null\n \n)\n\n/* harmony default export */ var tree_Index = (tree_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js\nfunction _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js\nfunction _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js\n\nfunction _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js\n\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js\nvar web_url_search_params_delete = __webpack_require__(4603);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js\nvar web_url_search_params_has = __webpack_require__(7566);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js\nvar web_url_search_params_size = __webpack_require__(8721);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js\nvar es_typed_array_to_reversed = __webpack_require__(7467);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js\nvar es_typed_array_to_sorted = __webpack_require__(4732);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.detached.js\nvar esnext_array_buffer_detached = __webpack_require__(6280);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer.js\nvar esnext_array_buffer_transfer = __webpack_require__(7913);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js\nvar esnext_array_buffer_transfer_to_fixed_length = __webpack_require__(7801);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/utils.js\n\n\n\n\n\n\n\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {\n toString: utils_toString\n} = Object.prototype;\nconst {\n getPrototypeOf\n} = Object;\nconst kindOf = (cache => thing => {\n const str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\nconst kindOfTest = type => {\n type = type.toLowerCase();\n return thing => kindOf(thing) === type;\n};\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {\n isArray\n} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = thing => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = val => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = val => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = thing => {\n let kind;\n return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]'));\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = str => str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {\n allOwnKeys = false\n} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : typeof window !== 'undefined' ? window : global;\n})();\nconst isContextDefined = context => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge( /* obj1, obj2, obj3, ... */\n) {\n const {\n caseless\n } = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {\n allOwnKeys\n} = {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {\n allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = content => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = thing => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n const iterator = generator.call(obj);\n let result;\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst utils_hasOwnProperty = (({\n hasOwnProperty\n}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = obj => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n const value = obj[name];\n if (!isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n const define = arr => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nconst noop = () => {};\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\nconst DIGIT = '0123456789';\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {\n length\n } = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length | 0];\n }\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\nconst toJSONObject = obj => {\n const stack = new Array(10);\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n if (!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n stack[i] = undefined;\n return target;\n }\n }\n return source;\n };\n return visit(obj, 0);\n};\nconst isAsyncFn = kindOfTest('AsyncFunction');\nconst isThenable = thing => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n/* harmony default export */ var utils = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosError.js\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack;\n }\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\nconst AxiosError_prototype = AxiosError.prototype;\nconst descriptors = {};\n['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {\n value: code\n };\n});\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(AxiosError_prototype, 'isAxiosError', {\n value: true\n});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(AxiosError_prototype);\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n AxiosError.call(axiosError, error.message, code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n};\n/* harmony default export */ var core_AxiosError = (AxiosError);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ var helpers_null = (null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toFormData.js\n\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n const stack = [];\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ var helpers_toFormData = (toFormData);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nconst AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n const _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ var helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n const _encode = options && options.encode || buildURL_encode;\n const serializeFn = options && options.serialize;\n let serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, options).toString(_encode);\n }\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/InterceptorManager.js\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n/* harmony default export */ var core_InterceptorManager = (InterceptorManager);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ var defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n\n\n\n/* harmony default export */ var classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ var classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ var classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ var browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/common/utils.js\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (product => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0;\n})(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n})();\n\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/index.js\n\n\n/* harmony default export */ var platform = ({\n ...common_utils_namespaceObject,\n ...browser\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function (value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ var helpers_formDataToJSON = (formDataToJSON);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nconst defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http'],\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n const isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n let isFileList;\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), this.formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n if (data && utils.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], method => {\n defaults.headers[method] = {};\n});\n/* harmony default export */ var lib_defaults = (defaults);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ var parseHeaders = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\n\n\nconst $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nconst isValidHeaderName = str => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function (arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n const key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n if (key) {\n const value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n const key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n while (i--) {\n const key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n normalize(format) {\n const self = this;\n const headers = {};\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n const normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n toJSON(asStrings) {\n const obj = Object.create(null);\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n static concat(first, ...targets) {\n const computed = new this(first);\n targets.forEach(target => computed.set(target));\n return computed;\n }\n static accessor(header) {\n const internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n const accessors = internals.accessors;\n const prototype = this.prototype;\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n}\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({\n value\n}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ var core_AxiosHeaders = (AxiosHeaders);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || lib_defaults;\n const context = response || config;\n const headers = core_AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CanceledError.js\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n core_AxiosError.call(this, message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\nutils.inherits(CanceledError, core_AxiosError, {\n __CANCEL__: true\n});\n/* harmony default export */ var cancel_CanceledError = (CanceledError);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, [core_AxiosError.ERR_BAD_REQUEST, core_AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));\n }\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/cookies.js\n\n\n\n/* harmony default export */ var cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n utils.isString(path) && cookie.push('path=' + path);\n utils.isString(domain) && cookie.push('domain=' + domain);\n secure === true && cookie.push('secure');\n document.cookie = cookie.join('; ');\n },\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write() {},\n read() {\n return null;\n },\n remove() {}\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n\n\n\n/* harmony default export */ var isURLSameOrigin = (platform.hasStandardBrowserEnv ?\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}());\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n const now = Date.now();\n const startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n let i = tail;\n let bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n const passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ var helpers_speedometer = (speedometer);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/xhr.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = helpers_speedometer(50, 250);\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n bytesNotified = loaded;\n const data = {\n loaded,\n total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n data[isDownloadStream ? 'download' : 'upload'] = true;\n listener(data);\n };\n}\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ var xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = core_AxiosHeaders.from(config.headers).normalize();\n let {\n responseType,\n withXSRFToken\n } = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n let contentType;\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n const fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || defaults_transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n const protocol = parseProtocol(fullPath);\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/adapters.js\n\n\n\n\nconst knownAdapters = {\n http: helpers_null,\n xhr: xhr\n};\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {\n value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n value\n });\n }\n});\nconst renderReason = reason => `- ${reason}`;\nconst isResolvedHandle = adapter => utils.isFunction(adapter) || adapter === null || adapter === false;\n/* harmony default export */ var adapters = ({\n getAdapter: adapters => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n const {\n length\n } = adapters;\n let nameOrAdapter;\n let adapter;\n const rejectedReasons = {};\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(`Unknown adapter '${id}'`);\n }\n }\n if (adapter) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build'));\n let s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(`There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n },\n adapters: knownAdapters\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n const adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(config, config.transformResponse, response);\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/mergeConfig.js\n\n\n\n\nconst headersToObject = thing => thing instanceof core_AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/env/data.js\nconst VERSION = \"1.6.7\";\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/validator.js\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ var validator = ({\n assertOptions,\n validators\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/Axios.js\n\n\n\n\n\n\n\n\n\n\n\nconst Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error();\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n throw err;\n }\n }\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n const {\n transitional,\n paramsSerializer,\n headers\n } = config;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], method => {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n let promise;\n let i = 0;\n let len;\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n let newConfig = config;\n i = 0;\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n/* harmony default export */ var core_Axios = (Axios);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CancelToken.js\n\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n let resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n let i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n/* harmony default export */ var cancel_CancelToken = (CancelToken);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/HttpStatusCode.js\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ var helpers_HttpStatusCode = (HttpStatusCode);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new core_Axios(defaultConfig);\n const instance = bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = thing => helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ var lib_axios = (axios);\n;// CONCATENATED MODULE: ./src/components/http/index.js\n\n\n\n\n\n\n\n\n\nvar _axios = /*#__PURE__*/new WeakMap();\nvar _requestCount = /*#__PURE__*/new WeakMap();\nvar _loadingInstance = /*#__PURE__*/new WeakMap();\nvar _config = /*#__PURE__*/new WeakMap();\nclass http_Http {\n constructor(options) {\n _classPrivateFieldInitSpec(this, _axios, void 0);\n _classPrivateFieldInitSpec(this, _requestCount, 0);\n // 请求次数\n _classPrivateFieldInitSpec(this, _loadingInstance, null);\n _classPrivateFieldInitSpec(this, _config, {\n baseURL: '',\n timeout: 60 * 1000,\n withCredentials: false,\n successCode: 200,\n errorCode: 500,\n callBackCode: [],\n call: null\n });\n for (const k in _classPrivateFieldGet2(_config, this)) {\n if (options[k]) {\n _classPrivateFieldGet2(_config, this)[k] = options[k];\n }\n }\n lib_axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';\n lib_axios.defaults.headers['Accept'] = 'application/json';\n _classPrivateFieldSet2(_axios, this, lib_axios.create(_classPrivateFieldGet2(_config, this)));\n _classPrivateFieldGet2(_axios, this).interceptors.request.use(config => {\n var _this$requestCount, _this$requestCount2;\n if (!config.params) {\n config.params = {};\n }\n if (_classPrivateFieldGet2(_requestCount, this) == 0) {\n _classPrivateFieldSet2(_loadingInstance, this, loading());\n }\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount = _classPrivateFieldGet2(_requestCount, this), _this$requestCount2 = _this$requestCount++, _this$requestCount)), _this$requestCount2;\n config.headers.authorization = localStorage.getItem('token');\n return config;\n }, error => {\n return Promise.reject(error);\n });\n _classPrivateFieldGet2(_axios, this).interceptors.response.use(response => {\n var _this$requestCount3, _this$requestCount4;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount3 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount4 = _this$requestCount3--, _this$requestCount3)), _this$requestCount4;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return response.data;\n }, error => {\n var _this$requestCount5, _this$requestCount6;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount5 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount6 = _this$requestCount5--, _this$requestCount5)), _this$requestCount6;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return Promise.reject(error);\n });\n }\n _handleResult(success, err, res) {\n if (!res) {\n return;\n }\n if (res.code === _classPrivateFieldGet2(_config, this).successCode) {\n if (typeof success === 'function') {\n success(res);\n }\n } else if (res.code === _classPrivateFieldGet2(_config, this).errorCode) {\n if (typeof err === 'function') {\n err(res);\n } else {\n error(res.msg);\n }\n } else if (_classPrivateFieldGet2(_config, this).callBackCode.includes(res.code) && typeof _classPrivateFieldGet2(_config, this).call === 'function') {\n _classPrivateFieldGet2(_config, this).call(res);\n }\n }\n post(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).post(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n update(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).update(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n get(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).get(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n delete(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).delete(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n downLoad(url, params = {}) {\n _classPrivateFieldGet2(_axios, this).post(url, params, {\n 'responseType': 'blob'\n }).then(res => {\n if (res) {\n let fileName = params.fileName;\n if (!fileName) {\n fileName = res.headers['content-disposition'].split('filename=')[1].replace(/\"/g, '');\n }\n const blob = new Blob([res.data], {\n type: 'application/octet-stream;charset=UTF-8'\n });\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = window.URL.createObjectURL(blob);\n link.download = decodeURIComponent(fileName);\n link.click();\n window.URL.revokeObjectURL(link.href);\n }\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/index.js\n__webpack_require__(3472);\n\n\n\n\n\n\nconst coms = [Index, page_table_Index, dialog_Index, card_Index, tree_Index];\nconst install = function (Vue) {\n coms.forEach(com => {\n Vue.component(com.name, com);\n });\n};\n\n// 导出组件\n/* harmony default export */ var components = (install);\nclass Http extends http_Http {\n constructor(options) {\n super(options);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (components);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxDQUFDLENBQUM7UUFDWnhELE1BQU0sQ0FBQzZ1QixHQUFHLENBQUNHLGVBQWUsQ0FBQ0wsSUFBSSxDQUFDblMsSUFBSSxDQUFDO01BQ3RDO0lBQ0ssQ0FBQyxDQUFDO0VBQ047QUFDSixDOztBQ3ZIQXlTLG1CQUFPLENBQUMsSUFBb0IsQ0FBQztBQUNtQjtBQUNEO0FBQ1A7QUFDSjtBQUNBO0FBQ0E7QUFDcEMsTUFBTU8sSUFBSSxHQUFHLENBQUNOLEtBQVUsRUFBRUMsZ0JBQVMsRUFBRUMsWUFBTSxFQUFFQyxVQUFJLEVBQUVDLFVBQUksQ0FBQztBQUN4RCxNQUFNRyxPQUFPLEdBQUcsU0FBQUEsQ0FBU253QixHQUFHLEVBQUM7RUFDekJrd0IsSUFBSSxDQUFDL3RCLE9BQU8sQ0FBQ2l1QixHQUFHLElBQUk7SUFDaEJwd0IsR0FBRyxDQUFDcXdCLFNBQVMsQ0FBQ0QsR0FBRyxDQUFDdDNCLElBQUksRUFBRXMzQixHQUFHLENBQUM7RUFDaEMsQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7QUFFRDtBQUNBLCtDQUFlRCxPQUFPLEVBQUM7QUFFaEIsTUFBTW5DLElBQUksU0FBU2lDLFNBQUs7RUFDM0Jub0IsV0FBV0EsQ0FBQ2lLLE9BQU8sRUFBQztJQUNoQixLQUFLLENBQUNBLE9BQU8sQ0FBQztFQUNsQjtBQUNKLEM7O0FDckJ3QjtBQUNBO0FBQ3hCLDhDQUFlLFVBQUc7QUFDSSIsInNvdXJjZXMiOlsid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQHZ1ZS9jbGktc2VydmljZS9saWIvY29tbWFuZHMvYnVpbGQvc2V0UHVibGljUGF0aC5qcz82OWNiIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT8yNzMzIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/M2M1ZSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ODJhZiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ZDRkMCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ZTgyOCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcz8yZjg1Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT9mYjFkIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8wOGJhIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/NWQwMyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/Nzc0YSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/ODNjMyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/NThjNyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/MzhhMCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8wZTcxIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLWRyYWcuanM/NWViZCIsIndlYnBhY2s6Ly92dWUyL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/NGRiNiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8yMGU3Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9kaWFsb2cvSW5kZXgudnVlPzg3NzQiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/YjM5ZiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT82MTE4Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT9lN2ZhIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/YzFmYiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/MzBiYiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZTk1OCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZjEyZCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZjMzNSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/OTA5YyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS90cmVlLmpzPzQyYzYiLCJ3ZWJwYWNrOi8vdnVlMi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9iZjY2Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT8xNTRiIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9lNmIwIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9hOGQyIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT83YTAxIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbi5qcz9iODVmIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYy5qcz9jZmRhIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0Q2xhc3NCcmFuZC5qcz8xOWY4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRTZXQyLmpzPzQ0YmYiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZEdldDIuanM/OTI5ZSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanM/NGJlYSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcz9jOWViIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcz8yMDI3Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcz8xYTk0Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcz85YmEzIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanM/OTNlMiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzP2MxNzgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanM/Yzc5MiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanM/MjdhNCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzP2EwZWQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzPzFkYjkiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanM/NmQ3OCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzP2IyZTQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzP2JmOGMiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanM/NzhmMSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanM/OGZlOSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzP2Y0MzciLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanM/ZmYxMCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcz81NGU5Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzPzk1OTciLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzPzc2NjIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzP2MxN2EiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanM/NjhhNCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcz84NzY4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcz8xZDNmIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcz9hMjI3Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanM/NmJjNiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanM/ZjAyZCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcz84Nzk1Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcz85ZmFjIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanM/NTljMCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanM/MWE1YyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcz83ODI1Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzPzRkYzkiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcz9iZDEzIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzExMGYiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanM/MDEzMiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzPzI5ZmIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzcyYzgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanM/MjcyOSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcz9iZDlkIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanM/YzZmMyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcz9mYWQ2Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9odHRwL2luZGV4LmpzP2NjNmEiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2luZGV4LmpzPzE1NjgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9AdnVlL2NsaS1zZXJ2aWNlL2xpYi9jb21tYW5kcy9idWlsZC9lbnRyeS1saWIuanM/OGE5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8vIFRoaXMgZmlsZSBpcyBpbXBvcnRlZCBpbnRvIGxpYi93YyBjbGllbnQgYnVuZGxlcy5cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBjdXJyZW50U2NyaXB0ID0gd2luZG93LmRvY3VtZW50LmN1cnJlbnRTY3JpcHRcbiAgaWYgKHByb2Nlc3MuZW52Lk5FRURfQ1VSUkVOVFNDUklQVF9QT0xZRklMTCkge1xuICAgIHZhciBnZXRDdXJyZW50U2NyaXB0ID0gcmVxdWlyZSgnQHNvZGEvZ2V0LWN1cnJlbnQtc2NyaXB0JylcbiAgICBjdXJyZW50U2NyaXB0ID0gZ2V0Q3VycmVudFNjcmlwdCgpXG5cbiAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYmVjYXVzZSBwcmV2aW91c2x5IHdlIGRpcmVjdGx5IGluY2x1ZGVkIHRoZSBwb2x5ZmlsbFxuICAgIGlmICghKCdjdXJyZW50U2NyaXB0JyBpbiBkb2N1bWVudCkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudCwgJ2N1cnJlbnRTY3JpcHQnLCB7IGdldDogZ2V0Q3VycmVudFNjcmlwdCB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBzcmMgPSBjdXJyZW50U2NyaXB0ICYmIGN1cnJlbnRTY3JpcHQuc3JjLm1hdGNoKC8oLitcXC8pW14vXStcXC5qcyhcXD8uKik/JC8pXG4gIGlmIChzcmMpIHtcbiAgICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IHNyY1sxXSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cbn1cblxuLy8gSW5kaWNhdGUgdG8gd2VicGFjayB0aGF0IHRoaXMgZmlsZSBjYW4gYmUgY29uY2F0ZW5hdGVkXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gKF92bS50b3RhbD4wKT9fYygnZGl2JyxbX2MoJ2VsLXBhZ2luYXRpb24nLF92bS5fYih7YXR0cnM6e1wiYmFja2dyb3VuZFwiOlwiXCIsXCJjdXJyZW50LXBhZ2VcIjpfdm0uY3VycmVudFBhZ2UsXCJwYWdlLXNpemVcIjpfdm0ucGFnZVNpemUsXCJwYWdlLXNpemVzXCI6X3ZtLnBhZ2VTaXplcyxcInRvdGFsXCI6X3ZtLnRvdGFsLFwibGF5b3V0XCI6XCJwcmV2LCBwYWdlciwgbmV4dFwifSxvbjp7XCJzaXplLWNoYW5nZVwiOl92bS5oYW5kbGVTaXplQ2hhbmdlLFwiY3VycmVudC1jaGFuZ2VcIjpfdm0uaGFuZGxlQ3VycmVudENoYW5nZX19LCdlbC1wYWdpbmF0aW9uJyxfdm0uJGF0dHJzLGZhbHNlKSldLDEpOl92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxkaXYgdi1pZj1cInRvdGFsPjBcIj5cclxuICAgICAgICA8ZWwtcGFnaW5hdGlvblxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kIFxyXG4gICAgICAgICAgICA6Y3VycmVudC1wYWdlPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICA6cGFnZS1zaXplPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICA6cGFnZS1zaXplcz1cInBhZ2VTaXplc1wiXHJcbiAgICAgICAgICAgIDp0b3RhbD1cInRvdGFsXCJcclxuICAgICAgICAgICAgbGF5b3V0PVwicHJldiwgcGFnZXIsIG5leHRcIlxyXG4gICAgICAgICAgICB2LWJpbmQ9XCIkYXR0cnNcIlxyXG4gICAgICAgICAgICBAc2l6ZS1jaGFuZ2U9XCJoYW5kbGVTaXplQ2hhbmdlXCJcclxuICAgICAgICAgICAgQGN1cnJlbnQtY2hhbmdlPVwiaGFuZGxlQ3VycmVudENoYW5nZVwiXHJcbiAgICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuICAgIGV4cG9ydCBkZWZhdWx0IHtcclxuICAgICAgICBuYW1lOiAnUGFnaW5hdGlvbicsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgdG90YWw6IHtcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYWdlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxpbWl0OiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAyMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYWdlU2l6ZXM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzEwLCAxNSwgMjAsIDMwLCA1MF1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHZhbClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZVNpemU6IHtcclxuICAgICAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saW1pdFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bGltaXQnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IHtcclxuICAgICAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b3RhbFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dG90YWwnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgaGFuZGxlU2l6ZUNoYW5nZSh2YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2luYXRpb24nLCB7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIGxpbWl0OiB2YWwgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaGFuZGxlQ3VycmVudENoYW5nZSh2YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2luYXRpb24nLCB7IHBhZ2U6IHZhbCwgbGltaXQ6IHRoaXMucGFnZVNpemUgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5lbC1wYWdpbmF0aW9ue1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MjZiNzBmYjQmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi8sXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9XG4gICAgdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbicgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnMgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHtcbiAgICAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIChvcHRpb25zLmZ1bmN0aW9uYWwgPyB0aGlzLnBhcmVudCA6IHRoaXMpLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3RcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbihoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKSA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2YjcwZmI0JnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTI2YjcwZmI0JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjI2YjcwZmI0XCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdkaXYnLHtzdGF0aWNDbGFzczpcInBhZ2UtdGFibGVcIixhdHRyczp7XCJpZFwiOnRoaXMudGFibGVJZH19LFtfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ0YWJsZVwifSxbX2MoJ2VsLXNjcm9sbGJhcicse3N0YXRpY1N0eWxlOntcImhlaWdodFwiOlwiMTAwJVwifX0sW19jKCdlbC10YWJsZScsX3ZtLl9iKHtyZWY6X3ZtLnRhYmxlSWQsYXR0cnM6e1wic3RyaXBlXCI6XCJcIixcImRhdGFcIjpfdm0ubGlzdCxcInJvdy1rZXlcIjpfdm0ucm93S2V5LFwibG9hZFwiOl92bS5sb2FkLFwiaGlnaGxpZ2h0LWN1cnJlbnQtcm93XCI6X3ZtLmhsaWdodEN1cnJlbnRSb3csXCJkZWZhdWx0LWV4cGFuZC1hbGxcIjpfdm0uZGVmYXVsdEV4cGFuZEFsbH0sb246e1wic2VsZWN0XCI6X3ZtLmhhbmRlbFNlbGVjdGlvbkNoYW5nZSxcInNlbGVjdC1hbGxcIjpfdm0uc2VsZWN0QWxsLFwicm93LWNsaWNrXCI6X3ZtLmhhbmRsZVJvd0NsaWNrLFwiZXhwYW5kLWNoYW5nZVwiOnZhbD0+X3ZtLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgdmFsKX19LCdlbC10YWJsZScsX3ZtLiRhdHRycyxmYWxzZSksWyhfdm0uc2hvd0NoZWNrQm94KT9fYygnZWwtdGFibGUtY29sdW1uJyx7YXR0cnM6e1widHlwZVwiOlwic2VsZWN0aW9uXCIsXCJ3aWR0aFwiOlwiNjBweFwiLFwiYWxpZ25cIjpcImNlbnRlclwifX0pOl92bS5fZSgpLChfdm0uc29ydE51bSk/X2MoJ2VsLXRhYmxlLWNvbHVtbicse2F0dHJzOntcInR5cGVcIjpcImluZGV4XCIsXCJ3aWR0aFwiOlwiNjBweFwiLFwibGFiZWxcIjpcIuW6j+WPt1wiLFwiYWxpZ25cIjpcImNlbnRlclwifSxzY29wZWRTbG90czpfdm0uX3UoW3trZXk6XCJkZWZhdWx0XCIsZm46ZnVuY3Rpb24oc2NvcGUpe3JldHVybiBbKF92bS5wYWdlKT9fYygnc3BhbicsW192bS5fdihfdm0uX3MoKF92bS5wYXJhbXMucGFnZS0xKSpfdm0ucGFyYW1zLmxpbWl0K3Njb3BlLiRpbmRleCsxKSldKTpfYygnc3BhbicsW192bS5fdihfdm0uX3Moc2NvcGUuJGluZGV4KzEpKV0pXX19XSxudWxsLGZhbHNlLDI3ODYwMDgwMjEpfSk6X3ZtLl9lKCksX3ZtLl90KFwiZGVmYXVsdFwiKV0sMildLDEpXSwxKSwoX3ZtLnBhZ2UpP19jKCdQYWdpbmF0aW9uJyx7YXR0cnM6e1widG90YWxcIjpfdm0udG90YWwsXCJwYWdlXCI6X3ZtLnBhcmFtcy5wYWdlLFwibGltaXRcIjpfdm0ucGFyYW1zLmxpbWl0fSxvbjp7XCJ1cGRhdGU6cGFnZVwiOmZ1bmN0aW9uKCRldmVudCl7cmV0dXJuIF92bS4kc2V0KF92bS5wYXJhbXMsIFwicGFnZVwiLCAkZXZlbnQpfSxcInBhZ2luYXRpb25cIjpfdm0uZ2V0TGlzdH19KTpfdm0uX2UoKV0sMSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2UtdGFibGVcIiA6aWQ9XCJ0aGlzLnRhYmxlSWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICAgICAgPGVsLXNjcm9sbGJhciBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPGVsLXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJpcGVcclxuICAgICAgICAgICAgICAgICAgICA6cmVmPVwidGFibGVJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICA6cm93LWtleT1cInJvd0tleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmxvYWQ9XCJsb2FkXCJcclxuICAgICAgICAgICAgICAgICAgICA6aGlnaGxpZ2h0LWN1cnJlbnQtcm93PVwiaGxpZ2h0Q3VycmVudFJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgQHNlbGVjdD1cImhhbmRlbFNlbGVjdGlvbkNoYW5nZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgQHNlbGVjdC1hbGw9XCJzZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpkZWZhdWx0LWV4cGFuZC1hbGw9XCJkZWZhdWx0RXhwYW5kQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBAcm93LWNsaWNrPVwiaGFuZGxlUm93Q2xpY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBleHBhbmQtY2hhbmdlPVwidmFsPT4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHZhbClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZWwtdGFibGUtY29sdW1uIHYtaWY9XCJzaG93Q2hlY2tCb3hcIiB0eXBlPVwic2VsZWN0aW9uXCIgd2lkdGg9XCI2MHB4XCIgYWxpZ249XCJjZW50ZXJcIj48L2VsLXRhYmxlLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZWwtdGFibGUtY29sdW1uIHYtaWY9XCJzb3J0TnVtXCIgdHlwZT1cImluZGV4XCIgd2lkdGg9XCI2MHB4XCIgbGFiZWw9XCLluo/lj7dcIiBhbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgc2xvdC1zY29wZT1cInNjb3BlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwicGFnZVwiPnt7KHBhcmFtcy5wYWdlLTEpKnBhcmFtcy5saW1pdCtzY29wZS4kaW5kZXgrMX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlPnt7c2NvcGUuJGluZGV4KzF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2VsLXRhYmxlLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XHJcbiAgICAgICAgICAgICAgICA8L2VsLXRhYmxlPlxyXG4gICAgICAgICAgICA8L2VsLXNjcm9sbGJhcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8UGFnaW5hdGlvbiB2LWlmPVwicGFnZVwiIDp0b3RhbD1cInRvdGFsXCIgOnBhZ2Uuc3luYz1cInBhcmFtcy5wYWdlXCIgOmxpbWl0PVwicGFyYW1zLmxpbWl0XCIgQHBhZ2luYXRpb249XCJnZXRMaXN0XCIgLz5cclxuICAgIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0PlxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnUGFnZVRhYmxlJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgLy8g6Ieq5a6a5LmJ5pWw5o2uXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6K+35rGC5Zyw5Z2AXHJcbiAgICAgICAgdXJsOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOivt+axguaWueW8j1xyXG4gICAgICAgIG1ldGhvZDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdnZXQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmmK/lkKbmmL7npLrluo/lj7dcclxuICAgICAgICBzb3J0TnVtOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOaYr+WQpuWIhumhtVxyXG4gICAgICAgIHBhZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5qCR5b2i6KGo5qC85pe277yM5piv5ZCm5YWo6YOo5bGV5byAXHJcbiAgICAgICAgZGVmYXVsdEV4cGFuZEFsbDoge1xyXG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5Yid5aeL6K+35rGC5Y+C5pWwXHJcbiAgICAgICAgZGVmYXVsdFBhcmFtczoge1xyXG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT4oe30pXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDpu5jorqTpgInkuK3mlbDmja5cclxuICAgICAgICBkZWZhdWx0U2VsZWN0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+W11cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJvd0tleToge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdpZCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhsaWdodEN1cnJlbnRSb3c6IHtcclxuICAgICAgICAgICAgeXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIGRhdGEobmV3VmFsKXtcclxuICAgICAgICAgICAgdGhpcy5saXN0ID0gbmV3VmFsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVmYXVsdFNlbGVjdDoge1xyXG4gICAgICAgICAgICBoYW5kbGVyKCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVlcDogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVmYXVsdFBhcmFtcyhuZXdWYWwsIG9sZFZhbCl7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gbmV3VmFsKXtcclxuICAgICAgICAgICAgICAgIGlmKG5ld1ZhbFtrZXldICE9IG9sZFZhbFtrZXldKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHtwYWdlOiAxLCBsaW1pdDogMTUsIC4uLm5ld1ZhbH07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybntcclxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiBmYWxzZSxcclxuICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgbGltaXQ6IDE1LFxyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kZWZhdWx0UGFyYW1zXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgICAgICBsaXN0OiBbXSxcclxuICAgICAgICAgICAgdGFibGVJZDogYHRhYmxlXyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE2KX1gLFxyXG4gICAgICAgICAgICBzZWxlY3REYXRhOiB7fSxcclxuICAgICAgICAgICAgc2VsZWN0SWRzOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZCgpe1xyXG4gICAgICAgIGlmKHRoaXMuJGxpc3RlbmVyc1snc2VsZWN0aW9uLWNoYW5nZSddKXtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmRhdGEpe1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5kZWZhdWx0U2VsZWN0KXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAvLyDojrflj5bmlbDmja5cclxuICAgICAgICBnZXRMaXN0KHBhZ2VPcHRpb24pe1xyXG4gICAgICAgICAgICBpZighdGhpcy51cmwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHBhZ2VPcHRpb24pe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMucGFnZSA9IHBhZ2VPcHRpb24ucGFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLmxpbWl0ID0gcGFnZU9wdGlvbi5saW1pdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighdGhpcy5wYWdlKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyYW1zLmxpbWl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VQYXJhbXMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuJHJvdXRlLnBhdGgpO1xyXG4gICAgICAgICAgICBpZihzdG9yYWdlUGFyYW1zKXtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy4kcm91dGUucGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhbXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzd2l0Y2godGhpcy5tZXRob2Qpe1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZ2V0JzpcclxuICAgICAgICAgICAgICAgICAgICBodHRwLmdldCh0aGlzLnVybCwgdGhpcy5wYXJhbXMsIChyZXMpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGEocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3Bvc3QnOlxyXG4gICAgICAgICAgICAgICAgICAgIGh0dHAucG9zdCh0aGlzLnVybCwgdGhpcy5wYXJhbXMsIChyZXMpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGEocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9zZXREYXRhKHJlcyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGFnZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSByZXMuZGF0YS5yZWNvcmRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcy5kYXRhLnRvdGFsO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6K6+572u6buY6K6k6YCJ5LitXHJcbiAgICAgICAgc2V0Q2hlY2tlZCgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmRlZmF1bHRTZWxlY3QubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSB0aGlzLmRlZmF1bHRTZWxlY3QubWFwKChpdGVtKT0+aXRlbVt0aGlzLnJvd0tleV0pO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zaG93Q2hlY2tCb3ggJiYgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDpu5jorqTpgInkuK3mlbDmja5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RJZHMuaW5jbHVkZXMoaXRlbVt0aGlzLnJvd0tleV0pKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhID0ge307XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5p2h5Lu25p+l6K+iXHJcbiAgICAgICAgcXVlcnkocGFyYW1zPXt9KXtcclxuICAgICAgICAgICAgaWYoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHsuLi50aGlzLnBhcmFtcywgLi4ucGFyYW1zLCBwYWdlOiAxfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmdldExpc3QoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOeCueWHu+ihjFxyXG4gICAgICAgIGhhbmRsZVJvd0NsaWNrKHJvdywgY29sdW1uLCBldmVudCl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jvdy1jbGljaycsIHJvdywgY29sdW1uLCBldmVudCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYW5kZWxTZWxlY3Rpb25DaGFuZ2UoXywgcm93KXtcclxuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRhW3Jvd1t0aGlzLnJvd0tleV1dKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV07XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW3Jvd1t0aGlzLnJvd0tleV1dID0gcm93O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkxpc3QgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gc2VsZWN0aW9uTGlzdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCBzZWxlY3Rpb25MaXN0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOWFqOmAiS/lhajkuI3pgIlcclxuICAgICAgICBzZWxlY3RBbGwoc2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgaWYoc2VsZWN0aW9uLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25MaXN0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLnNlbGVjdERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IHNlbGVjdGlvbkxpc3QubWFwKChpdGVtKT0+aXRlbVt0aGlzLnJvd0tleV0pO1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgc2VsZWN0aW9uTGlzdCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXRDdXJyZW50KGluZGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS5zZXRDdXJyZW50Um93KHRoaXMubGlzdFtpbmRleF0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0RGF0YSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZCh0cmVlLCB0cmVlTm9kZSwgcmVzb2x2ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2xvYWQnLCB0cmVlLCB0cmVlTm9kZSwgcmVzb2x2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG48L3NjcmlwdD5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4gICAgLnBhZ2UtdGFibGV7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgIC50YWJsZXtcclxuICAgICAgICAgICAgZmxleDogYXV0byAxIDE7XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC9kZWVwLy5lbC10YWJsZSB0aGVhZHtcclxuICAgICAgICBjb2xvcjogIzMzMzMzMztcclxuICAgIH1cclxuICAgIC9kZWVwLy5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGN0ZBO1xyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlLS1taW5pIC5lbC10YWJsZV9fY2VsbHtcclxuICAgICAgICBwYWRkaW5nOiAzcHggMDtcclxuICAgIH1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWQ4ZGExNDQ2JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kOGRhMTQ0NiZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1kOGRhMTQ0NiZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCJkOGRhMTQ0NlwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZWwtZGlhbG9nJyxfdm0uX2Ioe2RpcmVjdGl2ZXM6W3tuYW1lOlwiZGlhbG9nRHJhZ1wiLHJhd05hbWU6XCJ2LWRpYWxvZ0RyYWdcIn1dLHN0YXRpY1N0eWxlOntcIm1hcmdpbi10b3BcIjpcIjBcIn0sYXR0cnM6e1widGl0bGVcIjpfdm0udGl0bGUsXCJ2aXNpYmxlXCI6X3ZtLmRpYWxvZ1Zpc2libGUsXCJiZWZvcmUtY2xvc2VcIjpfdm0uaGFuZGxlQ2xvc2UsXCJjZW50ZXJcIjpcIlwiLFwiY2xvc2Utb24tY2xpY2stbW9kYWxcIjpmYWxzZSxcInNob3ctY2xvc2VcIjpfdm0uc2hvd0Nsb3NlLFwiYXBwZW5kLXRvLWJvZHlcIjpcIlwifX0sJ2VsLWRpYWxvZycsX3ZtLiRhdHRycyxmYWxzZSksW19jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJvdmVyZmxvdy15XCI6XCJhdXRvXCIsXCJvdmVyZmxvdy14XCI6XCJoaWRkZW5cIixcInBvc2l0aW9uXCI6XCJyZWxhdGl2ZVwifSxzdHlsZTooe21heEhlaWdodDogX3ZtLm1heEhlaWdodCwgbWluSGVpZ2h0OiBfdm0ubWluSGVpZ2h0fSl9LFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwyKSxfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1widGV4dC1hbGlnblwiOlwiY2VudGVyXCJ9LGF0dHJzOntcInNsb3RcIjpcImZvb3RlclwifSxzbG90OlwiZm9vdGVyXCJ9LFtfdm0uX3QoXCJmb290ZXJcIildLDIpXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiLy8gdi1kaWFsb2dEcmFnOiDlvLnnqpfmi5bmi71cclxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xyXG5WdWUuZGlyZWN0aXZlKCdkaWFsb2dEcmFnJywge1xyXG4gICAgYmluZChlbCkge1xyXG5cdFx0Y29uc3QgZGlhbG9nSGVhZGVyRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuZWwtZGlhbG9nX19oZWFkZXInKTtcclxuXHRcdGNvbnN0IGRyYWdEb20gPSBlbC5xdWVyeVNlbGVjdG9yKCcuZWwtZGlhbG9nJyk7XHJcblx0XHRkaWFsb2dIZWFkZXJFbC5zdHlsZS5jdXJzb3IgPSAnbW92ZSc7XHJcblxyXG5cdFx0Ly8g6I635Y+W5Y6f5pyJ5bGe5oCnIGllIGRvbeWFg+e0oC5jdXJyZW50U3R5bGUg54Gr54uQ6LC35q2MIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbeWFg+e0oCwgbnVsbCk7XHJcblx0XHRjb25zdCBzdHkgPSBkcmFnRG9tLmN1cnJlbnRTdHlsZSB8fCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkcmFnRG9tLCBudWxsKTtcclxuXHJcblx0XHRkaWFsb2dIZWFkZXJFbC5vbm1vdXNlZG93biA9IChldmVudCk9PntcclxuXHRcdFx0Ly8g6byg5qCH5oyJ5LiL77yM6K6h566X5b2T5YmN5YWD57Sg6Led56a75Y+v6KeG5Yy655qE6Led56a7XHJcblx0XHRcdGNvbnN0IGRpc1ggPSBldmVudC5jbGllbnRYIC0gZGlhbG9nSGVhZGVyRWwub2Zmc2V0TGVmdDtcclxuXHRcdFx0Y29uc3QgZGlzWSA9IGV2ZW50LmNsaWVudFkgLSBkaWFsb2dIZWFkZXJFbC5vZmZzZXRUb3A7XHJcblxyXG5cdFx0XHQvLyDojrflj5bliLDnmoTlgLzluKZweCDmraPliJnljLnphY3mm7/mjaJcclxuXHRcdFx0bGV0IHN0eUw9bnVsbDtcclxuXHRcdFx0bGV0IHN0eVQ9bnVsbDtcclxuXHJcblx0XHRcdC8vIOazqOaEj+WcqGll5LitIOesrOS4gOasoeiOt+WPluWIsOeahOWAvOS4uue7hOS7tuiHquW4pjUwJSDnp7vliqjkuYvlkI7otYvlgLzkuLpweFxyXG5cdFx0XHRpZiAoc3R5LmxlZnQuaW5jbHVkZXMoJ1xcJScpKSB7XHJcblx0XHRcdFx0c3R5TCA9ICtkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICogKCtzdHkubGVmdC5yZXBsYWNlKC9cXCUvZywgJycpIC8gMTAwKTtcclxuXHRcdFx0XHRzdHlUID0gK2RvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0ICogKCtzdHkudG9wLnJlcGxhY2UoL1xcJS9nLCAnJykgLyAxMDApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHN0eUwgPSArc3R5LmxlZnQucmVwbGFjZSgvXFxweC9nLCAnJyk7XHJcblx0XHRcdFx0c3R5VCA9ICtzdHkudG9wLnJlcGxhY2UoL1xccHgvZywgJycpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHQvLyDpgJrov4fkuovku7blp5TmiZjvvIzorqHnrpfnp7vliqjnmoTot53nprtcclxuXHRcdFx0XHRjb25zdCBsID0gZS5jbGllbnRYIC0gZGlzWDtcclxuXHRcdFx0XHRjb25zdCB0ID0gZS5jbGllbnRZIC0gZGlzWTtcclxuXHJcblx0XHRcdFx0Ly8g56e75Yqo5b2T5YmN5YWD57SgXHJcblx0XHRcdFx0ZHJhZ0RvbS5zdHlsZS5sZWZ0ID0gYCR7bCArIHN0eUx9cHhgO1xyXG5cdFx0XHRcdGRyYWdEb20uc3R5bGUudG9wID0gYCR7dCArIHN0eVR9cHhgO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xyXG5cdFx0XHRcdGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdH1cclxufSk7XHJcblxyXG5WdWUuZGlyZWN0aXZlKCdyZW1vdmVBcmlhSGlkZGVuJywge1xyXG5cdGJpbmQoZWwpIHtcclxuXHRcdGxldCBhcmlhRWxzID0gZWwucXVlcnlTZWxlY3RvckFsbCgnLmVsLXJhZGlvX19vcmlnaW5hbCcpO1xyXG5cdFx0YXJpYUVscy5mb3JFYWNoKChpdGVtKT0+e1xyXG5cdFx0XHRpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufSk7IiwiPHRlbXBsYXRlPlxyXG4gICAgPGVsLWRpYWxvZyB2LWJpbmQ9XCIkYXR0cnNcIiA6dGl0bGU9XCJ0aXRsZVwiIDp2aXNpYmxlPVwiZGlhbG9nVmlzaWJsZVwiIHYtZGlhbG9nRHJhZyA6YmVmb3JlLWNsb3NlPVwiaGFuZGxlQ2xvc2VcIiBjZW50ZXIgOmNsb3NlLW9uLWNsaWNrLW1vZGFsPVwiZmFsc2VcIiA6c2hvdy1jbG9zZT1cInNob3dDbG9zZVwiIGFwcGVuZC10by1ib2R5IHN0eWxlPVwibWFyZ2luLXRvcDogMDtcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bztvdmVyZmxvdy14OiBoaWRkZW47cG9zaXRpb246IHJlbGF0aXZlO1wiIDpzdHlsZT1cInttYXhIZWlnaHQsIG1pbkhlaWdodH1cIj5cclxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgc2xvdD1cImZvb3RlclwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwiZm9vdGVyXCI+PC9zbG90PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9lbC1kaWFsb2c+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5pbXBvcnQgJy4vZGlhbG9nLWRyYWcnO1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnRGlhbG9nJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAn5o+Q56S6J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWF4SGVpZ2h0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJzYwdmgnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtaW5IZWlnaHQ6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnMTUwcHgnXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRhdGEoKXtcclxuICAgICAgICByZXR1cm57XHJcbiAgICAgICAgICAgIGRpYWxvZ1Zpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgIHNob3dDbG9zZTogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoKXtcclxuICAgICAgICBpZih0aGlzLiRsaXN0ZW5lcnNbJ2Nsb3NlJ10pe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBoYW5kbGVDbG9zZSgpe1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi9kZWVwLy5lbC1kaWFsb2dfX2hlYWRlcntcclxuICAgIHBhZGRpbmc6IDE1cHggMjBweDtcclxufVxyXG4vZGVlcC8uZWwtZGlhbG9nLS1jZW50ZXIgLmVsLWRpYWxvZ19fYm9keXtcclxuICAgIHBhZGRpbmc6IDIwcHg7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQxNDg3NjJlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MTQ4NzYyZSZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00MTQ4NzYyZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI0MTQ4NzYyZVwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZWwtY2FyZCcse3N0YXRpY1N0eWxlOntcImhlaWdodFwiOlwiY2FsYygxMDAlIC0gMnB4KVwiLFwib3ZlcmZsb3dcIjpcImF1dG9cIn0sYXR0cnM6e1wic2hhZG93XCI6X3ZtLnNoYWRvd319LFtfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJjbGVhcmZpeFwiLGF0dHJzOntcInNsb3RcIjpcImhlYWRlclwifSxzbG90OlwiaGVhZGVyXCJ9LFtfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wiZm9udC1zaXplXCI6XCIxNnB4XCJ9fSxbKF92bS4kc2xvdHNbJ2NhcmQtdGl0bGUnXSk/W192bS5fdChcImNhcmQtdGl0bGVcIildOltfdm0uX3YoXCIgXCIrX3ZtLl9zKF92bS50aXRsZSkrXCIgXCIpXV0sMiksX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcImZsZXhcIjpcIjFcIixcInBvc2l0aW9uXCI6XCJyZWxhdGl2ZVwifX0sW19jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJwb3NpdGlvblwiOlwiYWJzb2x1dGVcIixcInJpZ2h0XCI6XCIwcHhcIixcInRvcFwiOlwiLTE0cHhcIixcIndpZHRoXCI6XCIxMDAlXCIsXCJ0ZXh0LWFsaWduXCI6XCJyaWdodFwifX0sW192bS5fdChcImNhcmQtdG9vbHNcIildLDIpXSldKSxfdm0uX3QoXCJkZWZhdWx0XCIpXSwyKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCI8dGVtcGxhdGU+XHJcbiAgICA8ZWwtY2FyZCA6c2hhZG93PVwic2hhZG93XCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7b3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgICAgPGRpdiBzbG90PVwiaGVhZGVyXCIgY2xhc3M9XCJjbGVhcmZpeFwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAxNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCIkc2xvdHNbJ2NhcmQtdGl0bGUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJjYXJkLXRpdGxlXCI+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTtwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAtMTRweDt3aWR0aDogMTAwJTt0ZXh0LWFsaWduOiByaWdodDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiY2FyZC10b29sc1wiPjwvc2xvdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c2xvdD48L3Nsb3Q+XHJcbiAgICA8L2VsLWNhcmQ+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnQ2FyZCcsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNoYWRvdzoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLmNsZWFyZml4e1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTBjNWRlMDZlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzVkZTA2ZSZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0wYzVkZTA2ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIwYzVkZTA2ZVwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiAoX3ZtLnNob3cpP19jKCdkaXYnLFsoX3ZtLmRhdGEubGVuZ3RoID4gMCk/X3ZtLl9sKChfdm0uZGF0YSksZnVuY3Rpb24oaXRlbSl7cmV0dXJuIF9jKCdhdXRoLXRyZWUnLHtrZXk6aXRlbS5pZCxhdHRyczp7XCJkYXRhXCI6aXRlbSxcInByb3BzXCI6X3ZtLnByb3BzfSxvbjp7XCJvbi1ub2RlLWV4cGFuZFwiOihkYXRhKT0+X3ZtLm9uRXhwYW5kKGRhdGEpLFwib24tbm9kZS1jaGVja2VkXCI6KGRhdGEpPT5fdm0ub25DaGVja2VkKGRhdGEpfX0pfSk6X3ZtLl9lKCldLDIpOl92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIi8vIOaYr+WQpuacieWtkOiKgueCuVxuY29uc3QgaGFzQ2hpbGRyZW4gPSAoZGF0YSk9PntcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhLmNoaWxkcmVuKSAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG59O1xuXG4vLyDliJvlu7roioLngrlcbmV4cG9ydCBjb25zdCByZW5kZXJMYWJlbCA9IChoLCBkYXRhLCBjb250ZXh0KT0+e1xuICAgIGNvbnN0IHtwcm9wcywgbGlzdGVuZXJzfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgY2xpY2tIYW5kbGVyID0gbGlzdGVuZXJzWydvbi1ub2RlLWV4cGFuZCddO1xuICAgIGNvbnN0IGNoZWNrZWRIYW5kbGVyID0gbGlzdGVuZXJzWydvbi1ub2RlLWNoZWNrZWQnXTtcbiAgICBjb25zdCBsYWJlbCA9IGRhdGFbcHJvcHMucHJvcHMubGFiZWxdO1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBbXTtcbiAgICBjaGlsZE5vZGVzLnB1c2gobGFiZWwpO1xuXG4gICAgY29uc3QgaWNvQ2xhc3MgPSBbXTtcbiAgICBpZihoYXNDaGlsZHJlbihkYXRhKSl7XG4gICAgICAgIGlmKGRhdGEuZXhwYW5kKXtcbiAgICAgICAgICAgIGljb0NsYXNzLnB1c2goJ2ljb24taWNvbi1kd29uJyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWNvQ2xhc3MucHVzaCgnaWNvbi1pY29uX3JpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGgoJ2xpJywge1xuICAgIH0sIFtcbiAgICAgICAgaCgnaScsIHtcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBgaWNvbmZvbnQgJHtpY29DbGFzcy5qb2luKCcgJyl9YFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogYCR7MTQqZGF0YS5fbGV2ZX1weGAsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0ycHgpJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJyM2NjYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgY2xpY2tIYW5kbGVyKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgJycpLFxuICAgICAgICBoKCdpJywge1xuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGRhdGEuY2hlY2tlZD8naWNvbmZvbnQgaWNvbi1mYW5neGluZ3h1YW56aG9uZ2ZpbCc6J2ljb25mb250IGljb24tZmFuZ3hpbmd3ZWl4dWFuemhvbmcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJyM2NjYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZEhhbmRsZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAnJyksXG4gICAgICAgIGgoJ3NwYW4nLCB7XG5cbiAgICAgICAgfSwgY2hpbGROb2RlcylcbiAgICBdKTtcbn07XG5cbi8vIOWIm+W7uiBub2RlIOWtkOiKgueCuVxuZXhwb3J0IGNvbnN0IHJlbmRlckNoaWxkcmVuID0gKGgsIGxpc3QsIGV4cGFuZCwgY29udGV4dCk9PntcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSAmJiBsaXN0Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGxpc3QubWFwKGl0ZW09PntcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJOb2RlKGgsIGl0ZW0sIGNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNscyA9IFsndHJlZS1ub2RlLWNoaWxkcmVuJ107XG4gICAgICAgIGlmKCFleHBhbmQpe1xuICAgICAgICAgICAgY2xzLnB1c2goJ2V4cGFuZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoKCdkaXYnLCB7XG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2xzLmpvaW4oJyAnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJOb2RlID0gKGgsIGRhdGEsIGNvbnRleHQpPT57XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IFtdO1xuICAgIGNoaWxkTm9kZXMucHVzaChyZW5kZXJMYWJlbChoLCBkYXRhLCBjb250ZXh0KSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkcmVuO1xuICAgIGlmKGhhc0NoaWxkcmVuKGRhdGEpKXtcbiAgICAgICAgY2hpbGROb2Rlcy5wdXNoKHJlbmRlckNoaWxkcmVuKGgsIGNoaWxkcmVuLCBkYXRhLmV4cGFuZCwgY29udGV4dCkpO1xuICAgIH1cblxuICAgIHJldHVybiBoKCd1bCcsIHtcbiAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25vZGUnXG4gICAgICAgIH1cbiAgICB9LCBjaGlsZE5vZGVzKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXIgPSAoaCwgY29udGV4dCk9PntcbiAgICBjb25zdCB7cHJvcHN9ID0gY29udGV4dDtcbiAgICByZXR1cm4gcmVuZGVyTm9kZShoLCBwcm9wcy5kYXRhLCBjb250ZXh0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcjsiLCI8dGVtcGxhdGU+XG4gICAgPGRpdiB2LWlmPVwic2hvd1wiPlxuICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImRhdGEubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGF1dGgtdHJlZSB2LWZvcj1cIml0ZW0gaW4gZGF0YVwiXG4gICAgICAgICAgICAgICAgOmtleT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOnByb3BzPVwicHJvcHNcIlxuICAgICAgICAgICAgICAgIEBvbi1ub2RlLWV4cGFuZD1cIihkYXRhKT0+b25FeHBhbmQoZGF0YSlcIlxuICAgICAgICAgICAgICAgIEBvbi1ub2RlLWNoZWNrZWQ9XCIoZGF0YSk9Pm9uQ2hlY2tlZChkYXRhKVwiXG4gICAgICAgICAgICA+PC9hdXRoLXRyZWU+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHJlbmRlciBmcm9tICcuL3RyZWUnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdUcmVlJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEF1dGhUcmVlOiB7XG4gICAgICAgICAgICByZW5kZXIsXG4gICAgICAgICAgICBmdW5jdGlvbmFsOiB0cnVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgZGVmYXVsdDogKCk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnbmFtZSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRhKCl7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiAxLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBsaXN0OiBbXSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGluaXQoZGF0YSwgbGV2ZSl7XG4gICAgICAgICAgICBkYXRhLl9sZXZlID0gbGV2ZTtcbiAgICAgICAgICAgIGlmKGRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICBsZXZlKys7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YS5jaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChkYXRhLmNoaWxkcmVuW2ldLCBsZXZlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWIt+aWsFxuICAgICAgICByZWZyZXNoKCl7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyDlsZXlvIAv6ZqQ6JePXG4gICAgICAgIG9uRXhwYW5kKGRhdGEpe1xuICAgICAgICAgICAgZGF0YS5leHBhbmQgPSAhZGF0YS5leHBhbmQ7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YCJ5LitL+WPlua2iOmAieS4rVxuICAgICAgICBvbkNoZWNrZWQoZGF0YSl7XG4gICAgICAgICAgICBkYXRhLmNoZWNrZWQgPSAhZGF0YS5jaGVja2VkO1xuICAgICAgICAgICAgdGhpcy50b29sZXJDaGVja2VkKHRoaXMuZGF0YSwgZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICB0b29sZXJDaGVja2VkKGxpc3QsIG5vZGUpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gbGlzdCl7XG4gICAgICAgICAgICAgICAgaWYobGlzdFtpXS5pZCA9PT0gbm9kZS5pZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hpbGRDaGVja2VkKGxpc3RbaV0uY2hpbGRyZW4sIGxpc3RbaV0uY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbGVyQ2hlY2tlZChsaXN0W2ldLmNoaWxkcmVuLCBub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmAieS4reiKgueCueaXtu+8jOiuvue9ruWtkOiKgueCueWFqOmAiVxuICAgICAgICBzZXRDaGlsZENoZWNrZWQoY2hpbGRyZW4sIGNoZWNrZWQpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hpbGRDaGVja2VkKGNoaWxkcmVuW2ldLmNoaWxkcmVuLCBjaGVja2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6K6+572u54i26IqC54K56YCJ5LitXG4gICAgICAgIHNldFBhcmVudENoZWNrZWQoZGF0YSl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJc0NoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldLmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnRDaGVja2VkKGRhdGFbaV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyDliKTmlq3oioLngrnnmoTlrZDoioLngrnmmK/lkKbmnInpgInkuK1cbiAgICAgICAgY2hpbGRJc0NoZWNrZWQoY2hpbGRyZW4pe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmNoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkSXNDaGVja2VkKGNoaWxkcmVuW2ldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiuvue9rum7mOiupOmAieS4rVxuICAgICAgICBzZXREZWZhdWx0Q2hlY2tlZChkZWZhdWx0SWRzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRlZmF1bHRJZHMpe1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCh0aGlzLmRhdGEsIGRlZmF1bHRJZHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnRDaGVja2VkKHRoaXMuZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOagueaNruaJgOe7meeahGlk77yM6K6+572u5pS56aG56YCJ5LitXG4gICAgICAgIHNldENoZWNrZWQoZGF0YSwgaWQpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5pZCA9PT0gaWQpe1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2ldLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKGRhdGFbaV0uY2hpbGRyZW4sIGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6I635Y+W6YCJ5Lit6YCJ55qEa2V5XG4gICAgICAgIGdldENoZWNrZWRLZXlzKCl7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gW107XG4gICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkS2V5cyh0aGlzLmRhdGEsIGtleXMpO1xuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmBjeWOhuWHuumAieS4remAieeahGtleVxuICAgICAgICBfZ2V0Q2hlY2tlZEtleXMoZGF0YSwga2V5cyl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZGF0YVtpXS5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZEtleXMoZGF0YVtpXS5jaGlsZHJlbiwga2V5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDojrflj5bpgInkuK3pgInnmoToioLngrlcbiAgICAgICAgZ2V0Q2hlY2tlZE5vZGVzKCl7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZE5vZGVzKHRoaXMuZGF0YSwgbm9kZXMpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICB9LFxuICAgICAgICAvLyDpgY3ljoblh7rpgInkuK3pgInnmoToioLngrlcbiAgICAgICAgX2dldENoZWNrZWROb2RlcyhkYXRhLCBub2Rlcyl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKGRhdGFbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWROb2RlcyhkYXRhW2ldLmNoaWxkcmVuLCBub2Rlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpIGluIHRoaXMuZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdCh0aGlzLmRhdGFbaV0sIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgIH1cbiAgICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbkBpbXBvcnQgdXJsKC4vaWNvbi9pY29uZm9udC5jc3MpO1xudWx7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgbGl7XG4gICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgLmNoZWNrLWljb3tcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIGhlaWdodDogNXB4O1xuICAgICAgICAgICAgd2lkdGg6IDVweDtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGk6aG92ZXJ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoJGNvbG9yOiAjMDAwMDAwLCAkYWxwaGE6IDAuMSk7XG4gICAgfVxuXG4gICAgLmV4cGFuZHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWU4MWUwNWUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVlODFlMDVlJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVlODFlMDVlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjVlODFlMDVlXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikge1xuICBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7XG4gIH1cbn0iLCJpbXBvcnQgY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiBmcm9tIFwiLi9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7XG4gIGNoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTtcbiAgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikge1xuICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTtcbn0iLCJpbXBvcnQgYXNzZXJ0Q2xhc3NCcmFuZCBmcm9tIFwiLi9hc3NlcnRDbGFzc0JyYW5kLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQyKHMsIGEsIHIpIHtcbiAgcmV0dXJuIHMuc2V0KGFzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByO1xufSIsImltcG9ydCBhc3NlcnRDbGFzc0JyYW5kIGZyb20gXCIuL2Fzc2VydENsYXNzQnJhbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldDIocywgYSkge1xuICByZXR1cm4gcy5nZXQoYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn1cblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn1cblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdXG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufVxuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGVcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoUGxhdGZvcm1Gb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGxcbiIsImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsImNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gKFxuICAocHJvZHVjdCkgPT4ge1xuICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDBcbiAgfSkodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5leHBvcnQge1xuICBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudlxufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwYXJzZUhlYWRlcnMgZnJvbSAnLi4vaGVscGVycy9wYXJzZUhlYWRlcnMuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSBpZih1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscy5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscy5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgIH07XG4gIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH0pKCk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLy4uL2NvcmUvc2V0dGxlLmpzJztcbmltcG9ydCBjb29raWVzIGZyb20gJy4vLi4vaGVscGVycy9jb29raWVzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCBpc1VSTFNhbWVPcmlnaW4gZnJvbSAnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgcGFyc2VQcm90b2NvbCBmcm9tICcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gJy4uL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMnO1xuXG5mdW5jdGlvbiBwcm9ncmVzc0V2ZW50UmVkdWNlcihsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSkge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiBlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlXG4gICAgfTtcblxuICAgIGRhdGFbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ10gPSB0cnVlO1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH07XG59XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIHdpdGhYU1JGVG9rZW59ID0gY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb250ZW50VHlwZTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUoZmFsc2UpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IHJlcXVlc3RIZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICBjb25zdCB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgY29uc3QgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb25maWcuYXV0aC5wYXNzd29yZCkpIDogJyc7XG4gICAgICByZXF1ZXN0SGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihjb25maWcpKTtcblxuICAgICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpKSB7XG4gICAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgICBjb25zdCB4c3JmVmFsdWUgPSBjb25maWcueHNyZkhlYWRlck5hbWUgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXQoY29uZmlnLnhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IGNvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlclxufVxuXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9BeGlvc0hlYWRlcnMuanNcIjtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyA/IHRoaW5nLnRvSlNPTigpIDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuNi43XCI7IiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4uL2Vudi9kYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IEludGVyY2VwdG9yTWFuYWdlciBmcm9tICcuL0ludGVyY2VwdG9yTWFuYWdlci5qcyc7XG5pbXBvcnQgZGlzcGF0Y2hSZXF1ZXN0IGZyb20gJy4vZGlzcGF0Y2hSZXF1ZXN0LmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4vYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJy4uL2hlbHBlcnMvdmFsaWRhdG9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG5cbiAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFja1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscy5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cbiIsImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbjtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnM7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3NcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0dHB7XHJcbiAgICAjYXhpb3M7XHJcbiAgICAjcmVxdWVzdENvdW50ID0gMDsgLy8g6K+35rGC5qyh5pWwXHJcbiAgICAjbG9hZGluZ0luc3RhbmNlID0gbnVsbDtcclxuICAgICNjb25maWcgPSB7XHJcbiAgICAgICAgYmFzZVVSTDogJycsXHJcbiAgICAgICAgdGltZW91dDogNjAgKiAxMDAwLFxyXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXHJcbiAgICAgICAgc3VjY2Vzc0NvZGU6IDIwMCxcclxuICAgICAgICBlcnJvckNvZGU6IDUwMCxcclxuICAgICAgICBjYWxsQmFja0NvZGU6IFtdLFxyXG4gICAgICAgIGNhbGw6IG51bGxcclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xyXG4gICAgICAgIGZvcihjb25zdCBrIGluIHRoaXMuI2NvbmZpZyl7XHJcbiAgICAgICAgICAgIGlmKG9wdGlvbnNba10pe1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jY29uZmlnW2tdID0gb3B0aW9uc1trXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBheGlvcy5kZWZhdWx0cy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnO1xyXG4gICAgICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgIHRoaXMuI2F4aW9zID0gYXhpb3MuY3JlYXRlKHRoaXMuI2NvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMuI2F4aW9zLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShcclxuICAgICAgICAgICAgY29uZmlnPT57XHJcbiAgICAgICAgICAgICAgICBpZighY29uZmlnLnBhcmFtcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhcmFtcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmdJbnN0YW5jZSA9IGxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I9PntcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoXHJcbiAgICAgICAgICAgIHJlc3BvbnNlPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNyZXF1ZXN0Q291bnQtLTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuI3JlcXVlc3RDb3VudCA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudC0tO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2FkaW5nSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKXtcclxuICAgICAgICBpZighcmVzKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihyZXMuY29kZSA9PT0gdGhpcy4jY29uZmlnLnN1Y2Nlc3NDb2RlKXtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWNjZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZSBpZihyZXMuY29kZSA9PT0gdGhpcy4jY29uZmlnLmVycm9yQ29kZSl7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBlcnIocmVzKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBlcnJvcihyZXMubXNnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuI2NvbmZpZy5jYWxsQmFja0NvZGUuaW5jbHVkZXMocmVzLmNvZGUpICYmIHR5cGVvZiB0aGlzLiNjb25maWcuY2FsbCA9PT0gJ2Z1bmN0aW9uJyl7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbmZpZy5jYWxsKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBvc3QodXJsLHBhcmFtcyxzdWNjZXNzLGVycil7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MucG9zdCh1cmwscGFyYW1zKS50aGVuKHJlcz0+e1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSh1cmwscGFyYW1zLHN1Y2Nlc3MsZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy51cGRhdGUodXJsLHBhcmFtcykudGhlbihyZXM9PntcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQodXJsLCBwYXJhbXMsIHN1Y2Nlc3MsIGVycil7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MuZ2V0KHVybCwgeyBwYXJhbXM6IHBhcmFtc30pLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUodXJsLCBwYXJhbXMsIHN1Y2Nlc3MsIGVycil7XHJcblx0XHR0aGlzLiNheGlvcy5kZWxldGUodXJsLCB7IHBhcmFtczogcGFyYW1zfSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHR0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuICAgIGRvd25Mb2FkKHVybCwgcGFyYW1zPXt9KXtcclxuICAgICAgICB0aGlzLiNheGlvcy5wb3N0KHVybCwgcGFyYW1zLCB7J3Jlc3BvbnNlVHlwZSc6ICdibG9iJ30pLnRoZW4ocmVzPT57XHJcblx0XHRcdGlmKHJlcyl7XHJcblx0XHRcdFx0bGV0IGZpbGVOYW1lID0gcGFyYW1zLmZpbGVOYW1lO1xyXG5cdFx0XHRcdGlmKCFmaWxlTmFtZSl7XHJcblx0XHRcdFx0XHRmaWxlTmFtZSA9IHJlcy5oZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10uc3BsaXQoJ2ZpbGVuYW1lPScpWzFdLnJlcGxhY2UoL1wiL2csICcnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXMuZGF0YV0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2NoYXJzZXQ9VVRGLTgnfSk7XHJcblx0XHRcdFx0Y29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuXHRcdFx0XHRsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0bGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblx0XHRcdFx0bGluay5kb3dubG9hZCA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSk7XHJcblx0XHRcdFx0bGluay5jbGljaygpO1xyXG5cdFx0XHRcdHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGxpbmsuaHJlZik7XHJcblx0XHRcdH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsInJlcXVpcmUoJy4vbWVzc2FnZS9pbmRleC5qcycpO1xyXG5pbXBvcnQgUGFnaW5hdGlvbiBmcm9tICcuL3BhZ2luYXRpb24vSW5kZXgudnVlJztcclxuaW1wb3J0IFBhZ2VUYWJsZSBmcm9tICcuL3BhZ2UtdGFibGUvSW5kZXgudnVlJztcclxuaW1wb3J0IERpYWxvZyBmcm9tICcuL2RpYWxvZy9JbmRleC52dWUnO1xyXG5pbXBvcnQgQ2FyZCBmcm9tICcuL2NhcmQvSW5kZXgudnVlJztcclxuaW1wb3J0IFRyZWUgZnJvbSAnLi90cmVlL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBfSHR0cCBmcm9tICcuL2h0dHAvaW5kZXguanMnO1xyXG5jb25zdCBjb21zID0gW1BhZ2luYXRpb24sIFBhZ2VUYWJsZSwgRGlhbG9nLCBDYXJkLCBUcmVlXTtcclxuY29uc3QgaW5zdGFsbCA9IGZ1bmN0aW9uKFZ1ZSl7XHJcbiAgICBjb21zLmZvckVhY2goY29tID0+IHtcclxuICAgICAgICBWdWUuY29tcG9uZW50KGNvbS5uYW1lLCBjb20pO1xyXG4gICAgfSlcclxufVxyXG5cclxuLy8g5a+85Ye657uE5Lu2XHJcbmV4cG9ydCBkZWZhdWx0IGluc3RhbGw7XHJcblxyXG5leHBvcnQgY2xhc3MgSHR0cCBleHRlbmRzIF9IdHRwe1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgJy4vc2V0UHVibGljUGF0aCdcbmltcG9ydCBtb2QgZnJvbSAnfmVudHJ5J1xuZXhwb3J0IGRlZmF1bHQgbW9kXG5leHBvcnQgKiBmcm9tICd+ZW50cnknXG4iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInRvdGFsIiwiX2IiLCJhdHRycyIsImN1cnJlbnRQYWdlIiwicGFnZVNpemUiLCJwYWdlU2l6ZXMiLCJvbiIsImhhbmRsZVNpemVDaGFuZ2UiLCJoYW5kbGVDdXJyZW50Q2hhbmdlIiwiJGF0dHJzIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJuYW1lIiwicHJvcHMiLCJyZXF1aXJlZCIsInR5cGUiLCJOdW1iZXIiLCJkZWZhdWx0IiwicGFnZSIsImxpbWl0IiwiQXJyYXkiLCJjb21wdXRlZCIsImdldCIsInNldCIsInZhbCIsIiRlbWl0IiwidG90YWxDb3VudCIsIm1ldGhvZHMiLCJzdGF0aWNDbGFzcyIsInRhYmxlSWQiLCJzdGF0aWNTdHlsZSIsInJlZiIsImxpc3QiLCJyb3dLZXkiLCJsb2FkIiwiaGxpZ2h0Q3VycmVudFJvdyIsImRlZmF1bHRFeHBhbmRBbGwiLCJoYW5kZWxTZWxlY3Rpb25DaGFuZ2UiLCJzZWxlY3RBbGwiLCJoYW5kbGVSb3dDbGljayIsInNob3dDaGVja0JveCIsInNvcnROdW0iLCJzY29wZWRTbG90cyIsIl91Iiwia2V5IiwiZm4iLCJzY29wZSIsIl92IiwiX3MiLCJwYXJhbXMiLCIkaW5kZXgiLCJfdCIsInVwZGF0ZTpwYWdlIiwiJGV2ZW50IiwiJHNldCIsImdldExpc3QiLCJkYXRhIiwidXJsIiwiU3RyaW5nIiwibWV0aG9kIiwiQm9vbGVhbiIsImRlZmF1bHRQYXJhbXMiLCJPYmplY3QiLCJkZWZhdWx0U2VsZWN0IiwieXBlIiwid2F0Y2giLCJuZXdWYWwiLCJoYW5kbGVyIiwic2V0Q2hlY2tlZCIsImRlZXAiLCJvbGRWYWwiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJzdWJzdHJpbmciLCJzZWxlY3REYXRhIiwic2VsZWN0SWRzIiwibW91bnRlZCIsIiRsaXN0ZW5lcnMiLCJpdGVtIiwicGFnZU9wdGlvbiIsInN0b3JhZ2VQYXJhbXMiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCIkcm91dGUiLCJwYXRoIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJodHRwIiwicmVzIiwiX3NldERhdGEiLCJwb3N0IiwicmVjb3JkcyIsImxlbmd0aCIsIm1hcCIsIiRuZXh0VGljayIsIiRyZWZzIiwiaW5jbHVkZXMiLCJ0b2dnbGVSb3dTZWxlY3Rpb24iLCJxdWVyeSIsImtleXMiLCJyb3ciLCJjb2x1bW4iLCJldmVudCIsIl8iLCJzZWxlY3Rpb25MaXN0IiwidmFsdWVzIiwic2VsZWN0aW9uIiwic2V0Q3VycmVudCIsImluZGV4Iiwic2V0Q3VycmVudFJvdyIsImdldERhdGEiLCJ0cmVlIiwidHJlZU5vZGUiLCJyZXNvbHZlIiwiZGlyZWN0aXZlcyIsInJhd05hbWUiLCJ0aXRsZSIsImRpYWxvZ1Zpc2libGUiLCJoYW5kbGVDbG9zZSIsInNob3dDbG9zZSIsInN0eWxlIiwibWF4SGVpZ2h0IiwibWluSGVpZ2h0Iiwic2xvdCIsIlZ1ZSIsImRpcmVjdGl2ZSIsImJpbmQiLCJlbCIsImRpYWxvZ0hlYWRlckVsIiwicXVlcnlTZWxlY3RvciIsImRyYWdEb20iLCJjdXJzb3IiLCJzdHkiLCJjdXJyZW50U3R5bGUiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwib25tb3VzZWRvd24iLCJkaXNYIiwiY2xpZW50WCIsIm9mZnNldExlZnQiLCJkaXNZIiwiY2xpZW50WSIsIm9mZnNldFRvcCIsInN0eUwiLCJzdHlUIiwibGVmdCIsImRvY3VtZW50IiwiYm9keSIsImNsaWVudFdpZHRoIiwicmVwbGFjZSIsImNsaWVudEhlaWdodCIsInRvcCIsIm9ubW91c2Vtb3ZlIiwiZSIsImwiLCJ0Iiwib25tb3VzZXVwIiwiYXJpYUVscyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwicmVtb3ZlQXR0cmlidXRlIiwic2hhZG93IiwiJHNsb3RzIiwic2hvdyIsIl9sIiwiaWQiLCJvbkV4cGFuZCIsIm9uQ2hlY2tlZCIsImhhc0NoaWxkcmVuIiwiaXNBcnJheSIsImNoaWxkcmVuIiwicmVuZGVyTGFiZWwiLCJoIiwiY29udGV4dCIsImxpc3RlbmVycyIsImNsaWNrSGFuZGxlciIsImNoZWNrZWRIYW5kbGVyIiwibGFiZWwiLCJjaGlsZE5vZGVzIiwicHVzaCIsImljb0NsYXNzIiwiZXhwYW5kIiwiZG9tUHJvcHMiLCJjbGFzc05hbWUiLCJqb2luIiwibWFyZ2luTGVmdCIsIl9sZXZlIiwiZm9udFNpemUiLCJ0cmFuc2Zvcm0iLCJjb2xvciIsImNsaWNrIiwiY2hlY2tlZCIsInJlbmRlckNoaWxkcmVuIiwicmVuZGVyTm9kZSIsImNscyIsImNvbXBvbmVudHMiLCJBdXRoVHJlZSIsImZ1bmN0aW9uYWwiLCJpbml0IiwibGV2ZSIsImkiLCJyZWZyZXNoIiwidG9vbGVyQ2hlY2tlZCIsInNldFBhcmVudENoZWNrZWQiLCJub2RlIiwic2V0Q2hpbGRDaGVja2VkIiwiY2hpbGRJc0NoZWNrZWQiLCJzZXREZWZhdWx0Q2hlY2tlZCIsImRlZmF1bHRJZHMiLCJnZXRDaGVja2VkS2V5cyIsIl9nZXRDaGVja2VkS2V5cyIsImdldENoZWNrZWROb2RlcyIsIm5vZGVzIiwiX2dldENoZWNrZWROb2RlcyIsImltbWVkaWF0ZSIsIl9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uIiwib2JqIiwicHJpdmF0ZUNvbGxlY3Rpb24iLCJoYXMiLCJUeXBlRXJyb3IiLCJjaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uIiwiX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMiLCJwcml2YXRlTWFwIiwidmFsdWUiLCJfYXNzZXJ0Q2xhc3NCcmFuZCIsIm4iLCJhcmd1bWVudHMiLCJhc3NlcnRDbGFzc0JyYW5kIiwiX2NsYXNzUHJpdmF0ZUZpZWxkU2V0MiIsInMiLCJhIiwiciIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldDIiLCJ0aGlzQXJnIiwid3JhcCIsImFwcGx5IiwicHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJraW5kT2YiLCJjYWNoZSIsInRoaW5nIiwic3RyIiwiY2FsbCIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJjcmVhdGUiLCJraW5kT2ZUZXN0IiwidHlwZU9mVGVzdCIsImlzVW5kZWZpbmVkIiwiaXNCdWZmZXIiLCJjb25zdHJ1Y3RvciIsImlzRnVuY3Rpb24iLCJpc0FycmF5QnVmZmVyIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJyZXN1bHQiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImJ1ZmZlciIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzQm9vbGVhbiIsImlzUGxhaW5PYmplY3QiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIml0ZXJhdG9yIiwiaXNEYXRlIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNGaWxlTGlzdCIsImlzU3RyZWFtIiwicGlwZSIsImlzRm9ybURhdGEiLCJraW5kIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJpc1VSTFNlYXJjaFBhcmFtcyIsInRyaW0iLCJhbGxPd25LZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImxlbiIsImZpbmRLZXkiLCJfa2V5IiwiX2dsb2JhbCIsImdsb2JhbFRoaXMiLCJzZWxmIiwiZ2xvYmFsIiwiaXNDb250ZXh0RGVmaW5lZCIsIm1lcmdlIiwiY2FzZWxlc3MiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsImV4dGVuZCIsImIiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwiZGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0eSIsImFzc2lnbiIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJwcm9wRmlsdGVyIiwicHJvcCIsIm1lcmdlZCIsImVuZHNXaXRoIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJ1bmRlZmluZWQiLCJsYXN0SW5kZXgiLCJpbmRleE9mIiwidG9BcnJheSIsImFyciIsImlzVHlwZWRBcnJheSIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiZm9yRWFjaEVudHJ5IiwiZ2VuZXJhdG9yIiwibmV4dCIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiZXhlYyIsImlzSFRNTEZvcm0iLCJ0b0NhbWVsQ2FzZSIsInJlcGxhY2VyIiwibSIsInAxIiwicDIiLCJ0b1VwcGVyQ2FzZSIsImhhc093blByb3BlcnR5IiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsInJldCIsImRlZmluZVByb3BlcnRpZXMiLCJmcmVlemVNZXRob2RzIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiRXJyb3IiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJzcGxpdCIsIm5vb3AiLCJ0b0Zpbml0ZU51bWJlciIsImRlZmF1bHRWYWx1ZSIsImlzRmluaXRlIiwiQUxQSEEiLCJESUdJVCIsIkFMUEhBQkVUIiwiQUxQSEFfRElHSVQiLCJnZW5lcmF0ZVN0cmluZyIsInNpemUiLCJhbHBoYWJldCIsImlzU3BlY0NvbXBsaWFudEZvcm0iLCJ0b0pTT05PYmplY3QiLCJzdGFjayIsInZpc2l0Iiwic291cmNlIiwidGFyZ2V0IiwicmVkdWNlZFZhbHVlIiwiaXNBc3luY0ZuIiwiaXNUaGVuYWJsZSIsInRoZW4iLCJjYXRjaCIsImhhc093blByb3AiLCJ1dGlscyIsIkF4aW9zRXJyb3IiLCJtZXNzYWdlIiwiY29kZSIsImNvbmZpZyIsInJlcXVlc3QiLCJyZXNwb25zZSIsImNhcHR1cmVTdGFja1RyYWNlIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGF0dXMiLCJmcm9tIiwiZXJyb3IiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjYXVzZSIsIlBsYXRmb3JtRm9ybURhdGEiLCJpc1Zpc2l0YWJsZSIsInJlbW92ZUJyYWNrZXRzIiwicmVuZGVyS2V5IiwiZG90cyIsImNvbmNhdCIsImVhY2giLCJ0b2tlbiIsImlzRmxhdEFycmF5Iiwic29tZSIsInByZWRpY2F0ZXMiLCJ0ZXN0IiwidG9Gb3JtRGF0YSIsImZvcm1EYXRhIiwib3B0aW9ucyIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwiZGVmaW5lZCIsIm9wdGlvbiIsInZpc2l0b3IiLCJkZWZhdWx0VmlzaXRvciIsIl9CbG9iIiwiQmxvYiIsInVzZUJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJwb3AiLCJlbmNvZGUiLCJjaGFyTWFwIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWF0Y2giLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsIl9wYWlycyIsImVuY29kZXIiLCJfZW5jb2RlIiwiYnVpbGRVUkwiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJmb3JFYWNoSGFuZGxlciIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNCcm93c2VyIiwiY2xhc3NlcyIsInByb3RvY29scyIsImhhc0Jyb3dzZXJFbnYiLCJoYXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJwcm9kdWN0IiwibmF2aWdhdG9yIiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwicGxhdGZvcm0iLCJ0b1VSTEVuY29kZWRGb3JtIiwiaGVscGVycyIsImlzTm9kZSIsInBhcnNlUHJvcFBhdGgiLCJhcnJheVRvT2JqZWN0IiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJlbnRyaWVzIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJzdHJpbmdpZnlTYWZlbHkiLCJyYXdWYWx1ZSIsInBhcnNlciIsInBhcnNlIiwiZGVmYXVsdHMiLCJ0cmFuc2l0aW9uYWwiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImhlYWRlcnMiLCJjb250ZW50VHlwZSIsImdldENvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwic2V0Q29udGVudFR5cGUiLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsImVudiIsInRyYW5zZm9ybVJlc3BvbnNlIiwiSlNPTlJlcXVlc3RlZCIsInJlc3BvbnNlVHlwZSIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsInRpbWVvdXQiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsImlnbm9yZUR1cGxpY2F0ZU9mIiwicmF3SGVhZGVycyIsInBhcnNlZCIsImxpbmUiLCJwYXJzZUhlYWRlcnMiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJwYXJzZVRva2VucyIsInRva2VucyIsInRva2Vuc1JFIiwiaXNWYWxpZEhlYWRlck5hbWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiZm9ybWF0SGVhZGVyIiwidyIsImNoYXIiLCJidWlsZEFjY2Vzc29ycyIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJjb25maWd1cmFibGUiLCJBeGlvc0hlYWRlcnMiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZXRIZWFkZXIiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsIm1hdGNoZXIiLCJkZWxldGUiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwibm9ybWFsaXplIiwiZm9ybWF0Iiwibm9ybWFsaXplZCIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJmaXJzdCIsImFjY2Vzc29yIiwiaW50ZXJuYWxzIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsInRyYW5zZm9ybURhdGEiLCJmbnMiLCJpc0NhbmNlbCIsIl9fQ0FOQ0VMX18iLCJDYW5jZWxlZEVycm9yIiwiRVJSX0NBTkNFTEVEIiwic2V0dGxlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwiZmxvb3IiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJyZWFkIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93IiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwiYmFzZVVSTCIsInJlbGF0aXZlVVJMIiwiYnVpbGRGdWxsUGF0aCIsInJlcXVlc3RlZFVSTCIsInN0YW5kYXJkQnJvd3NlckVudiIsIm1zaWUiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInNldEF0dHJpYnV0ZSIsInByb3RvY29sIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImNoYXJBdCIsImxvY2F0aW9uIiwiaXNVUkxTYW1lT3JpZ2luIiwicmVxdWVzdFVSTCIsIm5vblN0YW5kYXJkQnJvd3NlckVudiIsInBhcnNlUHJvdG9jb2wiLCJzcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsIm1pbiIsImJ5dGVzIiwidGltZXN0YW1wcyIsImhlYWQiLCJ0YWlsIiwiZmlyc3RTYW1wbGVUUyIsImNodW5rTGVuZ3RoIiwic3RhcnRlZEF0IiwiYnl0ZXNDb3VudCIsInBhc3NlZCIsInJvdW5kIiwiY29va2llcyIsInByb2dyZXNzRXZlbnRSZWR1Y2VyIiwibGlzdGVuZXIiLCJpc0Rvd25sb2FkU3RyZWFtIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsImxvYWRlZCIsImxlbmd0aENvbXB1dGFibGUiLCJwcm9ncmVzc0J5dGVzIiwicmF0ZSIsImluUmFuZ2UiLCJwcm9ncmVzcyIsImVzdGltYXRlZCIsImlzWEhSQWRhcHRlclN1cHBvcnRlZCIsIlhNTEh0dHBSZXF1ZXN0IiwiUHJvbWlzZSIsImRpc3BhdGNoWGhyUmVxdWVzdCIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJ3aXRoWFNSRlRva2VuIiwib25DYW5jZWxlZCIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsImJ0b2EiLCJmdWxsUGF0aCIsIm9wZW4iLCJwYXJhbXNTZXJpYWxpemVyIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VEYXRhIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImVyciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsImhhbmRsZUxvYWQiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJzZXRUaW1lb3V0Iiwib25hYm9ydCIsImhhbmRsZUFib3J0IiwiRUNPTk5BQk9SVEVEIiwib25lcnJvciIsImhhbmRsZUVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJoYW5kbGVUaW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsIkVUSU1FRE9VVCIsInhzcmZWYWx1ZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ3aXRoQ3JlZGVudGlhbHMiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInNlbmQiLCJodHRwQWRhcHRlciIsInhockFkYXB0ZXIiLCJrbm93bkFkYXB0ZXJzIiwieGhyIiwicmVuZGVyUmVhc29uIiwicmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImdldEFkYXB0ZXIiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwic3RhdGUiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsIm9uQWRhcHRlclJlc29sdXRpb24iLCJvbkFkYXB0ZXJSZWplY3Rpb24iLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsInRpbWVvdXRNZXNzYWdlIiwiZGVjb21wcmVzcyIsImJlZm9yZVJlZGlyZWN0IiwidHJhbnNwb3J0IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIiwiY29tcHV0ZUNvbmZpZ1ZhbHVlIiwiY29uZmlnVmFsdWUiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyIsInZhbGlkYXRvciIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImNvbnNvbGUiLCJ3YXJuIiwiYXNzZXJ0T3B0aW9ucyIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJfcmVxdWVzdCIsImR1bW15IiwiYm9vbGVhbiIsImZ1bmN0aW9uIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsInVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJ1bnNoaWZ0IiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwicHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzIiwicHJvbWlzZSIsImNoYWluIiwibmV3Q29uZmlnIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2V0VXJpIiwiZm9yRWFjaE1ldGhvZE5vRGF0YSIsImZvckVhY2hNZXRob2RXaXRoRGF0YSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsImh0dHBNZXRob2QiLCJDYW5jZWxUb2tlbiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJwcm9taXNlRXhlY3V0b3IiLCJfbGlzdGVuZXJzIiwib25mdWxmaWxsZWQiLCJzcGxpY2UiLCJjIiwic3ByZWFkIiwiY2FsbGJhY2siLCJpc0F4aW9zRXJyb3IiLCJwYXlsb2FkIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiYXhpb3MiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsImZvcm1Ub0pTT04iLCJfY2xhc3NQcml2YXRlRmllbGRTZXQiLCJfY2xhc3NQcml2YXRlRmllbGRHZXQiLCJfYXhpb3MiLCJXZWFrTWFwIiwiX3JlcXVlc3RDb3VudCIsIl9sb2FkaW5nSW5zdGFuY2UiLCJfY29uZmlnIiwiSHR0cCIsInN1Y2Nlc3NDb2RlIiwiZXJyb3JDb2RlIiwiY2FsbEJhY2tDb2RlIiwiayIsIl90aGlzJHJlcXVlc3RDb3VudCIsIl90aGlzJHJlcXVlc3RDb3VudDIiLCJsb2FkaW5nIiwiYXV0aG9yaXphdGlvbiIsImxvY2FsU3RvcmFnZSIsIl90aGlzJHJlcXVlc3RDb3VudDMiLCJfdGhpcyRyZXF1ZXN0Q291bnQ0IiwiY2xvc2UiLCJfdGhpcyRyZXF1ZXN0Q291bnQ1IiwiX3RoaXMkcmVxdWVzdENvdW50NiIsIl9oYW5kbGVSZXN1bHQiLCJzdWNjZXNzIiwibXNnIiwidXBkYXRlIiwiZG93bkxvYWQiLCJibG9iIiwibGluayIsImRpc3BsYXkiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJkb3dubG9hZCIsInJldm9rZU9iamVjdFVSTCIsInJlcXVpcmUiLCJQYWdpbmF0aW9uIiwiUGFnZVRhYmxlIiwiRGlhbG9nIiwiQ2FyZCIsIlRyZWUiLCJfSHR0cCIsImNvbXMiLCJpbnN0YWxsIiwiY29tIiwiY29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2601\n");
16
+ eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n Http: function() { return /* reexport */ Http; },\n \"default\": function() { return /* binding */ entry_lib; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: function() { return hasBrowserEnv; },\n hasStandardBrowserEnv: function() { return hasStandardBrowserEnv; },\n hasStandardBrowserWebWorkerEnv: function() { return hasStandardBrowserWebWorkerEnv; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=template&id=26b70fb4&scoped=true\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.total > 0 ? _c('div', [_c('el-pagination', _vm._b({\n attrs: {\n \"background\": \"\",\n \"current-page\": _vm.currentPage,\n \"page-size\": _vm.pageSize,\n \"page-sizes\": _vm.pageSizes,\n \"total\": _vm.total,\n \"layout\": \"prev, pager, next\"\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange\n }\n }, 'el-pagination', _vm.$attrs, false))], 1) : _vm._e();\n};\nvar staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var Indexvue_type_script_lang_js = ({\n name: 'Pagination',\n props: {\n total: {\n required: true,\n type: Number,\n default: 0\n },\n page: {\n type: Number,\n default: 1\n },\n limit: {\n type: Number,\n default: 20\n },\n pageSizes: {\n type: Array,\n default() {\n return [10, 15, 20, 30, 50];\n }\n }\n },\n computed: {\n currentPage: {\n get() {\n return this.page;\n },\n set(val) {\n this.$emit('update:page', val);\n }\n },\n pageSize: {\n get() {\n return this.limit;\n },\n set(val) {\n this.$emit('update:limit', val);\n }\n },\n totalCount: {\n get() {\n return this.total;\n },\n set(val) {\n this.$emit('update:total', val);\n }\n }\n },\n methods: {\n handleSizeChange(val) {\n this.$emit('pagination', {\n page: this.currentPage,\n limit: val\n });\n },\n handleCurrentChange(val) {\n this.$emit('pagination', {\n page: val,\n limit: this.pageSize\n });\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var pagination_Indexvue_type_script_lang_js = (Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n pagination_Indexvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n \"26b70fb4\",\n null\n \n)\n\n/* harmony default export */ var Index = (component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=template&id=d8da1446&scoped=true\nvar Indexvue_type_template_id_d8da1446_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('div', {\n staticClass: \"page-table\",\n attrs: {\n \"id\": this.tableId\n }\n }, [_c('div', {\n staticClass: \"table\"\n }, [_c('el-scrollbar', {\n staticStyle: {\n \"height\": \"100%\"\n }\n }, [_c('el-table', _vm._b({\n ref: _vm.tableId,\n attrs: {\n \"stripe\": \"\",\n \"data\": _vm.list,\n \"row-key\": _vm.rowKey,\n \"load\": _vm.load,\n \"highlight-current-row\": _vm.hlightCurrentRow,\n \"default-expand-all\": _vm.defaultExpandAll\n },\n on: {\n \"select\": _vm.handelSelectionChange,\n \"select-all\": _vm.selectAll,\n \"row-click\": _vm.handleRowClick,\n \"expand-change\": val => _vm.$emit('expand-change', val)\n }\n }, 'el-table', _vm.$attrs, false), [_vm.showCheckBox ? _c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"60px\",\n \"align\": \"center\"\n }\n }) : _vm._e(), _vm.sortNum ? _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60px\",\n \"label\": \"序号\",\n \"align\": \"center\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function (scope) {\n return [_vm.page ? _c('span', [_vm._v(_vm._s((_vm.params.page - 1) * _vm.params.limit + scope.$index + 1))]) : _c('span', [_vm._v(_vm._s(scope.$index + 1))])];\n }\n }], null, false, 2786008021)\n }) : _vm._e(), _vm._t(\"default\")], 2)], 1)], 1), _vm.page ? _c('Pagination', {\n attrs: {\n \"total\": _vm.total,\n \"page\": _vm.params.page,\n \"limit\": _vm.params.limit\n },\n on: {\n \"update:page\": function ($event) {\n return _vm.$set(_vm.params, \"page\", $event);\n },\n \"pagination\": _vm.getList\n }\n }) : _vm._e()], 1);\n};\nvar Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var page_table_Indexvue_type_script_lang_js = ({\n name: 'PageTable',\n props: {\n // 自定义数据\n data: {\n type: Array,\n default: null\n },\n // 请求地址\n url: {\n type: String,\n default: ''\n },\n // 请求方式\n method: {\n type: String,\n default: 'get'\n },\n // 是否显示序号\n sortNum: {\n type: Boolean,\n default: true\n },\n // 是否分页\n page: {\n type: Boolean,\n default: true\n },\n // 树形表格时,是否全部展开\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n // 初始请求参数\n defaultParams: {\n type: Object,\n default: () => ({})\n },\n // 默认选中数据\n defaultSelect: {\n type: Array,\n default: () => []\n },\n rowKey: {\n type: String,\n default: 'id'\n },\n hlightCurrentRow: {\n ype: Boolean,\n default: false\n }\n },\n watch: {\n data(newVal) {\n this.list = newVal;\n },\n defaultSelect: {\n handler() {\n this.setChecked();\n },\n deep: true\n },\n defaultParams(newVal, oldVal) {\n for (const key in newVal) {\n if (newVal[key] != oldVal[key]) {\n this.params = {\n page: 1,\n limit: 15,\n ...newVal\n };\n this.getList();\n break;\n }\n }\n }\n },\n data() {\n return {\n showCheckBox: false,\n params: {\n page: 1,\n limit: 15,\n ...this.defaultParams\n },\n total: 0,\n list: [],\n tableId: `table_${Math.random().toString(36).substring(2, 16)}`,\n selectData: {},\n selectIds: []\n };\n },\n mounted() {\n if (this.$listeners['selection-change']) {\n this.showCheckBox = true;\n }\n if (this.data) {\n this.list = this.data;\n return;\n }\n for (const item of this.defaultSelect) {\n this.selectData[item[this.rowKey]] = item;\n }\n this.getList();\n },\n methods: {\n // 获取数据\n getList(pageOption) {\n if (!this.url) {\n return;\n }\n if (pageOption) {\n this.params.page = pageOption.page;\n this.params.limit = pageOption.limit;\n }\n if (!this.page) {\n delete this.params.page;\n delete this.params.limit;\n }\n const storageParams = sessionStorage.getItem(this.$route.path);\n if (storageParams) {\n sessionStorage.setItem(this.$route.path, JSON.stringify(this.params));\n }\n switch (this.method) {\n case 'get':\n http.get(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n case 'post':\n http.post(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n default:\n break;\n }\n },\n _setData(res) {\n if (this.page) {\n this.list = res.data.records;\n this.total = res.data.total;\n } else {\n this.list = res.data;\n }\n this.setChecked();\n },\n // 设置默认选中\n setChecked() {\n if (this.defaultSelect.length > 0) {\n this.selectIds = this.defaultSelect.map(item => item[this.rowKey]);\n if (this.showCheckBox && this.list) {\n this.$nextTick(() => {\n // 默认选中数据\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n if (this.selectIds.includes(item[this.rowKey])) {\n this.$refs[this.tableId].toggleRowSelection(item, true);\n this.selectData[item[this.rowKey]] = item;\n } else {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n delete this.selectData[item[this.rowKey]];\n }\n }\n }\n });\n }\n } else {\n this.selectIds = [];\n this.selectData = {};\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n }\n }\n }\n },\n // 条件查询\n query(params = {}) {\n if (Object.keys(params).length > 0) {\n this.params = {\n ...this.params,\n ...params,\n page: 1\n };\n }\n this.getList();\n },\n // 点击行\n handleRowClick(row, column, event) {\n this.$emit('row-click', row, column, event);\n },\n handelSelectionChange(_, row) {\n if (this.selectData[row[this.rowKey]]) {\n delete this.selectData[row[this.rowKey]];\n } else {\n this.selectData[row[this.rowKey]] = row;\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n // 全选/全不选\n selectAll(selection) {\n if (selection.length > 0) {\n for (const item of selection) {\n this.selectData[item[this.rowKey]] = item;\n }\n } else {\n for (const item of this.list) {\n delete this.selectData[item[this.rowKey]];\n }\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n setCurrent(index) {\n this.$refs[this.tableId].setCurrentRow(this.list[index]);\n },\n getData() {\n return this.list;\n },\n load(tree, treeNode, resolve) {\n this.$emit('load', tree, treeNode, resolve);\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_page_table_Indexvue_type_script_lang_js = (page_table_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar Index_component = normalizeComponent(\n components_page_table_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_d8da1446_scoped_true_render,\n Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns,\n false,\n null,\n \"d8da1446\",\n null\n \n)\n\n/* harmony default export */ var page_table_Index = (Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=template&id=4148762e&scoped=true\nvar Indexvue_type_template_id_4148762e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-dialog', _vm._b({\n directives: [{\n name: \"dialogDrag\",\n rawName: \"v-dialogDrag\"\n }],\n staticStyle: {\n \"margin-top\": \"0\"\n },\n attrs: {\n \"title\": _vm.title,\n \"visible\": _vm.dialogVisible,\n \"before-close\": _vm.handleClose,\n \"center\": \"\",\n \"close-on-click-modal\": false,\n \"show-close\": _vm.showClose,\n \"append-to-body\": \"\"\n }\n }, 'el-dialog', _vm.$attrs, false), [_c('div', {\n staticStyle: {\n \"overflow-y\": \"auto\",\n \"overflow-x\": \"hidden\",\n \"position\": \"relative\"\n },\n style: {\n maxHeight: _vm.maxHeight,\n minHeight: _vm.minHeight\n }\n }, [_vm._t(\"default\")], 2), _c('div', {\n staticStyle: {\n \"text-align\": \"center\"\n },\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_vm._t(\"footer\")], 2)]);\n};\nvar Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(4100);\nvar external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);\n;// CONCATENATED MODULE: ./src/components/dialog/dialog-drag.js\n// v-dialogDrag: 弹窗拖拽\n\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('dialogDrag', {\n bind(el) {\n const dialogHeaderEl = el.querySelector('.el-dialog__header');\n const dragDom = el.querySelector('.el-dialog');\n dialogHeaderEl.style.cursor = 'move';\n\n // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);\n const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);\n dialogHeaderEl.onmousedown = event => {\n // 鼠标按下,计算当前元素距离可视区的距离\n const disX = event.clientX - dialogHeaderEl.offsetLeft;\n const disY = event.clientY - dialogHeaderEl.offsetTop;\n\n // 获取到的值带px 正则匹配替换\n let styL = null;\n let styT = null;\n\n // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n if (sty.left.includes('\\%')) {\n styL = +document.body.clientWidth * (+sty.left.replace(/\\%/g, '') / 100);\n styT = +document.body.clientHeight * (+sty.top.replace(/\\%/g, '') / 100);\n } else {\n styL = +sty.left.replace(/\\px/g, '');\n styT = +sty.top.replace(/\\px/g, '');\n }\n document.onmousemove = function (e) {\n // 通过事件委托,计算移动的距离\n const l = e.clientX - disX;\n const t = e.clientY - disY;\n\n // 移动当前元素\n dragDom.style.left = `${l + styL}px`;\n dragDom.style.top = `${t + styT}px`;\n };\n document.onmouseup = function () {\n document.onmousemove = null;\n document.onmouseup = null;\n };\n };\n }\n});\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('removeAriaHidden', {\n bind(el) {\n let ariaEls = el.querySelectorAll('.el-radio__original');\n ariaEls.forEach(item => {\n item.removeAttribute('aria-hidden');\n });\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=script&lang=js\n\n/* harmony default export */ var dialog_Indexvue_type_script_lang_js = ({\n name: 'Dialog',\n props: {\n title: {\n type: String,\n default: '提示'\n },\n maxHeight: {\n type: String,\n default: '60vh'\n },\n minHeight: {\n type: String,\n default: '150px'\n }\n },\n data() {\n return {\n dialogVisible: true,\n showClose: false\n };\n },\n mounted() {\n if (this.$listeners['close']) {\n this.showClose = true;\n }\n },\n methods: {\n handleClose() {\n this.$emit('close');\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_dialog_Indexvue_type_script_lang_js = (dialog_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar dialog_Index_component = normalizeComponent(\n components_dialog_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_4148762e_scoped_true_render,\n Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns,\n false,\n null,\n \"4148762e\",\n null\n \n)\n\n/* harmony default export */ var dialog_Index = (dialog_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=template&id=41ca2230&scoped=true\nvar Indexvue_type_template_id_41ca2230_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-card', {\n staticStyle: {\n \"height\": \"calc(100% - 2px)\",\n \"overflow\": \"auto\"\n },\n attrs: {\n \"shadow\": _vm.shadow\n }\n }, [_c('div', {\n staticClass: \"clearfix\",\n attrs: {\n \"slot\": \"header\"\n },\n slot: \"header\"\n }, [_c('div', {\n staticStyle: {\n \"font-size\": \"16px\"\n }\n }, [_vm.$slots['card-title'] ? [_vm._t(\"card-title\")] : [_vm._v(_vm._s(_vm.title))]], 2), _c('div', {\n staticStyle: {\n \"flex\": \"1\",\n \"position\": \"relative\",\n \"display\": \"flex\",\n \"justify-content\": \"right\"\n }\n }, [_vm._t(\"card-tools\")], 2)]), _vm._t(\"default\")], 2);\n};\nvar Indexvue_type_template_id_41ca2230_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var card_Indexvue_type_script_lang_js = ({\n name: 'Card',\n props: {\n title: {\n type: String,\n default: ''\n },\n shadow: {\n type: String,\n default: ''\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_card_Indexvue_type_script_lang_js = (card_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=style&index=0&id=41ca2230&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=style&index=0&id=41ca2230&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar card_Index_component = normalizeComponent(\n components_card_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_41ca2230_scoped_true_render,\n Indexvue_type_template_id_41ca2230_scoped_true_staticRenderFns,\n false,\n null,\n \"41ca2230\",\n null\n \n)\n\n/* harmony default export */ var card_Index = (card_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=template&id=5e81e05e&scoped=true\nvar Indexvue_type_template_id_5e81e05e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.show ? _c('div', [_vm.data.length > 0 ? _vm._l(_vm.data, function (item) {\n return _c('auth-tree', {\n key: item.id,\n attrs: {\n \"data\": item,\n \"props\": _vm.props\n },\n on: {\n \"on-node-expand\": data => _vm.onExpand(data),\n \"on-node-checked\": data => _vm.onChecked(data)\n }\n });\n }) : _vm._e()], 2) : _vm._e();\n};\nvar Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n;// CONCATENATED MODULE: ./src/components/tree/tree.js\n\n// 是否有子节点\nconst hasChildren = data => {\n return Array.isArray(data.children) && data.children.length > 0;\n};\n\n// 创建节点\nconst renderLabel = (h, data, context) => {\n const {\n props,\n listeners\n } = context;\n const clickHandler = listeners['on-node-expand'];\n const checkedHandler = listeners['on-node-checked'];\n const label = data[props.props.label];\n const childNodes = [];\n childNodes.push(label);\n const icoClass = [];\n if (hasChildren(data)) {\n if (data.expand) {\n icoClass.push('icon-icon-dwon');\n } else {\n icoClass.push('icon-icon_right');\n }\n }\n return h('li', {}, [h('i', {\n domProps: {\n className: `iconfont ${icoClass.join(' ')}`\n },\n style: {\n marginLeft: `${14 * data._leve}px`,\n fontSize: '12px',\n transform: 'translateY(-2px)',\n color: '#666'\n },\n on: {\n click: () => {\n clickHandler(data);\n }\n }\n }, ''), h('i', {\n domProps: {\n className: data.checked ? 'iconfont icon-fangxingxuanzhongfil' : 'iconfont icon-fangxingweixuanzhong'\n },\n style: {\n color: '#666'\n },\n on: {\n click: () => {\n checkedHandler(data);\n }\n }\n }, ''), h('span', {}, childNodes)]);\n};\n\n// 创建 node 子节点\nconst renderChildren = (h, list, expand, context) => {\n if (Array.isArray(list) && list.length) {\n const children = list.map(item => {\n return renderNode(h, item, context);\n });\n let cls = ['tree-node-children'];\n if (!expand) {\n cls.push('expand');\n }\n return h('div', {\n domProps: {\n className: cls.join(' ')\n }\n }, children);\n }\n return '';\n};\nconst renderNode = (h, data, context) => {\n const childNodes = [];\n childNodes.push(renderLabel(h, data, context));\n const children = data.children;\n if (hasChildren(data)) {\n childNodes.push(renderChildren(h, children, data.expand, context));\n }\n return h('ul', {\n domProps: {\n className: 'node'\n }\n }, childNodes);\n};\nconst tree_render = (h, context) => {\n const {\n props\n } = context;\n return renderNode(h, props.data, context);\n};\n/* harmony default export */ var tree = (tree_render);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var tree_Indexvue_type_script_lang_js = ({\n name: 'Tree',\n components: {\n AuthTree: {\n render: tree,\n functional: true\n }\n },\n props: {\n data: {\n type: Array,\n default: () => {\n return [];\n }\n },\n props: {\n type: Object,\n default: () => {\n return {\n label: 'name'\n };\n }\n }\n },\n data() {\n return {\n name: 1,\n show: false,\n list: [],\n checked: false\n };\n },\n methods: {\n init(data, leve) {\n data._leve = leve;\n if (data.children && data.children.length > 0) {\n leve++;\n for (const i in data.children) {\n this.init(data.children[i], leve);\n }\n }\n },\n // 刷新\n refresh() {\n this.show = false;\n this.$nextTick(() => {\n this.show = true;\n });\n },\n // 展开/隐藏\n onExpand(data) {\n data.expand = !data.expand;\n this.refresh();\n },\n // 选中/取消选中\n onChecked(data) {\n data.checked = !data.checked;\n this.toolerChecked(this.data, data);\n this.setParentChecked(this.data);\n this.refresh();\n },\n toolerChecked(list, node) {\n for (const i in list) {\n if (list[i].id === node.id) {\n this.setChildChecked(list[i].children, list[i].checked);\n } else {\n this.toolerChecked(list[i].children, node);\n }\n }\n },\n // 选中节点时,设置子节点全选\n setChildChecked(children, checked) {\n for (const i in children) {\n children[i].checked = checked;\n this.setChildChecked(children[i].children, checked);\n }\n },\n // 设置父节点选中\n setParentChecked(data) {\n for (const i in data) {\n this.checked = false;\n if (data[i].children && data[i].children.length > 0) {\n this.childIsChecked(data[i].children);\n if (this.checked) {\n data[i].checked = this.checked;\n }\n this.setParentChecked(data[i].children);\n }\n }\n this.refresh();\n },\n // 判断节点的子节点是否有选中\n childIsChecked(children) {\n for (const i in children) {\n if (children[i].checked) {\n this.checked = true;\n } else {\n this.childIsChecked(children[i].children);\n }\n }\n },\n // 设置默认选中\n setDefaultChecked(defaultIds) {\n for (const i in defaultIds) {\n this.setChecked(this.data, defaultIds[i]);\n }\n this.setParentChecked(this.data);\n },\n // 根据所给的id,设置改项选中\n setChecked(data, id) {\n for (const i in data) {\n if (data[i].id === id) {\n data[i].checked = true;\n break;\n } else {\n if (data[i].children && data[i].children.length > 0) {\n this.setChecked(data[i].children, id);\n }\n }\n }\n },\n // 获取选中选的key\n getCheckedKeys() {\n const keys = [];\n this._getCheckedKeys(this.data, keys);\n return keys;\n },\n // 遍历出选中选的key\n _getCheckedKeys(data, keys) {\n for (const i in data) {\n if (data[i].checked) {\n keys.push(data[i].id);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedKeys(data[i].children, keys);\n }\n }\n },\n // 获取选中选的节点\n getCheckedNodes() {\n const nodes = [];\n this._getCheckedNodes(this.data, nodes);\n return nodes;\n },\n // 遍历出选中选的节点\n _getCheckedNodes(data, nodes) {\n for (const i in data) {\n if (data[i].checked) {\n nodes.push(data[i]);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedNodes(data[i].children, nodes);\n }\n }\n }\n },\n watch: {\n data: {\n handler() {\n for (const i in this.data) {\n this.init(this.data[i], 0);\n }\n this.refresh();\n },\n immediate: true,\n deep: true\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_tree_Indexvue_type_script_lang_js = (tree_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar tree_Index_component = normalizeComponent(\n components_tree_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_5e81e05e_scoped_true_render,\n Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns,\n false,\n null,\n \"5e81e05e\",\n null\n \n)\n\n/* harmony default export */ var tree_Index = (tree_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js\nfunction _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js\nfunction _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js\n\nfunction _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js\n\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js\nvar web_url_search_params_delete = __webpack_require__(4603);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js\nvar web_url_search_params_has = __webpack_require__(7566);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js\nvar web_url_search_params_size = __webpack_require__(8721);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js\nvar es_typed_array_to_reversed = __webpack_require__(7467);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js\nvar es_typed_array_to_sorted = __webpack_require__(4732);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.detached.js\nvar esnext_array_buffer_detached = __webpack_require__(6280);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer.js\nvar esnext_array_buffer_transfer = __webpack_require__(7913);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js\nvar esnext_array_buffer_transfer_to_fixed_length = __webpack_require__(7801);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/utils.js\n\n\n\n\n\n\n\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {\n toString: utils_toString\n} = Object.prototype;\nconst {\n getPrototypeOf\n} = Object;\nconst kindOf = (cache => thing => {\n const str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\nconst kindOfTest = type => {\n type = type.toLowerCase();\n return thing => kindOf(thing) === type;\n};\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {\n isArray\n} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = thing => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = val => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = val => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = thing => {\n let kind;\n return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]'));\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = str => str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {\n allOwnKeys = false\n} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : typeof window !== 'undefined' ? window : global;\n})();\nconst isContextDefined = context => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge( /* obj1, obj2, obj3, ... */\n) {\n const {\n caseless\n } = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {\n allOwnKeys\n} = {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {\n allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = content => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = thing => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n const iterator = generator.call(obj);\n let result;\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst utils_hasOwnProperty = (({\n hasOwnProperty\n}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = obj => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n const value = obj[name];\n if (!isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n const define = arr => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nconst noop = () => {};\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\nconst DIGIT = '0123456789';\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {\n length\n } = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length | 0];\n }\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\nconst toJSONObject = obj => {\n const stack = new Array(10);\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n if (!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n stack[i] = undefined;\n return target;\n }\n }\n return source;\n };\n return visit(obj, 0);\n};\nconst isAsyncFn = kindOfTest('AsyncFunction');\nconst isThenable = thing => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n/* harmony default export */ var utils = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosError.js\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack;\n }\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\nconst AxiosError_prototype = AxiosError.prototype;\nconst descriptors = {};\n['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {\n value: code\n };\n});\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(AxiosError_prototype, 'isAxiosError', {\n value: true\n});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(AxiosError_prototype);\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n AxiosError.call(axiosError, error.message, code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n};\n/* harmony default export */ var core_AxiosError = (AxiosError);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ var helpers_null = (null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toFormData.js\n\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n const stack = [];\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ var helpers_toFormData = (toFormData);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nconst AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n const _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ var helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n const _encode = options && options.encode || buildURL_encode;\n const serializeFn = options && options.serialize;\n let serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, options).toString(_encode);\n }\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/InterceptorManager.js\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n/* harmony default export */ var core_InterceptorManager = (InterceptorManager);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ var defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n\n\n\n/* harmony default export */ var classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ var classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ var classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ var browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/common/utils.js\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (product => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0;\n})(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n})();\n\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/index.js\n\n\n/* harmony default export */ var platform = ({\n ...common_utils_namespaceObject,\n ...browser\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function (value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ var helpers_formDataToJSON = (formDataToJSON);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nconst defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http'],\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n const isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n let isFileList;\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), this.formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n if (data && utils.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], method => {\n defaults.headers[method] = {};\n});\n/* harmony default export */ var lib_defaults = (defaults);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ var parseHeaders = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\n\n\nconst $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nconst isValidHeaderName = str => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function (arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n const key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n if (key) {\n const value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n const key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n while (i--) {\n const key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n normalize(format) {\n const self = this;\n const headers = {};\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n const normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n toJSON(asStrings) {\n const obj = Object.create(null);\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n static concat(first, ...targets) {\n const computed = new this(first);\n targets.forEach(target => computed.set(target));\n return computed;\n }\n static accessor(header) {\n const internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n const accessors = internals.accessors;\n const prototype = this.prototype;\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n}\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({\n value\n}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ var core_AxiosHeaders = (AxiosHeaders);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || lib_defaults;\n const context = response || config;\n const headers = core_AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CanceledError.js\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n core_AxiosError.call(this, message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\nutils.inherits(CanceledError, core_AxiosError, {\n __CANCEL__: true\n});\n/* harmony default export */ var cancel_CanceledError = (CanceledError);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, [core_AxiosError.ERR_BAD_REQUEST, core_AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));\n }\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/cookies.js\n\n\n\n/* harmony default export */ var cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n utils.isString(path) && cookie.push('path=' + path);\n utils.isString(domain) && cookie.push('domain=' + domain);\n secure === true && cookie.push('secure');\n document.cookie = cookie.join('; ');\n },\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write() {},\n read() {\n return null;\n },\n remove() {}\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n\n\n\n/* harmony default export */ var isURLSameOrigin = (platform.hasStandardBrowserEnv ?\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}());\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n const now = Date.now();\n const startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n let i = tail;\n let bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n const passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ var helpers_speedometer = (speedometer);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/xhr.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = helpers_speedometer(50, 250);\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n bytesNotified = loaded;\n const data = {\n loaded,\n total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n data[isDownloadStream ? 'download' : 'upload'] = true;\n listener(data);\n };\n}\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ var xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = core_AxiosHeaders.from(config.headers).normalize();\n let {\n responseType,\n withXSRFToken\n } = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n let contentType;\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n const fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || defaults_transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n const protocol = parseProtocol(fullPath);\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/adapters.js\n\n\n\n\nconst knownAdapters = {\n http: helpers_null,\n xhr: xhr\n};\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {\n value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n value\n });\n }\n});\nconst renderReason = reason => `- ${reason}`;\nconst isResolvedHandle = adapter => utils.isFunction(adapter) || adapter === null || adapter === false;\n/* harmony default export */ var adapters = ({\n getAdapter: adapters => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n const {\n length\n } = adapters;\n let nameOrAdapter;\n let adapter;\n const rejectedReasons = {};\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(`Unknown adapter '${id}'`);\n }\n }\n if (adapter) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build'));\n let s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(`There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n },\n adapters: knownAdapters\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n const adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(config, config.transformResponse, response);\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/mergeConfig.js\n\n\n\n\nconst headersToObject = thing => thing instanceof core_AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/env/data.js\nconst VERSION = \"1.6.7\";\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/validator.js\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ var validator = ({\n assertOptions,\n validators\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/Axios.js\n\n\n\n\n\n\n\n\n\n\n\nconst Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error();\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n throw err;\n }\n }\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n const {\n transitional,\n paramsSerializer,\n headers\n } = config;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], method => {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n let promise;\n let i = 0;\n let len;\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n let newConfig = config;\n i = 0;\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n/* harmony default export */ var core_Axios = (Axios);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CancelToken.js\n\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n let resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n let i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n/* harmony default export */ var cancel_CancelToken = (CancelToken);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/HttpStatusCode.js\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ var helpers_HttpStatusCode = (HttpStatusCode);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new core_Axios(defaultConfig);\n const instance = bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = thing => helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ var lib_axios = (axios);\n;// CONCATENATED MODULE: ./src/components/http/index.js\n\n\n\n\n\n\n\n\n\nvar _axios = /*#__PURE__*/new WeakMap();\nvar _requestCount = /*#__PURE__*/new WeakMap();\nvar _loadingInstance = /*#__PURE__*/new WeakMap();\nvar _config = /*#__PURE__*/new WeakMap();\nclass http_Http {\n constructor(options) {\n _classPrivateFieldInitSpec(this, _axios, void 0);\n _classPrivateFieldInitSpec(this, _requestCount, 0);\n // 请求次数\n _classPrivateFieldInitSpec(this, _loadingInstance, null);\n _classPrivateFieldInitSpec(this, _config, {\n baseURL: '',\n timeout: 60 * 1000,\n withCredentials: false,\n successCode: 200,\n errorCode: 500,\n tokenKey: 'token',\n storage: 'session',\n callBackCode: [],\n call: null\n });\n for (const k in _classPrivateFieldGet2(_config, this)) {\n if (options[k]) {\n _classPrivateFieldGet2(_config, this)[k] = options[k];\n }\n }\n lib_axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';\n lib_axios.defaults.headers['Accept'] = 'application/json';\n _classPrivateFieldSet2(_axios, this, lib_axios.create(_classPrivateFieldGet2(_config, this)));\n _classPrivateFieldGet2(_axios, this).interceptors.request.use(config => {\n var _this$requestCount, _this$requestCount2;\n if (!config.params) {\n config.params = {};\n }\n if (_classPrivateFieldGet2(_requestCount, this) == 0) {\n _classPrivateFieldSet2(_loadingInstance, this, loading());\n }\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount = _classPrivateFieldGet2(_requestCount, this), _this$requestCount2 = _this$requestCount++, _this$requestCount)), _this$requestCount2;\n let token = '';\n if (_classPrivateFieldGet2(_config, this).storage === 'session') {\n token = sessionStorage.getItem(_classPrivateFieldGet2(_config, this).tokenKey);\n } else if (_classPrivateFieldGet2(_config, this).storage === 'local') {\n token = localStorage.getItem(_classPrivateFieldGet2(_config, this).tokenKey);\n }\n config.headers[_classPrivateFieldGet2(_config, this).tokenKey] = token;\n return config;\n }, error => {\n return Promise.reject(error);\n });\n _classPrivateFieldGet2(_axios, this).interceptors.response.use(response => {\n var _this$requestCount3, _this$requestCount4;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount3 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount4 = _this$requestCount3--, _this$requestCount3)), _this$requestCount4;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return response.data;\n }, error => {\n var _this$requestCount5, _this$requestCount6;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount5 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount6 = _this$requestCount5--, _this$requestCount5)), _this$requestCount6;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return Promise.reject(error);\n });\n }\n _handleResult(success, err, res) {\n if (!res) {\n return;\n }\n if (res.code === _classPrivateFieldGet2(_config, this).successCode) {\n if (typeof success === 'function') {\n success(res);\n }\n } else if (res.code === _classPrivateFieldGet2(_config, this).errorCode) {\n if (typeof err === 'function') {\n err(res);\n } else {\n error(res.msg);\n }\n } else if (_classPrivateFieldGet2(_config, this).callBackCode.includes(res.code) && typeof _classPrivateFieldGet2(_config, this).call === 'function') {\n _classPrivateFieldGet2(_config, this).call(res);\n }\n }\n post(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).post(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n update(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).update(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n get(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).get(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n delete(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).delete(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n downLoad(url, params = {}) {\n _classPrivateFieldGet2(_axios, this).post(url, params, {\n 'responseType': 'blob'\n }).then(res => {\n if (res) {\n let fileName = params.fileName;\n if (!fileName) {\n fileName = res.headers['content-disposition'].split('filename=')[1].replace(/\"/g, '');\n }\n const blob = new Blob([res.data], {\n type: 'application/octet-stream;charset=UTF-8'\n });\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = window.URL.createObjectURL(blob);\n link.download = decodeURIComponent(fileName);\n link.click();\n window.URL.revokeObjectURL(link.href);\n }\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/index.js\n__webpack_require__(3472);\n\n\n\n\n\n\nconst coms = [Index, page_table_Index, dialog_Index, card_Index, tree_Index];\nconst install = function (Vue) {\n coms.forEach(com => {\n Vue.component(com.name, com);\n });\n};\n\n// 导出组件\n/* harmony default export */ var components = (install);\nclass Http extends http_Http {\n constructor(options) {\n super(options);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (components);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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aWIvY29tbWFuZHMvYnVpbGQvc2V0UHVibGljUGF0aC5qcz82OWNiIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT8yNzMzIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/M2M1ZSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ODJhZiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ZDRkMCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ZTgyOCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcz8yZjg1Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT9mYjFkIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8wOGJhIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/NWQwMyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/Nzc0YSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/ODNjMyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/NThjNyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/MzhhMCIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8wZTcxIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLWRyYWcuanM/NWViZCIsIndlYnBhY2s6Ly92dWUyL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/NGRiNiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8yMGU3Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9kaWFsb2cvSW5kZXgudnVlPzg3NzQiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/YjM5ZiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT82MTE4Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT9lN2ZhIiwid2VicGFjazovL3Z1ZTIvc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/YzFmYiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/MzBiYiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/Y2IyMiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZmJhYiIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZjMzNSIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/OTA5YyIsIndlYnBhY2s6Ly92dWUyLy4vc3JjL2NvbXBvbmVudHMvdHJlZS90cmVlLmpzPzQyYzYiLCJ3ZWJwYWNrOi8vdnVlMi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9iZjY2Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT8xNTRiIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9lNmIwIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9hOGQyIiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT83YTAxIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbi5qcz9iODVmIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYy5qcz9jZmRhIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0Q2xhc3NCcmFuZC5qcz8xOWY4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRTZXQyLmpzPzQ0YmYiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZEdldDIuanM/OTI5ZSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanM/NGJlYSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcz9jOWViIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcz8yMDI3Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcz8xYTk0Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcz85YmEzIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanM/OTNlMiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzP2MxNzgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanM/Yzc5MiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanM/MjdhNCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzP2EwZWQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzPzFkYjkiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanM/NmQ3OCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzP2IyZTQiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzP2JmOGMiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanM/NzhmMSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanM/OGZlOSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzP2Y0MzciLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanM/ZmYxMCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcz81NGU5Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzPzk1OTciLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzPzc2NjIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzP2MxN2EiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanM/NjhhNCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcz84NzY4Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcz8xZDNmIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcz9hMjI3Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanM/NmJjNiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanM/ZjAyZCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcz84Nzk1Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcz85ZmFjIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanM/NTljMCIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanM/MWE1YyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcz83ODI1Iiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzPzRkYzkiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcz9iZDEzIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzExMGYiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanM/MDEzMiIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzPzI5ZmIiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzcyYzgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanM/MjcyOSIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcz9iZDlkIiwid2VicGFjazovL3Z1ZTIvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanM/YzZmMyIsIndlYnBhY2s6Ly92dWUyLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcz9mYWQ2Iiwid2VicGFjazovL3Z1ZTIvLi9zcmMvY29tcG9uZW50cy9odHRwL2luZGV4LmpzP2NjNmEiLCJ3ZWJwYWNrOi8vdnVlMi8uL3NyYy9jb21wb25lbnRzL2luZGV4LmpzPzE1NjgiLCJ3ZWJwYWNrOi8vdnVlMi8uL25vZGVfbW9kdWxlcy9AdnVlL2NsaS1zZXJ2aWNlL2xpYi9jb21tYW5kcy9idWlsZC9lbnRyeS1saWIuanM/OGE5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8vIFRoaXMgZmlsZSBpcyBpbXBvcnRlZCBpbnRvIGxpYi93YyBjbGllbnQgYnVuZGxlcy5cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBjdXJyZW50U2NyaXB0ID0gd2luZG93LmRvY3VtZW50LmN1cnJlbnRTY3JpcHRcbiAgaWYgKHByb2Nlc3MuZW52Lk5FRURfQ1VSUkVOVFNDUklQVF9QT0xZRklMTCkge1xuICAgIHZhciBnZXRDdXJyZW50U2NyaXB0ID0gcmVxdWlyZSgnQHNvZGEvZ2V0LWN1cnJlbnQtc2NyaXB0JylcbiAgICBjdXJyZW50U2NyaXB0ID0gZ2V0Q3VycmVudFNjcmlwdCgpXG5cbiAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYmVjYXVzZSBwcmV2aW91c2x5IHdlIGRpcmVjdGx5IGluY2x1ZGVkIHRoZSBwb2x5ZmlsbFxuICAgIGlmICghKCdjdXJyZW50U2NyaXB0JyBpbiBkb2N1bWVudCkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudCwgJ2N1cnJlbnRTY3JpcHQnLCB7IGdldDogZ2V0Q3VycmVudFNjcmlwdCB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBzcmMgPSBjdXJyZW50U2NyaXB0ICYmIGN1cnJlbnRTY3JpcHQuc3JjLm1hdGNoKC8oLitcXC8pW14vXStcXC5qcyhcXD8uKik/JC8pXG4gIGlmIChzcmMpIHtcbiAgICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IHNyY1sxXSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cbn1cblxuLy8gSW5kaWNhdGUgdG8gd2VicGFjayB0aGF0IHRoaXMgZmlsZSBjYW4gYmUgY29uY2F0ZW5hdGVkXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gKF92bS50b3RhbD4wKT9fYygnZGl2JyxbX2MoJ2VsLXBhZ2luYXRpb24nLF92bS5fYih7YXR0cnM6e1wiYmFja2dyb3VuZFwiOlwiXCIsXCJjdXJyZW50LXBhZ2VcIjpfdm0uY3VycmVudFBhZ2UsXCJwYWdlLXNpemVcIjpfdm0ucGFnZVNpemUsXCJwYWdlLXNpemVzXCI6X3ZtLnBhZ2VTaXplcyxcInRvdGFsXCI6X3ZtLnRvdGFsLFwibGF5b3V0XCI6XCJwcmV2LCBwYWdlciwgbmV4dFwifSxvbjp7XCJzaXplLWNoYW5nZVwiOl92bS5oYW5kbGVTaXplQ2hhbmdlLFwiY3VycmVudC1jaGFuZ2VcIjpfdm0uaGFuZGxlQ3VycmVudENoYW5nZX19LCdlbC1wYWdpbmF0aW9uJyxfdm0uJGF0dHJzLGZhbHNlKSldLDEpOl92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxkaXYgdi1pZj1cInRvdGFsPjBcIj5cclxuICAgICAgICA8ZWwtcGFnaW5hdGlvblxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kIFxyXG4gICAgICAgICAgICA6Y3VycmVudC1wYWdlPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICA6cGFnZS1zaXplPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICA6cGFnZS1zaXplcz1cInBhZ2VTaXplc1wiXHJcbiAgICAgICAgICAgIDp0b3RhbD1cInRvdGFsXCJcclxuICAgICAgICAgICAgbGF5b3V0PVwicHJldiwgcGFnZXIsIG5leHRcIlxyXG4gICAgICAgICAgICB2LWJpbmQ9XCIkYXR0cnNcIlxyXG4gICAgICAgICAgICBAc2l6ZS1jaGFuZ2U9XCJoYW5kbGVTaXplQ2hhbmdlXCJcclxuICAgICAgICAgICAgQGN1cnJlbnQtY2hhbmdlPVwiaGFuZGxlQ3VycmVudENoYW5nZVwiXHJcbiAgICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuICAgIGV4cG9ydCBkZWZhdWx0IHtcclxuICAgICAgICBuYW1lOiAnUGFnaW5hdGlvbicsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgdG90YWw6IHtcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYWdlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxpbWl0OiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAyMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYWdlU2l6ZXM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzEwLCAxNSwgMjAsIDMwLCA1MF1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHZhbClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZVNpemU6IHtcclxuICAgICAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saW1pdFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bGltaXQnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IHtcclxuICAgICAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b3RhbFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldCh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dG90YWwnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgaGFuZGxlU2l6ZUNoYW5nZSh2YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2luYXRpb24nLCB7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIGxpbWl0OiB2YWwgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaGFuZGxlQ3VycmVudENoYW5nZSh2YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2luYXRpb24nLCB7IHBhZ2U6IHZhbCwgbGltaXQ6IHRoaXMucGFnZVNpemUgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5lbC1wYWdpbmF0aW9ue1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNDAudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MjZiNzBmYjQmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi8sXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9XG4gICAgdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbicgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnMgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHtcbiAgICAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIChvcHRpb25zLmZ1bmN0aW9uYWwgPyB0aGlzLnBhcmVudCA6IHRoaXMpLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3RcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbihoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKSA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2YjcwZmI0JnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTI2YjcwZmI0JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjI2YjcwZmI0XCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdkaXYnLHtzdGF0aWNDbGFzczpcInBhZ2UtdGFibGVcIixhdHRyczp7XCJpZFwiOnRoaXMudGFibGVJZH19LFtfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJ0YWJsZVwifSxbX2MoJ2VsLXNjcm9sbGJhcicse3N0YXRpY1N0eWxlOntcImhlaWdodFwiOlwiMTAwJVwifX0sW19jKCdlbC10YWJsZScsX3ZtLl9iKHtyZWY6X3ZtLnRhYmxlSWQsYXR0cnM6e1wic3RyaXBlXCI6XCJcIixcImRhdGFcIjpfdm0ubGlzdCxcInJvdy1rZXlcIjpfdm0ucm93S2V5LFwibG9hZFwiOl92bS5sb2FkLFwiaGlnaGxpZ2h0LWN1cnJlbnQtcm93XCI6X3ZtLmhsaWdodEN1cnJlbnRSb3csXCJkZWZhdWx0LWV4cGFuZC1hbGxcIjpfdm0uZGVmYXVsdEV4cGFuZEFsbH0sb246e1wic2VsZWN0XCI6X3ZtLmhhbmRlbFNlbGVjdGlvbkNoYW5nZSxcInNlbGVjdC1hbGxcIjpfdm0uc2VsZWN0QWxsLFwicm93LWNsaWNrXCI6X3ZtLmhhbmRsZVJvd0NsaWNrLFwiZXhwYW5kLWNoYW5nZVwiOnZhbD0+X3ZtLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgdmFsKX19LCdlbC10YWJsZScsX3ZtLiRhdHRycyxmYWxzZSksWyhfdm0uc2hvd0NoZWNrQm94KT9fYygnZWwtdGFibGUtY29sdW1uJyx7YXR0cnM6e1widHlwZVwiOlwic2VsZWN0aW9uXCIsXCJ3aWR0aFwiOlwiNjBweFwiLFwiYWxpZ25cIjpcImNlbnRlclwifX0pOl92bS5fZSgpLChfdm0uc29ydE51bSk/X2MoJ2VsLXRhYmxlLWNvbHVtbicse2F0dHJzOntcInR5cGVcIjpcImluZGV4XCIsXCJ3aWR0aFwiOlwiNjBweFwiLFwibGFiZWxcIjpcIuW6j+WPt1wiLFwiYWxpZ25cIjpcImNlbnRlclwifSxzY29wZWRTbG90czpfdm0uX3UoW3trZXk6XCJkZWZhdWx0XCIsZm46ZnVuY3Rpb24oc2NvcGUpe3JldHVybiBbKF92bS5wYWdlKT9fYygnc3BhbicsW192bS5fdihfdm0uX3MoKF92bS5wYXJhbXMucGFnZS0xKSpfdm0ucGFyYW1zLmxpbWl0K3Njb3BlLiRpbmRleCsxKSldKTpfYygnc3BhbicsW192bS5fdihfdm0uX3Moc2NvcGUuJGluZGV4KzEpKV0pXX19XSxudWxsLGZhbHNlLDI3ODYwMDgwMjEpfSk6X3ZtLl9lKCksX3ZtLl90KFwiZGVmYXVsdFwiKV0sMildLDEpXSwxKSwoX3ZtLnBhZ2UpP19jKCdQYWdpbmF0aW9uJyx7YXR0cnM6e1widG90YWxcIjpfdm0udG90YWwsXCJwYWdlXCI6X3ZtLnBhcmFtcy5wYWdlLFwibGltaXRcIjpfdm0ucGFyYW1zLmxpbWl0fSxvbjp7XCJ1cGRhdGU6cGFnZVwiOmZ1bmN0aW9uKCRldmVudCl7cmV0dXJuIF92bS4kc2V0KF92bS5wYXJhbXMsIFwicGFnZVwiLCAkZXZlbnQpfSxcInBhZ2luYXRpb25cIjpfdm0uZ2V0TGlzdH19KTpfdm0uX2UoKV0sMSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2UtdGFibGVcIiA6aWQ9XCJ0aGlzLnRhYmxlSWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICAgICAgPGVsLXNjcm9sbGJhciBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPGVsLXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJpcGVcclxuICAgICAgICAgICAgICAgICAgICA6cmVmPVwidGFibGVJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICA6cm93LWtleT1cInJvd0tleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmxvYWQ9XCJsb2FkXCJcclxuICAgICAgICAgICAgICAgICAgICA6aGlnaGxpZ2h0LWN1cnJlbnQtcm93PVwiaGxpZ2h0Q3VycmVudFJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgQHNlbGVjdD1cImhhbmRlbFNlbGVjdGlvbkNoYW5nZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgQHNlbGVjdC1hbGw9XCJzZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpkZWZhdWx0LWV4cGFuZC1hbGw9XCJkZWZhdWx0RXhwYW5kQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBAcm93LWNsaWNrPVwiaGFuZGxlUm93Q2xpY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBleHBhbmQtY2hhbmdlPVwidmFsPT4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHZhbClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZWwtdGFibGUtY29sdW1uIHYtaWY9XCJzaG93Q2hlY2tCb3hcIiB0eXBlPVwic2VsZWN0aW9uXCIgd2lkdGg9XCI2MHB4XCIgYWxpZ249XCJjZW50ZXJcIj48L2VsLXRhYmxlLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZWwtdGFibGUtY29sdW1uIHYtaWY9XCJzb3J0TnVtXCIgdHlwZT1cImluZGV4XCIgd2lkdGg9XCI2MHB4XCIgbGFiZWw9XCLluo/lj7dcIiBhbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgc2xvdC1zY29wZT1cInNjb3BlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwicGFnZVwiPnt7KHBhcmFtcy5wYWdlLTEpKnBhcmFtcy5saW1pdCtzY29wZS4kaW5kZXgrMX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlPnt7c2NvcGUuJGluZGV4KzF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2VsLXRhYmxlLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XHJcbiAgICAgICAgICAgICAgICA8L2VsLXRhYmxlPlxyXG4gICAgICAgICAgICA8L2VsLXNjcm9sbGJhcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8UGFnaW5hdGlvbiB2LWlmPVwicGFnZVwiIDp0b3RhbD1cInRvdGFsXCIgOnBhZ2Uuc3luYz1cInBhcmFtcy5wYWdlXCIgOmxpbWl0PVwicGFyYW1zLmxpbWl0XCIgQHBhZ2luYXRpb249XCJnZXRMaXN0XCIgLz5cclxuICAgIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0PlxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnUGFnZVRhYmxlJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgLy8g6Ieq5a6a5LmJ5pWw5o2uXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6K+35rGC5Zyw5Z2AXHJcbiAgICAgICAgdXJsOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOivt+axguaWueW8j1xyXG4gICAgICAgIG1ldGhvZDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdnZXQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmmK/lkKbmmL7npLrluo/lj7dcclxuICAgICAgICBzb3J0TnVtOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOaYr+WQpuWIhumhtVxyXG4gICAgICAgIHBhZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5qCR5b2i6KGo5qC85pe277yM5piv5ZCm5YWo6YOo5bGV5byAXHJcbiAgICAgICAgZGVmYXVsdEV4cGFuZEFsbDoge1xyXG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5Yid5aeL6K+35rGC5Y+C5pWwXHJcbiAgICAgICAgZGVmYXVsdFBhcmFtczoge1xyXG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT4oe30pXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDpu5jorqTpgInkuK3mlbDmja5cclxuICAgICAgICBkZWZhdWx0U2VsZWN0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+W11cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJvd0tleToge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdpZCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhsaWdodEN1cnJlbnRSb3c6IHtcclxuICAgICAgICAgICAgeXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIGRhdGEobmV3VmFsKXtcclxuICAgICAgICAgICAgdGhpcy5saXN0ID0gbmV3VmFsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVmYXVsdFNlbGVjdDoge1xyXG4gICAgICAgICAgICBoYW5kbGVyKCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVlcDogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVmYXVsdFBhcmFtcyhuZXdWYWwsIG9sZFZhbCl7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gbmV3VmFsKXtcclxuICAgICAgICAgICAgICAgIGlmKG5ld1ZhbFtrZXldICE9IG9sZFZhbFtrZXldKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHtwYWdlOiAxLCBsaW1pdDogMTUsIC4uLm5ld1ZhbH07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybntcclxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiBmYWxzZSxcclxuICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgbGltaXQ6IDE1LFxyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kZWZhdWx0UGFyYW1zXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgICAgICBsaXN0OiBbXSxcclxuICAgICAgICAgICAgdGFibGVJZDogYHRhYmxlXyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE2KX1gLFxyXG4gICAgICAgICAgICBzZWxlY3REYXRhOiB7fSxcclxuICAgICAgICAgICAgc2VsZWN0SWRzOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZCgpe1xyXG4gICAgICAgIGlmKHRoaXMuJGxpc3RlbmVyc1snc2VsZWN0aW9uLWNoYW5nZSddKXtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmRhdGEpe1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5kZWZhdWx0U2VsZWN0KXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAvLyDojrflj5bmlbDmja5cclxuICAgICAgICBnZXRMaXN0KHBhZ2VPcHRpb24pe1xyXG4gICAgICAgICAgICBpZighdGhpcy51cmwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHBhZ2VPcHRpb24pe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMucGFnZSA9IHBhZ2VPcHRpb24ucGFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLmxpbWl0ID0gcGFnZU9wdGlvbi5saW1pdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighdGhpcy5wYWdlKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyYW1zLmxpbWl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VQYXJhbXMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuJHJvdXRlLnBhdGgpO1xyXG4gICAgICAgICAgICBpZihzdG9yYWdlUGFyYW1zKXtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy4kcm91dGUucGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhbXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzd2l0Y2godGhpcy5tZXRob2Qpe1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZ2V0JzpcclxuICAgICAgICAgICAgICAgICAgICBodHRwLmdldCh0aGlzLnVybCwgdGhpcy5wYXJhbXMsIChyZXMpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGEocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3Bvc3QnOlxyXG4gICAgICAgICAgICAgICAgICAgIGh0dHAucG9zdCh0aGlzLnVybCwgdGhpcy5wYXJhbXMsIChyZXMpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGEocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9zZXREYXRhKHJlcyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGFnZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSByZXMuZGF0YS5yZWNvcmRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcy5kYXRhLnRvdGFsO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6K6+572u6buY6K6k6YCJ5LitXHJcbiAgICAgICAgc2V0Q2hlY2tlZCgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmRlZmF1bHRTZWxlY3QubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSB0aGlzLmRlZmF1bHRTZWxlY3QubWFwKChpdGVtKT0+aXRlbVt0aGlzLnJvd0tleV0pO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zaG93Q2hlY2tCb3ggJiYgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDpu5jorqTpgInkuK3mlbDmja5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RJZHMuaW5jbHVkZXMoaXRlbVt0aGlzLnJvd0tleV0pKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhID0ge307XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5p2h5Lu25p+l6K+iXHJcbiAgICAgICAgcXVlcnkocGFyYW1zPXt9KXtcclxuICAgICAgICAgICAgaWYoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHsuLi50aGlzLnBhcmFtcywgLi4ucGFyYW1zLCBwYWdlOiAxfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmdldExpc3QoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOeCueWHu+ihjFxyXG4gICAgICAgIGhhbmRsZVJvd0NsaWNrKHJvdywgY29sdW1uLCBldmVudCl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jvdy1jbGljaycsIHJvdywgY29sdW1uLCBldmVudCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYW5kZWxTZWxlY3Rpb25DaGFuZ2UoXywgcm93KXtcclxuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRhW3Jvd1t0aGlzLnJvd0tleV1dKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV07XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW3Jvd1t0aGlzLnJvd0tleV1dID0gcm93O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkxpc3QgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gc2VsZWN0aW9uTGlzdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCBzZWxlY3Rpb25MaXN0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOWFqOmAiS/lhajkuI3pgIlcclxuICAgICAgICBzZWxlY3RBbGwoc2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgaWYoc2VsZWN0aW9uLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3REYXRhW2l0ZW1bdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25MaXN0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLnNlbGVjdERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IHNlbGVjdGlvbkxpc3QubWFwKChpdGVtKT0+aXRlbVt0aGlzLnJvd0tleV0pO1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgc2VsZWN0aW9uTGlzdCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXRDdXJyZW50KGluZGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS5zZXRDdXJyZW50Um93KHRoaXMubGlzdFtpbmRleF0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0RGF0YSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZCh0cmVlLCB0cmVlTm9kZSwgcmVzb2x2ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2xvYWQnLCB0cmVlLCB0cmVlTm9kZSwgcmVzb2x2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG48L3NjcmlwdD5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4gICAgLnBhZ2UtdGFibGV7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgIC50YWJsZXtcclxuICAgICAgICAgICAgZmxleDogYXV0byAxIDE7XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC9kZWVwLy5lbC10YWJsZSB0aGVhZHtcclxuICAgICAgICBjb2xvcjogIzMzMzMzMztcclxuICAgIH1cclxuICAgIC9kZWVwLy5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGN0ZBO1xyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlLS1taW5pIC5lbC10YWJsZV9fY2VsbHtcclxuICAgICAgICBwYWRkaW5nOiAzcHggMDtcclxuICAgIH1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWQ4ZGExNDQ2JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kOGRhMTQ0NiZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1kOGRhMTQ0NiZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCJkOGRhMTQ0NlwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZWwtZGlhbG9nJyxfdm0uX2Ioe2RpcmVjdGl2ZXM6W3tuYW1lOlwiZGlhbG9nRHJhZ1wiLHJhd05hbWU6XCJ2LWRpYWxvZ0RyYWdcIn1dLHN0YXRpY1N0eWxlOntcIm1hcmdpbi10b3BcIjpcIjBcIn0sYXR0cnM6e1widGl0bGVcIjpfdm0udGl0bGUsXCJ2aXNpYmxlXCI6X3ZtLmRpYWxvZ1Zpc2libGUsXCJiZWZvcmUtY2xvc2VcIjpfdm0uaGFuZGxlQ2xvc2UsXCJjZW50ZXJcIjpcIlwiLFwiY2xvc2Utb24tY2xpY2stbW9kYWxcIjpmYWxzZSxcInNob3ctY2xvc2VcIjpfdm0uc2hvd0Nsb3NlLFwiYXBwZW5kLXRvLWJvZHlcIjpcIlwifX0sJ2VsLWRpYWxvZycsX3ZtLiRhdHRycyxmYWxzZSksW19jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJvdmVyZmxvdy15XCI6XCJhdXRvXCIsXCJvdmVyZmxvdy14XCI6XCJoaWRkZW5cIixcInBvc2l0aW9uXCI6XCJyZWxhdGl2ZVwifSxzdHlsZTooe21heEhlaWdodDogX3ZtLm1heEhlaWdodCwgbWluSGVpZ2h0OiBfdm0ubWluSGVpZ2h0fSl9LFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwyKSxfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1widGV4dC1hbGlnblwiOlwiY2VudGVyXCJ9LGF0dHJzOntcInNsb3RcIjpcImZvb3RlclwifSxzbG90OlwiZm9vdGVyXCJ9LFtfdm0uX3QoXCJmb290ZXJcIildLDIpXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiLy8gdi1kaWFsb2dEcmFnOiDlvLnnqpfmi5bmi71cclxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xyXG5WdWUuZGlyZWN0aXZlKCdkaWFsb2dEcmFnJywge1xyXG4gICAgYmluZChlbCkge1xyXG5cdFx0Y29uc3QgZGlhbG9nSGVhZGVyRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuZWwtZGlhbG9nX19oZWFkZXInKTtcclxuXHRcdGNvbnN0IGRyYWdEb20gPSBlbC5xdWVyeVNlbGVjdG9yKCcuZWwtZGlhbG9nJyk7XHJcblx0XHRkaWFsb2dIZWFkZXJFbC5zdHlsZS5jdXJzb3IgPSAnbW92ZSc7XHJcblxyXG5cdFx0Ly8g6I635Y+W5Y6f5pyJ5bGe5oCnIGllIGRvbeWFg+e0oC5jdXJyZW50U3R5bGUg54Gr54uQ6LC35q2MIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbeWFg+e0oCwgbnVsbCk7XHJcblx0XHRjb25zdCBzdHkgPSBkcmFnRG9tLmN1cnJlbnRTdHlsZSB8fCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkcmFnRG9tLCBudWxsKTtcclxuXHJcblx0XHRkaWFsb2dIZWFkZXJFbC5vbm1vdXNlZG93biA9IChldmVudCk9PntcclxuXHRcdFx0Ly8g6byg5qCH5oyJ5LiL77yM6K6h566X5b2T5YmN5YWD57Sg6Led56a75Y+v6KeG5Yy655qE6Led56a7XHJcblx0XHRcdGNvbnN0IGRpc1ggPSBldmVudC5jbGllbnRYIC0gZGlhbG9nSGVhZGVyRWwub2Zmc2V0TGVmdDtcclxuXHRcdFx0Y29uc3QgZGlzWSA9IGV2ZW50LmNsaWVudFkgLSBkaWFsb2dIZWFkZXJFbC5vZmZzZXRUb3A7XHJcblxyXG5cdFx0XHQvLyDojrflj5bliLDnmoTlgLzluKZweCDmraPliJnljLnphY3mm7/mjaJcclxuXHRcdFx0bGV0IHN0eUw9bnVsbDtcclxuXHRcdFx0bGV0IHN0eVQ9bnVsbDtcclxuXHJcblx0XHRcdC8vIOazqOaEj+WcqGll5LitIOesrOS4gOasoeiOt+WPluWIsOeahOWAvOS4uue7hOS7tuiHquW4pjUwJSDnp7vliqjkuYvlkI7otYvlgLzkuLpweFxyXG5cdFx0XHRpZiAoc3R5LmxlZnQuaW5jbHVkZXMoJ1xcJScpKSB7XHJcblx0XHRcdFx0c3R5TCA9ICtkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICogKCtzdHkubGVmdC5yZXBsYWNlKC9cXCUvZywgJycpIC8gMTAwKTtcclxuXHRcdFx0XHRzdHlUID0gK2RvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0ICogKCtzdHkudG9wLnJlcGxhY2UoL1xcJS9nLCAnJykgLyAxMDApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHN0eUwgPSArc3R5LmxlZnQucmVwbGFjZSgvXFxweC9nLCAnJyk7XHJcblx0XHRcdFx0c3R5VCA9ICtzdHkudG9wLnJlcGxhY2UoL1xccHgvZywgJycpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHQvLyDpgJrov4fkuovku7blp5TmiZjvvIzorqHnrpfnp7vliqjnmoTot53nprtcclxuXHRcdFx0XHRjb25zdCBsID0gZS5jbGllbnRYIC0gZGlzWDtcclxuXHRcdFx0XHRjb25zdCB0ID0gZS5jbGllbnRZIC0gZGlzWTtcclxuXHJcblx0XHRcdFx0Ly8g56e75Yqo5b2T5YmN5YWD57SgXHJcblx0XHRcdFx0ZHJhZ0RvbS5zdHlsZS5sZWZ0ID0gYCR7bCArIHN0eUx9cHhgO1xyXG5cdFx0XHRcdGRyYWdEb20uc3R5bGUudG9wID0gYCR7dCArIHN0eVR9cHhgO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xyXG5cdFx0XHRcdGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdH1cclxufSk7XHJcblxyXG5WdWUuZGlyZWN0aXZlKCdyZW1vdmVBcmlhSGlkZGVuJywge1xyXG5cdGJpbmQoZWwpIHtcclxuXHRcdGxldCBhcmlhRWxzID0gZWwucXVlcnlTZWxlY3RvckFsbCgnLmVsLXJhZGlvX19vcmlnaW5hbCcpO1xyXG5cdFx0YXJpYUVscy5mb3JFYWNoKChpdGVtKT0+e1xyXG5cdFx0XHRpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufSk7IiwiPHRlbXBsYXRlPlxyXG4gICAgPGVsLWRpYWxvZyB2LWJpbmQ9XCIkYXR0cnNcIiA6dGl0bGU9XCJ0aXRsZVwiIDp2aXNpYmxlPVwiZGlhbG9nVmlzaWJsZVwiIHYtZGlhbG9nRHJhZyA6YmVmb3JlLWNsb3NlPVwiaGFuZGxlQ2xvc2VcIiBjZW50ZXIgOmNsb3NlLW9uLWNsaWNrLW1vZGFsPVwiZmFsc2VcIiA6c2hvdy1jbG9zZT1cInNob3dDbG9zZVwiIGFwcGVuZC10by1ib2R5IHN0eWxlPVwibWFyZ2luLXRvcDogMDtcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bztvdmVyZmxvdy14OiBoaWRkZW47cG9zaXRpb246IHJlbGF0aXZlO1wiIDpzdHlsZT1cInttYXhIZWlnaHQsIG1pbkhlaWdodH1cIj5cclxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgc2xvdD1cImZvb3RlclwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwiZm9vdGVyXCI+PC9zbG90PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9lbC1kaWFsb2c+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5pbXBvcnQgJy4vZGlhbG9nLWRyYWcnO1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnRGlhbG9nJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAn5o+Q56S6J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWF4SGVpZ2h0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJzYwdmgnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtaW5IZWlnaHQ6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnMTUwcHgnXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRhdGEoKXtcclxuICAgICAgICByZXR1cm57XHJcbiAgICAgICAgICAgIGRpYWxvZ1Zpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgIHNob3dDbG9zZTogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoKXtcclxuICAgICAgICBpZih0aGlzLiRsaXN0ZW5lcnNbJ2Nsb3NlJ10pe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBoYW5kbGVDbG9zZSgpe1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi9kZWVwLy5lbC1kaWFsb2dfX2hlYWRlcntcclxuICAgIHBhZGRpbmc6IDE1cHggMjBweDtcclxufVxyXG4vZGVlcC8uZWwtZGlhbG9nLS1jZW50ZXIgLmVsLWRpYWxvZ19fYm9keXtcclxuICAgIHBhZGRpbmc6IDIwcHg7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQxNDg3NjJlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MTQ4NzYyZSZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00MTQ4NzYyZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI0MTQ4NzYyZVwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZWwtY2FyZCcse3N0YXRpY1N0eWxlOntcImhlaWdodFwiOlwiY2FsYygxMDAlIC0gMnB4KVwiLFwib3ZlcmZsb3dcIjpcImF1dG9cIn0sYXR0cnM6e1wic2hhZG93XCI6X3ZtLnNoYWRvd319LFtfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJjbGVhcmZpeFwiLGF0dHJzOntcInNsb3RcIjpcImhlYWRlclwifSxzbG90OlwiaGVhZGVyXCJ9LFtfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wiZm9udC1zaXplXCI6XCIxNnB4XCJ9fSxbKF92bS4kc2xvdHNbJ2NhcmQtdGl0bGUnXSk/W192bS5fdChcImNhcmQtdGl0bGVcIildOltfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXV0sMiksX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcImZsZXhcIjpcIjFcIixcInBvc2l0aW9uXCI6XCJyZWxhdGl2ZVwiLFwiZGlzcGxheVwiOlwiZmxleFwiLFwianVzdGlmeS1jb250ZW50XCI6XCJyaWdodFwifX0sW192bS5fdChcImNhcmQtdG9vbHNcIildLDIpXSksX3ZtLl90KFwiZGVmYXVsdFwiKV0sMilcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxyXG4gICAgPGVsLWNhcmQgOnNoYWRvdz1cInNoYWRvd1wiIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO292ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICAgIDxkaXYgc2xvdD1cImhlYWRlclwiIGNsYXNzPVwiY2xlYXJmaXhcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweDtcIj5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiJHNsb3RzWydjYXJkLXRpdGxlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiY2FyZC10aXRsZVwiPjwvc2xvdD5cclxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPnt7IHRpdGxlIH19PC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO3Bvc2l0aW9uOiByZWxhdGl2ZTtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogcmlnaHQ7XCI+XHJcbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiY2FyZC10b29sc1wiPjwvc2xvdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgPC9lbC1jYXJkPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ0NhcmQnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICB0aXRsZToge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaGFkb3c6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi9kZWVwLy5lbC1jYXJkX19oZWFkZXJ7XHJcbiAgICBwYWRkaW5nOiA4cHggMjBweDtcclxuICAgIC5jbGVhcmZpeHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB9XHJcbn1cclxuXHJcbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00MC51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00MC51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMjIudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00MWNhMjIzMCZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDFjYTIyMzAmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NDFjYTIyMzAmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNDFjYTIyMzBcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gKF92bS5zaG93KT9fYygnZGl2JyxbKF92bS5kYXRhLmxlbmd0aCA+IDApP192bS5fbCgoX3ZtLmRhdGEpLGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBfYygnYXV0aC10cmVlJyx7a2V5Oml0ZW0uaWQsYXR0cnM6e1wiZGF0YVwiOml0ZW0sXCJwcm9wc1wiOl92bS5wcm9wc30sb246e1wib24tbm9kZS1leHBhbmRcIjooZGF0YSk9Pl92bS5vbkV4cGFuZChkYXRhKSxcIm9uLW5vZGUtY2hlY2tlZFwiOihkYXRhKT0+X3ZtLm9uQ2hlY2tlZChkYXRhKX19KX0pOl92bS5fZSgpXSwyKTpfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvLyDmmK/lkKbmnInlrZDoioLngrlcbmNvbnN0IGhhc0NoaWxkcmVuID0gKGRhdGEpPT57XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YS5jaGlsZHJlbikgJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwO1xufTtcblxuLy8g5Yib5bu66IqC54K5XG5leHBvcnQgY29uc3QgcmVuZGVyTGFiZWwgPSAoaCwgZGF0YSwgY29udGV4dCk9PntcbiAgICBjb25zdCB7cHJvcHMsIGxpc3RlbmVyc30gPSBjb250ZXh0O1xuICAgIGNvbnN0IGNsaWNrSGFuZGxlciA9IGxpc3RlbmVyc1snb24tbm9kZS1leHBhbmQnXTtcbiAgICBjb25zdCBjaGVja2VkSGFuZGxlciA9IGxpc3RlbmVyc1snb24tbm9kZS1jaGVja2VkJ107XG4gICAgY29uc3QgbGFiZWwgPSBkYXRhW3Byb3BzLnByb3BzLmxhYmVsXTtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgY2hpbGROb2Rlcy5wdXNoKGxhYmVsKTtcblxuICAgIGNvbnN0IGljb0NsYXNzID0gW107XG4gICAgaWYoaGFzQ2hpbGRyZW4oZGF0YSkpe1xuICAgICAgICBpZihkYXRhLmV4cGFuZCl7XG4gICAgICAgICAgICBpY29DbGFzcy5wdXNoKCdpY29uLWljb24tZHdvbicpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGljb0NsYXNzLnB1c2goJ2ljb24taWNvbl9yaWdodCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoKCdsaScsIHtcbiAgICB9LCBbXG4gICAgICAgIGgoJ2knLCB7XG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogYGljb25mb250ICR7aWNvQ2xhc3Muam9pbignICcpfWBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IGAkezE0KmRhdGEuX2xldmV9cHhgLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMnB4KScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICcjNjY2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpPT57XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrSGFuZGxlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sICcnKSxcbiAgICAgICAgaCgnaScsIHtcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBkYXRhLmNoZWNrZWQ/J2ljb25mb250IGljb24tZmFuZ3hpbmd4dWFuemhvbmdmaWwnOidpY29uZm9udCBpY29uLWZhbmd4aW5nd2VpeHVhbnpob25nJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICcjNjY2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpPT57XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWRIYW5kbGVyKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgJycpLFxuICAgICAgICBoKCdzcGFuJywge1xuXG4gICAgICAgIH0sIGNoaWxkTm9kZXMpXG4gICAgXSk7XG59O1xuXG4vLyDliJvlu7ogbm9kZSDlrZDoioLngrlcbmV4cG9ydCBjb25zdCByZW5kZXJDaGlsZHJlbiA9IChoLCBsaXN0LCBleHBhbmQsIGNvbnRleHQpPT57XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkgJiYgbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBsaXN0Lm1hcChpdGVtPT57XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyTm9kZShoLCBpdGVtLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjbHMgPSBbJ3RyZWUtbm9kZS1jaGlsZHJlbiddO1xuICAgICAgICBpZighZXhwYW5kKXtcbiAgICAgICAgICAgIGNscy5wdXNoKCdleHBhbmQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaCgnZGl2Jywge1xuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNscy5qb2luKCcgJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyTm9kZSA9IChoLCBkYXRhLCBjb250ZXh0KT0+e1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBbXTtcbiAgICBjaGlsZE5vZGVzLnB1c2gocmVuZGVyTGFiZWwoaCwgZGF0YSwgY29udGV4dCkpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZHJlbjtcbiAgICBpZihoYXNDaGlsZHJlbihkYXRhKSl7XG4gICAgICAgIGNoaWxkTm9kZXMucHVzaChyZW5kZXJDaGlsZHJlbihoLCBjaGlsZHJlbiwgZGF0YS5leHBhbmQsIGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaCgndWwnLCB7XG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdub2RlJ1xuICAgICAgICB9XG4gICAgfSwgY2hpbGROb2Rlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKGgsIGNvbnRleHQpPT57XG4gICAgY29uc3Qge3Byb3BzfSA9IGNvbnRleHQ7XG4gICAgcmV0dXJuIHJlbmRlck5vZGUoaCwgcHJvcHMuZGF0YSwgY29udGV4dCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZW5kZXI7IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgdi1pZj1cInNob3dcIj5cbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJkYXRhLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxhdXRoLXRyZWUgdi1mb3I9XCJpdGVtIGluIGRhdGFcIlxuICAgICAgICAgICAgICAgIDprZXk9XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpwcm9wcz1cInByb3BzXCJcbiAgICAgICAgICAgICAgICBAb24tbm9kZS1leHBhbmQ9XCIoZGF0YSk9Pm9uRXhwYW5kKGRhdGEpXCJcbiAgICAgICAgICAgICAgICBAb24tbm9kZS1jaGVja2VkPVwiKGRhdGEpPT5vbkNoZWNrZWQoZGF0YSlcIlxuICAgICAgICAgICAgPjwvYXV0aC10cmVlPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCByZW5kZXIgZnJvbSAnLi90cmVlJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnVHJlZScsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBBdXRoVHJlZToge1xuICAgICAgICAgICAgcmVuZGVyLFxuICAgICAgICAgICAgZnVuY3Rpb25hbDogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgZGVmYXVsdDogKCk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ25hbWUnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGF0YSgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogMSxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgbGlzdDogW10sXG4gICAgICAgICAgICBjaGVja2VkOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBpbml0KGRhdGEsIGxldmUpe1xuICAgICAgICAgICAgZGF0YS5fbGV2ZSA9IGxldmU7XG4gICAgICAgICAgICBpZihkYXRhLmNoaWxkcmVuICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgbGV2ZSsrO1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEuY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoZGF0YS5jaGlsZHJlbltpXSwgbGV2ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDliLfmlrBcbiAgICAgICAgcmVmcmVzaCgpe1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g5bGV5byAL+makOiXj1xuICAgICAgICBvbkV4cGFuZChkYXRhKXtcbiAgICAgICAgICAgIGRhdGEuZXhwYW5kID0gIWRhdGEuZXhwYW5kO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmAieS4rS/lj5bmtojpgInkuK1cbiAgICAgICAgb25DaGVja2VkKGRhdGEpe1xuICAgICAgICAgICAgZGF0YS5jaGVja2VkID0gIWRhdGEuY2hlY2tlZDtcbiAgICAgICAgICAgIHRoaXMudG9vbGVyQ2hlY2tlZCh0aGlzLmRhdGEsIGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnRDaGVja2VkKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9vbGVyQ2hlY2tlZChsaXN0LCBub2RlKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGxpc3Qpe1xuICAgICAgICAgICAgICAgIGlmKGxpc3RbaV0uaWQgPT09IG5vZGUuaWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENoaWxkQ2hlY2tlZChsaXN0W2ldLmNoaWxkcmVuLCBsaXN0W2ldLmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xlckNoZWNrZWQobGlzdFtpXS5jaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDpgInkuK3oioLngrnml7bvvIzorr7nva7lrZDoioLngrnlhajpgIlcbiAgICAgICAgc2V0Q2hpbGRDaGVja2VkKGNoaWxkcmVuLCBjaGVja2VkKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENoaWxkQ2hlY2tlZChjaGlsZHJlbltpXS5jaGlsZHJlbiwgY2hlY2tlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiuvue9rueItuiKgueCuemAieS4rVxuICAgICAgICBzZXRQYXJlbnRDaGVja2VkKGRhdGEpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkSXNDaGVja2VkKGRhdGFbaV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXS5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50Q2hlY2tlZChkYXRhW2ldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g5Yik5pat6IqC54K555qE5a2Q6IqC54K55piv5ZCm5pyJ6YCJ5LitXG4gICAgICAgIGNoaWxkSXNDaGVja2VkKGNoaWxkcmVuKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZElzQ2hlY2tlZChjaGlsZHJlbltpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDorr7nva7pu5jorqTpgInkuK1cbiAgICAgICAgc2V0RGVmYXVsdENoZWNrZWQoZGVmYXVsdElkcyl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkZWZhdWx0SWRzKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQodGhpcy5kYXRhLCBkZWZhdWx0SWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50Q2hlY2tlZCh0aGlzLmRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICAvLyDmoLnmja7miYDnu5nnmoRpZO+8jOiuvue9ruaUuemhuemAieS4rVxuICAgICAgICBzZXRDaGVja2VkKGRhdGEsIGlkKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uaWQgPT09IGlkKXtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZChkYXRhW2ldLmNoaWxkcmVuLCBpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiOt+WPlumAieS4remAieeahGtleVxuICAgICAgICBnZXRDaGVja2VkS2V5cygpe1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZEtleXModGhpcy5kYXRhLCBrZXlzKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9LFxuICAgICAgICAvLyDpgY3ljoblh7rpgInkuK3pgInnmoRrZXlcbiAgICAgICAgX2dldENoZWNrZWRLZXlzKGRhdGEsIGtleXMpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRhdGFbaV0uaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWRLZXlzKGRhdGFbaV0uY2hpbGRyZW4sIGtleXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6I635Y+W6YCJ5Lit6YCJ55qE6IqC54K5XG4gICAgICAgIGdldENoZWNrZWROb2Rlcygpe1xuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWROb2Rlcyh0aGlzLmRhdGEsIG5vZGVzKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YGN5Y6G5Ye66YCJ5Lit6YCJ55qE6IqC54K5XG4gICAgICAgIF9nZXRDaGVja2VkTm9kZXMoZGF0YSwgbm9kZXMpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChkYXRhW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkTm9kZXMoZGF0YVtpXS5jaGlsZHJlbiwgbm9kZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaSBpbiB0aGlzLmRhdGEpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQodGhpcy5kYXRhW2ldLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICAgICAgZGVlcDogdHJ1ZVxuICAgICAgICB9XG4gICAgfVxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XG5AaW1wb3J0IHVybCguL2ljb24vaWNvbmZvbnQuY3NzKTtcbnVse1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgIGxpe1xuICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgIC5jaGVjay1pY297XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBoZWlnaHQ6IDVweDtcbiAgICAgICAgICAgIHdpZHRoOiA1cHg7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpOmhvdmVye1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRjb2xvcjogIzAwMDAwMCwgJGFscGhhOiAwLjEpO1xuICAgIH1cblxuICAgIC5leHBhbmR7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTQwLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0yMi51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTIyLnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVlODFlMDVlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZTgxZTA1ZSZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01ZTgxZTA1ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI1ZTgxZTA1ZVwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHtcbiAgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpO1xuICB9XG59IiwiaW1wb3J0IGNoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24gZnJvbSBcIi4vY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xuICBjaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7XG4gIHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7XG59IiwiaW1wb3J0IGFzc2VydENsYXNzQnJhbmQgZnJvbSBcIi4vYXNzZXJ0Q2xhc3NCcmFuZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0MihzLCBhLCByKSB7XG4gIHJldHVybiBzLnNldChhc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjtcbn0iLCJpbXBvcnQgYXNzZXJ0Q2xhc3NCcmFuZCBmcm9tIFwiLi9hc3NlcnRDbGFzc0JyYW5kLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQyKHMsIGEpIHtcbiAgcmV0dXJuIHMuZ2V0KGFzc2VydENsYXNzQnJhbmQocywgYSkpO1xufSIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFxcJycgKyBuYW1lICsgJ1xcJycpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcblxuICB1dGlscy50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsXG4iLCJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJ1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2JcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG4iLCJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IChcbiAgKHByb2R1Y3QpID0+IHtcbiAgICByZXR1cm4gaGFzQnJvd3NlckVudiAmJiBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YocHJvZHVjdCkgPCAwXG4gIH0pKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0KTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnZcbn1cbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuL25vZGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9jb21tb24vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4vdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgdG9VUkxFbmNvZGVkRm9ybSBmcm9tICcuLi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChkYXRhICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSlcbiAgICB9IGVsc2UgaWYodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3BlZWRvbWV0ZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi8uLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgY29va2llcyBmcm9tICcuLy4uL2hlbHBlcnMvY29va2llcy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi8uLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4uL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBzcGVlZG9tZXRlciBmcm9tICcuLi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzJztcblxuZnVuY3Rpb24gcHJvZ3Jlc3NFdmVudFJlZHVjZXIobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0pIHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZVxuICAgIH07XG5cbiAgICBkYXRhW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddID0gdHJ1ZTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9O1xufVxuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCB3aXRoWFNSRlRva2VufSA9IGNvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKGZhbHNlKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSByZXF1ZXN0SGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgY29uc3QgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZihwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4oY29uZmlnKSk7XG5cbiAgICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSkge1xuICAgICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgICAgY29uc3QgeHNyZlZhbHVlID0gY29uZmlnLnhzcmZIZWFkZXJOYW1lICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKTtcblxuICAgICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KGNvbmZpZy54c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXJcbn1cblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tIFwiLi4vYWRhcHRlcnMvYWRhcHRlcnMuanNcIjtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vQXhpb3NIZWFkZXJzLmpzXCI7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB0aGluZy50b0pTT04oKSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjYuN1wiOyIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkgPSB7fSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuXG4gICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2tcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG4iLCJjb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwe1xyXG4gICAgI2F4aW9zO1xyXG4gICAgI3JlcXVlc3RDb3VudCA9IDA7IC8vIOivt+axguasoeaVsFxyXG4gICAgI2xvYWRpbmdJbnN0YW5jZSA9IG51bGw7XHJcbiAgICAjY29uZmlnID0ge1xyXG4gICAgICAgIGJhc2VVUkw6ICcnLFxyXG4gICAgICAgIHRpbWVvdXQ6IDYwICogMTAwMCxcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxyXG4gICAgICAgIHN1Y2Nlc3NDb2RlOiAyMDAsXHJcbiAgICAgICAgZXJyb3JDb2RlOiA1MDAsXHJcbiAgICAgICAgdG9rZW5LZXk6ICd0b2tlbicsXHJcbiAgICAgICAgc3RvcmFnZTogJ3Nlc3Npb24nLFxyXG4gICAgICAgIGNhbGxCYWNrQ29kZTogW10sXHJcbiAgICAgICAgY2FsbDogbnVsbFxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICAgICAgZm9yKGNvbnN0IGsgaW4gdGhpcy4jY29uZmlnKXtcclxuICAgICAgICAgICAgaWYob3B0aW9uc1trXSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25maWdba10gPSBvcHRpb25zW2tdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XHJcbiAgICAgICAgYXhpb3MuZGVmYXVsdHMuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MgPSBheGlvcy5jcmVhdGUodGhpcy4jY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxyXG4gICAgICAgICAgICBjb25maWc9PntcclxuICAgICAgICAgICAgICAgIGlmKCFjb25maWcucGFyYW1zKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcucGFyYW1zID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlID0gbG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9rZW4gPSAnJztcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuI2NvbmZpZy5zdG9yYWdlID09PSAnc2Vzc2lvbicpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLiNjb25maWcudG9rZW5LZXkpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodGhpcy4jY29uZmlnLnN0b3JhZ2UgPT09ICdsb2NhbCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy4jY29uZmlnLnRva2VuS2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzW3RoaXMuI2NvbmZpZy50b2tlbktleV0gPSB0b2tlbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yPT57XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLiNheGlvcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxyXG4gICAgICAgICAgICByZXNwb25zZT0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50LS07XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmdJbnN0YW5jZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNyZXF1ZXN0Q291bnQtLTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuI3JlcXVlc3RDb3VudCA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyl7XHJcbiAgICAgICAgaWYoIXJlcyl7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocmVzLmNvZGUgPT09IHRoaXMuI2NvbmZpZy5zdWNjZXNzQ29kZSl7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYocmVzLmNvZGUgPT09IHRoaXMuI2NvbmZpZy5lcnJvckNvZGUpe1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZXJyKHJlcyk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZXJyb3IocmVzLm1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZSBpZih0aGlzLiNjb25maWcuY2FsbEJhY2tDb2RlLmluY2x1ZGVzKHJlcy5jb2RlKSAmJiB0eXBlb2YgdGhpcy4jY29uZmlnLmNhbGwgPT09ICdmdW5jdGlvbicpe1xyXG4gICAgICAgICAgICB0aGlzLiNjb25maWcuY2FsbChyZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwb3N0KHVybCxwYXJhbXMsc3VjY2VzcyxlcnIpe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnBvc3QodXJsLHBhcmFtcykudGhlbihyZXM9PntcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUodXJsLHBhcmFtcyxzdWNjZXNzLGVycil7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MudXBkYXRlKHVybCxwYXJhbXMpLnRoZW4ocmVzPT57XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KHVybCwgcGFyYW1zLCBzdWNjZXNzLCBlcnIpe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLmdldCh1cmwsIHsgcGFyYW1zOiBwYXJhbXN9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKHVybCwgcGFyYW1zLCBzdWNjZXNzLCBlcnIpe1xyXG5cdFx0dGhpcy4jYXhpb3MuZGVsZXRlKHVybCwgeyBwYXJhbXM6IHBhcmFtc30pLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0dGhpcy5faGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyk7XHJcblx0XHR9KVxyXG5cdH1cclxuXHJcbiAgICBkb3duTG9hZCh1cmwsIHBhcmFtcz17fSl7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MucG9zdCh1cmwsIHBhcmFtcywgeydyZXNwb25zZVR5cGUnOiAnYmxvYid9KS50aGVuKHJlcz0+e1xyXG5cdFx0XHRpZihyZXMpe1xyXG5cdFx0XHRcdGxldCBmaWxlTmFtZSA9IHBhcmFtcy5maWxlTmFtZTtcclxuXHRcdFx0XHRpZighZmlsZU5hbWUpe1xyXG5cdFx0XHRcdFx0ZmlsZU5hbWUgPSByZXMuaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddLnNwbGl0KCdmaWxlbmFtZT0nKVsxXS5yZXBsYWNlKC9cIi9nLCAnJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmRhdGFdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtjaGFyc2V0PVVURi04J30pO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcblx0XHRcdFx0bGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdGxpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cdFx0XHRcdGxpbmsuZG93bmxvYWQgPSBkZWNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpO1xyXG5cdFx0XHRcdGxpbmsuY2xpY2soKTtcclxuXHRcdFx0XHR3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChsaW5rLmhyZWYpO1xyXG5cdFx0XHR9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJyZXF1aXJlKCcuL21lc3NhZ2UvaW5kZXguanMnKTtcclxuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSAnLi9wYWdpbmF0aW9uL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBQYWdlVGFibGUgZnJvbSAnLi9wYWdlLXRhYmxlL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi9kaWFsb2cvSW5kZXgudnVlJztcclxuaW1wb3J0IENhcmQgZnJvbSAnLi9jYXJkL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBUcmVlIGZyb20gJy4vdHJlZS9JbmRleC52dWUnO1xyXG5pbXBvcnQgX0h0dHAgZnJvbSAnLi9odHRwL2luZGV4LmpzJztcclxuY29uc3QgY29tcyA9IFtQYWdpbmF0aW9uLCBQYWdlVGFibGUsIERpYWxvZywgQ2FyZCwgVHJlZV07XHJcbmNvbnN0IGluc3RhbGwgPSBmdW5jdGlvbihWdWUpe1xyXG4gICAgY29tcy5mb3JFYWNoKGNvbSA9PiB7XHJcbiAgICAgICAgVnVlLmNvbXBvbmVudChjb20ubmFtZSwgY29tKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbi8vIOWvvOWHuue7hOS7tlxyXG5leHBvcnQgZGVmYXVsdCBpbnN0YWxsO1xyXG5cclxuZXhwb3J0IGNsYXNzIEh0dHAgZXh0ZW5kcyBfSHR0cHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0ICcuL3NldFB1YmxpY1BhdGgnXG5pbXBvcnQgbW9kIGZyb20gJ35lbnRyeSdcbmV4cG9ydCBkZWZhdWx0IG1vZFxuZXhwb3J0ICogZnJvbSAnfmVudHJ5J1xuIl0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJ0b3RhbCIsIl9iIiwiYXR0cnMiLCJjdXJyZW50UGFnZSIsInBhZ2VTaXplIiwicGFnZVNpemVzIiwib24iLCJoYW5kbGVTaXplQ2hhbmdlIiwiaGFuZGxlQ3VycmVudENoYW5nZSIsIiRhdHRycyIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwibmFtZSIsInByb3BzIiwicmVxdWlyZWQiLCJ0eXBlIiwiTnVtYmVyIiwiZGVmYXVsdCIsInBhZ2UiLCJsaW1pdCIsIkFycmF5IiwiY29tcHV0ZWQiLCJnZXQiLCJzZXQiLCJ2YWwiLCIkZW1pdCIsInRvdGFsQ291bnQiLCJtZXRob2RzIiwic3RhdGljQ2xhc3MiLCJ0YWJsZUlkIiwic3RhdGljU3R5bGUiLCJyZWYiLCJsaXN0Iiwicm93S2V5IiwibG9hZCIsImhsaWdodEN1cnJlbnRSb3ciLCJkZWZhdWx0RXhwYW5kQWxsIiwiaGFuZGVsU2VsZWN0aW9uQ2hhbmdlIiwic2VsZWN0QWxsIiwiaGFuZGxlUm93Q2xpY2siLCJzaG93Q2hlY2tCb3giLCJzb3J0TnVtIiwic2NvcGVkU2xvdHMiLCJfdSIsImtleSIsImZuIiwic2NvcGUiLCJfdiIsIl9zIiwicGFyYW1zIiwiJGluZGV4IiwiX3QiLCJ1cGRhdGU6cGFnZSIsIiRldmVudCIsIiRzZXQiLCJnZXRMaXN0IiwiZGF0YSIsInVybCIsIlN0cmluZyIsIm1ldGhvZCIsIkJvb2xlYW4iLCJkZWZhdWx0UGFyYW1zIiwiT2JqZWN0IiwiZGVmYXVsdFNlbGVjdCIsInlwZSIsIndhdGNoIiwibmV3VmFsIiwiaGFuZGxlciIsInNldENoZWNrZWQiLCJkZWVwIiwib2xkVmFsIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyaW5nIiwic2VsZWN0RGF0YSIsInNlbGVjdElkcyIsIm1vdW50ZWQiLCIkbGlzdGVuZXJzIiwiaXRlbSIsInBhZ2VPcHRpb24iLCJzdG9yYWdlUGFyYW1zIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwiJHJvdXRlIiwicGF0aCIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwiaHR0cCIsInJlcyIsIl9zZXREYXRhIiwicG9zdCIsInJlY29yZHMiLCJsZW5ndGgiLCJtYXAiLCIkbmV4dFRpY2siLCIkcmVmcyIsImluY2x1ZGVzIiwidG9nZ2xlUm93U2VsZWN0aW9uIiwicXVlcnkiLCJrZXlzIiwicm93IiwiY29sdW1uIiwiZXZlbnQiLCJfIiwic2VsZWN0aW9uTGlzdCIsInZhbHVlcyIsInNlbGVjdGlvbiIsInNldEN1cnJlbnQiLCJpbmRleCIsInNldEN1cnJlbnRSb3ciLCJnZXREYXRhIiwidHJlZSIsInRyZWVOb2RlIiwicmVzb2x2ZSIsImRpcmVjdGl2ZXMiLCJyYXdOYW1lIiwidGl0bGUiLCJkaWFsb2dWaXNpYmxlIiwiaGFuZGxlQ2xvc2UiLCJzaG93Q2xvc2UiLCJzdHlsZSIsIm1heEhlaWdodCIsIm1pbkhlaWdodCIsInNsb3QiLCJWdWUiLCJkaXJlY3RpdmUiLCJiaW5kIiwiZWwiLCJkaWFsb2dIZWFkZXJFbCIsInF1ZXJ5U2VsZWN0b3IiLCJkcmFnRG9tIiwiY3Vyc29yIiwic3R5IiwiY3VycmVudFN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm9ubW91c2Vkb3duIiwiZGlzWCIsImNsaWVudFgiLCJvZmZzZXRMZWZ0IiwiZGlzWSIsImNsaWVudFkiLCJvZmZzZXRUb3AiLCJzdHlMIiwic3R5VCIsImxlZnQiLCJkb2N1bWVudCIsImJvZHkiLCJjbGllbnRXaWR0aCIsInJlcGxhY2UiLCJjbGllbnRIZWlnaHQiLCJ0b3AiLCJvbm1vdXNlbW92ZSIsImUiLCJsIiwidCIsIm9ubW91c2V1cCIsImFyaWFFbHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsInJlbW92ZUF0dHJpYnV0ZSIsInNoYWRvdyIsIiRzbG90cyIsInNob3ciLCJfbCIsImlkIiwib25FeHBhbmQiLCJvbkNoZWNrZWQiLCJoYXNDaGlsZHJlbiIsImlzQXJyYXkiLCJjaGlsZHJlbiIsInJlbmRlckxhYmVsIiwiaCIsImNvbnRleHQiLCJsaXN0ZW5lcnMiLCJjbGlja0hhbmRsZXIiLCJjaGVja2VkSGFuZGxlciIsImxhYmVsIiwiY2hpbGROb2RlcyIsInB1c2giLCJpY29DbGFzcyIsImV4cGFuZCIsImRvbVByb3BzIiwiY2xhc3NOYW1lIiwiam9pbiIsIm1hcmdpbkxlZnQiLCJfbGV2ZSIsImZvbnRTaXplIiwidHJhbnNmb3JtIiwiY29sb3IiLCJjbGljayIsImNoZWNrZWQiLCJyZW5kZXJDaGlsZHJlbiIsInJlbmRlck5vZGUiLCJjbHMiLCJjb21wb25lbnRzIiwiQXV0aFRyZWUiLCJmdW5jdGlvbmFsIiwiaW5pdCIsImxldmUiLCJpIiwicmVmcmVzaCIsInRvb2xlckNoZWNrZWQiLCJzZXRQYXJlbnRDaGVja2VkIiwibm9kZSIsInNldENoaWxkQ2hlY2tlZCIsImNoaWxkSXNDaGVja2VkIiwic2V0RGVmYXVsdENoZWNrZWQiLCJkZWZhdWx0SWRzIiwiZ2V0Q2hlY2tlZEtleXMiLCJfZ2V0Q2hlY2tlZEtleXMiLCJnZXRDaGVja2VkTm9kZXMiLCJub2RlcyIsIl9nZXRDaGVja2VkTm9kZXMiLCJpbW1lZGlhdGUiLCJfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIm9iaiIsInByaXZhdGVDb2xsZWN0aW9uIiwiaGFzIiwiVHlwZUVycm9yIiwiY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIl9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjIiwicHJpdmF0ZU1hcCIsInZhbHVlIiwiX2Fzc2VydENsYXNzQnJhbmQiLCJuIiwiYXJndW1lbnRzIiwiYXNzZXJ0Q2xhc3NCcmFuZCIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldDIiLCJzIiwiYSIsInIiLCJfY2xhc3NQcml2YXRlRmllbGRHZXQyIiwidGhpc0FyZyIsIndyYXAiLCJhcHBseSIsInByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwia2luZE9mIiwiY2FjaGUiLCJ0aGluZyIsInN0ciIsImNhbGwiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwiY3JlYXRlIiwia2luZE9mVGVzdCIsInR5cGVPZlRlc3QiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiaXNBcnJheUJ1ZmZlciIsImlzQXJyYXlCdWZmZXJWaWV3IiwicmVzdWx0IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc0Jvb2xlYW4iLCJpc1BsYWluT2JqZWN0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc1N0cmVhbSIsInBpcGUiLCJpc0Zvcm1EYXRhIiwia2luZCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJ0cmltIiwiYWxsT3duS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW4iLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwic2VsZiIsImdsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydHkiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcEZpbHRlciIsInByb3AiLCJtZXJnZWQiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwidW5kZWZpbmVkIiwibGFzdEluZGV4IiwiaW5kZXhPZiIsInRvQXJyYXkiLCJhcnIiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImZvckVhY2hFbnRyeSIsImdlbmVyYXRvciIsIm5leHQiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJpc0hUTUxGb3JtIiwidG9DYW1lbENhc2UiLCJyZXBsYWNlciIsIm0iLCJwMSIsInAyIiwidG9VcHBlckNhc2UiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZnJlZXplTWV0aG9kcyIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsIkVycm9yIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwic3BsaXQiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJpc0Zpbml0ZSIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQUJFVCIsIkFMUEhBX0RJR0lUIiwiZ2VuZXJhdGVTdHJpbmciLCJzaXplIiwiYWxwaGFiZXQiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInNvdXJjZSIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzQXN5bmNGbiIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJoYXNPd25Qcm9wIiwidXRpbHMiLCJBeGlvc0Vycm9yIiwibWVzc2FnZSIsImNvZGUiLCJjb25maWciLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhdHVzIiwiZnJvbSIsImVycm9yIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiY2F1c2UiLCJQbGF0Zm9ybUZvcm1EYXRhIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsImRvdHMiLCJjb25jYXQiLCJlYWNoIiwidG9rZW4iLCJpc0ZsYXRBcnJheSIsInNvbWUiLCJwcmVkaWNhdGVzIiwidGVzdCIsInRvRm9ybURhdGEiLCJmb3JtRGF0YSIsIm9wdGlvbnMiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsImRlZmluZWQiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJfQmxvYiIsIkJsb2IiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwidG9JU09TdHJpbmciLCJCdWZmZXIiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwicG9wIiwiZW5jb2RlIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1hdGNoIiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGVyIiwiX2VuY29kZSIsImJ1aWxkVVJMIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiZm9yRWFjaEhhbmRsZXIiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIlVSTFNlYXJjaFBhcmFtcyIsImlzQnJvd3NlciIsImNsYXNzZXMiLCJwcm90b2NvbHMiLCJoYXNCcm93c2VyRW52IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsInBsYXRmb3JtIiwidG9VUkxFbmNvZGVkRm9ybSIsImhlbHBlcnMiLCJpc05vZGUiLCJwYXJzZVByb3BQYXRoIiwiYXJyYXlUb09iamVjdCIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiZW50cmllcyIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic3RyaW5naWZ5U2FmZWx5IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsIkpTT05SZXF1ZXN0ZWQiLCJyZXNwb25zZVR5cGUiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJpZ25vcmVEdXBsaWNhdGVPZiIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwiJGludGVybmFscyIsIm5vcm1hbGl6ZUhlYWRlciIsImhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwicGFyc2VUb2tlbnMiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsImlzVmFsaWRIZWFkZXJOYW1lIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsImZvcm1hdEhlYWRlciIsInciLCJjaGFyIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJtYXRjaGVyIiwiZGVsZXRlIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZSIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZmlyc3QiLCJhY2Nlc3NvciIsImludGVybmFscyIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsInNldHRsZSIsInJlamVjdCIsIkVSUl9CQURfUkVRVUVTVCIsImZsb29yIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsImJhc2VVUkwiLCJyZWxhdGl2ZVVSTCIsImJ1aWxkRnVsbFBhdGgiLCJyZXF1ZXN0ZWRVUkwiLCJzdGFuZGFyZEJyb3dzZXJFbnYiLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJsb2NhdGlvbiIsImlzVVJMU2FtZU9yaWdpbiIsInJlcXVlc3RVUkwiLCJub25TdGFuZGFyZEJyb3dzZXJFbnYiLCJwYXJzZVByb3RvY29sIiwic3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJoZWFkIiwidGFpbCIsImZpcnN0U2FtcGxlVFMiLCJjaHVua0xlbmd0aCIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsImNvb2tpZXMiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJpblJhbmdlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQiLCJYTUxIdHRwUmVxdWVzdCIsIlByb21pc2UiLCJkaXNwYXRjaFhoclJlcXVlc3QiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwid2l0aFhTUkZUb2tlbiIsIm9uQ2FuY2VsZWQiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJidG9hIiwiZnVsbFBhdGgiLCJvcGVuIiwicGFyYW1zU2VyaWFsaXplciIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlRGF0YSIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJlcnIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJoYW5kbGVMb2FkIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJoYW5kbGVBYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJoYW5kbGVFcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwiaGFuZGxlVGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJFVElNRURPVVQiLCJ4c3JmVmFsdWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2l0aENyZWRlbnRpYWxzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJzZW5kIiwiaHR0cEFkYXB0ZXIiLCJ4aHJBZGFwdGVyIiwia25vd25BZGFwdGVycyIsInhociIsInJlbmRlclJlYXNvbiIsInJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJnZXRBZGFwdGVyIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJvbkFkYXB0ZXJSZXNvbHV0aW9uIiwib25BZGFwdGVyUmVqZWN0aW9uIiwiaGVhZGVyc1RvT2JqZWN0IiwibWVyZ2VDb25maWciLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJ0aW1lb3V0TWVzc2FnZSIsImRlY29tcHJlc3MiLCJiZWZvcmVSZWRpcmVjdCIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbXB1dGVDb25maWdWYWx1ZSIsImNvbmZpZ1ZhbHVlIiwiVkVSU0lPTiIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiX3JlcXVlc3QiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJ1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInB1c2hSZXNwb25zZUludGVyY2VwdG9ycyIsInByb21pc2UiLCJjaGFpbiIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImZvckVhY2hNZXRob2ROb0RhdGEiLCJmb3JFYWNoTWV0aG9kV2l0aERhdGEiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJodHRwTWV0aG9kIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwicHJvbWlzZUV4ZWN1dG9yIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwic3BsaWNlIiwiYyIsInNwcmVhZCIsImNhbGxiYWNrIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImF4aW9zIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJmb3JtVG9KU09OIiwiX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwiX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwiX2F4aW9zIiwiV2Vha01hcCIsIl9yZXF1ZXN0Q291bnQiLCJfbG9hZGluZ0luc3RhbmNlIiwiX2NvbmZpZyIsIkh0dHAiLCJzdWNjZXNzQ29kZSIsImVycm9yQ29kZSIsInRva2VuS2V5Iiwic3RvcmFnZSIsImNhbGxCYWNrQ29kZSIsImsiLCJfdGhpcyRyZXF1ZXN0Q291bnQiLCJfdGhpcyRyZXF1ZXN0Q291bnQyIiwibG9hZGluZyIsImxvY2FsU3RvcmFnZSIsIl90aGlzJHJlcXVlc3RDb3VudDMiLCJfdGhpcyRyZXF1ZXN0Q291bnQ0IiwiY2xvc2UiLCJfdGhpcyRyZXF1ZXN0Q291bnQ1IiwiX3RoaXMkcmVxdWVzdENvdW50NiIsIl9oYW5kbGVSZXN1bHQiLCJzdWNjZXNzIiwibXNnIiwidXBkYXRlIiwiZG93bkxvYWQiLCJibG9iIiwibGluayIsImRpc3BsYXkiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJkb3dubG9hZCIsInJldm9rZU9iamVjdFVSTCIsInJlcXVpcmUiLCJQYWdpbmF0aW9uIiwiUGFnZVRhYmxlIiwiRGlhbG9nIiwiQ2FyZCIsIlRyZWUiLCJfSHR0cCIsImNvbXMiLCJpbnN0YWxsIiwiY29tIiwiY29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2792\n");
17
17
 
18
18
  /***/ }),
19
19
 
@@ -1997,7 +1997,7 @@ eval("\nvar DESCRIPTORS = __webpack_require__(3724);\nvar uncurryThis = __webpac
1997
1997
  /******/ // startup
1998
1998
  /******/ // Load entry module and return exports
1999
1999
  /******/ // This entry module can't be inlined because the eval-source-map devtool is used.
2000
- /******/ var __webpack_exports__ = __webpack_require__(2601);
2000
+ /******/ var __webpack_exports__ = __webpack_require__(2792);
2001
2001
  /******/ module.exports = __webpack_exports__;
2002
2002
  /******/
2003
2003
  /******/ })()