.'\n );\n }\n }\n el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n }\n\n var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n if (styleBinding) {\n el.styleBinding = styleBinding;\n }\n}\n\nfunction genData$2 (el) {\n var data = '';\n if (el.staticStyle) {\n data += \"staticStyle:\" + (el.staticStyle) + \",\";\n }\n if (el.styleBinding) {\n data += \"style:(\" + (el.styleBinding) + \"),\";\n }\n return data\n}\n\nvar style$1 = {\n staticKeys: ['staticStyle'],\n transformNode: transformNode$1,\n genData: genData$2\n};\n\nvar modules$1 = [\n klass$1,\n style$1\n];\n\n/* */\n\nfunction text (el, dir) {\n if (dir.value) {\n addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"));\n }\n}\n\n/* */\n\nfunction html (el, dir) {\n if (dir.value) {\n addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"));\n }\n}\n\nvar directives$1 = {\n model: model,\n text: text,\n html: html\n};\n\n/* */\n\nvar baseOptions = {\n expectHTML: true,\n modules: modules$1,\n directives: directives$1,\n isPreTag: isPreTag,\n isUnaryTag: isUnaryTag,\n mustUseProp: mustUseProp,\n canBeLeftOpenTag: canBeLeftOpenTag,\n isReservedTag: isReservedTag,\n getTagNamespace: getTagNamespace,\n staticKeys: genStaticKeys(modules$1)\n};\n\nvar ref$1 = createCompiler(baseOptions);\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/* */\n\nvar idToTemplate = cached(function (id) {\n var el = query(id);\n return el && el.innerHTML\n});\n\nvar mount = Vue$3.prototype.$mount;\nVue$3.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && query(el);\n\n /* istanbul ignore if */\n if (el === document.body || el === document.documentElement) {\n \"production\" !== 'production' && warn(\n \"Do not mount Vue to or - mount to normal elements instead.\"\n );\n return this\n }\n\n var options = this.$options;\n // resolve template/el and convert to render function\n if (!options.render) {\n var template = options.template;\n if (template) {\n if (typeof template === 'string') {\n if (template.charAt(0) === '#') {\n template = idToTemplate(template);\n /* istanbul ignore if */\n if (false) {\n warn(\n (\"Template element not found or is empty: \" + (options.template)),\n this\n );\n }\n }\n } else if (template.nodeType) {\n template = template.innerHTML;\n } else {\n if (false) {\n warn('invalid template option:' + template, this);\n }\n return this\n }\n } else if (el) {\n template = getOuterHTML(el);\n }\n if (template) {\n /* istanbul ignore if */\n if (false) {\n mark('compile');\n }\n\n var ref = compileToFunctions(template, {\n shouldDecodeNewlines: shouldDecodeNewlines,\n delimiters: options.delimiters\n }, this);\n var render = ref.render;\n var staticRenderFns = ref.staticRenderFns;\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n\n /* istanbul ignore if */\n if (false) {\n mark('compile end');\n measure(((this._name) + \" compile\"), 'compile', 'compile end');\n }\n }\n }\n return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n if (el.outerHTML) {\n return el.outerHTML\n } else {\n var container = document.createElement('div');\n container.appendChild(el.cloneNode(true));\n return container.innerHTML\n }\n}\n\nVue$3.compile = compileToFunctions;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vue$3);\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(4)))\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n// this module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle\n\nmodule.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n scopeId,\n cssModules\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n // inject cssModules\n if (cssModules) {\n var computed = Object.create(options.computed || null)\n Object.keys(cssModules).forEach(function (key) {\n var module = cssModules[key]\n computed[key] = function () { return module }\n })\n options.computed = computed\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(22)\n\nvar Component = __webpack_require__(3)(\n /* script */\n __webpack_require__(7),\n /* template */\n __webpack_require__(18),\n /* scopeId */\n \"data-v-d877a75c\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__App_vue__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__App_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__App_vue__);\n\n\n\nnew __WEBPACK_IMPORTED_MODULE_0_vue__[\"default\"]({\n el: '#app',\n render: function render(h) {\n return h(__WEBPACK_IMPORTED_MODULE_1__App_vue___default.a);\n }\n});\n\n/***/ }),\n/* 7 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_FAB_vue__ = __webpack_require__(16);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_FAB_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__src_FAB_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue_color__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue_color___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue_color__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\nvar teamUrl = 'https://github.com/PygmySlowLoris';\nvar repoUrl = 'https://github.com/PygmySlowLoris/vue-fab';\n\nvar defaultProps = {\n hex: '#194d33',\n hsl: {\n h: 150,\n s: 0.5,\n l: 0.2,\n a: 1\n },\n hsv: {\n h: 150,\n s: 0.66,\n v: 0.30,\n a: 1\n },\n rgba: {\n r: 25,\n g: 77,\n b: 51,\n a: 1\n },\n a: 1\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'app',\n components: {\n fab: __WEBPACK_IMPORTED_MODULE_0__src_FAB_vue___default.a,\n 'chrome-picker': __WEBPACK_IMPORTED_MODULE_1_vue_color__[\"Chrome\"]\n },\n data: function data() {\n return {\n repoUrl: repoUrl,\n teamUrl: teamUrl,\n positions: ['bottom-right', 'bottom-left', 'top-right', 'top-left'],\n positionTypes: ['fixed', 'absolute'],\n tooltipEvents: ['hover', 'fixed'],\n sizes: ['small', 'medium', 'large'],\n position: 'bottom-right',\n positionType: 'fixed',\n tooltipEvent: 'hover',\n iconSizes: 'medium',\n colors: defaultProps,\n mainIcon: 'add',\n mainTooltip: 'Hello',\n firstIcon: 'cached',\n firstTooltip: 'cached',\n secondIcon: 'add_alert',\n secondTooltip: 'add_alert',\n enableRotation: true\n };\n },\n\n computed: {\n fixedTooltip: function fixedTooltip() {\n return this.tooltipEvent === 'fixed';\n }\n },\n methods: {\n alert: function (_alert) {\n function alert() {\n return _alert.apply(this, arguments);\n }\n\n alert.toString = function () {\n return _alert.toString();\n };\n\n return alert;\n }(function () {\n alert('You have clicked me :)');\n })\n }\n});\n\n/***/ }),\n/* 8 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue_clickaway__ = __webpack_require__(14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue_clickaway___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_vue_clickaway__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue_ripple_directive__ = __webpack_require__(19);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_v_tooltip__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_v_tooltip___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_v_tooltip__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n mixins: [__WEBPACK_IMPORTED_MODULE_0_vue_clickaway__[\"mixin\"]],\n directives: { Ripple: __WEBPACK_IMPORTED_MODULE_1_vue_ripple_directive__[\"a\" /* default */], tooltip: __WEBPACK_IMPORTED_MODULE_2_v_tooltip__[\"VTooltip\"] },\n data: function data() {\n return {\n toggle: this.startOpened,\n pos: {},\n tooltipPosition: 'left'\n };\n },\n\n props: {\n bgColor: {\n default: '#333333'\n },\n position: {\n default: 'bottom-right'\n },\n positionType: {\n default: 'fixed'\n },\n zIndex: {\n default: '999'\n },\n rippleShow: {\n default: true\n },\n rippleColor: {\n default: 'light'\n },\n mainIcon: {\n default: 'add'\n },\n iconSize: {\n default: 'medium'\n },\n mainTooltip: {\n default: null\n },\n fixedTooltip: {\n default: false\n },\n tooltipTimeOutWhenStartOpened: {\n default: 200\n },\n enableRotation: {\n default: true\n },\n actions: {\n default: function _default() {\n return [];\n }\n },\n startOpened: {\n default: false\n },\n toggleWhenAway: {\n default: true\n }\n },\n computed: {\n actionIconSize: function actionIconSize() {\n switch (this.iconSize) {\n case 'small':\n return 'md-18';\n break;\n case 'medium':\n return 'md-24';\n break;\n case 'large':\n return 'md-36';\n break;\n default:\n return 'md-24';\n }\n },\n allowRotation: function allowRotation() {\n return this.enableRotation && this.actions && this.actions.length;\n },\n mainIconSize: function mainIconSize() {\n switch (this.iconSize) {\n case 'small':\n return 'md-24';\n break;\n case 'medium':\n return 'md-36';\n break;\n case 'large':\n return 'md-48';\n break;\n default:\n return 'md-36';\n }\n },\n paddingAmount: function paddingAmount() {\n switch (this.iconSize) {\n case 'small':\n return '28px';\n break;\n case 'medium':\n return '32px';\n break;\n case 'large':\n return '38px';\n break;\n default:\n return '32px';\n }\n },\n listPos: function listPos() {\n if (this.position === 'top-right' || this.position === 'top-left') {\n return {\n top: '-20px',\n paddingTop: '20px'\n };\n }\n return {\n bottom: '-20px',\n paddingBottom: '20px'\n };\n },\n transitionEnter: function transitionEnter() {\n var animation = this.animation;\n return animation.enter;\n },\n transitionLeave: function transitionLeave() {\n var animation = this.animation;\n return animation.leave;\n },\n animation: function animation() {\n if (this.position === 'top-right' || this.position === 'top-left') {\n return {\n enter: 'animated quick fadeInDown',\n leave: 'animated quick fadeOutUp'\n };\n } else if (this.position === 'bottom-right' || this.position === 'bottom-left') {\n return {\n enter: 'animated quick fadeInUp',\n leave: 'animated quick fadeOutDown'\n };\n } else {\n return {\n enter: 'animated fadeInUp',\n leave: 'animated fadeOutDown'\n };\n }\n },\n tooltipTrigger: function tooltipTrigger() {\n\n if (this.fixedTooltip) {\n return 'manual';\n }\n\n return 'hover';\n }\n },\n methods: {\n tooltipPos: function tooltipPos() {\n if (this.position === 'top-right' || this.position === 'bottom-right') {\n this.tooltipPosition = 'left';\n } else {\n this.tooltipPosition = 'right';\n }\n },\n toParent: function toParent(name) {\n this.$emit(name);\n this.toggle = false;\n },\n away: function away() {\n if (this.toggleWhenAway) {\n this.toggle = false;\n }\n },\n setPosition: function setPosition() {\n this.pos = {};\n switch (this.position) {\n case 'bottom-right':\n this.pos.right = '5vw';\n this.pos.bottom = '4vh';\n break;\n case 'bottom-left':\n this.pos.left = '5vw';\n this.pos.bottom = '4vh';\n break;\n case 'top-left':\n this.pos.left = '5vw';\n this.pos.top = '4vh';\n break;\n case 'top-right':\n this.pos.right = '5vw';\n this.pos.top = '4vh';\n break;\n default:\n this.pos.right = '5vw';\n this.pos.bottom = '4vh';\n }\n },\n moveTransition: function moveTransition() {\n var wrapper = document.getElementById(this.position + '-wrapper');\n var el = document.getElementById(this.position + '-action');\n\n if (this.position === 'top-right' || this.position === 'top-left') {\n wrapper.appendChild(el);\n } else {\n wrapper.insertBefore(el, wrapper.childNodes[0]);\n }\n },\n showTooltip: function showTooltip() {\n var _this = this;\n\n var timeOut = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.toggle && this.actions.length && this.fixedTooltip) {\n setTimeout(function () {\n _this.$refs.actions.forEach(function (item) {\n if (_this.toggle) {\n item._tooltip.show();\n }\n });\n }, timeOut);\n }\n },\n afterActionsTransitionEnter: function afterActionsTransitionEnter() {\n this.showTooltip();\n }\n },\n watch: {\n position: function position(val) {\n var _this2 = this;\n\n this.setPosition();\n\n this.$nextTick(function () {\n _this2.moveTransition();\n _this2.tooltipPos();\n });\n }\n },\n mounted: function mounted() {\n this.moveTransition();\n },\n created: function created() {\n this.setPosition();\n\n if (this.startOpened) {\n this.showTooltip(this.tooltipTimeOutWhenStartOpened);\n }\n }\n});\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(0)();\n// imports\n\n\n// module\nexports.push([module.i, \".fab-tooltip.tooltip{display:block!important;padding:4px;z-index:10000}.fab-tooltip.tooltip .tooltip-inner{background:#333;color:#fff;border-radius:0;padding:5px 10px 4px}.fab-tooltip.tooltip tooltip-arrow{display:none}.fab-tooltip.tooltip[aria-hidden=true]{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s}.fab-tooltip.tooltip[aria-hidden=false]{visibility:visible;opacity:1;transition:opacity .15s}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(0)();\n// imports\n\n\n// module\nexports.push([module.i, \".animated.quick[data-v-1073f3cf]{-webkit-animation-duration:.7s!important;animation-duration:.7s!important}.fab-wrapper[data-v-1073f3cf]{z-index:999}.fab-main[data-v-1073f3cf]{border-radius:100px;padding:30px;position:relative;overflow:hidden;display:flex;align-items:center;box-shadow:0 10px 10px rgba(0,0,0,.2),0 4px 4px rgba(0,0,0,.15);z-index:2;justify-content:center}.fab-main .material-icons[data-v-1073f3cf]{color:#fff;transition:all .4s;margin:0 auto}.fab-main .material-icons.main[data-v-1073f3cf]{opacity:1;position:absolute}.fab-main .material-icons.close[data-v-1073f3cf]{opacity:0;position:absolute}.fab-main .material-icons.main.rotate[data-v-1073f3cf]{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:0;transition:opacity .3s ease-in,transform .4s}.fab-main .material-icons.close.rotate[data-v-1073f3cf]{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:1;transition:opacity .3s ease-in,transform .4s}.fab-list[data-v-1073f3cf]{position:relative;z-index:1;margin:2vh 0;display:flex;flex-direction:column;align-items:center}.fab-list li[data-v-1073f3cf]{padding:10px;margin-top:2vh;display:flex;align-items:center;border-radius:100px;box-shadow:0 10px 10px rgba(0,0,0,.2),0 4px 4px rgba(0,0,0,.15)}.fab-list li .material-icons[data-v-1073f3cf]{color:#fff;margin:0 auto}.pointer[data-v-1073f3cf]{cursor:pointer}ul[data-v-1073f3cf]{list-style-type:none;padding:0!important}.fab-wrapper .actions-container[data-v-1073f3cf]{overflow:hidden;z-index:0;position:relative}.material-icons.md-18[data-v-1073f3cf]{font-size:18px}.material-icons.md-24[data-v-1073f3cf]{font-size:24px}.material-icons.md-36[data-v-1073f3cf]{font-size:36px}.material-icons.md-48[data-v-1073f3cf]{font-size:48px}.material-icons.md-dark[data-v-1073f3cf]{color:rgba(0,0,0,.54)}.material-icons.md-dark.md-inactive[data-v-1073f3cf]{color:rgba(0,0,0,.26)}.material-icons.md-light[data-v-1073f3cf]{color:#fff}.material-icons.md-light.md-inactive[data-v-1073f3cf]{color:hsla(0,0%,100%,.3)}@media screen and (max-width:768px){.fab-list[data-v-1073f3cf]{margin:2vh 0}}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(0)();\n// imports\n\n\n// module\nexports.push([module.i, \"#app[data-v-d877a75c]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}.pointer[data-v-d877a75c]{cursor:pointer}h1[data-v-d877a75c],h2[data-v-d877a75c]{font-weight:400}hr[data-v-d877a75c]{background-color:transparent;border:none;display:block;height:inherit;margin:1.5rem 0;border-top:1px dashed}li[data-v-d877a75c]{display:inline-block;margin:0 10px}a[data-v-d877a75c]{color:#0b99b9;text-decoration:underline}.text-medium-grey[data-v-d877a75c]{color:#333}.text-light-grey[data-v-d877a75c]{color:#888}.box.formated[data-v-d877a75c]{position:relative;padding:0}.box.formated .heading[data-v-d877a75c]{font-size:1rem;text-transform:capitalize;padding:.8rem 1.5rem;background-color:#fafafa}.box.formated .content[data-v-d877a75c]{padding:1rem 2rem}i.top-left[data-v-d877a75c]{position:absolute;left:1.5rem;top:.8rem}.vertical-separator[data-v-d877a75c]{display:flex;justify-content:space-around}.vertical-separator .line[data-v-d877a75c]{border-right:1px solid #ccc}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"data:image/png;base64,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\"\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 4);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tooltip_js__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(1);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return defaultOptions; });\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\nvar positions = ['top', 'top-start', 'top-end', 'right', 'right-start', 'right-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end'];\n\nvar defaultOptions = {\n defaultPlacement: 'top',\n defaultClass: 'vue-tooltip-theme',\n defaultTemplate: '
',\n defaultDelay: 0,\n defaultTrigger: 'hover focus',\n defaultOffset: 0,\n defaultContainer: 'body'\n};\n\nfunction getOptions(options) {\n return {\n placement: options.placement || directive.options.defaultPlacement,\n delay: options.delay || directive.options.defaultDelay,\n template: options.template || directive.options.defaultTemplate,\n trigger: options.trigger || directive.options.defaultTrigger,\n offset: options.offset || directive.options.defaultOffset,\n container: options.container || directive.options.defaultContainer\n };\n}\n\nfunction getPlacement(value, modifiers) {\n var placement = value.placement;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = positions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var pos = _step.value;\n\n if (modifiers[pos]) {\n placement = pos;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return placement;\n}\n\nvar SuperTooltip = function (_Tooltip) {\n _inherits(SuperTooltip, _Tooltip);\n\n function SuperTooltip() {\n _classCallCheck(this, SuperTooltip);\n\n return _possibleConstructorReturn(this, (SuperTooltip.__proto__ || Object.getPrototypeOf(SuperTooltip)).apply(this, arguments));\n }\n\n _createClass(SuperTooltip, [{\n key: 'setClasses',\n value: function setClasses(classes) {\n var el = this._tooltipNode;\n\n if (el) {\n var oldClasses = this._oldClasses;\n if (classes) {\n if (oldClasses) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"a\" /* replaceClasses */])(el, classes, oldClasses);\n } else {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"b\" /* addClasses */])(el, classes);\n }\n } else if (oldClasses) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"c\" /* removeClasses */])(el, oldClasses);\n }\n this._oldClasses = classes;\n } else {\n this._pendingClasses = classes;\n }\n\n this._classes = classes;\n }\n }, {\n key: 'setContent',\n value: function setContent(content) {\n this.options.title = content;\n if (this._tooltipNode) {\n var el = this._tooltipNode.querySelector(this.innerSelector);\n\n if (el) {\n if (!content) {\n el.innerHTML = '';\n } else {\n el.innerHTML = content;\n }\n\n this.popperInstance.update();\n }\n }\n }\n }, {\n key: 'setOptions',\n value: function setOptions(options) {\n options = getOptions(options);\n\n var needPopperUpdate = false;\n var needRestart = false;\n\n if (this.options.offset !== options.offset || this.options.placement !== options.placement) {\n needPopperUpdate = true;\n }\n\n if (this.options.template !== options.template || this.options.trigger !== options.trigger || this.options.container !== options.container) {\n needRestart = true;\n }\n\n for (var key in options) {\n this.options[key] = options[key];\n }\n\n if (this._tooltipNode) {\n if (needRestart) {\n var isOpen = this._isOpen;\n\n this.dispose();\n\n var events = typeof this.options.trigger === 'string' ? options.trigger.split(' ').filter(function (trigger) {\n return ['click', 'hover', 'focus'].indexOf(trigger) !== -1;\n }) : [];\n this._setEventListeners(this.reference, events, this.options);\n\n this.setClasses(this._classes);\n\n if (isOpen) {\n this.show();\n }\n } else if (needPopperUpdate) {\n this.popperInstance.update();\n }\n }\n }\n }, {\n key: '_dispose',\n value: function _dispose() {\n var _this2 = this;\n\n this._events.forEach(function (_ref) {\n var func = _ref.func,\n event = _ref.event;\n\n _this2.reference.removeEventListener(event, func);\n });\n this._events = [];\n _get(SuperTooltip.prototype.__proto__ || Object.getPrototypeOf(SuperTooltip.prototype), '_dispose', this).call(this);\n }\n }, {\n key: '_show',\n value: function _show() {\n var _get2,\n _this3 = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n (_get2 = _get(SuperTooltip.prototype.__proto__ || Object.getPrototypeOf(SuperTooltip.prototype), '_show', this)).call.apply(_get2, [this].concat(args));\n\n if (this._pendingClasses) {\n this.setClasses(this._pendingClasses);\n this._pendingClasses = null;\n }\n\n // Fix position\n setTimeout(function () {\n _this3.popperInstance.update();\n }, 0);\n }\n }]);\n\n return SuperTooltip;\n}(__WEBPACK_IMPORTED_MODULE_0_tooltip_js__[\"a\" /* default */]);\n\nfunction createTooltip(el, value, modifiers) {\n var content = value.content || value;\n var classes = value.classes || directive.options.defaultClass;\n\n var tooltip = el._tooltip = new SuperTooltip(el, _extends({\n title: content,\n html: true\n }, getOptions(_extends({}, value, {\n placement: getPlacement(value, modifiers)\n }))));\n tooltip.setClasses(classes);\n}\n\nfunction destroyTooltip(el) {\n if (el._tooltip) {\n el._tooltip.dispose();\n delete el._tooltip;\n }\n}\n\nvar directive = {\n options: defaultOptions,\n bind: function bind(el, _ref2) {\n var value = _ref2.value,\n modifiers = _ref2.modifiers;\n\n var content = value && value.content || value;\n destroyTooltip(el);\n if (content) {\n createTooltip(el, value, modifiers);\n }\n },\n update: function update(el, _ref3) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue,\n modifiers = _ref3.modifiers;\n\n var content = value && value.content || value;\n if (!content) {\n destroyTooltip(el);\n } else if (el._tooltip) {\n var tooltip = el._tooltip;\n // Content\n tooltip.setContent(content);\n // CSS Classes\n tooltip.setClasses(value && value.classes || directive.options.defaultClass);\n // Options\n tooltip.setOptions(_extends({}, value, {\n placement: getPlacement(value, modifiers)\n }));\n } else {\n createTooltip(el, value, modifiers);\n }\n },\n unbind: function unbind(el) {\n destroyTooltip(el);\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"b\"] = directive;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = addClasses;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = removeClasses;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = replaceClasses;\n\nfunction convertToArray(value) {\n if (typeof value === 'string') {\n value = value.split(' ');\n }\n return value;\n}\n\nfunction addClasses(el, classes) {\n classes = convertToArray(classes);\n classes.forEach(function (c) {\n el.classList.add(c);\n });\n}\n\nfunction removeClasses(el, classes) {\n classes = convertToArray(classes);\n classes.forEach(function (c) {\n el.classList.remove(c);\n });\n}\n\nfunction replaceClasses(el, newClasses, oldClasses) {\n removeClasses(el, oldClasses);\n addClasses(el, newClasses);\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar nativeHints = ['native code', '[object MutationObserverConstructor]'];\n\n/**\n * Determine if a function is implemented natively (as opposed to a polyfill).\n * @method\n * @memberof Popper.Utils\n * @argument {Function | undefined} fn the function to check\n * @returns {Boolean}\n */\nvar isNative = function isNative(fn) {\n return nativeHints.some(function (hint) {\n return (fn || '').toString().indexOf(hint) > -1;\n });\n};\n\nvar isBrowser = typeof window !== 'undefined';\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var scheduled = false;\n var i = 0;\n var elem = document.createElement('span');\n\n // MutationObserver provides a mechanism for scheduling microtasks, which\n // are scheduled *before* the next task. This gives us a way to debounce\n // a function but ensure it's called *before* the next paint.\n var observer = new MutationObserver(function () {\n fn();\n scheduled = false;\n });\n\n observer.observe(elem, { attributes: true });\n\n return function () {\n if (!scheduled) {\n scheduled = true;\n elem.setAttribute('x-index', i);\n i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8\n }\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\n// It's common for MutationObserver polyfills to be seen in the wild, however\n// these rely on Mutation Events which only occur when an element is connected\n// to the DOM. The algorithm used in this module does not use a connected element,\n// and so we must ensure that a *native* MutationObserver is available.\nvar supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsNativeMutationObserver ? microtaskDebounce : taskDebounce;\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1) {\n return window.document.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || element.firstElementChild.offsetParent === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element && element.offsetParent;\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return window.document.documentElement;\n }\n\n return offsetParent;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return window.document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = window.document.documentElement;\n var scrollingElement = window.document.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return +styles['border' + sideA + 'Width'].split('px')[0] + +styles['border' + sideB + 'Width'].split('px')[0];\n}\n\nfunction getWindowSizes() {\n var body = window.document.body;\n var html = window.document.documentElement;\n return {\n height: Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight),\n width: Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth)\n };\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Tells if you are running Internet Explorer 10\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean} isIE10\n */\nvar isIE10 = undefined;\n\nvar isIE10$1 = function isIE10$1() {\n if (isIE10 === undefined) {\n isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n }\n return isIE10;\n};\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n if (isIE10$1()) {\n try {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } catch (err) {}\n } else {\n rect = element.getBoundingClientRect();\n }\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var isIE10 = isIE10$1();\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top,\n left: childrenRect.left - parentRect.left,\n width: childrenRect.width,\n height: childrenRect.height\n });\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (isHTML || parent.nodeName === 'BODY') {\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = isIE10 && isHTML ? 0 : +styles.borderTopWidth.split('px')[0];\n var borderLeftWidth = isIE10 && isHTML ? 0 : +styles.borderLeftWidth.split('px')[0];\n var marginTop = isIE10 && isHTML ? 0 : +styles.marginTop.split('px')[0];\n var marginLeft = isIE10 && isHTML ? 0 : +styles.marginLeft.split('px')[0];\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (parent.contains(scrollParent) && (isIE10 || scrollParent.nodeName !== 'BODY')) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var html = window.document.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = getScroll(html);\n var scrollLeft = getScroll(html, 'left');\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = { top: 0, left: 0 };\n var offsetParent = findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(popper));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = window.document.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = window.document.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, 0, boundariesElement);\n\n var sides = {\n top: refRect.top - boundaries.top,\n right: boundaries.right - refRect.right,\n bottom: boundaries.bottom - refRect.bottom,\n left: refRect.left - boundaries.left\n };\n\n var computedPlacement = Object.keys(sides).sort(function (a, b) {\n return sides[b] - sides[a];\n })[0];\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var commonOffsetParent = findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier.function) {\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier.function || modifier.fn;\n if (modifier.enabled && isFunction(fn)) {\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n data.offsets.popper.position = 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'webkit', 'moz', 'o'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length - 1; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof window.document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.left = '';\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? window : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n window.addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n window.removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n window.cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data, options) {\n // apply the final offsets to the popper\n // NOTE: 1 DOM access here\n var styles = {\n position: data.offsets.popper.position\n };\n\n var attributes = {\n 'x-placement': data.placement\n };\n\n // round top and left to avoid blurry text\n var left = Math.round(data.offsets.popper.left);\n var top = Math.round(data.offsets.popper.top);\n\n // if gpuAcceleration is set to true and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n if (options.gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles.top = 0;\n styles.left = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `left` and `top` properties\n styles.left = left;\n styles.top = top;\n styles.willChange = 'top, left';\n }\n\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, _extends({}, styles, data.styles));\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, _extends({}, attributes, data.attributes));\n\n // if the arrow style has been computed, apply the arrow style\n if (data.offsets.arrow) {\n setStyles(data.arrowElement, data.offsets.arrow);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement);\n\n popper.setAttribute('x-placement', placement);\n return options;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var popper = getClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var side = isVertical ? 'top' : 'left';\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n var sideValue = center - getClientRect(data.offsets.popper)[side];\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {};\n data.offsets.arrow[side] = sideValue;\n data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = getClientRect(data.offsets.popper);\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n data.offsets.popper = getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement);\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var popper = getClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = getClientRect(data.offsets.popper);\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var reference = data.offsets.reference;\n var popper = getClientRect(data.offsets.popper);\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var popper = getClientRect(data.offsets.popper);\n var reference = getClientRect(data.offsets.reference);\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[placement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} priority=['left', 'right', 'top', 'bottom']\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arro] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar DEFAULTS = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreateCallback}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdateCallback}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreateCallback\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdateCallback\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper =\n/**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [DEFAULTS](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\nfunction Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n this.update = update;\n this.destroy = destroy;\n this.enableEventListeners = enableEventListeners;\n this.disableEventListeners = disableEventListeners;\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference.jquery ? reference[0] : reference;\n this.popper = popper.jquery ? popper[0] : popper;\n\n // make sure to apply the popper position before any computation\n setStyles(this.popper, { position: 'absolute' });\n\n // refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(Popper.Defaults.modifiers).map(function (name) {\n return _extends({\n name: name\n }, Popper.Defaults.modifiers[name]);\n });\n\n // assign default values to modifiers, making sure to override them with\n // the ones defined by user\n this.modifiers = this.modifiers.map(function (defaultConfig) {\n var userConfig = options.modifiers && options.modifiers[defaultConfig.name] || {};\n return _extends({}, defaultConfig, userConfig);\n });\n\n // add custom modifiers to the modifiers list\n if (options.modifiers) {\n this.options.modifiers = _extends({}, Popper.Defaults.modifiers, options.modifiers);\n Object.keys(options.modifiers).forEach(function (name) {\n // take in account only custom modifiers\n if (Popper.Defaults.modifiers[name] === undefined) {\n var modifier = options.modifiers[name];\n modifier.name = name;\n _this.modifiers.push(modifier);\n }\n });\n }\n\n // sort the modifiers by order\n this.modifiers = this.modifiers.sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n};\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = DEFAULTS;\n\n/* harmony default export */ __webpack_exports__[\"a\"] = Popper;\n//# sourceMappingURL=popper.js.map\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_popper_js__ = __webpack_require__(2);\n\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {*} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar DEFAULT_OPTIONS = {\n container: false,\n delay: 0,\n html: false,\n placement: 'top',\n title: '',\n template: '
',\n trigger: 'hover focus',\n offset: 0\n};\n\nvar Tooltip = function () {\n /**\n * Create a new Tooltip.js instance\n * @class Tooltip\n * @param {HTMLElement} reference - The reference element used to position the tooltip\n * @param {Object} options\n * @param {String} options.placement=bottom\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -end),\n * left(-start, -end)`\n *\n * @param {HTMLElement} reference - The DOM node used as reference of the tooltip (it can be a jQuery element).\n * @param {Object} options - Configuration of the tooltip\n * @param {HTMLElement|String|false} options.container=false - Append the tooltip to a specific element.\n * @param {Number|Object} options.delay=0\n * Delay showing and hiding the tooltip (ms) - does not apply to manual trigger type.\n * If a number is supplied, delay is applied to both hide/show.\n * Object structure is: `{ show: 500, hide: 100 }`\n * @param {Boolean} options.html=false - Insert HTML into the tooltip. If false, the content will inserted with `innerText`.\n * @param {String|PlacementFunction} options.placement='top' - One of the allowed placements, or a function returning one of them.\n * @param {String} options.template='
'\n * Base HTML to used when creating the tooltip.\n * The tooltip's `title` will be injected into the `.tooltip-inner` or `.tooltip__inner`.\n * `.tooltip-arrow` or `.tooltip__arrow` will become the tooltip's arrow.\n * The outermost wrapper element should have the `.tooltip` class.\n * @param {String|HTMLElement|TitleFunction} options.title='' - Default title value if `title` attribute isn't present.\n * @param {String} options.trigger='hover focus'\n * How tooltip is triggered - click | hover | focus | manual.\n * You may pass multiple triggers; separate them with a space. `manual` cannot be combined with any other trigger.\n * @param {HTMLElement} options.boundariesElement\n * The element used as boundaries for the tooltip. For more information refer to Popper.js'\n * [boundariesElement docs](https://popper.js.org/popper-documentation.html)\n * @param {Number|String} options.offset=0 - Offset of the tooltip relative to its reference. For more information refer to Popper.js'\n * [offset docs](https://popper.js.org/popper-documentation.html)\n * @return {Object} instance - The generated tooltip instance\n */\n function Tooltip(reference, options) {\n classCallCheck(this, Tooltip);\n\n _initialiseProps.call(this);\n\n // apply user options over default ones\n options = _extends({}, DEFAULT_OPTIONS, options);\n\n reference.jquery && (reference = reference[0]);\n\n // cache reference and options\n this.reference = reference;\n this.options = options;\n\n // get events list\n var events = typeof options.trigger === 'string' ? options.trigger.split(' ').filter(function (trigger) {\n return ['click', 'hover', 'focus'].indexOf(trigger) !== -1;\n }) : [];\n\n // set initial state\n this._isOpen = false;\n\n // set event listeners\n this._setEventListeners(reference, events, options);\n }\n\n //\n // Public methods\n //\n\n /**\n * Reveals an element's tooltip. This is considered a \"manual\" triggering of the tooltip.\n * Tooltips with zero-length titles are never displayed.\n * @memberof Tooltip\n */\n\n /**\n * Hides an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @memberof Tooltip\n */\n\n /**\n * Hides and destroys an element’s tooltip.\n * @memberof Tooltip\n */\n\n /**\n * Toggles an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @memberof Tooltip\n */\n\n //\n // Defaults\n //\n\n\n //\n // Private methods\n //\n\n createClass(Tooltip, [{\n key: '_create',\n\n /**\n * Creates a new tooltip node\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} reference\n * @param {String} template\n * @param {String|HTMLElement|TitleFunction} title\n * @param {Boolean} allowHtml\n * @return {HTMLelement} tooltipNode\n */\n value: function _create(reference, template, title, allowHtml) {\n // create tooltip element\n var tooltipGenerator = window.document.createElement('div');\n tooltipGenerator.innerHTML = template;\n var tooltipNode = tooltipGenerator.childNodes[0];\n\n // add unique ID to our tooltip (needed for accessibility reasons)\n tooltipNode.id = 'tooltip_' + Math.random().toString(36).substr(2, 10);\n\n // set initial `aria-hidden` state to `false` (it's visible!)\n tooltipNode.setAttribute('aria-hidden', 'false');\n\n // add title to tooltip\n var titleNode = tooltipGenerator.querySelector(this.innerSelector);\n if (title.nodeType === 1) {\n // if title is a node, append it only if allowHtml is true\n allowHtml && titleNode.appendChild(title);\n } else if (isFunction(title)) {\n // if title is a function, call it and set innerText or innerHtml depending by `allowHtml` value\n var titleText = title.call(reference);\n allowHtml ? titleNode.innerHTML = titleText : titleNode.innerText = titleText;\n } else {\n // if it's just a simple text, set innerText or innerHtml depending by `allowHtml` value\n allowHtml ? titleNode.innerHTML = title : titleNode.innerText = title;\n }\n\n // return the generated tooltip node\n return tooltipNode;\n }\n }, {\n key: '_show',\n value: function _show(reference, options) {\n // don't show if it's already visible\n if (this._isOpen) {\n return this;\n }\n this._isOpen = true;\n\n // if the tooltipNode already exists, just show it\n if (this._tooltipNode) {\n this._tooltipNode.style.display = '';\n this._tooltipNode.setAttribute('aria-hidden', 'false');\n this.popperInstance.update();\n return this;\n }\n\n // get title\n var title = reference.getAttribute('title') || options.title;\n\n // don't show tooltip if no title is defined\n if (!title) {\n return this;\n }\n\n // create tooltip node\n var tooltipNode = this._create(reference, options.template, title, options.html);\n\n // Add `aria-describedby` to our reference element for accessibility reasons\n tooltipNode.setAttribute('aria-describedby', tooltipNode.id);\n\n // append tooltip to container\n var container = this._findContainer(options.container, reference);\n\n this._append(tooltipNode, container);\n\n var popperOptions = {\n placement: options.placement,\n arrowElement: this.arrowSelector\n };\n\n if (options.boundariesElement) {\n popperOptions.boundariesElement = options.boundariesElement;\n }\n\n this.popperInstance = new __WEBPACK_IMPORTED_MODULE_0_popper_js__[\"a\" /* default */](reference, tooltipNode, popperOptions);\n\n this._tooltipNode = tooltipNode;\n\n return this;\n }\n }, {\n key: '_hide',\n value: function _hide() /*reference, options*/{\n // don't hide if it's already hidden\n if (!this._isOpen) {\n return this;\n }\n\n this._isOpen = false;\n\n // hide tooltipNode\n this._tooltipNode.style.display = 'none';\n this._tooltipNode.setAttribute('aria-hidden', 'true');\n\n return this;\n }\n }, {\n key: '_dispose',\n value: function _dispose() {\n var _this = this;\n\n if (this._tooltipNode) {\n this._hide();\n\n // destroy instance\n this.popperInstance.destroy();\n\n // remove event listeners\n this._events.forEach(function (_ref) {\n var func = _ref.func,\n event = _ref.event;\n\n _this._tooltipNode.removeEventListener(event, func);\n });\n this._events = [];\n\n // destroy tooltipNode\n this._tooltipNode.parentNode.removeChild(this._tooltipNode);\n this._tooltipNode = null;\n }\n return this;\n }\n }, {\n key: '_findContainer',\n value: function _findContainer(container, reference) {\n // if container is a query, get the relative element\n if (typeof container === 'string') {\n container = window.document.querySelector(container);\n } else if (container === false) {\n // if container is `false`, set it to reference parent\n container = reference.parentNode;\n }\n return container;\n }\n\n /**\n * Append tooltip to container\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} tooltip\n * @param {HTMLElement|String|false} container\n */\n\n }, {\n key: '_append',\n value: function _append(tooltipNode, container) {\n container.appendChild(tooltipNode);\n }\n }, {\n key: '_setEventListeners',\n value: function _setEventListeners(reference, events, options) {\n var _this2 = this;\n\n var directEvents = [];\n var oppositeEvents = [];\n\n events.forEach(function (event) {\n switch (event) {\n case 'hover':\n directEvents.push('mouseenter');\n oppositeEvents.push('mouseleave');\n case 'focus':\n directEvents.push('focus');\n oppositeEvents.push('blur');\n case 'click':\n directEvents.push('click');\n oppositeEvents.push('click');\n }\n });\n\n // schedule show tooltip\n directEvents.forEach(function (event) {\n var func = function func(evt) {\n if (_this2._isOpen === true) {\n return;\n }\n evt.usedByTooltip = true;\n _this2._scheduleShow(reference, options.delay, options, evt);\n };\n _this2._events.push({ event: event, func: func });\n reference.addEventListener(event, func);\n });\n\n // schedule hide tooltip\n oppositeEvents.forEach(function (event) {\n var func = function func(evt) {\n if (evt.usedByTooltip === true) {\n return;\n }\n _this2._scheduleHide(reference, options.delay, options, evt);\n };\n _this2._events.push({ event: event, func: func });\n reference.addEventListener(event, func);\n });\n }\n }, {\n key: '_scheduleShow',\n value: function _scheduleShow(reference, delay, options /*, evt */) {\n var _this3 = this;\n\n // defaults to 0\n var computedDelay = delay && delay.show || delay || 0;\n window.setTimeout(function () {\n return _this3._show(reference, options);\n }, computedDelay);\n }\n }, {\n key: '_scheduleHide',\n value: function _scheduleHide(reference, delay, options, evt) {\n var _this4 = this;\n\n // defaults to 0\n var computedDelay = delay && delay.hide || delay || 0;\n window.setTimeout(function () {\n if (_this4._isOpen === false) {\n return;\n }\n if (!document.body.contains(_this4._tooltipNode)) {\n return;\n }\n\n // if we are hiding because of a mouseleave, we must check that the new\n // reference isn't the tooltip, because in this case we don't want to hide it\n if (evt.type === 'mouseleave') {\n var isSet = _this4._setTooltipNodeEvent(evt, reference, delay, options);\n\n // if we set the new event, don't hide the tooltip yet\n // the new event will take care to hide it if necessary\n if (isSet) {\n return;\n }\n }\n\n _this4._hide(reference, options);\n }, computedDelay);\n }\n }]);\n return Tooltip;\n}();\n\n/**\n * Placement function, its context is the Tooltip instance.\n * @memberof Tooltip\n * @callback PlacementFunction\n * @param {HTMLElement} tooltip - tooltip DOM node.\n * @param {HTMLElement} reference - reference DOM node.\n * @return {String} placement - One of the allowed placement options.\n */\n\n/**\n * Title function, its context is the Tooltip instance.\n * @memberof Tooltip\n * @callback TitleFunction\n * @return {String} placement - The desired title.\n */\n\nvar _initialiseProps = function _initialiseProps() {\n var _this5 = this;\n\n this.show = function () {\n return _this5._show(_this5.reference, _this5.options);\n };\n\n this.hide = function () {\n return _this5._hide();\n };\n\n this.dispose = function () {\n return _this5._dispose();\n };\n\n this.toggle = function () {\n if (_this5._isOpen) {\n return _this5.hide();\n } else {\n return _this5.show();\n }\n };\n\n this.arrowSelector = '.tooltip-arrow, .tooltip__arrow';\n this.innerSelector = '.tooltip-inner, .tooltip__inner';\n this._events = [];\n\n this._setTooltipNodeEvent = function (evt, reference, delay, options) {\n var relatedreference = evt.relatedreference || evt.toElement;\n\n var callback = function callback(evt2) {\n var relatedreference2 = evt2.relatedreference || evt2.toElement;\n\n // Remove event listener after call\n _this5._tooltipNode.removeEventListener(evt.type, callback);\n\n // If the new reference is not the reference element\n if (!reference.contains(relatedreference2)) {\n // Schedule to hide tooltip\n _this5._scheduleHide(reference, options.delay, options, evt2);\n }\n };\n\n if (_this5._tooltipNode.contains(relatedreference)) {\n // listen to mouseleave on the tooltip element to be able to hide the tooltip\n _this5._tooltipNode.addEventListener(evt.type, callback);\n return true;\n }\n\n return false;\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = Tooltip;\n//# sourceMappingURL=tooltip.js.map\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__v_tooltip__ = __webpack_require__(0);\n/* harmony export (immutable) */ __webpack_exports__[\"install\"] = install;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VTooltip\", function() { return VTooltip; });\n\n\nfunction install(Vue, options) {\n if (install.installed) return;\n install.installed = true;\n\n options = Object.assign({}, __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"a\" /* defaultOptions */], options || {});\n __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */].options = options;\n Vue.directive('tooltip', __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */]);\n}\n\nvar VTooltip = __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */];\n\nvar plugin = {\n install: install\n};\n\n// Auto-install\nvar GlobalVue = null;\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = plugin;\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMjk4OWMwOWU5Nzc4NGIyNWYzMGMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3YtdG9vbHRpcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wb3BwZXIuanMvZGlzdC9lc20vcG9wcGVyLmpzIiwid2VicGFjazovLy8uL34vdG9vbHRpcC5qcy9kaXN0L2VzbS90b29sdGlwLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJwb3NpdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImRlZmF1bHRQbGFjZW1lbnQiLCJkZWZhdWx0Q2xhc3MiLCJkZWZhdWx0VGVtcGxhdGUiLCJkZWZhdWx0RGVsYXkiLCJkZWZhdWx0VHJpZ2dlciIsImRlZmF1bHRPZmZzZXQiLCJkZWZhdWx0Q29udGFpbmVyIiwiZ2V0T3B0aW9ucyIsIm9wdGlvbnMiLCJwbGFjZW1lbnQiLCJkaXJlY3RpdmUiLCJkZWxheSIsInRlbXBsYXRlIiwidHJpZ2dlciIsIm9mZnNldCIsImNvbnRhaW5lciIsImdldFBsYWNlbWVudCIsInZhbHVlIiwibW9kaWZpZXJzIiwicG9zIiwiU3VwZXJUb29sdGlwIiwiY2xhc3NlcyIsImVsIiwiX3Rvb2x0aXBOb2RlIiwib2xkQ2xhc3NlcyIsIl9vbGRDbGFzc2VzIiwicmVwbGFjZUNsYXNzZXMiLCJhZGRDbGFzc2VzIiwicmVtb3ZlQ2xhc3NlcyIsIl9wZW5kaW5nQ2xhc3NlcyIsIl9jbGFzc2VzIiwiY29udGVudCIsInRpdGxlIiwicXVlcnlTZWxlY3RvciIsImlubmVyU2VsZWN0b3IiLCJpbm5lckhUTUwiLCJwb3BwZXJJbnN0YW5jZSIsInVwZGF0ZSIsIm5lZWRQb3BwZXJVcGRhdGUiLCJuZWVkUmVzdGFydCIsImtleSIsImlzT3BlbiIsIl9pc09wZW4iLCJkaXNwb3NlIiwiZXZlbnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJpbmRleE9mIiwiX3NldEV2ZW50TGlzdGVuZXJzIiwicmVmZXJlbmNlIiwic2V0Q2xhc3NlcyIsInNob3ciLCJfZXZlbnRzIiwiZm9yRWFjaCIsImZ1bmMiLCJldmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhcmdzIiwic2V0VGltZW91dCIsImNyZWF0ZVRvb2x0aXAiLCJ0b29sdGlwIiwiX3Rvb2x0aXAiLCJodG1sIiwiZGVzdHJveVRvb2x0aXAiLCJiaW5kIiwib2xkVmFsdWUiLCJzZXRDb250ZW50Iiwic2V0T3B0aW9ucyIsInVuYmluZCIsImNvbnZlcnRUb0FycmF5IiwiY2xhc3NMaXN0IiwiYWRkIiwiYyIsInJlbW92ZSIsIm5ld0NsYXNzZXMiLCJuYXRpdmVIaW50cyIsImlzTmF0aXZlIiwiZm4iLCJzb21lIiwiaGludCIsInRvU3RyaW5nIiwiaXNCcm93c2VyIiwid2luZG93IiwibG9uZ2VyVGltZW91dEJyb3dzZXJzIiwidGltZW91dER1cmF0aW9uIiwiaSIsImxlbmd0aCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIm1pY3JvdGFza0RlYm91bmNlIiwic2NoZWR1bGVkIiwiZWxlbSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJhdHRyaWJ1dGVzIiwic2V0QXR0cmlidXRlIiwidGFza0RlYm91bmNlIiwic3VwcG9ydHNOYXRpdmVNdXRhdGlvbk9ic2VydmVyIiwiZGVib3VuY2UiLCJpc051bWVyaWMiLCJuIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwiaXNGaW5pdGUiLCJzZXRTdHlsZXMiLCJlbGVtZW50Iiwic3R5bGVzIiwiT2JqZWN0Iiwia2V5cyIsInByb3AiLCJ1bml0Iiwic3R5bGUiLCJpc0Z1bmN0aW9uIiwiZnVuY3Rpb25Ub0NoZWNrIiwiZ2V0VHlwZSIsImNhbGwiLCJnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkiLCJwcm9wZXJ0eSIsIm5vZGVUeXBlIiwiY3NzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFBhcmVudE5vZGUiLCJub2RlTmFtZSIsInBhcmVudE5vZGUiLCJob3N0IiwiZ2V0U2Nyb2xsUGFyZW50IiwiYm9keSIsIl9nZXRTdHlsZUNvbXB1dGVkUHJvcCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwidGVzdCIsImlzT2Zmc2V0Q29udGFpbmVyIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJvZmZzZXRQYXJlbnQiLCJnZXRSb290Iiwibm9kZSIsImdldE9mZnNldFBhcmVudCIsImRvY3VtZW50RWxlbWVudCIsImZpbmRDb21tb25PZmZzZXRQYXJlbnQiLCJlbGVtZW50MSIsImVsZW1lbnQyIiwib3JkZXIiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsIk5vZGUiLCJET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkciLCJzdGFydCIsImVuZCIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIiwiY29udGFpbnMiLCJlbGVtZW50MXJvb3QiLCJnZXRTY3JvbGwiLCJzaWRlIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwidXBwZXJTaWRlIiwic2Nyb2xsaW5nRWxlbWVudCIsImluY2x1ZGVTY3JvbGwiLCJyZWN0Iiwic3VidHJhY3QiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwibW9kaWZpZXIiLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJnZXRCb3JkZXJzU2l6ZSIsImF4aXMiLCJzaWRlQSIsInNpZGVCIiwiZ2V0V2luZG93U2l6ZXMiLCJoZWlnaHQiLCJNYXRoIiwibWF4Iiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwid2lkdGgiLCJzY3JvbGxXaWR0aCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJjbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJkZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9leHRlbmRzIiwiYXNzaWduIiwidGFyZ2V0Iiwic291cmNlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJnZXRDbGllbnRSZWN0Iiwib2Zmc2V0cyIsImlzSUUxMCIsImlzSUUxMCQxIiwiYXBwVmVyc2lvbiIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImVyciIsInJlc3VsdCIsInNpemVzIiwiaG9yaXpTY3JvbGxiYXIiLCJ2ZXJ0U2Nyb2xsYmFyIiwiZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlIiwiY2hpbGRyZW4iLCJwYXJlbnQiLCJpc0hUTUwiLCJjaGlsZHJlblJlY3QiLCJwYXJlbnRSZWN0Iiwic2Nyb2xsUGFyZW50IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlIiwicmVsYXRpdmVPZmZzZXQiLCJpbm5lcldpZHRoIiwiaW5uZXJIZWlnaHQiLCJpc0ZpeGVkIiwiZ2V0Qm91bmRhcmllcyIsInBvcHBlciIsInBhZGRpbmciLCJib3VuZGFyaWVzRWxlbWVudCIsImJvdW5kYXJpZXMiLCJib3VuZGFyaWVzTm9kZSIsIl9nZXRXaW5kb3dTaXplcyIsImNvbXB1dGVBdXRvUGxhY2VtZW50IiwicmVmUmVjdCIsInNpZGVzIiwiY29tcHV0ZWRQbGFjZW1lbnQiLCJzb3J0IiwiYSIsImIiLCJ2YXJpYXRpb24iLCJnZXRSZWZlcmVuY2VPZmZzZXRzIiwic3RhdGUiLCJjb21tb25PZmZzZXRQYXJlbnQiLCJnZXRPdXRlclNpemVzIiwieCIsIm1hcmdpbkJvdHRvbSIsInkiLCJtYXJnaW5SaWdodCIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiaGFzaCIsInJlcGxhY2UiLCJtYXRjaGVkIiwiZ2V0UG9wcGVyT2Zmc2V0cyIsInJlZmVyZW5jZU9mZnNldHMiLCJwb3BwZXJSZWN0IiwicG9wcGVyT2Zmc2V0cyIsImlzSG9yaXoiLCJtYWluU2lkZSIsInNlY29uZGFyeVNpZGUiLCJtZWFzdXJlbWVudCIsInNlY29uZGFyeU1lYXN1cmVtZW50IiwiZmluZCIsImFyciIsImNoZWNrIiwiQXJyYXkiLCJmaW5kSW5kZXgiLCJjdXIiLCJtYXRjaCIsInJ1bk1vZGlmaWVycyIsImRhdGEiLCJlbmRzIiwibW9kaWZpZXJzVG9SdW4iLCJzbGljZSIsImZ1bmN0aW9uIiwiY29uc29sZSIsIndhcm4iLCJlbmFibGVkIiwiaXNEZXN0cm95ZWQiLCJmbGlwcGVkIiwiZmxpcCIsIm9yaWdpbmFsUGxhY2VtZW50IiwicG9zaXRpb24iLCJpc0NyZWF0ZWQiLCJvbkNyZWF0ZSIsIm9uVXBkYXRlIiwiaXNNb2RpZmllckVuYWJsZWQiLCJtb2RpZmllck5hbWUiLCJfcmVmIiwibmFtZSIsImdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSIsInByZWZpeGVzIiwidXBwZXJQcm9wIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJwcmVmaXgiLCJ0b0NoZWNrIiwiZGVzdHJveSIsInJlbW92ZUF0dHJpYnV0ZSIsImRpc2FibGVFdmVudExpc3RlbmVycyIsInJlbW92ZU9uRGVzdHJveSIsInJlbW92ZUNoaWxkIiwiYXR0YWNoVG9TY3JvbGxQYXJlbnRzIiwiY2FsbGJhY2siLCJzY3JvbGxQYXJlbnRzIiwiaXNCb2R5IiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJwdXNoIiwic2V0dXBFdmVudExpc3RlbmVycyIsInVwZGF0ZUJvdW5kIiwic2Nyb2xsRWxlbWVudCIsImV2ZW50c0VuYWJsZWQiLCJlbmFibGVFdmVudExpc3RlbmVycyIsInNjaGVkdWxlVXBkYXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInNldEF0dHJpYnV0ZXMiLCJhcHBseVN0eWxlIiwicm91bmQiLCJwcmVmaXhlZFByb3BlcnR5IiwiZ3B1QWNjZWxlcmF0aW9uIiwid2lsbENoYW5nZSIsImFycm93IiwiYXJyb3dFbGVtZW50IiwiYXBwbHlTdHlsZU9uTG9hZCIsIm1vZGlmaWVyT3B0aW9ucyIsImlzTW9kaWZpZXJSZXF1aXJlZCIsInJlcXVlc3RpbmdOYW1lIiwicmVxdWVzdGVkTmFtZSIsInJlcXVlc3RpbmciLCJpc1JlcXVpcmVkIiwiX3JlcXVlc3RpbmciLCJyZXF1ZXN0ZWQiLCJpc1ZlcnRpY2FsIiwibGVuIiwiYWx0U2lkZSIsIm9wU2lkZSIsImFycm93RWxlbWVudFNpemUiLCJjZW50ZXIiLCJzaWRlVmFsdWUiLCJtaW4iLCJnZXRPcHBvc2l0ZVZhcmlhdGlvbiIsInBsYWNlbWVudHMiLCJ2YWxpZFBsYWNlbWVudHMiLCJjbG9ja3dpc2UiLCJjb3VudGVyIiwiaW5kZXgiLCJjb25jYXQiLCJyZXZlcnNlIiwiQkVIQVZJT1JTIiwiRkxJUCIsIkNMT0NLV0lTRSIsIkNPVU5URVJDTE9DS1dJU0UiLCJwbGFjZW1lbnRPcHBvc2l0ZSIsImZsaXBPcmRlciIsImJlaGF2aW9yIiwic3RlcCIsInJlZk9mZnNldHMiLCJmbG9vciIsIm92ZXJsYXBzUmVmIiwib3ZlcmZsb3dzTGVmdCIsIm92ZXJmbG93c1JpZ2h0Iiwib3ZlcmZsb3dzVG9wIiwib3ZlcmZsb3dzQm90dG9tIiwib3ZlcmZsb3dzQm91bmRhcmllcyIsImZsaXBwZWRWYXJpYXRpb24iLCJmbGlwVmFyaWF0aW9ucyIsImtlZXBUb2dldGhlciIsInRvVmFsdWUiLCJzdHIiLCJzaXplIiwicGFyc2VPZmZzZXQiLCJiYXNlUGxhY2VtZW50IiwidXNlSGVpZ2h0IiwiZnJhZ21lbnRzIiwibWFwIiwiZnJhZyIsInRyaW0iLCJkaXZpZGVyIiwic2VhcmNoIiwic3BsaXRSZWdleCIsIm9wcyIsIm9wIiwibWVyZ2VXaXRoUHJldmlvdXMiLCJyZWR1Y2UiLCJpbmRleDIiLCJfZGF0YSRvZmZzZXRzIiwicHJldmVudE92ZXJmbG93IiwicHJpb3JpdHkiLCJwcmltYXJ5IiwiZXNjYXBlV2l0aFJlZmVyZW5jZSIsInNlY29uZGFyeSIsInNoaWZ0Iiwic2hpZnR2YXJpYXRpb24iLCJzaGlmdE9mZnNldHMiLCJoaWRlIiwiYm91bmQiLCJpbm5lciIsInN1YnRyYWN0TGVuZ3RoIiwib25Mb2FkIiwiREVGQVVMVFMiLCJQb3BwZXIiLCJfdGhpcyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIkRlZmF1bHRzIiwianF1ZXJ5IiwiZGVmYXVsdENvbmZpZyIsInVzZXJDb25maWciLCJVdGlscyIsImdsb2JhbCIsIlBvcHBlclV0aWxzIiwiY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiREVGQVVMVF9PUFRJT05TIiwiVG9vbHRpcCIsIl9pbml0aWFsaXNlUHJvcHMiLCJfY3JlYXRlIiwiYWxsb3dIdG1sIiwidG9vbHRpcEdlbmVyYXRvciIsInRvb2x0aXBOb2RlIiwiY2hpbGROb2RlcyIsImlkIiwicmFuZG9tIiwic3Vic3RyIiwidGl0bGVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJ0aXRsZVRleHQiLCJpbm5lclRleHQiLCJfc2hvdyIsImRpc3BsYXkiLCJnZXRBdHRyaWJ1dGUiLCJfZmluZENvbnRhaW5lciIsIl9hcHBlbmQiLCJwb3BwZXJPcHRpb25zIiwiYXJyb3dTZWxlY3RvciIsIl9oaWRlIiwiX2Rpc3Bvc2UiLCJfdGhpczIiLCJkaXJlY3RFdmVudHMiLCJvcHBvc2l0ZUV2ZW50cyIsImV2dCIsInVzZWRCeVRvb2x0aXAiLCJfc2NoZWR1bGVTaG93IiwiX3NjaGVkdWxlSGlkZSIsIl90aGlzMyIsImNvbXB1dGVkRGVsYXkiLCJfdGhpczQiLCJ0eXBlIiwiaXNTZXQiLCJfc2V0VG9vbHRpcE5vZGVFdmVudCIsIl90aGlzNSIsInRvZ2dsZSIsInJlbGF0ZWRyZWZlcmVuY2UiLCJ0b0VsZW1lbnQiLCJldnQyIiwicmVsYXRlZHJlZmVyZW5jZTIiLCJpbnN0YWxsIiwiVnVlIiwiaW5zdGFsbGVkIiwidnRvb2x0aXAiLCJWVG9vbHRpcCIsInBsdWdpbiIsIkdsb2JhbFZ1ZSIs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QWQsRUFBeUIsMkRBQXpCO0FBQ0Q7O0FBRU0sSUFBTTRjLFdBQVcsMkRBQWpCOztBQUVQLElBQU1DLFNBQVM7QUFDYkw7QUFEYSxDQUFmOztBQUlBO0FBQ0EsSUFBSU0sWUFBWSxJQUFoQjtBQUNBLElBQUksT0FBT3RZLE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDakNzWSxjQUFZdFksT0FBT2lZLEdBQW5CO0FBQ0QsQ0FGRCxNQUVPLElBQUksT0FBT3BELE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDeEN5RCxjQUFZekQsT0FBT29ELEdBQW5CO0FBQ0Q7QUFDRCxJQUFJSyxTQUFKLEVBQWU7QUFDYkEsWUFBVUMsR0FBVixDQUFjRixNQUFkO0FBQ0Q7O0FBRUQsOERBQWVBLE1BQWYsQyIsImZpbGUiOiJ2LXRvb2x0aXAuY29tbW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMjk4OWMwOWU5Nzc4NGIyNWYzMGMiLCJpbXBvcnQgVG9vbHRpcCBmcm9tICd0b29sdGlwLmpzJ1xyXG5cclxuaW1wb3J0IHsgYWRkQ2xhc3NlcywgcmVtb3ZlQ2xhc3NlcywgcmVwbGFjZUNsYXNzZXMgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuY29uc3QgcG9zaXRpb25zID0gW1xyXG4gICd0b3AnLFxyXG4gICd0b3Atc3RhcnQnLFxyXG4gICd0b3AtZW5kJyxcclxuICAncmlnaHQnLFxyXG4gICdyaWdodC1zdGFydCcsXHJcbiAgJ3JpZ2h0LWVuZCcsXHJcbiAgJ2JvdHRvbScsXHJcbiAgJ2JvdHRvbS1zdGFydCcsXHJcbiAgJ2JvdHRvbS1lbmQnLFxyXG4gICdsZWZ0JyxcclxuICAnbGVmdC1zdGFydCcsXHJcbiAgJ2xlZnQtZW5kJyxcclxuXVxyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xyXG4gIGRlZmF1bHRQbGFjZW1lbnQ6ICd0b3AnLFxyXG4gIGRlZmF1bHRDbGFzczogJ3Z1ZS10b29sdGlwLXRoZW1lJyxcclxuICBkZWZhdWx0VGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj48ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PjwvZGl2PicsXHJcbiAgZGVmYXVsdERlbGF5OiAwLFxyXG4gIGRlZmF1bHRUcmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxyXG4gIGRlZmF1bHRPZmZzZXQ6IDAsXHJcbiAgZGVmYXVsdENvbnRhaW5lcjogJ2JvZHknLFxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPcHRpb25zIChvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHBsYWNlbWVudDogb3B0aW9ucy5wbGFjZW1lbnQgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdFBsYWNlbWVudCxcclxuICAgIGRlbGF5OiBvcHRpb25zLmRlbGF5IHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHREZWxheSxcclxuICAgIHRlbXBsYXRlOiBvcHRpb25zLnRlbXBsYXRlIHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHRUZW1wbGF0ZSxcclxuICAgIHRyaWdnZXI6IG9wdGlvbnMudHJpZ2dlciB8fCBkaXJlY3RpdmUub3B0aW9ucy5kZWZhdWx0VHJpZ2dlcixcclxuICAgIG9mZnNldDogb3B0aW9ucy5vZmZzZXQgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdE9mZnNldCxcclxuICAgIGNvbnRhaW5lcjogb3B0aW9ucy5jb250YWluZXIgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdENvbnRhaW5lcixcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBsYWNlbWVudCAodmFsdWUsIG1vZGlmaWVycykge1xyXG4gIGxldCBwbGFjZW1lbnQgPSB2YWx1ZS5wbGFjZW1lbnRcclxuICBmb3IgKGNvbnN0IHBvcyBvZiBwb3NpdGlvbnMpIHtcclxuICAgIGlmIChtb2RpZmllcnNbcG9zXSkge1xyXG4gICAgICBwbGFjZW1lbnQgPSBwb3NcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHBsYWNlbWVudFxyXG59XHJcblxyXG5jbGFzcyBTdXBlclRvb2x0aXAgZXh0ZW5kcyBUb29sdGlwIHtcclxuICBzZXRDbGFzc2VzIChjbGFzc2VzKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX3Rvb2x0aXBOb2RlXHJcblxyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIGNvbnN0IG9sZENsYXNzZXMgPSB0aGlzLl9vbGRDbGFzc2VzXHJcbiAgICAgIGlmIChjbGFzc2VzKSB7XHJcbiAgICAgICAgaWYgKG9sZENsYXNzZXMpIHtcclxuICAgICAgICAgIHJlcGxhY2VDbGFzc2VzKGVsLCBjbGFzc2VzLCBvbGRDbGFzc2VzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhZGRDbGFzc2VzKGVsLCBjbGFzc2VzKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChvbGRDbGFzc2VzKSB7XHJcbiAgICAgICAgcmVtb3ZlQ2xhc3NlcyhlbCwgb2xkQ2xhc3NlcylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9vbGRDbGFzc2VzID0gY2xhc3Nlc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcGVuZGluZ0NsYXNzZXMgPSBjbGFzc2VzXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2xhc3NlcyA9IGNsYXNzZXNcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQgKGNvbnRlbnQpIHtcclxuICAgIHRoaXMub3B0aW9ucy50aXRsZSA9IGNvbnRlbnRcclxuICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuX3Rvb2x0aXBOb2RlLnF1ZXJ5U2VsZWN0b3IodGhpcy5pbm5lclNlbGVjdG9yKVxyXG5cclxuICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XHJcbiAgICAgICAgICBlbC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbC5pbm5lckhUTUwgPSBjb250ZW50XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcHBlckluc3RhbmNlLnVwZGF0ZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9wdGlvbnMgKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpXHJcblxyXG4gICAgbGV0IG5lZWRQb3BwZXJVcGRhdGUgPSBmYWxzZVxyXG4gICAgbGV0IG5lZWRSZXN0YXJ0ID0gZmFsc2VcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5vZmZzZXQgIT09IG9wdGlvbnMub2Zmc2V0IHx8XHJcbiAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQgIT09IG9wdGlvbnMucGxhY2VtZW50XHJcbiAgICApIHtcclxuICAgICAgbmVlZFBvcHBlclVwZGF0ZSA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3B0aW9ucy50ZW1wbGF0ZSAhPT0gb3B0aW9ucy50ZW1wbGF0ZSB8fFxyXG4gICAgICB0aGlzLm9wdGlvbnMudHJpZ2dlciAhPT0gb3B0aW9ucy50cmlnZ2VyIHx8XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IG9wdGlvbnMuY29udGFpbmVyXHJcbiAgICApIHtcclxuICAgICAgbmVlZFJlc3RhcnQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xyXG4gICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xyXG4gICAgICBpZiAobmVlZFJlc3RhcnQpIHtcclxuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLl9pc09wZW5cclxuXHJcbiAgICAgICAgdGhpcy5kaXNwb3NlKClcclxuXHJcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdHlwZW9mIHRoaXMub3B0aW9ucy50cmlnZ2VyID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyBvcHRpb25zLnRyaWdnZXJcclxuICAgICAgICAgICAgLnNwbGl0KCcgJylcclxuICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICB0cmlnZ2VyID0+IFsnY2xpY2snLCAnaG92ZXInLCAnZm9jdXMnXS5pbmRleE9mKHRyaWdnZXIpICE9PSAtMVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICA6IFtdXHJcbiAgICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIGV2ZW50cywgdGhpcy5vcHRpb25zKVxyXG5cclxuICAgICAgICB0aGlzLnNldENsYXNzZXModGhpcy5fY2xhc3NlcylcclxuXHJcbiAgICAgICAgaWYgKGlzT3Blbikge1xyXG4gICAgICAgICAgdGhpcy5zaG93KClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAobmVlZFBvcHBlclVwZGF0ZSkge1xyXG4gICAgICAgIHRoaXMucG9wcGVySW5zdGFuY2UudXBkYXRlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2Rpc3Bvc2UgKCkge1xyXG4gICAgdGhpcy5fZXZlbnRzLmZvckVhY2goKHsgZnVuYywgZXZlbnQgfSkgPT4ge1xyXG4gICAgICB0aGlzLnJlZmVyZW5jZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKVxyXG4gICAgfSlcclxuICAgIHRoaXMuX2V2ZW50cyA9IFtdXHJcbiAgICBzdXBlci5fZGlzcG9zZSgpXHJcbiAgfVxyXG5cclxuICBfc2hvdyAoLi4uYXJncykge1xyXG4gICAgc3VwZXIuX3Nob3coLi4uYXJncylcclxuXHJcbiAgICBpZiAodGhpcy5fcGVuZGluZ0NsYXNzZXMpIHtcclxuICAgICAgdGhpcy5zZXRDbGFzc2VzKHRoaXMuX3BlbmRpbmdDbGFzc2VzKVxyXG4gICAgICB0aGlzLl9wZW5kaW5nQ2xhc3NlcyA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaXggcG9zaXRpb25cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvcHBlckluc3RhbmNlLnVwZGF0ZSgpXHJcbiAgICB9LCAwKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVG9vbHRpcCAoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcclxuICBjb25zdCBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZVxyXG4gIGxldCBjbGFzc2VzID0gdmFsdWUuY2xhc3NlcyB8fCBkaXJlY3RpdmUub3B0aW9ucy5kZWZhdWx0Q2xhc3NcclxuXHJcbiAgY29uc3QgdG9vbHRpcCA9IGVsLl90b29sdGlwID0gbmV3IFN1cGVyVG9vbHRpcChlbCwge1xyXG4gICAgdGl0bGU6IGNvbnRlbnQsXHJcbiAgICBodG1sOiB0cnVlLFxyXG4gICAgLi4uZ2V0T3B0aW9ucyh7XHJcbiAgICAgIC4uLnZhbHVlLFxyXG4gICAgICBwbGFjZW1lbnQ6IGdldFBsYWNlbWVudCh2YWx1ZSwgbW9kaWZpZXJzKSxcclxuICAgIH0pLFxyXG4gIH0pXHJcbiAgdG9vbHRpcC5zZXRDbGFzc2VzKGNsYXNzZXMpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlc3Ryb3lUb29sdGlwIChlbCkge1xyXG4gIGlmIChlbC5fdG9vbHRpcCkge1xyXG4gICAgZWwuX3Rvb2x0aXAuZGlzcG9zZSgpXHJcbiAgICBkZWxldGUgZWwuX3Rvb2x0aXBcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGRpcmVjdGl2ZSA9IHtcclxuICBvcHRpb25zOiBkZWZhdWx0T3B0aW9ucyxcclxuICBiaW5kIChlbCwgeyB2YWx1ZSwgbW9kaWZpZXJzIH0pIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZSAmJiB2YWx1ZS5jb250ZW50IHx8IHZhbHVlXHJcbiAgICBkZXN0cm95VG9vbHRpcChlbClcclxuICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgIGNyZWF0ZVRvb2x0aXAoZWwsIHZhbHVlLCBtb2RpZmllcnMpXHJcbiAgICB9XHJcbiAgfSxcclxuICB1cGRhdGUgKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSwgbW9kaWZpZXJzIH0pIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZSAmJiB2YWx1ZS5jb250ZW50IHx8IHZhbHVlXHJcbiAgICBpZiAoIWNvbnRlbnQpIHtcclxuICAgICAgZGVzdHJveVRvb2x0aXAoZWwpXHJcbiAgICB9IGVsc2UgaWYgKGVsLl90b29sdGlwKSB7XHJcbiAgICAgIGNvbnN0IHRvb2x0aXAgPSBlbC5fdG9vbHRpcFxyXG4gICAgICAvLyBDb250ZW50XHJcbiAgICAgIHRvb2x0aXAuc2V0Q29udGVudChjb250ZW50KVxyXG4gICAgICAvLyBDU1MgQ2xhc3Nlc1xyXG4gICAgICB0b29sdGlwLnNldENsYXNzZXMoKHZhbHVlICYmIHZhbHVlLmNsYXNzZXMpIHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHRDbGFzcylcclxuICAgICAgLy8gT3B0aW9uc1xyXG4gICAgICB0b29sdGlwLnNldE9wdGlvbnMoe1xyXG4gICAgICAgIC4uLnZhbHVlLFxyXG4gICAgICAgIHBsYWNlbWVudDogZ2V0UGxhY2VtZW50KHZhbHVlLCBtb2RpZmllcnMpLFxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3JlYXRlVG9vbHRpcChlbCwgdmFsdWUsIG1vZGlmaWVycylcclxuICAgIH1cclxuICB9LFxyXG4gIHVuYmluZCAoZWwpIHtcclxuICAgIGRlc3Ryb3lUb29sdGlwKGVsKVxyXG4gIH0sXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRpcmVjdGl2ZVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdi10b29sdGlwLmpzIiwiXG5mdW5jdGlvbiBjb252ZXJ0VG9BcnJheSAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKVxyXG4gIH1cclxuICByZXR1cm4gdmFsdWVcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZENsYXNzZXMgKGVsLCBjbGFzc2VzKSB7XHJcbiAgY2xhc3NlcyA9IGNvbnZlcnRUb0FycmF5KGNsYXNzZXMpXHJcbiAgY2xhc3Nlcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgZWwuY2xhc3NMaXN0LmFkZChjKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDbGFzc2VzIChlbCwgY2xhc3Nlcykge1xyXG4gIGNsYXNzZXMgPSBjb252ZXJ0VG9BcnJheShjbGFzc2VzKVxyXG4gIGNsYXNzZXMuZm9yRWFjaChjID0+IHtcclxuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoYylcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNsYXNzZXMgKGVsLCBuZXdDbGFzc2VzLCBvbGRDbGFzc2VzKSB7XHJcbiAgcmVtb3ZlQ2xhc3NlcyhlbCwgb2xkQ2xhc3NlcylcclxuICBhZGRDbGFzc2VzKGVsLCBuZXdDbGFzc2VzKVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy5qcyIsInZhciBuYXRpdmVIaW50cyA9IFsnbmF0aXZlIGNvZGUnLCAnW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdJ107XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgbmF0aXZlbHkgKGFzIG9wcG9zZWQgdG8gYSBwb2x5ZmlsbCkuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0Z1bmN0aW9uIHwgdW5kZWZpbmVkfSBmbiB0aGUgZnVuY3Rpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG52YXIgaXNOYXRpdmUgPSAoZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBuYXRpdmVIaW50cy5zb21lKGZ1bmN0aW9uIChoaW50KSB7XG4gICAgcmV0dXJuIChmbiB8fCAnJykudG9TdHJpbmcoKS5pbmRleE9mKGhpbnQpID4gLTE7XG4gIH0pO1xufSk7XG5cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBsb25nZXJUaW1lb3V0QnJvd3NlcnMgPSBbJ0VkZ2UnLCAnVHJpZGVudCcsICdGaXJlZm94J107XG52YXIgdGltZW91dER1cmF0aW9uID0gMDtcbmZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2VyVGltZW91dEJyb3dzZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gIGlmIChpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKGxvbmdlclRpbWVvdXRCcm93c2Vyc1tpXSkgPj0gMCkge1xuICAgIHRpbWVvdXREdXJhdGlvbiA9IDE7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWljcm90YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICB2YXIgaSA9IDA7XG4gIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gIC8vIE11dGF0aW9uT2JzZXJ2ZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHNjaGVkdWxpbmcgbWljcm90YXNrcywgd2hpY2hcbiAgLy8gYXJlIHNjaGVkdWxlZCAqYmVmb3JlKiB0aGUgbmV4dCB0YXNrLiBUaGlzIGdpdmVzIHVzIGEgd2F5IHRvIGRlYm91bmNlXG4gIC8vIGEgZnVuY3Rpb24gYnV0IGVuc3VyZSBpdCdzIGNhbGxlZCAqYmVmb3JlKiB0aGUgbmV4dCBwYWludC5cbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgIGZuKCk7XG4gICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gIH0pO1xuXG4gIG9ic2VydmVyLm9ic2VydmUoZWxlbSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzY2hlZHVsZWQpIHtcbiAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICBlbGVtLnNldEF0dHJpYnV0ZSgneC1pbmRleCcsIGkpO1xuICAgICAgaSA9IGkgKyAxOyAvLyBkb24ndCB1c2UgY29tcHVuZCAoKz0pIGJlY2F1c2UgaXQgZG9lc24ndCBnZXQgb3B0aW1pemVkIGluIFY4XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc2NoZWR1bGVkKSB7XG4gICAgICBzY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmbigpO1xuICAgICAgfSwgdGltZW91dER1cmF0aW9uKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIEl0J3MgY29tbW9uIGZvciBNdXRhdGlvbk9ic2VydmVyIHBvbHlmaWxscyB0byBiZSBzZWVuIGluIHRoZSB3aWxkLCBob3dldmVyXG4vLyB0aGVzZSByZWx5IG9uIE11dGF0aW9uIEV2ZW50cyB3aGljaCBvbmx5IG9jY3VyIHdoZW4gYW4gZWxlbWVudCBpcyBjb25uZWN0ZWRcbi8vIHRvIHRoZSBET00uIFRoZSBhbGdvcml0aG0gdXNlZCBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCB1c2UgYSBjb25uZWN0ZWQgZWxlbWVudCxcbi8vIGFuZCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IGEgKm5hdGl2ZSogTXV0YXRpb25PYnNlcnZlciBpcyBhdmFpbGFibGUuXG52YXIgc3VwcG9ydHNOYXRpdmVNdXRhdGlvbk9ic2VydmVyID0gaXNCcm93c2VyICYmIGlzTmF0aXZlKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKTtcblxuLyoqXG4qIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGEgbWV0aG9kLCB0aGF0J3MgYXN5bmNocm9ub3VzbHkgZGVmZXJyZWRcbiogYnV0IGNhbGxlZCBpbiB0aGUgbWluaW11bSB0aW1lIHBvc3NpYmxlLlxuKlxuKiBAbWV0aG9kXG4qIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiogQGFyZ3VtZW50IHtGdW5jdGlvbn0gZm5cbiogQHJldHVybnMge0Z1bmN0aW9ufVxuKi9cbnZhciBkZWJvdW5jZSA9IHN1cHBvcnRzTmF0aXZlTXV0YXRpb25PYnNlcnZlciA/IG1pY3JvdGFza0RlYm91bmNlIDogdGFza0RlYm91bmNlO1xuXG4vKipcbiAqIFRlbGxzIGlmIGEgZ2l2ZW4gaW5wdXQgaXMgYSBudW1iZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7Kn0gaW5wdXQgdG8gY2hlY2tcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTnVtZXJpYyhuKSB7XG4gIHJldHVybiBuICE9PSAnJyAmJiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG59XG5cbi8qKlxuICogU2V0IHRoZSBzdHlsZSB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBzdHlsZSB0b1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHN0eWxlc1xuICogT2JqZWN0IHdpdGggYSBsaXN0IG9mIHByb3BlcnRpZXMgYW5kIHZhbHVlcyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gc2V0U3R5bGVzKGVsZW1lbnQsIHN0eWxlcykge1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICB2YXIgdW5pdCA9ICcnO1xuICAgIC8vIGFkZCB1bml0IGlmIHRoZSB2YWx1ZSBpcyBudW1lcmljIGFuZCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICAgIGlmIChbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5pbmRleE9mKHByb3ApICE9PSAtMSAmJiBpc051bWVyaWMoc3R5bGVzW3Byb3BdKSkge1xuICAgICAgdW5pdCA9ICdweCc7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBzdHlsZXNbcHJvcF0gKyB1bml0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBbnl9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICB2YXIgZ2V0VHlwZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIEdldCBDU1MgY29tcHV0ZWQgcHJvcGVydHkgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBjc3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgcmV0dXJuIHByb3BlcnR5ID8gY3NzW3Byb3BlcnR5XSA6IGNzcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnROb2RlIG9yIHRoZSBob3N0IG9mIHRoZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlIHx8IGVsZW1lbnQuaG9zdDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzY3JvbGxpbmcgcGFyZW50IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBzY3JvbGwgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFJldHVybiBib2R5LCBgZ2V0U2Nyb2xsYCB3aWxsIHRha2UgY2FyZSB0byBnZXQgdGhlIGNvcnJlY3QgYHNjcm9sbFRvcGAgZnJvbSBpdFxuICBpZiAoIWVsZW1lbnQgfHwgWydIVE1MJywgJ0JPRFknLCAnI2RvY3VtZW50J10uaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gd2luZG93LmRvY3VtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbCkvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xufVxuXG5mdW5jdGlvbiBpc09mZnNldENvbnRhaW5lcihlbGVtZW50KSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnSFRNTCcgfHwgZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQ7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHJvb3Qgbm9kZSAoZG9jdW1lbnQsIHNoYWRvd0RPTSByb290KSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJucyB7RWxlbWVudH0gcm9vdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGdldFJvb3Qobm9kZSkge1xuICBpZiAobm9kZS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGdldFJvb3Qobm9kZS5wYXJlbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQgJiYgZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG4gIHZhciBub2RlTmFtZSA9IG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQubm9kZU5hbWU7XG5cbiAgaWYgKCFub2RlTmFtZSB8fCBub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQ7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gSGVyZSB3ZSBtYWtlIHN1cmUgdG8gZ2l2ZSBhcyBcInN0YXJ0XCIgdGhlIGVsZW1lbnQgdGhhdCBjb21lcyBmaXJzdCBpbiB0aGUgRE9NXG4gIHZhciBvcmRlciA9IGVsZW1lbnQxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGVsZW1lbnQyKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO1xuICB2YXIgc3RhcnQgPSBvcmRlciA/IGVsZW1lbnQxIDogZWxlbWVudDI7XG4gIHZhciBlbmQgPSBvcmRlciA/IGVsZW1lbnQyIDogZWxlbWVudDE7XG5cbiAgLy8gR2V0IGNvbW1vbiBhbmNlc3RvciBjb250YWluZXJcbiAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQsIDApO1xuICByYW5nZS5zZXRFbmQoZW5kLCAwKTtcbiAgdmFyIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG5cbiAgLy8gQm90aCBub2RlcyBhcmUgaW5zaWRlICNkb2N1bWVudFxuXG4gIGlmIChlbGVtZW50MSAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgJiYgZWxlbWVudDIgIT09IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIHx8IHN0YXJ0LmNvbnRhaW5zKGVuZCkpIHtcbiAgICBpZiAoaXNPZmZzZXRDb250YWluZXIoY29tbW9uQW5jZXN0b3JDb250YWluZXIpKSB7XG4gICAgICByZXR1cm4gY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChjb21tb25BbmNlc3RvckNvbnRhaW5lcik7XG4gIH1cblxuICAvLyBvbmUgb2YgdGhlIG5vZGVzIGlzIGluc2lkZSBzaGFkb3dET00sIGZpbmQgd2hpY2ggb25lXG4gIHZhciBlbGVtZW50MXJvb3QgPSBnZXRSb290KGVsZW1lbnQxKTtcbiAgaWYgKGVsZW1lbnQxcm9vdC5ob3N0KSB7XG4gICAgcmV0dXJuIGZpbmRDb21tb25PZmZzZXRQYXJlbnQoZWxlbWVudDFyb290Lmhvc3QsIGVsZW1lbnQyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MSwgZ2V0Um9vdChlbGVtZW50MikuaG9zdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzY3JvbGwgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQgaW4gdGhlIGdpdmVuIHNpZGUgKHRvcCBhbmQgbGVmdClcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHNpZGUgYHRvcGAgb3IgYGxlZnRgXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbW91bnQgb2Ygc2Nyb2xsZWQgcGl4ZWxzXG4gKi9cbmZ1bmN0aW9uIGdldFNjcm9sbChlbGVtZW50KSB7XG4gIHZhciBzaWRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAndG9wJztcblxuICB2YXIgdXBwZXJTaWRlID0gc2lkZSA9PT0gJ3RvcCcgPyAnc2Nyb2xsVG9wJyA6ICdzY3JvbGxMZWZ0JztcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgdmFyIGh0bWwgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHZhciBzY3JvbGxpbmdFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgaHRtbDtcbiAgICByZXR1cm4gc2Nyb2xsaW5nRWxlbWVudFt1cHBlclNpZGVdO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRbdXBwZXJTaWRlXTtcbn1cblxuLypcbiAqIFN1bSBvciBzdWJ0cmFjdCB0aGUgZWxlbWVudCBzY3JvbGwgdmFsdWVzIChsZWZ0IGFuZCB0b3ApIGZyb20gYSBnaXZlbiByZWN0IG9iamVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHJlY3QgLSBSZWN0IG9iamVjdCB5b3Ugd2FudCB0byBjaGFuZ2VcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCBmcm9tIHRoZSBmdW5jdGlvbiByZWFkcyB0aGUgc2Nyb2xsIHZhbHVlc1xuICogQHBhcmFtIHtCb29sZWFufSBzdWJ0cmFjdCAtIHNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHN1YnRyYWN0IHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlY3QgLSBUaGUgbW9kaWZpZXIgcmVjdCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaW5jbHVkZVNjcm9sbChyZWN0LCBlbGVtZW50KSB7XG4gIHZhciBzdWJ0cmFjdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gIHZhciBtb2RpZmllciA9IHN1YnRyYWN0ID8gLTEgOiAxO1xuICByZWN0LnRvcCArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5ib3R0b20gKz0gc2Nyb2xsVG9wICogbW9kaWZpZXI7XG4gIHJlY3QubGVmdCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdCAqIG1vZGlmaWVyO1xuICByZXR1cm4gcmVjdDtcbn1cblxuLypcbiAqIEhlbHBlciB0byBkZXRlY3QgYm9yZGVycyBvZiBhIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXG4gKiBSZXN1bHQgb2YgYGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eWAgb24gdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBheGlzIC0gYHhgIG9yIGB5YFxuICogQHJldHVybiB7bnVtYmVyfSBib3JkZXJzIC0gVGhlIGJvcmRlcnMgc2l6ZSBvZiB0aGUgZ2l2ZW4gYXhpc1xuICovXG5cbmZ1bmN0aW9uIGdldEJvcmRlcnNTaXplKHN0eWxlcywgYXhpcykge1xuICB2YXIgc2lkZUEgPSBheGlzID09PSAneCcgPyAnTGVmdCcgOiAnVG9wJztcbiAgdmFyIHNpZGVCID0gc2lkZUEgPT09ICdMZWZ0JyA/ICdSaWdodCcgOiAnQm90dG9tJztcblxuICByZXR1cm4gK3N0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10uc3BsaXQoJ3B4JylbMF0gKyArc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXS5zcGxpdCgncHgnKVswXTtcbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93U2l6ZXMoKSB7XG4gIHZhciBib2R5ID0gd2luZG93LmRvY3VtZW50LmJvZHk7XG4gIHZhciBodG1sID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IE1hdGgubWF4KGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5Lm9mZnNldEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLm9mZnNldEhlaWdodCksXG4gICAgd2lkdGg6IE1hdGgubWF4KGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkub2Zmc2V0V2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwub2Zmc2V0V2lkdGgpXG4gIH07XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG5cblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGVsZW1lbnQgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gb2Zmc2V0c1xuICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0KG9mZnNldHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIFRlbGxzIGlmIHlvdSBhcmUgcnVubmluZyBJbnRlcm5ldCBFeHBsb3JlciAxMFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHJldHVybnMge0Jvb2xlYW59IGlzSUUxMFxuICovXG52YXIgaXNJRTEwID0gdW5kZWZpbmVkO1xuXG52YXIgaXNJRTEwJDEgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChpc0lFMTAgPT09IHVuZGVmaW5lZCkge1xuICAgIGlzSUUxMCA9IG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ01TSUUgMTAnKSAhPT0gLTE7XG4gIH1cbiAgcmV0dXJuIGlzSUUxMDtcbn07XG5cbi8qKlxuICogR2V0IGJvdW5kaW5nIGNsaWVudCByZWN0IG9mIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gY2xpZW50IHJlY3RcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSB7fTtcblxuICAvLyBJRTEwIDEwIEZJWDogUGxlYXNlLCBkb24ndCBhc2ssIHRoZSBlbGVtZW50IGlzbid0XG4gIC8vIGNvbnNpZGVyZWQgaW4gRE9NIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4uLlxuICAvLyBUaGlzIGlzbid0IHJlcHJvZHVjaWJsZSBpbiBJRTEwIGNvbXBhdGliaWxpdHkgbW9kZSBvZiBJRTExXG4gIGlmIChpc0lFMTAkMSgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChlbGVtZW50LCAnbGVmdCcpO1xuICAgICAgcmVjdC50b3AgKz0gc2Nyb2xsVG9wO1xuICAgICAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQ7XG4gICAgICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LnJpZ2h0ICs9IHNjcm9sbExlZnQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7fVxuICB9IGVsc2Uge1xuICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICB3aWR0aDogcmVjdC5yaWdodCAtIHJlY3QubGVmdCxcbiAgICBoZWlnaHQ6IHJlY3QuYm90dG9tIC0gcmVjdC50b3BcbiAgfTtcblxuICAvLyBzdWJ0cmFjdCBzY3JvbGxiYXIgc2l6ZSBmcm9tIHNpemVzXG4gIHZhciBzaXplcyA9IGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJyA/IGdldFdpbmRvd1NpemVzKCkgOiB7fTtcbiAgdmFyIHdpZHRoID0gc2l6ZXMud2lkdGggfHwgZWxlbWVudC5jbGllbnRXaWR0aCB8fCByZXN1bHQucmlnaHQgLSByZXN1bHQubGVmdDtcbiAgdmFyIGhlaWdodCA9IHNpemVzLmhlaWdodCB8fCBlbGVtZW50LmNsaWVudEhlaWdodCB8fCByZXN1bHQuYm90dG9tIC0gcmVzdWx0LnRvcDtcblxuICB2YXIgaG9yaXpTY3JvbGxiYXIgPSBlbGVtZW50Lm9mZnNldFdpZHRoIC0gd2lkdGg7XG4gIHZhciB2ZXJ0U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgLSBoZWlnaHQ7XG5cbiAgLy8gaWYgYW4gaHlwb3RoZXRpY2FsIHNjcm9sbGJhciBpcyBkZXRlY3RlZCwgd2UgbXVzdCBiZSBzdXJlIGl0J3Mgbm90IGEgYGJvcmRlcmBcbiAgLy8gd2UgbWFrZSB0aGlzIGNoZWNrIGNvbmRpdGlvbmFsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gIGlmIChob3JpelNjcm9sbGJhciB8fCB2ZXJ0U2Nyb2xsYmFyKSB7XG4gICAgdmFyIHN0eWxlcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50KTtcbiAgICBob3JpelNjcm9sbGJhciAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd4Jyk7XG4gICAgdmVydFNjcm9sbGJhciAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd5Jyk7XG5cbiAgICByZXN1bHQud2lkdGggLT0gaG9yaXpTY3JvbGxiYXI7XG4gICAgcmVzdWx0LmhlaWdodCAtPSB2ZXJ0U2Nyb2xsYmFyO1xuICB9XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3QocmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKGNoaWxkcmVuLCBwYXJlbnQpIHtcbiAgdmFyIGlzSUUxMCA9IGlzSUUxMCQxKCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuICB2YXIgb2Zmc2V0cyA9IGdldENsaWVudFJlY3Qoe1xuICAgIHRvcDogY2hpbGRyZW5SZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wLFxuICAgIGxlZnQ6IGNoaWxkcmVuUmVjdC5sZWZ0IC0gcGFyZW50UmVjdC5sZWZ0LFxuICAgIHdpZHRoOiBjaGlsZHJlblJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiBjaGlsZHJlblJlY3QuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoaXNIVE1MIHx8IHBhcmVudC5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgdmFyIHN0eWxlcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQpO1xuICAgIHZhciBib3JkZXJUb3BXaWR0aCA9IGlzSUUxMCAmJiBpc0hUTUwgPyAwIDogK3N0eWxlcy5ib3JkZXJUb3BXaWR0aC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgYm9yZGVyTGVmdFdpZHRoID0gaXNJRTEwICYmIGlzSFRNTCA/IDAgOiArc3R5bGVzLmJvcmRlckxlZnRXaWR0aC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgbWFyZ2luVG9wID0gaXNJRTEwICYmIGlzSFRNTCA/IDAgOiArc3R5bGVzLm1hcmdpblRvcC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgbWFyZ2luTGVmdCA9IGlzSUUxMCAmJiBpc0hUTUwgPyAwIDogK3N0eWxlcy5tYXJnaW5MZWZ0LnNwbGl0KCdweCcpWzBdO1xuXG4gICAgb2Zmc2V0cy50b3AgLT0gYm9yZGVyVG9wV2lkdGggLSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5ib3R0b20gLT0gYm9yZGVyVG9wV2lkdGggLSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5sZWZ0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG4gICAgb2Zmc2V0cy5yaWdodCAtPSBib3JkZXJMZWZ0V2lkdGggLSBtYXJnaW5MZWZ0O1xuXG4gICAgLy8gQXR0YWNoIG1hcmdpblRvcCBhbmQgbWFyZ2luTGVmdCBiZWNhdXNlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcyB3ZSBtYXkgbmVlZCB0aGVtXG4gICAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5tYXJnaW5MZWZ0ID0gbWFyZ2luTGVmdDtcbiAgfVxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoc2Nyb2xsUGFyZW50KSAmJiAoaXNJRTEwIHx8IHNjcm9sbFBhcmVudC5ub2RlTmFtZSAhPT0gJ0JPRFknKSkge1xuICAgIG9mZnNldHMgPSBpbmNsdWRlU2Nyb2xsKG9mZnNldHMsIHBhcmVudCk7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlKGVsZW1lbnQpIHtcbiAgdmFyIGh0bWwgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB2YXIgcmVsYXRpdmVPZmZzZXQgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoZWxlbWVudCwgaHRtbCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KGh0bWwuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoaHRtbC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGh0bWwpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChodG1sLCAnbGVmdCcpO1xuXG4gIHZhciBvZmZzZXQgPSB7XG4gICAgdG9wOiBzY3JvbGxUb3AgLSByZWxhdGl2ZU9mZnNldC50b3AgKyByZWxhdGl2ZU9mZnNldC5tYXJnaW5Ub3AsXG4gICAgbGVmdDogc2Nyb2xsTGVmdCAtIHJlbGF0aXZlT2Zmc2V0LmxlZnQgKyByZWxhdGl2ZU9mZnNldC5tYXJnaW5MZWZ0LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KG9mZnNldCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgZml4ZWQgb3IgaXMgaW5zaWRlIGEgZml4ZWQgcGFyZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gY3VzdG9tQ29udGFpbmVyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvIFwiaXNGaXhlZD9cIlxuICovXG5mdW5jdGlvbiBpc0ZpeGVkKGVsZW1lbnQpIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbi8qKlxuICogQ29tcHV0ZWQgdGhlIGJvdW5kYXJpZXMgbGltaXRzIGFuZCByZXR1cm4gdGhlbVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWRkaW5nXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBib3VuZGFyaWVzRWxlbWVudCAtIEVsZW1lbnQgdXNlZCB0byBkZWZpbmUgdGhlIGJvdW5kYXJpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IENvb3JkaW5hdGVzIG9mIHRoZSBib3VuZGFyaWVzXG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBib3VuZGFyaWVzID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocG9wcGVyKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3dpbmRvdycpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBib3VuZGFyaWVzRWxlbWVudDtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShib3VuZGFyaWVzTm9kZSwgb2Zmc2V0UGFyZW50KTtcblxuICAgIC8vIEluIGNhc2Ugb2YgSFRNTCwgd2UgbmVlZCBhIGRpZmZlcmVudCBjb21wdXRhdGlvblxuICAgIGlmIChib3VuZGFyaWVzTm9kZS5ub2RlTmFtZSA9PT0gJ0hUTUwnICYmICFpc0ZpeGVkKG9mZnNldFBhcmVudCkpIHtcbiAgICAgIHZhciBfZ2V0V2luZG93U2l6ZXMgPSBnZXRXaW5kb3dTaXplcygpLFxuICAgICAgICAgIGhlaWdodCA9IF9nZXRXaW5kb3dTaXplcy5oZWlnaHQsXG4gICAgICAgICAgd2lkdGggPSBfZ2V0V2luZG93U2l6ZXMud2lkdGg7XG5cbiAgICAgIGJvdW5kYXJpZXMudG9wICs9IG9mZnNldHMudG9wIC0gb2Zmc2V0cy5tYXJnaW5Ub3A7XG4gICAgICBib3VuZGFyaWVzLmJvdHRvbSA9IGhlaWdodCArIG9mZnNldHMudG9wO1xuICAgICAgYm91bmRhcmllcy5sZWZ0ICs9IG9mZnNldHMubGVmdCAtIG9mZnNldHMubWFyZ2luTGVmdDtcbiAgICAgIGJvdW5kYXJpZXMucmlnaHQgPSB3aWR0aCArIG9mZnNldHMubGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIGFsbCB0aGUgb3RoZXIgRE9NIGVsZW1lbnRzLCB0aGlzIG9uZSBpcyBnb29kXG4gICAgICBib3VuZGFyaWVzID0gb2Zmc2V0cztcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcGFkZGluZ3NcbiAgYm91bmRhcmllcy5sZWZ0ICs9IHBhZGRpbmc7XG4gIGJvdW5kYXJpZXMudG9wICs9IHBhZGRpbmc7XG4gIGJvdW5kYXJpZXMucmlnaHQgLT0gcGFkZGluZztcbiAgYm91bmRhcmllcy5ib3R0b20gLT0gcGFkZGluZztcblxuICByZXR1cm4gYm91bmRhcmllcztcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHVzZWQgdG8gdHJhbnNmb3JtIHRoZSBgYXV0b2AgcGxhY2VtZW50IHRvIHRoZSBwbGFjZW1lbnQgd2l0aCBtb3JlXG4gKiBhdmFpbGFibGUgc3BhY2UuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChwbGFjZW1lbnQsIHJlZlJlY3QsIHBvcHBlciwgcmVmZXJlbmNlLCBib3VuZGFyaWVzRWxlbWVudCkge1xuICBpZiAocGxhY2VtZW50LmluZGV4T2YoJ2F1dG8nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gcGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKHBvcHBlciwgcmVmZXJlbmNlLCAwLCBib3VuZGFyaWVzRWxlbWVudCk7XG5cbiAgdmFyIHNpZGVzID0ge1xuICAgIHRvcDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcCxcbiAgICByaWdodDogYm91bmRhcmllcy5yaWdodCAtIHJlZlJlY3QucmlnaHQsXG4gICAgYm90dG9tOiBib3VuZGFyaWVzLmJvdHRvbSAtIHJlZlJlY3QuYm90dG9tLFxuICAgIGxlZnQ6IHJlZlJlY3QubGVmdCAtIGJvdW5kYXJpZXMubGVmdFxuICB9O1xuXG4gIHZhciBjb21wdXRlZFBsYWNlbWVudCA9IE9iamVjdC5rZXlzKHNpZGVzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHNpZGVzW2JdIC0gc2lkZXNbYV07XG4gIH0pWzBdO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgcmV0dXJuIGNvbXB1dGVkUGxhY2VtZW50ICsgKHZhcmlhdGlvbiA/ICctJyArIHZhcmlhdGlvbiA6ICcnKTtcbn1cblxuLyoqXG4gKiBHZXQgb2Zmc2V0cyB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudH0gcmVmZXJlbmNlIC0gdGhlIHJlZmVyZW5jZSBlbGVtZW50ICh0aGUgcG9wcGVyIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcylcbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGdldFJlZmVyZW5jZU9mZnNldHMoc3RhdGUsIHBvcHBlciwgcmVmZXJlbmNlKSB7XG4gIHZhciBjb21tb25PZmZzZXRQYXJlbnQgPSBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KHBvcHBlciwgcmVmZXJlbmNlKTtcbiAgcmV0dXJuIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShyZWZlcmVuY2UsIGNvbW1vbk9mZnNldFBhcmVudCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvdXRlciBzaXplcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCAob2Zmc2V0IHNpemUgKyBtYXJnaW5zKVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3QgY29udGFpbmluZyB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJTaXplcyhlbGVtZW50KSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIHggPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5Ub3ApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luQm90dG9tKTtcbiAgdmFyIHkgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblJpZ2h0KTtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCArIHksXG4gICAgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCArIHhcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG9wcG9zaXRlIHBsYWNlbWVudCBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudFxuICovXG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgdmFyIGhhc2ggPSB7IGxlZnQ6ICdyaWdodCcsIHJpZ2h0OiAnbGVmdCcsIGJvdHRvbTogJ3RvcCcsIHRvcDogJ2JvdHRvbScgfTtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHBvc2l0aW9uIC0gQ1NTIHBvc2l0aW9uIHRoZSBQb3BwZXIgd2lsbCBnZXQgYXBwbGllZFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0cyAtIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge1N0cmluZ30gcGxhY2VtZW50IC0gb25lIG9mIHRoZSB2YWxpZCBwbGFjZW1lbnQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gcG9wcGVyT2Zmc2V0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGdldFBvcHBlck9mZnNldHMocG9wcGVyLCByZWZlcmVuY2VPZmZzZXRzLCBwbGFjZW1lbnQpIHtcbiAgcGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgLy8gR2V0IHBvcHBlciBub2RlIHNpemVzXG4gIHZhciBwb3BwZXJSZWN0ID0gZ2V0T3V0ZXJTaXplcyhwb3BwZXIpO1xuXG4gIC8vIEFkZCBwb3NpdGlvbiwgd2lkdGggYW5kIGhlaWdodCB0byBvdXIgb2Zmc2V0cyBvYmplY3RcbiAgdmFyIHBvcHBlck9mZnNldHMgPSB7XG4gICAgd2lkdGg6IHBvcHBlclJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiBwb3BwZXJSZWN0LmhlaWdodFxuICB9O1xuXG4gIC8vIGRlcGVuZGluZyBieSB0aGUgcG9wcGVyIHBsYWNlbWVudCB3ZSBoYXZlIHRvIGNvbXB1dGUgaXRzIG9mZnNldHMgc2xpZ2h0bHkgZGlmZmVyZW50bHlcbiAgdmFyIGlzSG9yaXogPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuICB2YXIgbWFpblNpZGUgPSBpc0hvcml6ID8gJ3RvcCcgOiAnbGVmdCc7XG4gIHZhciBzZWNvbmRhcnlTaWRlID0gaXNIb3JpeiA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc0hvcml6ID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2Vjb25kYXJ5TWVhc3VyZW1lbnQgPSAhaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBwb3BwZXJPZmZzZXRzW21haW5TaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbbWFpblNpZGVdICsgcmVmZXJlbmNlT2Zmc2V0c1ttZWFzdXJlbWVudF0gLyAyIC0gcG9wcGVyUmVjdFttZWFzdXJlbWVudF0gLyAyO1xuICBpZiAocGxhY2VtZW50ID09PSBzZWNvbmRhcnlTaWRlKSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gLSBwb3BwZXJSZWN0W3NlY29uZGFyeU1lYXN1cmVtZW50XTtcbiAgfSBlbHNlIHtcbiAgICBwb3BwZXJPZmZzZXRzW3NlY29uZGFyeVNpZGVdID0gcmVmZXJlbmNlT2Zmc2V0c1tnZXRPcHBvc2l0ZVBsYWNlbWVudChzZWNvbmRhcnlTaWRlKV07XG4gIH1cblxuICByZXR1cm4gcG9wcGVyT2Zmc2V0cztcbn1cblxuLyoqXG4gKiBNaW1pY3MgdGhlIGBmaW5kYCBtZXRob2Qgb2YgQXJyYXlcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICogQGFyZ3VtZW50IHByb3BcbiAqIEBhcmd1bWVudCB2YWx1ZVxuICogQHJldHVybnMgaW5kZXggb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmluZChhcnIsIGNoZWNrKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZCBpZiBzdXBwb3J0ZWRcbiAgaWYgKEFycmF5LnByb3RvdHlwZS5maW5kKSB7XG4gICAgcmV0dXJuIGFyci5maW5kKGNoZWNrKTtcbiAgfVxuXG4gIC8vIHVzZSBgZmlsdGVyYCB0byBvYnRhaW4gdGhlIHNhbWUgYmVoYXZpb3Igb2YgYGZpbmRgXG4gIHJldHVybiBhcnIuZmlsdGVyKGNoZWNrKVswXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBtYXRjaGluZyBvYmplY3RcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICogQGFyZ3VtZW50IHByb3BcbiAqIEBhcmd1bWVudCB2YWx1ZVxuICogQHJldHVybnMgaW5kZXggb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFyciwgcHJvcCwgdmFsdWUpIHtcbiAgLy8gdXNlIG5hdGl2ZSBmaW5kSW5kZXggaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KSB7XG4gICAgcmV0dXJuIGFyci5maW5kSW5kZXgoZnVuY3Rpb24gKGN1cikge1xuICAgICAgcmV0dXJuIGN1cltwcm9wXSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICAvLyB1c2UgYGZpbmRgICsgYGluZGV4T2ZgIGlmIGBmaW5kSW5kZXhgIGlzbid0IHN1cHBvcnRlZFxuICB2YXIgbWF0Y2ggPSBmaW5kKGFyciwgZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmpbcHJvcF0gPT09IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIGFyci5pbmRleE9mKG1hdGNoKTtcbn1cblxuLyoqXG4gKiBMb29wIHRyb3VnaCB0aGUgbGlzdCBvZiBtb2RpZmllcnMgYW5kIHJ1biB0aGVtIGluIG9yZGVyLFxuICogZWFjaCBvZiB0aGVtIHdpbGwgdGhlbiBlZGl0IHRoZSBkYXRhIG9iamVjdC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gZW5kcyAtIE9wdGlvbmFsIG1vZGlmaWVyIG5hbWUgdXNlZCBhcyBzdG9wcGVyXG4gKiBAcmV0dXJucyB7ZGF0YU9iamVjdH1cbiAqL1xuZnVuY3Rpb24gcnVuTW9kaWZpZXJzKG1vZGlmaWVycywgZGF0YSwgZW5kcykge1xuICB2YXIgbW9kaWZpZXJzVG9SdW4gPSBlbmRzID09PSB1bmRlZmluZWQgPyBtb2RpZmllcnMgOiBtb2RpZmllcnMuc2xpY2UoMCwgZmluZEluZGV4KG1vZGlmaWVycywgJ25hbWUnLCBlbmRzKSk7XG5cbiAgbW9kaWZpZXJzVG9SdW4uZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAobW9kaWZpZXIuZnVuY3Rpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybignYG1vZGlmaWVyLmZ1bmN0aW9uYCBpcyBkZXByZWNhdGVkLCB1c2UgYG1vZGlmaWVyLmZuYCEnKTtcbiAgICB9XG4gICAgdmFyIGZuID0gbW9kaWZpZXIuZnVuY3Rpb24gfHwgbW9kaWZpZXIuZm47XG4gICAgaWYgKG1vZGlmaWVyLmVuYWJsZWQgJiYgaXNGdW5jdGlvbihmbikpIHtcbiAgICAgIGRhdGEgPSBmbihkYXRhLCBtb2RpZmllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLCBjb21wdXRpbmcgdGhlIG5ldyBvZmZzZXRzIGFuZCBhcHBseWluZ1xuICogdGhlIG5ldyBzdHlsZS48YnIgLz5cbiAqIFByZWZlciBgc2NoZWR1bGVVcGRhdGVgIG92ZXIgYHVwZGF0ZWAgYmVjYXVzZSBvZiBwZXJmb3JtYW5jZSByZWFzb25zLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiB1cGRhdGUoKSB7XG4gIC8vIGlmIHBvcHBlciBpcyBkZXN0cm95ZWQsIGRvbid0IHBlcmZvcm0gYW55IGZ1cnRoZXIgdXBkYXRlXG4gIGlmICh0aGlzLnN0YXRlLmlzRGVzdHJveWVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGRhdGEgPSB7XG4gICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgc3R5bGVzOiB7fSxcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICBmbGlwcGVkOiBmYWxzZSxcbiAgICBvZmZzZXRzOiB7fVxuICB9O1xuXG4gIC8vIGNvbXB1dGUgcmVmZXJlbmNlIGVsZW1lbnQgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlT2Zmc2V0cyh0aGlzLnN0YXRlLCB0aGlzLnBvcHBlciwgdGhpcy5yZWZlcmVuY2UpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50KTtcblxuICAvLyBzdG9yZSB0aGUgY29tcHV0ZWQgcGxhY2VtZW50IGluc2lkZSBgb3JpZ2luYWxQbGFjZW1lbnRgXG4gIGRhdGEub3JpZ2luYWxQbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcblxuICAvLyBjb21wdXRlIHRoZSBwb3BwZXIgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0UG9wcGVyT2Zmc2V0cyh0aGlzLnBvcHBlciwgZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSwgZGF0YS5wbGFjZW1lbnQpO1xuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSlcbiAqL1xuZnVuY3Rpb24gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKHByb3BlcnR5KSB7XG4gIHZhciBwcmVmaXhlcyA9IFtmYWxzZSwgJ21zJywgJ3dlYmtpdCcsICdtb3onLCAnbyddO1xuICB2YXIgdXBwZXJQcm9wID0gcHJvcGVydHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuYm9keS5zdHlsZVt0b0NoZWNrXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBEZXN0cm95IHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgdGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgLy8gdG91Y2ggRE9NIG9ubHkgaWYgYGFwcGx5U3R5bGVgIG1vZGlmaWVyIGlzIGVuYWJsZWRcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKHRoaXMubW9kaWZpZXJzLCAnYXBwbHlTdHlsZScpKSB7XG4gICAgdGhpcy5wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCd4LXBsYWNlbWVudCcpO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlW2dldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyldID0gJyc7XG4gIH1cblxuICB0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycygpO1xuXG4gIC8vIHJlbW92ZSB0aGUgcG9wcGVyIGlmIHVzZXIgZXhwbGljaXR5IGFza2VkIGZvciB0aGUgZGVsZXRpb24gb24gZGVzdHJveVxuICAvLyBkbyBub3QgdXNlIGByZW1vdmVgIGJlY2F1c2UgSUUxMSBkb2Vzbid0IHN1cHBvcnQgaXRcbiAgaWYgKHRoaXMub3B0aW9ucy5yZW1vdmVPbkRlc3Ryb3kpIHtcbiAgICB0aGlzLnBvcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbFBhcmVudCwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKSB7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQubm9kZU5hbWUgPT09ICdCT0RZJztcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IHdpbmRvdyA6IHNjcm9sbFBhcmVudDtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgaWYgKCFpc0JvZHkpIHtcbiAgICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoZ2V0U2Nyb2xsUGFyZW50KHRhcmdldC5wYXJlbnROb2RlKSwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKTtcbiAgfVxuICBzY3JvbGxQYXJlbnRzLnB1c2godGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBvcHRpb25zLCBzdGF0ZSwgdXBkYXRlQm91bmQpIHtcbiAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBzdGF0ZS51cGRhdGVCb3VuZCA9IHVwZGF0ZUJvdW5kO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3RhdGUudXBkYXRlQm91bmQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAvLyBTY3JvbGwgZXZlbnQgbGlzdGVuZXIgb24gc2Nyb2xsIHBhcmVudHNcbiAgdmFyIHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxQYXJlbnQocmVmZXJlbmNlKTtcbiAgYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbEVsZW1lbnQsICdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCwgc3RhdGUuc2Nyb2xsUGFyZW50cyk7XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBzY3JvbGxFbGVtZW50O1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gdHJ1ZTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCBhZGQgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHN0YXJ0IHJlY2FsY3VsYXRpbmdcbiAqIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIgZWxlbWVudCB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICghdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHNldHVwRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucywgdGhpcy5zdGF0ZSwgdGhpcy5zY2hlZHVsZVVwZGF0ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZSwgc3RhdGUpIHtcbiAgLy8gUmVtb3ZlIHJlc2l6ZSBldmVudCBsaXN0ZW5lciBvbiB3aW5kb3dcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcblxuICAvLyBSZW1vdmUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyIG9uIHNjcm9sbCBwYXJlbnRzXG4gIHN0YXRlLnNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgfSk7XG5cbiAgLy8gUmVzZXQgc3RhdGVcbiAgc3RhdGUudXBkYXRlQm91bmQgPSBudWxsO1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0gW107XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBudWxsO1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gZmFsc2U7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIHJlbW92ZSByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgd29uJ3QgcmVjYWxjdWxhdGUgcG9wcGVyIHBvc2l0aW9uXG4gKiB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC4gSXQgYWxzbyB3b24ndCB0cmlnZ2VyIG9uVXBkYXRlIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY2hlZHVsZVVwZGF0ZSk7XG4gICAgdGhpcy5zdGF0ZSA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMucmVmZXJlbmNlLCB0aGlzLnN0YXRlKTtcbiAgfVxufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEsIG9wdGlvbnMpIHtcbiAgLy8gYXBwbHkgdGhlIGZpbmFsIG9mZnNldHMgdG8gdGhlIHBvcHBlclxuICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICB2YXIgc3R5bGVzID0ge1xuICAgIHBvc2l0aW9uOiBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uXG4gIH07XG5cbiAgdmFyIGF0dHJpYnV0ZXMgPSB7XG4gICAgJ3gtcGxhY2VtZW50JzogZGF0YS5wbGFjZW1lbnRcbiAgfTtcblxuICAvLyByb3VuZCB0b3AgYW5kIGxlZnQgdG8gYXZvaWQgYmx1cnJ5IHRleHRcbiAgdmFyIGxlZnQgPSBNYXRoLnJvdW5kKGRhdGEub2Zmc2V0cy5wb3BwZXIubGVmdCk7XG4gIHZhciB0b3AgPSBNYXRoLnJvdW5kKGRhdGEub2Zmc2V0cy5wb3BwZXIudG9wKTtcblxuICAvLyBpZiBncHVBY2NlbGVyYXRpb24gaXMgc2V0IHRvIHRydWUgYW5kIHRyYW5zZm9ybSBpcyBzdXBwb3J0ZWQsXG4gIC8vICB3ZSB1c2UgYHRyYW5zbGF0ZTNkYCB0byBhcHBseSB0aGUgcG9zaXRpb24gdG8gdGhlIHBvcHBlciB3ZVxuICAvLyBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgc3VwcG9ydGVkIHByZWZpeGVkIHZlcnNpb24gaWYgbmVlZGVkXG4gIHZhciBwcmVmaXhlZFByb3BlcnR5ID0gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKTtcbiAgaWYgKG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uICYmIHByZWZpeGVkUHJvcGVydHkpIHtcbiAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICBzdHlsZXMudG9wID0gMDtcbiAgICBzdHlsZXMubGVmdCA9IDA7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGh3ZXJpc2UsIHdlIHVzZSB0aGUgc3RhbmRhcmQgYGxlZnRgIGFuZCBgdG9wYCBwcm9wZXJ0aWVzXG4gICAgc3R5bGVzLmxlZnQgPSBsZWZ0O1xuICAgIHN0eWxlcy50b3AgPSB0b3A7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSAndG9wLCBsZWZ0JztcbiAgfVxuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLnN0eWxlc2Agd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIsXG4gIC8vIGluIHRoaXMgd2F5IHdlIGNhbiBtYWtlIHRoZSAzcmQgcGFydHkgbW9kaWZpZXJzIGFkZCBjdXN0b20gc3R5bGVzIHRvIGl0XG4gIC8vIEJlIGF3YXJlLCBtb2RpZmllcnMgY291bGQgb3ZlcnJpZGUgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXNcbiAgLy8gbGluZXMgb2YgdGhpcyBtb2RpZmllciFcbiAgc2V0U3R5bGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBfZXh0ZW5kcyh7fSwgc3R5bGVzLCBkYXRhLnN0eWxlcykpO1xuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLmF0dHJpYnV0ZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyB0aGV5IHdpbGwgYmUgc2V0IGFzIEhUTUwgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuICBzZXRBdHRyaWJ1dGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBfZXh0ZW5kcyh7fSwgYXR0cmlidXRlcywgZGF0YS5hdHRyaWJ1dGVzKSk7XG5cbiAgLy8gaWYgdGhlIGFycm93IHN0eWxlIGhhcyBiZWVuIGNvbXB1dGVkLCBhcHBseSB0aGUgYXJyb3cgc3R5bGVcbiAgaWYgKGRhdGEub2Zmc2V0cy5hcnJvdykge1xuICAgIHNldFN0eWxlcyhkYXRhLmFycm93RWxlbWVudCwgZGF0YS5vZmZzZXRzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFBvcHBlci5qcyBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGFwcGx5U3R5bGVPbkxvYWQocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMsIG1vZGlmaWVyT3B0aW9ucywgc3RhdGUpIHtcbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIHZhciByZWZlcmVuY2VPZmZzZXRzID0gZ2V0UmVmZXJlbmNlT2Zmc2V0cyhzdGF0ZSwgcG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICB2YXIgcGxhY2VtZW50ID0gY29tcHV0ZUF1dG9QbGFjZW1lbnQob3B0aW9ucy5wbGFjZW1lbnQsIHJlZmVyZW5jZU9mZnNldHMsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50KTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS48YnIgLz5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgbmVlZGVkIG1vZGlmaWVyIGlzIGxpc3RlZCBhbmQgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVycyAtIGxpc3Qgb2YgbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZ05hbWUgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWROYW1lIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyUmVxdWlyZWQobW9kaWZpZXJzLCByZXF1ZXN0aW5nTmFtZSwgcmVxdWVzdGVkTmFtZSkge1xuICB2YXIgcmVxdWVzdGluZyA9IGZpbmQobW9kaWZpZXJzLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgIHJldHVybiBuYW1lID09PSByZXF1ZXN0aW5nTmFtZTtcbiAgfSk7XG5cbiAgdmFyIGlzUmVxdWlyZWQgPSAhIXJlcXVlc3RpbmcgJiYgbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09IHJlcXVlc3RlZE5hbWUgJiYgbW9kaWZpZXIuZW5hYmxlZCAmJiBtb2RpZmllci5vcmRlciA8IHJlcXVlc3Rpbmcub3JkZXI7XG4gIH0pO1xuXG4gIGlmICghaXNSZXF1aXJlZCkge1xuICAgIHZhciBfcmVxdWVzdGluZyA9ICdgJyArIHJlcXVlc3RpbmdOYW1lICsgJ2AnO1xuICAgIHZhciByZXF1ZXN0ZWQgPSAnYCcgKyByZXF1ZXN0ZWROYW1lICsgJ2AnO1xuICAgIGNvbnNvbGUud2FybihyZXF1ZXN0ZWQgKyAnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcgKyBfcmVxdWVzdGluZyArICcgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnICsgX3JlcXVlc3RpbmcgKyAnIScpO1xuICB9XG4gIHJldHVybiBpc1JlcXVpcmVkO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gYXJyb3coZGF0YSwgb3B0aW9ucykge1xuICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnYXJyb3cnLCAna2VlcFRvZ2V0aGVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBhcnJvd0VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpc24ndCBhIHF1ZXJ5IHNlbGVjdG9yIHdlIG11c3QgY2hlY2sgdGhhdCB0aGVcbiAgICAvLyBwcm92aWRlZCBET00gbm9kZSBpcyBjaGlsZCBvZiBpdHMgcG9wcGVyIG5vZGVcbiAgICBpZiAoIWRhdGEuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93LmVsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICB2YXIgcmVmZXJlbmNlID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2lkZSA9IGlzVmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JztcbiAgdmFyIGFsdFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gIHZhciBvcFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICB2YXIgYXJyb3dFbGVtZW50U2l6ZSA9IGdldE91dGVyU2l6ZXMoYXJyb3dFbGVtZW50KVtsZW5dO1xuXG4gIC8vXG4gIC8vIGV4dGVuZHMga2VlcFRvZ2V0aGVyIGJlaGF2aW9yIG1ha2luZyBzdXJlIHRoZSBwb3BwZXIgYW5kIGl0cyByZWZlcmVuY2UgaGF2ZSBlbm91Z2ggcGl4ZWxzIGluIGNvbmp1Y3Rpb25cbiAgLy9cblxuICAvLyB0b3AvbGVmdCBzaWRlXG4gIGlmIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUgPCBwb3BwZXJbc2lkZV0pIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC09IHBvcHBlcltzaWRlXSAtIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUpO1xuICB9XG4gIC8vIGJvdHRvbS9yaWdodCBzaWRlXG4gIGlmIChyZWZlcmVuY2Vbc2lkZV0gKyBhcnJvd0VsZW1lbnRTaXplID4gcG9wcGVyW29wU2lkZV0pIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdICs9IHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgLSBwb3BwZXJbb3BTaWRlXTtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICB2YXIgc2lkZVZhbHVlID0gY2VudGVyIC0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKVtzaWRlXTtcblxuICAvLyBwcmV2ZW50IGFycm93RWxlbWVudCBmcm9tIGJlaW5nIHBsYWNlZCBub3QgY29udGlndW91c2x5IHRvIGl0cyBwb3BwZXJcbiAgc2lkZVZhbHVlID0gTWF0aC5tYXgoTWF0aC5taW4ocG9wcGVyW2xlbl0gLSBhcnJvd0VsZW1lbnRTaXplLCBzaWRlVmFsdWUpLCAwKTtcblxuICBkYXRhLmFycm93RWxlbWVudCA9IGFycm93RWxlbWVudDtcbiAgZGF0YS5vZmZzZXRzLmFycm93ID0ge307XG4gIGRhdGEub2Zmc2V0cy5hcnJvd1tzaWRlXSA9IHNpZGVWYWx1ZTtcbiAgZGF0YS5vZmZzZXRzLmFycm93W2FsdFNpZGVdID0gJyc7IC8vIG1ha2Ugc3VyZSB0byB1bnNldCBhbnkgZXZlbnR1YWwgYWx0U2lkZSB2YWx1ZSBmcm9tIHRoZSBET00gbm9kZVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IHZhcmlhdGlvbiBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50IHZhcmlhdGlvblxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbikge1xuICBpZiAodmFyaWF0aW9uID09PSAnZW5kJykge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9IGVsc2UgaWYgKHZhcmlhdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgIHJldHVybiAnZW5kJztcbiAgfVxuICByZXR1cm4gdmFyaWF0aW9uO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgYWNjZXB0ZWQgcGxhY2VtZW50cyB0byB1c2UgYXMgdmFsdWVzIG9mIHRoZSBgcGxhY2VtZW50YCBvcHRpb24uPGJyIC8+XG4gKiBWYWxpZCBwbGFjZW1lbnRzIGFyZTpcbiAqIC0gYGF1dG9gXG4gKiAtIGB0b3BgXG4gKiAtIGByaWdodGBcbiAqIC0gYGJvdHRvbWBcbiAqIC0gYGxlZnRgXG4gKlxuICogRWFjaCBwbGFjZW1lbnQgY2FuIGhhdmUgYSB2YXJpYXRpb24gZnJvbSB0aGlzIGxpc3Q6XG4gKiAtIGAtc3RhcnRgXG4gKiAtIGAtZW5kYFxuICpcbiAqIFZhcmlhdGlvbnMgYXJlIGludGVycHJldGVkIGVhc2lseSBpZiB5b3UgdGhpbmsgb2YgdGhlbSBhcyB0aGUgbGVmdCB0byByaWdodFxuICogd3JpdHRlbiBsYW5ndWFnZXMuIEhvcml6b250YWxseSAoYHRvcGAgYW5kIGBib3R0b21gKSwgYHN0YXJ0YCBpcyBsZWZ0IGFuZCBgZW5kYFxuICogaXMgcmlnaHQuPGJyIC8+XG4gKiBWZXJ0aWNhbGx5IChgbGVmdGAgYW5kIGByaWdodGApLCBgc3RhcnRgIGlzIHRvcCBhbmQgYGVuZGAgaXMgYm90dG9tLlxuICpcbiAqIFNvbWUgdmFsaWQgZXhhbXBsZXMgYXJlOlxuICogLSBgdG9wLWVuZGAgKG9uIHRvcCBvZiByZWZlcmVuY2UsIHJpZ2h0IGFsaWduZWQpXG4gKiAtIGByaWdodC1zdGFydGAgKG9uIHJpZ2h0IG9mIHJlZmVyZW5jZSwgdG9wIGFsaWduZWQpXG4gKiAtIGBib3R0b21gIChvbiBib3R0b20sIGNlbnRlcmVkKVxuICogLSBgYXV0by1yaWdodGAgKG9uIHRoZSBzaWRlIHdpdGggbW9yZSBzcGFjZSBhdmFpbGFibGUsIGFsaWdubWVudCBkZXBlbmRzIGJ5IHBsYWNlbWVudClcbiAqXG4gKiBAc3RhdGljXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAZW51bSB7U3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWV0aG9kIHBsYWNlbWVudHNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIHBsYWNlbWVudHMgPSBbJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdhdXRvLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJywgJ3RvcC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAncmlnaHQtZW5kJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tJywgJ2JvdHRvbS1zdGFydCcsICdsZWZ0LWVuZCcsICdsZWZ0JywgJ2xlZnQtc3RhcnQnXTtcblxuLy8gR2V0IHJpZCBvZiBgYXV0b2AgYGF1dG8tc3RhcnRgIGFuZCBgYXV0by1lbmRgXG52YXIgdmFsaWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5zbGljZSgzKTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHBsYWNlbWVudCwgcmV0dXJucyBhbGwgdGhlIHN1YnNlcXVlbnQgcGxhY2VtZW50c1xuICogY2xvY2t3aXNlIChvciBjb3VudGVyLWNsb2Nrd2lzZSkuXG4gKlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudCAtIEEgdmFsaWQgcGxhY2VtZW50IChpdCBhY2NlcHRzIHZhcmlhdGlvbnMpXG4gKiBAYXJndW1lbnQge0Jvb2xlYW59IGNvdW50ZXIgLSBTZXQgdG8gdHJ1ZSB0byB3YWxrIHRoZSBwbGFjZW1lbnRzIGNvdW50ZXJjbG9ja3dpc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gcGxhY2VtZW50cyBpbmNsdWRpbmcgdGhlaXIgdmFyaWF0aW9uc1xuICovXG5mdW5jdGlvbiBjbG9ja3dpc2UocGxhY2VtZW50KSB7XG4gIHZhciBjb3VudGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaW5kZXggPSB2YWxpZFBsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpO1xuICB2YXIgYXJyID0gdmFsaWRQbGFjZW1lbnRzLnNsaWNlKGluZGV4ICsgMSkuY29uY2F0KHZhbGlkUGxhY2VtZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICByZXR1cm4gY291bnRlciA/IGFyci5yZXZlcnNlKCkgOiBhcnI7XG59XG5cbnZhciBCRUhBVklPUlMgPSB7XG4gIEZMSVA6ICdmbGlwJyxcbiAgQ0xPQ0tXSVNFOiAnY2xvY2t3aXNlJyxcbiAgQ09VTlRFUkNMT0NLV0lTRTogJ2NvdW50ZXJjbG9ja3dpc2UnXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gZmxpcChkYXRhLCBvcHRpb25zKSB7XG4gIC8vIGlmIGBpbm5lcmAgbW9kaWZpZXIgaXMgZW5hYmxlZCwgd2UgY2FuJ3QgdXNlIHRoZSBgZmxpcGAgbW9kaWZpZXJcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaW5uZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQpO1xuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVsxXSB8fCAnJztcblxuICB2YXIgZmxpcE9yZGVyID0gW107XG5cbiAgc3dpdGNoIChvcHRpb25zLmJlaGF2aW9yKSB7XG4gICAgY2FzZSBCRUhBVklPUlMuRkxJUDpcbiAgICAgIGZsaXBPcmRlciA9IFtwbGFjZW1lbnQsIHBsYWNlbWVudE9wcG9zaXRlXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQkVIQVZJT1JTLkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ09VTlRFUkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZsaXBPcmRlciA9IG9wdGlvbnMuYmVoYXZpb3I7XG4gIH1cblxuICBmbGlwT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCwgaW5kZXgpIHtcbiAgICBpZiAocGxhY2VtZW50ICE9PSBzdGVwIHx8IGZsaXBPcmRlci5sZW5ndGggPT09IGluZGV4ICsgMSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGdldENsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG4gICAgdmFyIHJlZk9mZnNldHMgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuXG4gICAgLy8gdXNpbmcgZmxvb3IgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgbWF5IGNvbnRhaW4gZGVjaW1hbHMgd2UgYXJlIG5vdCBnb2luZyB0byBjb25zaWRlciBoZXJlXG4gICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICB2YXIgb3ZlcmxhcHNSZWYgPSBwbGFjZW1lbnQgPT09ICdsZWZ0JyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKHJlZk9mZnNldHMubGVmdCkgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIGZsb29yKHBvcHBlck9mZnNldHMubGVmdCkgPCBmbG9vcihyZWZPZmZzZXRzLnJpZ2h0KSB8fCBwbGFjZW1lbnQgPT09ICd0b3AnICYmIGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKHJlZk9mZnNldHMudG9wKSB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nICYmIGZsb29yKHBvcHBlck9mZnNldHMudG9wKSA8IGZsb29yKHJlZk9mZnNldHMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NMZWZ0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKGJvdW5kYXJpZXMubGVmdCk7XG4gICAgdmFyIG92ZXJmbG93c1JpZ2h0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5yaWdodCkgPiBmbG9vcihib3VuZGFyaWVzLnJpZ2h0KTtcbiAgICB2YXIgb3ZlcmZsb3dzVG9wID0gZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IoYm91bmRhcmllcy50b3ApO1xuICAgIHZhciBvdmVyZmxvd3NCb3R0b20gPSBmbG9vcihwb3BwZXJPZmZzZXRzLmJvdHRvbSkgPiBmbG9vcihib3VuZGFyaWVzLmJvdHRvbSk7XG5cbiAgICB2YXIgb3ZlcmZsb3dzQm91bmRhcmllcyA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIG92ZXJmbG93c0xlZnQgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIG92ZXJmbG93c1JpZ2h0IHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgb3ZlcmZsb3dzVG9wIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgb3ZlcmZsb3dzQm90dG9tO1xuXG4gICAgLy8gZmxpcCB0aGUgdmFyaWF0aW9uIGlmIHJlcXVpcmVkXG4gICAgdmFyIGlzVmVydGljYWwgPSBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IGlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnZW5kJyAmJiBvdmVyZmxvd3NSaWdodCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzVG9wIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzQm90dG9tKTtcblxuICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzIHx8IGZsaXBwZWRWYXJpYXRpb24pIHtcbiAgICAgIC8vIHRoaXMgYm9vbGVhbiB0byBkZXRlY3QgYW55IGZsaXAgbG9vcFxuICAgICAgZGF0YS5mbGlwcGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKG92ZXJsYXBzUmVmIHx8IG92ZXJmbG93c0JvdW5kYXJpZXMpIHtcbiAgICAgICAgcGxhY2VtZW50ID0gZmxpcE9yZGVyW2luZGV4ICsgMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAgIHZhcmlhdGlvbiA9IGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRhdGEucGxhY2VtZW50ID0gcGxhY2VtZW50ICsgKHZhcmlhdGlvbiA/ICctJyArIHZhcmlhdGlvbiA6ICcnKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRQb3BwZXJPZmZzZXRzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgcG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgdmFyIHJlZmVyZW5jZSA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdyaWdodCcgOiAnYm90dG9tJztcbiAgdmFyIG9wU2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICBpZiAocG9wcGVyW3NpZGVdIDwgZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pIC0gcG9wcGVyW21lYXN1cmVtZW50XTtcbiAgfVxuICBpZiAocG9wcGVyW29wU2lkZV0gPiBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW3NpZGVdKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdmFsdWUgKyB1bml0IGludG8gYSBweCB2YWx1ZSBudW1iZXJcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIHttb2RpZmllcnN+b2Zmc2V0fVxuICogQHByaXZhdGVcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBzdHIgLSBWYWx1ZSArIHVuaXQgc3RyaW5nXG4gKiBAYXJndW1lbnQge1N0cmluZ30gbWVhc3VyZW1lbnQgLSBgaGVpZ2h0YCBvciBgd2lkdGhgXG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEByZXR1cm5zIHtOdW1iZXJ8U3RyaW5nfVxuICogVmFsdWUgaW4gcGl4ZWxzLCBvciBvcmlnaW5hbCBzdHJpbmcgaWYgbm8gdmFsdWVzIHdlcmUgZXh0cmFjdGVkXG4gKi9cbmZ1bmN0aW9uIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cykge1xuICAvLyBzZXBhcmF0ZSB2YWx1ZSBmcm9tIHVuaXRcbiAgdmFyIHNwbGl0ID0gc3RyLm1hdGNoKC8oKD86XFwtfFxcKyk/XFxkKlxcLj9cXGQqKSguKikvKTtcbiAgdmFyIHZhbHVlID0gK3NwbGl0WzFdO1xuICB2YXIgdW5pdCA9IHNwbGl0WzJdO1xuXG4gIC8vIElmIGl0J3Mgbm90IGEgbnVtYmVyIGl0J3MgYW4gb3BlcmF0b3IsIEkgZ3Vlc3NcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAodW5pdC5pbmRleE9mKCclJykgPT09IDApIHtcbiAgICB2YXIgZWxlbWVudCA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJyVwJzpcbiAgICAgICAgZWxlbWVudCA9IHBvcHBlck9mZnNldHM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJSc6XG4gICAgICBjYXNlICclcic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBlbGVtZW50ID0gcmVmZXJlbmNlT2Zmc2V0cztcbiAgICB9XG5cbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3QoZWxlbWVudCk7XG4gICAgcmV0dXJuIHJlY3RbbWVhc3VyZW1lbnRdIC8gMTAwICogdmFsdWU7XG4gIH0gZWxzZSBpZiAodW5pdCA9PT0gJ3ZoJyB8fCB1bml0ID09PSAndncnKSB7XG4gICAgLy8gaWYgaXMgYSB2aCBvciB2dywgd2UgY2FsY3VsYXRlIHRoZSBzaXplIGJhc2VkIG9uIHRoZSB2aWV3cG9ydFxuICAgIHZhciBzaXplID0gdm9pZCAwO1xuICAgIGlmICh1bml0ID09PSAndmgnKSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpemUgLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBpcyBhbiBleHBsaWNpdCBwaXhlbCB1bml0LCB3ZSBnZXQgcmlkIG9mIHRoZSB1bml0IGFuZCBrZWVwIHRoZSB2YWx1ZVxuICAgIC8vIGlmIGlzIGFuIGltcGxpY2l0IHVuaXQsIGl0J3MgcHgsIGFuZCB3ZSByZXR1cm4ganVzdCB0aGUgdmFsdWVcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBgb2Zmc2V0YCBzdHJpbmcgdG8gZXh0cmFwb2xhdGUgYHhgIGFuZCBgeWAgbnVtZXJpYyBvZmZzZXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IG9mZnNldFxuICogQGFyZ3VtZW50IHtPYmplY3R9IHBvcHBlck9mZnNldHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSByZWZlcmVuY2VPZmZzZXRzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gYmFzZVBsYWNlbWVudFxuICogQHJldHVybnMge0FycmF5fSBhIHR3byBjZWxscyBhcnJheSB3aXRoIHggYW5kIHkgb2Zmc2V0cyBpbiBudW1iZXJzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT2Zmc2V0KG9mZnNldCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cywgYmFzZVBsYWNlbWVudCkge1xuICB2YXIgb2Zmc2V0cyA9IFswLCAwXTtcblxuICAvLyBVc2UgaGVpZ2h0IGlmIHBsYWNlbWVudCBpcyBsZWZ0IG9yIHJpZ2h0IGFuZCBpbmRleCBpcyAwIG90aGVyd2lzZSB1c2Ugd2lkdGhcbiAgLy8gaW4gdGhpcyB3YXkgdGhlIGZpcnN0IG9mZnNldCB3aWxsIHVzZSBhbiBheGlzIGFuZCB0aGUgc2Vjb25kIG9uZVxuICAvLyB3aWxsIHVzZSB0aGUgb3RoZXIgb25lXG4gIHZhciB1c2VIZWlnaHQgPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAvLyBTcGxpdCB0aGUgb2Zmc2V0IHN0cmluZyB0byBvYnRhaW4gYSBsaXN0IG9mIHZhbHVlcyBhbmQgb3BlcmFuZHNcbiAgLy8gVGhlIHJlZ2V4IGFkZHJlc3NlcyB2YWx1ZXMgd2l0aCB0aGUgcGx1cyBvciBtaW51cyBzaWduIGluIGZyb250ICgrMTAsIC0yMCwgZXRjKVxuICB2YXIgZnJhZ21lbnRzID0gb2Zmc2V0LnNwbGl0KC8oXFwrfFxcLSkvKS5tYXAoZnVuY3Rpb24gKGZyYWcpIHtcbiAgICByZXR1cm4gZnJhZy50cmltKCk7XG4gIH0pO1xuXG4gIC8vIERldGVjdCBpZiB0aGUgb2Zmc2V0IHN0cmluZyBjb250YWlucyBhIHBhaXIgb2YgdmFsdWVzIG9yIGEgc2luZ2xlIG9uZVxuICAvLyB0aGV5IGNvdWxkIGJlIHNlcGFyYXRlZCBieSBjb21tYSBvciBzcGFjZVxuICB2YXIgZGl2aWRlciA9IGZyYWdtZW50cy5pbmRleE9mKGZpbmQoZnJhZ21lbnRzLCBmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnNlYXJjaCgvLHxcXHMvKSAhPT0gLTE7XG4gIH0pKTtcblxuICBpZiAoZnJhZ21lbnRzW2RpdmlkZXJdICYmIGZyYWdtZW50c1tkaXZpZGVyXS5pbmRleE9mKCcsJykgPT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKCdPZmZzZXRzIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZShzKSBhcmUgZGVwcmVjYXRlZCwgdXNlIGEgY29tbWEgKCwpIGluc3RlYWQuJyk7XG4gIH1cblxuICAvLyBJZiBkaXZpZGVyIGlzIGZvdW5kLCB3ZSBkaXZpZGUgdGhlIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kcyB0byBkaXZpZGVcbiAgLy8gdGhlbSBieSBvZnNldCBYIGFuZCBZLlxuICB2YXIgc3BsaXRSZWdleCA9IC9cXHMqLFxccyp8XFxzKy87XG4gIHZhciBvcHMgPSBkaXZpZGVyICE9PSAtMSA/IFtmcmFnbWVudHMuc2xpY2UoMCwgZGl2aWRlcikuY29uY2F0KFtmcmFnbWVudHNbZGl2aWRlcl0uc3BsaXQoc3BsaXRSZWdleClbMF1dKSwgW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVsxXV0uY29uY2F0KGZyYWdtZW50cy5zbGljZShkaXZpZGVyICsgMSkpXSA6IFtmcmFnbWVudHNdO1xuXG4gIC8vIENvbnZlcnQgdGhlIHZhbHVlcyB3aXRoIHVuaXRzIHRvIGFic29sdXRlIHBpeGVscyB0byBhbGxvdyBvdXIgY29tcHV0YXRpb25zXG4gIG9wcyA9IG9wcy5tYXAoZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIC8vIE1vc3Qgb2YgdGhlIHVuaXRzIHJlbHkgb24gdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBwb3BwZXJcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSAoaW5kZXggPT09IDEgPyAhdXNlSGVpZ2h0IDogdXNlSGVpZ2h0KSA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgbWVyZ2VXaXRoUHJldmlvdXMgPSBmYWxzZTtcbiAgICByZXR1cm4gb3BcbiAgICAvLyBUaGlzIGFnZ3JlZ2F0ZXMgYW55IGArYCBvciBgLWAgc2lnbiB0aGF0IGFyZW4ndCBjb25zaWRlcmVkIG9wZXJhdG9yc1xuICAgIC8vIGUuZy46IDEwICsgKzUgPT4gWzEwLCArLCArNV1cbiAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICBpZiAoYVthLmxlbmd0aCAtIDFdID09PSAnJyAmJiBbJysnLCAnLSddLmluZGV4T2YoYikgIT09IC0xKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSA9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlV2l0aFByZXZpb3VzKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSArPSBiO1xuICAgICAgICBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdGhlIHN0cmluZyB2YWx1ZXMgaW50byBudW1iZXIgdmFsdWVzIChpbiBweClcbiAgICAubWFwKGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiB0b1ZhbHVlKHN0ciwgbWVhc3VyZW1lbnQsIHBvcHBlck9mZnNldHMsIHJlZmVyZW5jZU9mZnNldHMpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBMb29wIHRyb3VnaCB0aGUgb2Zmc2V0cyBhcnJheXMgYW5kIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbnNcbiAgb3BzLmZvckVhY2goZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIG9wLmZvckVhY2goZnVuY3Rpb24gKGZyYWcsIGluZGV4Mikge1xuICAgICAgaWYgKGlzTnVtZXJpYyhmcmFnKSkge1xuICAgICAgICBvZmZzZXRzW2luZGV4XSArPSBmcmFnICogKG9wW2luZGV4MiAtIDFdID09PSAnLScgPyAtMSA6IDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQGFyZ3VtZW50IHtOdW1iZXJ8U3RyaW5nfSBvcHRpb25zLm9mZnNldD0wXG4gKiBUaGUgb2Zmc2V0IHZhbHVlIGFzIGRlc2NyaWJlZCBpbiB0aGUgbW9kaWZpZXIgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gb2Zmc2V0KGRhdGEsIF9yZWYpIHtcbiAgdmFyIG9mZnNldCA9IF9yZWYub2Zmc2V0O1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQsXG4gICAgICBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIHZhciBvZmZzZXRzID0gdm9pZCAwO1xuICBpZiAoaXNOdW1lcmljKCtvZmZzZXQpKSB7XG4gICAgb2Zmc2V0cyA9IFsrb2Zmc2V0LCAwXTtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXRzID0gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXIsIHJlZmVyZW5jZSwgYmFzZVBsYWNlbWVudCk7XG4gIH1cblxuICBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0IC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3JpZ2h0Jykge1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzFdO1xuICB9IGVsc2UgaWYgKGJhc2VQbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgcG9wcGVyLmxlZnQgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIudG9wIC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1sxXTtcbiAgfVxuXG4gIGRhdGEucG9wcGVyID0gcG9wcGVyO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGJvdW5kYXJpZXNFbGVtZW50ID0gb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCB8fCBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciByZWZlcmVuY2UgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICAgIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICAgIHZhciBpc1ZlcnRpY2FsID0gWydib3R0b20nLCAndG9wJ10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG4gICAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICAgIHZhciBzaGlmdE9mZnNldHMgPSB7XG4gICAgICBzdGFydDogZGVmaW5lUHJvcGVydHkoe30sIHNpZGUsIHJlZmVyZW5jZVtzaWRlXSksXG4gICAgICBlbmQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0gKyByZWZlcmVuY2VbbWVhc3VyZW1lbnRdIC0gcG9wcGVyW21lYXN1cmVtZW50XSlcbiAgICB9O1xuXG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIHNoaWZ0T2Zmc2V0c1tzaGlmdHZhcmlhdGlvbl0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBoaWRlKGRhdGEpIHtcbiAgaWYgKCFpc01vZGlmaWVyUmVxdWlyZWQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsICdoaWRlJywgJ3ByZXZlbnRPdmVyZmxvdycpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgcmVmUmVjdCA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gIHZhciBib3VuZCA9IGZpbmQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSAncHJldmVudE92ZXJmbG93JztcbiAgfSkuYm91bmRhcmllcztcblxuICBpZiAocmVmUmVjdC5ib3R0b20gPCBib3VuZC50b3AgfHwgcmVmUmVjdC5sZWZ0ID4gYm91bmQucmlnaHQgfHwgcmVmUmVjdC50b3AgPiBib3VuZC5ib3R0b20gfHwgcmVmUmVjdC5yaWdodCA8IGJvdW5kLmxlZnQpIHtcbiAgICAvLyBBdm9pZCB1bm5lY2Vzc2FyeSBET00gYWNjZXNzIGlmIHZpc2liaWxpdHkgaGFzbid0IGNoYW5nZWRcbiAgICBpZiAoZGF0YS5oaWRlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSB0cnVlO1xuICAgIGRhdGEuYXR0cmlidXRlc1sneC1vdXQtb2YtYm91bmRhcmllcyddID0gJyc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGRhdGEuaGlkZSA9IGZhbHNlO1xuICAgIGRhdGEuYXR0cmlidXRlc1sneC1vdXQtb2YtYm91bmRhcmllcyddID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaW5uZXIoZGF0YSkge1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICB2YXIgcmVmZXJlbmNlID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucmVmZXJlbmNlKTtcbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbcGxhY2VtZW50XSAtIChzdWJ0cmFjdExlbmd0aCA/IHBvcHBlcltpc0hvcml6ID8gJ3dpZHRoJyA6ICdoZWlnaHQnXSA6IDApO1xuXG4gIGRhdGEucGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldENsaWVudFJlY3QocG9wcGVyKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBNb2RpZmllciBmdW5jdGlvbiwgZWFjaCBtb2RpZmllciBjYW4gaGF2ZSBhIGZ1bmN0aW9uIG9mIHRoaXMgdHlwZSBhc3NpZ25lZFxuICogdG8gaXRzIGBmbmAgcHJvcGVydHkuPGJyIC8+XG4gKiBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCB1cGRhdGUsIHRoaXMgbWVhbnMgdGhhdCB5b3UgbXVzdFxuICogbWFrZSBzdXJlIHRoZXkgYXJlIHBlcmZvcm1hbnQgZW5vdWdoIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuICpcbiAqIEBmdW5jdGlvbiBNb2RpZmllckZuXG4gKiBAYXJndW1lbnQge2RhdGFPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge2RhdGFPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuXG4vKipcbiAqIE1vZGlmaWVycyBhcmUgcGx1Z2lucyB1c2VkIHRvIGFsdGVyIHRoZSBiZWhhdmlvciBvZiB5b3VyIHBvcHBlcnMuPGJyIC8+XG4gKiBQb3BwZXIuanMgdXNlcyBhIHNldCBvZiA5IG1vZGlmaWVycyB0byBwcm92aWRlIGFsbCB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0aWVzXG4gKiBuZWVkZWQgYnkgdGhlIGxpYnJhcnkuXG4gKlxuICogVXN1YWxseSB5b3UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSB0aGUgYG9yZGVyYCwgYGZuYCBhbmQgYG9uTG9hZGAgcHJvcHMuXG4gKiBBbGwgdGhlIG90aGVyIHByb3BlcnRpZXMgYXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgYmUgdHdlYWtlZC5cbiAqIEBuYW1lc3BhY2UgbW9kaWZpZXJzXG4gKi9cbnZhciBtb2RpZmllcnMgPSB7XG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHNoaWZ0IHRoZSBwb3BwZXIgb24gdGhlIHN0YXJ0IG9yIGVuZCBvZiBpdHMgcmVmZXJlbmNlXG4gICAqIGVsZW1lbnQuPGJyIC8+XG4gICAqIEl0IHdpbGwgcmVhZCB0aGUgdmFyaWF0aW9uIG9mIHRoZSBgcGxhY2VtZW50YCBwcm9wZXJ0eS48YnIgLz5cbiAgICogSXQgY2FuIGJlIG9uZSBlaXRoZXIgYC1lbmRgIG9yIGAtc3RhcnRgLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgc2hpZnQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAxMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBzaGlmdFxuICB9LFxuXG4gIC8qKlxuICAgKiBUaGUgYG9mZnNldGAgbW9kaWZpZXIgY2FuIHNoaWZ0IHlvdXIgcG9wcGVyIG9uIGJvdGggaXRzIGF4aXMuXG4gICAqXG4gICAqIEl0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyB1bml0czpcbiAgICogLSBgcHhgIG9yIHVuaXRsZXNzLCBpbnRlcnByZXRlZCBhcyBwaXhlbHNcbiAgICogLSBgJWAgb3IgYCVyYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgKiAtIGAlcGAsIHBlcmNlbnRhZ2UgcmVsYXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogLSBgdndgLCBDU1Mgdmlld3BvcnQgd2lkdGggdW5pdFxuICAgKiAtIGB2aGAsIENTUyB2aWV3cG9ydCBoZWlnaHQgdW5pdFxuICAgKlxuICAgKiBGb3IgbGVuZ3RoIGlzIGludGVuZGVkIHRoZSBtYWluIGF4aXMgcmVsYXRpdmUgdG8gdGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyLjxiciAvPlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHBsYWNlbWVudCBpcyBgdG9wYCBvciBgYm90dG9tYCwgdGhlIGxlbmd0aCB3aWxsIGJlIHRoZVxuICAgKiBgd2lkdGhgLiBJbiBjYXNlIG9mIGBsZWZ0YCBvciBgcmlnaHRgLCBpdCB3aWxsIGJlIHRoZSBoZWlnaHQuXG4gICAqXG4gICAqIFlvdSBjYW4gcHJvdmlkZSBhIHNpbmdsZSB2YWx1ZSAoYXMgYE51bWJlcmAgb3IgYFN0cmluZ2ApLCBvciBhIHBhaXIgb2YgdmFsdWVzXG4gICAqIGFzIGBTdHJpbmdgIGRpdmlkZWQgYnkgYSBjb21tYSBvciBvbmUgKG9yIG1vcmUpIHdoaXRlIHNwYWNlcy48YnIgLz5cbiAgICogVGhlIGxhdHRlciBpcyBhIGRlcHJlY2F0ZWQgbWV0aG9kIGJlY2F1c2UgaXQgbGVhZHMgdG8gY29uZnVzaW9uIGFuZCB3aWxsIGJlXG4gICAqIHJlbW92ZWQgaW4gdjIuPGJyIC8+XG4gICAqIEFkZGl0aW9uYWxseSwgaXQgYWNjZXB0cyBhZGRpdGlvbnMgYW5kIHN1YnRyYWN0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudCB1bml0cy5cbiAgICogTm90ZSB0aGF0IG11bHRpcGxpY2F0aW9ucyBhbmQgZGl2aXNpb25zIGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIFZhbGlkIGV4YW1wbGVzIGFyZTpcbiAgICogYGBgXG4gICAqIDEwXG4gICAqICcxMCUnXG4gICAqICcxMCwgMTAnXG4gICAqICcxMCUsIDEwJ1xuICAgKiAnMTAgKyAxMCUnXG4gICAqICcxMCAtIDV2aCArIDMlJ1xuICAgKiAnLTEwcHggKyA1dmgsIDVweCAtIDYlJ1xuICAgKiBgYGBcbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIG9mZnNldDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj0yMDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDIwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IG9mZnNldCxcbiAgICAvKiogQHByb3Age051bWJlcnxTdHJpbmd9IG9mZnNldD0wXG4gICAgICogVGhlIG9mZnNldCB2YWx1ZSBhcyBkZXNjcmliZWQgaW4gdGhlIG1vZGlmaWVyIGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgb2Zmc2V0OiAwXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gcHJldmVudCB0aGUgcG9wcGVyIGZyb20gYmVpbmcgcG9zaXRpb25lZCBvdXRzaWRlIHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQW4gc2NlbmFyaW8gZXhpc3RzIHdoZXJlIHRoZSByZWZlcmVuY2UgaXRzZWxmIGlzIG5vdCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuPGJyIC8+XG4gICAqIFdlIGNhbiBzYXkgaXQgaGFzIFwiZXNjYXBlZCB0aGUgYm91bmRhcmllc1wiIOKAlCBvciBqdXN0IFwiZXNjYXBlZFwiLjxiciAvPlxuICAgKiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgcG9wcGVyIHNob3VsZCBlaXRoZXI6XG4gICAqXG4gICAqIC0gZGV0YWNoIGZyb20gdGhlIHJlZmVyZW5jZSBhbmQgcmVtYWluIFwidHJhcHBlZFwiIGluIHRoZSBib3VuZGFyaWVzLCBvclxuICAgKiAtIGlmIGl0IHNob3VsZCBpZ25vcmUgdGhlIGJvdW5kYXJ5IGFuZCBcImVzY2FwZSB3aXRoIGl0cyByZWZlcmVuY2VcIlxuICAgKlxuICAgKiBXaGVuIGBlc2NhcGVXaXRoUmVmZXJlbmNlYCBpcyBzZXQgdG9gdHJ1ZWAgYW5kIHJlZmVyZW5jZSBpcyBjb21wbGV0ZWx5XG4gICAqIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMsIHRoZSBwb3BwZXIgd2lsbCBvdmVyZmxvdyAob3IgY29tcGxldGVseSBsZWF2ZSlcbiAgICogdGhlIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gcmVtYWluIGF0dGFjaGVkIHRvIHRoZSBlZGdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAzMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gICAgLyoqXG4gICAgICogQHByb3Age0FycmF5fSBwcmlvcml0eT1bJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddXG4gICAgICogUG9wcGVyIHdpbGwgdHJ5IHRvIHByZXZlbnQgb3ZlcmZsb3cgZm9sbG93aW5nIHRoZXNlIHByaW9yaXRpZXMgYnkgZGVmYXVsdCxcbiAgICAgKiB0aGVuLCBpdCBjb3VsZCBvdmVyZmxvdyBvbiB0aGUgbGVmdCBhbmQgb24gdG9wIG9mIHRoZSBgYm91bmRhcmllc0VsZW1lbnRgXG4gICAgICovXG4gICAgcHJpb3JpdHk6IFsnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJ10sXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogQW1vdW50IG9mIHBpeGVsIHVzZWQgdG8gZGVmaW5lIGEgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3VuZGFyaWVzXG4gICAgICogYW5kIHRoZSBwb3BwZXIgdGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgaGFzIGFsd2F5cyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLCBjYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNob3RoZXJzXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXhwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gYXNzdXJlIGl0IHRvIHBvaW50IHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcywgeW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVjdGlvbiBhcmUgbmVlZGVkLlxuICAgKlxuICAgKiBJdCBoYXMgbm8gZWZmZWN0IGlmIG5vIGBhcnJvd0VsZW1lbnRgIGlzIHByb3ZpZGVkLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgYXJyb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA1MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcnJvdyxcbiAgICAvKiogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gZWxlbWVudD0nW3gtYXJyb3ddJyAtIFNlbGVjdG9yIG9yIG5vZGUgdXNlZCBhcyBhcnJvdyAqL1xuICAgIGVsZW1lbnQ6ICdbeC1hcnJvd10nXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gZmxpcCB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50IHdoZW4gaXQgc3RhcnRzIHRvIG92ZXJsYXAgaXRzXG4gICAqIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYHByZXZlbnRPdmVyZmxvd2AgbW9kaWZpZXIgYmVmb3JlIGl0IGluIG9yZGVyIHRvIHdvcmsuXG4gICAqXG4gICAqICoqTk9URToqKiB0aGlzIG1vZGlmaWVyIHdpbGwgaW50ZXJydXB0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZSBhbmQgd2lsbFxuICAgKiByZXN0YXJ0IGl0IGlmIGl0IGRldGVjdHMgdGhlIG5lZWQgdG8gZmxpcCB0aGUgcGxhY2VtZW50LlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgZmxpcDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj02MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDYwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGZsaXAsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xBcnJheX0gYmVoYXZpb3I9J2ZsaXAnXG4gICAgICogVGhlIGJlaGF2aW9yIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3BwZXIncyBwbGFjZW1lbnQuIEl0IGNhbiBiZSBvbmUgb2ZcbiAgICAgKiBgZmxpcGAsIGBjbG9ja3dpc2VgLCBgY291bnRlcmNsb2Nrd2lzZWAgb3IgYW4gYXJyYXkgd2l0aCBhIGxpc3Qgb2YgdmFsaWRcbiAgICAgKiBwbGFjZW1lbnRzICh3aXRoIG9wdGlvbmFsIHZhcmlhdGlvbnMpLlxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLFxuICAgICAqIHRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBrZWVwVG9nZXRoZXIgaXMgZW5hYmxlZClcbiAgICAgKi9cbiAgICBib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2UgdGhlIHBvcHBlciBmbG93IHRvd2FyZCB0aGUgaW5uZXIgb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB3aGVuIHRoaXMgbW9kaWZpZXIgaXMgZGlzYWJsZWQsIHRoZSBwb3BwZXIgd2lsbCBiZSBwbGFjZWQgb3V0c2lkZVxuICAgKiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBpbm5lcjoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj03MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDcwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9ZmFsc2UgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogaW5uZXJcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBoaWRlIHRoZSBwb3BwZXIgd2hlbiBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGVcbiAgICogcG9wcGVyIGJvdW5kYXJpZXMuIEl0IHdpbGwgc2V0IGEgYHgtb3V0LW9mLWJvdW5kYXJpZXNgIGF0dHJpYnV0ZSB3aGljaCBjYW5cbiAgICogYmUgdXNlZCB0byBoaWRlIHdpdGggYSBDU1Mgc2VsZWN0b3IgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgaXNcbiAgICogb3V0IG9mIGJvdW5kYXJpZXMuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgcHJldmVudE92ZXJmbG93YCBtb2RpZmllciBiZWZvcmUgaXQgaW4gb3JkZXIgdG8gd29yay5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGhpZGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9ODAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA4MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBoaWRlXG4gIH0sXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGNvbXB1dGVkIHN0eWxlcyB0byB0aGUgcG9wcGVyIGVsZW1lbnQuXG4gICAqXG4gICAqIEFsbCB0aGUgRE9NIG1hbmlwdWxhdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhpcyBtb2RpZmllci4gVGhpcyBpcyB1c2VmdWwgaW4gY2FzZVxuICAgKiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgUG9wcGVyLmpzIGluc2lkZSBhIGZyYW1ld29yayBvciB2aWV3IGxpYnJhcnkgYW5kIHlvdVxuICAgKiB3YW50IHRvIGRlbGVnYXRlIGFsbCB0aGUgRE9NIG1hbmlwdWxhdGlvbnMgdG8gaXQuXG4gICAqXG4gICAqIEp1c3QgZGlzYWJsZSB0aGlzIG1vZGlmaWVyIGFuZCBkZWZpbmUgeW91IG93biB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFwcGx5U3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9OTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA5MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcHBseVN0eWxlLFxuICAgIC8qKiBAcHJvcCB7RnVuY3Rpb259ICovXG4gICAgb25Mb2FkOiBhcHBseVN0eWxlT25Mb2FkLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzZCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHRydWVcbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgYGRhdGFPYmplY3RgIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgaW5mb3JtYXRpb25zIHVzZWQgYnkgUG9wcGVyLmpzXG4gKiB0aGlzIG9iamVjdCBnZXQgcGFzc2VkIHRvIG1vZGlmaWVycyBhbmQgdG8gdGhlIGBvbkNyZWF0ZWAgYW5kIGBvblVwZGF0ZWAgY2FsbGJhY2tzLlxuICogQG5hbWUgZGF0YU9iamVjdFxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuaW5zdGFuY2UgVGhlIFBvcHBlci5qcyBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEucGxhY2VtZW50IFBsYWNlbWVudCBhcHBsaWVkIHRvIHBvcHBlclxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEub3JpZ2luYWxQbGFjZW1lbnQgUGxhY2VtZW50IG9yaWdpbmFsbHkgZGVmaW5lZCBvbiBpbml0XG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuZmxpcHBlZCBUcnVlIGlmIHBvcHBlciBoYXMgYmVlbiBmbGlwcGVkIGJ5IGZsaXAgbW9kaWZpZXJcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGF0YS5oaWRlIFRydWUgaWYgdGhlIHJlZmVyZW5jZSBlbGVtZW50IGlzIG91dCBvZiBib3VuZGFyaWVzLCB1c2VmdWwgdG8ga25vdyB3aGVuIHRvIGhpZGUgdGhlIHBvcHBlci5cbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IGRhdGEuYXJyb3dFbGVtZW50IE5vZGUgdXNlZCBhcyBhcnJvdyBieSBhcnJvdyBtb2RpZmllclxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuc3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLCBpdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYm91bmRhcmllcyBPZmZzZXRzIG9mIHRoZSBwb3BwZXIgYm91bmRhcmllc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cyBUaGUgbWVhc3VyZW1lbnRzIG9mIHBvcHBlciwgcmVmZXJlbmNlIGFuZCBhcnJvdyBlbGVtZW50cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucG9wcGVyIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgYHRvcGAsIGBsZWZ0YCwgYHdpZHRoYCwgYGhlaWdodGAgdmFsdWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLmFycm9dIGB0b3BgIGFuZCBgbGVmdGAgb2Zmc2V0cywgb25seSBvbmUgb2YgdGhlbSB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIDBcbiAqL1xuXG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBwcm92aWRlZCB0byBQb3BwZXIuanMgY29uc3RydWN0b3IuPGJyIC8+XG4gKiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGVuIHVzaW5nIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgb2YgUG9wcGVyLmpzLjxiciAvPlxuICogVG8gb3ZlcnJpZGUgYW4gb3B0aW9uLCBzaW1wbHkgcGFzcyBhcyAzcmQgYXJndW1lbnQgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWVcbiAqIHN0cnVjdHVyZSBvZiB0aGlzIG9iamVjdCwgZXhhbXBsZTpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWYsIHBvcCwge1xuICogICBtb2RpZmllcnM6IHtcbiAqICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHN0YXRpY1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgREVGQVVMVFMgPSB7XG4gIC8qKlxuICAgKiBQb3BwZXIncyBwbGFjZW1lbnRcbiAgICogQHByb3Age1BvcHBlci5wbGFjZW1lbnRzfSBwbGFjZW1lbnQ9J2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkXG4gICAqIEBwcm9wIHtCb29sZWFufSBldmVudHNFbmFibGVkPXRydWVcbiAgICovXG4gIGV2ZW50c0VuYWJsZWQ6IHRydWUsXG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBwb3BwZXIgd2hlblxuICAgKiB5b3UgY2FsbCB0aGUgYGRlc3Ryb3lgIG1ldGhvZC5cbiAgICogQHByb3Age0Jvb2xlYW59IHJlbW92ZU9uRGVzdHJveT1mYWxzZVxuICAgKi9cbiAgcmVtb3ZlT25EZXN0cm95OiBmYWxzZSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyBjcmVhdGVkLjxiciAvPlxuICAgKiBCeSBkZWZhdWx0LCBpcyBzZXQgdG8gbm8tb3AuPGJyIC8+XG4gICAqIEFjY2VzcyBQb3BwZXIuanMgaW5zdGFuY2Ugd2l0aCBgZGF0YS5pbnN0YW5jZWAuXG4gICAqIEBwcm9wIHtvbkNyZWF0ZUNhbGxiYWNrfVxuICAgKi9cbiAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKCkge30sXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgdXBkYXRlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgY2FsbGVkXG4gICAqIG9uIHRoZSBpbml0aWFsaXphdGlvbi9jcmVhdGlvbiBvZiB0aGUgcG9wcGVyLCBidXQgb25seSBvbiBzdWJzZXF1ZW50XG4gICAqIHVwZGF0ZXMuPGJyIC8+XG4gICAqIEJ5IGRlZmF1bHQsIGlzIHNldCB0byBuby1vcC48YnIgLz5cbiAgICogQWNjZXNzIFBvcHBlci5qcyBpbnN0YW5jZSB3aXRoIGBkYXRhLmluc3RhbmNlYC5cbiAgICogQHByb3Age29uVXBkYXRlQ2FsbGJhY2t9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanNcbiAgICogQHByb3Age21vZGlmaWVyc31cbiAgICovXG4gIG1vZGlmaWVyczogbW9kaWZpZXJzXG59O1xuXG4vKipcbiAqIEBjYWxsYmFjayBvbkNyZWF0ZUNhbGxiYWNrXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBvblVwZGF0ZUNhbGxiYWNrXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vLyBVdGlsc1xuLy8gTWV0aG9kc1xudmFyIFBvcHBlciA9XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBjbGFzcyBQb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8cmVmZXJlbmNlT2JqZWN0fSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIGVsZW1lbnQgdXNlZCB0byBwb3NpdGlvbiB0aGUgcG9wcGVyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXIgLSBUaGUgSFRNTCBlbGVtZW50IHVzZWQgYXMgcG9wcGVyLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBZb3VyIGN1c3RvbSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4gW0RFRkFVTFRTXSgjZGVmYXVsdHMpXG4gKiBAcmV0dXJuIHtPYmplY3R9IGluc3RhbmNlIC0gVGhlIGdlbmVyYXRlZCBQb3BwZXIuanMgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICBjbGFzc0NhbGxDaGVjayh0aGlzLCBQb3BwZXIpO1xuICB0aGlzLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgdGhpcy5kZXN0cm95ID0gZGVzdHJveTtcbiAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycyA9IGVuYWJsZUV2ZW50TGlzdGVuZXJzO1xuICB0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycyA9IGRpc2FibGVFdmVudExpc3RlbmVycztcblxuICB0aGlzLnNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudXBkYXRlKTtcbiAgfTtcblxuICAvLyBtYWtlIHVwZGF0ZSgpIGRlYm91bmNlZCwgc28gdGhhdCBpdCBvbmx5IHJ1bnMgYXQgbW9zdCBvbmNlLXBlci10aWNrXG4gIHRoaXMudXBkYXRlID0gZGVib3VuY2UodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgLy8gd2l0aCB7fSB3ZSBjcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdGhlIG9wdGlvbnMgaW5zaWRlIGl0XG4gIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMsIG9wdGlvbnMpO1xuXG4gIC8vIGluaXQgc3RhdGVcbiAgdGhpcy5zdGF0ZSA9IHtcbiAgICBpc0Rlc3Ryb3llZDogZmFsc2UsXG4gICAgaXNDcmVhdGVkOiBmYWxzZSxcbiAgICBzY3JvbGxQYXJlbnRzOiBbXVxuICB9O1xuXG4gIC8vIGdldCByZWZlcmVuY2UgYW5kIHBvcHBlciBlbGVtZW50cyAoYWxsb3cgalF1ZXJ5IHdyYXBwZXJzKVxuICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZS5qcXVlcnkgPyByZWZlcmVuY2VbMF0gOiByZWZlcmVuY2U7XG4gIHRoaXMucG9wcGVyID0gcG9wcGVyLmpxdWVyeSA/IHBvcHBlclswXSA6IHBvcHBlcjtcblxuICAvLyBtYWtlIHN1cmUgdG8gYXBwbHkgdGhlIHBvcHBlciBwb3NpdGlvbiBiZWZvcmUgYW55IGNvbXB1dGF0aW9uXG4gIHNldFN0eWxlcyh0aGlzLnBvcHBlciwgeyBwb3NpdGlvbjogJ2Fic29sdXRlJyB9KTtcblxuICAvLyByZWZhY3RvcmluZyBtb2RpZmllcnMnIGxpc3QgKE9iamVjdCA9PiBBcnJheSlcbiAgdGhpcy5tb2RpZmllcnMgPSBPYmplY3Qua2V5cyhQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgbmFtZTogbmFtZVxuICAgIH0sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnNbbmFtZV0pO1xuICB9KTtcblxuICAvLyBhc3NpZ24gZGVmYXVsdCB2YWx1ZXMgdG8gbW9kaWZpZXJzLCBtYWtpbmcgc3VyZSB0byBvdmVycmlkZSB0aGVtIHdpdGhcbiAgLy8gdGhlIG9uZXMgZGVmaW5lZCBieSB1c2VyXG4gIHRoaXMubW9kaWZpZXJzID0gdGhpcy5tb2RpZmllcnMubWFwKGZ1bmN0aW9uIChkZWZhdWx0Q29uZmlnKSB7XG4gICAgdmFyIHVzZXJDb25maWcgPSBvcHRpb25zLm1vZGlmaWVycyAmJiBvcHRpb25zLm1vZGlmaWVyc1tkZWZhdWx0Q29uZmlnLm5hbWVdIHx8IHt9O1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdENvbmZpZywgdXNlckNvbmZpZyk7XG4gIH0pO1xuXG4gIC8vIGFkZCBjdXN0b20gbW9kaWZpZXJzIHRvIHRoZSBtb2RpZmllcnMgbGlzdFxuICBpZiAob3B0aW9ucy5tb2RpZmllcnMpIHtcbiAgICB0aGlzLm9wdGlvbnMubW9kaWZpZXJzID0gX2V4dGVuZHMoe30sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnMsIG9wdGlvbnMubW9kaWZpZXJzKTtcbiAgICBPYmplY3Qua2V5cyhvcHRpb25zLm1vZGlmaWVycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgLy8gdGFrZSBpbiBhY2NvdW50IG9ubHkgY3VzdG9tIG1vZGlmaWVyc1xuICAgICAgaWYgKFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbW9kaWZpZXIgPSBvcHRpb25zLm1vZGlmaWVyc1tuYW1lXTtcbiAgICAgICAgbW9kaWZpZXIubmFtZSA9IG5hbWU7XG4gICAgICAgIF90aGlzLm1vZGlmaWVycy5wdXNoKG1vZGlmaWVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNvcnQgdGhlIG1vZGlmaWVycyBieSBvcmRlclxuICB0aGlzLm1vZGlmaWVycyA9IHRoaXMubW9kaWZpZXJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gIH0pO1xuXG4gIC8vIG1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgd2hlbiBQb3BwZXIuanMgZ2V0IGluaXRlZFxuICAvLyBzdWNoIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgb2YgaXRzIG1vZGlmaWVyXG4gIC8vIHRoZXkgY291bGQgYWRkIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZWlyIG9wdGlvbnMgY29uZmlndXJhdGlvblxuICAvLyBCRSBBV0FSRTogZG9uJ3QgYWRkIG9wdGlvbnMgdG8gYG9wdGlvbnMubW9kaWZpZXJzLm5hbWVgIGJ1dCB0byBgbW9kaWZpZXJPcHRpb25zYCFcbiAgdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXJPcHRpb25zKSB7XG4gICAgaWYgKG1vZGlmaWVyT3B0aW9ucy5lbmFibGVkICYmIGlzRnVuY3Rpb24obW9kaWZpZXJPcHRpb25zLm9uTG9hZCkpIHtcbiAgICAgIG1vZGlmaWVyT3B0aW9ucy5vbkxvYWQoX3RoaXMucmVmZXJlbmNlLCBfdGhpcy5wb3BwZXIsIF90aGlzLm9wdGlvbnMsIG1vZGlmaWVyT3B0aW9ucywgX3RoaXMuc3RhdGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZmlyZSB0aGUgZmlyc3QgdXBkYXRlIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIgaW4gdGhlIHJpZ2h0IHBsYWNlXG4gIHRoaXMudXBkYXRlKCk7XG5cbiAgdmFyIGV2ZW50c0VuYWJsZWQgPSB0aGlzLm9wdGlvbnMuZXZlbnRzRW5hYmxlZDtcbiAgaWYgKGV2ZW50c0VuYWJsZWQpIHtcbiAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkID0gZXZlbnRzRW5hYmxlZDtcbn07XG5cbi8qKlxuICogVGhlIGByZWZlcmVuY2VPYmplY3RgIGlzIGFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIGFuIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggUG9wcGVyLmpzXG4gKiBhbmQgbGV0cyB5b3UgdXNlIGl0IGFzIHJlcGxhY2VtZW50IG9mIGEgcmVhbCBET00gbm9kZS48YnIgLz5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIHBvc2l0aW9uIGEgcG9wcGVyIHJlbGF0aXZlbHkgdG8gYSBzZXQgb2YgY29vcmRpbmF0ZXNcbiAqIGluIGNhc2UgeW91IGRvbid0IGhhdmUgYSBET00gbm9kZSB0byB1c2UgYXMgcmVmZXJlbmNlLlxuICpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWZlcmVuY2VPYmplY3QsIHBvcHBlck5vZGUpO1xuICogYGBgXG4gKlxuICogTkI6IFRoaXMgZmVhdHVyZSBpc24ndCBzdXBwb3J0ZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTBcbiAqIEBuYW1lIHJlZmVyZW5jZU9iamVjdFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZGF0YS5nZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRhLmNsaWVudFdpZHRoXG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50SGVpZ2h0XG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgdmlydHVhbCByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuXG5cblBvcHBlci5VdGlscyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCkuUG9wcGVyVXRpbHM7XG5Qb3BwZXIucGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5Qb3BwZXIuRGVmYXVsdHMgPSBERUZBVUxUUztcblxuZXhwb3J0IGRlZmF1bHQgUG9wcGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9wcGVyLmpzLm1hcFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9wb3BwZXIuanMvZGlzdC9lc20vcG9wcGVyLmpzIiwiaW1wb3J0IFBvcHBlciBmcm9tICdwb3BwZXIuanMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQgeyp9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICB2YXIgZ2V0VHlwZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cblxuXG5cblxuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgY29udGFpbmVyOiBmYWxzZSxcbiAgZGVsYXk6IDAsXG4gIGh0bWw6IGZhbHNlLFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICB0aXRsZTogJycsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLFxuICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxuICBvZmZzZXQ6IDBcbn07XG5cbnZhciBUb29sdGlwID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFRvb2x0aXAuanMgaW5zdGFuY2VcbiAgICogQGNsYXNzIFRvb2x0aXBcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSBlbGVtZW50IHVzZWQgdG8gcG9zaXRpb24gdGhlIHRvb2x0aXBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMucGxhY2VtZW50PWJvdHRvbVxuICAgKiAgICAgIFBsYWNlbWVudCBvZiB0aGUgcG9wcGVyIGFjY2VwdGVkIHZhbHVlczogYHRvcCgtc3RhcnQsIC1lbmQpLCByaWdodCgtc3RhcnQsIC1lbmQpLCBib3R0b20oLXN0YXJ0LCAtZW5kKSxcbiAgICogICAgICBsZWZ0KC1zdGFydCwgLWVuZClgXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSBET00gbm9kZSB1c2VkIGFzIHJlZmVyZW5jZSBvZiB0aGUgdG9vbHRpcCAoaXQgY2FuIGJlIGEgalF1ZXJ5IGVsZW1lbnQpLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudHxTdHJpbmd8ZmFsc2V9IG9wdGlvbnMuY29udGFpbmVyPWZhbHNlIC0gQXBwZW5kIHRoZSB0b29sdGlwIHRvIGEgc3BlY2lmaWMgZWxlbWVudC5cbiAgICogQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBvcHRpb25zLmRlbGF5PTBcbiAgICogICAgICBEZWxheSBzaG93aW5nIGFuZCBoaWRpbmcgdGhlIHRvb2x0aXAgKG1zKSAtIGRvZXMgbm90IGFwcGx5IHRvIG1hbnVhbCB0cmlnZ2VyIHR5cGUuXG4gICAqICAgICAgSWYgYSBudW1iZXIgaXMgc3VwcGxpZWQsIGRlbGF5IGlzIGFwcGxpZWQgdG8gYm90aCBoaWRlL3Nob3cuXG4gICAqICAgICAgT2JqZWN0IHN0cnVjdHVyZSBpczogYHsgc2hvdzogNTAwLCBoaWRlOiAxMDAgfWBcbiAgICogQHBhcmFtIHtCb29sZWFufSBvcHRpb25zLmh0bWw9ZmFsc2UgLSBJbnNlcnQgSFRNTCBpbnRvIHRoZSB0b29sdGlwLiBJZiBmYWxzZSwgdGhlIGNvbnRlbnQgd2lsbCBpbnNlcnRlZCB3aXRoIGBpbm5lclRleHRgLlxuICAgKiBAcGFyYW0ge1N0cmluZ3xQbGFjZW1lbnRGdW5jdGlvbn0gb3B0aW9ucy5wbGFjZW1lbnQ9J3RvcCcgLSBPbmUgb2YgdGhlIGFsbG93ZWQgcGxhY2VtZW50cywgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgb25lIG9mIHRoZW0uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnRlbXBsYXRlPSc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj48ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PjwvZGl2PidcbiAgICogICAgICBCYXNlIEhUTUwgdG8gdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSB0b29sdGlwLlxuICAgKiAgICAgIFRoZSB0b29sdGlwJ3MgYHRpdGxlYCB3aWxsIGJlIGluamVjdGVkIGludG8gdGhlIGAudG9vbHRpcC1pbm5lcmAgb3IgYC50b29sdGlwX19pbm5lcmAuXG4gICAqICAgICAgYC50b29sdGlwLWFycm93YCBvciBgLnRvb2x0aXBfX2Fycm93YCB3aWxsIGJlY29tZSB0aGUgdG9vbHRpcCdzIGFycm93LlxuICAgKiAgICAgIFRoZSBvdXRlcm1vc3Qgd3JhcHBlciBlbGVtZW50IHNob3VsZCBoYXZlIHRoZSBgLnRvb2x0aXBgIGNsYXNzLlxuICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudHxUaXRsZUZ1bmN0aW9ufSBvcHRpb25zLnRpdGxlPScnIC0gRGVmYXVsdCB0aXRsZSB2YWx1ZSBpZiBgdGl0bGVgIGF0dHJpYnV0ZSBpc24ndCBwcmVzZW50LlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy50cmlnZ2VyPSdob3ZlciBmb2N1cydcbiAgICogICAgICBIb3cgdG9vbHRpcCBpcyB0cmlnZ2VyZWQgLSBjbGljayB8IGhvdmVyIHwgZm9jdXMgfCBtYW51YWwuXG4gICAqICAgICAgWW91IG1heSBwYXNzIG11bHRpcGxlIHRyaWdnZXJzOyBzZXBhcmF0ZSB0aGVtIHdpdGggYSBzcGFjZS4gYG1hbnVhbGAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIHRyaWdnZXIuXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnRcbiAgICogICAgICBUaGUgZWxlbWVudCB1c2VkIGFzIGJvdW5kYXJpZXMgZm9yIHRoZSB0b29sdGlwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBQb3BwZXIuanMnXG4gICAqICAgICAgW2JvdW5kYXJpZXNFbGVtZW50IGRvY3NdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9wb3BwZXItZG9jdW1lbnRhdGlvbi5odG1sKVxuICAgKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTAgLSBPZmZzZXQgb2YgdGhlIHRvb2x0aXAgcmVsYXRpdmUgdG8gaXRzIHJlZmVyZW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gUG9wcGVyLmpzJ1xuICAgKiAgICAgIFtvZmZzZXQgZG9jc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL3BvcHBlci1kb2N1bWVudGF0aW9uLmh0bWwpXG4gICAqIEByZXR1cm4ge09iamVjdH0gaW5zdGFuY2UgLSBUaGUgZ2VuZXJhdGVkIHRvb2x0aXAgaW5zdGFuY2VcbiAgICovXG4gIGZ1bmN0aW9uIFRvb2x0aXAocmVmZXJlbmNlLCBvcHRpb25zKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9vbHRpcCk7XG5cbiAgICBfaW5pdGlhbGlzZVByb3BzLmNhbGwodGhpcyk7XG5cbiAgICAvLyBhcHBseSB1c2VyIG9wdGlvbnMgb3ZlciBkZWZhdWx0IG9uZXNcbiAgICBvcHRpb25zID0gX2V4dGVuZHMoe30sIERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XG5cbiAgICByZWZlcmVuY2UuanF1ZXJ5ICYmIChyZWZlcmVuY2UgPSByZWZlcmVuY2VbMF0pO1xuXG4gICAgLy8gY2FjaGUgcmVmZXJlbmNlIGFuZCBvcHRpb25zXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIGdldCBldmVudHMgbGlzdFxuICAgIHZhciBldmVudHMgPSB0eXBlb2Ygb3B0aW9ucy50cmlnZ2VyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudHJpZ2dlci5zcGxpdCgnICcpLmZpbHRlcihmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgcmV0dXJuIFsnY2xpY2snLCAnaG92ZXInLCAnZm9jdXMnXS5pbmRleE9mKHRyaWdnZXIpICE9PSAtMTtcbiAgICB9KSA6IFtdO1xuXG4gICAgLy8gc2V0IGluaXRpYWwgc3RhdGVcbiAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcblxuICAgIC8vIHNldCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9zZXRFdmVudExpc3RlbmVycyhyZWZlcmVuY2UsIGV2ZW50cywgb3B0aW9ucyk7XG4gIH1cblxuICAvL1xuICAvLyBQdWJsaWMgbWV0aG9kc1xuICAvL1xuXG4gIC8qKlxuICAgKiBSZXZlYWxzIGFuIGVsZW1lbnQncyB0b29sdGlwLiBUaGlzIGlzIGNvbnNpZGVyZWQgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcgb2YgdGhlIHRvb2x0aXAuXG4gICAqIFRvb2x0aXBzIHdpdGggemVyby1sZW5ndGggdGl0bGVzIGFyZSBuZXZlciBkaXNwbGF5ZWQuXG4gICAqIEBtZW1iZXJvZiBUb29sdGlwXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIEhpZGVzIGFuIGVsZW1lbnTigJlzIHRvb2x0aXAuIFRoaXMgaXMgY29uc2lkZXJlZCBhIOKAnG1hbnVhbOKAnSB0cmlnZ2VyaW5nIG9mIHRoZSB0b29sdGlwLlxuICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBIaWRlcyBhbmQgZGVzdHJveXMgYW4gZWxlbWVudOKAmXMgdG9vbHRpcC5cbiAgICogQG1lbWJlcm9mIFRvb2x0aXBcbiAgICovXG5cblxuICAvKipcbiAgICogVG9nZ2xlcyBhbiBlbGVtZW504oCZcyB0b29sdGlwLiBUaGlzIGlzIGNvbnNpZGVyZWQgYSDigJxtYW51YWzigJ0gdHJpZ2dlcmluZyBvZiB0aGUgdG9vbHRpcC5cbiAgICogQG1lbWJlcm9mIFRvb2x0aXBcbiAgICovXG5cblxuICAvL1xuICAvLyBEZWZhdWx0c1xuICAvL1xuXG5cbiAgLy9cbiAgLy8gUHJpdmF0ZSBtZXRob2RzXG4gIC8vXG5cbiAgY3JlYXRlQ2xhc3MoVG9vbHRpcCwgW3tcbiAgICBrZXk6ICdfY3JlYXRlJyxcblxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB0b29sdGlwIG5vZGVcbiAgICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlXG4gICAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8VGl0bGVGdW5jdGlvbn0gdGl0bGVcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFsbG93SHRtbFxuICAgICAqIEByZXR1cm4ge0hUTUxlbGVtZW50fSB0b29sdGlwTm9kZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlKHJlZmVyZW5jZSwgdGVtcGxhdGUsIHRpdGxlLCBhbGxvd0h0bWwpIHtcbiAgICAgIC8vIGNyZWF0ZSB0b29sdGlwIGVsZW1lbnRcbiAgICAgIHZhciB0b29sdGlwR2VuZXJhdG9yID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdG9vbHRpcEdlbmVyYXRvci5pbm5lckhUTUwgPSB0ZW1wbGF0ZTtcbiAgICAgIHZhciB0b29sdGlwTm9kZSA9IHRvb2x0aXBHZW5lcmF0b3IuY2hpbGROb2Rlc1swXTtcblxuICAgICAgLy8gYWRkIHVuaXF1ZSBJRCB0byBvdXIgdG9vbHRpcCAobmVlZGVkIGZvciBhY2Nlc3NpYmlsaXR5IHJlYXNvbnMpXG4gICAgICB0b29sdGlwTm9kZS5pZCA9ICd0b29sdGlwXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgMTApO1xuXG4gICAgICAvLyBzZXQgaW5pdGlhbCBgYXJpYS1oaWRkZW5gIHN0YXRlIHRvIGBmYWxzZWAgKGl0J3MgdmlzaWJsZSEpXG4gICAgICB0b29sdGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG5cbiAgICAgIC8vIGFkZCB0aXRsZSB0byB0b29sdGlwXG4gICAgICB2YXIgdGl0bGVOb2RlID0gdG9vbHRpcEdlbmVyYXRvci5xdWVyeVNlbGVjdG9yKHRoaXMuaW5uZXJTZWxlY3Rvcik7XG4gICAgICBpZiAodGl0bGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgLy8gaWYgdGl0bGUgaXMgYSBub2RlLCBhcHBlbmQgaXQgb25seSBpZiBhbGxvd0h0bWwgaXMgdHJ1ZVxuICAgICAgICBhbGxvd0h0bWwgJiYgdGl0bGVOb2RlLmFwcGVuZENoaWxkKHRpdGxlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aXRsZSkpIHtcbiAgICAgICAgLy8gaWYgdGl0bGUgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBhbmQgc2V0IGlubmVyVGV4dCBvciBpbm5lckh0bWwgZGVwZW5kaW5nIGJ5IGBhbGxvd0h0bWxgIHZhbHVlXG4gICAgICAgIHZhciB0aXRsZVRleHQgPSB0aXRsZS5jYWxsKHJlZmVyZW5jZSk7XG4gICAgICAgIGFsbG93SHRtbCA/IHRpdGxlTm9kZS5pbm5lckhUTUwgPSB0aXRsZVRleHQgOiB0aXRsZU5vZGUuaW5uZXJUZXh0ID0gdGl0bGVUZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgaXQncyBqdXN0IGEgc2ltcGxlIHRleHQsIHNldCBpbm5lclRleHQgb3IgaW5uZXJIdG1sIGRlcGVuZGluZyBieSBgYWxsb3dIdG1sYCB2YWx1ZVxuICAgICAgICBhbGxvd0h0bWwgPyB0aXRsZU5vZGUuaW5uZXJIVE1MID0gdGl0bGUgOiB0aXRsZU5vZGUuaW5uZXJUZXh0ID0gdGl0bGU7XG4gICAgICB9XG5cbiAgICAgIC8vIHJldHVybiB0aGUgZ2VuZXJhdGVkIHRvb2x0aXAgbm9kZVxuICAgICAgcmV0dXJuIHRvb2x0aXBOb2RlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19zaG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3Nob3cocmVmZXJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAvLyBkb24ndCBzaG93IGlmIGl0J3MgYWxyZWFkeSB2aXNpYmxlXG4gICAgICBpZiAodGhpcy5faXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcblxuICAgICAgLy8gaWYgdGhlIHRvb2x0aXBOb2RlIGFscmVhZHkgZXhpc3RzLCBqdXN0IHNob3cgaXRcbiAgICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xuICAgICAgICB0aGlzLl90b29sdGlwTm9kZS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgICAgdGhpcy5wb3BwZXJJbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aXRsZVxuICAgICAgdmFyIHRpdGxlID0gcmVmZXJlbmNlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSB8fCBvcHRpb25zLnRpdGxlO1xuXG4gICAgICAvLyBkb24ndCBzaG93IHRvb2x0aXAgaWYgbm8gdGl0bGUgaXMgZGVmaW5lZFxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIHRvb2x0aXAgbm9kZVxuICAgICAgdmFyIHRvb2x0aXBOb2RlID0gdGhpcy5fY3JlYXRlKHJlZmVyZW5jZSwgb3B0aW9ucy50ZW1wbGF0ZSwgdGl0bGUsIG9wdGlvbnMuaHRtbCk7XG5cbiAgICAgIC8vIEFkZCBgYXJpYS1kZXNjcmliZWRieWAgdG8gb3VyIHJlZmVyZW5jZSBlbGVtZW50IGZvciBhY2Nlc3NpYmlsaXR5IHJlYXNvbnNcbiAgICAgIHRvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRvb2x0aXBOb2RlLmlkKTtcblxuICAgICAgLy8gYXBwZW5kIHRvb2x0aXAgdG8gY29udGFpbmVyXG4gICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fZmluZENvbnRhaW5lcihvcHRpb25zLmNvbnRhaW5lciwgcmVmZXJlbmNlKTtcblxuICAgICAgdGhpcy5fYXBwZW5kKHRvb2x0aXBOb2RlLCBjb250YWluZXIpO1xuXG4gICAgICB2YXIgcG9wcGVyT3B0aW9ucyA9IHtcbiAgICAgICAgcGxhY2VtZW50OiBvcHRpb25zLnBsYWNlbWVudCxcbiAgICAgICAgYXJyb3dFbGVtZW50OiB0aGlzLmFycm93U2VsZWN0b3JcbiAgICAgIH07XG5cbiAgICAgIGlmIChvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50KSB7XG4gICAgICAgIHBvcHBlck9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcHBlckluc3RhbmNlID0gbmV3IFBvcHBlcihyZWZlcmVuY2UsIHRvb2x0aXBOb2RlLCBwb3BwZXJPcHRpb25zKTtcblxuICAgICAgdGhpcy5fdG9vbHRpcE5vZGUgPSB0b29sdGlwTm9kZTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2hpZGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGlkZSgpIC8qcmVmZXJlbmNlLCBvcHRpb25zKi97XG4gICAgICAvLyBkb24ndCBoaWRlIGlmIGl0J3MgYWxyZWFkeSBoaWRkZW5cbiAgICAgIGlmICghdGhpcy5faXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcblxuICAgICAgLy8gaGlkZSB0b29sdGlwTm9kZVxuICAgICAgdGhpcy5fdG9vbHRpcE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuX3Rvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZGlzcG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kaXNwb3NlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX3Rvb2x0aXBOb2RlKSB7XG4gICAgICAgIHRoaXMuX2hpZGUoKTtcblxuICAgICAgICAvLyBkZXN0cm95IGluc3RhbmNlXG4gICAgICAgIHRoaXMucG9wcGVySW5zdGFuY2UuZGVzdHJveSgpO1xuXG4gICAgICAgIC8vIHJlbW92ZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgZnVuYyA9IF9yZWYuZnVuYyxcbiAgICAgICAgICAgICAgZXZlbnQgPSBfcmVmLmV2ZW50O1xuXG4gICAgICAgICAgX3RoaXMuX3Rvb2x0aXBOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cbiAgICAgICAgLy8gZGVzdHJveSB0b29sdGlwTm9kZVxuICAgICAgICB0aGlzLl90b29sdGlwTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3Rvb2x0aXBOb2RlKTtcbiAgICAgICAgdGhpcy5fdG9vbHRpcE5vZGUgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2ZpbmRDb250YWluZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZmluZENvbnRhaW5lcihjb250YWluZXIsIHJlZmVyZW5jZSkge1xuICAgICAgLy8gaWYgY29udGFpbmVyIGlzIGEgcXVlcnksIGdldCB0aGUgcmVsYXRpdmUgZWxlbWVudFxuICAgICAgaWYgKHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcik7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lciA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gaWYgY29udGFpbmVyIGlzIGBmYWxzZWAsIHNldCBpdCB0byByZWZlcmVuY2UgcGFyZW50XG4gICAgICAgIGNvbnRhaW5lciA9IHJlZmVyZW5jZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmQgdG9vbHRpcCB0byBjb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdG9vbHRpcFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfGZhbHNlfSBjb250YWluZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2FwcGVuZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hcHBlbmQodG9vbHRpcE5vZGUsIGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2x0aXBOb2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfc2V0RXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0RXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBldmVudHMsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgZGlyZWN0RXZlbnRzID0gW107XG4gICAgICB2YXIgb3Bwb3NpdGVFdmVudHMgPSBbXTtcblxuICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgICBjYXNlICdob3Zlcic6XG4gICAgICAgICAgICBkaXJlY3RFdmVudHMucHVzaCgnbW91c2VlbnRlcicpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnbW91c2VsZWF2ZScpO1xuICAgICAgICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgICAgICAgIGRpcmVjdEV2ZW50cy5wdXNoKCdmb2N1cycpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnYmx1cicpO1xuICAgICAgICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgICAgICAgIGRpcmVjdEV2ZW50cy5wdXNoKCdjbGljaycpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnY2xpY2snKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNjaGVkdWxlIHNob3cgdG9vbHRpcFxuICAgICAgZGlyZWN0RXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gZnVuYyhldnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMyLl9pc09wZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXZ0LnVzZWRCeVRvb2x0aXAgPSB0cnVlO1xuICAgICAgICAgIF90aGlzMi5fc2NoZWR1bGVTaG93KHJlZmVyZW5jZSwgb3B0aW9ucy5kZWxheSwgb3B0aW9ucywgZXZ0KTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMyLl9ldmVudHMucHVzaCh7IGV2ZW50OiBldmVudCwgZnVuYzogZnVuYyB9KTtcbiAgICAgICAgcmVmZXJlbmNlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHNjaGVkdWxlIGhpZGUgdG9vbHRpcFxuICAgICAgb3Bwb3NpdGVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKGV2dCkge1xuICAgICAgICAgIGlmIChldnQudXNlZEJ5VG9vbHRpcCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpczIuX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIG9wdGlvbnMuZGVsYXksIG9wdGlvbnMsIGV2dCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzMi5fZXZlbnRzLnB1c2goeyBldmVudDogZXZlbnQsIGZ1bmM6IGZ1bmMgfSk7XG4gICAgICAgIHJlZmVyZW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19zY2hlZHVsZVNob3cnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc2NoZWR1bGVTaG93KHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMgLyosIGV2dCAqLykge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIC8vIGRlZmF1bHRzIHRvIDBcbiAgICAgIHZhciBjb21wdXRlZERlbGF5ID0gZGVsYXkgJiYgZGVsYXkuc2hvdyB8fCBkZWxheSB8fCAwO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLl9zaG93KHJlZmVyZW5jZSwgb3B0aW9ucyk7XG4gICAgICB9LCBjb21wdXRlZERlbGF5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfc2NoZWR1bGVIaWRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIGRlbGF5LCBvcHRpb25zLCBldnQpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAvLyBkZWZhdWx0cyB0byAwXG4gICAgICB2YXIgY29tcHV0ZWREZWxheSA9IGRlbGF5ICYmIGRlbGF5LmhpZGUgfHwgZGVsYXkgfHwgMDtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzNC5faXNPcGVuID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoX3RoaXM0Ll90b29sdGlwTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB3ZSBhcmUgaGlkaW5nIGJlY2F1c2Ugb2YgYSBtb3VzZWxlYXZlLCB3ZSBtdXN0IGNoZWNrIHRoYXQgdGhlIG5ld1xuICAgICAgICAvLyByZWZlcmVuY2UgaXNuJ3QgdGhlIHRvb2x0aXAsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gaGlkZSBpdFxuICAgICAgICBpZiAoZXZ0LnR5cGUgPT09ICdtb3VzZWxlYXZlJykge1xuICAgICAgICAgIHZhciBpc1NldCA9IF90aGlzNC5fc2V0VG9vbHRpcE5vZGVFdmVudChldnQsIHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMpO1xuXG4gICAgICAgICAgLy8gaWYgd2Ugc2V0IHRoZSBuZXcgZXZlbnQsIGRvbid0IGhpZGUgdGhlIHRvb2x0aXAgeWV0XG4gICAgICAgICAgLy8gdGhlIG5ldyBldmVudCB3aWxsIHRha2UgY2FyZSB0byBoaWRlIGl0IGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChpc1NldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzNC5faGlkZShyZWZlcmVuY2UsIG9wdGlvbnMpO1xuICAgICAgfSwgY29tcHV0ZWREZWxheSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBUb29sdGlwO1xufSgpO1xuXG4vKipcbiAqIFBsYWNlbWVudCBmdW5jdGlvbiwgaXRzIGNvbnRleHQgaXMgdGhlIFRvb2x0aXAgaW5zdGFuY2UuXG4gKiBAbWVtYmVyb2YgVG9vbHRpcFxuICogQGNhbGxiYWNrIFBsYWNlbWVudEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0b29sdGlwIC0gdG9vbHRpcCBET00gbm9kZS5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIHJlZmVyZW5jZSBET00gbm9kZS5cbiAqIEByZXR1cm4ge1N0cmluZ30gcGxhY2VtZW50IC0gT25lIG9mIHRoZSBhbGxvd2VkIHBsYWNlbWVudCBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGl0bGUgZnVuY3Rpb24sIGl0cyBjb250ZXh0IGlzIHRoZSBUb29sdGlwIGluc3RhbmNlLlxuICogQG1lbWJlcm9mIFRvb2x0aXBcbiAqIEBjYWxsYmFjayBUaXRsZUZ1bmN0aW9uXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHBsYWNlbWVudCAtIFRoZSBkZXNpcmVkIHRpdGxlLlxuICovXG5cblxudmFyIF9pbml0aWFsaXNlUHJvcHMgPSBmdW5jdGlvbiBfaW5pdGlhbGlzZVByb3BzKCkge1xuICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICB0aGlzLnNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90aGlzNS5fc2hvdyhfdGhpczUucmVmZXJlbmNlLCBfdGhpczUub3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5oaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdGhpczUuX2hpZGUoKTtcbiAgfTtcblxuICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90aGlzNS5fZGlzcG9zZSgpO1xuICB9O1xuXG4gIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfdGhpczUuX2lzT3Blbikge1xuICAgICAgcmV0dXJuIF90aGlzNS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfdGhpczUuc2hvdygpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmFycm93U2VsZWN0b3IgPSAnLnRvb2x0aXAtYXJyb3csIC50b29sdGlwX19hcnJvdyc7XG4gIHRoaXMuaW5uZXJTZWxlY3RvciA9ICcudG9vbHRpcC1pbm5lciwgLnRvb2x0aXBfX2lubmVyJztcbiAgdGhpcy5fZXZlbnRzID0gW107XG5cbiAgdGhpcy5fc2V0VG9vbHRpcE5vZGVFdmVudCA9IGZ1bmN0aW9uIChldnQsIHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVsYXRlZHJlZmVyZW5jZSA9IGV2dC5yZWxhdGVkcmVmZXJlbmNlIHx8IGV2dC50b0VsZW1lbnQ7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhldnQyKSB7XG4gICAgICB2YXIgcmVsYXRlZHJlZmVyZW5jZTIgPSBldnQyLnJlbGF0ZWRyZWZlcmVuY2UgfHwgZXZ0Mi50b0VsZW1lbnQ7XG5cbiAgICAgIC8vIFJlbW92ZSBldmVudCBsaXN0ZW5lciBhZnRlciBjYWxsXG4gICAgICBfdGhpczUuX3Rvb2x0aXBOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0LnR5cGUsIGNhbGxiYWNrKTtcblxuICAgICAgLy8gSWYgdGhlIG5ldyByZWZlcmVuY2UgaXMgbm90IHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgICAgaWYgKCFyZWZlcmVuY2UuY29udGFpbnMocmVsYXRlZHJlZmVyZW5jZTIpKSB7XG4gICAgICAgIC8vIFNjaGVkdWxlIHRvIGhpZGUgdG9vbHRpcFxuICAgICAgICBfdGhpczUuX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIG9wdGlvbnMuZGVsYXksIG9wdGlvbnMsIGV2dDIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoX3RoaXM1Ll90b29sdGlwTm9kZS5jb250YWlucyhyZWxhdGVkcmVmZXJlbmNlKSkge1xuICAgICAgLy8gbGlzdGVuIHRvIG1vdXNlbGVhdmUgb24gdGhlIHRvb2x0aXAgZWxlbWVudCB0byBiZSBhYmxlIHRvIGhpZGUgdGhlIHRvb2x0aXBcbiAgICAgIF90aGlzNS5fdG9vbHRpcE5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnQudHlwZSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvb2x0aXAuanMubWFwXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Rvb2x0aXAuanMvZGlzdC9lc20vdG9vbHRpcC5qcyIsImltcG9ydCB2dG9vbHRpcCwgeyBkZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vdi10b29sdGlwJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGwgKFZ1ZSwgb3B0aW9ucykge1xyXG4gIGlmIChpbnN0YWxsLmluc3RhbGxlZCkgcmV0dXJuXHJcbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlXHJcblxyXG4gIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyB8fCB7fSlcclxuICB2dG9vbHRpcC5vcHRpb25zID0gb3B0aW9uc1xyXG4gIFZ1ZS5kaXJlY3RpdmUoJ3Rvb2x0aXAnLCB2dG9vbHRpcClcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFZUb29sdGlwID0gdnRvb2x0aXBcclxuXHJcbmNvbnN0IHBsdWdpbiA9IHtcclxuICBpbnN0YWxsLFxyXG59XHJcblxyXG4vLyBBdXRvLWluc3RhbGxcclxubGV0IEdsb2JhbFZ1ZSA9IG51bGxcclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgR2xvYmFsVnVlID0gd2luZG93LlZ1ZVxyXG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgR2xvYmFsVnVlID0gZ2xvYmFsLlZ1ZVxyXG59XHJcbmlmIChHbG9iYWxWdWUpIHtcclxuICBHbG9iYWxWdWUudXNlKHBsdWdpbilcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Vue = __webpack_require__(2);\nVue = 'default' in Vue ? Vue['default'] : Vue;\n\nvar version = '2.1.0';\n\nvar compatible = (/^2\\./).test(Vue.version);\nif (!compatible) {\n Vue.util.warn('VueClickaway ' + version + ' only supports Vue 2.x, and does not support Vue ' + Vue.version);\n}\n\n\n\n// @SECTION: implementation\n\nvar HANDLER = '_vue_clickaway_handler';\n\nfunction bind(el, binding) {\n unbind(el);\n\n var callback = binding.value;\n if (typeof callback !== 'function') {\n if (false) {\n Vue.util.warn(\n 'v-' + binding.name + '=\"' +\n binding.expression + '\" expects a function value, ' +\n 'got ' + callback\n );\n }\n return;\n }\n\n // @NOTE: Vue binds directives in microtasks, while UI events are dispatched\n // in macrotasks. This causes the listener to be set up before\n // the \"origin\" click event (the event that lead to the binding of\n // the directive) arrives at the document root. To work around that,\n // we ignore events until the end of the \"initial\" macrotask.\n // @REFERENCE: https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/\n // @REFERENCE: https://github.com/simplesmiler/vue-clickaway/issues/8\n var initialMacrotaskEnded = false;\n setTimeout(function() {\n initialMacrotaskEnded = true;\n }, 0);\n\n el[HANDLER] = function(ev) {\n // @NOTE: IE 5.0+\n // @REFERENCE: https://developer.mozilla.org/en/docs/Web/API/Node/contains\n if (initialMacrotaskEnded && !el.contains(ev.target)) {\n return callback(ev);\n }\n };\n\n document.documentElement.addEventListener('click', el[HANDLER], false);\n}\n\nfunction unbind(el) {\n document.documentElement.removeEventListener('click', el[HANDLER], false);\n delete el[HANDLER];\n}\n\nvar directive = {\n bind: bind,\n update: function(el, binding) {\n if (binding.value === binding.oldValue) return;\n bind(el, binding);\n },\n unbind: unbind,\n};\n\nvar mixin = {\n directives: { onClickaway: directive },\n};\n\nexports.version = version;\nexports.directive = directive;\nexports.mixin = mixin;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(e,t){ true?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.VueColor=t():e.VueColor=t()}(this,function(){return function(e){function t(r){if(o[r])return o[r].exports;var a=o[r]={exports:{},id:r,loaded:!1};return e[r].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var o={};return t.m=e,t.c=o,t.p=\"\",t(0)}([function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}var a=o(37),i=r(a),n=o(38),s=r(n),l=o(41),c=r(l),u=o(42),h=r(u),d=o(39),f=r(d),p=o(40),_=r(p),v=o(36),g=r(v),b=o(6),x=r(b),m=o(8),w=r(m),C=o(4),y=r(C),k=o(5),F=r(k),A=o(7),R=r(A),S=o(3),M=r(S),E={version:\"2.0.9\",Compact:i.default,Material:s.default,Slider:c.default,Swatches:h.default,Photoshop:f.default,Sketch:_.default,Chrome:g.default,Alpha:x.default,Checkboard:w.default,EditableInput:y.default,Hue:F.default,Saturation:R.default,ColorMixin:M.default};e.exports=E},function(e,t){e.exports=function(){var e=[];return e.toString=function(){for(var e=[],t=0;t
=0&&g.splice(t,1)}function s(e){var t=document.createElement(\"style\");return t.type=\"text/css\",i(e,t),t}function l(e,t){var o,r,a;if(t.singleton){var i=v++;o=_||(_=s(t)),r=c.bind(null,o,i,!1),a=c.bind(null,o,i,!0)}else o=s(t),r=u.bind(null,o),a=function(){n(o)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else a()}}function c(e,t,o,r){var a=o?\"\":r.css;if(e.styleSheet)e.styleSheet.cssText=b(t,a);else{var i=document.createTextNode(a),n=e.childNodes;n[t]&&e.removeChild(n[t]),n.length?e.insertBefore(i,n[t]):e.appendChild(i)}}function u(e,t){var o=t.css,r=t.media,a=t.sourceMap;if(r&&e.setAttribute(\"media\",r),a&&(o+=\"\\n/*# sourceURL=\"+a.sources[0]+\" */\",o+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(a))))+\" */\"),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}var h={},d=function(e){var t;return function(){return\"undefined\"==typeof t&&(t=e.apply(this,arguments)),t}},f=d(function(){return/msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase())}),p=d(function(){return document.head||document.getElementsByTagName(\"head\")[0]}),_=null,v=0,g=[];e.exports=function(e,t){t=t||{},\"undefined\"==typeof t.singleton&&(t.singleton=f()),\"undefined\"==typeof t.insertAt&&(t.insertAt=\"bottom\");var o=a(e);return r(o,t),function(e){for(var i=[],n=0;n0?(0,n.default)(e.hex):(0,n.default)(e),o&&o.setAlpha(r||1);var a=o.toHsl(),i=o.toHsv();return 0===a.s&&(a.h=e.h||t||0,i.h=e.h||t||0),{hsl:a,hex:o.toHexString().toUpperCase(),rgba:o.toRgb(),hsv:i,oldHue:e.h||t||a.h,source:e.source,a:e.a||o.getAlpha()}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(35),n=r(i);t.default={props:[\"value\"],data:function(){return{val:a(this.value)}},computed:{colors:{get:function(){return this.val},set:function(e){this.val=e,this.$emit(\"input\",e)}}},watch:{value:function(e){this.val=a(e)}},methods:{colorChange:function(e,t){this.oldHue=this.colors.hsl.h,this.colors=a(e,t||this.oldHue)},isValidHex:function(e){return(0,n.default)(e).isValid()},simpleCheckForValidColor:function(e){for(var t=[\"r\",\"g\",\"b\",\"a\",\"h\",\"s\",\"a\",\"v\"],o=0,r=0,a=0;a=2?void(this.fieldsIndex=0):void this.fieldsIndex++},showHighlight:function(){this.highlight=!0},hideHighlight:function(){this.highlight=!1}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=[\"#4D4D4D\",\"#999999\",\"#FFFFFF\",\"#F44E3B\",\"#FE9200\",\"#FCDC00\",\"#DBDF00\",\"#A4DD00\",\"#68CCCA\",\"#73D8FF\",\"#AEA1FF\",\"#FDA1FF\",\"#333333\",\"#808080\",\"#CCCCCC\",\"#D33115\",\"#E27300\",\"#FCC400\",\"#B0BC00\",\"#68BC00\",\"#16A5A5\",\"#009CE0\",\"#7B64FF\",\"#FA28FF\",\"#000000\",\"#666666\",\"#B3B3B3\",\"#9F0500\",\"#C45100\",\"#FB9E00\",\"#808900\",\"#194D33\",\"#0C797D\",\"#0062B1\",\"#653294\",\"#AB149E\"];t.default={name:\"Compact\",mixins:[i.default],props:{},components:{\"ed-in\":s.default},computed:{pick:function(){return this.colors.hex}},data:function(){return{defaultColors:l}},methods:{handlerClick:function(e){this.colorChange({hex:e,source:\"hex\"})},onChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(4),i=r(a),n=o(3),s=r(n);t.default={name:\"Material\",mixins:[s.default],components:{\"ed-in\":i.default},methods:{onChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=o(7),c=r(l),u=o(5),h=r(u),d=o(6),f=r(d);t.default={name:\"Photoshop\",mixins:[i.default],props:{head:{type:String,default:\"Color Picker\"}},components:{saturation:c.default,hue:h.default,alpha:f.default,\"ed-in\":s.default},data:function(){return{currentColor:\"#FFF\"}},created:function(){this.currentColor=this.colors.hex},methods:{childChange:function(e){this.colorChange(e)},inputChange:function(e){e&&(e[\"#\"]?this.isValidHex(e[\"#\"])&&this.colorChange({hex:e[\"#\"],source:\"hex\"}):(e.r||e.g||e.b||e.a)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))},handleAccept:function(){this.$emit(\"ok\")},handleCancel:function(){this.$emit(\"cancel\")}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=o(7),c=r(l),u=o(5),h=r(u),d=o(6),f=r(d),p=[\"#D0021B\",\"#F5A623\",\"#F8E71C\",\"#8B572A\",\"#7ED321\",\"#417505\",\"#BD10E0\",\"#9013FE\",\"#4A90E2\",\"#50E3C2\",\"#B8E986\",\"#000000\",\"#4A4A4A\",\"#9B9B9B\",\"#FFFFFF\"];t.default={name:\"Sketch\",mixins:[i.default],components:{saturation:c.default,hue:h.default,alpha:f.default,\"ed-in\":s.default},data:function(){return{presetColors:p}},computed:{activeColor:function(){var e=this.colors.rgba;return\"rgba(\"+[e.r,e.g,e.b,e.a].join(\",\")+\")\"}},methods:{handlePreset:function(e){this.colorChange({hex:e,source:\"hex\"})},childChange:function(e){this.colorChange(e)},inputChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b||e.a)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(5),s=r(n);t.default={name:\"Slider\",mixins:[i.default],props:{direction:String},components:{hue:s.default},computed:{activeOffset:function(){return Math.round(100*this.colors.hsl.s)/100===.5?Math.round(100*this.colors.hsl.l)/100:0}},data:function(){return{swatches:[\".80\",\".65\",\".50\",\".35\",\".20\"]}},methods:{hueChange:function(e){this.colorChange(e)},handleSwClick:function(e,t){this.colorChange({h:this.colors.hsl.h,s:.5,l:t,source:\"hsl\"})}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(34),i=r(a),n=o(3),s=r(n),l=[\"red\",\"pink\",\"purple\",\"deepPurple\",\"indigo\",\"blue\",\"lightBlue\",\"cyan\",\"teal\",\"green\",\"lightGreen\",\"lime\",\"yellow\",\"amber\",\"orange\",\"deepOrange\",\"brown\",\"blueGrey\"],c=[\"900\",\"700\",\"500\",\"300\",\"100\"],u=function(){var e=[];return l.forEach(function(t){var o=[];c.forEach(function(e){o.push(i.default[t][e].toUpperCase())}),e.push(o)}),e}();t.default={name:\"Swatches\",mixins:[s.default],computed:{pick:function(){return this.colors.hex}},data:function(){return{defaultColors:u}},methods:{handlerClick:function(e){this.colorChange({hex:e,source:\"hex\"})}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(8),i=r(a);t.default={name:\"Alpha\",props:{value:Object,onChange:Function},components:{checkboard:i.default},computed:{colors:function(){return this.value},gradientColor:function(){var e=this.colors.rgba,t=[e.r,e.g,e.b].join(\",\");return\"linear-gradient(to right, rgba(\"+t+\", 0) 0%, rgba(\"+t+\", 1) 100%)\"}},methods:{handleChange:function(e,t){!t&&e.preventDefault();var o,r=this.$refs.container,a=r.clientWidth,i=r.getBoundingClientRect().left+window.pageXOffset,n=e.pageX||(e.touches?e.touches[0].pageX:0),s=n-i;o=s<0?0:s>a?1:Math.round(100*s/a)/100,this.colors.a!==o&&this.$emit(\"change\",{h:this.colors.hsl.h,s:this.colors.hsl.s,l:this.colors.hsl.l,a:o,source:\"rgba\"})},handleMouseDown:function(e){this.handleChange(e,!0),window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t){\"use strict\";function o(e,t,o){if(\"undefined\"==typeof document)return null;var r=document.createElement(\"canvas\");r.width=r.height=2*o;var a=r.getContext(\"2d\");return a?(a.fillStyle=e,a.fillRect(0,0,r.width,r.height),a.fillStyle=t,a.fillRect(0,0,o,o),a.translate(o,o),a.fillRect(0,0,o,o),r.toDataURL()):null}function r(e,t,r){var i=e+\",\"+t+\",\"+r;if(a[i])return a[i];var n=o(e,t,r);return a[i]=n,n}Object.defineProperty(t,\"__esModule\",{value:!0});var a={};t.default={name:\"Checkboard\",props:{size:{type:[Number,String],default:8},white:{type:String,default:\"#fff\"},grey:{type:String,default:\"#e6e6e6\"}},computed:{bgStyle:function(){return\"url(\"+r(this.white,this.grey,this.size)+\") center left\"}}}},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"editableInput\",props:{label:String,value:[String,Number],max:Number,arrowOffset:{type:Number,default:1}},computed:{val:function(){return this.value}},filters:{maxFilter:{read:function(e){return this.max&&e>this.max?this.max:e},write:function(e,t){return e}}},methods:{update:function(e){this.handleChange(e.target.value)},handleChange:function(e){var t={};t[this.label]=e,this.$emit(\"change\",t)},handleBlur:function(e){console.log(e)},handleKeyDown:function(e){var t=this.val,o=Number(t);if(o){var r=this.arrowOffset||1;38===e.keyCode&&(t=o+r,this.handleChange(t),e.preventDefault()),40===e.keyCode&&(t=o-r,this.handleChange(t),e.preventDefault())}},handleDrag:function(e){console.log(e)},handleMouseDown:function(e){console.log(e)}}}},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"Hue\",props:{value:Object,direction:{type:String,default:\"horizontal\"}},computed:{colors:function(){return this.value},directionClass:function(){return{\"vue-color__c-hue--horizontal\":\"horizontal\"===this.direction,\"vue-color__c-hue--vertical\":\"vertical\"===this.direction}},pointerTop:function(){return\"vertical\"===this.direction?-(100*this.colors.hsl.h/360)+100+\"%\":0},pointerLeft:function(){return\"vertical\"===this.direction?0:100*this.colors.hsl.h/360+\"%\"}},methods:{handleChange:function(e,t){!t&&e.preventDefault();var o,r,a=this.$refs.container,i=a.clientWidth,n=a.clientHeight,s=a.getBoundingClientRect().left+window.pageXOffset,l=a.getBoundingClientRect().top+window.pageYOffset,c=e.pageX||(e.touches?e.touches[0].pageX:0),u=e.pageY||(e.touches?e.touches[0].pageY:0),h=c-s,d=u-l;\"vertical\"===this.direction?(d<0?o=359:d>n?o=0:(r=-(100*d/n)+100,o=360*r/100),this.colors.hsl.h!==o&&this.$emit(\"change\",{h:o,s:this.colors.hsl.s,l:this.colors.hsl.l,a:this.colors.hsl.a,source:\"hsl\"})):(h<0?o=0:h>i?o=359:(r=100*h/i,o=360*r/100),this.colors.hsl.h!==o&&this.$emit(\"change\",{h:o,s:this.colors.hsl.s,l:this.colors.hsl.l,a:this.colors.hsl.a,source:\"hsl\"}))},handleMouseDown:function(e){this.handleChange(e,!0),window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(e){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(33),i=r(a);t.default={name:\"Saturation\",props:{value:Object},computed:{colors:function(){return this.value},bgColor:function(){return\"hsl(\"+this.colors.hsl.h+\", 100%, 50%)\"},pointerTop:function(){return-(100*this.colors.hsv.v)+100+\"%\"},pointerLeft:function(){return 100*this.colors.hsv.s+\"%\"}},methods:{throttle:(0,i.default)(function(e,t){e(t)},20,{leading:!0,trailing:!1}),handleChange:function(e,t){!t&&e.preventDefault();var o=this.$refs.container,r=o.clientWidth,a=o.clientHeight,i=o.getBoundingClientRect().left+window.pageXOffset,n=o.getBoundingClientRect().top+window.pageYOffset,s=e.pageX||(e.touches?e.touches[0].pageX:0),l=e.pageY||(e.touches?e.touches[0].pageY:0),c=s-i,u=l-n;c<0?c=0:c>r?c=r:u<0?u=0:u>a&&(u=a);var h=100*c/r,d=-(100*u/a)+100;this.throttle(this.onChange,{h:this.colors.hsl.h,s:h,v:d>0?d:.01,a:this.colors.hsl.a,source:\"hsva\"})},onChange:function(e){this.$emit(\"change\",e)},handleMouseDown:function(e){window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(e){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__compact{padding-top:5px;padding-left:5px;width:240px;border-radius:2px;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16);background-color:#fff}.vue-color__compact__colors{overflow:hidden;padding:0;margin:0}.vue-color__compact__color-item{list-style:none;width:15px;height:15px;float:left;margin-right:5px;margin-bottom:5px;position:relative;cursor:pointer}.vue-color__compact__color-item--white{box-shadow:inset 0 0 0 1px #ddd}.vue-color__compact__color-item--white .vue-color__compact__dot{background:#000}.vue-color__compact__dot{position:absolute;top:5px;right:5px;bottom:5px;left:5px;border-radius:50%;opacity:1;background:#fff}.vue-color__compact__fields{display:flex;padding-bottom:6px;padding-right:5px;position:relative}.vue-color__compact__fields .vue-color__editable-input__input{width:70%;padding-left:30%;background:none;font-size:12px;color:#333;height:16px}.vue-color__compact__fields .vue-color__editable-input__label{position:absolute;top:3px;left:0;line-height:16px;text-transform:uppercase;font-size:12px;color:#999}.vue-color__compact__pick-color{position:absolute;top:6px;left:5px;height:9px;width:9px}.vue-color__compact__col-3{flex:1}.vue_color__compact__col-hex{flex:2}.vue_color__compact__col-hex .vue-color__editable-input__input{width:80%;padding-left:20%}.vue_color__compact__col-hex .vue-color__editable-input__label{display:none}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__editable-input{position:relative}.vue-color__editable-input__input{padding:0;border:0;outline:none}.vue-color__editable-input__label{text-transform:capitalize}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-hue{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px}.vue-color__c-hue--horizontal{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vue-color__c-hue--vertical{background:linear-gradient(0deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vue-color__c-hue__container{cursor:pointer;margin:0 2px;position:relative;height:100%}.vue-color__c-hue__pointer{z-index:2;position:absolute}.vue-color__c-hue__picker{cursor:pointer;margin-top:1px;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;transform:translateX(-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__saturation,.vue-color__saturation--black,.vue-color__saturation--white{cursor:pointer;position:absolute;top:0;left:0;right:0;bottom:0}.vue-color__saturation--white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.vue-color__saturation--black{background:linear-gradient(0deg,#000,transparent)}.vue-color__saturation--pointer{cursor:pointer;position:absolute}.vue-color__saturation--circle{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__material{width:98px;height:98px;padding:16px;font-family:Roboto;position:relative;border-radius:2px;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16);background-color:#fff}.vue-color__material .vue-color__editable-input__input{width:100%;margin-top:12px;font-size:15px;color:#333;height:30px}.vue-color__material .vue-color__editable-input__label{position:absolute;top:0;left:0;font-size:11px;color:#999;text-transform:capitalize}.vue-color__material__hex{border-bottom-width:2px;border-bottom-style:solid}.vue-color__material__split{display:flex;margin-right:-10px;padding-top:11px}.vue-color__material__third{flex:1;padding-right:10px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__slider{position:relative;width:410px}.vue-color__slider__hue-warp{height:12px;position:relative}.vue-color__slider__hue-warp .vue-color__c-hue__picker{width:14px;height:14px;border-radius:6px;transform:translate(-7px,-2px);background-color:#f8f8f8;box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vue-color__slider__swatches{display:flex;margin-top:20px}.vue-color__slider__swatch{margin-right:1px;flex:1;width:20%}.vue-color__slider__swatch:first-child{margin-right:1px}.vue-color__slider__swatch:first-child .vue-color__slider__swatch-picker{border-radius:2px 0 0 2px}.vue-color__slider__swatch:last-child{margin-right:0}.vue-color__slider__swatch:last-child .vue-color__slider__swatch-picker{border-radius:0 2px 2px 0}.vue-color__slider__swatch-picker{cursor:pointer;height:12px}.vue-color__slider__swatch-picker--active{transform:scaleY(1.8);border-radius:3.6px/2px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__swatches{width:320px;height:240px;overflow-y:scroll;background-color:#fff;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16)}.vue-color__swatches__box{padding:16px 0 6px 16px;overflow:hidden}.vue-color__swatches__color-group{padding-bottom:10px;width:40px;float:left;margin-right:10px}.vue-color__swatches__color-it{width:40px;height:24px;cursor:pointer;background:#880e4f;margin-bottom:1px;overflow:hidden;border-radius:2px 2px 0 0}.vue-color__swatches__pick{fill:#fff;margin-left:8px;display:block}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,'.vue-color__photoshop{background:#dcdcdc;border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.25),0 8px 16px rgba(0,0,0,.15);box-sizing:initial;width:513px;font-family:Roboto}.vue-color__photoshop__head{background-image:linear-gradient(-180deg,#f0f0f0,#d4d4d4);border-bottom:1px solid #b1b1b1;box-shadow:inset 0 1px 0 0 hsla(0,0%,100%,.2),inset 0 -1px 0 0 rgba(0,0,0,.02);height:23px;line-height:24px;border-radius:4px 4px 0 0;font-size:13px;color:#4d4d4d;text-align:center}.vue-color__photoshop__body{padding:15px;display:flex}.vue-color__photoshop__saturation-wrap{width:256px;height:256px;position:relative;border:2px solid #b3b3b3;border-bottom:2px solid #f0f0f0;overflow:hidden}.vue-color__photoshop__saturation-wrap .vue-color__saturation--circle{width:12px;height:12px}.vue-color__photoshop__hue-wrap{position:relative;height:256px;width:19px;margin-left:10px;border:2px solid #b3b3b3;border-bottom:2px solid #f0f0f0}.vue-color__photoshop__hue-pointer{position:relative}.vue-color__photoshop__hue-pointer--left,.vue-color__photoshop__hue-pointer--right{position:absolute;width:0;height:0;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #555}.vue-color__photoshop__hue-pointer--left:after,.vue-color__photoshop__hue-pointer--right:after{content:\"\";width:0;height:0;border-style:solid;border-width:4px 0 4px 6px;border-color:transparent transparent transparent #fff;position:absolute;top:1px;left:1px;transform:translate(-8px,-5px)}.vue-color__photoshop__hue-pointer--left{transform:translate(-13px,-4px)}.vue-color__photoshop__hue-pointer--right{transform:translate(20px,-4px) rotate(180deg)}.vue-color__photoshop__controls{width:180px;margin-left:10px;display:flex}.vue-color__photoshop__actions{margin-left:20px;flex:1}.vue-color__photoshop__ac-btn{cursor:pointer;background-image:linear-gradient(-180deg,#fff,#e6e6e6);border:1px solid #878787;border-radius:2px;height:20px;box-shadow:0 1px 0 0 #eaeaea;font-size:14px;color:#000;line-height:20px;text-align:center;margin-bottom:10px}.vue-color__photoshop__previews{width:60px}.vue-color__photoshop__previews__swatches{border:1px solid #b3b3b3;border-bottom:1px solid #f0f0f0;margin-bottom:2px;margin-top:1px}.vue-color__photoshop__previews__pr-color{height:34px;box-shadow:inset 1px 0 0 #000,inset -1px 0 0 #000,inset 0 1px 0 #000}.vue-color__photoshop__previews__label{font-size:14px;color:#000;text-align:center}.vue-color__photoshop__fields{padding-top:5px;padding-bottom:9px;width:80px;position:relative}.vue-color__photoshop__fields .vue-color__editable-input__input{margin-left:40%;width:40%;height:18px;border:1px solid #888;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 1px 0 0 #ececec;margin-bottom:5px;font-size:13px;padding-left:3px;margin-right:10px}.vue-color__photoshop__fields .vue-color__editable-input__label{top:0;left:0;width:34px;text-transform:uppercase;font-size:13px;height:18px;line-height:22px;position:absolute}.vue-color__photoshop__fields__divider{height:5px}.vue-color__photoshop__fields__hex .vue-color__editable-input__input{margin-left:20%;width:80%;height:18px;border:1px solid #888;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 1px 0 0 #ececec;margin-bottom:6px;font-size:13px;padding-left:3px}.vue-color__photoshop__fields__hex .vue-color__editable-input__label{position:absolute;top:0;left:0;width:14px;text-transform:uppercase;font-size:13px;height:18px;line-height:22px}',\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__sketch{position:relative;width:200px;padding:10px 10px 0;box-sizing:initial;background:#fff;border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.15),0 8px 16px rgba(0,0,0,.15)}.vue-color__sketch__saturation-wrap{width:100%;padding-bottom:75%;position:relative;overflow:hidden}.vue-color__sketch__controls{display:flex}.vue-color__sketch__sliders{padding:4px 0;flex:1}.vue-color__sketch__sliders .vue-color__c-alpha__gradient,.vue-color__sketch__sliders .vue-color__c-hue{border-radius:2px}.vue-color__sketch__hue-wrap{position:relative;height:10px}.vue-color__sketch__alpha-wrap{position:relative;height:10px;margin-top:4px;overflow:hidden}.vue-color__sketch__color-wrap{width:24px;height:24px;position:relative;margin-top:4px;margin-left:4px;border-radius:3px}.vue-color__sketch__active-color{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset 0 0 4px rgba(0,0,0,.25);z-index:2}.vue-color__sketch__field{display:flex;padding-top:4px}.vue-color__sketch__field .vue-color__editable-input__input{width:80%;padding:4px 10% 3px;border:none;box-shadow:inset 0 0 0 1px #ccc;font-size:11px}.vue-color__sketch__field .vue-color__editable-input__label{display:block;text-align:center;font-size:11px;color:#222;padding-top:3px;padding-bottom:4px;text-transform:capitalize}.vue-color__sketch__field--single{flex:1;padding-left:6px}.vue-color__sketch__field--double{flex:2}.vue-color__sketch__presets{margin-right:-10px;margin-left:-10px;padding-left:10px;padding-top:10px;border-top:1px solid #eee}.vue-color__sketch__presets-color{border-radius:3px;overflow:hidden;position:relative;display:inline-block;margin:0 10px 10px 0;vertical-align:top;cursor:pointer;width:16px;height:16px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__chrome{background:#fff;border-radius:2px;box-shadow:0 0 2px rgba(0,0,0,.3),0 4px 8px rgba(0,0,0,.3);box-sizing:initial;width:225px;font-family:Menlo;background-color:#fff}.vue-color__chrome__controls{display:flex}.vue-color__chrome__color-wrap{width:32px}.vue-color__chrome__active-color{margin-top:6px;width:16px;height:16px;border-radius:8px;position:relative;overflow:hidden}.vue-color__chrome__sliders{flex:1}.vue-color__chrome__sliders .vue-color__c-alpha__gradient,.vue-color__chrome__sliders .vue-color__c-hue{border-radius:2px}.vue-color__chrome__sliders .vue-color__c-alpha__picker,.vue-color__chrome__sliders .vue-color__c-hue__picker{width:12px;height:12px;border-radius:6px;transform:translate(-6px,-2px);background-color:#f8f8f8;box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vue-color__chrome__fields-wrap{padding-top:16px;display:flex}.vue-color__chrome__fields{display:flex;margin-left:-6px;flex:1}.vue-color__chrome__field{padding-left:6px;width:100%}.vue-color__chrome__toggle-btn{width:32px;text-align:right;position:relative}.vue-color__chrome__icon{margin-right:-4px;margin-top:12px;cursor:pointer;position:relative;z-index:2}.vue-color__chrome__icon-highlight{position:absolute;width:24px;height:28px;background:#eee;border-radius:4px;top:10px;left:12px}.vue-color__chrome__hue-wrap{margin-bottom:8px}.vue-color__chrome__alpha-wrap,.vue-color__chrome__hue-wrap{position:relative;height:10px}.vue-color__chrome__chrome-body{padding:16px 16px 12px;background-color:#fff}.vue-color__chrome__saturation-wrap{width:100%;padding-bottom:55%;position:relative;border-radius:2px 2px 0 0;overflow:hidden}.vue-color__chrome__saturation-wrap .vue-color__saturation--circle{width:12px;height:12px}.vue-color__chrome__fields .vue-color__editable-input__input{font-size:11px;color:#333;width:100%;border-rradius:2px;border:none;box-shadow:inset 0 0 0 1px #dadada;height:21px;text-align:center}.vue-color__chrome__fields .vue-color__editable-input__label{text-transform:uppercase;font-size:11px;line-height:11px;color:#969696;text-align:center;display:block;margin-top:12px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-alpha,.vue-color__c-alpha__checkboard-wrap{position:absolute;top:0;right:0;bottom:0;left:0}.vue-color__c-alpha__checkboard-wrap{overflow:hidden}.vue-color__c-alpha__gradient{position:absolute;top:0;right:0;bottom:0;left:0}.vue-color__c-alpha__container{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.vue-color__c-alpha__pointer{z-index:2;position:absolute}.vue-color__c-alpha__picker{cursor:pointer;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;margin-top:1px;transform:translateX(-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-checkerboard{position:absolute;top:0;right:0;bottom:0;left:0}\",\"\"])},function(e,t){(function(t){function o(e,t,o){function r(t){var o=_,r=v;return _=v=void 0,k=t,b=e.apply(r,o)}function i(e){return k=e,x=setTimeout(u,t),F?r(e):b}function n(e){var o=e-m,r=e-k,a=t-o;return A?C(a,g-r):a}function c(e){var o=e-m,r=e-k;return void 0===m||o>=t||o<0||A&&r>=g}function u(){var e=y();return c(e)?h(e):void(x=setTimeout(u,n(e)))}function h(e){return x=void 0,R&&_?r(e):(_=v=void 0,b)}function d(){void 0!==x&&clearTimeout(x),k=0,_=m=v=x=void 0}function f(){return void 0===x?b:h(y())}function p(){var e=y(),o=c(e);if(_=arguments,v=this,m=e,o){if(void 0===x)return i(m);if(A)return x=setTimeout(u,t),r(m)}return void 0===x&&(x=setTimeout(u,t)),\nb}var _,v,g,b,x,m,k=0,F=!1,A=!1,R=!0;if(\"function\"!=typeof e)throw new TypeError(l);return t=s(t)||0,a(o)&&(F=!!o.leading,A=\"maxWait\"in o,g=A?w(s(o.maxWait)||0,t):g,R=\"trailing\"in o?!!o.trailing:R),p.cancel=d,p.flush=f,p}function r(e,t,r){var i=!0,n=!0;if(\"function\"!=typeof e)throw new TypeError(l);return a(r)&&(i=\"leading\"in r?!!r.leading:i,n=\"trailing\"in r?!!r.trailing:n),o(e,t,{leading:i,maxWait:t,trailing:n})}function a(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==typeof e}function n(e){return\"symbol\"==typeof e||i(e)&&m.call(e)==u}function s(e){if(\"number\"==typeof e)return e;if(n(e))return c;if(a(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=a(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(h,\"\");var o=f.test(e);return o||p.test(e)?_(e.slice(2),o?2:8):d.test(e)?c:+e}var l=\"Expected a function\",c=NaN,u=\"[object Symbol]\",h=/^\\s+|\\s+$/g,d=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,p=/^0o[0-7]+$/i,_=parseInt,v=\"object\"==typeof t&&t&&t.Object===Object&&t,g=\"object\"==typeof self&&self&&self.Object===Object&&self,b=v||g||Function(\"return this\")(),x=Object.prototype,m=x.toString,w=Math.max,C=Math.min,y=function(){return b.Date.now()};e.exports=r}).call(t,function(){return this}())},function(e,t,o){var r,a,i;!function(o,n){a=[],r=n,i=\"function\"==typeof r?r.apply(t,a):r,!(void 0!==i&&(e.exports=i))}(this,function(){return{red:{50:\"#ffebee\",100:\"#ffcdd2\",200:\"#ef9a9a\",300:\"#e57373\",400:\"#ef5350\",500:\"#f44336\",600:\"#e53935\",700:\"#d32f2f\",800:\"#c62828\",900:\"#b71c1c\",a100:\"#ff8a80\",a200:\"#ff5252\",a400:\"#ff1744\",a700:\"#d50000\"},pink:{50:\"#fce4ec\",100:\"#f8bbd0\",200:\"#f48fb1\",300:\"#f06292\",400:\"#ec407a\",500:\"#e91e63\",600:\"#d81b60\",700:\"#c2185b\",800:\"#ad1457\",900:\"#880e4f\",a100:\"#ff80ab\",a200:\"#ff4081\",a400:\"#f50057\",a700:\"#c51162\"},purple:{50:\"#f3e5f5\",100:\"#e1bee7\",200:\"#ce93d8\",300:\"#ba68c8\",400:\"#ab47bc\",500:\"#9c27b0\",600:\"#8e24aa\",700:\"#7b1fa2\",800:\"#6a1b9a\",900:\"#4a148c\",a100:\"#ea80fc\",a200:\"#e040fb\",a400:\"#d500f9\",a700:\"#aa00ff\"},deepPurple:{50:\"#ede7f6\",100:\"#d1c4e9\",200:\"#b39ddb\",300:\"#9575cd\",400:\"#7e57c2\",500:\"#673ab7\",600:\"#5e35b1\",700:\"#512da8\",800:\"#4527a0\",900:\"#311b92\",a100:\"#b388ff\",a200:\"#7c4dff\",a400:\"#651fff\",a700:\"#6200ea\"},indigo:{50:\"#e8eaf6\",100:\"#c5cae9\",200:\"#9fa8da\",300:\"#7986cb\",400:\"#5c6bc0\",500:\"#3f51b5\",600:\"#3949ab\",700:\"#303f9f\",800:\"#283593\",900:\"#1a237e\",a100:\"#8c9eff\",a200:\"#536dfe\",a400:\"#3d5afe\",a700:\"#304ffe\"},blue:{50:\"#e3f2fd\",100:\"#bbdefb\",200:\"#90caf9\",300:\"#64b5f6\",400:\"#42a5f5\",500:\"#2196f3\",600:\"#1e88e5\",700:\"#1976d2\",800:\"#1565c0\",900:\"#0d47a1\",a100:\"#82b1ff\",a200:\"#448aff\",a400:\"#2979ff\",a700:\"#2962ff\"},lightBlue:{50:\"#e1f5fe\",100:\"#b3e5fc\",200:\"#81d4fa\",300:\"#4fc3f7\",400:\"#29b6f6\",500:\"#03a9f4\",600:\"#039be5\",700:\"#0288d1\",800:\"#0277bd\",900:\"#01579b\",a100:\"#80d8ff\",a200:\"#40c4ff\",a400:\"#00b0ff\",a700:\"#0091ea\"},cyan:{50:\"#e0f7fa\",100:\"#b2ebf2\",200:\"#80deea\",300:\"#4dd0e1\",400:\"#26c6da\",500:\"#00bcd4\",600:\"#00acc1\",700:\"#0097a7\",800:\"#00838f\",900:\"#006064\",a100:\"#84ffff\",a200:\"#18ffff\",a400:\"#00e5ff\",a700:\"#00b8d4\"},teal:{50:\"#e0f2f1\",100:\"#b2dfdb\",200:\"#80cbc4\",300:\"#4db6ac\",400:\"#26a69a\",500:\"#009688\",600:\"#00897b\",700:\"#00796b\",800:\"#00695c\",900:\"#004d40\",a100:\"#a7ffeb\",a200:\"#64ffda\",a400:\"#1de9b6\",a700:\"#00bfa5\"},green:{50:\"#e8f5e9\",100:\"#c8e6c9\",200:\"#a5d6a7\",300:\"#81c784\",400:\"#66bb6a\",500:\"#4caf50\",600:\"#43a047\",700:\"#388e3c\",800:\"#2e7d32\",900:\"#1b5e20\",a100:\"#b9f6ca\",a200:\"#69f0ae\",a400:\"#00e676\",a700:\"#00c853\"},lightGreen:{50:\"#f1f8e9\",100:\"#dcedc8\",200:\"#c5e1a5\",300:\"#aed581\",400:\"#9ccc65\",500:\"#8bc34a\",600:\"#7cb342\",700:\"#689f38\",800:\"#558b2f\",900:\"#33691e\",a100:\"#ccff90\",a200:\"#b2ff59\",a400:\"#76ff03\",a700:\"#64dd17\"},lime:{50:\"#f9fbe7\",100:\"#f0f4c3\",200:\"#e6ee9c\",300:\"#dce775\",400:\"#d4e157\",500:\"#cddc39\",600:\"#c0ca33\",700:\"#afb42b\",800:\"#9e9d24\",900:\"#827717\",a100:\"#f4ff81\",a200:\"#eeff41\",a400:\"#c6ff00\",a700:\"#aeea00\"},yellow:{50:\"#fffde7\",100:\"#fff9c4\",200:\"#fff59d\",300:\"#fff176\",400:\"#ffee58\",500:\"#ffeb3b\",600:\"#fdd835\",700:\"#fbc02d\",800:\"#f9a825\",900:\"#f57f17\",a100:\"#ffff8d\",a200:\"#ffff00\",a400:\"#ffea00\",a700:\"#ffd600\"},amber:{50:\"#fff8e1\",100:\"#ffecb3\",200:\"#ffe082\",300:\"#ffd54f\",400:\"#ffca28\",500:\"#ffc107\",600:\"#ffb300\",700:\"#ffa000\",800:\"#ff8f00\",900:\"#ff6f00\",a100:\"#ffe57f\",a200:\"#ffd740\",a400:\"#ffc400\",a700:\"#ffab00\"},orange:{50:\"#fff3e0\",100:\"#ffe0b2\",200:\"#ffcc80\",300:\"#ffb74d\",400:\"#ffa726\",500:\"#ff9800\",600:\"#fb8c00\",700:\"#f57c00\",800:\"#ef6c00\",900:\"#e65100\",a100:\"#ffd180\",a200:\"#ffab40\",a400:\"#ff9100\",a700:\"#ff6d00\"},deepOrange:{50:\"#fbe9e7\",100:\"#ffccbc\",200:\"#ffab91\",300:\"#ff8a65\",400:\"#ff7043\",500:\"#ff5722\",600:\"#f4511e\",700:\"#e64a19\",800:\"#d84315\",900:\"#bf360c\",a100:\"#ff9e80\",a200:\"#ff6e40\",a400:\"#ff3d00\",a700:\"#dd2c00\"},brown:{50:\"#efebe9\",100:\"#d7ccc8\",200:\"#bcaaa4\",300:\"#a1887f\",400:\"#8d6e63\",500:\"#795548\",600:\"#6d4c41\",700:\"#5d4037\",800:\"#4e342e\",900:\"#3e2723\"},grey:{50:\"#fafafa\",100:\"#f5f5f5\",200:\"#eeeeee\",300:\"#e0e0e0\",400:\"#bdbdbd\",500:\"#9e9e9e\",600:\"#757575\",700:\"#616161\",800:\"#424242\",900:\"#212121\"},blueGrey:{50:\"#eceff1\",100:\"#cfd8dc\",200:\"#b0bec5\",300:\"#90a4ae\",400:\"#78909c\",500:\"#607d8b\",600:\"#546e7a\",700:\"#455a64\",800:\"#37474f\",900:\"#263238\"},darkText:{primary:\"rgba(0, 0, 0, 0.87)\",secondary:\"rgba(0, 0, 0, 0.54)\",disabled:\"rgba(0, 0, 0, 0.38)\",dividers:\"rgba(0, 0, 0, 0.12)\"},lightText:{primary:\"rgba(255, 255, 255, 1)\",secondary:\"rgba(255, 255, 255, 0.7)\",disabled:\"rgba(255, 255, 255, 0.5)\",dividers:\"rgba(255, 255, 255, 0.12)\"},darkIcons:{active:\"rgba(0, 0, 0, 0.54)\",inactive:\"rgba(0, 0, 0, 0.38)\"},lightIcons:{active:\"rgba(255, 255, 255, 1)\",inactive:\"rgba(255, 255, 255, 0.5)\"},white:\"#ffffff\",black:\"#000000\"}})},function(e,t,o){var r;!function(a){function i(e,t){if(e=e?e:\"\",t=t||{},e instanceof i)return e;if(!(this instanceof i))return new i(e,t);var o=n(e);this._originalInput=e,this._r=o.r,this._g=o.g,this._b=o.b,this._a=o.a,this._roundA=X(100*this._a)/100,this._format=t.format||o.format,this._gradientType=t.gradientType,this._r<1&&(this._r=X(this._r)),this._g<1&&(this._g=X(this._g)),this._b<1&&(this._b=X(this._b)),this._ok=o.ok,this._tc_id=V++}function n(e){var t={r:0,g:0,b:0},o=1,r=null,a=null,i=null,n=!1,l=!1;return\"string\"==typeof e&&(e=P(e)),\"object\"==typeof e&&(N(e.r)&&N(e.g)&&N(e.b)?(t=s(e.r,e.g,e.b),n=!0,l=\"%\"===String(e.r).substr(-1)?\"prgb\":\"rgb\"):N(e.h)&&N(e.s)&&N(e.v)?(r=B(e.s),a=B(e.v),t=h(e.h,r,a),n=!0,l=\"hsv\"):N(e.h)&&N(e.s)&&N(e.l)&&(r=B(e.s),i=B(e.l),t=c(e.h,r,i),n=!0,l=\"hsl\"),e.hasOwnProperty(\"a\")&&(o=e.a)),o=M(o),{ok:n,format:e.format||l,r:q(255,Y(t.r,0)),g:q(255,Y(t.g,0)),b:q(255,Y(t.b,0)),a:o}}function s(e,t,o){return{r:255*E(e,255),g:255*E(t,255),b:255*E(o,255)}}function l(e,t,o){e=E(e,255),t=E(t,255),o=E(o,255);var r,a,i=Y(e,t,o),n=q(e,t,o),s=(i+n)/2;if(i==n)r=a=0;else{var l=i-n;switch(a=s>.5?l/(2-i-n):l/(i+n),i){case e:r=(t-o)/l+(t1&&(o-=1),o<1/6?e+6*(t-e)*o:o<.5?t:o<2/3?e+(t-e)*(2/3-o)*6:e}var a,i,n;if(e=E(e,360),t=E(t,100),o=E(o,100),0===t)a=i=n=o;else{var s=o<.5?o*(1+t):o+t-o*t,l=2*o-s;a=r(l,s,e+1/3),i=r(l,s,e),n=r(l,s,e-1/3)}return{r:255*a,g:255*i,b:255*n}}function u(e,t,o){e=E(e,255),t=E(t,255),o=E(o,255);var r,a,i=Y(e,t,o),n=q(e,t,o),s=i,l=i-n;if(a=0===i?0:l/i,i==n)r=0;else{switch(i){case e:r=(t-o)/l+(t>1)+720)%360;--t;)r.h=(r.h+a)%360,n.push(i(r));return n}function R(e,t){t=t||6;for(var o=i(e).toHsv(),r=o.h,a=o.s,n=o.v,s=[],l=1/t;t--;)s.push(i({h:r,s:a,v:n})),n=(n+l)%1;return s}function S(e){var t={};for(var o in e)e.hasOwnProperty(o)&&(t[e[o]]=o);return t}function M(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function E(e,t){H(e)&&(e=\"100%\");var o=O(e);return e=q(t,Y(0,parseFloat(e))),o&&(e=parseInt(e*t,10)/100),a.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function j(e){return q(1,Y(0,e))}function L(e){return parseInt(e,16)}function H(e){return\"string\"==typeof e&&e.indexOf(\".\")!=-1&&1===parseFloat(e)}function O(e){return\"string\"==typeof e&&e.indexOf(\"%\")!=-1}function z(e){return 1==e.length?\"0\"+e:\"\"+e}function B(e){return e<=1&&(e=100*e+\"%\"),e}function D(e){return a.round(255*parseFloat(e)).toString(16)}function $(e){return L(e)/255}function N(e){return!!Z.CSS_UNIT.exec(e)}function P(e){e=e.replace(T,\"\").replace(U,\"\").toLowerCase();var t=!1;if(G[e])e=G[e],t=!0;else if(\"transparent\"==e)return{r:0,g:0,b:0,a:0,format:\"name\"};var o;return(o=Z.rgb.exec(e))?{r:o[1],g:o[2],b:o[3]}:(o=Z.rgba.exec(e))?{r:o[1],g:o[2],b:o[3],a:o[4]}:(o=Z.hsl.exec(e))?{h:o[1],s:o[2],l:o[3]}:(o=Z.hsla.exec(e))?{h:o[1],s:o[2],l:o[3],a:o[4]}:(o=Z.hsv.exec(e))?{h:o[1],s:o[2],v:o[3]}:(o=Z.hsva.exec(e))?{h:o[1],s:o[2],v:o[3],a:o[4]}:(o=Z.hex8.exec(e))?{r:L(o[1]),g:L(o[2]),b:L(o[3]),a:$(o[4]),format:t?\"name\":\"hex8\"}:(o=Z.hex6.exec(e))?{r:L(o[1]),g:L(o[2]),b:L(o[3]),format:t?\"name\":\"hex\"}:(o=Z.hex4.exec(e))?{r:L(o[1]+\"\"+o[1]),g:L(o[2]+\"\"+o[2]),b:L(o[3]+\"\"+o[3]),a:$(o[4]+\"\"+o[4]),format:t?\"name\":\"hex8\"}:!!(o=Z.hex3.exec(e))&&{r:L(o[1]+\"\"+o[1]),g:L(o[2]+\"\"+o[2]),b:L(o[3]+\"\"+o[3]),format:t?\"name\":\"hex\"}}function I(e){var t,o;return e=e||{level:\"AA\",size:\"small\"},t=(e.level||\"AA\").toUpperCase(),o=(e.size||\"small\").toLowerCase(),\"AA\"!==t&&\"AAA\"!==t&&(t=\"AA\"),\"small\"!==o&&\"large\"!==o&&(o=\"small\"),{level:t,size:o}}var T=/^\\s+/,U=/\\s+$/,V=0,X=a.round,q=a.min,Y=a.max,W=a.random;i.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,o,r,i,n,s=this.toRgb();return e=s.r/255,t=s.g/255,o=s.b/255,r=e<=.03928?e/12.92:a.pow((e+.055)/1.055,2.4),i=t<=.03928?t/12.92:a.pow((t+.055)/1.055,2.4),n=o<=.03928?o/12.92:a.pow((o+.055)/1.055,2.4),.2126*r+.7152*i+.0722*n},setAlpha:function(e){return this._a=M(e),this._roundA=X(100*this._a)/100,this},toHsv:function(){var e=u(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=u(this._r,this._g,this._b),t=X(360*e.h),o=X(100*e.s),r=X(100*e.v);return 1==this._a?\"hsv(\"+t+\", \"+o+\"%, \"+r+\"%)\":\"hsva(\"+t+\", \"+o+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHsl:function(){var e=l(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=l(this._r,this._g,this._b),t=X(360*e.h),o=X(100*e.s),r=X(100*e.l);return 1==this._a?\"hsl(\"+t+\", \"+o+\"%, \"+r+\"%)\":\"hsla(\"+t+\", \"+o+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHex:function(e){return d(this._r,this._g,this._b,e)},toHexString:function(e){return\"#\"+this.toHex(e)},toHex8:function(e){return f(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return\"#\"+this.toHex8(e)},toRgb:function(){return{r:X(this._r),g:X(this._g),b:X(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\"rgb(\"+X(this._r)+\", \"+X(this._g)+\", \"+X(this._b)+\")\":\"rgba(\"+X(this._r)+\", \"+X(this._g)+\", \"+X(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:X(100*E(this._r,255))+\"%\",g:X(100*E(this._g,255))+\"%\",b:X(100*E(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\"rgb(\"+X(100*E(this._r,255))+\"%, \"+X(100*E(this._g,255))+\"%, \"+X(100*E(this._b,255))+\"%)\":\"rgba(\"+X(100*E(this._r,255))+\"%, \"+X(100*E(this._g,255))+\"%, \"+X(100*E(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return 0===this._a?\"transparent\":!(this._a<1)&&(K[d(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t=\"#\"+p(this._r,this._g,this._b,this._a),o=t,r=this._gradientType?\"GradientType = 1, \":\"\";if(e){var a=i(e);o=\"#\"+p(a._r,a._g,a._b,a._a)}return\"progid:DXImageTransform.Microsoft.gradient(\"+r+\"startColorstr=\"+t+\",endColorstr=\"+o+\")\"},toString:function(e){var t=!!e;e=e||this._format;var o=!1,r=this._a<1&&this._a>=0,a=!t&&r&&(\"hex\"===e||\"hex6\"===e||\"hex3\"===e||\"hex4\"===e||\"hex8\"===e||\"name\"===e);return a?\"name\"===e&&0===this._a?this.toName():this.toRgbString():(\"rgb\"===e&&(o=this.toRgbString()),\"prgb\"===e&&(o=this.toPercentageRgbString()),\"hex\"!==e&&\"hex6\"!==e||(o=this.toHexString()),\"hex3\"===e&&(o=this.toHexString(!0)),\"hex4\"===e&&(o=this.toHex8String(!0)),\"hex8\"===e&&(o=this.toHex8String()),\"name\"===e&&(o=this.toName()),\"hsl\"===e&&(o=this.toHslString()),\"hsv\"===e&&(o=this.toHsvString()),o||this.toHexString())},clone:function(){return i(this.toString())},_applyModification:function(e,t){var o=e.apply(null,[this].concat([].slice.call(t)));return this._r=o._r,this._g=o._g,this._b=o._b,this.setAlpha(o._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(x,arguments)},darken:function(){return this._applyModification(m,arguments)},desaturate:function(){return this._applyModification(_,arguments)},saturate:function(){return this._applyModification(v,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(w,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(A,arguments)},complement:function(){return this._applyCombination(C,arguments)},monochromatic:function(){return this._applyCombination(R,arguments)},splitcomplement:function(){return this._applyCombination(F,arguments)},triad:function(){return this._applyCombination(y,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},i.fromRatio=function(e,t){if(\"object\"==typeof e){var o={};for(var r in e)e.hasOwnProperty(r)&&(\"a\"===r?o[r]=e[r]:o[r]=B(e[r]));e=o}return i(e,t)},i.equals=function(e,t){return!(!e||!t)&&i(e).toRgbString()==i(t).toRgbString()},i.random=function(){return i.fromRatio({r:W(),g:W(),b:W()})},i.mix=function(e,t,o){o=0===o?0:o||50;var r=i(e).toRgb(),a=i(t).toRgb(),n=o/100,s={r:(a.r-r.r)*n+r.r,g:(a.g-r.g)*n+r.g,b:(a.b-r.b)*n+r.b,a:(a.a-r.a)*n+r.a};return i(s)},i.readability=function(e,t){var o=i(e),r=i(t);return(a.max(o.getLuminance(),r.getLuminance())+.05)/(a.min(o.getLuminance(),r.getLuminance())+.05)},i.isReadable=function(e,t,o){var r,a,n=i.readability(e,t);switch(a=!1,r=I(o),r.level+r.size){case\"AAsmall\":case\"AAAlarge\":a=n>=4.5;break;case\"AAlarge\":a=n>=3;break;case\"AAAsmall\":a=n>=7}return a},i.mostReadable=function(e,t,o){var r,a,n,s,l=null,c=0;o=o||{},a=o.includeFallbackColors,n=o.level,s=o.size;for(var u=0;uc&&(c=r,l=i(t[u]));return i.isReadable(e,l,{level:n,size:s})||!a?l:(o.includeFallbackColors=!1,i.mostReadable(e,[\"#fff\",\"#000\"],o))};var G=i.names={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},K=i.hexNames=S(G),Z=function(){var e=\"[-\\\\+]?\\\\d+%?\",t=\"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\",o=\"(?:\"+t+\")|(?:\"+e+\")\",r=\"[\\\\s|\\\\(]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")\\\\s*\\\\)?\",a=\"[\\\\s|\\\\(]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")\\\\s*\\\\)?\";return{CSS_UNIT:new RegExp(o),rgb:new RegExp(\"rgb\"+r),rgba:new RegExp(\"rgba\"+a),hsl:new RegExp(\"hsl\"+r),hsla:new RegExp(\"hsla\"+a),hsv:new RegExp(\"hsv\"+r),hsva:new RegExp(\"hsva\"+a),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();\"undefined\"!=typeof e&&e.exports?e.exports=i:(r=function(){return i}.call(t,o,t,e),!(void 0!==r&&(e.exports=r)))}(Math)},function(e,t,o){var r,a;o(64),r=o(9);var i=o(52);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(55),r=o(10);var i=o(43);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(59),r=o(11);var i=o(47);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(62),r=o(12);var i=o(50);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(63),r=o(13);var i=o(51);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(60),r=o(14);var i=o(48);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(61),r=o(15);var i=o(49);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__compact\"},[o(\"ul\",{staticClass:\"vue-color__compact__colors\"},e._l(e.defaultColors,function(t){return o(\"li\",{staticClass:\"vue-color__compact__color-item\",class:{\"vue-color__compact__color-item--white\":\"#FFFFFF\"===t},style:{background:t},on:{click:function(o){e.handlerClick(t)}}},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t===e.pick,expression:\"c === pick\"}],staticClass:\"vue-color__compact__dot\"})])}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__editable-input\"},[o(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.val,expression:\"val\"}],staticClass:\"vue-color__editable-input__input\",domProps:{value:e.val},on:{keydown:e.handleKeyDown,input:[function(t){t.target.composing||(e.val=t.target.value)},e.update]}}),e._v(\" \"),o(\"span\",{staticClass:\"vue-color__editable-input__label\"},[e._v(e._s(e.label))])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{class:[\"vue-color__c-hue\",e.directionClass]},[o(\"div\",{ref:\"container\",staticClass:\"vue-color__c-hue__container\",on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[o(\"div\",{staticClass:\"vue-color__c-hue__pointer\",style:{top:e.pointerTop,left:e.pointerLeft}},[o(\"div\",{staticClass:\"vue-color__c-hue__picker\"})])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{ref:\"container\",staticClass:\"vue-color__saturation\",style:{background:e.bgColor},on:{mousedown:e.handleMouseDown}},[o(\"div\",{staticClass:\"vue-color__saturation--white\"}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__saturation--black\"}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__saturation--pointer\",style:{top:e.pointerTop,left:e.pointerLeft}},[o(\"div\",{staticClass:\"vue-color__saturation--circle\"})])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__material\"},[o(\"ed-in\",{staticClass:\"vue-color__material__hex\",style:{borderColor:e.colors.hex},attrs:{label:\"hex\"},on:{change:e.onChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__split\"},[o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.onChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.onChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.onChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1)])],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__slider\"},[o(\"div\",{staticClass:\"vue-color__slider__hue-warp\"},[o(\"hue\",{on:{change:e.hueChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__slider__swatches\"},e._l(e.swatches,function(t,r){return o(\"div\",{staticClass:\"vue-color__slider__swatch\",attrs:{\"data-index\":r},on:{click:function(o){e.handleSwClick(r,t)}}},[o(\"div\",{staticClass:\"vue-color__slider__swatch-picker\",class:{\"vue-color__slider__swatch-picker--active\":t==e.activeOffset},style:{background:\"hsl(\"+e.colors.hsl.h+\", 50%, \"+100*t+\"%)\"}})])}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__swatches\",attrs:{\"data-pick\":e.pick}},[o(\"div\",{staticClass:\"vue-color__swatches__box\"},e._l(e.defaultColors,function(t){return o(\"div\",{staticClass:\"vue-color__swatches__color-group\"},e._l(t,function(t){return o(\"div\",{staticClass:\"vue-color__swatches__color-it\",style:{background:t},attrs:{\"data-color\":t},on:{click:function(o){e.handlerClick(t)}}},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t==e.pick,expression:\"c == pick\"}],staticClass:\"vue-color__swatches__pick\"},[o(\"svg\",{staticStyle:{width:\"24px\",height:\"24px\"},attrs:{viewBox:\"0 0 24 24\"}},[o(\"path\",{attrs:{d:\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"}})])])])}))}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__photoshop\"},[o(\"div\",{staticClass:\"vue-color__photoshop__head\"},[e._v(e._s(e.head))]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__body\"},[o(\"div\",{staticClass:\"vue-color__photoshop__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__hue-wrap\"},[o(\"hue\",{attrs:{direction:\"vertical\"},on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}},[o(\"div\",{staticClass:\"vue-color__photoshop__hue-pointer\"},[o(\"i\",{staticClass:\"vue-color__photoshop__hue-pointer--left\"}),o(\"i\",{staticClass:\"vue-color__photoshop__hue-pointer--right\"})])])],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__controls\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews__label\"},[e._v(\"new\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__swatches\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews__pr-color\",style:{background:e.colors.hex}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__pr-color\",style:{background:e.currentColor}})]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__label\"},[e._v(\"current\")])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__actions\"},[o(\"div\",{staticClass:\"vue-color__photoshop__ac-btn\",on:{click:e.handleAccept}},[e._v(\"OK\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__ac-btn\",on:{click:e.handleCancel}},[e._v(\"Cancel\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields\"},[o(\"ed-in\",{attrs:{label:\"h\"},on:{change:e.inputChange},model:{value:e.colors.hsl.h,callback:function(t){e.colors.hsl.h=t},expression:\"colors.hsl.h\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"s\"},on:{change:e.inputChange},model:{value:e.colors.hsl.s,callback:function(t){e.colors.hsl.s=t},expression:\"colors.hsl.s\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"v\"},on:{change:e.inputChange},model:{value:e.colors.hsl.l,callback:function(t){e.colors.hsl.l=t},expression:\"colors.hsl.l\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields__divider\"}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields__divider\"}),e._v(\" \"),o(\"ed-in\",{staticClass:\"vue-color__photoshop__fields__hex\",attrs:{label:\"#\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1)])])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__sketch\"},[o(\"div\",{staticClass:\"vue-color__sketch__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__controls\"},[o(\"div\",{staticClass:\"vue-color__sketch__sliders\"},[o(\"div\",{staticClass:\"vue-color__sketch__hue-wrap\"},[o(\"hue\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__alpha-wrap\"},[o(\"alpha\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1)]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__color-wrap\"},[o(\"div\",{staticClass:\"vue-color__sketch__active-color\",style:{background:e.activeColor}})])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field\"},[o(\"div\",{staticClass:\"vue-color__sketch__field--double\"},[o(\"ed-in\",{attrs:{label:\"hex\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{\nstaticClass:\"vue-color__sketch__presets\"},e._l(e.presetColors,function(t){return o(\"div\",{staticClass:\"vue-color__sketch__presets-color\",style:{background:t},on:{click:function(o){e.handlePreset(t)}}})}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__chrome\"},[o(\"div\",{staticClass:\"vue-color__chrome__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__chrome-body\"},[o(\"div\",{staticClass:\"vue-color__chrome__controls\"},[o(\"div\",{staticClass:\"vue-color__chrome__color-wrap\"},[o(\"div\",{staticClass:\"vue-color__chrome__active-color\",style:{background:e.activeColor}})]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__sliders\"},[o(\"div\",{staticClass:\"vue-color__chrome__hue-wrap\"},[o(\"hue\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__alpha-wrap\"},[o(\"alpha\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1)])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__fields-wrap\"},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:0===e.fieldsIndex,expression:\"fieldsIndex === 0\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"hex\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1)]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:1===e.fieldsIndex,expression:\"fieldsIndex === 1\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:2===e.fieldsIndex,expression:\"fieldsIndex === 2\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"h\"},on:{change:e.inputChange},model:{value:e.colors.hsl.h,callback:function(t){e.colors.hsl.h=t},expression:\"colors.hsl.h\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"s\"},on:{change:e.inputChange},model:{value:e.colors.hsl.s,callback:function(t){e.colors.hsl.s=t},expression:\"colors.hsl.s\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"l\"},on:{change:e.inputChange},model:{value:e.colors.hsl.l,callback:function(t){e.colors.hsl.l=t},expression:\"colors.hsl.l\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__toggle-btn\",on:{click:e.toggleViews}},[o(\"div\",{staticClass:\"vue-color__chrome__icon\"},[o(\"svg\",{staticStyle:{width:\"24px\",height:\"24px\"},attrs:{viewBox:\"0 0 24 24\"},on:{mouseover:e.showHighlight,mouseenter:e.showHighlight,mouseout:e.hideHighlight}},[o(\"path\",{attrs:{fill:\"#333\",d:\"M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z\"}})])]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.highlight,expression:\"highlight\"}],staticClass:\"vue-color__chrome__icon-highlight\"})])])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__c-alpha\"},[o(\"div\",{staticClass:\"vue-color__c-alpha__checkboard-wrap\"},[o(\"checkboard\")],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__c-alpha__gradient\",style:{background:e.gradientColor}}),e._v(\" \"),o(\"div\",{ref:\"container\",staticClass:\"vue-color__c-alpha__container\",on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[o(\"div\",{staticClass:\"vue-color__c-alpha__pointer\",style:{left:100*e.colors.a+\"%\"}},[o(\"div\",{staticClass:\"vue-color__c-alpha__picker\"})])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__c-checkerboard\",style:{background:e.bgStyle}})},staticRenderFns:[]}},function(e,t,o){var r=o(21);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(22);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(23);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(24);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(25);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(26);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(27);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(28);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(29);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(30);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(31);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(32);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)}])});\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\n/* styles */\n__webpack_require__(20)\n__webpack_require__(21)\n\nvar Component = __webpack_require__(3)(\n /* script */\n __webpack_require__(8),\n /* template */\n __webpack_require__(17),\n /* scopeId */\n \"data-v-1073f3cf\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n directives: [{\n name: \"on-clickaway\",\n rawName: \"v-on-clickaway\",\n value: (_vm.away),\n expression: \"away\"\n }],\n staticClass: \"fab-wrapper\",\n style: ([_vm.pos, {\n zIndex: _vm.zIndex\n }, {\n position: _vm.positionType\n }]),\n attrs: {\n \"id\": _vm.position + '-wrapper'\n }\n }, [_c('div', {\n staticClass: \"actions-container\",\n style: (_vm.listPos),\n attrs: {\n \"id\": _vm.position + '-action'\n }\n }, [_c('transition', {\n attrs: {\n \"name\": \"fab-actions-appear\",\n \"enter-active-class\": _vm.transitionEnter,\n \"leave-active-class\": _vm.transitionLeave\n }\n }, [_c('ul', {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: (_vm.toggle),\n expression: \"toggle\"\n }],\n staticClass: \"fab-list\"\n }, [_vm._l((_vm.actions), function(action) {\n return [_c('transition', {\n attrs: {\n \"enter-active-class\": \"animated quick zoomIn\",\n \"leave-active-class\": \"animated quick zoomOut\"\n },\n on: {\n \"after-enter\": _vm.afterActionsTransitionEnter\n }\n }, [(action.tooltip) ? [(_vm.toggle) ? _c('li', {\n directives: [{\n name: \"tooltip\",\n rawName: \"v-tooltip\",\n value: ({\n content: action.tooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip',\n trigger: _vm.tooltipTrigger\n }),\n expression: \"{ content: action.tooltip, placement: tooltipPosition, classes: 'fab-tooltip', trigger: tooltipTrigger}\"\n }],\n ref: \"actions\",\n refInFor: true,\n staticClass: \"pointer\",\n style: ({\n 'background-color': action.color || _vm.bgColor\n }),\n on: {\n \"click\": function($event) {\n _vm.toParent(action.name)\n }\n }\n }, [_c('i', {\n class: [_vm.actionIconSize, 'material-icons']\n }, [_vm._v(_vm._s(action.icon))])]) : _vm._e()] : [(_vm.toggle) ? _c('li', {\n staticClass: \"pointer\",\n style: ({\n 'background-color': action.color || _vm.bgColor\n }),\n on: {\n \"click\": function($event) {\n _vm.toParent(action.name)\n }\n }\n }, [_c('i', {\n class: [_vm.actionIconSize, 'material-icons']\n }, [_vm._v(_vm._s(action.icon))])]) : _vm._e()]], 2)]\n })], 2)])], 1), _vm._v(\" \"), (_vm.rippleShow) ? [(_vm.mainTooltip) ? [_c('div', {\n directives: [{\n name: \"ripple\",\n rawName: \"v-ripple\",\n value: (_vm.rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''),\n expression: \"rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''\"\n }, {\n name: \"tooltip\",\n rawName: \"v-tooltip\",\n value: ({\n content: _vm.mainTooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip'\n }),\n expression: \"{ content: mainTooltip, placement: tooltipPosition, classes: 'fab-tooltip' }\"\n }],\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n on: {\n \"click\": function($event) {\n _vm.toggle = !_vm.toggle\n }\n }\n }, [_c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons main']\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons close']\n }, [_vm._v(\"add\")])])] : [_c('div', {\n directives: [{\n name: \"ripple\",\n rawName: \"v-ripple\",\n value: (_vm.rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''),\n expression: \"rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''\"\n }],\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n on: {\n \"click\": function($event) {\n _vm.toggle = !_vm.toggle\n }\n }\n }, [_c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons main']\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons close']\n }, [_vm._v(\"add\")])])]] : [(_vm.mainTooltip) ? [_c('div', {\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n attrs: {\n \"v-tooltip\": {\n content: _vm.mainTooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip'\n }\n }\n }, [_c('i', {\n staticClass: \"material-icons md-36 main\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n staticClass: \"material-icons md-36 close\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(\"add\")])])] : [_c('div', {\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n })\n }, [_c('i', {\n staticClass: \"material-icons md-36 main\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n staticClass: \"material-icons md-36 close\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(\"add\")])])]]], 2)\n},staticRenderFns: []}\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n attrs: {\n \"id\": \"app\"\n }\n }, [_c('link', {\n attrs: {\n \"rel\": \"stylesheet\",\n \"href\": \"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.4.1/css/bulma.min.css\"\n }\n }), _vm._v(\" \"), _c('link', {\n attrs: {\n \"href\": \"https://fonts.googleapis.com/icon?family=Material+Icons\",\n \"rel\": \"stylesheet\"\n }\n }), _vm._v(\" \"), _c('a', {\n attrs: {\n \"href\": _vm.repoUrl\n }\n }, [_c('img', {\n staticStyle: {\n \"position\": \"absolute\",\n \"top\": \"0\",\n \"right\": \"0\",\n \"border\": \"0\"\n },\n attrs: {\n \"src\": \"https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67\",\n \"alt\": \"Fork me on GitHub\",\n \"data-canonical-src\": \"https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png\"\n }\n })]), _vm._v(\" \"), _vm._m(0), _vm._v(\" \"), _c('section', {\n staticClass: \"section\",\n staticStyle: {\n \"padding-top\": \".5rem\"\n }\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-8 is-offset-2\"\n }, [_c('div', {\n staticClass: \"box formated\"\n }, [_vm._m(1), _vm._v(\" \"), _c('div', {\n staticClass: \"content\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-4\",\n staticStyle: {\n \"display\": \"flex\",\n \"justify-content\": \"center\"\n }\n }, [_c('div', {\n staticClass: \"field is-pulled-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Color\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control\"\n }, [_c('chrome-picker', {\n model: {\n value: (_vm.colors),\n callback: function($$v) {\n _vm.colors = $$v\n },\n expression: \"colors\"\n }\n })], 1)])]), _vm._v(\" \"), _c('div', {\n staticClass: \"column\"\n }, [_c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Position\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expanded\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.position),\n expression: \"position\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.position = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.positions), function(pos) {\n return _c('option', [_vm._v(_vm._s(pos))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Position Type\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.positionType),\n expression: \"positionType\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.positionType = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.positionTypes), function(type) {\n return _c('option', [_vm._v(_vm._s(type))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Size\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.iconSizes),\n expression: \"iconSizes\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.iconSizes = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.sizes), function(size) {\n return _c('option', [_vm._v(_vm._s(size))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Tooltip event\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.tooltipEvent),\n expression: \"tooltipEvent\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.tooltipEvent = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.tooltipEvents), function(type) {\n return _c('option', [_vm._v(_vm._s(type))])\n }))])])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n Main Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.mainIcon),\n expression: \"mainIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.mainIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.mainIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.mainTooltip),\n expression: \"mainTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.mainTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.mainTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n First Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.firstIcon),\n expression: \"firstIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.firstIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.firstIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.firstTooltip),\n expression: \"firstTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.firstTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.firstTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n Second Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.secondIcon),\n expression: \"secondIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.secondIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.secondIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.secondTooltip),\n expression: \"secondTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.secondTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.secondTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"checkbox\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.enableRotation),\n expression: \"enableRotation\"\n }],\n attrs: {\n \"type\": \"checkbox\"\n },\n domProps: {\n \"checked\": Array.isArray(_vm.enableRotation) ? _vm._i(_vm.enableRotation, null) > -1 : (_vm.enableRotation)\n },\n on: {\n \"__c\": function($event) {\n var $$a = _vm.enableRotation,\n $$el = $event.target,\n $$c = $$el.checked ? (true) : (false);\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$c) {\n $$i < 0 && (_vm.enableRotation = $$a.concat($$v))\n } else {\n $$i > -1 && (_vm.enableRotation = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.enableRotation = $$c\n }\n }\n }\n }), _vm._v(\"\\n Enable Rotation\\n \")])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column has-text-centered\"\n }, [_c('a', {\n attrs: {\n \"href\": _vm.repoUrl\n }\n }, [_vm._v(\"Installation & Code usage\")])])])])])])])])]), _vm._v(\" \"), _c('footer', {\n staticClass: \"footer\"\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"content has-text-centered\"\n }, [_c('p', [_c('strong', [_vm._v(\"Floating Action Button Vue Component\")]), _vm._v(\" by \"), _c('a', {\n attrs: {\n \"href\": _vm.teamUrl\n }\n }, [_vm._v(\"Pygmy Team\")]), _vm._v(\".\\n \")]), _vm._v(\" \"), _vm._m(2)])])]), _vm._v(\" \"), _c('fab', {\n attrs: {\n \"position\": _vm.position,\n \"icon-size\": _vm.iconSizes,\n \"position-type\": _vm.positionType,\n \"bg-color\": _vm.colors.hex,\n \"main-icon\": _vm.mainIcon,\n \"main-tooltip\": _vm.mainTooltip,\n \"actions\": [{\n name: 'alertMe',\n icon: _vm.firstIcon,\n tooltip: _vm.firstTooltip,\n color: '#d11014'\n }, {\n name: 'alertMe',\n icon: _vm.secondIcon,\n tooltip: _vm.secondTooltip\n }],\n \"fixed-tooltip\": _vm.fixedTooltip,\n \"enable-rotation\": _vm.enableRotation\n },\n on: {\n \"alertMe\": _vm.alert\n }\n })], 1)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"hero\"\n }, [_c('div', {\n staticClass: \"hero-body\",\n staticStyle: {\n \"padding\": \"1rem 0\"\n }\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-8 is-offset-3\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n }, [_c('div', {\n staticClass: \"is-pulled-left\"\n }, [_c('img', {\n attrs: {\n \"width\": \"350px\",\n \"src\": __webpack_require__(12)\n }\n })]), _vm._v(\" \"), _c('div', {\n staticClass: \"is-pulled-left\",\n staticStyle: {\n \"text-align\": \"left\"\n }\n }, [_c('h1', {\n staticClass: \"title text-medium-grey\",\n staticStyle: {\n \"margin-bottom\": \".5rem\"\n }\n }, [_vm._v(\"\\n Floating Action Button\\n \")]), _vm._v(\" \"), _c('hr', {\n staticClass: \"is-marginless\"\n }), _vm._v(\" \"), _c('h2', {\n staticClass: \"subtitle text-light-grey\",\n staticStyle: {\n \"margin-top\": \".5rem\"\n }\n }, [_vm._v(\"\\n A Vue Component\\n \"), _c('span', {\n staticClass: \"is-pulled-right\"\n }, [_c('a', {\n staticClass: \"github-button\",\n attrs: {\n \"href\": \"https://github.com/PygmySlowLoris/vue-fab\",\n \"data-icon\": \"octicon-star\",\n \"data-size\": \"large\",\n \"aria-label\": \"Star PygmySlowLoris/vue-fab on GitHub\"\n }\n }, [_vm._v(\"Star\")])])])])])])])])])\n},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticClass: \"heading\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column\"\n }, [_c('i', {\n staticClass: \"material-icons top-left\"\n }, [_vm._v(\"code\")]), _vm._v(\" \"), _c('span', {\n staticClass: \"is-pulled-right\"\n }, [_c('b', [_vm._v(\"Example\")])])])])])\n},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('p', [_c('small', [_vm._v(\"Used dependencies for this demo: \"), _c('a', {\n attrs: {\n \"href\": \"http://bulma.io\"\n }\n }, [_vm._v(\"bulma\")]), _vm._v(\" | \"), _c('a', {\n attrs: {\n \"href\": \"https://github.com/xiaokaike/vue-color\"\n }\n }, [_vm._v(\"vue-color\")])])])\n}]}\n\n/***/ }),\n/* 19 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n bind: function(el, binding){\n\n // Default values.\n const props = {\n event: 'click',\n transition: 600\n };\n\n setProps(Object.keys(binding.modifiers),props);\n\n el.addEventListener(props.event, function(event) {\n rippler(event, el, binding.value);\n });\n\n var bg = binding.value || 'rgba(0, 0, 0, 0.35)';\n\n function rippler(event, el) {\n var target = el;\n\n // Get necessary variables\n var rect = target.getBoundingClientRect(),\n left = rect.left,\n top = rect.top,\n width = target.offsetWidth,\n height = target.offsetHeight,\n dx = event.clientX - left,\n dy = event.clientY - top,\n maxX = Math.max(dx, width - dx),\n maxY = Math.max(dy, height - dy),\n style = window.getComputedStyle(target),\n radius = Math.sqrt((maxX * maxX) + (maxY * maxY));\n\n // Create the ripple and its container\n var ripple = document.createElement(\"div\"),\n rippleContainer = document.createElement(\"div\");\n\n //Styles for ripple\n ripple.style.marginTop= '0px';\n ripple.style.marginLeft= '0px';\n ripple.style.width= '1px';\n ripple.style.height= '1px';\n ripple.style.transition= 'all ' + props.transition + 'ms cubic-bezier(0.4, 0, 0.2, 1)';\n ripple.style.borderRadius= '50%';\n ripple.style.pointerEvents= 'none';\n ripple.style.position= 'relative';\n ripple.style.zIndex= '9999';\n ripple.style.backgroundColor = bg;\n\n //Styles for rippleContainer\n rippleContainer.style.position= 'absolute';\n rippleContainer.style.left = '0';\n rippleContainer.style.top = '0';\n rippleContainer.style.height = '0';\n rippleContainer.style.width = '0';\n rippleContainer.style.pointerEvents = 'none';\n rippleContainer.style.overflow = 'hidden';\n\n rippleContainer.appendChild(ripple);\n document.body.appendChild(rippleContainer);\n\n ripple.style.marginLeft = dx + \"px\";\n ripple.style.marginTop = dy + \"px\";\n\n rippleContainer.style.left = left + (((window.pageXOffset || document.scrollLeft) - (document.clientLeft || 0)) || 0) + \"px\";\n rippleContainer.style.top = top + (((window.pageYOffset || document.scrollTop) - (document.clientTop || 0)) || 0) + \"px\";\n rippleContainer.style.width = width + \"px\";\n rippleContainer.style.height = height + \"px\";\n rippleContainer.style.borderTopLeftRadius = style.borderTopLeftRadius;\n rippleContainer.style.borderTopRightRadius = style.borderTopRightRadius;\n rippleContainer.style.borderBottomLeftRadius = style.borderBottomLeftRadius;\n rippleContainer.style.borderBottomRightRadius = style.borderBottomRightRadius;\n\n setTimeout(function() {\n\n ripple.style.width = radius * 2 + \"px\";\n ripple.style.height = radius * 2 + \"px\";\n ripple.style.marginLeft = dx - radius + \"px\";\n ripple.style.marginTop = dy - radius + \"px\";\n }, 0);\n\n setTimeout(function() {\n ripple.style.backgroundColor = \"rgba(0, 0, 0, 0)\";\n }, 250);\n\n setTimeout(function() {\n ripple.remove();\n rippleContainer.remove();\n }, 650);\n }\n }\n});\n\nfunction setProps(modifiers,props) {\n modifiers.forEach(function(item) {\n if(isNaN(Number(item)))\n props.event = item;\n else\n props.transition = item;\n });\n}\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a \n\n\n\n// WEBPACK FOOTER //\n// App.vue?00c64c79","\n \n
\n
\n \n \n \n \n - \n {{action.icon}}\n
\n \n \n - \n {{action.icon}}\n
\n \n \n \n
\n \n
\n
\n \n \n {{mainIcon}}\n add\n
\n \n \n \n {{mainIcon}}\n add\n
\n \n \n
\n \n \n {{mainIcon}}\n add\n
\n \n \n \n {{mainIcon}}\n add\n
\n \n \n
\n\n\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// FAB.vue?1695a6b9","exports = module.exports = require(\"../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \".fab-tooltip.tooltip{display:block!important;padding:4px;z-index:10000}.fab-tooltip.tooltip .tooltip-inner{background:#333;color:#fff;border-radius:0;padding:5px 10px 4px}.fab-tooltip.tooltip tooltip-arrow{display:none}.fab-tooltip.tooltip[aria-hidden=true]{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s}.fab-tooltip.tooltip[aria-hidden=false]{visibility:visible;opacity:1;transition:opacity .15s}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/vue-loader/lib/style-compiler?{\"id\":\"data-v-1073f3cf\",\"scoped\":false,\"hasInlineConfig\":false}!./~/vue-loader/lib/selector.js?type=styles&index=0!./src/FAB.vue\n// module id = 9\n// module chunks = 0","exports = module.exports = require(\"../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \".animated.quick[data-v-1073f3cf]{-webkit-animation-duration:.7s!important;animation-duration:.7s!important}.fab-wrapper[data-v-1073f3cf]{z-index:999}.fab-main[data-v-1073f3cf]{border-radius:100px;padding:30px;position:relative;overflow:hidden;display:flex;align-items:center;box-shadow:0 10px 10px rgba(0,0,0,.2),0 4px 4px rgba(0,0,0,.15);z-index:2;justify-content:center}.fab-main .material-icons[data-v-1073f3cf]{color:#fff;transition:all .4s;margin:0 auto}.fab-main .material-icons.main[data-v-1073f3cf]{opacity:1;position:absolute}.fab-main .material-icons.close[data-v-1073f3cf]{opacity:0;position:absolute}.fab-main .material-icons.main.rotate[data-v-1073f3cf]{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:0;transition:opacity .3s ease-in,transform .4s}.fab-main .material-icons.close.rotate[data-v-1073f3cf]{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:1;transition:opacity .3s ease-in,transform .4s}.fab-list[data-v-1073f3cf]{position:relative;z-index:1;margin:2vh 0;display:flex;flex-direction:column;align-items:center}.fab-list li[data-v-1073f3cf]{padding:10px;margin-top:2vh;display:flex;align-items:center;border-radius:100px;box-shadow:0 10px 10px rgba(0,0,0,.2),0 4px 4px rgba(0,0,0,.15)}.fab-list li .material-icons[data-v-1073f3cf]{color:#fff;margin:0 auto}.pointer[data-v-1073f3cf]{cursor:pointer}ul[data-v-1073f3cf]{list-style-type:none;padding:0!important}.fab-wrapper .actions-container[data-v-1073f3cf]{overflow:hidden;z-index:0;position:relative}.material-icons.md-18[data-v-1073f3cf]{font-size:18px}.material-icons.md-24[data-v-1073f3cf]{font-size:24px}.material-icons.md-36[data-v-1073f3cf]{font-size:36px}.material-icons.md-48[data-v-1073f3cf]{font-size:48px}.material-icons.md-dark[data-v-1073f3cf]{color:rgba(0,0,0,.54)}.material-icons.md-dark.md-inactive[data-v-1073f3cf]{color:rgba(0,0,0,.26)}.material-icons.md-light[data-v-1073f3cf]{color:#fff}.material-icons.md-light.md-inactive[data-v-1073f3cf]{color:hsla(0,0%,100%,.3)}@media screen and (max-width:768px){.fab-list[data-v-1073f3cf]{margin:2vh 0}}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/vue-loader/lib/style-compiler?{\"id\":\"data-v-1073f3cf\",\"scoped\":true,\"hasInlineConfig\":false}!./~/vue-loader/lib/selector.js?type=styles&index=1!./src/FAB.vue\n// module id = 10\n// module chunks = 0","exports = module.exports = require(\"../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \"#app[data-v-d877a75c]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}.pointer[data-v-d877a75c]{cursor:pointer}h1[data-v-d877a75c],h2[data-v-d877a75c]{font-weight:400}hr[data-v-d877a75c]{background-color:transparent;border:none;display:block;height:inherit;margin:1.5rem 0;border-top:1px dashed}li[data-v-d877a75c]{display:inline-block;margin:0 10px}a[data-v-d877a75c]{color:#0b99b9;text-decoration:underline}.text-medium-grey[data-v-d877a75c]{color:#333}.text-light-grey[data-v-d877a75c]{color:#888}.box.formated[data-v-d877a75c]{position:relative;padding:0}.box.formated .heading[data-v-d877a75c]{font-size:1rem;text-transform:capitalize;padding:.8rem 1.5rem;background-color:#fafafa}.box.formated .content[data-v-d877a75c]{padding:1rem 2rem}i.top-left[data-v-d877a75c]{position:absolute;left:1.5rem;top:.8rem}.vertical-separator[data-v-d877a75c]{display:flex;justify-content:space-around}.vertical-separator .line[data-v-d877a75c]{border-right:1px solid #ccc}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/vue-loader/lib/style-compiler?{\"id\":\"data-v-d877a75c\",\"scoped\":true,\"hasInlineConfig\":false}!./~/vue-loader/lib/selector.js?type=styles&index=0!./demo/App.vue\n// module id = 11\n// module chunks = 0","module.exports = \"data:image/png;base64,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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./demo/assets/logo.png\n// module id = 12\n// module chunks = 0","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 4);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tooltip_js__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(1);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return defaultOptions; });\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\nvar positions = ['top', 'top-start', 'top-end', 'right', 'right-start', 'right-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end'];\n\nvar defaultOptions = {\n defaultPlacement: 'top',\n defaultClass: 'vue-tooltip-theme',\n defaultTemplate: '',\n defaultDelay: 0,\n defaultTrigger: 'hover focus',\n defaultOffset: 0,\n defaultContainer: 'body'\n};\n\nfunction getOptions(options) {\n return {\n placement: options.placement || directive.options.defaultPlacement,\n delay: options.delay || directive.options.defaultDelay,\n template: options.template || directive.options.defaultTemplate,\n trigger: options.trigger || directive.options.defaultTrigger,\n offset: options.offset || directive.options.defaultOffset,\n container: options.container || directive.options.defaultContainer\n };\n}\n\nfunction getPlacement(value, modifiers) {\n var placement = value.placement;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = positions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var pos = _step.value;\n\n if (modifiers[pos]) {\n placement = pos;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return placement;\n}\n\nvar SuperTooltip = function (_Tooltip) {\n _inherits(SuperTooltip, _Tooltip);\n\n function SuperTooltip() {\n _classCallCheck(this, SuperTooltip);\n\n return _possibleConstructorReturn(this, (SuperTooltip.__proto__ || Object.getPrototypeOf(SuperTooltip)).apply(this, arguments));\n }\n\n _createClass(SuperTooltip, [{\n key: 'setClasses',\n value: function setClasses(classes) {\n var el = this._tooltipNode;\n\n if (el) {\n var oldClasses = this._oldClasses;\n if (classes) {\n if (oldClasses) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"a\" /* replaceClasses */])(el, classes, oldClasses);\n } else {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"b\" /* addClasses */])(el, classes);\n }\n } else if (oldClasses) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"c\" /* removeClasses */])(el, oldClasses);\n }\n this._oldClasses = classes;\n } else {\n this._pendingClasses = classes;\n }\n\n this._classes = classes;\n }\n }, {\n key: 'setContent',\n value: function setContent(content) {\n this.options.title = content;\n if (this._tooltipNode) {\n var el = this._tooltipNode.querySelector(this.innerSelector);\n\n if (el) {\n if (!content) {\n el.innerHTML = '';\n } else {\n el.innerHTML = content;\n }\n\n this.popperInstance.update();\n }\n }\n }\n }, {\n key: 'setOptions',\n value: function setOptions(options) {\n options = getOptions(options);\n\n var needPopperUpdate = false;\n var needRestart = false;\n\n if (this.options.offset !== options.offset || this.options.placement !== options.placement) {\n needPopperUpdate = true;\n }\n\n if (this.options.template !== options.template || this.options.trigger !== options.trigger || this.options.container !== options.container) {\n needRestart = true;\n }\n\n for (var key in options) {\n this.options[key] = options[key];\n }\n\n if (this._tooltipNode) {\n if (needRestart) {\n var isOpen = this._isOpen;\n\n this.dispose();\n\n var events = typeof this.options.trigger === 'string' ? options.trigger.split(' ').filter(function (trigger) {\n return ['click', 'hover', 'focus'].indexOf(trigger) !== -1;\n }) : [];\n this._setEventListeners(this.reference, events, this.options);\n\n this.setClasses(this._classes);\n\n if (isOpen) {\n this.show();\n }\n } else if (needPopperUpdate) {\n this.popperInstance.update();\n }\n }\n }\n }, {\n key: '_dispose',\n value: function _dispose() {\n var _this2 = this;\n\n this._events.forEach(function (_ref) {\n var func = _ref.func,\n event = _ref.event;\n\n _this2.reference.removeEventListener(event, func);\n });\n this._events = [];\n _get(SuperTooltip.prototype.__proto__ || Object.getPrototypeOf(SuperTooltip.prototype), '_dispose', this).call(this);\n }\n }, {\n key: '_show',\n value: function _show() {\n var _get2,\n _this3 = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n (_get2 = _get(SuperTooltip.prototype.__proto__ || Object.getPrototypeOf(SuperTooltip.prototype), '_show', this)).call.apply(_get2, [this].concat(args));\n\n if (this._pendingClasses) {\n this.setClasses(this._pendingClasses);\n this._pendingClasses = null;\n }\n\n // Fix position\n setTimeout(function () {\n _this3.popperInstance.update();\n }, 0);\n }\n }]);\n\n return SuperTooltip;\n}(__WEBPACK_IMPORTED_MODULE_0_tooltip_js__[\"a\" /* default */]);\n\nfunction createTooltip(el, value, modifiers) {\n var content = value.content || value;\n var classes = value.classes || directive.options.defaultClass;\n\n var tooltip = el._tooltip = new SuperTooltip(el, _extends({\n title: content,\n html: true\n }, getOptions(_extends({}, value, {\n placement: getPlacement(value, modifiers)\n }))));\n tooltip.setClasses(classes);\n}\n\nfunction destroyTooltip(el) {\n if (el._tooltip) {\n el._tooltip.dispose();\n delete el._tooltip;\n }\n}\n\nvar directive = {\n options: defaultOptions,\n bind: function bind(el, _ref2) {\n var value = _ref2.value,\n modifiers = _ref2.modifiers;\n\n var content = value && value.content || value;\n destroyTooltip(el);\n if (content) {\n createTooltip(el, value, modifiers);\n }\n },\n update: function update(el, _ref3) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue,\n modifiers = _ref3.modifiers;\n\n var content = value && value.content || value;\n if (!content) {\n destroyTooltip(el);\n } else if (el._tooltip) {\n var tooltip = el._tooltip;\n // Content\n tooltip.setContent(content);\n // CSS Classes\n tooltip.setClasses(value && value.classes || directive.options.defaultClass);\n // Options\n tooltip.setOptions(_extends({}, value, {\n placement: getPlacement(value, modifiers)\n }));\n } else {\n createTooltip(el, value, modifiers);\n }\n },\n unbind: function unbind(el) {\n destroyTooltip(el);\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"b\"] = directive;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = addClasses;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = removeClasses;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = replaceClasses;\n\nfunction convertToArray(value) {\n if (typeof value === 'string') {\n value = value.split(' ');\n }\n return value;\n}\n\nfunction addClasses(el, classes) {\n classes = convertToArray(classes);\n classes.forEach(function (c) {\n el.classList.add(c);\n });\n}\n\nfunction removeClasses(el, classes) {\n classes = convertToArray(classes);\n classes.forEach(function (c) {\n el.classList.remove(c);\n });\n}\n\nfunction replaceClasses(el, newClasses, oldClasses) {\n removeClasses(el, oldClasses);\n addClasses(el, newClasses);\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar nativeHints = ['native code', '[object MutationObserverConstructor]'];\n\n/**\n * Determine if a function is implemented natively (as opposed to a polyfill).\n * @method\n * @memberof Popper.Utils\n * @argument {Function | undefined} fn the function to check\n * @returns {Boolean}\n */\nvar isNative = function isNative(fn) {\n return nativeHints.some(function (hint) {\n return (fn || '').toString().indexOf(hint) > -1;\n });\n};\n\nvar isBrowser = typeof window !== 'undefined';\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var scheduled = false;\n var i = 0;\n var elem = document.createElement('span');\n\n // MutationObserver provides a mechanism for scheduling microtasks, which\n // are scheduled *before* the next task. This gives us a way to debounce\n // a function but ensure it's called *before* the next paint.\n var observer = new MutationObserver(function () {\n fn();\n scheduled = false;\n });\n\n observer.observe(elem, { attributes: true });\n\n return function () {\n if (!scheduled) {\n scheduled = true;\n elem.setAttribute('x-index', i);\n i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8\n }\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\n// It's common for MutationObserver polyfills to be seen in the wild, however\n// these rely on Mutation Events which only occur when an element is connected\n// to the DOM. The algorithm used in this module does not use a connected element,\n// and so we must ensure that a *native* MutationObserver is available.\nvar supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsNativeMutationObserver ? microtaskDebounce : taskDebounce;\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1) {\n return window.document.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || element.firstElementChild.offsetParent === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element && element.offsetParent;\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return window.document.documentElement;\n }\n\n return offsetParent;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return window.document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = window.document.documentElement;\n var scrollingElement = window.document.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return +styles['border' + sideA + 'Width'].split('px')[0] + +styles['border' + sideB + 'Width'].split('px')[0];\n}\n\nfunction getWindowSizes() {\n var body = window.document.body;\n var html = window.document.documentElement;\n return {\n height: Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight),\n width: Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth)\n };\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Tells if you are running Internet Explorer 10\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean} isIE10\n */\nvar isIE10 = undefined;\n\nvar isIE10$1 = function isIE10$1() {\n if (isIE10 === undefined) {\n isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n }\n return isIE10;\n};\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n if (isIE10$1()) {\n try {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } catch (err) {}\n } else {\n rect = element.getBoundingClientRect();\n }\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var isIE10 = isIE10$1();\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top,\n left: childrenRect.left - parentRect.left,\n width: childrenRect.width,\n height: childrenRect.height\n });\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (isHTML || parent.nodeName === 'BODY') {\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = isIE10 && isHTML ? 0 : +styles.borderTopWidth.split('px')[0];\n var borderLeftWidth = isIE10 && isHTML ? 0 : +styles.borderLeftWidth.split('px')[0];\n var marginTop = isIE10 && isHTML ? 0 : +styles.marginTop.split('px')[0];\n var marginLeft = isIE10 && isHTML ? 0 : +styles.marginLeft.split('px')[0];\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (parent.contains(scrollParent) && (isIE10 || scrollParent.nodeName !== 'BODY')) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var html = window.document.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = getScroll(html);\n var scrollLeft = getScroll(html, 'left');\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = { top: 0, left: 0 };\n var offsetParent = findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(popper));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = window.document.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = window.document.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, 0, boundariesElement);\n\n var sides = {\n top: refRect.top - boundaries.top,\n right: boundaries.right - refRect.right,\n bottom: boundaries.bottom - refRect.bottom,\n left: refRect.left - boundaries.left\n };\n\n var computedPlacement = Object.keys(sides).sort(function (a, b) {\n return sides[b] - sides[a];\n })[0];\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var commonOffsetParent = findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier.function) {\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier.function || modifier.fn;\n if (modifier.enabled && isFunction(fn)) {\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n data.offsets.popper.position = 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'webkit', 'moz', 'o'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length - 1; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof window.document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.left = '';\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? window : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n window.addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n window.removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n window.cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data, options) {\n // apply the final offsets to the popper\n // NOTE: 1 DOM access here\n var styles = {\n position: data.offsets.popper.position\n };\n\n var attributes = {\n 'x-placement': data.placement\n };\n\n // round top and left to avoid blurry text\n var left = Math.round(data.offsets.popper.left);\n var top = Math.round(data.offsets.popper.top);\n\n // if gpuAcceleration is set to true and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n if (options.gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles.top = 0;\n styles.left = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `left` and `top` properties\n styles.left = left;\n styles.top = top;\n styles.willChange = 'top, left';\n }\n\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, _extends({}, styles, data.styles));\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, _extends({}, attributes, data.attributes));\n\n // if the arrow style has been computed, apply the arrow style\n if (data.offsets.arrow) {\n setStyles(data.arrowElement, data.offsets.arrow);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement);\n\n popper.setAttribute('x-placement', placement);\n return options;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var popper = getClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var side = isVertical ? 'top' : 'left';\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n var sideValue = center - getClientRect(data.offsets.popper)[side];\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {};\n data.offsets.arrow[side] = sideValue;\n data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = getClientRect(data.offsets.popper);\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n data.offsets.popper = getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement);\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var popper = getClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = getClientRect(data.offsets.popper);\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var reference = data.offsets.reference;\n var popper = getClientRect(data.offsets.popper);\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var popper = getClientRect(data.offsets.popper);\n var reference = getClientRect(data.offsets.reference);\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[placement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} priority=['left', 'right', 'top', 'bottom']\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arro] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar DEFAULTS = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreateCallback}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdateCallback}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreateCallback\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdateCallback\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper =\n/**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [DEFAULTS](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\nfunction Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n this.update = update;\n this.destroy = destroy;\n this.enableEventListeners = enableEventListeners;\n this.disableEventListeners = disableEventListeners;\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference.jquery ? reference[0] : reference;\n this.popper = popper.jquery ? popper[0] : popper;\n\n // make sure to apply the popper position before any computation\n setStyles(this.popper, { position: 'absolute' });\n\n // refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(Popper.Defaults.modifiers).map(function (name) {\n return _extends({\n name: name\n }, Popper.Defaults.modifiers[name]);\n });\n\n // assign default values to modifiers, making sure to override them with\n // the ones defined by user\n this.modifiers = this.modifiers.map(function (defaultConfig) {\n var userConfig = options.modifiers && options.modifiers[defaultConfig.name] || {};\n return _extends({}, defaultConfig, userConfig);\n });\n\n // add custom modifiers to the modifiers list\n if (options.modifiers) {\n this.options.modifiers = _extends({}, Popper.Defaults.modifiers, options.modifiers);\n Object.keys(options.modifiers).forEach(function (name) {\n // take in account only custom modifiers\n if (Popper.Defaults.modifiers[name] === undefined) {\n var modifier = options.modifiers[name];\n modifier.name = name;\n _this.modifiers.push(modifier);\n }\n });\n }\n\n // sort the modifiers by order\n this.modifiers = this.modifiers.sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n};\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = DEFAULTS;\n\n/* harmony default export */ __webpack_exports__[\"a\"] = Popper;\n//# sourceMappingURL=popper.js.map\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_popper_js__ = __webpack_require__(2);\n\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {*} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar DEFAULT_OPTIONS = {\n container: false,\n delay: 0,\n html: false,\n placement: 'top',\n title: '',\n template: '',\n trigger: 'hover focus',\n offset: 0\n};\n\nvar Tooltip = function () {\n /**\n * Create a new Tooltip.js instance\n * @class Tooltip\n * @param {HTMLElement} reference - The reference element used to position the tooltip\n * @param {Object} options\n * @param {String} options.placement=bottom\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -end),\n * left(-start, -end)`\n *\n * @param {HTMLElement} reference - The DOM node used as reference of the tooltip (it can be a jQuery element).\n * @param {Object} options - Configuration of the tooltip\n * @param {HTMLElement|String|false} options.container=false - Append the tooltip to a specific element.\n * @param {Number|Object} options.delay=0\n * Delay showing and hiding the tooltip (ms) - does not apply to manual trigger type.\n * If a number is supplied, delay is applied to both hide/show.\n * Object structure is: `{ show: 500, hide: 100 }`\n * @param {Boolean} options.html=false - Insert HTML into the tooltip. If false, the content will inserted with `innerText`.\n * @param {String|PlacementFunction} options.placement='top' - One of the allowed placements, or a function returning one of them.\n * @param {String} options.template=''\n * Base HTML to used when creating the tooltip.\n * The tooltip's `title` will be injected into the `.tooltip-inner` or `.tooltip__inner`.\n * `.tooltip-arrow` or `.tooltip__arrow` will become the tooltip's arrow.\n * The outermost wrapper element should have the `.tooltip` class.\n * @param {String|HTMLElement|TitleFunction} options.title='' - Default title value if `title` attribute isn't present.\n * @param {String} options.trigger='hover focus'\n * How tooltip is triggered - click | hover | focus | manual.\n * You may pass multiple triggers; separate them with a space. `manual` cannot be combined with any other trigger.\n * @param {HTMLElement} options.boundariesElement\n * The element used as boundaries for the tooltip. For more information refer to Popper.js'\n * [boundariesElement docs](https://popper.js.org/popper-documentation.html)\n * @param {Number|String} options.offset=0 - Offset of the tooltip relative to its reference. For more information refer to Popper.js'\n * [offset docs](https://popper.js.org/popper-documentation.html)\n * @return {Object} instance - The generated tooltip instance\n */\n function Tooltip(reference, options) {\n classCallCheck(this, Tooltip);\n\n _initialiseProps.call(this);\n\n // apply user options over default ones\n options = _extends({}, DEFAULT_OPTIONS, options);\n\n reference.jquery && (reference = reference[0]);\n\n // cache reference and options\n this.reference = reference;\n this.options = options;\n\n // get events list\n var events = typeof options.trigger === 'string' ? options.trigger.split(' ').filter(function (trigger) {\n return ['click', 'hover', 'focus'].indexOf(trigger) !== -1;\n }) : [];\n\n // set initial state\n this._isOpen = false;\n\n // set event listeners\n this._setEventListeners(reference, events, options);\n }\n\n //\n // Public methods\n //\n\n /**\n * Reveals an element's tooltip. This is considered a \"manual\" triggering of the tooltip.\n * Tooltips with zero-length titles are never displayed.\n * @memberof Tooltip\n */\n\n /**\n * Hides an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @memberof Tooltip\n */\n\n /**\n * Hides and destroys an element’s tooltip.\n * @memberof Tooltip\n */\n\n /**\n * Toggles an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @memberof Tooltip\n */\n\n //\n // Defaults\n //\n\n\n //\n // Private methods\n //\n\n createClass(Tooltip, [{\n key: '_create',\n\n /**\n * Creates a new tooltip node\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} reference\n * @param {String} template\n * @param {String|HTMLElement|TitleFunction} title\n * @param {Boolean} allowHtml\n * @return {HTMLelement} tooltipNode\n */\n value: function _create(reference, template, title, allowHtml) {\n // create tooltip element\n var tooltipGenerator = window.document.createElement('div');\n tooltipGenerator.innerHTML = template;\n var tooltipNode = tooltipGenerator.childNodes[0];\n\n // add unique ID to our tooltip (needed for accessibility reasons)\n tooltipNode.id = 'tooltip_' + Math.random().toString(36).substr(2, 10);\n\n // set initial `aria-hidden` state to `false` (it's visible!)\n tooltipNode.setAttribute('aria-hidden', 'false');\n\n // add title to tooltip\n var titleNode = tooltipGenerator.querySelector(this.innerSelector);\n if (title.nodeType === 1) {\n // if title is a node, append it only if allowHtml is true\n allowHtml && titleNode.appendChild(title);\n } else if (isFunction(title)) {\n // if title is a function, call it and set innerText or innerHtml depending by `allowHtml` value\n var titleText = title.call(reference);\n allowHtml ? titleNode.innerHTML = titleText : titleNode.innerText = titleText;\n } else {\n // if it's just a simple text, set innerText or innerHtml depending by `allowHtml` value\n allowHtml ? titleNode.innerHTML = title : titleNode.innerText = title;\n }\n\n // return the generated tooltip node\n return tooltipNode;\n }\n }, {\n key: '_show',\n value: function _show(reference, options) {\n // don't show if it's already visible\n if (this._isOpen) {\n return this;\n }\n this._isOpen = true;\n\n // if the tooltipNode already exists, just show it\n if (this._tooltipNode) {\n this._tooltipNode.style.display = '';\n this._tooltipNode.setAttribute('aria-hidden', 'false');\n this.popperInstance.update();\n return this;\n }\n\n // get title\n var title = reference.getAttribute('title') || options.title;\n\n // don't show tooltip if no title is defined\n if (!title) {\n return this;\n }\n\n // create tooltip node\n var tooltipNode = this._create(reference, options.template, title, options.html);\n\n // Add `aria-describedby` to our reference element for accessibility reasons\n tooltipNode.setAttribute('aria-describedby', tooltipNode.id);\n\n // append tooltip to container\n var container = this._findContainer(options.container, reference);\n\n this._append(tooltipNode, container);\n\n var popperOptions = {\n placement: options.placement,\n arrowElement: this.arrowSelector\n };\n\n if (options.boundariesElement) {\n popperOptions.boundariesElement = options.boundariesElement;\n }\n\n this.popperInstance = new __WEBPACK_IMPORTED_MODULE_0_popper_js__[\"a\" /* default */](reference, tooltipNode, popperOptions);\n\n this._tooltipNode = tooltipNode;\n\n return this;\n }\n }, {\n key: '_hide',\n value: function _hide() /*reference, options*/{\n // don't hide if it's already hidden\n if (!this._isOpen) {\n return this;\n }\n\n this._isOpen = false;\n\n // hide tooltipNode\n this._tooltipNode.style.display = 'none';\n this._tooltipNode.setAttribute('aria-hidden', 'true');\n\n return this;\n }\n }, {\n key: '_dispose',\n value: function _dispose() {\n var _this = this;\n\n if (this._tooltipNode) {\n this._hide();\n\n // destroy instance\n this.popperInstance.destroy();\n\n // remove event listeners\n this._events.forEach(function (_ref) {\n var func = _ref.func,\n event = _ref.event;\n\n _this._tooltipNode.removeEventListener(event, func);\n });\n this._events = [];\n\n // destroy tooltipNode\n this._tooltipNode.parentNode.removeChild(this._tooltipNode);\n this._tooltipNode = null;\n }\n return this;\n }\n }, {\n key: '_findContainer',\n value: function _findContainer(container, reference) {\n // if container is a query, get the relative element\n if (typeof container === 'string') {\n container = window.document.querySelector(container);\n } else if (container === false) {\n // if container is `false`, set it to reference parent\n container = reference.parentNode;\n }\n return container;\n }\n\n /**\n * Append tooltip to container\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} tooltip\n * @param {HTMLElement|String|false} container\n */\n\n }, {\n key: '_append',\n value: function _append(tooltipNode, container) {\n container.appendChild(tooltipNode);\n }\n }, {\n key: '_setEventListeners',\n value: function _setEventListeners(reference, events, options) {\n var _this2 = this;\n\n var directEvents = [];\n var oppositeEvents = [];\n\n events.forEach(function (event) {\n switch (event) {\n case 'hover':\n directEvents.push('mouseenter');\n oppositeEvents.push('mouseleave');\n case 'focus':\n directEvents.push('focus');\n oppositeEvents.push('blur');\n case 'click':\n directEvents.push('click');\n oppositeEvents.push('click');\n }\n });\n\n // schedule show tooltip\n directEvents.forEach(function (event) {\n var func = function func(evt) {\n if (_this2._isOpen === true) {\n return;\n }\n evt.usedByTooltip = true;\n _this2._scheduleShow(reference, options.delay, options, evt);\n };\n _this2._events.push({ event: event, func: func });\n reference.addEventListener(event, func);\n });\n\n // schedule hide tooltip\n oppositeEvents.forEach(function (event) {\n var func = function func(evt) {\n if (evt.usedByTooltip === true) {\n return;\n }\n _this2._scheduleHide(reference, options.delay, options, evt);\n };\n _this2._events.push({ event: event, func: func });\n reference.addEventListener(event, func);\n });\n }\n }, {\n key: '_scheduleShow',\n value: function _scheduleShow(reference, delay, options /*, evt */) {\n var _this3 = this;\n\n // defaults to 0\n var computedDelay = delay && delay.show || delay || 0;\n window.setTimeout(function () {\n return _this3._show(reference, options);\n }, computedDelay);\n }\n }, {\n key: '_scheduleHide',\n value: function _scheduleHide(reference, delay, options, evt) {\n var _this4 = this;\n\n // defaults to 0\n var computedDelay = delay && delay.hide || delay || 0;\n window.setTimeout(function () {\n if (_this4._isOpen === false) {\n return;\n }\n if (!document.body.contains(_this4._tooltipNode)) {\n return;\n }\n\n // if we are hiding because of a mouseleave, we must check that the new\n // reference isn't the tooltip, because in this case we don't want to hide it\n if (evt.type === 'mouseleave') {\n var isSet = _this4._setTooltipNodeEvent(evt, reference, delay, options);\n\n // if we set the new event, don't hide the tooltip yet\n // the new event will take care to hide it if necessary\n if (isSet) {\n return;\n }\n }\n\n _this4._hide(reference, options);\n }, computedDelay);\n }\n }]);\n return Tooltip;\n}();\n\n/**\n * Placement function, its context is the Tooltip instance.\n * @memberof Tooltip\n * @callback PlacementFunction\n * @param {HTMLElement} tooltip - tooltip DOM node.\n * @param {HTMLElement} reference - reference DOM node.\n * @return {String} placement - One of the allowed placement options.\n */\n\n/**\n * Title function, its context is the Tooltip instance.\n * @memberof Tooltip\n * @callback TitleFunction\n * @return {String} placement - The desired title.\n */\n\nvar _initialiseProps = function _initialiseProps() {\n var _this5 = this;\n\n this.show = function () {\n return _this5._show(_this5.reference, _this5.options);\n };\n\n this.hide = function () {\n return _this5._hide();\n };\n\n this.dispose = function () {\n return _this5._dispose();\n };\n\n this.toggle = function () {\n if (_this5._isOpen) {\n return _this5.hide();\n } else {\n return _this5.show();\n }\n };\n\n this.arrowSelector = '.tooltip-arrow, .tooltip__arrow';\n this.innerSelector = '.tooltip-inner, .tooltip__inner';\n this._events = [];\n\n this._setTooltipNodeEvent = function (evt, reference, delay, options) {\n var relatedreference = evt.relatedreference || evt.toElement;\n\n var callback = function callback(evt2) {\n var relatedreference2 = evt2.relatedreference || evt2.toElement;\n\n // Remove event listener after call\n _this5._tooltipNode.removeEventListener(evt.type, callback);\n\n // If the new reference is not the reference element\n if (!reference.contains(relatedreference2)) {\n // Schedule to hide tooltip\n _this5._scheduleHide(reference, options.delay, options, evt2);\n }\n };\n\n if (_this5._tooltipNode.contains(relatedreference)) {\n // listen to mouseleave on the tooltip element to be able to hide the tooltip\n _this5._tooltipNode.addEventListener(evt.type, callback);\n return true;\n }\n\n return false;\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = Tooltip;\n//# sourceMappingURL=tooltip.js.map\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__v_tooltip__ = __webpack_require__(0);\n/* harmony export (immutable) */ __webpack_exports__[\"install\"] = install;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VTooltip\", function() { return VTooltip; });\n\n\nfunction install(Vue, options) {\n if (install.installed) return;\n install.installed = true;\n\n options = Object.assign({}, __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"a\" /* defaultOptions */], options || {});\n __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */].options = options;\n Vue.directive('tooltip', __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */]);\n}\n\nvar VTooltip = __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */];\n\nvar plugin = {\n install: install\n};\n\n// Auto-install\nvar GlobalVue = null;\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = plugin;\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMjk4OWMwOWU5Nzc4NGIyNWYzMGMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3YtdG9vbHRpcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wb3BwZXIuanMvZGlzdC9lc20vcG9wcGVyLmpzIiwid2VicGFjazovLy8uL34vdG9vbHRpcC5qcy9kaXN0L2VzbS90b29sdGlwLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJwb3NpdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImRlZmF1bHRQbGFjZW1lbnQiLCJkZWZhdWx0Q2xhc3MiLCJkZWZhdWx0VGVtcGxhdGUiLCJkZWZhdWx0RGVsYXkiLCJkZWZhdWx0VHJpZ2dlciIsImRlZmF1bHRPZmZzZXQiLCJkZWZhdWx0Q29udGFpbmVyIiwiZ2V0T3B0aW9ucyIsIm9wdGlvbnMiLCJwbGFjZW1lbnQiLCJkaXJlY3RpdmUiLCJkZWxheSIsInRlbXBsYXRlIiwidHJpZ2dlciIsIm9mZnNldCIsImNvbnRhaW5lciIsImdldFBsYWNlbWVudCIsInZhbHVlIiwibW9kaWZpZXJzIiwicG9zIiwiU3VwZXJUb29sdGlwIiwiY2xhc3NlcyIsImVsIiwiX3Rvb2x0aXBOb2RlIiwib2xkQ2xhc3NlcyIsIl9vbGRDbGFzc2VzIiwicmVwbGFjZUNsYXNzZXMiLCJhZGRDbGFzc2VzIiwicmVtb3ZlQ2xhc3NlcyIsIl9wZW5kaW5nQ2xhc3NlcyIsIl9jbGFzc2VzIiwiY29udGVudCIsInRpdGxlIiwicXVlcnlTZWxlY3RvciIsImlubmVyU2VsZWN0b3IiLCJpbm5lckhUTUwiLCJwb3BwZXJJbnN0YW5jZSIsInVwZGF0ZSIsIm5lZWRQb3BwZXJVcGRhdGUiLCJuZWVkUmVzdGFydCIsImtleSIsImlzT3BlbiIsIl9pc09wZW4iLCJkaXNwb3NlIiwiZXZlbnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJpbmRleE9mIiwiX3NldEV2ZW50TGlzdGVuZXJzIiwicmVmZXJlbmNlIiwic2V0Q2xhc3NlcyIsInNob3ciLCJfZXZlbnRzIiwiZm9yRWFjaCIsImZ1bmMiLCJldmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhcmdzIiwic2V0VGltZW91dCIsImNyZWF0ZVRvb2x0aXAiLCJ0b29sdGlwIiwiX3Rvb2x0aXAiLCJodG1sIiwiZGVzdHJveVRvb2x0aXAiLCJiaW5kIiwib2xkVmFsdWUiLCJzZXRDb250ZW50Iiwic2V0T3B0aW9ucyIsInVuYmluZCIsImNvbnZlcnRUb0FycmF5IiwiY2xhc3NMaXN0IiwiYWRkIiwiYyIsInJlbW92ZSIsIm5ld0NsYXNzZXMiLCJuYXRpdmVIaW50cyIsImlzTmF0aXZlIiwiZm4iLCJzb21lIiwiaGludCIsInRvU3RyaW5nIiwiaXNCcm93c2VyIiwid2luZG93IiwibG9uZ2VyVGltZW91dEJyb3dzZXJzIiwidGltZW91dER1cmF0aW9uIiwiaSIsImxlbmd0aCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIm1pY3JvdGFza0RlYm91bmNlIiwic2NoZWR1bGVkIiwiZWxlbSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJhdHRyaWJ1dGVzIiwic2V0QXR0cmlidXRlIiwidGFza0RlYm91bmNlIiwic3VwcG9ydHNOYXRpdmVNdXRhdGlvbk9ic2VydmVyIiwiZGVib3VuY2UiLCJpc051bWVyaWMiLCJuIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwiaXNGaW5pdGUiLCJzZXRTdHlsZXMiLCJlbGVtZW50Iiwic3R5bGVzIiwiT2JqZWN0Iiwia2V5cyIsInByb3AiLCJ1bml0Iiwic3R5bGUiLCJpc0Z1bmN0aW9uIiwiZnVuY3Rpb25Ub0NoZWNrIiwiZ2V0VHlwZSIsImNhbGwiLCJnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkiLCJwcm9wZXJ0eSIsIm5vZGVUeXBlIiwiY3NzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFBhcmVudE5vZGUiLCJub2RlTmFtZSIsInBhcmVudE5vZGUiLCJob3N0IiwiZ2V0U2Nyb2xsUGFyZW50IiwiYm9keSIsIl9nZXRTdHlsZUNvbXB1dGVkUHJvcCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwidGVzdCIsImlzT2Zmc2V0Q29udGFpbmVyIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJvZmZzZXRQYXJlbnQiLCJnZXRSb290Iiwibm9kZSIsImdldE9mZnNldFBhcmVudCIsImRvY3VtZW50RWxlbWVudCIsImZpbmRDb21tb25PZmZzZXRQYXJlbnQiLCJlbGVtZW50MSIsImVsZW1lbnQyIiwib3JkZXIiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsIk5vZGUiLCJET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkciLCJzdGFydCIsImVuZCIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIiwiY29udGFpbnMiLCJlbGVtZW50MXJvb3QiLCJnZXRTY3JvbGwiLCJzaWRlIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwidXBwZXJTaWRlIiwic2Nyb2xsaW5nRWxlbWVudCIsImluY2x1ZGVTY3JvbGwiLCJyZWN0Iiwic3VidHJhY3QiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwibW9kaWZpZXIiLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJnZXRCb3JkZXJzU2l6ZSIsImF4aXMiLCJzaWRlQSIsInNpZGVCIiwiZ2V0V2luZG93U2l6ZXMiLCJoZWlnaHQiLCJNYXRoIiwibWF4Iiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwid2lkdGgiLCJzY3JvbGxXaWR0aCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJjbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJkZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9leHRlbmRzIiwiYXNzaWduIiwidGFyZ2V0Iiwic291cmNlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJnZXRDbGllbnRSZWN0Iiwib2Zmc2V0cyIsImlzSUUxMCIsImlzSUUxMCQxIiwiYXBwVmVyc2lvbiIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImVyciIsInJlc3VsdCIsInNpemVzIiwiaG9yaXpTY3JvbGxiYXIiLCJ2ZXJ0U2Nyb2xsYmFyIiwiZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlIiwiY2hpbGRyZW4iLCJwYXJlbnQiLCJpc0hUTUwiLCJjaGlsZHJlblJlY3QiLCJwYXJlbnRSZWN0Iiwic2Nyb2xsUGFyZW50IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlIiwicmVsYXRpdmVPZmZzZXQiLCJpbm5lcldpZHRoIiwiaW5uZXJIZWlnaHQiLCJpc0ZpeGVkIiwiZ2V0Qm91bmRhcmllcyIsInBvcHBlciIsInBhZGRpbmciLCJib3VuZGFyaWVzRWxlbWVudCIsImJvdW5kYXJpZXMiLCJib3VuZGFyaWVzTm9kZSIsIl9nZXRXaW5kb3dTaXplcyIsImNvbXB1dGVBdXRvUGxhY2VtZW50IiwicmVmUmVjdCIsInNpZGVzIiwiY29tcHV0ZWRQbGFjZW1lbnQiLCJzb3J0IiwiYSIsImIiLCJ2YXJpYXRpb24iLCJnZXRSZWZlcmVuY2VPZmZzZXRzIiwic3RhdGUiLCJjb21tb25PZmZzZXRQYXJlbnQiLCJnZXRPdXRlclNpemVzIiwieCIsIm1hcmdpbkJvdHRvbSIsInkiLCJtYXJnaW5SaWdodCIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiaGFzaCIsInJlcGxhY2UiLCJtYXRjaGVkIiwiZ2V0UG9wcGVyT2Zmc2V0cyIsInJlZmVyZW5jZU9mZnNldHMiLCJwb3BwZXJSZWN0IiwicG9wcGVyT2Zmc2V0cyIsImlzSG9yaXoiLCJtYWluU2lkZSIsInNlY29uZGFyeVNpZGUiLCJtZWFzdXJlbWVudCIsInNlY29uZGFyeU1lYXN1cmVtZW50IiwiZmluZCIsImFyciIsImNoZWNrIiwiQXJyYXkiLCJmaW5kSW5kZXgiLCJjdXIiLCJtYXRjaCIsInJ1bk1vZGlmaWVycyIsImRhdGEiLCJlbmRzIiwibW9kaWZpZXJzVG9SdW4iLCJzbGljZSIsImZ1bmN0aW9uIiwiY29uc29sZSIsIndhcm4iLCJlbmFibGVkIiwiaXNEZXN0cm95ZWQiLCJmbGlwcGVkIiwiZmxpcCIsIm9yaWdpbmFsUGxhY2VtZW50IiwicG9zaXRpb24iLCJpc0NyZWF0ZWQiLCJvbkNyZWF0ZSIsIm9uVXBkYXRlIiwiaXNNb2RpZmllckVuYWJsZWQiLCJtb2RpZmllck5hbWUiLCJfcmVmIiwibmFtZSIsImdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSIsInByZWZpeGVzIiwidXBwZXJQcm9wIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJwcmVmaXgiLCJ0b0NoZWNrIiwiZGVzdHJveSIsInJlbW92ZUF0dHJpYnV0ZSIsImRpc2FibGVFdmVudExpc3RlbmVycyIsInJlbW92ZU9uRGVzdHJveSIsInJlbW92ZUNoaWxkIiwiYXR0YWNoVG9TY3JvbGxQYXJlbnRzIiwiY2FsbGJhY2siLCJzY3JvbGxQYXJlbnRzIiwiaXNCb2R5IiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJwdXNoIiwic2V0dXBFdmVudExpc3RlbmVycyIsInVwZGF0ZUJvdW5kIiwic2Nyb2xsRWxlbWVudCIsImV2ZW50c0VuYWJsZWQiLCJlbmFibGVFdmVudExpc3RlbmVycyIsInNjaGVkdWxlVXBkYXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInNldEF0dHJpYnV0ZXMiLCJhcHBseVN0eWxlIiwicm91bmQiLCJwcmVmaXhlZFByb3BlcnR5IiwiZ3B1QWNjZWxlcmF0aW9uIiwid2lsbENoYW5nZSIsImFycm93IiwiYXJyb3dFbGVtZW50IiwiYXBwbHlTdHlsZU9uTG9hZCIsIm1vZGlmaWVyT3B0aW9ucyIsImlzTW9kaWZpZXJSZXF1aXJlZCIsInJlcXVlc3RpbmdOYW1lIiwicmVxdWVzdGVkTmFtZSIsInJlcXVlc3RpbmciLCJpc1JlcXVpcmVkIiwiX3JlcXVlc3RpbmciLCJyZXF1ZXN0ZWQiLCJpc1ZlcnRpY2FsIiwibGVuIiwiYWx0U2lkZSIsIm9wU2lkZSIsImFycm93RWxlbWVudFNpemUiLCJjZW50ZXIiLCJzaWRlVmFsdWUiLCJtaW4iLCJnZXRPcHBvc2l0ZVZhcmlhdGlvbiIsInBsYWNlbWVudHMiLCJ2YWxpZFBsYWNlbWVudHMiLCJjbG9ja3dpc2UiLCJjb3VudGVyIiwiaW5kZXgiLCJjb25jYXQiLCJyZXZlcnNlIiwiQkVIQVZJT1JTIiwiRkxJUCIsIkNMT0NLV0lTRSIsIkNPVU5URVJDTE9DS1dJU0UiLCJwbGFjZW1lbnRPcHBvc2l0ZSIsImZsaXBPcmRlciIsImJlaGF2aW9yIiwic3RlcCIsInJlZk9mZnNldHMiLCJmbG9vciIsIm92ZXJsYXBzUmVmIiwib3ZlcmZsb3dzTGVmdCIsIm92ZXJmbG93c1JpZ2h0Iiwib3ZlcmZsb3dzVG9wIiwib3ZlcmZsb3dzQm90dG9tIiwib3ZlcmZsb3dzQm91bmRhcmllcyIsImZsaXBwZWRWYXJpYXRpb24iLCJmbGlwVmFyaWF0aW9ucyIsImtlZXBUb2dldGhlciIsInRvVmFsdWUiLCJzdHIiLCJzaXplIiwicGFyc2VPZmZzZXQiLCJiYXNlUGxhY2VtZW50IiwidXNlSGVpZ2h0IiwiZnJhZ21lbnRzIiwibWFwIiwiZnJhZyIsInRyaW0iLCJkaXZpZGVyIiwic2VhcmNoIiwic3BsaXRSZWdleCIsIm9wcyIsIm9wIiwibWVyZ2VXaXRoUHJldmlvdXMiLCJyZWR1Y2UiLCJpbmRleDIiLCJfZGF0YSRvZmZzZXRzIiwicHJldmVudE92ZXJmbG93IiwicHJpb3JpdHkiLCJwcmltYXJ5IiwiZXNjYXBlV2l0aFJlZmVyZW5jZSIsInNlY29uZGFyeSIsInNoaWZ0Iiwic2hpZnR2YXJpYXRpb24iLCJzaGlmdE9mZnNldHMiLCJoaWRlIiwiYm91bmQiLCJpbm5lciIsInN1YnRyYWN0TGVuZ3RoIiwib25Mb2FkIiwiREVGQVVMVFMiLCJQb3BwZXIiLCJfdGhpcyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIkRlZmF1bHRzIiwianF1ZXJ5IiwiZGVmYXVsdENvbmZpZyIsInVzZXJDb25maWciLCJVdGlscyIsImdsb2JhbCIsIlBvcHBlclV0aWxzIiwiY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiREVGQVVMVF9PUFRJT05TIiwiVG9vbHRpcCIsIl9pbml0aWFsaXNlUHJvcHMiLCJfY3JlYXRlIiwiYWxsb3dIdG1sIiwidG9vbHRpcEdlbmVyYXRvciIsInRvb2x0aXBOb2RlIiwiY2hpbGROb2RlcyIsImlkIiwicmFuZG9tIiwic3Vic3RyIiwidGl0bGVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJ0aXRsZVRleHQiLCJpbm5lclRleHQiLCJfc2hvdyIsImRpc3BsYXkiLCJnZXRBdHRyaWJ1dGUiLCJfZmluZENvbnRhaW5lciIsIl9hcHBlbmQiLCJwb3BwZXJPcHRpb25zIiwiYXJyb3dTZWxlY3RvciIsIl9oaWRlIiwiX2Rpc3Bvc2UiLCJfdGhpczIiLCJkaXJlY3RFdmVudHMiLCJvcHBvc2l0ZUV2ZW50cyIsImV2dCIsInVzZWRCeVRvb2x0aXAiLCJfc2NoZWR1bGVTaG93IiwiX3NjaGVkdWxlSGlkZSIsIl90aGlzMyIsImNvbXB1dGVkRGVsYXkiLCJfdGhpczQiLCJ0eXBlIiwiaXNTZXQiLCJfc2V0VG9vbHRpcE5vZGVFdmVudCIsIl90aGlzNSIsInRvZ2dsZSIsInJlbGF0ZWRyZWZlcmVuY2UiLCJ0b0VsZW1lbnQiLCJldnQyIiwicmVsYXRlZHJlZmVyZW5jZTIiLCJpbnN0YWxsIiwiVnVlIiwiaW5zdGFsbGVkIiwidnRvb2x0aXAiLCJWVG9vbHRpcCIsInBsdWdpbiIsIkdsb2JhbFZ1ZSIs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QWQsRUFBeUIsMkRBQXpCO0FBQ0Q7O0FBRU0sSUFBTTRjLFdBQVcsMkRBQWpCOztBQUVQLElBQU1DLFNBQVM7QUFDYkw7QUFEYSxDQUFmOztBQUlBO0FBQ0EsSUFBSU0sWUFBWSxJQUFoQjtBQUNBLElBQUksT0FBT3RZLE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDakNzWSxjQUFZdFksT0FBT2lZLEdBQW5CO0FBQ0QsQ0FGRCxNQUVPLElBQUksT0FBT3BELE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDeEN5RCxjQUFZekQsT0FBT29ELEdBQW5CO0FBQ0Q7QUFDRCxJQUFJSyxTQUFKLEVBQWU7QUFDYkEsWUFBVUMsR0FBVixDQUFjRixNQUFkO0FBQ0Q7O0FBRUQsOERBQWVBLE1BQWYsQyIsImZpbGUiOiJ2LXRvb2x0aXAuY29tbW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMjk4OWMwOWU5Nzc4NGIyNWYzMGMiLCJpbXBvcnQgVG9vbHRpcCBmcm9tICd0b29sdGlwLmpzJ1xyXG5cclxuaW1wb3J0IHsgYWRkQ2xhc3NlcywgcmVtb3ZlQ2xhc3NlcywgcmVwbGFjZUNsYXNzZXMgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuY29uc3QgcG9zaXRpb25zID0gW1xyXG4gICd0b3AnLFxyXG4gICd0b3Atc3RhcnQnLFxyXG4gICd0b3AtZW5kJyxcclxuICAncmlnaHQnLFxyXG4gICdyaWdodC1zdGFydCcsXHJcbiAgJ3JpZ2h0LWVuZCcsXHJcbiAgJ2JvdHRvbScsXHJcbiAgJ2JvdHRvbS1zdGFydCcsXHJcbiAgJ2JvdHRvbS1lbmQnLFxyXG4gICdsZWZ0JyxcclxuICAnbGVmdC1zdGFydCcsXHJcbiAgJ2xlZnQtZW5kJyxcclxuXVxyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xyXG4gIGRlZmF1bHRQbGFjZW1lbnQ6ICd0b3AnLFxyXG4gIGRlZmF1bHRDbGFzczogJ3Z1ZS10b29sdGlwLXRoZW1lJyxcclxuICBkZWZhdWx0VGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj48ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PjwvZGl2PicsXHJcbiAgZGVmYXVsdERlbGF5OiAwLFxyXG4gIGRlZmF1bHRUcmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxyXG4gIGRlZmF1bHRPZmZzZXQ6IDAsXHJcbiAgZGVmYXVsdENvbnRhaW5lcjogJ2JvZHknLFxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPcHRpb25zIChvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHBsYWNlbWVudDogb3B0aW9ucy5wbGFjZW1lbnQgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdFBsYWNlbWVudCxcclxuICAgIGRlbGF5OiBvcHRpb25zLmRlbGF5IHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHREZWxheSxcclxuICAgIHRlbXBsYXRlOiBvcHRpb25zLnRlbXBsYXRlIHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHRUZW1wbGF0ZSxcclxuICAgIHRyaWdnZXI6IG9wdGlvbnMudHJpZ2dlciB8fCBkaXJlY3RpdmUub3B0aW9ucy5kZWZhdWx0VHJpZ2dlcixcclxuICAgIG9mZnNldDogb3B0aW9ucy5vZmZzZXQgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdE9mZnNldCxcclxuICAgIGNvbnRhaW5lcjogb3B0aW9ucy5jb250YWluZXIgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdENvbnRhaW5lcixcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBsYWNlbWVudCAodmFsdWUsIG1vZGlmaWVycykge1xyXG4gIGxldCBwbGFjZW1lbnQgPSB2YWx1ZS5wbGFjZW1lbnRcclxuICBmb3IgKGNvbnN0IHBvcyBvZiBwb3NpdGlvbnMpIHtcclxuICAgIGlmIChtb2RpZmllcnNbcG9zXSkge1xyXG4gICAgICBwbGFjZW1lbnQgPSBwb3NcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHBsYWNlbWVudFxyXG59XHJcblxyXG5jbGFzcyBTdXBlclRvb2x0aXAgZXh0ZW5kcyBUb29sdGlwIHtcclxuICBzZXRDbGFzc2VzIChjbGFzc2VzKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX3Rvb2x0aXBOb2RlXHJcblxyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIGNvbnN0IG9sZENsYXNzZXMgPSB0aGlzLl9vbGRDbGFzc2VzXHJcbiAgICAgIGlmIChjbGFzc2VzKSB7XHJcbiAgICAgICAgaWYgKG9sZENsYXNzZXMpIHtcclxuICAgICAgICAgIHJlcGxhY2VDbGFzc2VzKGVsLCBjbGFzc2VzLCBvbGRDbGFzc2VzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhZGRDbGFzc2VzKGVsLCBjbGFzc2VzKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChvbGRDbGFzc2VzKSB7XHJcbiAgICAgICAgcmVtb3ZlQ2xhc3NlcyhlbCwgb2xkQ2xhc3NlcylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9vbGRDbGFzc2VzID0gY2xhc3Nlc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcGVuZGluZ0NsYXNzZXMgPSBjbGFzc2VzXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2xhc3NlcyA9IGNsYXNzZXNcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQgKGNvbnRlbnQpIHtcclxuICAgIHRoaXMub3B0aW9ucy50aXRsZSA9IGNvbnRlbnRcclxuICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuX3Rvb2x0aXBOb2RlLnF1ZXJ5U2VsZWN0b3IodGhpcy5pbm5lclNlbGVjdG9yKVxyXG5cclxuICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XHJcbiAgICAgICAgICBlbC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbC5pbm5lckhUTUwgPSBjb250ZW50XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcHBlckluc3RhbmNlLnVwZGF0ZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9wdGlvbnMgKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpXHJcblxyXG4gICAgbGV0IG5lZWRQb3BwZXJVcGRhdGUgPSBmYWxzZVxyXG4gICAgbGV0IG5lZWRSZXN0YXJ0ID0gZmFsc2VcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5vZmZzZXQgIT09IG9wdGlvbnMub2Zmc2V0IHx8XHJcbiAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQgIT09IG9wdGlvbnMucGxhY2VtZW50XHJcbiAgICApIHtcclxuICAgICAgbmVlZFBvcHBlclVwZGF0ZSA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3B0aW9ucy50ZW1wbGF0ZSAhPT0gb3B0aW9ucy50ZW1wbGF0ZSB8fFxyXG4gICAgICB0aGlzLm9wdGlvbnMudHJpZ2dlciAhPT0gb3B0aW9ucy50cmlnZ2VyIHx8XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IG9wdGlvbnMuY29udGFpbmVyXHJcbiAgICApIHtcclxuICAgICAgbmVlZFJlc3RhcnQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xyXG4gICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xyXG4gICAgICBpZiAobmVlZFJlc3RhcnQpIHtcclxuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLl9pc09wZW5cclxuXHJcbiAgICAgICAgdGhpcy5kaXNwb3NlKClcclxuXHJcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdHlwZW9mIHRoaXMub3B0aW9ucy50cmlnZ2VyID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyBvcHRpb25zLnRyaWdnZXJcclxuICAgICAgICAgICAgLnNwbGl0KCcgJylcclxuICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICB0cmlnZ2VyID0+IFsnY2xpY2snLCAnaG92ZXInLCAnZm9jdXMnXS5pbmRleE9mKHRyaWdnZXIpICE9PSAtMVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICA6IFtdXHJcbiAgICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIGV2ZW50cywgdGhpcy5vcHRpb25zKVxyXG5cclxuICAgICAgICB0aGlzLnNldENsYXNzZXModGhpcy5fY2xhc3NlcylcclxuXHJcbiAgICAgICAgaWYgKGlzT3Blbikge1xyXG4gICAgICAgICAgdGhpcy5zaG93KClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAobmVlZFBvcHBlclVwZGF0ZSkge1xyXG4gICAgICAgIHRoaXMucG9wcGVySW5zdGFuY2UudXBkYXRlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2Rpc3Bvc2UgKCkge1xyXG4gICAgdGhpcy5fZXZlbnRzLmZvckVhY2goKHsgZnVuYywgZXZlbnQgfSkgPT4ge1xyXG4gICAgICB0aGlzLnJlZmVyZW5jZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKVxyXG4gICAgfSlcclxuICAgIHRoaXMuX2V2ZW50cyA9IFtdXHJcbiAgICBzdXBlci5fZGlzcG9zZSgpXHJcbiAgfVxyXG5cclxuICBfc2hvdyAoLi4uYXJncykge1xyXG4gICAgc3VwZXIuX3Nob3coLi4uYXJncylcclxuXHJcbiAgICBpZiAodGhpcy5fcGVuZGluZ0NsYXNzZXMpIHtcclxuICAgICAgdGhpcy5zZXRDbGFzc2VzKHRoaXMuX3BlbmRpbmdDbGFzc2VzKVxyXG4gICAgICB0aGlzLl9wZW5kaW5nQ2xhc3NlcyA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaXggcG9zaXRpb25cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvcHBlckluc3RhbmNlLnVwZGF0ZSgpXHJcbiAgICB9LCAwKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVG9vbHRpcCAoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcclxuICBjb25zdCBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZVxyXG4gIGxldCBjbGFzc2VzID0gdmFsdWUuY2xhc3NlcyB8fCBkaXJlY3RpdmUub3B0aW9ucy5kZWZhdWx0Q2xhc3NcclxuXHJcbiAgY29uc3QgdG9vbHRpcCA9IGVsLl90b29sdGlwID0gbmV3IFN1cGVyVG9vbHRpcChlbCwge1xyXG4gICAgdGl0bGU6IGNvbnRlbnQsXHJcbiAgICBodG1sOiB0cnVlLFxyXG4gICAgLi4uZ2V0T3B0aW9ucyh7XHJcbiAgICAgIC4uLnZhbHVlLFxyXG4gICAgICBwbGFjZW1lbnQ6IGdldFBsYWNlbWVudCh2YWx1ZSwgbW9kaWZpZXJzKSxcclxuICAgIH0pLFxyXG4gIH0pXHJcbiAgdG9vbHRpcC5zZXRDbGFzc2VzKGNsYXNzZXMpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlc3Ryb3lUb29sdGlwIChlbCkge1xyXG4gIGlmIChlbC5fdG9vbHRpcCkge1xyXG4gICAgZWwuX3Rvb2x0aXAuZGlzcG9zZSgpXHJcbiAgICBkZWxldGUgZWwuX3Rvb2x0aXBcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGRpcmVjdGl2ZSA9IHtcclxuICBvcHRpb25zOiBkZWZhdWx0T3B0aW9ucyxcclxuICBiaW5kIChlbCwgeyB2YWx1ZSwgbW9kaWZpZXJzIH0pIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZSAmJiB2YWx1ZS5jb250ZW50IHx8IHZhbHVlXHJcbiAgICBkZXN0cm95VG9vbHRpcChlbClcclxuICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgIGNyZWF0ZVRvb2x0aXAoZWwsIHZhbHVlLCBtb2RpZmllcnMpXHJcbiAgICB9XHJcbiAgfSxcclxuICB1cGRhdGUgKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSwgbW9kaWZpZXJzIH0pIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZSAmJiB2YWx1ZS5jb250ZW50IHx8IHZhbHVlXHJcbiAgICBpZiAoIWNvbnRlbnQpIHtcclxuICAgICAgZGVzdHJveVRvb2x0aXAoZWwpXHJcbiAgICB9IGVsc2UgaWYgKGVsLl90b29sdGlwKSB7XHJcbiAgICAgIGNvbnN0IHRvb2x0aXAgPSBlbC5fdG9vbHRpcFxyXG4gICAgICAvLyBDb250ZW50XHJcbiAgICAgIHRvb2x0aXAuc2V0Q29udGVudChjb250ZW50KVxyXG4gICAgICAvLyBDU1MgQ2xhc3Nlc1xyXG4gICAgICB0b29sdGlwLnNldENsYXNzZXMoKHZhbHVlICYmIHZhbHVlLmNsYXNzZXMpIHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHRDbGFzcylcclxuICAgICAgLy8gT3B0aW9uc1xyXG4gICAgICB0b29sdGlwLnNldE9wdGlvbnMoe1xyXG4gICAgICAgIC4uLnZhbHVlLFxyXG4gICAgICAgIHBsYWNlbWVudDogZ2V0UGxhY2VtZW50KHZhbHVlLCBtb2RpZmllcnMpLFxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3JlYXRlVG9vbHRpcChlbCwgdmFsdWUsIG1vZGlmaWVycylcclxuICAgIH1cclxuICB9LFxyXG4gIHVuYmluZCAoZWwpIHtcclxuICAgIGRlc3Ryb3lUb29sdGlwKGVsKVxyXG4gIH0sXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRpcmVjdGl2ZVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdi10b29sdGlwLmpzIiwiXG5mdW5jdGlvbiBjb252ZXJ0VG9BcnJheSAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKVxyXG4gIH1cclxuICByZXR1cm4gdmFsdWVcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZENsYXNzZXMgKGVsLCBjbGFzc2VzKSB7XHJcbiAgY2xhc3NlcyA9IGNvbnZlcnRUb0FycmF5KGNsYXNzZXMpXHJcbiAgY2xhc3Nlcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgZWwuY2xhc3NMaXN0LmFkZChjKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDbGFzc2VzIChlbCwgY2xhc3Nlcykge1xyXG4gIGNsYXNzZXMgPSBjb252ZXJ0VG9BcnJheShjbGFzc2VzKVxyXG4gIGNsYXNzZXMuZm9yRWFjaChjID0+IHtcclxuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoYylcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNsYXNzZXMgKGVsLCBuZXdDbGFzc2VzLCBvbGRDbGFzc2VzKSB7XHJcbiAgcmVtb3ZlQ2xhc3NlcyhlbCwgb2xkQ2xhc3NlcylcclxuICBhZGRDbGFzc2VzKGVsLCBuZXdDbGFzc2VzKVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy5qcyIsInZhciBuYXRpdmVIaW50cyA9IFsnbmF0aXZlIGNvZGUnLCAnW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdJ107XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgbmF0aXZlbHkgKGFzIG9wcG9zZWQgdG8gYSBwb2x5ZmlsbCkuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0Z1bmN0aW9uIHwgdW5kZWZpbmVkfSBmbiB0aGUgZnVuY3Rpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG52YXIgaXNOYXRpdmUgPSAoZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBuYXRpdmVIaW50cy5zb21lKGZ1bmN0aW9uIChoaW50KSB7XG4gICAgcmV0dXJuIChmbiB8fCAnJykudG9TdHJpbmcoKS5pbmRleE9mKGhpbnQpID4gLTE7XG4gIH0pO1xufSk7XG5cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBsb25nZXJUaW1lb3V0QnJvd3NlcnMgPSBbJ0VkZ2UnLCAnVHJpZGVudCcsICdGaXJlZm94J107XG52YXIgdGltZW91dER1cmF0aW9uID0gMDtcbmZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2VyVGltZW91dEJyb3dzZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gIGlmIChpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKGxvbmdlclRpbWVvdXRCcm93c2Vyc1tpXSkgPj0gMCkge1xuICAgIHRpbWVvdXREdXJhdGlvbiA9IDE7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWljcm90YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICB2YXIgaSA9IDA7XG4gIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gIC8vIE11dGF0aW9uT2JzZXJ2ZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHNjaGVkdWxpbmcgbWljcm90YXNrcywgd2hpY2hcbiAgLy8gYXJlIHNjaGVkdWxlZCAqYmVmb3JlKiB0aGUgbmV4dCB0YXNrLiBUaGlzIGdpdmVzIHVzIGEgd2F5IHRvIGRlYm91bmNlXG4gIC8vIGEgZnVuY3Rpb24gYnV0IGVuc3VyZSBpdCdzIGNhbGxlZCAqYmVmb3JlKiB0aGUgbmV4dCBwYWludC5cbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgIGZuKCk7XG4gICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gIH0pO1xuXG4gIG9ic2VydmVyLm9ic2VydmUoZWxlbSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzY2hlZHVsZWQpIHtcbiAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICBlbGVtLnNldEF0dHJpYnV0ZSgneC1pbmRleCcsIGkpO1xuICAgICAgaSA9IGkgKyAxOyAvLyBkb24ndCB1c2UgY29tcHVuZCAoKz0pIGJlY2F1c2UgaXQgZG9lc24ndCBnZXQgb3B0aW1pemVkIGluIFY4XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc2NoZWR1bGVkKSB7XG4gICAgICBzY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmbigpO1xuICAgICAgfSwgdGltZW91dER1cmF0aW9uKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIEl0J3MgY29tbW9uIGZvciBNdXRhdGlvbk9ic2VydmVyIHBvbHlmaWxscyB0byBiZSBzZWVuIGluIHRoZSB3aWxkLCBob3dldmVyXG4vLyB0aGVzZSByZWx5IG9uIE11dGF0aW9uIEV2ZW50cyB3aGljaCBvbmx5IG9jY3VyIHdoZW4gYW4gZWxlbWVudCBpcyBjb25uZWN0ZWRcbi8vIHRvIHRoZSBET00uIFRoZSBhbGdvcml0aG0gdXNlZCBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCB1c2UgYSBjb25uZWN0ZWQgZWxlbWVudCxcbi8vIGFuZCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IGEgKm5hdGl2ZSogTXV0YXRpb25PYnNlcnZlciBpcyBhdmFpbGFibGUuXG52YXIgc3VwcG9ydHNOYXRpdmVNdXRhdGlvbk9ic2VydmVyID0gaXNCcm93c2VyICYmIGlzTmF0aXZlKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKTtcblxuLyoqXG4qIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGEgbWV0aG9kLCB0aGF0J3MgYXN5bmNocm9ub3VzbHkgZGVmZXJyZWRcbiogYnV0IGNhbGxlZCBpbiB0aGUgbWluaW11bSB0aW1lIHBvc3NpYmxlLlxuKlxuKiBAbWV0aG9kXG4qIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiogQGFyZ3VtZW50IHtGdW5jdGlvbn0gZm5cbiogQHJldHVybnMge0Z1bmN0aW9ufVxuKi9cbnZhciBkZWJvdW5jZSA9IHN1cHBvcnRzTmF0aXZlTXV0YXRpb25PYnNlcnZlciA/IG1pY3JvdGFza0RlYm91bmNlIDogdGFza0RlYm91bmNlO1xuXG4vKipcbiAqIFRlbGxzIGlmIGEgZ2l2ZW4gaW5wdXQgaXMgYSBudW1iZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7Kn0gaW5wdXQgdG8gY2hlY2tcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTnVtZXJpYyhuKSB7XG4gIHJldHVybiBuICE9PSAnJyAmJiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG59XG5cbi8qKlxuICogU2V0IHRoZSBzdHlsZSB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBzdHlsZSB0b1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHN0eWxlc1xuICogT2JqZWN0IHdpdGggYSBsaXN0IG9mIHByb3BlcnRpZXMgYW5kIHZhbHVlcyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gc2V0U3R5bGVzKGVsZW1lbnQsIHN0eWxlcykge1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICB2YXIgdW5pdCA9ICcnO1xuICAgIC8vIGFkZCB1bml0IGlmIHRoZSB2YWx1ZSBpcyBudW1lcmljIGFuZCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICAgIGlmIChbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5pbmRleE9mKHByb3ApICE9PSAtMSAmJiBpc051bWVyaWMoc3R5bGVzW3Byb3BdKSkge1xuICAgICAgdW5pdCA9ICdweCc7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBzdHlsZXNbcHJvcF0gKyB1bml0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBbnl9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICB2YXIgZ2V0VHlwZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIEdldCBDU1MgY29tcHV0ZWQgcHJvcGVydHkgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBjc3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgcmV0dXJuIHByb3BlcnR5ID8gY3NzW3Byb3BlcnR5XSA6IGNzcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnROb2RlIG9yIHRoZSBob3N0IG9mIHRoZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlIHx8IGVsZW1lbnQuaG9zdDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzY3JvbGxpbmcgcGFyZW50IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBzY3JvbGwgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFJldHVybiBib2R5LCBgZ2V0U2Nyb2xsYCB3aWxsIHRha2UgY2FyZSB0byBnZXQgdGhlIGNvcnJlY3QgYHNjcm9sbFRvcGAgZnJvbSBpdFxuICBpZiAoIWVsZW1lbnQgfHwgWydIVE1MJywgJ0JPRFknLCAnI2RvY3VtZW50J10uaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gd2luZG93LmRvY3VtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbCkvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xufVxuXG5mdW5jdGlvbiBpc09mZnNldENvbnRhaW5lcihlbGVtZW50KSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnSFRNTCcgfHwgZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQ7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHJvb3Qgbm9kZSAoZG9jdW1lbnQsIHNoYWRvd0RPTSByb290KSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJucyB7RWxlbWVudH0gcm9vdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGdldFJvb3Qobm9kZSkge1xuICBpZiAobm9kZS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGdldFJvb3Qobm9kZS5wYXJlbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQgJiYgZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG4gIHZhciBub2RlTmFtZSA9IG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQubm9kZU5hbWU7XG5cbiAgaWYgKCFub2RlTmFtZSB8fCBub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQ7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gSGVyZSB3ZSBtYWtlIHN1cmUgdG8gZ2l2ZSBhcyBcInN0YXJ0XCIgdGhlIGVsZW1lbnQgdGhhdCBjb21lcyBmaXJzdCBpbiB0aGUgRE9NXG4gIHZhciBvcmRlciA9IGVsZW1lbnQxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGVsZW1lbnQyKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO1xuICB2YXIgc3RhcnQgPSBvcmRlciA/IGVsZW1lbnQxIDogZWxlbWVudDI7XG4gIHZhciBlbmQgPSBvcmRlciA/IGVsZW1lbnQyIDogZWxlbWVudDE7XG5cbiAgLy8gR2V0IGNvbW1vbiBhbmNlc3RvciBjb250YWluZXJcbiAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQsIDApO1xuICByYW5nZS5zZXRFbmQoZW5kLCAwKTtcbiAgdmFyIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG5cbiAgLy8gQm90aCBub2RlcyBhcmUgaW5zaWRlICNkb2N1bWVudFxuXG4gIGlmIChlbGVtZW50MSAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgJiYgZWxlbWVudDIgIT09IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIHx8IHN0YXJ0LmNvbnRhaW5zKGVuZCkpIHtcbiAgICBpZiAoaXNPZmZzZXRDb250YWluZXIoY29tbW9uQW5jZXN0b3JDb250YWluZXIpKSB7XG4gICAgICByZXR1cm4gY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChjb21tb25BbmNlc3RvckNvbnRhaW5lcik7XG4gIH1cblxuICAvLyBvbmUgb2YgdGhlIG5vZGVzIGlzIGluc2lkZSBzaGFkb3dET00sIGZpbmQgd2hpY2ggb25lXG4gIHZhciBlbGVtZW50MXJvb3QgPSBnZXRSb290KGVsZW1lbnQxKTtcbiAgaWYgKGVsZW1lbnQxcm9vdC5ob3N0KSB7XG4gICAgcmV0dXJuIGZpbmRDb21tb25PZmZzZXRQYXJlbnQoZWxlbWVudDFyb290Lmhvc3QsIGVsZW1lbnQyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MSwgZ2V0Um9vdChlbGVtZW50MikuaG9zdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzY3JvbGwgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQgaW4gdGhlIGdpdmVuIHNpZGUgKHRvcCBhbmQgbGVmdClcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHNpZGUgYHRvcGAgb3IgYGxlZnRgXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbW91bnQgb2Ygc2Nyb2xsZWQgcGl4ZWxzXG4gKi9cbmZ1bmN0aW9uIGdldFNjcm9sbChlbGVtZW50KSB7XG4gIHZhciBzaWRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAndG9wJztcblxuICB2YXIgdXBwZXJTaWRlID0gc2lkZSA9PT0gJ3RvcCcgPyAnc2Nyb2xsVG9wJyA6ICdzY3JvbGxMZWZ0JztcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgdmFyIGh0bWwgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHZhciBzY3JvbGxpbmdFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgaHRtbDtcbiAgICByZXR1cm4gc2Nyb2xsaW5nRWxlbWVudFt1cHBlclNpZGVdO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRbdXBwZXJTaWRlXTtcbn1cblxuLypcbiAqIFN1bSBvciBzdWJ0cmFjdCB0aGUgZWxlbWVudCBzY3JvbGwgdmFsdWVzIChsZWZ0IGFuZCB0b3ApIGZyb20gYSBnaXZlbiByZWN0IG9iamVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHJlY3QgLSBSZWN0IG9iamVjdCB5b3Ugd2FudCB0byBjaGFuZ2VcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCBmcm9tIHRoZSBmdW5jdGlvbiByZWFkcyB0aGUgc2Nyb2xsIHZhbHVlc1xuICogQHBhcmFtIHtCb29sZWFufSBzdWJ0cmFjdCAtIHNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHN1YnRyYWN0IHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlY3QgLSBUaGUgbW9kaWZpZXIgcmVjdCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaW5jbHVkZVNjcm9sbChyZWN0LCBlbGVtZW50KSB7XG4gIHZhciBzdWJ0cmFjdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gIHZhciBtb2RpZmllciA9IHN1YnRyYWN0ID8gLTEgOiAxO1xuICByZWN0LnRvcCArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5ib3R0b20gKz0gc2Nyb2xsVG9wICogbW9kaWZpZXI7XG4gIHJlY3QubGVmdCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdCAqIG1vZGlmaWVyO1xuICByZXR1cm4gcmVjdDtcbn1cblxuLypcbiAqIEhlbHBlciB0byBkZXRlY3QgYm9yZGVycyBvZiBhIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXG4gKiBSZXN1bHQgb2YgYGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eWAgb24gdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBheGlzIC0gYHhgIG9yIGB5YFxuICogQHJldHVybiB7bnVtYmVyfSBib3JkZXJzIC0gVGhlIGJvcmRlcnMgc2l6ZSBvZiB0aGUgZ2l2ZW4gYXhpc1xuICovXG5cbmZ1bmN0aW9uIGdldEJvcmRlcnNTaXplKHN0eWxlcywgYXhpcykge1xuICB2YXIgc2lkZUEgPSBheGlzID09PSAneCcgPyAnTGVmdCcgOiAnVG9wJztcbiAgdmFyIHNpZGVCID0gc2lkZUEgPT09ICdMZWZ0JyA/ICdSaWdodCcgOiAnQm90dG9tJztcblxuICByZXR1cm4gK3N0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10uc3BsaXQoJ3B4JylbMF0gKyArc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXS5zcGxpdCgncHgnKVswXTtcbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93U2l6ZXMoKSB7XG4gIHZhciBib2R5ID0gd2luZG93LmRvY3VtZW50LmJvZHk7XG4gIHZhciBodG1sID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IE1hdGgubWF4KGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5Lm9mZnNldEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLm9mZnNldEhlaWdodCksXG4gICAgd2lkdGg6IE1hdGgubWF4KGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkub2Zmc2V0V2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwub2Zmc2V0V2lkdGgpXG4gIH07XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG5cblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGVsZW1lbnQgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gb2Zmc2V0c1xuICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0KG9mZnNldHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIFRlbGxzIGlmIHlvdSBhcmUgcnVubmluZyBJbnRlcm5ldCBFeHBsb3JlciAxMFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHJldHVybnMge0Jvb2xlYW59IGlzSUUxMFxuICovXG52YXIgaXNJRTEwID0gdW5kZWZpbmVkO1xuXG52YXIgaXNJRTEwJDEgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChpc0lFMTAgPT09IHVuZGVmaW5lZCkge1xuICAgIGlzSUUxMCA9IG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ01TSUUgMTAnKSAhPT0gLTE7XG4gIH1cbiAgcmV0dXJuIGlzSUUxMDtcbn07XG5cbi8qKlxuICogR2V0IGJvdW5kaW5nIGNsaWVudCByZWN0IG9mIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gY2xpZW50IHJlY3RcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSB7fTtcblxuICAvLyBJRTEwIDEwIEZJWDogUGxlYXNlLCBkb24ndCBhc2ssIHRoZSBlbGVtZW50IGlzbid0XG4gIC8vIGNvbnNpZGVyZWQgaW4gRE9NIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4uLlxuICAvLyBUaGlzIGlzbid0IHJlcHJvZHVjaWJsZSBpbiBJRTEwIGNvbXBhdGliaWxpdHkgbW9kZSBvZiBJRTExXG4gIGlmIChpc0lFMTAkMSgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChlbGVtZW50LCAnbGVmdCcpO1xuICAgICAgcmVjdC50b3AgKz0gc2Nyb2xsVG9wO1xuICAgICAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQ7XG4gICAgICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LnJpZ2h0ICs9IHNjcm9sbExlZnQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7fVxuICB9IGVsc2Uge1xuICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICB3aWR0aDogcmVjdC5yaWdodCAtIHJlY3QubGVmdCxcbiAgICBoZWlnaHQ6IHJlY3QuYm90dG9tIC0gcmVjdC50b3BcbiAgfTtcblxuICAvLyBzdWJ0cmFjdCBzY3JvbGxiYXIgc2l6ZSBmcm9tIHNpemVzXG4gIHZhciBzaXplcyA9IGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJyA/IGdldFdpbmRvd1NpemVzKCkgOiB7fTtcbiAgdmFyIHdpZHRoID0gc2l6ZXMud2lkdGggfHwgZWxlbWVudC5jbGllbnRXaWR0aCB8fCByZXN1bHQucmlnaHQgLSByZXN1bHQubGVmdDtcbiAgdmFyIGhlaWdodCA9IHNpemVzLmhlaWdodCB8fCBlbGVtZW50LmNsaWVudEhlaWdodCB8fCByZXN1bHQuYm90dG9tIC0gcmVzdWx0LnRvcDtcblxuICB2YXIgaG9yaXpTY3JvbGxiYXIgPSBlbGVtZW50Lm9mZnNldFdpZHRoIC0gd2lkdGg7XG4gIHZhciB2ZXJ0U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgLSBoZWlnaHQ7XG5cbiAgLy8gaWYgYW4gaHlwb3RoZXRpY2FsIHNjcm9sbGJhciBpcyBkZXRlY3RlZCwgd2UgbXVzdCBiZSBzdXJlIGl0J3Mgbm90IGEgYGJvcmRlcmBcbiAgLy8gd2UgbWFrZSB0aGlzIGNoZWNrIGNvbmRpdGlvbmFsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gIGlmIChob3JpelNjcm9sbGJhciB8fCB2ZXJ0U2Nyb2xsYmFyKSB7XG4gICAgdmFyIHN0eWxlcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50KTtcbiAgICBob3JpelNjcm9sbGJhciAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd4Jyk7XG4gICAgdmVydFNjcm9sbGJhciAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd5Jyk7XG5cbiAgICByZXN1bHQud2lkdGggLT0gaG9yaXpTY3JvbGxiYXI7XG4gICAgcmVzdWx0LmhlaWdodCAtPSB2ZXJ0U2Nyb2xsYmFyO1xuICB9XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3QocmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKGNoaWxkcmVuLCBwYXJlbnQpIHtcbiAgdmFyIGlzSUUxMCA9IGlzSUUxMCQxKCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuICB2YXIgb2Zmc2V0cyA9IGdldENsaWVudFJlY3Qoe1xuICAgIHRvcDogY2hpbGRyZW5SZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wLFxuICAgIGxlZnQ6IGNoaWxkcmVuUmVjdC5sZWZ0IC0gcGFyZW50UmVjdC5sZWZ0LFxuICAgIHdpZHRoOiBjaGlsZHJlblJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiBjaGlsZHJlblJlY3QuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoaXNIVE1MIHx8IHBhcmVudC5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgdmFyIHN0eWxlcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQpO1xuICAgIHZhciBib3JkZXJUb3BXaWR0aCA9IGlzSUUxMCAmJiBpc0hUTUwgPyAwIDogK3N0eWxlcy5ib3JkZXJUb3BXaWR0aC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgYm9yZGVyTGVmdFdpZHRoID0gaXNJRTEwICYmIGlzSFRNTCA/IDAgOiArc3R5bGVzLmJvcmRlckxlZnRXaWR0aC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgbWFyZ2luVG9wID0gaXNJRTEwICYmIGlzSFRNTCA/IDAgOiArc3R5bGVzLm1hcmdpblRvcC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgbWFyZ2luTGVmdCA9IGlzSUUxMCAmJiBpc0hUTUwgPyAwIDogK3N0eWxlcy5tYXJnaW5MZWZ0LnNwbGl0KCdweCcpWzBdO1xuXG4gICAgb2Zmc2V0cy50b3AgLT0gYm9yZGVyVG9wV2lkdGggLSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5ib3R0b20gLT0gYm9yZGVyVG9wV2lkdGggLSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5sZWZ0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG4gICAgb2Zmc2V0cy5yaWdodCAtPSBib3JkZXJMZWZ0V2lkdGggLSBtYXJnaW5MZWZ0O1xuXG4gICAgLy8gQXR0YWNoIG1hcmdpblRvcCBhbmQgbWFyZ2luTGVmdCBiZWNhdXNlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcyB3ZSBtYXkgbmVlZCB0aGVtXG4gICAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5tYXJnaW5MZWZ0ID0gbWFyZ2luTGVmdDtcbiAgfVxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoc2Nyb2xsUGFyZW50KSAmJiAoaXNJRTEwIHx8IHNjcm9sbFBhcmVudC5ub2RlTmFtZSAhPT0gJ0JPRFknKSkge1xuICAgIG9mZnNldHMgPSBpbmNsdWRlU2Nyb2xsKG9mZnNldHMsIHBhcmVudCk7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlKGVsZW1lbnQpIHtcbiAgdmFyIGh0bWwgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB2YXIgcmVsYXRpdmVPZmZzZXQgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoZWxlbWVudCwgaHRtbCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KGh0bWwuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoaHRtbC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGh0bWwpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChodG1sLCAnbGVmdCcpO1xuXG4gIHZhciBvZmZzZXQgPSB7XG4gICAgdG9wOiBzY3JvbGxUb3AgLSByZWxhdGl2ZU9mZnNldC50b3AgKyByZWxhdGl2ZU9mZnNldC5tYXJnaW5Ub3AsXG4gICAgbGVmdDogc2Nyb2xsTGVmdCAtIHJlbGF0aXZlT2Zmc2V0LmxlZnQgKyByZWxhdGl2ZU9mZnNldC5tYXJnaW5MZWZ0LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KG9mZnNldCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgZml4ZWQgb3IgaXMgaW5zaWRlIGEgZml4ZWQgcGFyZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gY3VzdG9tQ29udGFpbmVyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvIFwiaXNGaXhlZD9cIlxuICovXG5mdW5jdGlvbiBpc0ZpeGVkKGVsZW1lbnQpIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbi8qKlxuICogQ29tcHV0ZWQgdGhlIGJvdW5kYXJpZXMgbGltaXRzIGFuZCByZXR1cm4gdGhlbVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWRkaW5nXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBib3VuZGFyaWVzRWxlbWVudCAtIEVsZW1lbnQgdXNlZCB0byBkZWZpbmUgdGhlIGJvdW5kYXJpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IENvb3JkaW5hdGVzIG9mIHRoZSBib3VuZGFyaWVzXG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBib3VuZGFyaWVzID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocG9wcGVyKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3dpbmRvdycpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBib3VuZGFyaWVzRWxlbWVudDtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShib3VuZGFyaWVzTm9kZSwgb2Zmc2V0UGFyZW50KTtcblxuICAgIC8vIEluIGNhc2Ugb2YgSFRNTCwgd2UgbmVlZCBhIGRpZmZlcmVudCBjb21wdXRhdGlvblxuICAgIGlmIChib3VuZGFyaWVzTm9kZS5ub2RlTmFtZSA9PT0gJ0hUTUwnICYmICFpc0ZpeGVkKG9mZnNldFBhcmVudCkpIHtcbiAgICAgIHZhciBfZ2V0V2luZG93U2l6ZXMgPSBnZXRXaW5kb3dTaXplcygpLFxuICAgICAgICAgIGhlaWdodCA9IF9nZXRXaW5kb3dTaXplcy5oZWlnaHQsXG4gICAgICAgICAgd2lkdGggPSBfZ2V0V2luZG93U2l6ZXMud2lkdGg7XG5cbiAgICAgIGJvdW5kYXJpZXMudG9wICs9IG9mZnNldHMudG9wIC0gb2Zmc2V0cy5tYXJnaW5Ub3A7XG4gICAgICBib3VuZGFyaWVzLmJvdHRvbSA9IGhlaWdodCArIG9mZnNldHMudG9wO1xuICAgICAgYm91bmRhcmllcy5sZWZ0ICs9IG9mZnNldHMubGVmdCAtIG9mZnNldHMubWFyZ2luTGVmdDtcbiAgICAgIGJvdW5kYXJpZXMucmlnaHQgPSB3aWR0aCArIG9mZnNldHMubGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIGFsbCB0aGUgb3RoZXIgRE9NIGVsZW1lbnRzLCB0aGlzIG9uZSBpcyBnb29kXG4gICAgICBib3VuZGFyaWVzID0gb2Zmc2V0cztcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcGFkZGluZ3NcbiAgYm91bmRhcmllcy5sZWZ0ICs9IHBhZGRpbmc7XG4gIGJvdW5kYXJpZXMudG9wICs9IHBhZGRpbmc7XG4gIGJvdW5kYXJpZXMucmlnaHQgLT0gcGFkZGluZztcbiAgYm91bmRhcmllcy5ib3R0b20gLT0gcGFkZGluZztcblxuICByZXR1cm4gYm91bmRhcmllcztcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHVzZWQgdG8gdHJhbnNmb3JtIHRoZSBgYXV0b2AgcGxhY2VtZW50IHRvIHRoZSBwbGFjZW1lbnQgd2l0aCBtb3JlXG4gKiBhdmFpbGFibGUgc3BhY2UuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChwbGFjZW1lbnQsIHJlZlJlY3QsIHBvcHBlciwgcmVmZXJlbmNlLCBib3VuZGFyaWVzRWxlbWVudCkge1xuICBpZiAocGxhY2VtZW50LmluZGV4T2YoJ2F1dG8nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gcGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKHBvcHBlciwgcmVmZXJlbmNlLCAwLCBib3VuZGFyaWVzRWxlbWVudCk7XG5cbiAgdmFyIHNpZGVzID0ge1xuICAgIHRvcDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcCxcbiAgICByaWdodDogYm91bmRhcmllcy5yaWdodCAtIHJlZlJlY3QucmlnaHQsXG4gICAgYm90dG9tOiBib3VuZGFyaWVzLmJvdHRvbSAtIHJlZlJlY3QuYm90dG9tLFxuICAgIGxlZnQ6IHJlZlJlY3QubGVmdCAtIGJvdW5kYXJpZXMubGVmdFxuICB9O1xuXG4gIHZhciBjb21wdXRlZFBsYWNlbWVudCA9IE9iamVjdC5rZXlzKHNpZGVzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHNpZGVzW2JdIC0gc2lkZXNbYV07XG4gIH0pWzBdO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgcmV0dXJuIGNvbXB1dGVkUGxhY2VtZW50ICsgKHZhcmlhdGlvbiA/ICctJyArIHZhcmlhdGlvbiA6ICcnKTtcbn1cblxuLyoqXG4gKiBHZXQgb2Zmc2V0cyB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudH0gcmVmZXJlbmNlIC0gdGhlIHJlZmVyZW5jZSBlbGVtZW50ICh0aGUgcG9wcGVyIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcylcbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGdldFJlZmVyZW5jZU9mZnNldHMoc3RhdGUsIHBvcHBlciwgcmVmZXJlbmNlKSB7XG4gIHZhciBjb21tb25PZmZzZXRQYXJlbnQgPSBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KHBvcHBlciwgcmVmZXJlbmNlKTtcbiAgcmV0dXJuIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShyZWZlcmVuY2UsIGNvbW1vbk9mZnNldFBhcmVudCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvdXRlciBzaXplcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCAob2Zmc2V0IHNpemUgKyBtYXJnaW5zKVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3QgY29udGFpbmluZyB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJTaXplcyhlbGVtZW50KSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIHggPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5Ub3ApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luQm90dG9tKTtcbiAgdmFyIHkgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblJpZ2h0KTtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCArIHksXG4gICAgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCArIHhcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG9wcG9zaXRlIHBsYWNlbWVudCBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudFxuICovXG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgdmFyIGhhc2ggPSB7IGxlZnQ6ICdyaWdodCcsIHJpZ2h0OiAnbGVmdCcsIGJvdHRvbTogJ3RvcCcsIHRvcDogJ2JvdHRvbScgfTtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHBvc2l0aW9uIC0gQ1NTIHBvc2l0aW9uIHRoZSBQb3BwZXIgd2lsbCBnZXQgYXBwbGllZFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0cyAtIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge1N0cmluZ30gcGxhY2VtZW50IC0gb25lIG9mIHRoZSB2YWxpZCBwbGFjZW1lbnQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gcG9wcGVyT2Zmc2V0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGdldFBvcHBlck9mZnNldHMocG9wcGVyLCByZWZlcmVuY2VPZmZzZXRzLCBwbGFjZW1lbnQpIHtcbiAgcGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgLy8gR2V0IHBvcHBlciBub2RlIHNpemVzXG4gIHZhciBwb3BwZXJSZWN0ID0gZ2V0T3V0ZXJTaXplcyhwb3BwZXIpO1xuXG4gIC8vIEFkZCBwb3NpdGlvbiwgd2lkdGggYW5kIGhlaWdodCB0byBvdXIgb2Zmc2V0cyBvYmplY3RcbiAgdmFyIHBvcHBlck9mZnNldHMgPSB7XG4gICAgd2lkdGg6IHBvcHBlclJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiBwb3BwZXJSZWN0LmhlaWdodFxuICB9O1xuXG4gIC8vIGRlcGVuZGluZyBieSB0aGUgcG9wcGVyIHBsYWNlbWVudCB3ZSBoYXZlIHRvIGNvbXB1dGUgaXRzIG9mZnNldHMgc2xpZ2h0bHkgZGlmZmVyZW50bHlcbiAgdmFyIGlzSG9yaXogPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuICB2YXIgbWFpblNpZGUgPSBpc0hvcml6ID8gJ3RvcCcgOiAnbGVmdCc7XG4gIHZhciBzZWNvbmRhcnlTaWRlID0gaXNIb3JpeiA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc0hvcml6ID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2Vjb25kYXJ5TWVhc3VyZW1lbnQgPSAhaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBwb3BwZXJPZmZzZXRzW21haW5TaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbbWFpblNpZGVdICsgcmVmZXJlbmNlT2Zmc2V0c1ttZWFzdXJlbWVudF0gLyAyIC0gcG9wcGVyUmVjdFttZWFzdXJlbWVudF0gLyAyO1xuICBpZiAocGxhY2VtZW50ID09PSBzZWNvbmRhcnlTaWRlKSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gLSBwb3BwZXJSZWN0W3NlY29uZGFyeU1lYXN1cmVtZW50XTtcbiAgfSBlbHNlIHtcbiAgICBwb3BwZXJPZmZzZXRzW3NlY29uZGFyeVNpZGVdID0gcmVmZXJlbmNlT2Zmc2V0c1tnZXRPcHBvc2l0ZVBsYWNlbWVudChzZWNvbmRhcnlTaWRlKV07XG4gIH1cblxuICByZXR1cm4gcG9wcGVyT2Zmc2V0cztcbn1cblxuLyoqXG4gKiBNaW1pY3MgdGhlIGBmaW5kYCBtZXRob2Qgb2YgQXJyYXlcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICogQGFyZ3VtZW50IHByb3BcbiAqIEBhcmd1bWVudCB2YWx1ZVxuICogQHJldHVybnMgaW5kZXggb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmluZChhcnIsIGNoZWNrKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZCBpZiBzdXBwb3J0ZWRcbiAgaWYgKEFycmF5LnByb3RvdHlwZS5maW5kKSB7XG4gICAgcmV0dXJuIGFyci5maW5kKGNoZWNrKTtcbiAgfVxuXG4gIC8vIHVzZSBgZmlsdGVyYCB0byBvYnRhaW4gdGhlIHNhbWUgYmVoYXZpb3Igb2YgYGZpbmRgXG4gIHJldHVybiBhcnIuZmlsdGVyKGNoZWNrKVswXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBtYXRjaGluZyBvYmplY3RcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICogQGFyZ3VtZW50IHByb3BcbiAqIEBhcmd1bWVudCB2YWx1ZVxuICogQHJldHVybnMgaW5kZXggb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFyciwgcHJvcCwgdmFsdWUpIHtcbiAgLy8gdXNlIG5hdGl2ZSBmaW5kSW5kZXggaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KSB7XG4gICAgcmV0dXJuIGFyci5maW5kSW5kZXgoZnVuY3Rpb24gKGN1cikge1xuICAgICAgcmV0dXJuIGN1cltwcm9wXSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICAvLyB1c2UgYGZpbmRgICsgYGluZGV4T2ZgIGlmIGBmaW5kSW5kZXhgIGlzbid0IHN1cHBvcnRlZFxuICB2YXIgbWF0Y2ggPSBmaW5kKGFyciwgZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmpbcHJvcF0gPT09IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIGFyci5pbmRleE9mKG1hdGNoKTtcbn1cblxuLyoqXG4gKiBMb29wIHRyb3VnaCB0aGUgbGlzdCBvZiBtb2RpZmllcnMgYW5kIHJ1biB0aGVtIGluIG9yZGVyLFxuICogZWFjaCBvZiB0aGVtIHdpbGwgdGhlbiBlZGl0IHRoZSBkYXRhIG9iamVjdC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gZW5kcyAtIE9wdGlvbmFsIG1vZGlmaWVyIG5hbWUgdXNlZCBhcyBzdG9wcGVyXG4gKiBAcmV0dXJucyB7ZGF0YU9iamVjdH1cbiAqL1xuZnVuY3Rpb24gcnVuTW9kaWZpZXJzKG1vZGlmaWVycywgZGF0YSwgZW5kcykge1xuICB2YXIgbW9kaWZpZXJzVG9SdW4gPSBlbmRzID09PSB1bmRlZmluZWQgPyBtb2RpZmllcnMgOiBtb2RpZmllcnMuc2xpY2UoMCwgZmluZEluZGV4KG1vZGlmaWVycywgJ25hbWUnLCBlbmRzKSk7XG5cbiAgbW9kaWZpZXJzVG9SdW4uZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAobW9kaWZpZXIuZnVuY3Rpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybignYG1vZGlmaWVyLmZ1bmN0aW9uYCBpcyBkZXByZWNhdGVkLCB1c2UgYG1vZGlmaWVyLmZuYCEnKTtcbiAgICB9XG4gICAgdmFyIGZuID0gbW9kaWZpZXIuZnVuY3Rpb24gfHwgbW9kaWZpZXIuZm47XG4gICAgaWYgKG1vZGlmaWVyLmVuYWJsZWQgJiYgaXNGdW5jdGlvbihmbikpIHtcbiAgICAgIGRhdGEgPSBmbihkYXRhLCBtb2RpZmllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLCBjb21wdXRpbmcgdGhlIG5ldyBvZmZzZXRzIGFuZCBhcHBseWluZ1xuICogdGhlIG5ldyBzdHlsZS48YnIgLz5cbiAqIFByZWZlciBgc2NoZWR1bGVVcGRhdGVgIG92ZXIgYHVwZGF0ZWAgYmVjYXVzZSBvZiBwZXJmb3JtYW5jZSByZWFzb25zLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiB1cGRhdGUoKSB7XG4gIC8vIGlmIHBvcHBlciBpcyBkZXN0cm95ZWQsIGRvbid0IHBlcmZvcm0gYW55IGZ1cnRoZXIgdXBkYXRlXG4gIGlmICh0aGlzLnN0YXRlLmlzRGVzdHJveWVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGRhdGEgPSB7XG4gICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgc3R5bGVzOiB7fSxcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICBmbGlwcGVkOiBmYWxzZSxcbiAgICBvZmZzZXRzOiB7fVxuICB9O1xuXG4gIC8vIGNvbXB1dGUgcmVmZXJlbmNlIGVsZW1lbnQgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlT2Zmc2V0cyh0aGlzLnN0YXRlLCB0aGlzLnBvcHBlciwgdGhpcy5yZWZlcmVuY2UpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50KTtcblxuICAvLyBzdG9yZSB0aGUgY29tcHV0ZWQgcGxhY2VtZW50IGluc2lkZSBgb3JpZ2luYWxQbGFjZW1lbnRgXG4gIGRhdGEub3JpZ2luYWxQbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcblxuICAvLyBjb21wdXRlIHRoZSBwb3BwZXIgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0UG9wcGVyT2Zmc2V0cyh0aGlzLnBvcHBlciwgZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSwgZGF0YS5wbGFjZW1lbnQpO1xuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSlcbiAqL1xuZnVuY3Rpb24gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKHByb3BlcnR5KSB7XG4gIHZhciBwcmVmaXhlcyA9IFtmYWxzZSwgJ21zJywgJ3dlYmtpdCcsICdtb3onLCAnbyddO1xuICB2YXIgdXBwZXJQcm9wID0gcHJvcGVydHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuYm9keS5zdHlsZVt0b0NoZWNrXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBEZXN0cm95IHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgdGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgLy8gdG91Y2ggRE9NIG9ubHkgaWYgYGFwcGx5U3R5bGVgIG1vZGlmaWVyIGlzIGVuYWJsZWRcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKHRoaXMubW9kaWZpZXJzLCAnYXBwbHlTdHlsZScpKSB7XG4gICAgdGhpcy5wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCd4LXBsYWNlbWVudCcpO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlW2dldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyldID0gJyc7XG4gIH1cblxuICB0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycygpO1xuXG4gIC8vIHJlbW92ZSB0aGUgcG9wcGVyIGlmIHVzZXIgZXhwbGljaXR5IGFza2VkIGZvciB0aGUgZGVsZXRpb24gb24gZGVzdHJveVxuICAvLyBkbyBub3QgdXNlIGByZW1vdmVgIGJlY2F1c2UgSUUxMSBkb2Vzbid0IHN1cHBvcnQgaXRcbiAgaWYgKHRoaXMub3B0aW9ucy5yZW1vdmVPbkRlc3Ryb3kpIHtcbiAgICB0aGlzLnBvcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbFBhcmVudCwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKSB7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQubm9kZU5hbWUgPT09ICdCT0RZJztcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IHdpbmRvdyA6IHNjcm9sbFBhcmVudDtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgaWYgKCFpc0JvZHkpIHtcbiAgICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoZ2V0U2Nyb2xsUGFyZW50KHRhcmdldC5wYXJlbnROb2RlKSwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKTtcbiAgfVxuICBzY3JvbGxQYXJlbnRzLnB1c2godGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBvcHRpb25zLCBzdGF0ZSwgdXBkYXRlQm91bmQpIHtcbiAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBzdGF0ZS51cGRhdGVCb3VuZCA9IHVwZGF0ZUJvdW5kO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3RhdGUudXBkYXRlQm91bmQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAvLyBTY3JvbGwgZXZlbnQgbGlzdGVuZXIgb24gc2Nyb2xsIHBhcmVudHNcbiAgdmFyIHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxQYXJlbnQocmVmZXJlbmNlKTtcbiAgYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbEVsZW1lbnQsICdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCwgc3RhdGUuc2Nyb2xsUGFyZW50cyk7XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBzY3JvbGxFbGVtZW50O1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gdHJ1ZTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCBhZGQgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHN0YXJ0IHJlY2FsY3VsYXRpbmdcbiAqIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIgZWxlbWVudCB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICghdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHNldHVwRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucywgdGhpcy5zdGF0ZSwgdGhpcy5zY2hlZHVsZVVwZGF0ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZSwgc3RhdGUpIHtcbiAgLy8gUmVtb3ZlIHJlc2l6ZSBldmVudCBsaXN0ZW5lciBvbiB3aW5kb3dcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcblxuICAvLyBSZW1vdmUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyIG9uIHNjcm9sbCBwYXJlbnRzXG4gIHN0YXRlLnNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgfSk7XG5cbiAgLy8gUmVzZXQgc3RhdGVcbiAgc3RhdGUudXBkYXRlQm91bmQgPSBudWxsO1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0gW107XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBudWxsO1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gZmFsc2U7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIHJlbW92ZSByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgd29uJ3QgcmVjYWxjdWxhdGUgcG9wcGVyIHBvc2l0aW9uXG4gKiB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC4gSXQgYWxzbyB3b24ndCB0cmlnZ2VyIG9uVXBkYXRlIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY2hlZHVsZVVwZGF0ZSk7XG4gICAgdGhpcy5zdGF0ZSA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMucmVmZXJlbmNlLCB0aGlzLnN0YXRlKTtcbiAgfVxufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEsIG9wdGlvbnMpIHtcbiAgLy8gYXBwbHkgdGhlIGZpbmFsIG9mZnNldHMgdG8gdGhlIHBvcHBlclxuICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICB2YXIgc3R5bGVzID0ge1xuICAgIHBvc2l0aW9uOiBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uXG4gIH07XG5cbiAgdmFyIGF0dHJpYnV0ZXMgPSB7XG4gICAgJ3gtcGxhY2VtZW50JzogZGF0YS5wbGFjZW1lbnRcbiAgfTtcblxuICAvLyByb3VuZCB0b3AgYW5kIGxlZnQgdG8gYXZvaWQgYmx1cnJ5IHRleHRcbiAgdmFyIGxlZnQgPSBNYXRoLnJvdW5kKGRhdGEub2Zmc2V0cy5wb3BwZXIubGVmdCk7XG4gIHZhciB0b3AgPSBNYXRoLnJvdW5kKGRhdGEub2Zmc2V0cy5wb3BwZXIudG9wKTtcblxuICAvLyBpZiBncHVBY2NlbGVyYXRpb24gaXMgc2V0IHRvIHRydWUgYW5kIHRyYW5zZm9ybSBpcyBzdXBwb3J0ZWQsXG4gIC8vICB3ZSB1c2UgYHRyYW5zbGF0ZTNkYCB0byBhcHBseSB0aGUgcG9zaXRpb24gdG8gdGhlIHBvcHBlciB3ZVxuICAvLyBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgc3VwcG9ydGVkIHByZWZpeGVkIHZlcnNpb24gaWYgbmVlZGVkXG4gIHZhciBwcmVmaXhlZFByb3BlcnR5ID0gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKTtcbiAgaWYgKG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uICYmIHByZWZpeGVkUHJvcGVydHkpIHtcbiAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICBzdHlsZXMudG9wID0gMDtcbiAgICBzdHlsZXMubGVmdCA9IDA7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGh3ZXJpc2UsIHdlIHVzZSB0aGUgc3RhbmRhcmQgYGxlZnRgIGFuZCBgdG9wYCBwcm9wZXJ0aWVzXG4gICAgc3R5bGVzLmxlZnQgPSBsZWZ0O1xuICAgIHN0eWxlcy50b3AgPSB0b3A7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSAndG9wLCBsZWZ0JztcbiAgfVxuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLnN0eWxlc2Agd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIsXG4gIC8vIGluIHRoaXMgd2F5IHdlIGNhbiBtYWtlIHRoZSAzcmQgcGFydHkgbW9kaWZpZXJzIGFkZCBjdXN0b20gc3R5bGVzIHRvIGl0XG4gIC8vIEJlIGF3YXJlLCBtb2RpZmllcnMgY291bGQgb3ZlcnJpZGUgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXNcbiAgLy8gbGluZXMgb2YgdGhpcyBtb2RpZmllciFcbiAgc2V0U3R5bGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBfZXh0ZW5kcyh7fSwgc3R5bGVzLCBkYXRhLnN0eWxlcykpO1xuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLmF0dHJpYnV0ZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyB0aGV5IHdpbGwgYmUgc2V0IGFzIEhUTUwgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuICBzZXRBdHRyaWJ1dGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBfZXh0ZW5kcyh7fSwgYXR0cmlidXRlcywgZGF0YS5hdHRyaWJ1dGVzKSk7XG5cbiAgLy8gaWYgdGhlIGFycm93IHN0eWxlIGhhcyBiZWVuIGNvbXB1dGVkLCBhcHBseSB0aGUgYXJyb3cgc3R5bGVcbiAgaWYgKGRhdGEub2Zmc2V0cy5hcnJvdykge1xuICAgIHNldFN0eWxlcyhkYXRhLmFycm93RWxlbWVudCwgZGF0YS5vZmZzZXRzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFBvcHBlci5qcyBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGFwcGx5U3R5bGVPbkxvYWQocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMsIG1vZGlmaWVyT3B0aW9ucywgc3RhdGUpIHtcbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIHZhciByZWZlcmVuY2VPZmZzZXRzID0gZ2V0UmVmZXJlbmNlT2Zmc2V0cyhzdGF0ZSwgcG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICB2YXIgcGxhY2VtZW50ID0gY29tcHV0ZUF1dG9QbGFjZW1lbnQob3B0aW9ucy5wbGFjZW1lbnQsIHJlZmVyZW5jZU9mZnNldHMsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50KTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS48YnIgLz5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgbmVlZGVkIG1vZGlmaWVyIGlzIGxpc3RlZCBhbmQgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVycyAtIGxpc3Qgb2YgbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZ05hbWUgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWROYW1lIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyUmVxdWlyZWQobW9kaWZpZXJzLCByZXF1ZXN0aW5nTmFtZSwgcmVxdWVzdGVkTmFtZSkge1xuICB2YXIgcmVxdWVzdGluZyA9IGZpbmQobW9kaWZpZXJzLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgIHJldHVybiBuYW1lID09PSByZXF1ZXN0aW5nTmFtZTtcbiAgfSk7XG5cbiAgdmFyIGlzUmVxdWlyZWQgPSAhIXJlcXVlc3RpbmcgJiYgbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09IHJlcXVlc3RlZE5hbWUgJiYgbW9kaWZpZXIuZW5hYmxlZCAmJiBtb2RpZmllci5vcmRlciA8IHJlcXVlc3Rpbmcub3JkZXI7XG4gIH0pO1xuXG4gIGlmICghaXNSZXF1aXJlZCkge1xuICAgIHZhciBfcmVxdWVzdGluZyA9ICdgJyArIHJlcXVlc3RpbmdOYW1lICsgJ2AnO1xuICAgIHZhciByZXF1ZXN0ZWQgPSAnYCcgKyByZXF1ZXN0ZWROYW1lICsgJ2AnO1xuICAgIGNvbnNvbGUud2FybihyZXF1ZXN0ZWQgKyAnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcgKyBfcmVxdWVzdGluZyArICcgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnICsgX3JlcXVlc3RpbmcgKyAnIScpO1xuICB9XG4gIHJldHVybiBpc1JlcXVpcmVkO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gYXJyb3coZGF0YSwgb3B0aW9ucykge1xuICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnYXJyb3cnLCAna2VlcFRvZ2V0aGVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBhcnJvd0VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpc24ndCBhIHF1ZXJ5IHNlbGVjdG9yIHdlIG11c3QgY2hlY2sgdGhhdCB0aGVcbiAgICAvLyBwcm92aWRlZCBET00gbm9kZSBpcyBjaGlsZCBvZiBpdHMgcG9wcGVyIG5vZGVcbiAgICBpZiAoIWRhdGEuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93LmVsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICB2YXIgcmVmZXJlbmNlID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2lkZSA9IGlzVmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JztcbiAgdmFyIGFsdFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gIHZhciBvcFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICB2YXIgYXJyb3dFbGVtZW50U2l6ZSA9IGdldE91dGVyU2l6ZXMoYXJyb3dFbGVtZW50KVtsZW5dO1xuXG4gIC8vXG4gIC8vIGV4dGVuZHMga2VlcFRvZ2V0aGVyIGJlaGF2aW9yIG1ha2luZyBzdXJlIHRoZSBwb3BwZXIgYW5kIGl0cyByZWZlcmVuY2UgaGF2ZSBlbm91Z2ggcGl4ZWxzIGluIGNvbmp1Y3Rpb25cbiAgLy9cblxuICAvLyB0b3AvbGVmdCBzaWRlXG4gIGlmIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUgPCBwb3BwZXJbc2lkZV0pIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC09IHBvcHBlcltzaWRlXSAtIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUpO1xuICB9XG4gIC8vIGJvdHRvbS9yaWdodCBzaWRlXG4gIGlmIChyZWZlcmVuY2Vbc2lkZV0gKyBhcnJvd0VsZW1lbnRTaXplID4gcG9wcGVyW29wU2lkZV0pIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdICs9IHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgLSBwb3BwZXJbb3BTaWRlXTtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICB2YXIgc2lkZVZhbHVlID0gY2VudGVyIC0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKVtzaWRlXTtcblxuICAvLyBwcmV2ZW50IGFycm93RWxlbWVudCBmcm9tIGJlaW5nIHBsYWNlZCBub3QgY29udGlndW91c2x5IHRvIGl0cyBwb3BwZXJcbiAgc2lkZVZhbHVlID0gTWF0aC5tYXgoTWF0aC5taW4ocG9wcGVyW2xlbl0gLSBhcnJvd0VsZW1lbnRTaXplLCBzaWRlVmFsdWUpLCAwKTtcblxuICBkYXRhLmFycm93RWxlbWVudCA9IGFycm93RWxlbWVudDtcbiAgZGF0YS5vZmZzZXRzLmFycm93ID0ge307XG4gIGRhdGEub2Zmc2V0cy5hcnJvd1tzaWRlXSA9IHNpZGVWYWx1ZTtcbiAgZGF0YS5vZmZzZXRzLmFycm93W2FsdFNpZGVdID0gJyc7IC8vIG1ha2Ugc3VyZSB0byB1bnNldCBhbnkgZXZlbnR1YWwgYWx0U2lkZSB2YWx1ZSBmcm9tIHRoZSBET00gbm9kZVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IHZhcmlhdGlvbiBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50IHZhcmlhdGlvblxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbikge1xuICBpZiAodmFyaWF0aW9uID09PSAnZW5kJykge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9IGVsc2UgaWYgKHZhcmlhdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgIHJldHVybiAnZW5kJztcbiAgfVxuICByZXR1cm4gdmFyaWF0aW9uO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgYWNjZXB0ZWQgcGxhY2VtZW50cyB0byB1c2UgYXMgdmFsdWVzIG9mIHRoZSBgcGxhY2VtZW50YCBvcHRpb24uPGJyIC8+XG4gKiBWYWxpZCBwbGFjZW1lbnRzIGFyZTpcbiAqIC0gYGF1dG9gXG4gKiAtIGB0b3BgXG4gKiAtIGByaWdodGBcbiAqIC0gYGJvdHRvbWBcbiAqIC0gYGxlZnRgXG4gKlxuICogRWFjaCBwbGFjZW1lbnQgY2FuIGhhdmUgYSB2YXJpYXRpb24gZnJvbSB0aGlzIGxpc3Q6XG4gKiAtIGAtc3RhcnRgXG4gKiAtIGAtZW5kYFxuICpcbiAqIFZhcmlhdGlvbnMgYXJlIGludGVycHJldGVkIGVhc2lseSBpZiB5b3UgdGhpbmsgb2YgdGhlbSBhcyB0aGUgbGVmdCB0byByaWdodFxuICogd3JpdHRlbiBsYW5ndWFnZXMuIEhvcml6b250YWxseSAoYHRvcGAgYW5kIGBib3R0b21gKSwgYHN0YXJ0YCBpcyBsZWZ0IGFuZCBgZW5kYFxuICogaXMgcmlnaHQuPGJyIC8+XG4gKiBWZXJ0aWNhbGx5IChgbGVmdGAgYW5kIGByaWdodGApLCBgc3RhcnRgIGlzIHRvcCBhbmQgYGVuZGAgaXMgYm90dG9tLlxuICpcbiAqIFNvbWUgdmFsaWQgZXhhbXBsZXMgYXJlOlxuICogLSBgdG9wLWVuZGAgKG9uIHRvcCBvZiByZWZlcmVuY2UsIHJpZ2h0IGFsaWduZWQpXG4gKiAtIGByaWdodC1zdGFydGAgKG9uIHJpZ2h0IG9mIHJlZmVyZW5jZSwgdG9wIGFsaWduZWQpXG4gKiAtIGBib3R0b21gIChvbiBib3R0b20sIGNlbnRlcmVkKVxuICogLSBgYXV0by1yaWdodGAgKG9uIHRoZSBzaWRlIHdpdGggbW9yZSBzcGFjZSBhdmFpbGFibGUsIGFsaWdubWVudCBkZXBlbmRzIGJ5IHBsYWNlbWVudClcbiAqXG4gKiBAc3RhdGljXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAZW51bSB7U3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWV0aG9kIHBsYWNlbWVudHNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIHBsYWNlbWVudHMgPSBbJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdhdXRvLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJywgJ3RvcC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAncmlnaHQtZW5kJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tJywgJ2JvdHRvbS1zdGFydCcsICdsZWZ0LWVuZCcsICdsZWZ0JywgJ2xlZnQtc3RhcnQnXTtcblxuLy8gR2V0IHJpZCBvZiBgYXV0b2AgYGF1dG8tc3RhcnRgIGFuZCBgYXV0by1lbmRgXG52YXIgdmFsaWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5zbGljZSgzKTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHBsYWNlbWVudCwgcmV0dXJucyBhbGwgdGhlIHN1YnNlcXVlbnQgcGxhY2VtZW50c1xuICogY2xvY2t3aXNlIChvciBjb3VudGVyLWNsb2Nrd2lzZSkuXG4gKlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudCAtIEEgdmFsaWQgcGxhY2VtZW50IChpdCBhY2NlcHRzIHZhcmlhdGlvbnMpXG4gKiBAYXJndW1lbnQge0Jvb2xlYW59IGNvdW50ZXIgLSBTZXQgdG8gdHJ1ZSB0byB3YWxrIHRoZSBwbGFjZW1lbnRzIGNvdW50ZXJjbG9ja3dpc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gcGxhY2VtZW50cyBpbmNsdWRpbmcgdGhlaXIgdmFyaWF0aW9uc1xuICovXG5mdW5jdGlvbiBjbG9ja3dpc2UocGxhY2VtZW50KSB7XG4gIHZhciBjb3VudGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaW5kZXggPSB2YWxpZFBsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpO1xuICB2YXIgYXJyID0gdmFsaWRQbGFjZW1lbnRzLnNsaWNlKGluZGV4ICsgMSkuY29uY2F0KHZhbGlkUGxhY2VtZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICByZXR1cm4gY291bnRlciA/IGFyci5yZXZlcnNlKCkgOiBhcnI7XG59XG5cbnZhciBCRUhBVklPUlMgPSB7XG4gIEZMSVA6ICdmbGlwJyxcbiAgQ0xPQ0tXSVNFOiAnY2xvY2t3aXNlJyxcbiAgQ09VTlRFUkNMT0NLV0lTRTogJ2NvdW50ZXJjbG9ja3dpc2UnXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gZmxpcChkYXRhLCBvcHRpb25zKSB7XG4gIC8vIGlmIGBpbm5lcmAgbW9kaWZpZXIgaXMgZW5hYmxlZCwgd2UgY2FuJ3QgdXNlIHRoZSBgZmxpcGAgbW9kaWZpZXJcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaW5uZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQpO1xuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVsxXSB8fCAnJztcblxuICB2YXIgZmxpcE9yZGVyID0gW107XG5cbiAgc3dpdGNoIChvcHRpb25zLmJlaGF2aW9yKSB7XG4gICAgY2FzZSBCRUhBVklPUlMuRkxJUDpcbiAgICAgIGZsaXBPcmRlciA9IFtwbGFjZW1lbnQsIHBsYWNlbWVudE9wcG9zaXRlXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQkVIQVZJT1JTLkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ09VTlRFUkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZsaXBPcmRlciA9IG9wdGlvbnMuYmVoYXZpb3I7XG4gIH1cblxuICBmbGlwT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCwgaW5kZXgpIHtcbiAgICBpZiAocGxhY2VtZW50ICE9PSBzdGVwIHx8IGZsaXBPcmRlci5sZW5ndGggPT09IGluZGV4ICsgMSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGdldENsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG4gICAgdmFyIHJlZk9mZnNldHMgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuXG4gICAgLy8gdXNpbmcgZmxvb3IgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgbWF5IGNvbnRhaW4gZGVjaW1hbHMgd2UgYXJlIG5vdCBnb2luZyB0byBjb25zaWRlciBoZXJlXG4gICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICB2YXIgb3ZlcmxhcHNSZWYgPSBwbGFjZW1lbnQgPT09ICdsZWZ0JyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKHJlZk9mZnNldHMubGVmdCkgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIGZsb29yKHBvcHBlck9mZnNldHMubGVmdCkgPCBmbG9vcihyZWZPZmZzZXRzLnJpZ2h0KSB8fCBwbGFjZW1lbnQgPT09ICd0b3AnICYmIGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKHJlZk9mZnNldHMudG9wKSB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nICYmIGZsb29yKHBvcHBlck9mZnNldHMudG9wKSA8IGZsb29yKHJlZk9mZnNldHMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NMZWZ0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKGJvdW5kYXJpZXMubGVmdCk7XG4gICAgdmFyIG92ZXJmbG93c1JpZ2h0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5yaWdodCkgPiBmbG9vcihib3VuZGFyaWVzLnJpZ2h0KTtcbiAgICB2YXIgb3ZlcmZsb3dzVG9wID0gZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IoYm91bmRhcmllcy50b3ApO1xuICAgIHZhciBvdmVyZmxvd3NCb3R0b20gPSBmbG9vcihwb3BwZXJPZmZzZXRzLmJvdHRvbSkgPiBmbG9vcihib3VuZGFyaWVzLmJvdHRvbSk7XG5cbiAgICB2YXIgb3ZlcmZsb3dzQm91bmRhcmllcyA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIG92ZXJmbG93c0xlZnQgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIG92ZXJmbG93c1JpZ2h0IHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgb3ZlcmZsb3dzVG9wIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgb3ZlcmZsb3dzQm90dG9tO1xuXG4gICAgLy8gZmxpcCB0aGUgdmFyaWF0aW9uIGlmIHJlcXVpcmVkXG4gICAgdmFyIGlzVmVydGljYWwgPSBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IGlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnZW5kJyAmJiBvdmVyZmxvd3NSaWdodCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzVG9wIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzQm90dG9tKTtcblxuICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzIHx8IGZsaXBwZWRWYXJpYXRpb24pIHtcbiAgICAgIC8vIHRoaXMgYm9vbGVhbiB0byBkZXRlY3QgYW55IGZsaXAgbG9vcFxuICAgICAgZGF0YS5mbGlwcGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKG92ZXJsYXBzUmVmIHx8IG92ZXJmbG93c0JvdW5kYXJpZXMpIHtcbiAgICAgICAgcGxhY2VtZW50ID0gZmxpcE9yZGVyW2luZGV4ICsgMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAgIHZhcmlhdGlvbiA9IGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRhdGEucGxhY2VtZW50ID0gcGxhY2VtZW50ICsgKHZhcmlhdGlvbiA/ICctJyArIHZhcmlhdGlvbiA6ICcnKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRQb3BwZXJPZmZzZXRzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgcG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgdmFyIHJlZmVyZW5jZSA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdyaWdodCcgOiAnYm90dG9tJztcbiAgdmFyIG9wU2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICBpZiAocG9wcGVyW3NpZGVdIDwgZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pIC0gcG9wcGVyW21lYXN1cmVtZW50XTtcbiAgfVxuICBpZiAocG9wcGVyW29wU2lkZV0gPiBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW3NpZGVdKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdmFsdWUgKyB1bml0IGludG8gYSBweCB2YWx1ZSBudW1iZXJcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIHttb2RpZmllcnN+b2Zmc2V0fVxuICogQHByaXZhdGVcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBzdHIgLSBWYWx1ZSArIHVuaXQgc3RyaW5nXG4gKiBAYXJndW1lbnQge1N0cmluZ30gbWVhc3VyZW1lbnQgLSBgaGVpZ2h0YCBvciBgd2lkdGhgXG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEByZXR1cm5zIHtOdW1iZXJ8U3RyaW5nfVxuICogVmFsdWUgaW4gcGl4ZWxzLCBvciBvcmlnaW5hbCBzdHJpbmcgaWYgbm8gdmFsdWVzIHdlcmUgZXh0cmFjdGVkXG4gKi9cbmZ1bmN0aW9uIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cykge1xuICAvLyBzZXBhcmF0ZSB2YWx1ZSBmcm9tIHVuaXRcbiAgdmFyIHNwbGl0ID0gc3RyLm1hdGNoKC8oKD86XFwtfFxcKyk/XFxkKlxcLj9cXGQqKSguKikvKTtcbiAgdmFyIHZhbHVlID0gK3NwbGl0WzFdO1xuICB2YXIgdW5pdCA9IHNwbGl0WzJdO1xuXG4gIC8vIElmIGl0J3Mgbm90IGEgbnVtYmVyIGl0J3MgYW4gb3BlcmF0b3IsIEkgZ3Vlc3NcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAodW5pdC5pbmRleE9mKCclJykgPT09IDApIHtcbiAgICB2YXIgZWxlbWVudCA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJyVwJzpcbiAgICAgICAgZWxlbWVudCA9IHBvcHBlck9mZnNldHM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJSc6XG4gICAgICBjYXNlICclcic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBlbGVtZW50ID0gcmVmZXJlbmNlT2Zmc2V0cztcbiAgICB9XG5cbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3QoZWxlbWVudCk7XG4gICAgcmV0dXJuIHJlY3RbbWVhc3VyZW1lbnRdIC8gMTAwICogdmFsdWU7XG4gIH0gZWxzZSBpZiAodW5pdCA9PT0gJ3ZoJyB8fCB1bml0ID09PSAndncnKSB7XG4gICAgLy8gaWYgaXMgYSB2aCBvciB2dywgd2UgY2FsY3VsYXRlIHRoZSBzaXplIGJhc2VkIG9uIHRoZSB2aWV3cG9ydFxuICAgIHZhciBzaXplID0gdm9pZCAwO1xuICAgIGlmICh1bml0ID09PSAndmgnKSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpemUgLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBpcyBhbiBleHBsaWNpdCBwaXhlbCB1bml0LCB3ZSBnZXQgcmlkIG9mIHRoZSB1bml0IGFuZCBrZWVwIHRoZSB2YWx1ZVxuICAgIC8vIGlmIGlzIGFuIGltcGxpY2l0IHVuaXQsIGl0J3MgcHgsIGFuZCB3ZSByZXR1cm4ganVzdCB0aGUgdmFsdWVcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBgb2Zmc2V0YCBzdHJpbmcgdG8gZXh0cmFwb2xhdGUgYHhgIGFuZCBgeWAgbnVtZXJpYyBvZmZzZXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IG9mZnNldFxuICogQGFyZ3VtZW50IHtPYmplY3R9IHBvcHBlck9mZnNldHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSByZWZlcmVuY2VPZmZzZXRzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gYmFzZVBsYWNlbWVudFxuICogQHJldHVybnMge0FycmF5fSBhIHR3byBjZWxscyBhcnJheSB3aXRoIHggYW5kIHkgb2Zmc2V0cyBpbiBudW1iZXJzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT2Zmc2V0KG9mZnNldCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cywgYmFzZVBsYWNlbWVudCkge1xuICB2YXIgb2Zmc2V0cyA9IFswLCAwXTtcblxuICAvLyBVc2UgaGVpZ2h0IGlmIHBsYWNlbWVudCBpcyBsZWZ0IG9yIHJpZ2h0IGFuZCBpbmRleCBpcyAwIG90aGVyd2lzZSB1c2Ugd2lkdGhcbiAgLy8gaW4gdGhpcyB3YXkgdGhlIGZpcnN0IG9mZnNldCB3aWxsIHVzZSBhbiBheGlzIGFuZCB0aGUgc2Vjb25kIG9uZVxuICAvLyB3aWxsIHVzZSB0aGUgb3RoZXIgb25lXG4gIHZhciB1c2VIZWlnaHQgPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAvLyBTcGxpdCB0aGUgb2Zmc2V0IHN0cmluZyB0byBvYnRhaW4gYSBsaXN0IG9mIHZhbHVlcyBhbmQgb3BlcmFuZHNcbiAgLy8gVGhlIHJlZ2V4IGFkZHJlc3NlcyB2YWx1ZXMgd2l0aCB0aGUgcGx1cyBvciBtaW51cyBzaWduIGluIGZyb250ICgrMTAsIC0yMCwgZXRjKVxuICB2YXIgZnJhZ21lbnRzID0gb2Zmc2V0LnNwbGl0KC8oXFwrfFxcLSkvKS5tYXAoZnVuY3Rpb24gKGZyYWcpIHtcbiAgICByZXR1cm4gZnJhZy50cmltKCk7XG4gIH0pO1xuXG4gIC8vIERldGVjdCBpZiB0aGUgb2Zmc2V0IHN0cmluZyBjb250YWlucyBhIHBhaXIgb2YgdmFsdWVzIG9yIGEgc2luZ2xlIG9uZVxuICAvLyB0aGV5IGNvdWxkIGJlIHNlcGFyYXRlZCBieSBjb21tYSBvciBzcGFjZVxuICB2YXIgZGl2aWRlciA9IGZyYWdtZW50cy5pbmRleE9mKGZpbmQoZnJhZ21lbnRzLCBmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnNlYXJjaCgvLHxcXHMvKSAhPT0gLTE7XG4gIH0pKTtcblxuICBpZiAoZnJhZ21lbnRzW2RpdmlkZXJdICYmIGZyYWdtZW50c1tkaXZpZGVyXS5pbmRleE9mKCcsJykgPT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKCdPZmZzZXRzIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZShzKSBhcmUgZGVwcmVjYXRlZCwgdXNlIGEgY29tbWEgKCwpIGluc3RlYWQuJyk7XG4gIH1cblxuICAvLyBJZiBkaXZpZGVyIGlzIGZvdW5kLCB3ZSBkaXZpZGUgdGhlIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kcyB0byBkaXZpZGVcbiAgLy8gdGhlbSBieSBvZnNldCBYIGFuZCBZLlxuICB2YXIgc3BsaXRSZWdleCA9IC9cXHMqLFxccyp8XFxzKy87XG4gIHZhciBvcHMgPSBkaXZpZGVyICE9PSAtMSA/IFtmcmFnbWVudHMuc2xpY2UoMCwgZGl2aWRlcikuY29uY2F0KFtmcmFnbWVudHNbZGl2aWRlcl0uc3BsaXQoc3BsaXRSZWdleClbMF1dKSwgW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVsxXV0uY29uY2F0KGZyYWdtZW50cy5zbGljZShkaXZpZGVyICsgMSkpXSA6IFtmcmFnbWVudHNdO1xuXG4gIC8vIENvbnZlcnQgdGhlIHZhbHVlcyB3aXRoIHVuaXRzIHRvIGFic29sdXRlIHBpeGVscyB0byBhbGxvdyBvdXIgY29tcHV0YXRpb25zXG4gIG9wcyA9IG9wcy5tYXAoZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIC8vIE1vc3Qgb2YgdGhlIHVuaXRzIHJlbHkgb24gdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBwb3BwZXJcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSAoaW5kZXggPT09IDEgPyAhdXNlSGVpZ2h0IDogdXNlSGVpZ2h0KSA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgbWVyZ2VXaXRoUHJldmlvdXMgPSBmYWxzZTtcbiAgICByZXR1cm4gb3BcbiAgICAvLyBUaGlzIGFnZ3JlZ2F0ZXMgYW55IGArYCBvciBgLWAgc2lnbiB0aGF0IGFyZW4ndCBjb25zaWRlcmVkIG9wZXJhdG9yc1xuICAgIC8vIGUuZy46IDEwICsgKzUgPT4gWzEwLCArLCArNV1cbiAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICBpZiAoYVthLmxlbmd0aCAtIDFdID09PSAnJyAmJiBbJysnLCAnLSddLmluZGV4T2YoYikgIT09IC0xKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSA9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlV2l0aFByZXZpb3VzKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSArPSBiO1xuICAgICAgICBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdGhlIHN0cmluZyB2YWx1ZXMgaW50byBudW1iZXIgdmFsdWVzIChpbiBweClcbiAgICAubWFwKGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiB0b1ZhbHVlKHN0ciwgbWVhc3VyZW1lbnQsIHBvcHBlck9mZnNldHMsIHJlZmVyZW5jZU9mZnNldHMpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBMb29wIHRyb3VnaCB0aGUgb2Zmc2V0cyBhcnJheXMgYW5kIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbnNcbiAgb3BzLmZvckVhY2goZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIG9wLmZvckVhY2goZnVuY3Rpb24gKGZyYWcsIGluZGV4Mikge1xuICAgICAgaWYgKGlzTnVtZXJpYyhmcmFnKSkge1xuICAgICAgICBvZmZzZXRzW2luZGV4XSArPSBmcmFnICogKG9wW2luZGV4MiAtIDFdID09PSAnLScgPyAtMSA6IDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQGFyZ3VtZW50IHtOdW1iZXJ8U3RyaW5nfSBvcHRpb25zLm9mZnNldD0wXG4gKiBUaGUgb2Zmc2V0IHZhbHVlIGFzIGRlc2NyaWJlZCBpbiB0aGUgbW9kaWZpZXIgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gb2Zmc2V0KGRhdGEsIF9yZWYpIHtcbiAgdmFyIG9mZnNldCA9IF9yZWYub2Zmc2V0O1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQsXG4gICAgICBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIHZhciBvZmZzZXRzID0gdm9pZCAwO1xuICBpZiAoaXNOdW1lcmljKCtvZmZzZXQpKSB7XG4gICAgb2Zmc2V0cyA9IFsrb2Zmc2V0LCAwXTtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXRzID0gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXIsIHJlZmVyZW5jZSwgYmFzZVBsYWNlbWVudCk7XG4gIH1cblxuICBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0IC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3JpZ2h0Jykge1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzFdO1xuICB9IGVsc2UgaWYgKGJhc2VQbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgcG9wcGVyLmxlZnQgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIudG9wIC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1sxXTtcbiAgfVxuXG4gIGRhdGEucG9wcGVyID0gcG9wcGVyO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGJvdW5kYXJpZXNFbGVtZW50ID0gb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCB8fCBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciByZWZlcmVuY2UgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICAgIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICAgIHZhciBpc1ZlcnRpY2FsID0gWydib3R0b20nLCAndG9wJ10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG4gICAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICAgIHZhciBzaGlmdE9mZnNldHMgPSB7XG4gICAgICBzdGFydDogZGVmaW5lUHJvcGVydHkoe30sIHNpZGUsIHJlZmVyZW5jZVtzaWRlXSksXG4gICAgICBlbmQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0gKyByZWZlcmVuY2VbbWVhc3VyZW1lbnRdIC0gcG9wcGVyW21lYXN1cmVtZW50XSlcbiAgICB9O1xuXG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIHNoaWZ0T2Zmc2V0c1tzaGlmdHZhcmlhdGlvbl0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBoaWRlKGRhdGEpIHtcbiAgaWYgKCFpc01vZGlmaWVyUmVxdWlyZWQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsICdoaWRlJywgJ3ByZXZlbnRPdmVyZmxvdycpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgcmVmUmVjdCA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gIHZhciBib3VuZCA9IGZpbmQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSAncHJldmVudE92ZXJmbG93JztcbiAgfSkuYm91bmRhcmllcztcblxuICBpZiAocmVmUmVjdC5ib3R0b20gPCBib3VuZC50b3AgfHwgcmVmUmVjdC5sZWZ0ID4gYm91bmQucmlnaHQgfHwgcmVmUmVjdC50b3AgPiBib3VuZC5ib3R0b20gfHwgcmVmUmVjdC5yaWdodCA8IGJvdW5kLmxlZnQpIHtcbiAgICAvLyBBdm9pZCB1bm5lY2Vzc2FyeSBET00gYWNjZXNzIGlmIHZpc2liaWxpdHkgaGFzbid0IGNoYW5nZWRcbiAgICBpZiAoZGF0YS5oaWRlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSB0cnVlO1xuICAgIGRhdGEuYXR0cmlidXRlc1sneC1vdXQtb2YtYm91bmRhcmllcyddID0gJyc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGRhdGEuaGlkZSA9IGZhbHNlO1xuICAgIGRhdGEuYXR0cmlidXRlc1sneC1vdXQtb2YtYm91bmRhcmllcyddID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaW5uZXIoZGF0YSkge1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICB2YXIgcmVmZXJlbmNlID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucmVmZXJlbmNlKTtcbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbcGxhY2VtZW50XSAtIChzdWJ0cmFjdExlbmd0aCA/IHBvcHBlcltpc0hvcml6ID8gJ3dpZHRoJyA6ICdoZWlnaHQnXSA6IDApO1xuXG4gIGRhdGEucGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldENsaWVudFJlY3QocG9wcGVyKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBNb2RpZmllciBmdW5jdGlvbiwgZWFjaCBtb2RpZmllciBjYW4gaGF2ZSBhIGZ1bmN0aW9uIG9mIHRoaXMgdHlwZSBhc3NpZ25lZFxuICogdG8gaXRzIGBmbmAgcHJvcGVydHkuPGJyIC8+XG4gKiBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCB1cGRhdGUsIHRoaXMgbWVhbnMgdGhhdCB5b3UgbXVzdFxuICogbWFrZSBzdXJlIHRoZXkgYXJlIHBlcmZvcm1hbnQgZW5vdWdoIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuICpcbiAqIEBmdW5jdGlvbiBNb2RpZmllckZuXG4gKiBAYXJndW1lbnQge2RhdGFPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge2RhdGFPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuXG4vKipcbiAqIE1vZGlmaWVycyBhcmUgcGx1Z2lucyB1c2VkIHRvIGFsdGVyIHRoZSBiZWhhdmlvciBvZiB5b3VyIHBvcHBlcnMuPGJyIC8+XG4gKiBQb3BwZXIuanMgdXNlcyBhIHNldCBvZiA5IG1vZGlmaWVycyB0byBwcm92aWRlIGFsbCB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0aWVzXG4gKiBuZWVkZWQgYnkgdGhlIGxpYnJhcnkuXG4gKlxuICogVXN1YWxseSB5b3UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSB0aGUgYG9yZGVyYCwgYGZuYCBhbmQgYG9uTG9hZGAgcHJvcHMuXG4gKiBBbGwgdGhlIG90aGVyIHByb3BlcnRpZXMgYXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgYmUgdHdlYWtlZC5cbiAqIEBuYW1lc3BhY2UgbW9kaWZpZXJzXG4gKi9cbnZhciBtb2RpZmllcnMgPSB7XG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHNoaWZ0IHRoZSBwb3BwZXIgb24gdGhlIHN0YXJ0IG9yIGVuZCBvZiBpdHMgcmVmZXJlbmNlXG4gICAqIGVsZW1lbnQuPGJyIC8+XG4gICAqIEl0IHdpbGwgcmVhZCB0aGUgdmFyaWF0aW9uIG9mIHRoZSBgcGxhY2VtZW50YCBwcm9wZXJ0eS48YnIgLz5cbiAgICogSXQgY2FuIGJlIG9uZSBlaXRoZXIgYC1lbmRgIG9yIGAtc3RhcnRgLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgc2hpZnQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAxMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBzaGlmdFxuICB9LFxuXG4gIC8qKlxuICAgKiBUaGUgYG9mZnNldGAgbW9kaWZpZXIgY2FuIHNoaWZ0IHlvdXIgcG9wcGVyIG9uIGJvdGggaXRzIGF4aXMuXG4gICAqXG4gICAqIEl0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyB1bml0czpcbiAgICogLSBgcHhgIG9yIHVuaXRsZXNzLCBpbnRlcnByZXRlZCBhcyBwaXhlbHNcbiAgICogLSBgJWAgb3IgYCVyYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgKiAtIGAlcGAsIHBlcmNlbnRhZ2UgcmVsYXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogLSBgdndgLCBDU1Mgdmlld3BvcnQgd2lkdGggdW5pdFxuICAgKiAtIGB2aGAsIENTUyB2aWV3cG9ydCBoZWlnaHQgdW5pdFxuICAgKlxuICAgKiBGb3IgbGVuZ3RoIGlzIGludGVuZGVkIHRoZSBtYWluIGF4aXMgcmVsYXRpdmUgdG8gdGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyLjxiciAvPlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHBsYWNlbWVudCBpcyBgdG9wYCBvciBgYm90dG9tYCwgdGhlIGxlbmd0aCB3aWxsIGJlIHRoZVxuICAgKiBgd2lkdGhgLiBJbiBjYXNlIG9mIGBsZWZ0YCBvciBgcmlnaHRgLCBpdCB3aWxsIGJlIHRoZSBoZWlnaHQuXG4gICAqXG4gICAqIFlvdSBjYW4gcHJvdmlkZSBhIHNpbmdsZSB2YWx1ZSAoYXMgYE51bWJlcmAgb3IgYFN0cmluZ2ApLCBvciBhIHBhaXIgb2YgdmFsdWVzXG4gICAqIGFzIGBTdHJpbmdgIGRpdmlkZWQgYnkgYSBjb21tYSBvciBvbmUgKG9yIG1vcmUpIHdoaXRlIHNwYWNlcy48YnIgLz5cbiAgICogVGhlIGxhdHRlciBpcyBhIGRlcHJlY2F0ZWQgbWV0aG9kIGJlY2F1c2UgaXQgbGVhZHMgdG8gY29uZnVzaW9uIGFuZCB3aWxsIGJlXG4gICAqIHJlbW92ZWQgaW4gdjIuPGJyIC8+XG4gICAqIEFkZGl0aW9uYWxseSwgaXQgYWNjZXB0cyBhZGRpdGlvbnMgYW5kIHN1YnRyYWN0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudCB1bml0cy5cbiAgICogTm90ZSB0aGF0IG11bHRpcGxpY2F0aW9ucyBhbmQgZGl2aXNpb25zIGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIFZhbGlkIGV4YW1wbGVzIGFyZTpcbiAgICogYGBgXG4gICAqIDEwXG4gICAqICcxMCUnXG4gICAqICcxMCwgMTAnXG4gICAqICcxMCUsIDEwJ1xuICAgKiAnMTAgKyAxMCUnXG4gICAqICcxMCAtIDV2aCArIDMlJ1xuICAgKiAnLTEwcHggKyA1dmgsIDVweCAtIDYlJ1xuICAgKiBgYGBcbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIG9mZnNldDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj0yMDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDIwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IG9mZnNldCxcbiAgICAvKiogQHByb3Age051bWJlcnxTdHJpbmd9IG9mZnNldD0wXG4gICAgICogVGhlIG9mZnNldCB2YWx1ZSBhcyBkZXNjcmliZWQgaW4gdGhlIG1vZGlmaWVyIGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgb2Zmc2V0OiAwXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gcHJldmVudCB0aGUgcG9wcGVyIGZyb20gYmVpbmcgcG9zaXRpb25lZCBvdXRzaWRlIHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQW4gc2NlbmFyaW8gZXhpc3RzIHdoZXJlIHRoZSByZWZlcmVuY2UgaXRzZWxmIGlzIG5vdCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuPGJyIC8+XG4gICAqIFdlIGNhbiBzYXkgaXQgaGFzIFwiZXNjYXBlZCB0aGUgYm91bmRhcmllc1wiIOKAlCBvciBqdXN0IFwiZXNjYXBlZFwiLjxiciAvPlxuICAgKiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgcG9wcGVyIHNob3VsZCBlaXRoZXI6XG4gICAqXG4gICAqIC0gZGV0YWNoIGZyb20gdGhlIHJlZmVyZW5jZSBhbmQgcmVtYWluIFwidHJhcHBlZFwiIGluIHRoZSBib3VuZGFyaWVzLCBvclxuICAgKiAtIGlmIGl0IHNob3VsZCBpZ25vcmUgdGhlIGJvdW5kYXJ5IGFuZCBcImVzY2FwZSB3aXRoIGl0cyByZWZlcmVuY2VcIlxuICAgKlxuICAgKiBXaGVuIGBlc2NhcGVXaXRoUmVmZXJlbmNlYCBpcyBzZXQgdG9gdHJ1ZWAgYW5kIHJlZmVyZW5jZSBpcyBjb21wbGV0ZWx5XG4gICAqIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMsIHRoZSBwb3BwZXIgd2lsbCBvdmVyZmxvdyAob3IgY29tcGxldGVseSBsZWF2ZSlcbiAgICogdGhlIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gcmVtYWluIGF0dGFjaGVkIHRvIHRoZSBlZGdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAzMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gICAgLyoqXG4gICAgICogQHByb3Age0FycmF5fSBwcmlvcml0eT1bJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddXG4gICAgICogUG9wcGVyIHdpbGwgdHJ5IHRvIHByZXZlbnQgb3ZlcmZsb3cgZm9sbG93aW5nIHRoZXNlIHByaW9yaXRpZXMgYnkgZGVmYXVsdCxcbiAgICAgKiB0aGVuLCBpdCBjb3VsZCBvdmVyZmxvdyBvbiB0aGUgbGVmdCBhbmQgb24gdG9wIG9mIHRoZSBgYm91bmRhcmllc0VsZW1lbnRgXG4gICAgICovXG4gICAgcHJpb3JpdHk6IFsnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJ10sXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogQW1vdW50IG9mIHBpeGVsIHVzZWQgdG8gZGVmaW5lIGEgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3VuZGFyaWVzXG4gICAgICogYW5kIHRoZSBwb3BwZXIgdGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgaGFzIGFsd2F5cyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLCBjYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNob3RoZXJzXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXhwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gYXNzdXJlIGl0IHRvIHBvaW50IHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcywgeW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVjdGlvbiBhcmUgbmVlZGVkLlxuICAgKlxuICAgKiBJdCBoYXMgbm8gZWZmZWN0IGlmIG5vIGBhcnJvd0VsZW1lbnRgIGlzIHByb3ZpZGVkLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgYXJyb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA1MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcnJvdyxcbiAgICAvKiogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gZWxlbWVudD0nW3gtYXJyb3ddJyAtIFNlbGVjdG9yIG9yIG5vZGUgdXNlZCBhcyBhcnJvdyAqL1xuICAgIGVsZW1lbnQ6ICdbeC1hcnJvd10nXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gZmxpcCB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50IHdoZW4gaXQgc3RhcnRzIHRvIG92ZXJsYXAgaXRzXG4gICAqIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYHByZXZlbnRPdmVyZmxvd2AgbW9kaWZpZXIgYmVmb3JlIGl0IGluIG9yZGVyIHRvIHdvcmsuXG4gICAqXG4gICAqICoqTk9URToqKiB0aGlzIG1vZGlmaWVyIHdpbGwgaW50ZXJydXB0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZSBhbmQgd2lsbFxuICAgKiByZXN0YXJ0IGl0IGlmIGl0IGRldGVjdHMgdGhlIG5lZWQgdG8gZmxpcCB0aGUgcGxhY2VtZW50LlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgZmxpcDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj02MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDYwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGZsaXAsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xBcnJheX0gYmVoYXZpb3I9J2ZsaXAnXG4gICAgICogVGhlIGJlaGF2aW9yIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3BwZXIncyBwbGFjZW1lbnQuIEl0IGNhbiBiZSBvbmUgb2ZcbiAgICAgKiBgZmxpcGAsIGBjbG9ja3dpc2VgLCBgY291bnRlcmNsb2Nrd2lzZWAgb3IgYW4gYXJyYXkgd2l0aCBhIGxpc3Qgb2YgdmFsaWRcbiAgICAgKiBwbGFjZW1lbnRzICh3aXRoIG9wdGlvbmFsIHZhcmlhdGlvbnMpLlxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLFxuICAgICAqIHRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBrZWVwVG9nZXRoZXIgaXMgZW5hYmxlZClcbiAgICAgKi9cbiAgICBib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2UgdGhlIHBvcHBlciBmbG93IHRvd2FyZCB0aGUgaW5uZXIgb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB3aGVuIHRoaXMgbW9kaWZpZXIgaXMgZGlzYWJsZWQsIHRoZSBwb3BwZXIgd2lsbCBiZSBwbGFjZWQgb3V0c2lkZVxuICAgKiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBpbm5lcjoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj03MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDcwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9ZmFsc2UgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogaW5uZXJcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBoaWRlIHRoZSBwb3BwZXIgd2hlbiBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGVcbiAgICogcG9wcGVyIGJvdW5kYXJpZXMuIEl0IHdpbGwgc2V0IGEgYHgtb3V0LW9mLWJvdW5kYXJpZXNgIGF0dHJpYnV0ZSB3aGljaCBjYW5cbiAgICogYmUgdXNlZCB0byBoaWRlIHdpdGggYSBDU1Mgc2VsZWN0b3IgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgaXNcbiAgICogb3V0IG9mIGJvdW5kYXJpZXMuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgcHJldmVudE92ZXJmbG93YCBtb2RpZmllciBiZWZvcmUgaXQgaW4gb3JkZXIgdG8gd29yay5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGhpZGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9ODAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA4MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBoaWRlXG4gIH0sXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGNvbXB1dGVkIHN0eWxlcyB0byB0aGUgcG9wcGVyIGVsZW1lbnQuXG4gICAqXG4gICAqIEFsbCB0aGUgRE9NIG1hbmlwdWxhdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhpcyBtb2RpZmllci4gVGhpcyBpcyB1c2VmdWwgaW4gY2FzZVxuICAgKiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgUG9wcGVyLmpzIGluc2lkZSBhIGZyYW1ld29yayBvciB2aWV3IGxpYnJhcnkgYW5kIHlvdVxuICAgKiB3YW50IHRvIGRlbGVnYXRlIGFsbCB0aGUgRE9NIG1hbmlwdWxhdGlvbnMgdG8gaXQuXG4gICAqXG4gICAqIEp1c3QgZGlzYWJsZSB0aGlzIG1vZGlmaWVyIGFuZCBkZWZpbmUgeW91IG93biB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFwcGx5U3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9OTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA5MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcHBseVN0eWxlLFxuICAgIC8qKiBAcHJvcCB7RnVuY3Rpb259ICovXG4gICAgb25Mb2FkOiBhcHBseVN0eWxlT25Mb2FkLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzZCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHRydWVcbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgYGRhdGFPYmplY3RgIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgaW5mb3JtYXRpb25zIHVzZWQgYnkgUG9wcGVyLmpzXG4gKiB0aGlzIG9iamVjdCBnZXQgcGFzc2VkIHRvIG1vZGlmaWVycyBhbmQgdG8gdGhlIGBvbkNyZWF0ZWAgYW5kIGBvblVwZGF0ZWAgY2FsbGJhY2tzLlxuICogQG5hbWUgZGF0YU9iamVjdFxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuaW5zdGFuY2UgVGhlIFBvcHBlci5qcyBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEucGxhY2VtZW50IFBsYWNlbWVudCBhcHBsaWVkIHRvIHBvcHBlclxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEub3JpZ2luYWxQbGFjZW1lbnQgUGxhY2VtZW50IG9yaWdpbmFsbHkgZGVmaW5lZCBvbiBpbml0XG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuZmxpcHBlZCBUcnVlIGlmIHBvcHBlciBoYXMgYmVlbiBmbGlwcGVkIGJ5IGZsaXAgbW9kaWZpZXJcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGF0YS5oaWRlIFRydWUgaWYgdGhlIHJlZmVyZW5jZSBlbGVtZW50IGlzIG91dCBvZiBib3VuZGFyaWVzLCB1c2VmdWwgdG8ga25vdyB3aGVuIHRvIGhpZGUgdGhlIHBvcHBlci5cbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IGRhdGEuYXJyb3dFbGVtZW50IE5vZGUgdXNlZCBhcyBhcnJvdyBieSBhcnJvdyBtb2RpZmllclxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuc3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLCBpdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYm91bmRhcmllcyBPZmZzZXRzIG9mIHRoZSBwb3BwZXIgYm91bmRhcmllc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cyBUaGUgbWVhc3VyZW1lbnRzIG9mIHBvcHBlciwgcmVmZXJlbmNlIGFuZCBhcnJvdyBlbGVtZW50cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucG9wcGVyIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgYHRvcGAsIGBsZWZ0YCwgYHdpZHRoYCwgYGhlaWdodGAgdmFsdWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLmFycm9dIGB0b3BgIGFuZCBgbGVmdGAgb2Zmc2V0cywgb25seSBvbmUgb2YgdGhlbSB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIDBcbiAqL1xuXG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBwcm92aWRlZCB0byBQb3BwZXIuanMgY29uc3RydWN0b3IuPGJyIC8+XG4gKiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGVuIHVzaW5nIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgb2YgUG9wcGVyLmpzLjxiciAvPlxuICogVG8gb3ZlcnJpZGUgYW4gb3B0aW9uLCBzaW1wbHkgcGFzcyBhcyAzcmQgYXJndW1lbnQgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWVcbiAqIHN0cnVjdHVyZSBvZiB0aGlzIG9iamVjdCwgZXhhbXBsZTpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWYsIHBvcCwge1xuICogICBtb2RpZmllcnM6IHtcbiAqICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHN0YXRpY1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgREVGQVVMVFMgPSB7XG4gIC8qKlxuICAgKiBQb3BwZXIncyBwbGFjZW1lbnRcbiAgICogQHByb3Age1BvcHBlci5wbGFjZW1lbnRzfSBwbGFjZW1lbnQ9J2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkXG4gICAqIEBwcm9wIHtCb29sZWFufSBldmVudHNFbmFibGVkPXRydWVcbiAgICovXG4gIGV2ZW50c0VuYWJsZWQ6IHRydWUsXG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBwb3BwZXIgd2hlblxuICAgKiB5b3UgY2FsbCB0aGUgYGRlc3Ryb3lgIG1ldGhvZC5cbiAgICogQHByb3Age0Jvb2xlYW59IHJlbW92ZU9uRGVzdHJveT1mYWxzZVxuICAgKi9cbiAgcmVtb3ZlT25EZXN0cm95OiBmYWxzZSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyBjcmVhdGVkLjxiciAvPlxuICAgKiBCeSBkZWZhdWx0LCBpcyBzZXQgdG8gbm8tb3AuPGJyIC8+XG4gICAqIEFjY2VzcyBQb3BwZXIuanMgaW5zdGFuY2Ugd2l0aCBgZGF0YS5pbnN0YW5jZWAuXG4gICAqIEBwcm9wIHtvbkNyZWF0ZUNhbGxiYWNrfVxuICAgKi9cbiAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKCkge30sXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgdXBkYXRlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgY2FsbGVkXG4gICAqIG9uIHRoZSBpbml0aWFsaXphdGlvbi9jcmVhdGlvbiBvZiB0aGUgcG9wcGVyLCBidXQgb25seSBvbiBzdWJzZXF1ZW50XG4gICAqIHVwZGF0ZXMuPGJyIC8+XG4gICAqIEJ5IGRlZmF1bHQsIGlzIHNldCB0byBuby1vcC48YnIgLz5cbiAgICogQWNjZXNzIFBvcHBlci5qcyBpbnN0YW5jZSB3aXRoIGBkYXRhLmluc3RhbmNlYC5cbiAgICogQHByb3Age29uVXBkYXRlQ2FsbGJhY2t9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanNcbiAgICogQHByb3Age21vZGlmaWVyc31cbiAgICovXG4gIG1vZGlmaWVyczogbW9kaWZpZXJzXG59O1xuXG4vKipcbiAqIEBjYWxsYmFjayBvbkNyZWF0ZUNhbGxiYWNrXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBvblVwZGF0ZUNhbGxiYWNrXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vLyBVdGlsc1xuLy8gTWV0aG9kc1xudmFyIFBvcHBlciA9XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBjbGFzcyBQb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8cmVmZXJlbmNlT2JqZWN0fSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIGVsZW1lbnQgdXNlZCB0byBwb3NpdGlvbiB0aGUgcG9wcGVyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXIgLSBUaGUgSFRNTCBlbGVtZW50IHVzZWQgYXMgcG9wcGVyLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBZb3VyIGN1c3RvbSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4gW0RFRkFVTFRTXSgjZGVmYXVsdHMpXG4gKiBAcmV0dXJuIHtPYmplY3R9IGluc3RhbmNlIC0gVGhlIGdlbmVyYXRlZCBQb3BwZXIuanMgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICBjbGFzc0NhbGxDaGVjayh0aGlzLCBQb3BwZXIpO1xuICB0aGlzLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgdGhpcy5kZXN0cm95ID0gZGVzdHJveTtcbiAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycyA9IGVuYWJsZUV2ZW50TGlzdGVuZXJzO1xuICB0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycyA9IGRpc2FibGVFdmVudExpc3RlbmVycztcblxuICB0aGlzLnNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudXBkYXRlKTtcbiAgfTtcblxuICAvLyBtYWtlIHVwZGF0ZSgpIGRlYm91bmNlZCwgc28gdGhhdCBpdCBvbmx5IHJ1bnMgYXQgbW9zdCBvbmNlLXBlci10aWNrXG4gIHRoaXMudXBkYXRlID0gZGVib3VuY2UodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgLy8gd2l0aCB7fSB3ZSBjcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdGhlIG9wdGlvbnMgaW5zaWRlIGl0XG4gIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMsIG9wdGlvbnMpO1xuXG4gIC8vIGluaXQgc3RhdGVcbiAgdGhpcy5zdGF0ZSA9IHtcbiAgICBpc0Rlc3Ryb3llZDogZmFsc2UsXG4gICAgaXNDcmVhdGVkOiBmYWxzZSxcbiAgICBzY3JvbGxQYXJlbnRzOiBbXVxuICB9O1xuXG4gIC8vIGdldCByZWZlcmVuY2UgYW5kIHBvcHBlciBlbGVtZW50cyAoYWxsb3cgalF1ZXJ5IHdyYXBwZXJzKVxuICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZS5qcXVlcnkgPyByZWZlcmVuY2VbMF0gOiByZWZlcmVuY2U7XG4gIHRoaXMucG9wcGVyID0gcG9wcGVyLmpxdWVyeSA/IHBvcHBlclswXSA6IHBvcHBlcjtcblxuICAvLyBtYWtlIHN1cmUgdG8gYXBwbHkgdGhlIHBvcHBlciBwb3NpdGlvbiBiZWZvcmUgYW55IGNvbXB1dGF0aW9uXG4gIHNldFN0eWxlcyh0aGlzLnBvcHBlciwgeyBwb3NpdGlvbjogJ2Fic29sdXRlJyB9KTtcblxuICAvLyByZWZhY3RvcmluZyBtb2RpZmllcnMnIGxpc3QgKE9iamVjdCA9PiBBcnJheSlcbiAgdGhpcy5tb2RpZmllcnMgPSBPYmplY3Qua2V5cyhQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgbmFtZTogbmFtZVxuICAgIH0sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnNbbmFtZV0pO1xuICB9KTtcblxuICAvLyBhc3NpZ24gZGVmYXVsdCB2YWx1ZXMgdG8gbW9kaWZpZXJzLCBtYWtpbmcgc3VyZSB0byBvdmVycmlkZSB0aGVtIHdpdGhcbiAgLy8gdGhlIG9uZXMgZGVmaW5lZCBieSB1c2VyXG4gIHRoaXMubW9kaWZpZXJzID0gdGhpcy5tb2RpZmllcnMubWFwKGZ1bmN0aW9uIChkZWZhdWx0Q29uZmlnKSB7XG4gICAgdmFyIHVzZXJDb25maWcgPSBvcHRpb25zLm1vZGlmaWVycyAmJiBvcHRpb25zLm1vZGlmaWVyc1tkZWZhdWx0Q29uZmlnLm5hbWVdIHx8IHt9O1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdENvbmZpZywgdXNlckNvbmZpZyk7XG4gIH0pO1xuXG4gIC8vIGFkZCBjdXN0b20gbW9kaWZpZXJzIHRvIHRoZSBtb2RpZmllcnMgbGlzdFxuICBpZiAob3B0aW9ucy5tb2RpZmllcnMpIHtcbiAgICB0aGlzLm9wdGlvbnMubW9kaWZpZXJzID0gX2V4dGVuZHMoe30sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnMsIG9wdGlvbnMubW9kaWZpZXJzKTtcbiAgICBPYmplY3Qua2V5cyhvcHRpb25zLm1vZGlmaWVycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgLy8gdGFrZSBpbiBhY2NvdW50IG9ubHkgY3VzdG9tIG1vZGlmaWVyc1xuICAgICAgaWYgKFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbW9kaWZpZXIgPSBvcHRpb25zLm1vZGlmaWVyc1tuYW1lXTtcbiAgICAgICAgbW9kaWZpZXIubmFtZSA9IG5hbWU7XG4gICAgICAgIF90aGlzLm1vZGlmaWVycy5wdXNoKG1vZGlmaWVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNvcnQgdGhlIG1vZGlmaWVycyBieSBvcmRlclxuICB0aGlzLm1vZGlmaWVycyA9IHRoaXMubW9kaWZpZXJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gIH0pO1xuXG4gIC8vIG1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgd2hlbiBQb3BwZXIuanMgZ2V0IGluaXRlZFxuICAvLyBzdWNoIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgb2YgaXRzIG1vZGlmaWVyXG4gIC8vIHRoZXkgY291bGQgYWRkIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZWlyIG9wdGlvbnMgY29uZmlndXJhdGlvblxuICAvLyBCRSBBV0FSRTogZG9uJ3QgYWRkIG9wdGlvbnMgdG8gYG9wdGlvbnMubW9kaWZpZXJzLm5hbWVgIGJ1dCB0byBgbW9kaWZpZXJPcHRpb25zYCFcbiAgdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXJPcHRpb25zKSB7XG4gICAgaWYgKG1vZGlmaWVyT3B0aW9ucy5lbmFibGVkICYmIGlzRnVuY3Rpb24obW9kaWZpZXJPcHRpb25zLm9uTG9hZCkpIHtcbiAgICAgIG1vZGlmaWVyT3B0aW9ucy5vbkxvYWQoX3RoaXMucmVmZXJlbmNlLCBfdGhpcy5wb3BwZXIsIF90aGlzLm9wdGlvbnMsIG1vZGlmaWVyT3B0aW9ucywgX3RoaXMuc3RhdGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZmlyZSB0aGUgZmlyc3QgdXBkYXRlIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIgaW4gdGhlIHJpZ2h0IHBsYWNlXG4gIHRoaXMudXBkYXRlKCk7XG5cbiAgdmFyIGV2ZW50c0VuYWJsZWQgPSB0aGlzLm9wdGlvbnMuZXZlbnRzRW5hYmxlZDtcbiAgaWYgKGV2ZW50c0VuYWJsZWQpIHtcbiAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkID0gZXZlbnRzRW5hYmxlZDtcbn07XG5cbi8qKlxuICogVGhlIGByZWZlcmVuY2VPYmplY3RgIGlzIGFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIGFuIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggUG9wcGVyLmpzXG4gKiBhbmQgbGV0cyB5b3UgdXNlIGl0IGFzIHJlcGxhY2VtZW50IG9mIGEgcmVhbCBET00gbm9kZS48YnIgLz5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIHBvc2l0aW9uIGEgcG9wcGVyIHJlbGF0aXZlbHkgdG8gYSBzZXQgb2YgY29vcmRpbmF0ZXNcbiAqIGluIGNhc2UgeW91IGRvbid0IGhhdmUgYSBET00gbm9kZSB0byB1c2UgYXMgcmVmZXJlbmNlLlxuICpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWZlcmVuY2VPYmplY3QsIHBvcHBlck5vZGUpO1xuICogYGBgXG4gKlxuICogTkI6IFRoaXMgZmVhdHVyZSBpc24ndCBzdXBwb3J0ZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTBcbiAqIEBuYW1lIHJlZmVyZW5jZU9iamVjdFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZGF0YS5nZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRhLmNsaWVudFdpZHRoXG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50SGVpZ2h0XG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgdmlydHVhbCByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuXG5cblBvcHBlci5VdGlscyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCkuUG9wcGVyVXRpbHM7XG5Qb3BwZXIucGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5Qb3BwZXIuRGVmYXVsdHMgPSBERUZBVUxUUztcblxuZXhwb3J0IGRlZmF1bHQgUG9wcGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9wcGVyLmpzLm1hcFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9wb3BwZXIuanMvZGlzdC9lc20vcG9wcGVyLmpzIiwiaW1wb3J0IFBvcHBlciBmcm9tICdwb3BwZXIuanMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQgeyp9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICB2YXIgZ2V0VHlwZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cblxuXG5cblxuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgY29udGFpbmVyOiBmYWxzZSxcbiAgZGVsYXk6IDAsXG4gIGh0bWw6IGZhbHNlLFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICB0aXRsZTogJycsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLFxuICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxuICBvZmZzZXQ6IDBcbn07XG5cbnZhciBUb29sdGlwID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFRvb2x0aXAuanMgaW5zdGFuY2VcbiAgICogQGNsYXNzIFRvb2x0aXBcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSBlbGVtZW50IHVzZWQgdG8gcG9zaXRpb24gdGhlIHRvb2x0aXBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMucGxhY2VtZW50PWJvdHRvbVxuICAgKiAgICAgIFBsYWNlbWVudCBvZiB0aGUgcG9wcGVyIGFjY2VwdGVkIHZhbHVlczogYHRvcCgtc3RhcnQsIC1lbmQpLCByaWdodCgtc3RhcnQsIC1lbmQpLCBib3R0b20oLXN0YXJ0LCAtZW5kKSxcbiAgICogICAgICBsZWZ0KC1zdGFydCwgLWVuZClgXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSBET00gbm9kZSB1c2VkIGFzIHJlZmVyZW5jZSBvZiB0aGUgdG9vbHRpcCAoaXQgY2FuIGJlIGEgalF1ZXJ5IGVsZW1lbnQpLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudHxTdHJpbmd8ZmFsc2V9IG9wdGlvbnMuY29udGFpbmVyPWZhbHNlIC0gQXBwZW5kIHRoZSB0b29sdGlwIHRvIGEgc3BlY2lmaWMgZWxlbWVudC5cbiAgICogQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBvcHRpb25zLmRlbGF5PTBcbiAgICogICAgICBEZWxheSBzaG93aW5nIGFuZCBoaWRpbmcgdGhlIHRvb2x0aXAgKG1zKSAtIGRvZXMgbm90IGFwcGx5IHRvIG1hbnVhbCB0cmlnZ2VyIHR5cGUuXG4gICAqICAgICAgSWYgYSBudW1iZXIgaXMgc3VwcGxpZWQsIGRlbGF5IGlzIGFwcGxpZWQgdG8gYm90aCBoaWRlL3Nob3cuXG4gICAqICAgICAgT2JqZWN0IHN0cnVjdHVyZSBpczogYHsgc2hvdzogNTAwLCBoaWRlOiAxMDAgfWBcbiAgICogQHBhcmFtIHtCb29sZWFufSBvcHRpb25zLmh0bWw9ZmFsc2UgLSBJbnNlcnQgSFRNTCBpbnRvIHRoZSB0b29sdGlwLiBJZiBmYWxzZSwgdGhlIGNvbnRlbnQgd2lsbCBpbnNlcnRlZCB3aXRoIGBpbm5lclRleHRgLlxuICAgKiBAcGFyYW0ge1N0cmluZ3xQbGFjZW1lbnRGdW5jdGlvbn0gb3B0aW9ucy5wbGFjZW1lbnQ9J3RvcCcgLSBPbmUgb2YgdGhlIGFsbG93ZWQgcGxhY2VtZW50cywgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgb25lIG9mIHRoZW0uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnRlbXBsYXRlPSc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj48ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PjwvZGl2PidcbiAgICogICAgICBCYXNlIEhUTUwgdG8gdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSB0b29sdGlwLlxuICAgKiAgICAgIFRoZSB0b29sdGlwJ3MgYHRpdGxlYCB3aWxsIGJlIGluamVjdGVkIGludG8gdGhlIGAudG9vbHRpcC1pbm5lcmAgb3IgYC50b29sdGlwX19pbm5lcmAuXG4gICAqICAgICAgYC50b29sdGlwLWFycm93YCBvciBgLnRvb2x0aXBfX2Fycm93YCB3aWxsIGJlY29tZSB0aGUgdG9vbHRpcCdzIGFycm93LlxuICAgKiAgICAgIFRoZSBvdXRlcm1vc3Qgd3JhcHBlciBlbGVtZW50IHNob3VsZCBoYXZlIHRoZSBgLnRvb2x0aXBgIGNsYXNzLlxuICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudHxUaXRsZUZ1bmN0aW9ufSBvcHRpb25zLnRpdGxlPScnIC0gRGVmYXVsdCB0aXRsZSB2YWx1ZSBpZiBgdGl0bGVgIGF0dHJpYnV0ZSBpc24ndCBwcmVzZW50LlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy50cmlnZ2VyPSdob3ZlciBmb2N1cydcbiAgICogICAgICBIb3cgdG9vbHRpcCBpcyB0cmlnZ2VyZWQgLSBjbGljayB8IGhvdmVyIHwgZm9jdXMgfCBtYW51YWwuXG4gICAqICAgICAgWW91IG1heSBwYXNzIG11bHRpcGxlIHRyaWdnZXJzOyBzZXBhcmF0ZSB0aGVtIHdpdGggYSBzcGFjZS4gYG1hbnVhbGAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIHRyaWdnZXIuXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnRcbiAgICogICAgICBUaGUgZWxlbWVudCB1c2VkIGFzIGJvdW5kYXJpZXMgZm9yIHRoZSB0b29sdGlwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBQb3BwZXIuanMnXG4gICAqICAgICAgW2JvdW5kYXJpZXNFbGVtZW50IGRvY3NdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9wb3BwZXItZG9jdW1lbnRhdGlvbi5odG1sKVxuICAgKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTAgLSBPZmZzZXQgb2YgdGhlIHRvb2x0aXAgcmVsYXRpdmUgdG8gaXRzIHJlZmVyZW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gUG9wcGVyLmpzJ1xuICAgKiAgICAgIFtvZmZzZXQgZG9jc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL3BvcHBlci1kb2N1bWVudGF0aW9uLmh0bWwpXG4gICAqIEByZXR1cm4ge09iamVjdH0gaW5zdGFuY2UgLSBUaGUgZ2VuZXJhdGVkIHRvb2x0aXAgaW5zdGFuY2VcbiAgICovXG4gIGZ1bmN0aW9uIFRvb2x0aXAocmVmZXJlbmNlLCBvcHRpb25zKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9vbHRpcCk7XG5cbiAgICBfaW5pdGlhbGlzZVByb3BzLmNhbGwodGhpcyk7XG5cbiAgICAvLyBhcHBseSB1c2VyIG9wdGlvbnMgb3ZlciBkZWZhdWx0IG9uZXNcbiAgICBvcHRpb25zID0gX2V4dGVuZHMoe30sIERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XG5cbiAgICByZWZlcmVuY2UuanF1ZXJ5ICYmIChyZWZlcmVuY2UgPSByZWZlcmVuY2VbMF0pO1xuXG4gICAgLy8gY2FjaGUgcmVmZXJlbmNlIGFuZCBvcHRpb25zXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIGdldCBldmVudHMgbGlzdFxuICAgIHZhciBldmVudHMgPSB0eXBlb2Ygb3B0aW9ucy50cmlnZ2VyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudHJpZ2dlci5zcGxpdCgnICcpLmZpbHRlcihmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgcmV0dXJuIFsnY2xpY2snLCAnaG92ZXInLCAnZm9jdXMnXS5pbmRleE9mKHRyaWdnZXIpICE9PSAtMTtcbiAgICB9KSA6IFtdO1xuXG4gICAgLy8gc2V0IGluaXRpYWwgc3RhdGVcbiAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcblxuICAgIC8vIHNldCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9zZXRFdmVudExpc3RlbmVycyhyZWZlcmVuY2UsIGV2ZW50cywgb3B0aW9ucyk7XG4gIH1cblxuICAvL1xuICAvLyBQdWJsaWMgbWV0aG9kc1xuICAvL1xuXG4gIC8qKlxuICAgKiBSZXZlYWxzIGFuIGVsZW1lbnQncyB0b29sdGlwLiBUaGlzIGlzIGNvbnNpZGVyZWQgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcgb2YgdGhlIHRvb2x0aXAuXG4gICAqIFRvb2x0aXBzIHdpdGggemVyby1sZW5ndGggdGl0bGVzIGFyZSBuZXZlciBkaXNwbGF5ZWQuXG4gICAqIEBtZW1iZXJvZiBUb29sdGlwXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIEhpZGVzIGFuIGVsZW1lbnTigJlzIHRvb2x0aXAuIFRoaXMgaXMgY29uc2lkZXJlZCBhIOKAnG1hbnVhbOKAnSB0cmlnZ2VyaW5nIG9mIHRoZSB0b29sdGlwLlxuICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBIaWRlcyBhbmQgZGVzdHJveXMgYW4gZWxlbWVudOKAmXMgdG9vbHRpcC5cbiAgICogQG1lbWJlcm9mIFRvb2x0aXBcbiAgICovXG5cblxuICAvKipcbiAgICogVG9nZ2xlcyBhbiBlbGVtZW504oCZcyB0b29sdGlwLiBUaGlzIGlzIGNvbnNpZGVyZWQgYSDigJxtYW51YWzigJ0gdHJpZ2dlcmluZyBvZiB0aGUgdG9vbHRpcC5cbiAgICogQG1lbWJlcm9mIFRvb2x0aXBcbiAgICovXG5cblxuICAvL1xuICAvLyBEZWZhdWx0c1xuICAvL1xuXG5cbiAgLy9cbiAgLy8gUHJpdmF0ZSBtZXRob2RzXG4gIC8vXG5cbiAgY3JlYXRlQ2xhc3MoVG9vbHRpcCwgW3tcbiAgICBrZXk6ICdfY3JlYXRlJyxcblxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB0b29sdGlwIG5vZGVcbiAgICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlXG4gICAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8VGl0bGVGdW5jdGlvbn0gdGl0bGVcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFsbG93SHRtbFxuICAgICAqIEByZXR1cm4ge0hUTUxlbGVtZW50fSB0b29sdGlwTm9kZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlKHJlZmVyZW5jZSwgdGVtcGxhdGUsIHRpdGxlLCBhbGxvd0h0bWwpIHtcbiAgICAgIC8vIGNyZWF0ZSB0b29sdGlwIGVsZW1lbnRcbiAgICAgIHZhciB0b29sdGlwR2VuZXJhdG9yID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdG9vbHRpcEdlbmVyYXRvci5pbm5lckhUTUwgPSB0ZW1wbGF0ZTtcbiAgICAgIHZhciB0b29sdGlwTm9kZSA9IHRvb2x0aXBHZW5lcmF0b3IuY2hpbGROb2Rlc1swXTtcblxuICAgICAgLy8gYWRkIHVuaXF1ZSBJRCB0byBvdXIgdG9vbHRpcCAobmVlZGVkIGZvciBhY2Nlc3NpYmlsaXR5IHJlYXNvbnMpXG4gICAgICB0b29sdGlwTm9kZS5pZCA9ICd0b29sdGlwXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgMTApO1xuXG4gICAgICAvLyBzZXQgaW5pdGlhbCBgYXJpYS1oaWRkZW5gIHN0YXRlIHRvIGBmYWxzZWAgKGl0J3MgdmlzaWJsZSEpXG4gICAgICB0b29sdGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG5cbiAgICAgIC8vIGFkZCB0aXRsZSB0byB0b29sdGlwXG4gICAgICB2YXIgdGl0bGVOb2RlID0gdG9vbHRpcEdlbmVyYXRvci5xdWVyeVNlbGVjdG9yKHRoaXMuaW5uZXJTZWxlY3Rvcik7XG4gICAgICBpZiAodGl0bGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgLy8gaWYgdGl0bGUgaXMgYSBub2RlLCBhcHBlbmQgaXQgb25seSBpZiBhbGxvd0h0bWwgaXMgdHJ1ZVxuICAgICAgICBhbGxvd0h0bWwgJiYgdGl0bGVOb2RlLmFwcGVuZENoaWxkKHRpdGxlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aXRsZSkpIHtcbiAgICAgICAgLy8gaWYgdGl0bGUgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBhbmQgc2V0IGlubmVyVGV4dCBvciBpbm5lckh0bWwgZGVwZW5kaW5nIGJ5IGBhbGxvd0h0bWxgIHZhbHVlXG4gICAgICAgIHZhciB0aXRsZVRleHQgPSB0aXRsZS5jYWxsKHJlZmVyZW5jZSk7XG4gICAgICAgIGFsbG93SHRtbCA/IHRpdGxlTm9kZS5pbm5lckhUTUwgPSB0aXRsZVRleHQgOiB0aXRsZU5vZGUuaW5uZXJUZXh0ID0gdGl0bGVUZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgaXQncyBqdXN0IGEgc2ltcGxlIHRleHQsIHNldCBpbm5lclRleHQgb3IgaW5uZXJIdG1sIGRlcGVuZGluZyBieSBgYWxsb3dIdG1sYCB2YWx1ZVxuICAgICAgICBhbGxvd0h0bWwgPyB0aXRsZU5vZGUuaW5uZXJIVE1MID0gdGl0bGUgOiB0aXRsZU5vZGUuaW5uZXJUZXh0ID0gdGl0bGU7XG4gICAgICB9XG5cbiAgICAgIC8vIHJldHVybiB0aGUgZ2VuZXJhdGVkIHRvb2x0aXAgbm9kZVxuICAgICAgcmV0dXJuIHRvb2x0aXBOb2RlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19zaG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3Nob3cocmVmZXJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAvLyBkb24ndCBzaG93IGlmIGl0J3MgYWxyZWFkeSB2aXNpYmxlXG4gICAgICBpZiAodGhpcy5faXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcblxuICAgICAgLy8gaWYgdGhlIHRvb2x0aXBOb2RlIGFscmVhZHkgZXhpc3RzLCBqdXN0IHNob3cgaXRcbiAgICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xuICAgICAgICB0aGlzLl90b29sdGlwTm9kZS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgICAgdGhpcy5wb3BwZXJJbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aXRsZVxuICAgICAgdmFyIHRpdGxlID0gcmVmZXJlbmNlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSB8fCBvcHRpb25zLnRpdGxlO1xuXG4gICAgICAvLyBkb24ndCBzaG93IHRvb2x0aXAgaWYgbm8gdGl0bGUgaXMgZGVmaW5lZFxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIHRvb2x0aXAgbm9kZVxuICAgICAgdmFyIHRvb2x0aXBOb2RlID0gdGhpcy5fY3JlYXRlKHJlZmVyZW5jZSwgb3B0aW9ucy50ZW1wbGF0ZSwgdGl0bGUsIG9wdGlvbnMuaHRtbCk7XG5cbiAgICAgIC8vIEFkZCBgYXJpYS1kZXNjcmliZWRieWAgdG8gb3VyIHJlZmVyZW5jZSBlbGVtZW50IGZvciBhY2Nlc3NpYmlsaXR5IHJlYXNvbnNcbiAgICAgIHRvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRvb2x0aXBOb2RlLmlkKTtcblxuICAgICAgLy8gYXBwZW5kIHRvb2x0aXAgdG8gY29udGFpbmVyXG4gICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fZmluZENvbnRhaW5lcihvcHRpb25zLmNvbnRhaW5lciwgcmVmZXJlbmNlKTtcblxuICAgICAgdGhpcy5fYXBwZW5kKHRvb2x0aXBOb2RlLCBjb250YWluZXIpO1xuXG4gICAgICB2YXIgcG9wcGVyT3B0aW9ucyA9IHtcbiAgICAgICAgcGxhY2VtZW50OiBvcHRpb25zLnBsYWNlbWVudCxcbiAgICAgICAgYXJyb3dFbGVtZW50OiB0aGlzLmFycm93U2VsZWN0b3JcbiAgICAgIH07XG5cbiAgICAgIGlmIChvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50KSB7XG4gICAgICAgIHBvcHBlck9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcHBlckluc3RhbmNlID0gbmV3IFBvcHBlcihyZWZlcmVuY2UsIHRvb2x0aXBOb2RlLCBwb3BwZXJPcHRpb25zKTtcblxuICAgICAgdGhpcy5fdG9vbHRpcE5vZGUgPSB0b29sdGlwTm9kZTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2hpZGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGlkZSgpIC8qcmVmZXJlbmNlLCBvcHRpb25zKi97XG4gICAgICAvLyBkb24ndCBoaWRlIGlmIGl0J3MgYWxyZWFkeSBoaWRkZW5cbiAgICAgIGlmICghdGhpcy5faXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcblxuICAgICAgLy8gaGlkZSB0b29sdGlwTm9kZVxuICAgICAgdGhpcy5fdG9vbHRpcE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuX3Rvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZGlzcG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kaXNwb3NlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX3Rvb2x0aXBOb2RlKSB7XG4gICAgICAgIHRoaXMuX2hpZGUoKTtcblxuICAgICAgICAvLyBkZXN0cm95IGluc3RhbmNlXG4gICAgICAgIHRoaXMucG9wcGVySW5zdGFuY2UuZGVzdHJveSgpO1xuXG4gICAgICAgIC8vIHJlbW92ZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgZnVuYyA9IF9yZWYuZnVuYyxcbiAgICAgICAgICAgICAgZXZlbnQgPSBfcmVmLmV2ZW50O1xuXG4gICAgICAgICAgX3RoaXMuX3Rvb2x0aXBOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cbiAgICAgICAgLy8gZGVzdHJveSB0b29sdGlwTm9kZVxuICAgICAgICB0aGlzLl90b29sdGlwTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3Rvb2x0aXBOb2RlKTtcbiAgICAgICAgdGhpcy5fdG9vbHRpcE5vZGUgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2ZpbmRDb250YWluZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZmluZENvbnRhaW5lcihjb250YWluZXIsIHJlZmVyZW5jZSkge1xuICAgICAgLy8gaWYgY29udGFpbmVyIGlzIGEgcXVlcnksIGdldCB0aGUgcmVsYXRpdmUgZWxlbWVudFxuICAgICAgaWYgKHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcik7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lciA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gaWYgY29udGFpbmVyIGlzIGBmYWxzZWAsIHNldCBpdCB0byByZWZlcmVuY2UgcGFyZW50XG4gICAgICAgIGNvbnRhaW5lciA9IHJlZmVyZW5jZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmQgdG9vbHRpcCB0byBjb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdG9vbHRpcFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfGZhbHNlfSBjb250YWluZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2FwcGVuZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hcHBlbmQodG9vbHRpcE5vZGUsIGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2x0aXBOb2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfc2V0RXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0RXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBldmVudHMsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgZGlyZWN0RXZlbnRzID0gW107XG4gICAgICB2YXIgb3Bwb3NpdGVFdmVudHMgPSBbXTtcblxuICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgICBjYXNlICdob3Zlcic6XG4gICAgICAgICAgICBkaXJlY3RFdmVudHMucHVzaCgnbW91c2VlbnRlcicpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnbW91c2VsZWF2ZScpO1xuICAgICAgICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgICAgICAgIGRpcmVjdEV2ZW50cy5wdXNoKCdmb2N1cycpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnYmx1cicpO1xuICAgICAgICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgICAgICAgIGRpcmVjdEV2ZW50cy5wdXNoKCdjbGljaycpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnY2xpY2snKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNjaGVkdWxlIHNob3cgdG9vbHRpcFxuICAgICAgZGlyZWN0RXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gZnVuYyhldnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMyLl9pc09wZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXZ0LnVzZWRCeVRvb2x0aXAgPSB0cnVlO1xuICAgICAgICAgIF90aGlzMi5fc2NoZWR1bGVTaG93KHJlZmVyZW5jZSwgb3B0aW9ucy5kZWxheSwgb3B0aW9ucywgZXZ0KTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMyLl9ldmVudHMucHVzaCh7IGV2ZW50OiBldmVudCwgZnVuYzogZnVuYyB9KTtcbiAgICAgICAgcmVmZXJlbmNlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHNjaGVkdWxlIGhpZGUgdG9vbHRpcFxuICAgICAgb3Bwb3NpdGVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKGV2dCkge1xuICAgICAgICAgIGlmIChldnQudXNlZEJ5VG9vbHRpcCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpczIuX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIG9wdGlvbnMuZGVsYXksIG9wdGlvbnMsIGV2dCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzMi5fZXZlbnRzLnB1c2goeyBldmVudDogZXZlbnQsIGZ1bmM6IGZ1bmMgfSk7XG4gICAgICAgIHJlZmVyZW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19zY2hlZHVsZVNob3cnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc2NoZWR1bGVTaG93KHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMgLyosIGV2dCAqLykge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIC8vIGRlZmF1bHRzIHRvIDBcbiAgICAgIHZhciBjb21wdXRlZERlbGF5ID0gZGVsYXkgJiYgZGVsYXkuc2hvdyB8fCBkZWxheSB8fCAwO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLl9zaG93KHJlZmVyZW5jZSwgb3B0aW9ucyk7XG4gICAgICB9LCBjb21wdXRlZERlbGF5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfc2NoZWR1bGVIaWRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIGRlbGF5LCBvcHRpb25zLCBldnQpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAvLyBkZWZhdWx0cyB0byAwXG4gICAgICB2YXIgY29tcHV0ZWREZWxheSA9IGRlbGF5ICYmIGRlbGF5LmhpZGUgfHwgZGVsYXkgfHwgMDtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzNC5faXNPcGVuID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoX3RoaXM0Ll90b29sdGlwTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB3ZSBhcmUgaGlkaW5nIGJlY2F1c2Ugb2YgYSBtb3VzZWxlYXZlLCB3ZSBtdXN0IGNoZWNrIHRoYXQgdGhlIG5ld1xuICAgICAgICAvLyByZWZlcmVuY2UgaXNuJ3QgdGhlIHRvb2x0aXAsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gaGlkZSBpdFxuICAgICAgICBpZiAoZXZ0LnR5cGUgPT09ICdtb3VzZWxlYXZlJykge1xuICAgICAgICAgIHZhciBpc1NldCA9IF90aGlzNC5fc2V0VG9vbHRpcE5vZGVFdmVudChldnQsIHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMpO1xuXG4gICAgICAgICAgLy8gaWYgd2Ugc2V0IHRoZSBuZXcgZXZlbnQsIGRvbid0IGhpZGUgdGhlIHRvb2x0aXAgeWV0XG4gICAgICAgICAgLy8gdGhlIG5ldyBldmVudCB3aWxsIHRha2UgY2FyZSB0byBoaWRlIGl0IGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChpc1NldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzNC5faGlkZShyZWZlcmVuY2UsIG9wdGlvbnMpO1xuICAgICAgfSwgY29tcHV0ZWREZWxheSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBUb29sdGlwO1xufSgpO1xuXG4vKipcbiAqIFBsYWNlbWVudCBmdW5jdGlvbiwgaXRzIGNvbnRleHQgaXMgdGhlIFRvb2x0aXAgaW5zdGFuY2UuXG4gKiBAbWVtYmVyb2YgVG9vbHRpcFxuICogQGNhbGxiYWNrIFBsYWNlbWVudEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0b29sdGlwIC0gdG9vbHRpcCBET00gbm9kZS5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIHJlZmVyZW5jZSBET00gbm9kZS5cbiAqIEByZXR1cm4ge1N0cmluZ30gcGxhY2VtZW50IC0gT25lIG9mIHRoZSBhbGxvd2VkIHBsYWNlbWVudCBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGl0bGUgZnVuY3Rpb24sIGl0cyBjb250ZXh0IGlzIHRoZSBUb29sdGlwIGluc3RhbmNlLlxuICogQG1lbWJlcm9mIFRvb2x0aXBcbiAqIEBjYWxsYmFjayBUaXRsZUZ1bmN0aW9uXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHBsYWNlbWVudCAtIFRoZSBkZXNpcmVkIHRpdGxlLlxuICovXG5cblxudmFyIF9pbml0aWFsaXNlUHJvcHMgPSBmdW5jdGlvbiBfaW5pdGlhbGlzZVByb3BzKCkge1xuICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICB0aGlzLnNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90aGlzNS5fc2hvdyhfdGhpczUucmVmZXJlbmNlLCBfdGhpczUub3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5oaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdGhpczUuX2hpZGUoKTtcbiAgfTtcblxuICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90aGlzNS5fZGlzcG9zZSgpO1xuICB9O1xuXG4gIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfdGhpczUuX2lzT3Blbikge1xuICAgICAgcmV0dXJuIF90aGlzNS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfdGhpczUuc2hvdygpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmFycm93U2VsZWN0b3IgPSAnLnRvb2x0aXAtYXJyb3csIC50b29sdGlwX19hcnJvdyc7XG4gIHRoaXMuaW5uZXJTZWxlY3RvciA9ICcudG9vbHRpcC1pbm5lciwgLnRvb2x0aXBfX2lubmVyJztcbiAgdGhpcy5fZXZlbnRzID0gW107XG5cbiAgdGhpcy5fc2V0VG9vbHRpcE5vZGVFdmVudCA9IGZ1bmN0aW9uIChldnQsIHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVsYXRlZHJlZmVyZW5jZSA9IGV2dC5yZWxhdGVkcmVmZXJlbmNlIHx8IGV2dC50b0VsZW1lbnQ7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhldnQyKSB7XG4gICAgICB2YXIgcmVsYXRlZHJlZmVyZW5jZTIgPSBldnQyLnJlbGF0ZWRyZWZlcmVuY2UgfHwgZXZ0Mi50b0VsZW1lbnQ7XG5cbiAgICAgIC8vIFJlbW92ZSBldmVudCBsaXN0ZW5lciBhZnRlciBjYWxsXG4gICAgICBfdGhpczUuX3Rvb2x0aXBOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0LnR5cGUsIGNhbGxiYWNrKTtcblxuICAgICAgLy8gSWYgdGhlIG5ldyByZWZlcmVuY2UgaXMgbm90IHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgICAgaWYgKCFyZWZlcmVuY2UuY29udGFpbnMocmVsYXRlZHJlZmVyZW5jZTIpKSB7XG4gICAgICAgIC8vIFNjaGVkdWxlIHRvIGhpZGUgdG9vbHRpcFxuICAgICAgICBfdGhpczUuX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIG9wdGlvbnMuZGVsYXksIG9wdGlvbnMsIGV2dDIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoX3RoaXM1Ll90b29sdGlwTm9kZS5jb250YWlucyhyZWxhdGVkcmVmZXJlbmNlKSkge1xuICAgICAgLy8gbGlzdGVuIHRvIG1vdXNlbGVhdmUgb24gdGhlIHRvb2x0aXAgZWxlbWVudCB0byBiZSBhYmxlIHRvIGhpZGUgdGhlIHRvb2x0aXBcbiAgICAgIF90aGlzNS5fdG9vbHRpcE5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnQudHlwZSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvb2x0aXAuanMubWFwXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Rvb2x0aXAuanMvZGlzdC9lc20vdG9vbHRpcC5qcyIsImltcG9ydCB2dG9vbHRpcCwgeyBkZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vdi10b29sdGlwJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGwgKFZ1ZSwgb3B0aW9ucykge1xyXG4gIGlmIChpbnN0YWxsLmluc3RhbGxlZCkgcmV0dXJuXHJcbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlXHJcblxyXG4gIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyB8fCB7fSlcclxuICB2dG9vbHRpcC5vcHRpb25zID0gb3B0aW9uc1xyXG4gIFZ1ZS5kaXJlY3RpdmUoJ3Rvb2x0aXAnLCB2dG9vbHRpcClcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFZUb29sdGlwID0gdnRvb2x0aXBcclxuXHJcbmNvbnN0IHBsdWdpbiA9IHtcclxuICBpbnN0YWxsLFxyXG59XHJcblxyXG4vLyBBdXRvLWluc3RhbGxcclxubGV0IEdsb2JhbFZ1ZSA9IG51bGxcclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgR2xvYmFsVnVlID0gd2luZG93LlZ1ZVxyXG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgR2xvYmFsVnVlID0gZ2xvYmFsLlZ1ZVxyXG59XHJcbmlmIChHbG9iYWxWdWUpIHtcclxuICBHbG9iYWxWdWUudXNlKHBsdWdpbilcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/v-tooltip/dist/v-tooltip.common.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nvar Vue = require('vue');\nVue = 'default' in Vue ? Vue['default'] : Vue;\n\nvar version = '2.1.0';\n\nvar compatible = (/^2\\./).test(Vue.version);\nif (!compatible) {\n Vue.util.warn('VueClickaway ' + version + ' only supports Vue 2.x, and does not support Vue ' + Vue.version);\n}\n\n\n\n// @SECTION: implementation\n\nvar HANDLER = '_vue_clickaway_handler';\n\nfunction bind(el, binding) {\n unbind(el);\n\n var callback = binding.value;\n if (typeof callback !== 'function') {\n if (process.env.NODE_ENV !== 'production') {\n Vue.util.warn(\n 'v-' + binding.name + '=\"' +\n binding.expression + '\" expects a function value, ' +\n 'got ' + callback\n );\n }\n return;\n }\n\n // @NOTE: Vue binds directives in microtasks, while UI events are dispatched\n // in macrotasks. This causes the listener to be set up before\n // the \"origin\" click event (the event that lead to the binding of\n // the directive) arrives at the document root. To work around that,\n // we ignore events until the end of the \"initial\" macrotask.\n // @REFERENCE: https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/\n // @REFERENCE: https://github.com/simplesmiler/vue-clickaway/issues/8\n var initialMacrotaskEnded = false;\n setTimeout(function() {\n initialMacrotaskEnded = true;\n }, 0);\n\n el[HANDLER] = function(ev) {\n // @NOTE: IE 5.0+\n // @REFERENCE: https://developer.mozilla.org/en/docs/Web/API/Node/contains\n if (initialMacrotaskEnded && !el.contains(ev.target)) {\n return callback(ev);\n }\n };\n\n document.documentElement.addEventListener('click', el[HANDLER], false);\n}\n\nfunction unbind(el) {\n document.documentElement.removeEventListener('click', el[HANDLER], false);\n delete el[HANDLER];\n}\n\nvar directive = {\n bind: bind,\n update: function(el, binding) {\n if (binding.value === binding.oldValue) return;\n bind(el, binding);\n },\n unbind: unbind,\n};\n\nvar mixin = {\n directives: { onClickaway: directive },\n};\n\nexports.version = version;\nexports.directive = directive;\nexports.mixin = mixin;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-clickaway/dist/vue-clickaway.common.js\n// module id = 14\n// module chunks = 0","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.VueColor=t():e.VueColor=t()}(this,function(){return function(e){function t(r){if(o[r])return o[r].exports;var a=o[r]={exports:{},id:r,loaded:!1};return e[r].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var o={};return t.m=e,t.c=o,t.p=\"\",t(0)}([function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}var a=o(37),i=r(a),n=o(38),s=r(n),l=o(41),c=r(l),u=o(42),h=r(u),d=o(39),f=r(d),p=o(40),_=r(p),v=o(36),g=r(v),b=o(6),x=r(b),m=o(8),w=r(m),C=o(4),y=r(C),k=o(5),F=r(k),A=o(7),R=r(A),S=o(3),M=r(S),E={version:\"2.0.9\",Compact:i.default,Material:s.default,Slider:c.default,Swatches:h.default,Photoshop:f.default,Sketch:_.default,Chrome:g.default,Alpha:x.default,Checkboard:w.default,EditableInput:y.default,Hue:F.default,Saturation:R.default,ColorMixin:M.default};e.exports=E},function(e,t){e.exports=function(){var e=[];return e.toString=function(){for(var e=[],t=0;t=0&&g.splice(t,1)}function s(e){var t=document.createElement(\"style\");return t.type=\"text/css\",i(e,t),t}function l(e,t){var o,r,a;if(t.singleton){var i=v++;o=_||(_=s(t)),r=c.bind(null,o,i,!1),a=c.bind(null,o,i,!0)}else o=s(t),r=u.bind(null,o),a=function(){n(o)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else a()}}function c(e,t,o,r){var a=o?\"\":r.css;if(e.styleSheet)e.styleSheet.cssText=b(t,a);else{var i=document.createTextNode(a),n=e.childNodes;n[t]&&e.removeChild(n[t]),n.length?e.insertBefore(i,n[t]):e.appendChild(i)}}function u(e,t){var o=t.css,r=t.media,a=t.sourceMap;if(r&&e.setAttribute(\"media\",r),a&&(o+=\"\\n/*# sourceURL=\"+a.sources[0]+\" */\",o+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(a))))+\" */\"),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}var h={},d=function(e){var t;return function(){return\"undefined\"==typeof t&&(t=e.apply(this,arguments)),t}},f=d(function(){return/msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase())}),p=d(function(){return document.head||document.getElementsByTagName(\"head\")[0]}),_=null,v=0,g=[];e.exports=function(e,t){t=t||{},\"undefined\"==typeof t.singleton&&(t.singleton=f()),\"undefined\"==typeof t.insertAt&&(t.insertAt=\"bottom\");var o=a(e);return r(o,t),function(e){for(var i=[],n=0;n0?(0,n.default)(e.hex):(0,n.default)(e),o&&o.setAlpha(r||1);var a=o.toHsl(),i=o.toHsv();return 0===a.s&&(a.h=e.h||t||0,i.h=e.h||t||0),{hsl:a,hex:o.toHexString().toUpperCase(),rgba:o.toRgb(),hsv:i,oldHue:e.h||t||a.h,source:e.source,a:e.a||o.getAlpha()}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(35),n=r(i);t.default={props:[\"value\"],data:function(){return{val:a(this.value)}},computed:{colors:{get:function(){return this.val},set:function(e){this.val=e,this.$emit(\"input\",e)}}},watch:{value:function(e){this.val=a(e)}},methods:{colorChange:function(e,t){this.oldHue=this.colors.hsl.h,this.colors=a(e,t||this.oldHue)},isValidHex:function(e){return(0,n.default)(e).isValid()},simpleCheckForValidColor:function(e){for(var t=[\"r\",\"g\",\"b\",\"a\",\"h\",\"s\",\"a\",\"v\"],o=0,r=0,a=0;a=2?void(this.fieldsIndex=0):void this.fieldsIndex++},showHighlight:function(){this.highlight=!0},hideHighlight:function(){this.highlight=!1}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=[\"#4D4D4D\",\"#999999\",\"#FFFFFF\",\"#F44E3B\",\"#FE9200\",\"#FCDC00\",\"#DBDF00\",\"#A4DD00\",\"#68CCCA\",\"#73D8FF\",\"#AEA1FF\",\"#FDA1FF\",\"#333333\",\"#808080\",\"#CCCCCC\",\"#D33115\",\"#E27300\",\"#FCC400\",\"#B0BC00\",\"#68BC00\",\"#16A5A5\",\"#009CE0\",\"#7B64FF\",\"#FA28FF\",\"#000000\",\"#666666\",\"#B3B3B3\",\"#9F0500\",\"#C45100\",\"#FB9E00\",\"#808900\",\"#194D33\",\"#0C797D\",\"#0062B1\",\"#653294\",\"#AB149E\"];t.default={name:\"Compact\",mixins:[i.default],props:{},components:{\"ed-in\":s.default},computed:{pick:function(){return this.colors.hex}},data:function(){return{defaultColors:l}},methods:{handlerClick:function(e){this.colorChange({hex:e,source:\"hex\"})},onChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(4),i=r(a),n=o(3),s=r(n);t.default={name:\"Material\",mixins:[s.default],components:{\"ed-in\":i.default},methods:{onChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=o(7),c=r(l),u=o(5),h=r(u),d=o(6),f=r(d);t.default={name:\"Photoshop\",mixins:[i.default],props:{head:{type:String,default:\"Color Picker\"}},components:{saturation:c.default,hue:h.default,alpha:f.default,\"ed-in\":s.default},data:function(){return{currentColor:\"#FFF\"}},created:function(){this.currentColor=this.colors.hex},methods:{childChange:function(e){this.colorChange(e)},inputChange:function(e){e&&(e[\"#\"]?this.isValidHex(e[\"#\"])&&this.colorChange({hex:e[\"#\"],source:\"hex\"}):(e.r||e.g||e.b||e.a)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))},handleAccept:function(){this.$emit(\"ok\")},handleCancel:function(){this.$emit(\"cancel\")}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=o(7),c=r(l),u=o(5),h=r(u),d=o(6),f=r(d),p=[\"#D0021B\",\"#F5A623\",\"#F8E71C\",\"#8B572A\",\"#7ED321\",\"#417505\",\"#BD10E0\",\"#9013FE\",\"#4A90E2\",\"#50E3C2\",\"#B8E986\",\"#000000\",\"#4A4A4A\",\"#9B9B9B\",\"#FFFFFF\"];t.default={name:\"Sketch\",mixins:[i.default],components:{saturation:c.default,hue:h.default,alpha:f.default,\"ed-in\":s.default},data:function(){return{presetColors:p}},computed:{activeColor:function(){var e=this.colors.rgba;return\"rgba(\"+[e.r,e.g,e.b,e.a].join(\",\")+\")\"}},methods:{handlePreset:function(e){this.colorChange({hex:e,source:\"hex\"})},childChange:function(e){this.colorChange(e)},inputChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b||e.a)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(5),s=r(n);t.default={name:\"Slider\",mixins:[i.default],props:{direction:String},components:{hue:s.default},computed:{activeOffset:function(){return Math.round(100*this.colors.hsl.s)/100===.5?Math.round(100*this.colors.hsl.l)/100:0}},data:function(){return{swatches:[\".80\",\".65\",\".50\",\".35\",\".20\"]}},methods:{hueChange:function(e){this.colorChange(e)},handleSwClick:function(e,t){this.colorChange({h:this.colors.hsl.h,s:.5,l:t,source:\"hsl\"})}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(34),i=r(a),n=o(3),s=r(n),l=[\"red\",\"pink\",\"purple\",\"deepPurple\",\"indigo\",\"blue\",\"lightBlue\",\"cyan\",\"teal\",\"green\",\"lightGreen\",\"lime\",\"yellow\",\"amber\",\"orange\",\"deepOrange\",\"brown\",\"blueGrey\"],c=[\"900\",\"700\",\"500\",\"300\",\"100\"],u=function(){var e=[];return l.forEach(function(t){var o=[];c.forEach(function(e){o.push(i.default[t][e].toUpperCase())}),e.push(o)}),e}();t.default={name:\"Swatches\",mixins:[s.default],computed:{pick:function(){return this.colors.hex}},data:function(){return{defaultColors:u}},methods:{handlerClick:function(e){this.colorChange({hex:e,source:\"hex\"})}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(8),i=r(a);t.default={name:\"Alpha\",props:{value:Object,onChange:Function},components:{checkboard:i.default},computed:{colors:function(){return this.value},gradientColor:function(){var e=this.colors.rgba,t=[e.r,e.g,e.b].join(\",\");return\"linear-gradient(to right, rgba(\"+t+\", 0) 0%, rgba(\"+t+\", 1) 100%)\"}},methods:{handleChange:function(e,t){!t&&e.preventDefault();var o,r=this.$refs.container,a=r.clientWidth,i=r.getBoundingClientRect().left+window.pageXOffset,n=e.pageX||(e.touches?e.touches[0].pageX:0),s=n-i;o=s<0?0:s>a?1:Math.round(100*s/a)/100,this.colors.a!==o&&this.$emit(\"change\",{h:this.colors.hsl.h,s:this.colors.hsl.s,l:this.colors.hsl.l,a:o,source:\"rgba\"})},handleMouseDown:function(e){this.handleChange(e,!0),window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t){\"use strict\";function o(e,t,o){if(\"undefined\"==typeof document)return null;var r=document.createElement(\"canvas\");r.width=r.height=2*o;var a=r.getContext(\"2d\");return a?(a.fillStyle=e,a.fillRect(0,0,r.width,r.height),a.fillStyle=t,a.fillRect(0,0,o,o),a.translate(o,o),a.fillRect(0,0,o,o),r.toDataURL()):null}function r(e,t,r){var i=e+\",\"+t+\",\"+r;if(a[i])return a[i];var n=o(e,t,r);return a[i]=n,n}Object.defineProperty(t,\"__esModule\",{value:!0});var a={};t.default={name:\"Checkboard\",props:{size:{type:[Number,String],default:8},white:{type:String,default:\"#fff\"},grey:{type:String,default:\"#e6e6e6\"}},computed:{bgStyle:function(){return\"url(\"+r(this.white,this.grey,this.size)+\") center left\"}}}},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"editableInput\",props:{label:String,value:[String,Number],max:Number,arrowOffset:{type:Number,default:1}},computed:{val:function(){return this.value}},filters:{maxFilter:{read:function(e){return this.max&&e>this.max?this.max:e},write:function(e,t){return e}}},methods:{update:function(e){this.handleChange(e.target.value)},handleChange:function(e){var t={};t[this.label]=e,this.$emit(\"change\",t)},handleBlur:function(e){console.log(e)},handleKeyDown:function(e){var t=this.val,o=Number(t);if(o){var r=this.arrowOffset||1;38===e.keyCode&&(t=o+r,this.handleChange(t),e.preventDefault()),40===e.keyCode&&(t=o-r,this.handleChange(t),e.preventDefault())}},handleDrag:function(e){console.log(e)},handleMouseDown:function(e){console.log(e)}}}},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"Hue\",props:{value:Object,direction:{type:String,default:\"horizontal\"}},computed:{colors:function(){return this.value},directionClass:function(){return{\"vue-color__c-hue--horizontal\":\"horizontal\"===this.direction,\"vue-color__c-hue--vertical\":\"vertical\"===this.direction}},pointerTop:function(){return\"vertical\"===this.direction?-(100*this.colors.hsl.h/360)+100+\"%\":0},pointerLeft:function(){return\"vertical\"===this.direction?0:100*this.colors.hsl.h/360+\"%\"}},methods:{handleChange:function(e,t){!t&&e.preventDefault();var o,r,a=this.$refs.container,i=a.clientWidth,n=a.clientHeight,s=a.getBoundingClientRect().left+window.pageXOffset,l=a.getBoundingClientRect().top+window.pageYOffset,c=e.pageX||(e.touches?e.touches[0].pageX:0),u=e.pageY||(e.touches?e.touches[0].pageY:0),h=c-s,d=u-l;\"vertical\"===this.direction?(d<0?o=359:d>n?o=0:(r=-(100*d/n)+100,o=360*r/100),this.colors.hsl.h!==o&&this.$emit(\"change\",{h:o,s:this.colors.hsl.s,l:this.colors.hsl.l,a:this.colors.hsl.a,source:\"hsl\"})):(h<0?o=0:h>i?o=359:(r=100*h/i,o=360*r/100),this.colors.hsl.h!==o&&this.$emit(\"change\",{h:o,s:this.colors.hsl.s,l:this.colors.hsl.l,a:this.colors.hsl.a,source:\"hsl\"}))},handleMouseDown:function(e){this.handleChange(e,!0),window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(e){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(33),i=r(a);t.default={name:\"Saturation\",props:{value:Object},computed:{colors:function(){return this.value},bgColor:function(){return\"hsl(\"+this.colors.hsl.h+\", 100%, 50%)\"},pointerTop:function(){return-(100*this.colors.hsv.v)+100+\"%\"},pointerLeft:function(){return 100*this.colors.hsv.s+\"%\"}},methods:{throttle:(0,i.default)(function(e,t){e(t)},20,{leading:!0,trailing:!1}),handleChange:function(e,t){!t&&e.preventDefault();var o=this.$refs.container,r=o.clientWidth,a=o.clientHeight,i=o.getBoundingClientRect().left+window.pageXOffset,n=o.getBoundingClientRect().top+window.pageYOffset,s=e.pageX||(e.touches?e.touches[0].pageX:0),l=e.pageY||(e.touches?e.touches[0].pageY:0),c=s-i,u=l-n;c<0?c=0:c>r?c=r:u<0?u=0:u>a&&(u=a);var h=100*c/r,d=-(100*u/a)+100;this.throttle(this.onChange,{h:this.colors.hsl.h,s:h,v:d>0?d:.01,a:this.colors.hsl.a,source:\"hsva\"})},onChange:function(e){this.$emit(\"change\",e)},handleMouseDown:function(e){window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(e){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__compact{padding-top:5px;padding-left:5px;width:240px;border-radius:2px;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16);background-color:#fff}.vue-color__compact__colors{overflow:hidden;padding:0;margin:0}.vue-color__compact__color-item{list-style:none;width:15px;height:15px;float:left;margin-right:5px;margin-bottom:5px;position:relative;cursor:pointer}.vue-color__compact__color-item--white{box-shadow:inset 0 0 0 1px #ddd}.vue-color__compact__color-item--white .vue-color__compact__dot{background:#000}.vue-color__compact__dot{position:absolute;top:5px;right:5px;bottom:5px;left:5px;border-radius:50%;opacity:1;background:#fff}.vue-color__compact__fields{display:flex;padding-bottom:6px;padding-right:5px;position:relative}.vue-color__compact__fields .vue-color__editable-input__input{width:70%;padding-left:30%;background:none;font-size:12px;color:#333;height:16px}.vue-color__compact__fields .vue-color__editable-input__label{position:absolute;top:3px;left:0;line-height:16px;text-transform:uppercase;font-size:12px;color:#999}.vue-color__compact__pick-color{position:absolute;top:6px;left:5px;height:9px;width:9px}.vue-color__compact__col-3{flex:1}.vue_color__compact__col-hex{flex:2}.vue_color__compact__col-hex .vue-color__editable-input__input{width:80%;padding-left:20%}.vue_color__compact__col-hex .vue-color__editable-input__label{display:none}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__editable-input{position:relative}.vue-color__editable-input__input{padding:0;border:0;outline:none}.vue-color__editable-input__label{text-transform:capitalize}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-hue{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px}.vue-color__c-hue--horizontal{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vue-color__c-hue--vertical{background:linear-gradient(0deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vue-color__c-hue__container{cursor:pointer;margin:0 2px;position:relative;height:100%}.vue-color__c-hue__pointer{z-index:2;position:absolute}.vue-color__c-hue__picker{cursor:pointer;margin-top:1px;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;transform:translateX(-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__saturation,.vue-color__saturation--black,.vue-color__saturation--white{cursor:pointer;position:absolute;top:0;left:0;right:0;bottom:0}.vue-color__saturation--white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.vue-color__saturation--black{background:linear-gradient(0deg,#000,transparent)}.vue-color__saturation--pointer{cursor:pointer;position:absolute}.vue-color__saturation--circle{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__material{width:98px;height:98px;padding:16px;font-family:Roboto;position:relative;border-radius:2px;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16);background-color:#fff}.vue-color__material .vue-color__editable-input__input{width:100%;margin-top:12px;font-size:15px;color:#333;height:30px}.vue-color__material .vue-color__editable-input__label{position:absolute;top:0;left:0;font-size:11px;color:#999;text-transform:capitalize}.vue-color__material__hex{border-bottom-width:2px;border-bottom-style:solid}.vue-color__material__split{display:flex;margin-right:-10px;padding-top:11px}.vue-color__material__third{flex:1;padding-right:10px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__slider{position:relative;width:410px}.vue-color__slider__hue-warp{height:12px;position:relative}.vue-color__slider__hue-warp .vue-color__c-hue__picker{width:14px;height:14px;border-radius:6px;transform:translate(-7px,-2px);background-color:#f8f8f8;box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vue-color__slider__swatches{display:flex;margin-top:20px}.vue-color__slider__swatch{margin-right:1px;flex:1;width:20%}.vue-color__slider__swatch:first-child{margin-right:1px}.vue-color__slider__swatch:first-child .vue-color__slider__swatch-picker{border-radius:2px 0 0 2px}.vue-color__slider__swatch:last-child{margin-right:0}.vue-color__slider__swatch:last-child .vue-color__slider__swatch-picker{border-radius:0 2px 2px 0}.vue-color__slider__swatch-picker{cursor:pointer;height:12px}.vue-color__slider__swatch-picker--active{transform:scaleY(1.8);border-radius:3.6px/2px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__swatches{width:320px;height:240px;overflow-y:scroll;background-color:#fff;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16)}.vue-color__swatches__box{padding:16px 0 6px 16px;overflow:hidden}.vue-color__swatches__color-group{padding-bottom:10px;width:40px;float:left;margin-right:10px}.vue-color__swatches__color-it{width:40px;height:24px;cursor:pointer;background:#880e4f;margin-bottom:1px;overflow:hidden;border-radius:2px 2px 0 0}.vue-color__swatches__pick{fill:#fff;margin-left:8px;display:block}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,'.vue-color__photoshop{background:#dcdcdc;border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.25),0 8px 16px rgba(0,0,0,.15);box-sizing:initial;width:513px;font-family:Roboto}.vue-color__photoshop__head{background-image:linear-gradient(-180deg,#f0f0f0,#d4d4d4);border-bottom:1px solid #b1b1b1;box-shadow:inset 0 1px 0 0 hsla(0,0%,100%,.2),inset 0 -1px 0 0 rgba(0,0,0,.02);height:23px;line-height:24px;border-radius:4px 4px 0 0;font-size:13px;color:#4d4d4d;text-align:center}.vue-color__photoshop__body{padding:15px;display:flex}.vue-color__photoshop__saturation-wrap{width:256px;height:256px;position:relative;border:2px solid #b3b3b3;border-bottom:2px solid #f0f0f0;overflow:hidden}.vue-color__photoshop__saturation-wrap .vue-color__saturation--circle{width:12px;height:12px}.vue-color__photoshop__hue-wrap{position:relative;height:256px;width:19px;margin-left:10px;border:2px solid #b3b3b3;border-bottom:2px solid #f0f0f0}.vue-color__photoshop__hue-pointer{position:relative}.vue-color__photoshop__hue-pointer--left,.vue-color__photoshop__hue-pointer--right{position:absolute;width:0;height:0;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #555}.vue-color__photoshop__hue-pointer--left:after,.vue-color__photoshop__hue-pointer--right:after{content:\"\";width:0;height:0;border-style:solid;border-width:4px 0 4px 6px;border-color:transparent transparent transparent #fff;position:absolute;top:1px;left:1px;transform:translate(-8px,-5px)}.vue-color__photoshop__hue-pointer--left{transform:translate(-13px,-4px)}.vue-color__photoshop__hue-pointer--right{transform:translate(20px,-4px) rotate(180deg)}.vue-color__photoshop__controls{width:180px;margin-left:10px;display:flex}.vue-color__photoshop__actions{margin-left:20px;flex:1}.vue-color__photoshop__ac-btn{cursor:pointer;background-image:linear-gradient(-180deg,#fff,#e6e6e6);border:1px solid #878787;border-radius:2px;height:20px;box-shadow:0 1px 0 0 #eaeaea;font-size:14px;color:#000;line-height:20px;text-align:center;margin-bottom:10px}.vue-color__photoshop__previews{width:60px}.vue-color__photoshop__previews__swatches{border:1px solid #b3b3b3;border-bottom:1px solid #f0f0f0;margin-bottom:2px;margin-top:1px}.vue-color__photoshop__previews__pr-color{height:34px;box-shadow:inset 1px 0 0 #000,inset -1px 0 0 #000,inset 0 1px 0 #000}.vue-color__photoshop__previews__label{font-size:14px;color:#000;text-align:center}.vue-color__photoshop__fields{padding-top:5px;padding-bottom:9px;width:80px;position:relative}.vue-color__photoshop__fields .vue-color__editable-input__input{margin-left:40%;width:40%;height:18px;border:1px solid #888;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 1px 0 0 #ececec;margin-bottom:5px;font-size:13px;padding-left:3px;margin-right:10px}.vue-color__photoshop__fields .vue-color__editable-input__label{top:0;left:0;width:34px;text-transform:uppercase;font-size:13px;height:18px;line-height:22px;position:absolute}.vue-color__photoshop__fields__divider{height:5px}.vue-color__photoshop__fields__hex .vue-color__editable-input__input{margin-left:20%;width:80%;height:18px;border:1px solid #888;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 1px 0 0 #ececec;margin-bottom:6px;font-size:13px;padding-left:3px}.vue-color__photoshop__fields__hex .vue-color__editable-input__label{position:absolute;top:0;left:0;width:14px;text-transform:uppercase;font-size:13px;height:18px;line-height:22px}',\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__sketch{position:relative;width:200px;padding:10px 10px 0;box-sizing:initial;background:#fff;border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.15),0 8px 16px rgba(0,0,0,.15)}.vue-color__sketch__saturation-wrap{width:100%;padding-bottom:75%;position:relative;overflow:hidden}.vue-color__sketch__controls{display:flex}.vue-color__sketch__sliders{padding:4px 0;flex:1}.vue-color__sketch__sliders .vue-color__c-alpha__gradient,.vue-color__sketch__sliders .vue-color__c-hue{border-radius:2px}.vue-color__sketch__hue-wrap{position:relative;height:10px}.vue-color__sketch__alpha-wrap{position:relative;height:10px;margin-top:4px;overflow:hidden}.vue-color__sketch__color-wrap{width:24px;height:24px;position:relative;margin-top:4px;margin-left:4px;border-radius:3px}.vue-color__sketch__active-color{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset 0 0 4px rgba(0,0,0,.25);z-index:2}.vue-color__sketch__field{display:flex;padding-top:4px}.vue-color__sketch__field .vue-color__editable-input__input{width:80%;padding:4px 10% 3px;border:none;box-shadow:inset 0 0 0 1px #ccc;font-size:11px}.vue-color__sketch__field .vue-color__editable-input__label{display:block;text-align:center;font-size:11px;color:#222;padding-top:3px;padding-bottom:4px;text-transform:capitalize}.vue-color__sketch__field--single{flex:1;padding-left:6px}.vue-color__sketch__field--double{flex:2}.vue-color__sketch__presets{margin-right:-10px;margin-left:-10px;padding-left:10px;padding-top:10px;border-top:1px solid #eee}.vue-color__sketch__presets-color{border-radius:3px;overflow:hidden;position:relative;display:inline-block;margin:0 10px 10px 0;vertical-align:top;cursor:pointer;width:16px;height:16px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__chrome{background:#fff;border-radius:2px;box-shadow:0 0 2px rgba(0,0,0,.3),0 4px 8px rgba(0,0,0,.3);box-sizing:initial;width:225px;font-family:Menlo;background-color:#fff}.vue-color__chrome__controls{display:flex}.vue-color__chrome__color-wrap{width:32px}.vue-color__chrome__active-color{margin-top:6px;width:16px;height:16px;border-radius:8px;position:relative;overflow:hidden}.vue-color__chrome__sliders{flex:1}.vue-color__chrome__sliders .vue-color__c-alpha__gradient,.vue-color__chrome__sliders .vue-color__c-hue{border-radius:2px}.vue-color__chrome__sliders .vue-color__c-alpha__picker,.vue-color__chrome__sliders .vue-color__c-hue__picker{width:12px;height:12px;border-radius:6px;transform:translate(-6px,-2px);background-color:#f8f8f8;box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vue-color__chrome__fields-wrap{padding-top:16px;display:flex}.vue-color__chrome__fields{display:flex;margin-left:-6px;flex:1}.vue-color__chrome__field{padding-left:6px;width:100%}.vue-color__chrome__toggle-btn{width:32px;text-align:right;position:relative}.vue-color__chrome__icon{margin-right:-4px;margin-top:12px;cursor:pointer;position:relative;z-index:2}.vue-color__chrome__icon-highlight{position:absolute;width:24px;height:28px;background:#eee;border-radius:4px;top:10px;left:12px}.vue-color__chrome__hue-wrap{margin-bottom:8px}.vue-color__chrome__alpha-wrap,.vue-color__chrome__hue-wrap{position:relative;height:10px}.vue-color__chrome__chrome-body{padding:16px 16px 12px;background-color:#fff}.vue-color__chrome__saturation-wrap{width:100%;padding-bottom:55%;position:relative;border-radius:2px 2px 0 0;overflow:hidden}.vue-color__chrome__saturation-wrap .vue-color__saturation--circle{width:12px;height:12px}.vue-color__chrome__fields .vue-color__editable-input__input{font-size:11px;color:#333;width:100%;border-rradius:2px;border:none;box-shadow:inset 0 0 0 1px #dadada;height:21px;text-align:center}.vue-color__chrome__fields .vue-color__editable-input__label{text-transform:uppercase;font-size:11px;line-height:11px;color:#969696;text-align:center;display:block;margin-top:12px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-alpha,.vue-color__c-alpha__checkboard-wrap{position:absolute;top:0;right:0;bottom:0;left:0}.vue-color__c-alpha__checkboard-wrap{overflow:hidden}.vue-color__c-alpha__gradient{position:absolute;top:0;right:0;bottom:0;left:0}.vue-color__c-alpha__container{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.vue-color__c-alpha__pointer{z-index:2;position:absolute}.vue-color__c-alpha__picker{cursor:pointer;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;margin-top:1px;transform:translateX(-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-checkerboard{position:absolute;top:0;right:0;bottom:0;left:0}\",\"\"])},function(e,t){(function(t){function o(e,t,o){function r(t){var o=_,r=v;return _=v=void 0,k=t,b=e.apply(r,o)}function i(e){return k=e,x=setTimeout(u,t),F?r(e):b}function n(e){var o=e-m,r=e-k,a=t-o;return A?C(a,g-r):a}function c(e){var o=e-m,r=e-k;return void 0===m||o>=t||o<0||A&&r>=g}function u(){var e=y();return c(e)?h(e):void(x=setTimeout(u,n(e)))}function h(e){return x=void 0,R&&_?r(e):(_=v=void 0,b)}function d(){void 0!==x&&clearTimeout(x),k=0,_=m=v=x=void 0}function f(){return void 0===x?b:h(y())}function p(){var e=y(),o=c(e);if(_=arguments,v=this,m=e,o){if(void 0===x)return i(m);if(A)return x=setTimeout(u,t),r(m)}return void 0===x&&(x=setTimeout(u,t)),\nb}var _,v,g,b,x,m,k=0,F=!1,A=!1,R=!0;if(\"function\"!=typeof e)throw new TypeError(l);return t=s(t)||0,a(o)&&(F=!!o.leading,A=\"maxWait\"in o,g=A?w(s(o.maxWait)||0,t):g,R=\"trailing\"in o?!!o.trailing:R),p.cancel=d,p.flush=f,p}function r(e,t,r){var i=!0,n=!0;if(\"function\"!=typeof e)throw new TypeError(l);return a(r)&&(i=\"leading\"in r?!!r.leading:i,n=\"trailing\"in r?!!r.trailing:n),o(e,t,{leading:i,maxWait:t,trailing:n})}function a(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==typeof e}function n(e){return\"symbol\"==typeof e||i(e)&&m.call(e)==u}function s(e){if(\"number\"==typeof e)return e;if(n(e))return c;if(a(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=a(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(h,\"\");var o=f.test(e);return o||p.test(e)?_(e.slice(2),o?2:8):d.test(e)?c:+e}var l=\"Expected a function\",c=NaN,u=\"[object Symbol]\",h=/^\\s+|\\s+$/g,d=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,p=/^0o[0-7]+$/i,_=parseInt,v=\"object\"==typeof t&&t&&t.Object===Object&&t,g=\"object\"==typeof self&&self&&self.Object===Object&&self,b=v||g||Function(\"return this\")(),x=Object.prototype,m=x.toString,w=Math.max,C=Math.min,y=function(){return b.Date.now()};e.exports=r}).call(t,function(){return this}())},function(e,t,o){var r,a,i;!function(o,n){a=[],r=n,i=\"function\"==typeof r?r.apply(t,a):r,!(void 0!==i&&(e.exports=i))}(this,function(){return{red:{50:\"#ffebee\",100:\"#ffcdd2\",200:\"#ef9a9a\",300:\"#e57373\",400:\"#ef5350\",500:\"#f44336\",600:\"#e53935\",700:\"#d32f2f\",800:\"#c62828\",900:\"#b71c1c\",a100:\"#ff8a80\",a200:\"#ff5252\",a400:\"#ff1744\",a700:\"#d50000\"},pink:{50:\"#fce4ec\",100:\"#f8bbd0\",200:\"#f48fb1\",300:\"#f06292\",400:\"#ec407a\",500:\"#e91e63\",600:\"#d81b60\",700:\"#c2185b\",800:\"#ad1457\",900:\"#880e4f\",a100:\"#ff80ab\",a200:\"#ff4081\",a400:\"#f50057\",a700:\"#c51162\"},purple:{50:\"#f3e5f5\",100:\"#e1bee7\",200:\"#ce93d8\",300:\"#ba68c8\",400:\"#ab47bc\",500:\"#9c27b0\",600:\"#8e24aa\",700:\"#7b1fa2\",800:\"#6a1b9a\",900:\"#4a148c\",a100:\"#ea80fc\",a200:\"#e040fb\",a400:\"#d500f9\",a700:\"#aa00ff\"},deepPurple:{50:\"#ede7f6\",100:\"#d1c4e9\",200:\"#b39ddb\",300:\"#9575cd\",400:\"#7e57c2\",500:\"#673ab7\",600:\"#5e35b1\",700:\"#512da8\",800:\"#4527a0\",900:\"#311b92\",a100:\"#b388ff\",a200:\"#7c4dff\",a400:\"#651fff\",a700:\"#6200ea\"},indigo:{50:\"#e8eaf6\",100:\"#c5cae9\",200:\"#9fa8da\",300:\"#7986cb\",400:\"#5c6bc0\",500:\"#3f51b5\",600:\"#3949ab\",700:\"#303f9f\",800:\"#283593\",900:\"#1a237e\",a100:\"#8c9eff\",a200:\"#536dfe\",a400:\"#3d5afe\",a700:\"#304ffe\"},blue:{50:\"#e3f2fd\",100:\"#bbdefb\",200:\"#90caf9\",300:\"#64b5f6\",400:\"#42a5f5\",500:\"#2196f3\",600:\"#1e88e5\",700:\"#1976d2\",800:\"#1565c0\",900:\"#0d47a1\",a100:\"#82b1ff\",a200:\"#448aff\",a400:\"#2979ff\",a700:\"#2962ff\"},lightBlue:{50:\"#e1f5fe\",100:\"#b3e5fc\",200:\"#81d4fa\",300:\"#4fc3f7\",400:\"#29b6f6\",500:\"#03a9f4\",600:\"#039be5\",700:\"#0288d1\",800:\"#0277bd\",900:\"#01579b\",a100:\"#80d8ff\",a200:\"#40c4ff\",a400:\"#00b0ff\",a700:\"#0091ea\"},cyan:{50:\"#e0f7fa\",100:\"#b2ebf2\",200:\"#80deea\",300:\"#4dd0e1\",400:\"#26c6da\",500:\"#00bcd4\",600:\"#00acc1\",700:\"#0097a7\",800:\"#00838f\",900:\"#006064\",a100:\"#84ffff\",a200:\"#18ffff\",a400:\"#00e5ff\",a700:\"#00b8d4\"},teal:{50:\"#e0f2f1\",100:\"#b2dfdb\",200:\"#80cbc4\",300:\"#4db6ac\",400:\"#26a69a\",500:\"#009688\",600:\"#00897b\",700:\"#00796b\",800:\"#00695c\",900:\"#004d40\",a100:\"#a7ffeb\",a200:\"#64ffda\",a400:\"#1de9b6\",a700:\"#00bfa5\"},green:{50:\"#e8f5e9\",100:\"#c8e6c9\",200:\"#a5d6a7\",300:\"#81c784\",400:\"#66bb6a\",500:\"#4caf50\",600:\"#43a047\",700:\"#388e3c\",800:\"#2e7d32\",900:\"#1b5e20\",a100:\"#b9f6ca\",a200:\"#69f0ae\",a400:\"#00e676\",a700:\"#00c853\"},lightGreen:{50:\"#f1f8e9\",100:\"#dcedc8\",200:\"#c5e1a5\",300:\"#aed581\",400:\"#9ccc65\",500:\"#8bc34a\",600:\"#7cb342\",700:\"#689f38\",800:\"#558b2f\",900:\"#33691e\",a100:\"#ccff90\",a200:\"#b2ff59\",a400:\"#76ff03\",a700:\"#64dd17\"},lime:{50:\"#f9fbe7\",100:\"#f0f4c3\",200:\"#e6ee9c\",300:\"#dce775\",400:\"#d4e157\",500:\"#cddc39\",600:\"#c0ca33\",700:\"#afb42b\",800:\"#9e9d24\",900:\"#827717\",a100:\"#f4ff81\",a200:\"#eeff41\",a400:\"#c6ff00\",a700:\"#aeea00\"},yellow:{50:\"#fffde7\",100:\"#fff9c4\",200:\"#fff59d\",300:\"#fff176\",400:\"#ffee58\",500:\"#ffeb3b\",600:\"#fdd835\",700:\"#fbc02d\",800:\"#f9a825\",900:\"#f57f17\",a100:\"#ffff8d\",a200:\"#ffff00\",a400:\"#ffea00\",a700:\"#ffd600\"},amber:{50:\"#fff8e1\",100:\"#ffecb3\",200:\"#ffe082\",300:\"#ffd54f\",400:\"#ffca28\",500:\"#ffc107\",600:\"#ffb300\",700:\"#ffa000\",800:\"#ff8f00\",900:\"#ff6f00\",a100:\"#ffe57f\",a200:\"#ffd740\",a400:\"#ffc400\",a700:\"#ffab00\"},orange:{50:\"#fff3e0\",100:\"#ffe0b2\",200:\"#ffcc80\",300:\"#ffb74d\",400:\"#ffa726\",500:\"#ff9800\",600:\"#fb8c00\",700:\"#f57c00\",800:\"#ef6c00\",900:\"#e65100\",a100:\"#ffd180\",a200:\"#ffab40\",a400:\"#ff9100\",a700:\"#ff6d00\"},deepOrange:{50:\"#fbe9e7\",100:\"#ffccbc\",200:\"#ffab91\",300:\"#ff8a65\",400:\"#ff7043\",500:\"#ff5722\",600:\"#f4511e\",700:\"#e64a19\",800:\"#d84315\",900:\"#bf360c\",a100:\"#ff9e80\",a200:\"#ff6e40\",a400:\"#ff3d00\",a700:\"#dd2c00\"},brown:{50:\"#efebe9\",100:\"#d7ccc8\",200:\"#bcaaa4\",300:\"#a1887f\",400:\"#8d6e63\",500:\"#795548\",600:\"#6d4c41\",700:\"#5d4037\",800:\"#4e342e\",900:\"#3e2723\"},grey:{50:\"#fafafa\",100:\"#f5f5f5\",200:\"#eeeeee\",300:\"#e0e0e0\",400:\"#bdbdbd\",500:\"#9e9e9e\",600:\"#757575\",700:\"#616161\",800:\"#424242\",900:\"#212121\"},blueGrey:{50:\"#eceff1\",100:\"#cfd8dc\",200:\"#b0bec5\",300:\"#90a4ae\",400:\"#78909c\",500:\"#607d8b\",600:\"#546e7a\",700:\"#455a64\",800:\"#37474f\",900:\"#263238\"},darkText:{primary:\"rgba(0, 0, 0, 0.87)\",secondary:\"rgba(0, 0, 0, 0.54)\",disabled:\"rgba(0, 0, 0, 0.38)\",dividers:\"rgba(0, 0, 0, 0.12)\"},lightText:{primary:\"rgba(255, 255, 255, 1)\",secondary:\"rgba(255, 255, 255, 0.7)\",disabled:\"rgba(255, 255, 255, 0.5)\",dividers:\"rgba(255, 255, 255, 0.12)\"},darkIcons:{active:\"rgba(0, 0, 0, 0.54)\",inactive:\"rgba(0, 0, 0, 0.38)\"},lightIcons:{active:\"rgba(255, 255, 255, 1)\",inactive:\"rgba(255, 255, 255, 0.5)\"},white:\"#ffffff\",black:\"#000000\"}})},function(e,t,o){var r;!function(a){function i(e,t){if(e=e?e:\"\",t=t||{},e instanceof i)return e;if(!(this instanceof i))return new i(e,t);var o=n(e);this._originalInput=e,this._r=o.r,this._g=o.g,this._b=o.b,this._a=o.a,this._roundA=X(100*this._a)/100,this._format=t.format||o.format,this._gradientType=t.gradientType,this._r<1&&(this._r=X(this._r)),this._g<1&&(this._g=X(this._g)),this._b<1&&(this._b=X(this._b)),this._ok=o.ok,this._tc_id=V++}function n(e){var t={r:0,g:0,b:0},o=1,r=null,a=null,i=null,n=!1,l=!1;return\"string\"==typeof e&&(e=P(e)),\"object\"==typeof e&&(N(e.r)&&N(e.g)&&N(e.b)?(t=s(e.r,e.g,e.b),n=!0,l=\"%\"===String(e.r).substr(-1)?\"prgb\":\"rgb\"):N(e.h)&&N(e.s)&&N(e.v)?(r=B(e.s),a=B(e.v),t=h(e.h,r,a),n=!0,l=\"hsv\"):N(e.h)&&N(e.s)&&N(e.l)&&(r=B(e.s),i=B(e.l),t=c(e.h,r,i),n=!0,l=\"hsl\"),e.hasOwnProperty(\"a\")&&(o=e.a)),o=M(o),{ok:n,format:e.format||l,r:q(255,Y(t.r,0)),g:q(255,Y(t.g,0)),b:q(255,Y(t.b,0)),a:o}}function s(e,t,o){return{r:255*E(e,255),g:255*E(t,255),b:255*E(o,255)}}function l(e,t,o){e=E(e,255),t=E(t,255),o=E(o,255);var r,a,i=Y(e,t,o),n=q(e,t,o),s=(i+n)/2;if(i==n)r=a=0;else{var l=i-n;switch(a=s>.5?l/(2-i-n):l/(i+n),i){case e:r=(t-o)/l+(t1&&(o-=1),o<1/6?e+6*(t-e)*o:o<.5?t:o<2/3?e+(t-e)*(2/3-o)*6:e}var a,i,n;if(e=E(e,360),t=E(t,100),o=E(o,100),0===t)a=i=n=o;else{var s=o<.5?o*(1+t):o+t-o*t,l=2*o-s;a=r(l,s,e+1/3),i=r(l,s,e),n=r(l,s,e-1/3)}return{r:255*a,g:255*i,b:255*n}}function u(e,t,o){e=E(e,255),t=E(t,255),o=E(o,255);var r,a,i=Y(e,t,o),n=q(e,t,o),s=i,l=i-n;if(a=0===i?0:l/i,i==n)r=0;else{switch(i){case e:r=(t-o)/l+(t>1)+720)%360;--t;)r.h=(r.h+a)%360,n.push(i(r));return n}function R(e,t){t=t||6;for(var o=i(e).toHsv(),r=o.h,a=o.s,n=o.v,s=[],l=1/t;t--;)s.push(i({h:r,s:a,v:n})),n=(n+l)%1;return s}function S(e){var t={};for(var o in e)e.hasOwnProperty(o)&&(t[e[o]]=o);return t}function M(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function E(e,t){H(e)&&(e=\"100%\");var o=O(e);return e=q(t,Y(0,parseFloat(e))),o&&(e=parseInt(e*t,10)/100),a.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function j(e){return q(1,Y(0,e))}function L(e){return parseInt(e,16)}function H(e){return\"string\"==typeof e&&e.indexOf(\".\")!=-1&&1===parseFloat(e)}function O(e){return\"string\"==typeof e&&e.indexOf(\"%\")!=-1}function z(e){return 1==e.length?\"0\"+e:\"\"+e}function B(e){return e<=1&&(e=100*e+\"%\"),e}function D(e){return a.round(255*parseFloat(e)).toString(16)}function $(e){return L(e)/255}function N(e){return!!Z.CSS_UNIT.exec(e)}function P(e){e=e.replace(T,\"\").replace(U,\"\").toLowerCase();var t=!1;if(G[e])e=G[e],t=!0;else if(\"transparent\"==e)return{r:0,g:0,b:0,a:0,format:\"name\"};var o;return(o=Z.rgb.exec(e))?{r:o[1],g:o[2],b:o[3]}:(o=Z.rgba.exec(e))?{r:o[1],g:o[2],b:o[3],a:o[4]}:(o=Z.hsl.exec(e))?{h:o[1],s:o[2],l:o[3]}:(o=Z.hsla.exec(e))?{h:o[1],s:o[2],l:o[3],a:o[4]}:(o=Z.hsv.exec(e))?{h:o[1],s:o[2],v:o[3]}:(o=Z.hsva.exec(e))?{h:o[1],s:o[2],v:o[3],a:o[4]}:(o=Z.hex8.exec(e))?{r:L(o[1]),g:L(o[2]),b:L(o[3]),a:$(o[4]),format:t?\"name\":\"hex8\"}:(o=Z.hex6.exec(e))?{r:L(o[1]),g:L(o[2]),b:L(o[3]),format:t?\"name\":\"hex\"}:(o=Z.hex4.exec(e))?{r:L(o[1]+\"\"+o[1]),g:L(o[2]+\"\"+o[2]),b:L(o[3]+\"\"+o[3]),a:$(o[4]+\"\"+o[4]),format:t?\"name\":\"hex8\"}:!!(o=Z.hex3.exec(e))&&{r:L(o[1]+\"\"+o[1]),g:L(o[2]+\"\"+o[2]),b:L(o[3]+\"\"+o[3]),format:t?\"name\":\"hex\"}}function I(e){var t,o;return e=e||{level:\"AA\",size:\"small\"},t=(e.level||\"AA\").toUpperCase(),o=(e.size||\"small\").toLowerCase(),\"AA\"!==t&&\"AAA\"!==t&&(t=\"AA\"),\"small\"!==o&&\"large\"!==o&&(o=\"small\"),{level:t,size:o}}var T=/^\\s+/,U=/\\s+$/,V=0,X=a.round,q=a.min,Y=a.max,W=a.random;i.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,o,r,i,n,s=this.toRgb();return e=s.r/255,t=s.g/255,o=s.b/255,r=e<=.03928?e/12.92:a.pow((e+.055)/1.055,2.4),i=t<=.03928?t/12.92:a.pow((t+.055)/1.055,2.4),n=o<=.03928?o/12.92:a.pow((o+.055)/1.055,2.4),.2126*r+.7152*i+.0722*n},setAlpha:function(e){return this._a=M(e),this._roundA=X(100*this._a)/100,this},toHsv:function(){var e=u(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=u(this._r,this._g,this._b),t=X(360*e.h),o=X(100*e.s),r=X(100*e.v);return 1==this._a?\"hsv(\"+t+\", \"+o+\"%, \"+r+\"%)\":\"hsva(\"+t+\", \"+o+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHsl:function(){var e=l(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=l(this._r,this._g,this._b),t=X(360*e.h),o=X(100*e.s),r=X(100*e.l);return 1==this._a?\"hsl(\"+t+\", \"+o+\"%, \"+r+\"%)\":\"hsla(\"+t+\", \"+o+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHex:function(e){return d(this._r,this._g,this._b,e)},toHexString:function(e){return\"#\"+this.toHex(e)},toHex8:function(e){return f(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return\"#\"+this.toHex8(e)},toRgb:function(){return{r:X(this._r),g:X(this._g),b:X(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\"rgb(\"+X(this._r)+\", \"+X(this._g)+\", \"+X(this._b)+\")\":\"rgba(\"+X(this._r)+\", \"+X(this._g)+\", \"+X(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:X(100*E(this._r,255))+\"%\",g:X(100*E(this._g,255))+\"%\",b:X(100*E(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\"rgb(\"+X(100*E(this._r,255))+\"%, \"+X(100*E(this._g,255))+\"%, \"+X(100*E(this._b,255))+\"%)\":\"rgba(\"+X(100*E(this._r,255))+\"%, \"+X(100*E(this._g,255))+\"%, \"+X(100*E(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return 0===this._a?\"transparent\":!(this._a<1)&&(K[d(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t=\"#\"+p(this._r,this._g,this._b,this._a),o=t,r=this._gradientType?\"GradientType = 1, \":\"\";if(e){var a=i(e);o=\"#\"+p(a._r,a._g,a._b,a._a)}return\"progid:DXImageTransform.Microsoft.gradient(\"+r+\"startColorstr=\"+t+\",endColorstr=\"+o+\")\"},toString:function(e){var t=!!e;e=e||this._format;var o=!1,r=this._a<1&&this._a>=0,a=!t&&r&&(\"hex\"===e||\"hex6\"===e||\"hex3\"===e||\"hex4\"===e||\"hex8\"===e||\"name\"===e);return a?\"name\"===e&&0===this._a?this.toName():this.toRgbString():(\"rgb\"===e&&(o=this.toRgbString()),\"prgb\"===e&&(o=this.toPercentageRgbString()),\"hex\"!==e&&\"hex6\"!==e||(o=this.toHexString()),\"hex3\"===e&&(o=this.toHexString(!0)),\"hex4\"===e&&(o=this.toHex8String(!0)),\"hex8\"===e&&(o=this.toHex8String()),\"name\"===e&&(o=this.toName()),\"hsl\"===e&&(o=this.toHslString()),\"hsv\"===e&&(o=this.toHsvString()),o||this.toHexString())},clone:function(){return i(this.toString())},_applyModification:function(e,t){var o=e.apply(null,[this].concat([].slice.call(t)));return this._r=o._r,this._g=o._g,this._b=o._b,this.setAlpha(o._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(x,arguments)},darken:function(){return this._applyModification(m,arguments)},desaturate:function(){return this._applyModification(_,arguments)},saturate:function(){return this._applyModification(v,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(w,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(A,arguments)},complement:function(){return this._applyCombination(C,arguments)},monochromatic:function(){return this._applyCombination(R,arguments)},splitcomplement:function(){return this._applyCombination(F,arguments)},triad:function(){return this._applyCombination(y,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},i.fromRatio=function(e,t){if(\"object\"==typeof e){var o={};for(var r in e)e.hasOwnProperty(r)&&(\"a\"===r?o[r]=e[r]:o[r]=B(e[r]));e=o}return i(e,t)},i.equals=function(e,t){return!(!e||!t)&&i(e).toRgbString()==i(t).toRgbString()},i.random=function(){return i.fromRatio({r:W(),g:W(),b:W()})},i.mix=function(e,t,o){o=0===o?0:o||50;var r=i(e).toRgb(),a=i(t).toRgb(),n=o/100,s={r:(a.r-r.r)*n+r.r,g:(a.g-r.g)*n+r.g,b:(a.b-r.b)*n+r.b,a:(a.a-r.a)*n+r.a};return i(s)},i.readability=function(e,t){var o=i(e),r=i(t);return(a.max(o.getLuminance(),r.getLuminance())+.05)/(a.min(o.getLuminance(),r.getLuminance())+.05)},i.isReadable=function(e,t,o){var r,a,n=i.readability(e,t);switch(a=!1,r=I(o),r.level+r.size){case\"AAsmall\":case\"AAAlarge\":a=n>=4.5;break;case\"AAlarge\":a=n>=3;break;case\"AAAsmall\":a=n>=7}return a},i.mostReadable=function(e,t,o){var r,a,n,s,l=null,c=0;o=o||{},a=o.includeFallbackColors,n=o.level,s=o.size;for(var u=0;uc&&(c=r,l=i(t[u]));return i.isReadable(e,l,{level:n,size:s})||!a?l:(o.includeFallbackColors=!1,i.mostReadable(e,[\"#fff\",\"#000\"],o))};var G=i.names={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},K=i.hexNames=S(G),Z=function(){var e=\"[-\\\\+]?\\\\d+%?\",t=\"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\",o=\"(?:\"+t+\")|(?:\"+e+\")\",r=\"[\\\\s|\\\\(]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")\\\\s*\\\\)?\",a=\"[\\\\s|\\\\(]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")\\\\s*\\\\)?\";return{CSS_UNIT:new RegExp(o),rgb:new RegExp(\"rgb\"+r),rgba:new RegExp(\"rgba\"+a),hsl:new RegExp(\"hsl\"+r),hsla:new RegExp(\"hsla\"+a),hsv:new RegExp(\"hsv\"+r),hsva:new RegExp(\"hsva\"+a),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();\"undefined\"!=typeof e&&e.exports?e.exports=i:(r=function(){return i}.call(t,o,t,e),!(void 0!==r&&(e.exports=r)))}(Math)},function(e,t,o){var r,a;o(64),r=o(9);var i=o(52);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(55),r=o(10);var i=o(43);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(59),r=o(11);var i=o(47);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(62),r=o(12);var i=o(50);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(63),r=o(13);var i=o(51);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(60),r=o(14);var i=o(48);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(61),r=o(15);var i=o(49);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__compact\"},[o(\"ul\",{staticClass:\"vue-color__compact__colors\"},e._l(e.defaultColors,function(t){return o(\"li\",{staticClass:\"vue-color__compact__color-item\",class:{\"vue-color__compact__color-item--white\":\"#FFFFFF\"===t},style:{background:t},on:{click:function(o){e.handlerClick(t)}}},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t===e.pick,expression:\"c === pick\"}],staticClass:\"vue-color__compact__dot\"})])}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__editable-input\"},[o(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.val,expression:\"val\"}],staticClass:\"vue-color__editable-input__input\",domProps:{value:e.val},on:{keydown:e.handleKeyDown,input:[function(t){t.target.composing||(e.val=t.target.value)},e.update]}}),e._v(\" \"),o(\"span\",{staticClass:\"vue-color__editable-input__label\"},[e._v(e._s(e.label))])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{class:[\"vue-color__c-hue\",e.directionClass]},[o(\"div\",{ref:\"container\",staticClass:\"vue-color__c-hue__container\",on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[o(\"div\",{staticClass:\"vue-color__c-hue__pointer\",style:{top:e.pointerTop,left:e.pointerLeft}},[o(\"div\",{staticClass:\"vue-color__c-hue__picker\"})])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{ref:\"container\",staticClass:\"vue-color__saturation\",style:{background:e.bgColor},on:{mousedown:e.handleMouseDown}},[o(\"div\",{staticClass:\"vue-color__saturation--white\"}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__saturation--black\"}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__saturation--pointer\",style:{top:e.pointerTop,left:e.pointerLeft}},[o(\"div\",{staticClass:\"vue-color__saturation--circle\"})])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__material\"},[o(\"ed-in\",{staticClass:\"vue-color__material__hex\",style:{borderColor:e.colors.hex},attrs:{label:\"hex\"},on:{change:e.onChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__split\"},[o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.onChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.onChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.onChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1)])],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__slider\"},[o(\"div\",{staticClass:\"vue-color__slider__hue-warp\"},[o(\"hue\",{on:{change:e.hueChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__slider__swatches\"},e._l(e.swatches,function(t,r){return o(\"div\",{staticClass:\"vue-color__slider__swatch\",attrs:{\"data-index\":r},on:{click:function(o){e.handleSwClick(r,t)}}},[o(\"div\",{staticClass:\"vue-color__slider__swatch-picker\",class:{\"vue-color__slider__swatch-picker--active\":t==e.activeOffset},style:{background:\"hsl(\"+e.colors.hsl.h+\", 50%, \"+100*t+\"%)\"}})])}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__swatches\",attrs:{\"data-pick\":e.pick}},[o(\"div\",{staticClass:\"vue-color__swatches__box\"},e._l(e.defaultColors,function(t){return o(\"div\",{staticClass:\"vue-color__swatches__color-group\"},e._l(t,function(t){return o(\"div\",{staticClass:\"vue-color__swatches__color-it\",style:{background:t},attrs:{\"data-color\":t},on:{click:function(o){e.handlerClick(t)}}},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t==e.pick,expression:\"c == pick\"}],staticClass:\"vue-color__swatches__pick\"},[o(\"svg\",{staticStyle:{width:\"24px\",height:\"24px\"},attrs:{viewBox:\"0 0 24 24\"}},[o(\"path\",{attrs:{d:\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"}})])])])}))}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__photoshop\"},[o(\"div\",{staticClass:\"vue-color__photoshop__head\"},[e._v(e._s(e.head))]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__body\"},[o(\"div\",{staticClass:\"vue-color__photoshop__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__hue-wrap\"},[o(\"hue\",{attrs:{direction:\"vertical\"},on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}},[o(\"div\",{staticClass:\"vue-color__photoshop__hue-pointer\"},[o(\"i\",{staticClass:\"vue-color__photoshop__hue-pointer--left\"}),o(\"i\",{staticClass:\"vue-color__photoshop__hue-pointer--right\"})])])],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__controls\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews__label\"},[e._v(\"new\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__swatches\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews__pr-color\",style:{background:e.colors.hex}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__pr-color\",style:{background:e.currentColor}})]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__label\"},[e._v(\"current\")])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__actions\"},[o(\"div\",{staticClass:\"vue-color__photoshop__ac-btn\",on:{click:e.handleAccept}},[e._v(\"OK\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__ac-btn\",on:{click:e.handleCancel}},[e._v(\"Cancel\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields\"},[o(\"ed-in\",{attrs:{label:\"h\"},on:{change:e.inputChange},model:{value:e.colors.hsl.h,callback:function(t){e.colors.hsl.h=t},expression:\"colors.hsl.h\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"s\"},on:{change:e.inputChange},model:{value:e.colors.hsl.s,callback:function(t){e.colors.hsl.s=t},expression:\"colors.hsl.s\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"v\"},on:{change:e.inputChange},model:{value:e.colors.hsl.l,callback:function(t){e.colors.hsl.l=t},expression:\"colors.hsl.l\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields__divider\"}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields__divider\"}),e._v(\" \"),o(\"ed-in\",{staticClass:\"vue-color__photoshop__fields__hex\",attrs:{label:\"#\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1)])])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__sketch\"},[o(\"div\",{staticClass:\"vue-color__sketch__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__controls\"},[o(\"div\",{staticClass:\"vue-color__sketch__sliders\"},[o(\"div\",{staticClass:\"vue-color__sketch__hue-wrap\"},[o(\"hue\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__alpha-wrap\"},[o(\"alpha\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1)]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__color-wrap\"},[o(\"div\",{staticClass:\"vue-color__sketch__active-color\",style:{background:e.activeColor}})])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field\"},[o(\"div\",{staticClass:\"vue-color__sketch__field--double\"},[o(\"ed-in\",{attrs:{label:\"hex\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{\nstaticClass:\"vue-color__sketch__presets\"},e._l(e.presetColors,function(t){return o(\"div\",{staticClass:\"vue-color__sketch__presets-color\",style:{background:t},on:{click:function(o){e.handlePreset(t)}}})}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__chrome\"},[o(\"div\",{staticClass:\"vue-color__chrome__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__chrome-body\"},[o(\"div\",{staticClass:\"vue-color__chrome__controls\"},[o(\"div\",{staticClass:\"vue-color__chrome__color-wrap\"},[o(\"div\",{staticClass:\"vue-color__chrome__active-color\",style:{background:e.activeColor}})]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__sliders\"},[o(\"div\",{staticClass:\"vue-color__chrome__hue-wrap\"},[o(\"hue\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__alpha-wrap\"},[o(\"alpha\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1)])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__fields-wrap\"},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:0===e.fieldsIndex,expression:\"fieldsIndex === 0\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"hex\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1)]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:1===e.fieldsIndex,expression:\"fieldsIndex === 1\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:2===e.fieldsIndex,expression:\"fieldsIndex === 2\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"h\"},on:{change:e.inputChange},model:{value:e.colors.hsl.h,callback:function(t){e.colors.hsl.h=t},expression:\"colors.hsl.h\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"s\"},on:{change:e.inputChange},model:{value:e.colors.hsl.s,callback:function(t){e.colors.hsl.s=t},expression:\"colors.hsl.s\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"l\"},on:{change:e.inputChange},model:{value:e.colors.hsl.l,callback:function(t){e.colors.hsl.l=t},expression:\"colors.hsl.l\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__toggle-btn\",on:{click:e.toggleViews}},[o(\"div\",{staticClass:\"vue-color__chrome__icon\"},[o(\"svg\",{staticStyle:{width:\"24px\",height:\"24px\"},attrs:{viewBox:\"0 0 24 24\"},on:{mouseover:e.showHighlight,mouseenter:e.showHighlight,mouseout:e.hideHighlight}},[o(\"path\",{attrs:{fill:\"#333\",d:\"M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z\"}})])]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.highlight,expression:\"highlight\"}],staticClass:\"vue-color__chrome__icon-highlight\"})])])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__c-alpha\"},[o(\"div\",{staticClass:\"vue-color__c-alpha__checkboard-wrap\"},[o(\"checkboard\")],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__c-alpha__gradient\",style:{background:e.gradientColor}}),e._v(\" \"),o(\"div\",{ref:\"container\",staticClass:\"vue-color__c-alpha__container\",on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[o(\"div\",{staticClass:\"vue-color__c-alpha__pointer\",style:{left:100*e.colors.a+\"%\"}},[o(\"div\",{staticClass:\"vue-color__c-alpha__picker\"})])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__c-checkerboard\",style:{background:e.bgStyle}})},staticRenderFns:[]}},function(e,t,o){var r=o(21);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(22);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(23);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(24);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(25);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(26);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(27);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(28);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(29);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(30);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(31);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(32);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)}])});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-color/dist/vue-color.min.js\n// module id = 15\n// module chunks = 0","\n/* styles */\nrequire(\"!!vue-style-loader!css-loader?minimize!../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-1073f3cf\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./FAB.vue\")\nrequire(\"!!vue-style-loader!css-loader?minimize!../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-1073f3cf\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=1!./FAB.vue\")\n\nvar Component = require(\"!../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./FAB.vue\"),\n /* template */\n require(\"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1073f3cf\\\"}!../node_modules/vue-loader/lib/selector?type=template&index=0!./FAB.vue\"),\n /* scopeId */\n \"data-v-1073f3cf\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/FAB.vue\n// module id = 16\n// module chunks = 0","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n directives: [{\n name: \"on-clickaway\",\n rawName: \"v-on-clickaway\",\n value: (_vm.away),\n expression: \"away\"\n }],\n staticClass: \"fab-wrapper\",\n style: ([_vm.pos, {\n zIndex: _vm.zIndex\n }, {\n position: _vm.positionType\n }]),\n attrs: {\n \"id\": _vm.position + '-wrapper'\n }\n }, [_c('div', {\n staticClass: \"actions-container\",\n style: (_vm.listPos),\n attrs: {\n \"id\": _vm.position + '-action'\n }\n }, [_c('transition', {\n attrs: {\n \"name\": \"fab-actions-appear\",\n \"enter-active-class\": _vm.transitionEnter,\n \"leave-active-class\": _vm.transitionLeave\n }\n }, [_c('ul', {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: (_vm.toggle),\n expression: \"toggle\"\n }],\n staticClass: \"fab-list\"\n }, [_vm._l((_vm.actions), function(action) {\n return [_c('transition', {\n attrs: {\n \"enter-active-class\": \"animated quick zoomIn\",\n \"leave-active-class\": \"animated quick zoomOut\"\n },\n on: {\n \"after-enter\": _vm.afterActionsTransitionEnter\n }\n }, [(action.tooltip) ? [(_vm.toggle) ? _c('li', {\n directives: [{\n name: \"tooltip\",\n rawName: \"v-tooltip\",\n value: ({\n content: action.tooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip',\n trigger: _vm.tooltipTrigger\n }),\n expression: \"{ content: action.tooltip, placement: tooltipPosition, classes: 'fab-tooltip', trigger: tooltipTrigger}\"\n }],\n ref: \"actions\",\n refInFor: true,\n staticClass: \"pointer\",\n style: ({\n 'background-color': action.color || _vm.bgColor\n }),\n on: {\n \"click\": function($event) {\n _vm.toParent(action.name)\n }\n }\n }, [_c('i', {\n class: [_vm.actionIconSize, 'material-icons']\n }, [_vm._v(_vm._s(action.icon))])]) : _vm._e()] : [(_vm.toggle) ? _c('li', {\n staticClass: \"pointer\",\n style: ({\n 'background-color': action.color || _vm.bgColor\n }),\n on: {\n \"click\": function($event) {\n _vm.toParent(action.name)\n }\n }\n }, [_c('i', {\n class: [_vm.actionIconSize, 'material-icons']\n }, [_vm._v(_vm._s(action.icon))])]) : _vm._e()]], 2)]\n })], 2)])], 1), _vm._v(\" \"), (_vm.rippleShow) ? [(_vm.mainTooltip) ? [_c('div', {\n directives: [{\n name: \"ripple\",\n rawName: \"v-ripple\",\n value: (_vm.rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''),\n expression: \"rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''\"\n }, {\n name: \"tooltip\",\n rawName: \"v-tooltip\",\n value: ({\n content: _vm.mainTooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip'\n }),\n expression: \"{ content: mainTooltip, placement: tooltipPosition, classes: 'fab-tooltip' }\"\n }],\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n on: {\n \"click\": function($event) {\n _vm.toggle = !_vm.toggle\n }\n }\n }, [_c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons main']\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons close']\n }, [_vm._v(\"add\")])])] : [_c('div', {\n directives: [{\n name: \"ripple\",\n rawName: \"v-ripple\",\n value: (_vm.rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''),\n expression: \"rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''\"\n }],\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n on: {\n \"click\": function($event) {\n _vm.toggle = !_vm.toggle\n }\n }\n }, [_c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons main']\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons close']\n }, [_vm._v(\"add\")])])]] : [(_vm.mainTooltip) ? [_c('div', {\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n attrs: {\n \"v-tooltip\": {\n content: _vm.mainTooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip'\n }\n }\n }, [_c('i', {\n staticClass: \"material-icons md-36 main\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n staticClass: \"material-icons md-36 close\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(\"add\")])])] : [_c('div', {\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n })\n }, [_c('i', {\n staticClass: \"material-icons md-36 main\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n staticClass: \"material-icons md-36 close\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(\"add\")])])]]], 2)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-1073f3cf\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/FAB.vue\n// module id = 17\n// module chunks = 0","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n attrs: {\n \"id\": \"app\"\n }\n }, [_c('link', {\n attrs: {\n \"rel\": \"stylesheet\",\n \"href\": \"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.4.1/css/bulma.min.css\"\n }\n }), _vm._v(\" \"), _c('link', {\n attrs: {\n \"href\": \"https://fonts.googleapis.com/icon?family=Material+Icons\",\n \"rel\": \"stylesheet\"\n }\n }), _vm._v(\" \"), _c('a', {\n attrs: {\n \"href\": _vm.repoUrl\n }\n }, [_c('img', {\n staticStyle: {\n \"position\": \"absolute\",\n \"top\": \"0\",\n \"right\": \"0\",\n \"border\": \"0\"\n },\n attrs: {\n \"src\": \"https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67\",\n \"alt\": \"Fork me on GitHub\",\n \"data-canonical-src\": \"https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png\"\n }\n })]), _vm._v(\" \"), _vm._m(0), _vm._v(\" \"), _c('section', {\n staticClass: \"section\",\n staticStyle: {\n \"padding-top\": \".5rem\"\n }\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-8 is-offset-2\"\n }, [_c('div', {\n staticClass: \"box formated\"\n }, [_vm._m(1), _vm._v(\" \"), _c('div', {\n staticClass: \"content\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-4\",\n staticStyle: {\n \"display\": \"flex\",\n \"justify-content\": \"center\"\n }\n }, [_c('div', {\n staticClass: \"field is-pulled-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Color\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control\"\n }, [_c('chrome-picker', {\n model: {\n value: (_vm.colors),\n callback: function($$v) {\n _vm.colors = $$v\n },\n expression: \"colors\"\n }\n })], 1)])]), _vm._v(\" \"), _c('div', {\n staticClass: \"column\"\n }, [_c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Position\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expanded\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.position),\n expression: \"position\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.position = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.positions), function(pos) {\n return _c('option', [_vm._v(_vm._s(pos))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Position Type\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.positionType),\n expression: \"positionType\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.positionType = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.positionTypes), function(type) {\n return _c('option', [_vm._v(_vm._s(type))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Size\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.iconSizes),\n expression: \"iconSizes\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.iconSizes = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.sizes), function(size) {\n return _c('option', [_vm._v(_vm._s(size))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Tooltip event\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.tooltipEvent),\n expression: \"tooltipEvent\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.tooltipEvent = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.tooltipEvents), function(type) {\n return _c('option', [_vm._v(_vm._s(type))])\n }))])])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n Main Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.mainIcon),\n expression: \"mainIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.mainIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.mainIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.mainTooltip),\n expression: \"mainTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.mainTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.mainTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n First Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.firstIcon),\n expression: \"firstIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.firstIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.firstIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.firstTooltip),\n expression: \"firstTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.firstTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.firstTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n Second Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.secondIcon),\n expression: \"secondIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.secondIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.secondIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.secondTooltip),\n expression: \"secondTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.secondTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.secondTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"checkbox\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.enableRotation),\n expression: \"enableRotation\"\n }],\n attrs: {\n \"type\": \"checkbox\"\n },\n domProps: {\n \"checked\": Array.isArray(_vm.enableRotation) ? _vm._i(_vm.enableRotation, null) > -1 : (_vm.enableRotation)\n },\n on: {\n \"__c\": function($event) {\n var $$a = _vm.enableRotation,\n $$el = $event.target,\n $$c = $$el.checked ? (true) : (false);\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$c) {\n $$i < 0 && (_vm.enableRotation = $$a.concat($$v))\n } else {\n $$i > -1 && (_vm.enableRotation = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.enableRotation = $$c\n }\n }\n }\n }), _vm._v(\"\\n Enable Rotation\\n \")])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column has-text-centered\"\n }, [_c('a', {\n attrs: {\n \"href\": _vm.repoUrl\n }\n }, [_vm._v(\"Installation & Code usage\")])])])])])])])])]), _vm._v(\" \"), _c('footer', {\n staticClass: \"footer\"\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"content has-text-centered\"\n }, [_c('p', [_c('strong', [_vm._v(\"Floating Action Button Vue Component\")]), _vm._v(\" by \"), _c('a', {\n attrs: {\n \"href\": _vm.teamUrl\n }\n }, [_vm._v(\"Pygmy Team\")]), _vm._v(\".\\n \")]), _vm._v(\" \"), _vm._m(2)])])]), _vm._v(\" \"), _c('fab', {\n attrs: {\n \"position\": _vm.position,\n \"icon-size\": _vm.iconSizes,\n \"position-type\": _vm.positionType,\n \"bg-color\": _vm.colors.hex,\n \"main-icon\": _vm.mainIcon,\n \"main-tooltip\": _vm.mainTooltip,\n \"actions\": [{\n name: 'alertMe',\n icon: _vm.firstIcon,\n tooltip: _vm.firstTooltip,\n color: '#d11014'\n }, {\n name: 'alertMe',\n icon: _vm.secondIcon,\n tooltip: _vm.secondTooltip\n }],\n \"fixed-tooltip\": _vm.fixedTooltip,\n \"enable-rotation\": _vm.enableRotation\n },\n on: {\n \"alertMe\": _vm.alert\n }\n })], 1)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"hero\"\n }, [_c('div', {\n staticClass: \"hero-body\",\n staticStyle: {\n \"padding\": \"1rem 0\"\n }\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-8 is-offset-3\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n }, [_c('div', {\n staticClass: \"is-pulled-left\"\n }, [_c('img', {\n attrs: {\n \"width\": \"350px\",\n \"src\": require(\"./assets/logo.png\")\n }\n })]), _vm._v(\" \"), _c('div', {\n staticClass: \"is-pulled-left\",\n staticStyle: {\n \"text-align\": \"left\"\n }\n }, [_c('h1', {\n staticClass: \"title text-medium-grey\",\n staticStyle: {\n \"margin-bottom\": \".5rem\"\n }\n }, [_vm._v(\"\\n Floating Action Button\\n \")]), _vm._v(\" \"), _c('hr', {\n staticClass: \"is-marginless\"\n }), _vm._v(\" \"), _c('h2', {\n staticClass: \"subtitle text-light-grey\",\n staticStyle: {\n \"margin-top\": \".5rem\"\n }\n }, [_vm._v(\"\\n A Vue Component\\n \"), _c('span', {\n staticClass: \"is-pulled-right\"\n }, [_c('a', {\n staticClass: \"github-button\",\n attrs: {\n \"href\": \"https://github.com/PygmySlowLoris/vue-fab\",\n \"data-icon\": \"octicon-star\",\n \"data-size\": \"large\",\n \"aria-label\": \"Star PygmySlowLoris/vue-fab on GitHub\"\n }\n }, [_vm._v(\"Star\")])])])])])])])])])\n},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticClass: \"heading\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column\"\n }, [_c('i', {\n staticClass: \"material-icons top-left\"\n }, [_vm._v(\"code\")]), _vm._v(\" \"), _c('span', {\n staticClass: \"is-pulled-right\"\n }, [_c('b', [_vm._v(\"Example\")])])])])])\n},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('p', [_c('small', [_vm._v(\"Used dependencies for this demo: \"), _c('a', {\n attrs: {\n \"href\": \"http://bulma.io\"\n }\n }, [_vm._v(\"bulma\")]), _vm._v(\" | \"), _c('a', {\n attrs: {\n \"href\": \"https://github.com/xiaokaike/vue-color\"\n }\n }, [_vm._v(\"vue-color\")])])])\n}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-d877a75c\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./demo/App.vue\n// module id = 18\n// module chunks = 0","export default {\n bind: function(el, binding){\n\n // Default values.\n const props = {\n event: 'click',\n transition: 600\n };\n\n setProps(Object.keys(binding.modifiers),props);\n\n el.addEventListener(props.event, function(event) {\n rippler(event, el, binding.value);\n });\n\n var bg = binding.value || 'rgba(0, 0, 0, 0.35)';\n\n function rippler(event, el) {\n var target = el;\n\n // Get necessary variables\n var rect = target.getBoundingClientRect(),\n left = rect.left,\n top = rect.top,\n width = target.offsetWidth,\n height = target.offsetHeight,\n dx = event.clientX - left,\n dy = event.clientY - top,\n maxX = Math.max(dx, width - dx),\n maxY = Math.max(dy, height - dy),\n style = window.getComputedStyle(target),\n radius = Math.sqrt((maxX * maxX) + (maxY * maxY));\n\n // Create the ripple and its container\n var ripple = document.createElement(\"div\"),\n rippleContainer = document.createElement(\"div\");\n\n //Styles for ripple\n ripple.style.marginTop= '0px';\n ripple.style.marginLeft= '0px';\n ripple.style.width= '1px';\n ripple.style.height= '1px';\n ripple.style.transition= 'all ' + props.transition + 'ms cubic-bezier(0.4, 0, 0.2, 1)';\n ripple.style.borderRadius= '50%';\n ripple.style.pointerEvents= 'none';\n ripple.style.position= 'relative';\n ripple.style.zIndex= '9999';\n ripple.style.backgroundColor = bg;\n\n //Styles for rippleContainer\n rippleContainer.style.position= 'absolute';\n rippleContainer.style.left = '0';\n rippleContainer.style.top = '0';\n rippleContainer.style.height = '0';\n rippleContainer.style.width = '0';\n rippleContainer.style.pointerEvents = 'none';\n rippleContainer.style.overflow = 'hidden';\n\n rippleContainer.appendChild(ripple);\n document.body.appendChild(rippleContainer);\n\n ripple.style.marginLeft = dx + \"px\";\n ripple.style.marginTop = dy + \"px\";\n\n rippleContainer.style.left = left + (((window.pageXOffset || document.scrollLeft) - (document.clientLeft || 0)) || 0) + \"px\";\n rippleContainer.style.top = top + (((window.pageYOffset || document.scrollTop) - (document.clientTop || 0)) || 0) + \"px\";\n rippleContainer.style.width = width + \"px\";\n rippleContainer.style.height = height + \"px\";\n rippleContainer.style.borderTopLeftRadius = style.borderTopLeftRadius;\n rippleContainer.style.borderTopRightRadius = style.borderTopRightRadius;\n rippleContainer.style.borderBottomLeftRadius = style.borderBottomLeftRadius;\n rippleContainer.style.borderBottomRightRadius = style.borderBottomRightRadius;\n\n setTimeout(function() {\n\n ripple.style.width = radius * 2 + \"px\";\n ripple.style.height = radius * 2 + \"px\";\n ripple.style.marginLeft = dx - radius + \"px\";\n ripple.style.marginTop = dy - radius + \"px\";\n }, 0);\n\n setTimeout(function() {\n ripple.style.backgroundColor = \"rgba(0, 0, 0, 0)\";\n }, 250);\n\n setTimeout(function() {\n ripple.remove();\n rippleContainer.remove();\n }, 650);\n }\n }\n}\n\nfunction setProps(modifiers,props) {\n modifiers.forEach(function(item) {\n if(isNaN(Number(item)))\n props.event = item;\n else\n props.transition = item;\n });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-ripple-directive/src/ripple.js\n// module id = 19\n// module chunks = 0","// style-loader: Adds some css to the DOM by adding a \n\n\n\n// WEBPACK FOOTER //\n// App.vue?c466adfe","\n \n
\n
\n \n \n \n \n - \n {{action.icon}}\n
\n \n \n - \n {{action.icon}}\n
\n \n \n \n
\n \n
\n
\n \n \n {{mainIcon}}\n add\n
\n \n \n \n {{mainIcon}}\n add\n
\n \n \n
\n \n \n {{mainIcon}}\n add\n
\n \n \n \n {{mainIcon}}\n add\n
\n \n \n
\n\n\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// FAB.vue?33e8af9e","exports = module.exports = require(\"../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \".fab-tooltip.tooltip{display:block!important;padding:4px;z-index:10000}.fab-tooltip.tooltip .tooltip-inner{background:#333;color:#fff;border-radius:0;padding:5px 10px 4px}.fab-tooltip.tooltip tooltip-arrow{display:none}.fab-tooltip.tooltip[aria-hidden=true]{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s}.fab-tooltip.tooltip[aria-hidden=false]{visibility:visible;opacity:1;transition:opacity .15s}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/vue-loader/lib/style-compiler?{\"id\":\"data-v-1073f3cf\",\"scoped\":false,\"hasInlineConfig\":false}!./~/vue-loader/lib/selector.js?type=styles&index=0!./src/FAB.vue\n// module id = 9\n// module chunks = 0","exports = module.exports = require(\"../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \".animated.quick[data-v-1073f3cf]{-webkit-animation-duration:.7s!important;animation-duration:.7s!important}.fab-wrapper[data-v-1073f3cf]{z-index:999}.fab-main[data-v-1073f3cf]{border-radius:100px;padding:30px;position:relative;overflow:hidden;display:flex;align-items:center;box-shadow:0 10px 10px rgba(0,0,0,.2),0 4px 4px rgba(0,0,0,.15);z-index:2;justify-content:center}.fab-main .material-icons[data-v-1073f3cf]{color:#fff;transition:all .4s;margin:0 auto}.fab-main .material-icons.main[data-v-1073f3cf]{opacity:1;position:absolute}.fab-main .material-icons.close[data-v-1073f3cf]{opacity:0;position:absolute}.fab-main .material-icons.main.rotate[data-v-1073f3cf]{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:0;transition:opacity .3s ease-in,transform .4s}.fab-main .material-icons.close.rotate[data-v-1073f3cf]{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:1;transition:opacity .3s ease-in,transform .4s}.fab-list[data-v-1073f3cf]{position:relative;z-index:1;margin:2vh 0;display:flex;flex-direction:column;align-items:center}.fab-list li[data-v-1073f3cf]{padding:10px;margin-top:1vh;margin-bottom:1vh;display:flex;align-items:center;border-radius:100px;box-shadow:0 10px 10px rgba(0,0,0,.2),0 4px 4px rgba(0,0,0,.15);z-index:15}.fab-list li .material-icons[data-v-1073f3cf]{color:#fff;margin:0 auto}.pointer[data-v-1073f3cf]{cursor:pointer}ul[data-v-1073f3cf]{list-style-type:none;padding:0!important;z-index:10}.fab-wrapper .actions-container[data-v-1073f3cf]{z-index:0;position:relative;display:flex;align-items:center;justify-content:center}.material-icons.md-18[data-v-1073f3cf]{font-size:18px}.material-icons.md-24[data-v-1073f3cf]{font-size:24px}.material-icons.md-36[data-v-1073f3cf]{font-size:36px}.material-icons.md-48[data-v-1073f3cf]{font-size:48px}.material-icons.md-dark[data-v-1073f3cf]{color:rgba(0,0,0,.54)}.material-icons.md-dark.md-inactive[data-v-1073f3cf]{color:rgba(0,0,0,.26)}.material-icons.md-light[data-v-1073f3cf]{color:#fff}.material-icons.md-light.md-inactive[data-v-1073f3cf]{color:hsla(0,0%,100%,.3)}@media screen and (max-width:768px){.fab-list[data-v-1073f3cf]{margin:2vh 0}}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/vue-loader/lib/style-compiler?{\"id\":\"data-v-1073f3cf\",\"scoped\":true,\"hasInlineConfig\":false}!./~/vue-loader/lib/selector.js?type=styles&index=1!./src/FAB.vue\n// module id = 10\n// module chunks = 0","exports = module.exports = require(\"../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \"#app[data-v-d877a75c]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}.pointer[data-v-d877a75c]{cursor:pointer}h1[data-v-d877a75c],h2[data-v-d877a75c]{font-weight:400}hr[data-v-d877a75c]{background-color:transparent;border:none;display:block;height:inherit;margin:1.5rem 0;border-top:1px dashed}li[data-v-d877a75c]{display:inline-block;margin:0 10px}a[data-v-d877a75c]{color:#0b99b9;text-decoration:underline}.text-medium-grey[data-v-d877a75c]{color:#333}.text-light-grey[data-v-d877a75c]{color:#888}.box.formated[data-v-d877a75c]{position:relative;padding:0}.box.formated .heading[data-v-d877a75c]{font-size:1rem;text-transform:capitalize;padding:.8rem 1.5rem;background-color:#fafafa}.box.formated .content[data-v-d877a75c]{padding:1rem 2rem}i.top-left[data-v-d877a75c]{position:absolute;left:1.5rem;top:.8rem}.vertical-separator[data-v-d877a75c]{display:flex;justify-content:space-around}.vertical-separator .line[data-v-d877a75c]{border-right:1px solid #ccc}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/vue-loader/lib/style-compiler?{\"id\":\"data-v-d877a75c\",\"scoped\":true,\"hasInlineConfig\":false}!./~/vue-loader/lib/selector.js?type=styles&index=0!./demo/App.vue\n// module id = 11\n// module chunks = 0","module.exports = \"data:image/png;base64,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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./demo/assets/logo.png\n// module id = 12\n// module chunks = 0","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 4);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tooltip_js__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(1);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return defaultOptions; });\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\nvar positions = ['top', 'top-start', 'top-end', 'right', 'right-start', 'right-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end'];\n\nvar defaultOptions = {\n defaultPlacement: 'top',\n defaultClass: 'vue-tooltip-theme',\n defaultTemplate: '',\n defaultDelay: 0,\n defaultTrigger: 'hover focus',\n defaultOffset: 0,\n defaultContainer: 'body'\n};\n\nfunction getOptions(options) {\n return {\n placement: options.placement || directive.options.defaultPlacement,\n delay: options.delay || directive.options.defaultDelay,\n template: options.template || directive.options.defaultTemplate,\n trigger: options.trigger || directive.options.defaultTrigger,\n offset: options.offset || directive.options.defaultOffset,\n container: options.container || directive.options.defaultContainer\n };\n}\n\nfunction getPlacement(value, modifiers) {\n var placement = value.placement;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = positions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var pos = _step.value;\n\n if (modifiers[pos]) {\n placement = pos;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return placement;\n}\n\nvar SuperTooltip = function (_Tooltip) {\n _inherits(SuperTooltip, _Tooltip);\n\n function SuperTooltip() {\n _classCallCheck(this, SuperTooltip);\n\n return _possibleConstructorReturn(this, (SuperTooltip.__proto__ || Object.getPrototypeOf(SuperTooltip)).apply(this, arguments));\n }\n\n _createClass(SuperTooltip, [{\n key: 'setClasses',\n value: function setClasses(classes) {\n var el = this._tooltipNode;\n\n if (el) {\n var oldClasses = this._oldClasses;\n if (classes) {\n if (oldClasses) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"a\" /* replaceClasses */])(el, classes, oldClasses);\n } else {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"b\" /* addClasses */])(el, classes);\n }\n } else if (oldClasses) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__[\"c\" /* removeClasses */])(el, oldClasses);\n }\n this._oldClasses = classes;\n } else {\n this._pendingClasses = classes;\n }\n\n this._classes = classes;\n }\n }, {\n key: 'setContent',\n value: function setContent(content) {\n this.options.title = content;\n if (this._tooltipNode) {\n var el = this._tooltipNode.querySelector(this.innerSelector);\n\n if (el) {\n if (!content) {\n el.innerHTML = '';\n } else {\n el.innerHTML = content;\n }\n\n this.popperInstance.update();\n }\n }\n }\n }, {\n key: 'setOptions',\n value: function setOptions(options) {\n options = getOptions(options);\n\n var needPopperUpdate = false;\n var needRestart = false;\n\n if (this.options.offset !== options.offset || this.options.placement !== options.placement) {\n needPopperUpdate = true;\n }\n\n if (this.options.template !== options.template || this.options.trigger !== options.trigger || this.options.container !== options.container) {\n needRestart = true;\n }\n\n for (var key in options) {\n this.options[key] = options[key];\n }\n\n if (this._tooltipNode) {\n if (needRestart) {\n var isOpen = this._isOpen;\n\n this.dispose();\n\n var events = typeof this.options.trigger === 'string' ? options.trigger.split(' ').filter(function (trigger) {\n return ['click', 'hover', 'focus'].indexOf(trigger) !== -1;\n }) : [];\n this._setEventListeners(this.reference, events, this.options);\n\n this.setClasses(this._classes);\n\n if (isOpen) {\n this.show();\n }\n } else if (needPopperUpdate) {\n this.popperInstance.update();\n }\n }\n }\n }, {\n key: '_dispose',\n value: function _dispose() {\n var _this2 = this;\n\n this._events.forEach(function (_ref) {\n var func = _ref.func,\n event = _ref.event;\n\n _this2.reference.removeEventListener(event, func);\n });\n this._events = [];\n _get(SuperTooltip.prototype.__proto__ || Object.getPrototypeOf(SuperTooltip.prototype), '_dispose', this).call(this);\n }\n }, {\n key: '_show',\n value: function _show() {\n var _get2,\n _this3 = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n (_get2 = _get(SuperTooltip.prototype.__proto__ || Object.getPrototypeOf(SuperTooltip.prototype), '_show', this)).call.apply(_get2, [this].concat(args));\n\n if (this._pendingClasses) {\n this.setClasses(this._pendingClasses);\n this._pendingClasses = null;\n }\n\n // Fix position\n setTimeout(function () {\n _this3.popperInstance.update();\n }, 0);\n }\n }]);\n\n return SuperTooltip;\n}(__WEBPACK_IMPORTED_MODULE_0_tooltip_js__[\"a\" /* default */]);\n\nfunction createTooltip(el, value, modifiers) {\n var content = value.content || value;\n var classes = value.classes || directive.options.defaultClass;\n\n var tooltip = el._tooltip = new SuperTooltip(el, _extends({\n title: content,\n html: true\n }, getOptions(_extends({}, value, {\n placement: getPlacement(value, modifiers)\n }))));\n tooltip.setClasses(classes);\n}\n\nfunction destroyTooltip(el) {\n if (el._tooltip) {\n el._tooltip.dispose();\n delete el._tooltip;\n }\n}\n\nvar directive = {\n options: defaultOptions,\n bind: function bind(el, _ref2) {\n var value = _ref2.value,\n modifiers = _ref2.modifiers;\n\n var content = value && value.content || value;\n destroyTooltip(el);\n if (content) {\n createTooltip(el, value, modifiers);\n }\n },\n update: function update(el, _ref3) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue,\n modifiers = _ref3.modifiers;\n\n var content = value && value.content || value;\n if (!content) {\n destroyTooltip(el);\n } else if (el._tooltip) {\n var tooltip = el._tooltip;\n // Content\n tooltip.setContent(content);\n // CSS Classes\n tooltip.setClasses(value && value.classes || directive.options.defaultClass);\n // Options\n tooltip.setOptions(_extends({}, value, {\n placement: getPlacement(value, modifiers)\n }));\n } else {\n createTooltip(el, value, modifiers);\n }\n },\n unbind: function unbind(el) {\n destroyTooltip(el);\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"b\"] = directive;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = addClasses;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = removeClasses;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = replaceClasses;\n\nfunction convertToArray(value) {\n if (typeof value === 'string') {\n value = value.split(' ');\n }\n return value;\n}\n\nfunction addClasses(el, classes) {\n classes = convertToArray(classes);\n classes.forEach(function (c) {\n el.classList.add(c);\n });\n}\n\nfunction removeClasses(el, classes) {\n classes = convertToArray(classes);\n classes.forEach(function (c) {\n el.classList.remove(c);\n });\n}\n\nfunction replaceClasses(el, newClasses, oldClasses) {\n removeClasses(el, oldClasses);\n addClasses(el, newClasses);\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar nativeHints = ['native code', '[object MutationObserverConstructor]'];\n\n/**\n * Determine if a function is implemented natively (as opposed to a polyfill).\n * @method\n * @memberof Popper.Utils\n * @argument {Function | undefined} fn the function to check\n * @returns {Boolean}\n */\nvar isNative = function isNative(fn) {\n return nativeHints.some(function (hint) {\n return (fn || '').toString().indexOf(hint) > -1;\n });\n};\n\nvar isBrowser = typeof window !== 'undefined';\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var scheduled = false;\n var i = 0;\n var elem = document.createElement('span');\n\n // MutationObserver provides a mechanism for scheduling microtasks, which\n // are scheduled *before* the next task. This gives us a way to debounce\n // a function but ensure it's called *before* the next paint.\n var observer = new MutationObserver(function () {\n fn();\n scheduled = false;\n });\n\n observer.observe(elem, { attributes: true });\n\n return function () {\n if (!scheduled) {\n scheduled = true;\n elem.setAttribute('x-index', i);\n i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8\n }\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\n// It's common for MutationObserver polyfills to be seen in the wild, however\n// these rely on Mutation Events which only occur when an element is connected\n// to the DOM. The algorithm used in this module does not use a connected element,\n// and so we must ensure that a *native* MutationObserver is available.\nvar supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsNativeMutationObserver ? microtaskDebounce : taskDebounce;\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1) {\n return window.document.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || element.firstElementChild.offsetParent === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element && element.offsetParent;\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return window.document.documentElement;\n }\n\n return offsetParent;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return window.document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = window.document.documentElement;\n var scrollingElement = window.document.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return +styles['border' + sideA + 'Width'].split('px')[0] + +styles['border' + sideB + 'Width'].split('px')[0];\n}\n\nfunction getWindowSizes() {\n var body = window.document.body;\n var html = window.document.documentElement;\n return {\n height: Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight),\n width: Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth)\n };\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Tells if you are running Internet Explorer 10\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean} isIE10\n */\nvar isIE10 = undefined;\n\nvar isIE10$1 = function isIE10$1() {\n if (isIE10 === undefined) {\n isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n }\n return isIE10;\n};\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n if (isIE10$1()) {\n try {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } catch (err) {}\n } else {\n rect = element.getBoundingClientRect();\n }\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var isIE10 = isIE10$1();\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top,\n left: childrenRect.left - parentRect.left,\n width: childrenRect.width,\n height: childrenRect.height\n });\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (isHTML || parent.nodeName === 'BODY') {\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = isIE10 && isHTML ? 0 : +styles.borderTopWidth.split('px')[0];\n var borderLeftWidth = isIE10 && isHTML ? 0 : +styles.borderLeftWidth.split('px')[0];\n var marginTop = isIE10 && isHTML ? 0 : +styles.marginTop.split('px')[0];\n var marginLeft = isIE10 && isHTML ? 0 : +styles.marginLeft.split('px')[0];\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (parent.contains(scrollParent) && (isIE10 || scrollParent.nodeName !== 'BODY')) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var html = window.document.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = getScroll(html);\n var scrollLeft = getScroll(html, 'left');\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = { top: 0, left: 0 };\n var offsetParent = findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(popper));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = window.document.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = window.document.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, 0, boundariesElement);\n\n var sides = {\n top: refRect.top - boundaries.top,\n right: boundaries.right - refRect.right,\n bottom: boundaries.bottom - refRect.bottom,\n left: refRect.left - boundaries.left\n };\n\n var computedPlacement = Object.keys(sides).sort(function (a, b) {\n return sides[b] - sides[a];\n })[0];\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var commonOffsetParent = findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier.function) {\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier.function || modifier.fn;\n if (modifier.enabled && isFunction(fn)) {\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n data.offsets.popper.position = 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'webkit', 'moz', 'o'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length - 1; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof window.document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.left = '';\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? window : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n window.addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n window.removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n window.cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data, options) {\n // apply the final offsets to the popper\n // NOTE: 1 DOM access here\n var styles = {\n position: data.offsets.popper.position\n };\n\n var attributes = {\n 'x-placement': data.placement\n };\n\n // round top and left to avoid blurry text\n var left = Math.round(data.offsets.popper.left);\n var top = Math.round(data.offsets.popper.top);\n\n // if gpuAcceleration is set to true and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n if (options.gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles.top = 0;\n styles.left = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `left` and `top` properties\n styles.left = left;\n styles.top = top;\n styles.willChange = 'top, left';\n }\n\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, _extends({}, styles, data.styles));\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, _extends({}, attributes, data.attributes));\n\n // if the arrow style has been computed, apply the arrow style\n if (data.offsets.arrow) {\n setStyles(data.arrowElement, data.offsets.arrow);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement);\n\n popper.setAttribute('x-placement', placement);\n return options;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var popper = getClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var side = isVertical ? 'top' : 'left';\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n var sideValue = center - getClientRect(data.offsets.popper)[side];\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {};\n data.offsets.arrow[side] = sideValue;\n data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = getClientRect(data.offsets.popper);\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n data.offsets.popper = getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement);\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var popper = getClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = getClientRect(data.offsets.popper);\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var reference = data.offsets.reference;\n var popper = getClientRect(data.offsets.popper);\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var popper = getClientRect(data.offsets.popper);\n var reference = getClientRect(data.offsets.reference);\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[placement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} priority=['left', 'right', 'top', 'bottom']\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arro] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar DEFAULTS = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreateCallback}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdateCallback}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreateCallback\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdateCallback\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper =\n/**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [DEFAULTS](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\nfunction Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n this.update = update;\n this.destroy = destroy;\n this.enableEventListeners = enableEventListeners;\n this.disableEventListeners = disableEventListeners;\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference.jquery ? reference[0] : reference;\n this.popper = popper.jquery ? popper[0] : popper;\n\n // make sure to apply the popper position before any computation\n setStyles(this.popper, { position: 'absolute' });\n\n // refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(Popper.Defaults.modifiers).map(function (name) {\n return _extends({\n name: name\n }, Popper.Defaults.modifiers[name]);\n });\n\n // assign default values to modifiers, making sure to override them with\n // the ones defined by user\n this.modifiers = this.modifiers.map(function (defaultConfig) {\n var userConfig = options.modifiers && options.modifiers[defaultConfig.name] || {};\n return _extends({}, defaultConfig, userConfig);\n });\n\n // add custom modifiers to the modifiers list\n if (options.modifiers) {\n this.options.modifiers = _extends({}, Popper.Defaults.modifiers, options.modifiers);\n Object.keys(options.modifiers).forEach(function (name) {\n // take in account only custom modifiers\n if (Popper.Defaults.modifiers[name] === undefined) {\n var modifier = options.modifiers[name];\n modifier.name = name;\n _this.modifiers.push(modifier);\n }\n });\n }\n\n // sort the modifiers by order\n this.modifiers = this.modifiers.sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n};\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = DEFAULTS;\n\n/* harmony default export */ __webpack_exports__[\"a\"] = Popper;\n//# sourceMappingURL=popper.js.map\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_popper_js__ = __webpack_require__(2);\n\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {*} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar DEFAULT_OPTIONS = {\n container: false,\n delay: 0,\n html: false,\n placement: 'top',\n title: '',\n template: '',\n trigger: 'hover focus',\n offset: 0\n};\n\nvar Tooltip = function () {\n /**\n * Create a new Tooltip.js instance\n * @class Tooltip\n * @param {HTMLElement} reference - The reference element used to position the tooltip\n * @param {Object} options\n * @param {String} options.placement=bottom\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -end),\n * left(-start, -end)`\n *\n * @param {HTMLElement} reference - The DOM node used as reference of the tooltip (it can be a jQuery element).\n * @param {Object} options - Configuration of the tooltip\n * @param {HTMLElement|String|false} options.container=false - Append the tooltip to a specific element.\n * @param {Number|Object} options.delay=0\n * Delay showing and hiding the tooltip (ms) - does not apply to manual trigger type.\n * If a number is supplied, delay is applied to both hide/show.\n * Object structure is: `{ show: 500, hide: 100 }`\n * @param {Boolean} options.html=false - Insert HTML into the tooltip. If false, the content will inserted with `innerText`.\n * @param {String|PlacementFunction} options.placement='top' - One of the allowed placements, or a function returning one of them.\n * @param {String} options.template=''\n * Base HTML to used when creating the tooltip.\n * The tooltip's `title` will be injected into the `.tooltip-inner` or `.tooltip__inner`.\n * `.tooltip-arrow` or `.tooltip__arrow` will become the tooltip's arrow.\n * The outermost wrapper element should have the `.tooltip` class.\n * @param {String|HTMLElement|TitleFunction} options.title='' - Default title value if `title` attribute isn't present.\n * @param {String} options.trigger='hover focus'\n * How tooltip is triggered - click | hover | focus | manual.\n * You may pass multiple triggers; separate them with a space. `manual` cannot be combined with any other trigger.\n * @param {HTMLElement} options.boundariesElement\n * The element used as boundaries for the tooltip. For more information refer to Popper.js'\n * [boundariesElement docs](https://popper.js.org/popper-documentation.html)\n * @param {Number|String} options.offset=0 - Offset of the tooltip relative to its reference. For more information refer to Popper.js'\n * [offset docs](https://popper.js.org/popper-documentation.html)\n * @return {Object} instance - The generated tooltip instance\n */\n function Tooltip(reference, options) {\n classCallCheck(this, Tooltip);\n\n _initialiseProps.call(this);\n\n // apply user options over default ones\n options = _extends({}, DEFAULT_OPTIONS, options);\n\n reference.jquery && (reference = reference[0]);\n\n // cache reference and options\n this.reference = reference;\n this.options = options;\n\n // get events list\n var events = typeof options.trigger === 'string' ? options.trigger.split(' ').filter(function (trigger) {\n return ['click', 'hover', 'focus'].indexOf(trigger) !== -1;\n }) : [];\n\n // set initial state\n this._isOpen = false;\n\n // set event listeners\n this._setEventListeners(reference, events, options);\n }\n\n //\n // Public methods\n //\n\n /**\n * Reveals an element's tooltip. This is considered a \"manual\" triggering of the tooltip.\n * Tooltips with zero-length titles are never displayed.\n * @memberof Tooltip\n */\n\n /**\n * Hides an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @memberof Tooltip\n */\n\n /**\n * Hides and destroys an element’s tooltip.\n * @memberof Tooltip\n */\n\n /**\n * Toggles an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @memberof Tooltip\n */\n\n //\n // Defaults\n //\n\n\n //\n // Private methods\n //\n\n createClass(Tooltip, [{\n key: '_create',\n\n /**\n * Creates a new tooltip node\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} reference\n * @param {String} template\n * @param {String|HTMLElement|TitleFunction} title\n * @param {Boolean} allowHtml\n * @return {HTMLelement} tooltipNode\n */\n value: function _create(reference, template, title, allowHtml) {\n // create tooltip element\n var tooltipGenerator = window.document.createElement('div');\n tooltipGenerator.innerHTML = template;\n var tooltipNode = tooltipGenerator.childNodes[0];\n\n // add unique ID to our tooltip (needed for accessibility reasons)\n tooltipNode.id = 'tooltip_' + Math.random().toString(36).substr(2, 10);\n\n // set initial `aria-hidden` state to `false` (it's visible!)\n tooltipNode.setAttribute('aria-hidden', 'false');\n\n // add title to tooltip\n var titleNode = tooltipGenerator.querySelector(this.innerSelector);\n if (title.nodeType === 1) {\n // if title is a node, append it only if allowHtml is true\n allowHtml && titleNode.appendChild(title);\n } else if (isFunction(title)) {\n // if title is a function, call it and set innerText or innerHtml depending by `allowHtml` value\n var titleText = title.call(reference);\n allowHtml ? titleNode.innerHTML = titleText : titleNode.innerText = titleText;\n } else {\n // if it's just a simple text, set innerText or innerHtml depending by `allowHtml` value\n allowHtml ? titleNode.innerHTML = title : titleNode.innerText = title;\n }\n\n // return the generated tooltip node\n return tooltipNode;\n }\n }, {\n key: '_show',\n value: function _show(reference, options) {\n // don't show if it's already visible\n if (this._isOpen) {\n return this;\n }\n this._isOpen = true;\n\n // if the tooltipNode already exists, just show it\n if (this._tooltipNode) {\n this._tooltipNode.style.display = '';\n this._tooltipNode.setAttribute('aria-hidden', 'false');\n this.popperInstance.update();\n return this;\n }\n\n // get title\n var title = reference.getAttribute('title') || options.title;\n\n // don't show tooltip if no title is defined\n if (!title) {\n return this;\n }\n\n // create tooltip node\n var tooltipNode = this._create(reference, options.template, title, options.html);\n\n // Add `aria-describedby` to our reference element for accessibility reasons\n tooltipNode.setAttribute('aria-describedby', tooltipNode.id);\n\n // append tooltip to container\n var container = this._findContainer(options.container, reference);\n\n this._append(tooltipNode, container);\n\n var popperOptions = {\n placement: options.placement,\n arrowElement: this.arrowSelector\n };\n\n if (options.boundariesElement) {\n popperOptions.boundariesElement = options.boundariesElement;\n }\n\n this.popperInstance = new __WEBPACK_IMPORTED_MODULE_0_popper_js__[\"a\" /* default */](reference, tooltipNode, popperOptions);\n\n this._tooltipNode = tooltipNode;\n\n return this;\n }\n }, {\n key: '_hide',\n value: function _hide() /*reference, options*/{\n // don't hide if it's already hidden\n if (!this._isOpen) {\n return this;\n }\n\n this._isOpen = false;\n\n // hide tooltipNode\n this._tooltipNode.style.display = 'none';\n this._tooltipNode.setAttribute('aria-hidden', 'true');\n\n return this;\n }\n }, {\n key: '_dispose',\n value: function _dispose() {\n var _this = this;\n\n if (this._tooltipNode) {\n this._hide();\n\n // destroy instance\n this.popperInstance.destroy();\n\n // remove event listeners\n this._events.forEach(function (_ref) {\n var func = _ref.func,\n event = _ref.event;\n\n _this._tooltipNode.removeEventListener(event, func);\n });\n this._events = [];\n\n // destroy tooltipNode\n this._tooltipNode.parentNode.removeChild(this._tooltipNode);\n this._tooltipNode = null;\n }\n return this;\n }\n }, {\n key: '_findContainer',\n value: function _findContainer(container, reference) {\n // if container is a query, get the relative element\n if (typeof container === 'string') {\n container = window.document.querySelector(container);\n } else if (container === false) {\n // if container is `false`, set it to reference parent\n container = reference.parentNode;\n }\n return container;\n }\n\n /**\n * Append tooltip to container\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} tooltip\n * @param {HTMLElement|String|false} container\n */\n\n }, {\n key: '_append',\n value: function _append(tooltipNode, container) {\n container.appendChild(tooltipNode);\n }\n }, {\n key: '_setEventListeners',\n value: function _setEventListeners(reference, events, options) {\n var _this2 = this;\n\n var directEvents = [];\n var oppositeEvents = [];\n\n events.forEach(function (event) {\n switch (event) {\n case 'hover':\n directEvents.push('mouseenter');\n oppositeEvents.push('mouseleave');\n case 'focus':\n directEvents.push('focus');\n oppositeEvents.push('blur');\n case 'click':\n directEvents.push('click');\n oppositeEvents.push('click');\n }\n });\n\n // schedule show tooltip\n directEvents.forEach(function (event) {\n var func = function func(evt) {\n if (_this2._isOpen === true) {\n return;\n }\n evt.usedByTooltip = true;\n _this2._scheduleShow(reference, options.delay, options, evt);\n };\n _this2._events.push({ event: event, func: func });\n reference.addEventListener(event, func);\n });\n\n // schedule hide tooltip\n oppositeEvents.forEach(function (event) {\n var func = function func(evt) {\n if (evt.usedByTooltip === true) {\n return;\n }\n _this2._scheduleHide(reference, options.delay, options, evt);\n };\n _this2._events.push({ event: event, func: func });\n reference.addEventListener(event, func);\n });\n }\n }, {\n key: '_scheduleShow',\n value: function _scheduleShow(reference, delay, options /*, evt */) {\n var _this3 = this;\n\n // defaults to 0\n var computedDelay = delay && delay.show || delay || 0;\n window.setTimeout(function () {\n return _this3._show(reference, options);\n }, computedDelay);\n }\n }, {\n key: '_scheduleHide',\n value: function _scheduleHide(reference, delay, options, evt) {\n var _this4 = this;\n\n // defaults to 0\n var computedDelay = delay && delay.hide || delay || 0;\n window.setTimeout(function () {\n if (_this4._isOpen === false) {\n return;\n }\n if (!document.body.contains(_this4._tooltipNode)) {\n return;\n }\n\n // if we are hiding because of a mouseleave, we must check that the new\n // reference isn't the tooltip, because in this case we don't want to hide it\n if (evt.type === 'mouseleave') {\n var isSet = _this4._setTooltipNodeEvent(evt, reference, delay, options);\n\n // if we set the new event, don't hide the tooltip yet\n // the new event will take care to hide it if necessary\n if (isSet) {\n return;\n }\n }\n\n _this4._hide(reference, options);\n }, computedDelay);\n }\n }]);\n return Tooltip;\n}();\n\n/**\n * Placement function, its context is the Tooltip instance.\n * @memberof Tooltip\n * @callback PlacementFunction\n * @param {HTMLElement} tooltip - tooltip DOM node.\n * @param {HTMLElement} reference - reference DOM node.\n * @return {String} placement - One of the allowed placement options.\n */\n\n/**\n * Title function, its context is the Tooltip instance.\n * @memberof Tooltip\n * @callback TitleFunction\n * @return {String} placement - The desired title.\n */\n\nvar _initialiseProps = function _initialiseProps() {\n var _this5 = this;\n\n this.show = function () {\n return _this5._show(_this5.reference, _this5.options);\n };\n\n this.hide = function () {\n return _this5._hide();\n };\n\n this.dispose = function () {\n return _this5._dispose();\n };\n\n this.toggle = function () {\n if (_this5._isOpen) {\n return _this5.hide();\n } else {\n return _this5.show();\n }\n };\n\n this.arrowSelector = '.tooltip-arrow, .tooltip__arrow';\n this.innerSelector = '.tooltip-inner, .tooltip__inner';\n this._events = [];\n\n this._setTooltipNodeEvent = function (evt, reference, delay, options) {\n var relatedreference = evt.relatedreference || evt.toElement;\n\n var callback = function callback(evt2) {\n var relatedreference2 = evt2.relatedreference || evt2.toElement;\n\n // Remove event listener after call\n _this5._tooltipNode.removeEventListener(evt.type, callback);\n\n // If the new reference is not the reference element\n if (!reference.contains(relatedreference2)) {\n // Schedule to hide tooltip\n _this5._scheduleHide(reference, options.delay, options, evt2);\n }\n };\n\n if (_this5._tooltipNode.contains(relatedreference)) {\n // listen to mouseleave on the tooltip element to be able to hide the tooltip\n _this5._tooltipNode.addEventListener(evt.type, callback);\n return true;\n }\n\n return false;\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = Tooltip;\n//# sourceMappingURL=tooltip.js.map\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__v_tooltip__ = __webpack_require__(0);\n/* harmony export (immutable) */ __webpack_exports__[\"install\"] = install;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VTooltip\", function() { return VTooltip; });\n\n\nfunction install(Vue, options) {\n if (install.installed) return;\n install.installed = true;\n\n options = Object.assign({}, __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"a\" /* defaultOptions */], options || {});\n __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */].options = options;\n Vue.directive('tooltip', __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */]);\n}\n\nvar VTooltip = __WEBPACK_IMPORTED_MODULE_0__v_tooltip__[\"b\" /* default */];\n\nvar plugin = {\n install: install\n};\n\n// Auto-install\nvar GlobalVue = null;\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = plugin;\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMjk4OWMwOWU5Nzc4NGIyNWYzMGMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3YtdG9vbHRpcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wb3BwZXIuanMvZGlzdC9lc20vcG9wcGVyLmpzIiwid2VicGFjazovLy8uL34vdG9vbHRpcC5qcy9kaXN0L2VzbS90b29sdGlwLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJwb3NpdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImRlZmF1bHRQbGFjZW1lbnQiLCJkZWZhdWx0Q2xhc3MiLCJkZWZhdWx0VGVtcGxhdGUiLCJkZWZhdWx0RGVsYXkiLCJkZWZhdWx0VHJpZ2dlciIsImRlZmF1bHRPZmZzZXQiLCJkZWZhdWx0Q29udGFpbmVyIiwiZ2V0T3B0aW9ucyIsIm9wdGlvbnMiLCJwbGFjZW1lbnQiLCJkaXJlY3RpdmUiLCJkZWxheSIsInRlbXBsYXRlIiwidHJpZ2dlciIsIm9mZnNldCIsImNvbnRhaW5lciIsImdldFBsYWNlbWVudCIsInZhbHVlIiwibW9kaWZpZXJzIiwicG9zIiwiU3VwZXJUb29sdGlwIiwiY2xhc3NlcyIsImVsIiwiX3Rvb2x0aXBOb2RlIiwib2xkQ2xhc3NlcyIsIl9vbGRDbGFzc2VzIiwicmVwbGFjZUNsYXNzZXMiLCJhZGRDbGFzc2VzIiwicmVtb3ZlQ2xhc3NlcyIsIl9wZW5kaW5nQ2xhc3NlcyIsIl9jbGFzc2VzIiwiY29udGVudCIsInRpdGxlIiwicXVlcnlTZWxlY3RvciIsImlubmVyU2VsZWN0b3IiLCJpbm5lckhUTUwiLCJwb3BwZXJJbnN0YW5jZSIsInVwZGF0ZSIsIm5lZWRQb3BwZXJVcGRhdGUiLCJuZWVkUmVzdGFydCIsImtleSIsImlzT3BlbiIsIl9pc09wZW4iLCJkaXNwb3NlIiwiZXZlbnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJpbmRleE9mIiwiX3NldEV2ZW50TGlzdGVuZXJzIiwicmVmZXJlbmNlIiwic2V0Q2xhc3NlcyIsInNob3ciLCJfZXZlbnRzIiwiZm9yRWFjaCIsImZ1bmMiLCJldmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhcmdzIiwic2V0VGltZW91dCIsImNyZWF0ZVRvb2x0aXAiLCJ0b29sdGlwIiwiX3Rvb2x0aXAiLCJodG1sIiwiZGVzdHJveVRvb2x0aXAiLCJiaW5kIiwib2xkVmFsdWUiLCJzZXRDb250ZW50Iiwic2V0T3B0aW9ucyIsInVuYmluZCIsImNvbnZlcnRUb0FycmF5IiwiY2xhc3NMaXN0IiwiYWRkIiwiYyIsInJlbW92ZSIsIm5ld0NsYXNzZXMiLCJuYXRpdmVIaW50cyIsImlzTmF0aXZlIiwiZm4iLCJzb21lIiwiaGludCIsInRvU3RyaW5nIiwiaXNCcm93c2VyIiwid2luZG93IiwibG9uZ2VyVGltZW91dEJyb3dzZXJzIiwidGltZW91dER1cmF0aW9uIiwiaSIsImxlbmd0aCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIm1pY3JvdGFza0RlYm91bmNlIiwic2NoZWR1bGVkIiwiZWxlbSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJhdHRyaWJ1dGVzIiwic2V0QXR0cmlidXRlIiwidGFza0RlYm91bmNlIiwic3VwcG9ydHNOYXRpdmVNdXRhdGlvbk9ic2VydmVyIiwiZGVib3VuY2UiLCJpc051bWVyaWMiLCJuIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwiaXNGaW5pdGUiLCJzZXRTdHlsZXMiLCJlbGVtZW50Iiwic3R5bGVzIiwiT2JqZWN0Iiwia2V5cyIsInByb3AiLCJ1bml0Iiwic3R5bGUiLCJpc0Z1bmN0aW9uIiwiZnVuY3Rpb25Ub0NoZWNrIiwiZ2V0VHlwZSIsImNhbGwiLCJnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkiLCJwcm9wZXJ0eSIsIm5vZGVUeXBlIiwiY3NzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFBhcmVudE5vZGUiLCJub2RlTmFtZSIsInBhcmVudE5vZGUiLCJob3N0IiwiZ2V0U2Nyb2xsUGFyZW50IiwiYm9keSIsIl9nZXRTdHlsZUNvbXB1dGVkUHJvcCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwidGVzdCIsImlzT2Zmc2V0Q29udGFpbmVyIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJvZmZzZXRQYXJlbnQiLCJnZXRSb290Iiwibm9kZSIsImdldE9mZnNldFBhcmVudCIsImRvY3VtZW50RWxlbWVudCIsImZpbmRDb21tb25PZmZzZXRQYXJlbnQiLCJlbGVtZW50MSIsImVsZW1lbnQyIiwib3JkZXIiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsIk5vZGUiLCJET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkciLCJzdGFydCIsImVuZCIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIiwiY29udGFpbnMiLCJlbGVtZW50MXJvb3QiLCJnZXRTY3JvbGwiLCJzaWRlIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwidXBwZXJTaWRlIiwic2Nyb2xsaW5nRWxlbWVudCIsImluY2x1ZGVTY3JvbGwiLCJyZWN0Iiwic3VidHJhY3QiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwibW9kaWZpZXIiLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJnZXRCb3JkZXJzU2l6ZSIsImF4aXMiLCJzaWRlQSIsInNpZGVCIiwiZ2V0V2luZG93U2l6ZXMiLCJoZWlnaHQiLCJNYXRoIiwibWF4Iiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwid2lkdGgiLCJzY3JvbGxXaWR0aCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJjbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJkZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9leHRlbmRzIiwiYXNzaWduIiwidGFyZ2V0Iiwic291cmNlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJnZXRDbGllbnRSZWN0Iiwib2Zmc2V0cyIsImlzSUUxMCIsImlzSUUxMCQxIiwiYXBwVmVyc2lvbiIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImVyciIsInJlc3VsdCIsInNpemVzIiwiaG9yaXpTY3JvbGxiYXIiLCJ2ZXJ0U2Nyb2xsYmFyIiwiZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlIiwiY2hpbGRyZW4iLCJwYXJlbnQiLCJpc0hUTUwiLCJjaGlsZHJlblJlY3QiLCJwYXJlbnRSZWN0Iiwic2Nyb2xsUGFyZW50IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlIiwicmVsYXRpdmVPZmZzZXQiLCJpbm5lcldpZHRoIiwiaW5uZXJIZWlnaHQiLCJpc0ZpeGVkIiwiZ2V0Qm91bmRhcmllcyIsInBvcHBlciIsInBhZGRpbmciLCJib3VuZGFyaWVzRWxlbWVudCIsImJvdW5kYXJpZXMiLCJib3VuZGFyaWVzTm9kZSIsIl9nZXRXaW5kb3dTaXplcyIsImNvbXB1dGVBdXRvUGxhY2VtZW50IiwicmVmUmVjdCIsInNpZGVzIiwiY29tcHV0ZWRQbGFjZW1lbnQiLCJzb3J0IiwiYSIsImIiLCJ2YXJpYXRpb24iLCJnZXRSZWZlcmVuY2VPZmZzZXRzIiwic3RhdGUiLCJjb21tb25PZmZzZXRQYXJlbnQiLCJnZXRPdXRlclNpemVzIiwieCIsIm1hcmdpbkJvdHRvbSIsInkiLCJtYXJnaW5SaWdodCIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiaGFzaCIsInJlcGxhY2UiLCJtYXRjaGVkIiwiZ2V0UG9wcGVyT2Zmc2V0cyIsInJlZmVyZW5jZU9mZnNldHMiLCJwb3BwZXJSZWN0IiwicG9wcGVyT2Zmc2V0cyIsImlzSG9yaXoiLCJtYWluU2lkZSIsInNlY29uZGFyeVNpZGUiLCJtZWFzdXJlbWVudCIsInNlY29uZGFyeU1lYXN1cmVtZW50IiwiZmluZCIsImFyciIsImNoZWNrIiwiQXJyYXkiLCJmaW5kSW5kZXgiLCJjdXIiLCJtYXRjaCIsInJ1bk1vZGlmaWVycyIsImRhdGEiLCJlbmRzIiwibW9kaWZpZXJzVG9SdW4iLCJzbGljZSIsImZ1bmN0aW9uIiwiY29uc29sZSIsIndhcm4iLCJlbmFibGVkIiwiaXNEZXN0cm95ZWQiLCJmbGlwcGVkIiwiZmxpcCIsIm9yaWdpbmFsUGxhY2VtZW50IiwicG9zaXRpb24iLCJpc0NyZWF0ZWQiLCJvbkNyZWF0ZSIsIm9uVXBkYXRlIiwiaXNNb2RpZmllckVuYWJsZWQiLCJtb2RpZmllck5hbWUiLCJfcmVmIiwibmFtZSIsImdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSIsInByZWZpeGVzIiwidXBwZXJQcm9wIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJwcmVmaXgiLCJ0b0NoZWNrIiwiZGVzdHJveSIsInJlbW92ZUF0dHJpYnV0ZSIsImRpc2FibGVFdmVudExpc3RlbmVycyIsInJlbW92ZU9uRGVzdHJveSIsInJlbW92ZUNoaWxkIiwiYXR0YWNoVG9TY3JvbGxQYXJlbnRzIiwiY2FsbGJhY2siLCJzY3JvbGxQYXJlbnRzIiwiaXNCb2R5IiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJwdXNoIiwic2V0dXBFdmVudExpc3RlbmVycyIsInVwZGF0ZUJvdW5kIiwic2Nyb2xsRWxlbWVudCIsImV2ZW50c0VuYWJsZWQiLCJlbmFibGVFdmVudExpc3RlbmVycyIsInNjaGVkdWxlVXBkYXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInNldEF0dHJpYnV0ZXMiLCJhcHBseVN0eWxlIiwicm91bmQiLCJwcmVmaXhlZFByb3BlcnR5IiwiZ3B1QWNjZWxlcmF0aW9uIiwid2lsbENoYW5nZSIsImFycm93IiwiYXJyb3dFbGVtZW50IiwiYXBwbHlTdHlsZU9uTG9hZCIsIm1vZGlmaWVyT3B0aW9ucyIsImlzTW9kaWZpZXJSZXF1aXJlZCIsInJlcXVlc3RpbmdOYW1lIiwicmVxdWVzdGVkTmFtZSIsInJlcXVlc3RpbmciLCJpc1JlcXVpcmVkIiwiX3JlcXVlc3RpbmciLCJyZXF1ZXN0ZWQiLCJpc1ZlcnRpY2FsIiwibGVuIiwiYWx0U2lkZSIsIm9wU2lkZSIsImFycm93RWxlbWVudFNpemUiLCJjZW50ZXIiLCJzaWRlVmFsdWUiLCJtaW4iLCJnZXRPcHBvc2l0ZVZhcmlhdGlvbiIsInBsYWNlbWVudHMiLCJ2YWxpZFBsYWNlbWVudHMiLCJjbG9ja3dpc2UiLCJjb3VudGVyIiwiaW5kZXgiLCJjb25jYXQiLCJyZXZlcnNlIiwiQkVIQVZJT1JTIiwiRkxJUCIsIkNMT0NLV0lTRSIsIkNPVU5URVJDTE9DS1dJU0UiLCJwbGFjZW1lbnRPcHBvc2l0ZSIsImZsaXBPcmRlciIsImJlaGF2aW9yIiwic3RlcCIsInJlZk9mZnNldHMiLCJmbG9vciIsIm92ZXJsYXBzUmVmIiwib3ZlcmZsb3dzTGVmdCIsIm92ZXJmbG93c1JpZ2h0Iiwib3ZlcmZsb3dzVG9wIiwib3ZlcmZsb3dzQm90dG9tIiwib3ZlcmZsb3dzQm91bmRhcmllcyIsImZsaXBwZWRWYXJpYXRpb24iLCJmbGlwVmFyaWF0aW9ucyIsImtlZXBUb2dldGhlciIsInRvVmFsdWUiLCJzdHIiLCJzaXplIiwicGFyc2VPZmZzZXQiLCJiYXNlUGxhY2VtZW50IiwidXNlSGVpZ2h0IiwiZnJhZ21lbnRzIiwibWFwIiwiZnJhZyIsInRyaW0iLCJkaXZpZGVyIiwic2VhcmNoIiwic3BsaXRSZWdleCIsIm9wcyIsIm9wIiwibWVyZ2VXaXRoUHJldmlvdXMiLCJyZWR1Y2UiLCJpbmRleDIiLCJfZGF0YSRvZmZzZXRzIiwicHJldmVudE92ZXJmbG93IiwicHJpb3JpdHkiLCJwcmltYXJ5IiwiZXNjYXBlV2l0aFJlZmVyZW5jZSIsInNlY29uZGFyeSIsInNoaWZ0Iiwic2hpZnR2YXJpYXRpb24iLCJzaGlmdE9mZnNldHMiLCJoaWRlIiwiYm91bmQiLCJpbm5lciIsInN1YnRyYWN0TGVuZ3RoIiwib25Mb2FkIiwiREVGQVVMVFMiLCJQb3BwZXIiLCJfdGhpcyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIkRlZmF1bHRzIiwianF1ZXJ5IiwiZGVmYXVsdENvbmZpZyIsInVzZXJDb25maWciLCJVdGlscyIsImdsb2JhbCIsIlBvcHBlclV0aWxzIiwiY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiREVGQVVMVF9PUFRJT05TIiwiVG9vbHRpcCIsIl9pbml0aWFsaXNlUHJvcHMiLCJfY3JlYXRlIiwiYWxsb3dIdG1sIiwidG9vbHRpcEdlbmVyYXRvciIsInRvb2x0aXBOb2RlIiwiY2hpbGROb2RlcyIsImlkIiwicmFuZG9tIiwic3Vic3RyIiwidGl0bGVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJ0aXRsZVRleHQiLCJpbm5lclRleHQiLCJfc2hvdyIsImRpc3BsYXkiLCJnZXRBdHRyaWJ1dGUiLCJfZmluZENvbnRhaW5lciIsIl9hcHBlbmQiLCJwb3BwZXJPcHRpb25zIiwiYXJyb3dTZWxlY3RvciIsIl9oaWRlIiwiX2Rpc3Bvc2UiLCJfdGhpczIiLCJkaXJlY3RFdmVudHMiLCJvcHBvc2l0ZUV2ZW50cyIsImV2dCIsInVzZWRCeVRvb2x0aXAiLCJfc2NoZWR1bGVTaG93IiwiX3NjaGVkdWxlSGlkZSIsIl90aGlzMyIsImNvbXB1dGVkRGVsYXkiLCJfdGhpczQiLCJ0eXBlIiwiaXNTZXQiLCJfc2V0VG9vbHRpcE5vZGVFdmVudCIsIl90aGlzNSIsInRvZ2dsZSIsInJlbGF0ZWRyZWZlcmVuY2UiLCJ0b0VsZW1lbnQiLCJldnQyIiwicmVsYXRlZHJlZmVyZW5jZTIiLCJpbnN0YWxsIiwiVnVlIiwiaW5zdGFsbGVkIiwidnRvb2x0aXAiLCJWVG9vbHRpcCIsInBsdWdpbiIsIkdsb2JhbFZ1ZSIs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QWQsRUFBeUIsMkRBQXpCO0FBQ0Q7O0FBRU0sSUFBTTRjLFdBQVcsMkRBQWpCOztBQUVQLElBQU1DLFNBQVM7QUFDYkw7QUFEYSxDQUFmOztBQUlBO0FBQ0EsSUFBSU0sWUFBWSxJQUFoQjtBQUNBLElBQUksT0FBT3RZLE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDakNzWSxjQUFZdFksT0FBT2lZLEdBQW5CO0FBQ0QsQ0FGRCxNQUVPLElBQUksT0FBT3BELE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDeEN5RCxjQUFZekQsT0FBT29ELEdBQW5CO0FBQ0Q7QUFDRCxJQUFJSyxTQUFKLEVBQWU7QUFDYkEsWUFBVUMsR0FBVixDQUFjRixNQUFkO0FBQ0Q7O0FBRUQsOERBQWVBLE1BQWYsQyIsImZpbGUiOiJ2LXRvb2x0aXAuY29tbW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMjk4OWMwOWU5Nzc4NGIyNWYzMGMiLCJpbXBvcnQgVG9vbHRpcCBmcm9tICd0b29sdGlwLmpzJ1xyXG5cclxuaW1wb3J0IHsgYWRkQ2xhc3NlcywgcmVtb3ZlQ2xhc3NlcywgcmVwbGFjZUNsYXNzZXMgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuY29uc3QgcG9zaXRpb25zID0gW1xyXG4gICd0b3AnLFxyXG4gICd0b3Atc3RhcnQnLFxyXG4gICd0b3AtZW5kJyxcclxuICAncmlnaHQnLFxyXG4gICdyaWdodC1zdGFydCcsXHJcbiAgJ3JpZ2h0LWVuZCcsXHJcbiAgJ2JvdHRvbScsXHJcbiAgJ2JvdHRvbS1zdGFydCcsXHJcbiAgJ2JvdHRvbS1lbmQnLFxyXG4gICdsZWZ0JyxcclxuICAnbGVmdC1zdGFydCcsXHJcbiAgJ2xlZnQtZW5kJyxcclxuXVxyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xyXG4gIGRlZmF1bHRQbGFjZW1lbnQ6ICd0b3AnLFxyXG4gIGRlZmF1bHRDbGFzczogJ3Z1ZS10b29sdGlwLXRoZW1lJyxcclxuICBkZWZhdWx0VGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj48ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PjwvZGl2PicsXHJcbiAgZGVmYXVsdERlbGF5OiAwLFxyXG4gIGRlZmF1bHRUcmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxyXG4gIGRlZmF1bHRPZmZzZXQ6IDAsXHJcbiAgZGVmYXVsdENvbnRhaW5lcjogJ2JvZHknLFxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPcHRpb25zIChvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHBsYWNlbWVudDogb3B0aW9ucy5wbGFjZW1lbnQgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdFBsYWNlbWVudCxcclxuICAgIGRlbGF5OiBvcHRpb25zLmRlbGF5IHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHREZWxheSxcclxuICAgIHRlbXBsYXRlOiBvcHRpb25zLnRlbXBsYXRlIHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHRUZW1wbGF0ZSxcclxuICAgIHRyaWdnZXI6IG9wdGlvbnMudHJpZ2dlciB8fCBkaXJlY3RpdmUub3B0aW9ucy5kZWZhdWx0VHJpZ2dlcixcclxuICAgIG9mZnNldDogb3B0aW9ucy5vZmZzZXQgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdE9mZnNldCxcclxuICAgIGNvbnRhaW5lcjogb3B0aW9ucy5jb250YWluZXIgfHwgZGlyZWN0aXZlLm9wdGlvbnMuZGVmYXVsdENvbnRhaW5lcixcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBsYWNlbWVudCAodmFsdWUsIG1vZGlmaWVycykge1xyXG4gIGxldCBwbGFjZW1lbnQgPSB2YWx1ZS5wbGFjZW1lbnRcclxuICBmb3IgKGNvbnN0IHBvcyBvZiBwb3NpdGlvbnMpIHtcclxuICAgIGlmIChtb2RpZmllcnNbcG9zXSkge1xyXG4gICAgICBwbGFjZW1lbnQgPSBwb3NcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHBsYWNlbWVudFxyXG59XHJcblxyXG5jbGFzcyBTdXBlclRvb2x0aXAgZXh0ZW5kcyBUb29sdGlwIHtcclxuICBzZXRDbGFzc2VzIChjbGFzc2VzKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX3Rvb2x0aXBOb2RlXHJcblxyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIGNvbnN0IG9sZENsYXNzZXMgPSB0aGlzLl9vbGRDbGFzc2VzXHJcbiAgICAgIGlmIChjbGFzc2VzKSB7XHJcbiAgICAgICAgaWYgKG9sZENsYXNzZXMpIHtcclxuICAgICAgICAgIHJlcGxhY2VDbGFzc2VzKGVsLCBjbGFzc2VzLCBvbGRDbGFzc2VzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhZGRDbGFzc2VzKGVsLCBjbGFzc2VzKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChvbGRDbGFzc2VzKSB7XHJcbiAgICAgICAgcmVtb3ZlQ2xhc3NlcyhlbCwgb2xkQ2xhc3NlcylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9vbGRDbGFzc2VzID0gY2xhc3Nlc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcGVuZGluZ0NsYXNzZXMgPSBjbGFzc2VzXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2xhc3NlcyA9IGNsYXNzZXNcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQgKGNvbnRlbnQpIHtcclxuICAgIHRoaXMub3B0aW9ucy50aXRsZSA9IGNvbnRlbnRcclxuICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuX3Rvb2x0aXBOb2RlLnF1ZXJ5U2VsZWN0b3IodGhpcy5pbm5lclNlbGVjdG9yKVxyXG5cclxuICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XHJcbiAgICAgICAgICBlbC5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbC5pbm5lckhUTUwgPSBjb250ZW50XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcHBlckluc3RhbmNlLnVwZGF0ZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9wdGlvbnMgKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpXHJcblxyXG4gICAgbGV0IG5lZWRQb3BwZXJVcGRhdGUgPSBmYWxzZVxyXG4gICAgbGV0IG5lZWRSZXN0YXJ0ID0gZmFsc2VcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5vZmZzZXQgIT09IG9wdGlvbnMub2Zmc2V0IHx8XHJcbiAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQgIT09IG9wdGlvbnMucGxhY2VtZW50XHJcbiAgICApIHtcclxuICAgICAgbmVlZFBvcHBlclVwZGF0ZSA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3B0aW9ucy50ZW1wbGF0ZSAhPT0gb3B0aW9ucy50ZW1wbGF0ZSB8fFxyXG4gICAgICB0aGlzLm9wdGlvbnMudHJpZ2dlciAhPT0gb3B0aW9ucy50cmlnZ2VyIHx8XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IG9wdGlvbnMuY29udGFpbmVyXHJcbiAgICApIHtcclxuICAgICAgbmVlZFJlc3RhcnQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xyXG4gICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xyXG4gICAgICBpZiAobmVlZFJlc3RhcnQpIHtcclxuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLl9pc09wZW5cclxuXHJcbiAgICAgICAgdGhpcy5kaXNwb3NlKClcclxuXHJcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdHlwZW9mIHRoaXMub3B0aW9ucy50cmlnZ2VyID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyBvcHRpb25zLnRyaWdnZXJcclxuICAgICAgICAgICAgLnNwbGl0KCcgJylcclxuICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICB0cmlnZ2VyID0+IFsnY2xpY2snLCAnaG92ZXInLCAnZm9jdXMnXS5pbmRleE9mKHRyaWdnZXIpICE9PSAtMVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICA6IFtdXHJcbiAgICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIGV2ZW50cywgdGhpcy5vcHRpb25zKVxyXG5cclxuICAgICAgICB0aGlzLnNldENsYXNzZXModGhpcy5fY2xhc3NlcylcclxuXHJcbiAgICAgICAgaWYgKGlzT3Blbikge1xyXG4gICAgICAgICAgdGhpcy5zaG93KClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAobmVlZFBvcHBlclVwZGF0ZSkge1xyXG4gICAgICAgIHRoaXMucG9wcGVySW5zdGFuY2UudXBkYXRlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2Rpc3Bvc2UgKCkge1xyXG4gICAgdGhpcy5fZXZlbnRzLmZvckVhY2goKHsgZnVuYywgZXZlbnQgfSkgPT4ge1xyXG4gICAgICB0aGlzLnJlZmVyZW5jZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKVxyXG4gICAgfSlcclxuICAgIHRoaXMuX2V2ZW50cyA9IFtdXHJcbiAgICBzdXBlci5fZGlzcG9zZSgpXHJcbiAgfVxyXG5cclxuICBfc2hvdyAoLi4uYXJncykge1xyXG4gICAgc3VwZXIuX3Nob3coLi4uYXJncylcclxuXHJcbiAgICBpZiAodGhpcy5fcGVuZGluZ0NsYXNzZXMpIHtcclxuICAgICAgdGhpcy5zZXRDbGFzc2VzKHRoaXMuX3BlbmRpbmdDbGFzc2VzKVxyXG4gICAgICB0aGlzLl9wZW5kaW5nQ2xhc3NlcyA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaXggcG9zaXRpb25cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvcHBlckluc3RhbmNlLnVwZGF0ZSgpXHJcbiAgICB9LCAwKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVG9vbHRpcCAoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcclxuICBjb25zdCBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZVxyXG4gIGxldCBjbGFzc2VzID0gdmFsdWUuY2xhc3NlcyB8fCBkaXJlY3RpdmUub3B0aW9ucy5kZWZhdWx0Q2xhc3NcclxuXHJcbiAgY29uc3QgdG9vbHRpcCA9IGVsLl90b29sdGlwID0gbmV3IFN1cGVyVG9vbHRpcChlbCwge1xyXG4gICAgdGl0bGU6IGNvbnRlbnQsXHJcbiAgICBodG1sOiB0cnVlLFxyXG4gICAgLi4uZ2V0T3B0aW9ucyh7XHJcbiAgICAgIC4uLnZhbHVlLFxyXG4gICAgICBwbGFjZW1lbnQ6IGdldFBsYWNlbWVudCh2YWx1ZSwgbW9kaWZpZXJzKSxcclxuICAgIH0pLFxyXG4gIH0pXHJcbiAgdG9vbHRpcC5zZXRDbGFzc2VzKGNsYXNzZXMpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlc3Ryb3lUb29sdGlwIChlbCkge1xyXG4gIGlmIChlbC5fdG9vbHRpcCkge1xyXG4gICAgZWwuX3Rvb2x0aXAuZGlzcG9zZSgpXHJcbiAgICBkZWxldGUgZWwuX3Rvb2x0aXBcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGRpcmVjdGl2ZSA9IHtcclxuICBvcHRpb25zOiBkZWZhdWx0T3B0aW9ucyxcclxuICBiaW5kIChlbCwgeyB2YWx1ZSwgbW9kaWZpZXJzIH0pIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZSAmJiB2YWx1ZS5jb250ZW50IHx8IHZhbHVlXHJcbiAgICBkZXN0cm95VG9vbHRpcChlbClcclxuICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgIGNyZWF0ZVRvb2x0aXAoZWwsIHZhbHVlLCBtb2RpZmllcnMpXHJcbiAgICB9XHJcbiAgfSxcclxuICB1cGRhdGUgKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSwgbW9kaWZpZXJzIH0pIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZSAmJiB2YWx1ZS5jb250ZW50IHx8IHZhbHVlXHJcbiAgICBpZiAoIWNvbnRlbnQpIHtcclxuICAgICAgZGVzdHJveVRvb2x0aXAoZWwpXHJcbiAgICB9IGVsc2UgaWYgKGVsLl90b29sdGlwKSB7XHJcbiAgICAgIGNvbnN0IHRvb2x0aXAgPSBlbC5fdG9vbHRpcFxyXG4gICAgICAvLyBDb250ZW50XHJcbiAgICAgIHRvb2x0aXAuc2V0Q29udGVudChjb250ZW50KVxyXG4gICAgICAvLyBDU1MgQ2xhc3Nlc1xyXG4gICAgICB0b29sdGlwLnNldENsYXNzZXMoKHZhbHVlICYmIHZhbHVlLmNsYXNzZXMpIHx8IGRpcmVjdGl2ZS5vcHRpb25zLmRlZmF1bHRDbGFzcylcclxuICAgICAgLy8gT3B0aW9uc1xyXG4gICAgICB0b29sdGlwLnNldE9wdGlvbnMoe1xyXG4gICAgICAgIC4uLnZhbHVlLFxyXG4gICAgICAgIHBsYWNlbWVudDogZ2V0UGxhY2VtZW50KHZhbHVlLCBtb2RpZmllcnMpLFxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3JlYXRlVG9vbHRpcChlbCwgdmFsdWUsIG1vZGlmaWVycylcclxuICAgIH1cclxuICB9LFxyXG4gIHVuYmluZCAoZWwpIHtcclxuICAgIGRlc3Ryb3lUb29sdGlwKGVsKVxyXG4gIH0sXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRpcmVjdGl2ZVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdi10b29sdGlwLmpzIiwiXG5mdW5jdGlvbiBjb252ZXJ0VG9BcnJheSAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKVxyXG4gIH1cclxuICByZXR1cm4gdmFsdWVcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZENsYXNzZXMgKGVsLCBjbGFzc2VzKSB7XHJcbiAgY2xhc3NlcyA9IGNvbnZlcnRUb0FycmF5KGNsYXNzZXMpXHJcbiAgY2xhc3Nlcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgZWwuY2xhc3NMaXN0LmFkZChjKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDbGFzc2VzIChlbCwgY2xhc3Nlcykge1xyXG4gIGNsYXNzZXMgPSBjb252ZXJ0VG9BcnJheShjbGFzc2VzKVxyXG4gIGNsYXNzZXMuZm9yRWFjaChjID0+IHtcclxuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoYylcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNsYXNzZXMgKGVsLCBuZXdDbGFzc2VzLCBvbGRDbGFzc2VzKSB7XHJcbiAgcmVtb3ZlQ2xhc3NlcyhlbCwgb2xkQ2xhc3NlcylcclxuICBhZGRDbGFzc2VzKGVsLCBuZXdDbGFzc2VzKVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy5qcyIsInZhciBuYXRpdmVIaW50cyA9IFsnbmF0aXZlIGNvZGUnLCAnW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdJ107XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgbmF0aXZlbHkgKGFzIG9wcG9zZWQgdG8gYSBwb2x5ZmlsbCkuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0Z1bmN0aW9uIHwgdW5kZWZpbmVkfSBmbiB0aGUgZnVuY3Rpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG52YXIgaXNOYXRpdmUgPSAoZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBuYXRpdmVIaW50cy5zb21lKGZ1bmN0aW9uIChoaW50KSB7XG4gICAgcmV0dXJuIChmbiB8fCAnJykudG9TdHJpbmcoKS5pbmRleE9mKGhpbnQpID4gLTE7XG4gIH0pO1xufSk7XG5cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBsb25nZXJUaW1lb3V0QnJvd3NlcnMgPSBbJ0VkZ2UnLCAnVHJpZGVudCcsICdGaXJlZm94J107XG52YXIgdGltZW91dER1cmF0aW9uID0gMDtcbmZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2VyVGltZW91dEJyb3dzZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gIGlmIChpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKGxvbmdlclRpbWVvdXRCcm93c2Vyc1tpXSkgPj0gMCkge1xuICAgIHRpbWVvdXREdXJhdGlvbiA9IDE7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWljcm90YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICB2YXIgaSA9IDA7XG4gIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gIC8vIE11dGF0aW9uT2JzZXJ2ZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHNjaGVkdWxpbmcgbWljcm90YXNrcywgd2hpY2hcbiAgLy8gYXJlIHNjaGVkdWxlZCAqYmVmb3JlKiB0aGUgbmV4dCB0YXNrLiBUaGlzIGdpdmVzIHVzIGEgd2F5IHRvIGRlYm91bmNlXG4gIC8vIGEgZnVuY3Rpb24gYnV0IGVuc3VyZSBpdCdzIGNhbGxlZCAqYmVmb3JlKiB0aGUgbmV4dCBwYWludC5cbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgIGZuKCk7XG4gICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gIH0pO1xuXG4gIG9ic2VydmVyLm9ic2VydmUoZWxlbSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzY2hlZHVsZWQpIHtcbiAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICBlbGVtLnNldEF0dHJpYnV0ZSgneC1pbmRleCcsIGkpO1xuICAgICAgaSA9IGkgKyAxOyAvLyBkb24ndCB1c2UgY29tcHVuZCAoKz0pIGJlY2F1c2UgaXQgZG9lc24ndCBnZXQgb3B0aW1pemVkIGluIFY4XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc2NoZWR1bGVkKSB7XG4gICAgICBzY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmbigpO1xuICAgICAgfSwgdGltZW91dER1cmF0aW9uKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIEl0J3MgY29tbW9uIGZvciBNdXRhdGlvbk9ic2VydmVyIHBvbHlmaWxscyB0byBiZSBzZWVuIGluIHRoZSB3aWxkLCBob3dldmVyXG4vLyB0aGVzZSByZWx5IG9uIE11dGF0aW9uIEV2ZW50cyB3aGljaCBvbmx5IG9jY3VyIHdoZW4gYW4gZWxlbWVudCBpcyBjb25uZWN0ZWRcbi8vIHRvIHRoZSBET00uIFRoZSBhbGdvcml0aG0gdXNlZCBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCB1c2UgYSBjb25uZWN0ZWQgZWxlbWVudCxcbi8vIGFuZCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IGEgKm5hdGl2ZSogTXV0YXRpb25PYnNlcnZlciBpcyBhdmFpbGFibGUuXG52YXIgc3VwcG9ydHNOYXRpdmVNdXRhdGlvbk9ic2VydmVyID0gaXNCcm93c2VyICYmIGlzTmF0aXZlKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKTtcblxuLyoqXG4qIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGEgbWV0aG9kLCB0aGF0J3MgYXN5bmNocm9ub3VzbHkgZGVmZXJyZWRcbiogYnV0IGNhbGxlZCBpbiB0aGUgbWluaW11bSB0aW1lIHBvc3NpYmxlLlxuKlxuKiBAbWV0aG9kXG4qIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiogQGFyZ3VtZW50IHtGdW5jdGlvbn0gZm5cbiogQHJldHVybnMge0Z1bmN0aW9ufVxuKi9cbnZhciBkZWJvdW5jZSA9IHN1cHBvcnRzTmF0aXZlTXV0YXRpb25PYnNlcnZlciA/IG1pY3JvdGFza0RlYm91bmNlIDogdGFza0RlYm91bmNlO1xuXG4vKipcbiAqIFRlbGxzIGlmIGEgZ2l2ZW4gaW5wdXQgaXMgYSBudW1iZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7Kn0gaW5wdXQgdG8gY2hlY2tcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTnVtZXJpYyhuKSB7XG4gIHJldHVybiBuICE9PSAnJyAmJiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG59XG5cbi8qKlxuICogU2V0IHRoZSBzdHlsZSB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBzdHlsZSB0b1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHN0eWxlc1xuICogT2JqZWN0IHdpdGggYSBsaXN0IG9mIHByb3BlcnRpZXMgYW5kIHZhbHVlcyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gc2V0U3R5bGVzKGVsZW1lbnQsIHN0eWxlcykge1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICB2YXIgdW5pdCA9ICcnO1xuICAgIC8vIGFkZCB1bml0IGlmIHRoZSB2YWx1ZSBpcyBudW1lcmljIGFuZCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICAgIGlmIChbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5pbmRleE9mKHByb3ApICE9PSAtMSAmJiBpc051bWVyaWMoc3R5bGVzW3Byb3BdKSkge1xuICAgICAgdW5pdCA9ICdweCc7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBzdHlsZXNbcHJvcF0gKyB1bml0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBbnl9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICB2YXIgZ2V0VHlwZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIEdldCBDU1MgY29tcHV0ZWQgcHJvcGVydHkgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBjc3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgcmV0dXJuIHByb3BlcnR5ID8gY3NzW3Byb3BlcnR5XSA6IGNzcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnROb2RlIG9yIHRoZSBob3N0IG9mIHRoZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlIHx8IGVsZW1lbnQuaG9zdDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzY3JvbGxpbmcgcGFyZW50IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBzY3JvbGwgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFJldHVybiBib2R5LCBgZ2V0U2Nyb2xsYCB3aWxsIHRha2UgY2FyZSB0byBnZXQgdGhlIGNvcnJlY3QgYHNjcm9sbFRvcGAgZnJvbSBpdFxuICBpZiAoIWVsZW1lbnQgfHwgWydIVE1MJywgJ0JPRFknLCAnI2RvY3VtZW50J10uaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gd2luZG93LmRvY3VtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbCkvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xufVxuXG5mdW5jdGlvbiBpc09mZnNldENvbnRhaW5lcihlbGVtZW50KSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnSFRNTCcgfHwgZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQ7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHJvb3Qgbm9kZSAoZG9jdW1lbnQsIHNoYWRvd0RPTSByb290KSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJucyB7RWxlbWVudH0gcm9vdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGdldFJvb3Qobm9kZSkge1xuICBpZiAobm9kZS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGdldFJvb3Qobm9kZS5wYXJlbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQgJiYgZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG4gIHZhciBub2RlTmFtZSA9IG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQubm9kZU5hbWU7XG5cbiAgaWYgKCFub2RlTmFtZSB8fCBub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQ7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gSGVyZSB3ZSBtYWtlIHN1cmUgdG8gZ2l2ZSBhcyBcInN0YXJ0XCIgdGhlIGVsZW1lbnQgdGhhdCBjb21lcyBmaXJzdCBpbiB0aGUgRE9NXG4gIHZhciBvcmRlciA9IGVsZW1lbnQxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGVsZW1lbnQyKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO1xuICB2YXIgc3RhcnQgPSBvcmRlciA/IGVsZW1lbnQxIDogZWxlbWVudDI7XG4gIHZhciBlbmQgPSBvcmRlciA/IGVsZW1lbnQyIDogZWxlbWVudDE7XG5cbiAgLy8gR2V0IGNvbW1vbiBhbmNlc3RvciBjb250YWluZXJcbiAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQsIDApO1xuICByYW5nZS5zZXRFbmQoZW5kLCAwKTtcbiAgdmFyIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG5cbiAgLy8gQm90aCBub2RlcyBhcmUgaW5zaWRlICNkb2N1bWVudFxuXG4gIGlmIChlbGVtZW50MSAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgJiYgZWxlbWVudDIgIT09IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIHx8IHN0YXJ0LmNvbnRhaW5zKGVuZCkpIHtcbiAgICBpZiAoaXNPZmZzZXRDb250YWluZXIoY29tbW9uQW5jZXN0b3JDb250YWluZXIpKSB7XG4gICAgICByZXR1cm4gY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChjb21tb25BbmNlc3RvckNvbnRhaW5lcik7XG4gIH1cblxuICAvLyBvbmUgb2YgdGhlIG5vZGVzIGlzIGluc2lkZSBzaGFkb3dET00sIGZpbmQgd2hpY2ggb25lXG4gIHZhciBlbGVtZW50MXJvb3QgPSBnZXRSb290KGVsZW1lbnQxKTtcbiAgaWYgKGVsZW1lbnQxcm9vdC5ob3N0KSB7XG4gICAgcmV0dXJuIGZpbmRDb21tb25PZmZzZXRQYXJlbnQoZWxlbWVudDFyb290Lmhvc3QsIGVsZW1lbnQyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MSwgZ2V0Um9vdChlbGVtZW50MikuaG9zdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzY3JvbGwgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQgaW4gdGhlIGdpdmVuIHNpZGUgKHRvcCBhbmQgbGVmdClcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHNpZGUgYHRvcGAgb3IgYGxlZnRgXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbW91bnQgb2Ygc2Nyb2xsZWQgcGl4ZWxzXG4gKi9cbmZ1bmN0aW9uIGdldFNjcm9sbChlbGVtZW50KSB7XG4gIHZhciBzaWRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAndG9wJztcblxuICB2YXIgdXBwZXJTaWRlID0gc2lkZSA9PT0gJ3RvcCcgPyAnc2Nyb2xsVG9wJyA6ICdzY3JvbGxMZWZ0JztcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgdmFyIGh0bWwgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHZhciBzY3JvbGxpbmdFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgaHRtbDtcbiAgICByZXR1cm4gc2Nyb2xsaW5nRWxlbWVudFt1cHBlclNpZGVdO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRbdXBwZXJTaWRlXTtcbn1cblxuLypcbiAqIFN1bSBvciBzdWJ0cmFjdCB0aGUgZWxlbWVudCBzY3JvbGwgdmFsdWVzIChsZWZ0IGFuZCB0b3ApIGZyb20gYSBnaXZlbiByZWN0IG9iamVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHJlY3QgLSBSZWN0IG9iamVjdCB5b3Ugd2FudCB0byBjaGFuZ2VcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCBmcm9tIHRoZSBmdW5jdGlvbiByZWFkcyB0aGUgc2Nyb2xsIHZhbHVlc1xuICogQHBhcmFtIHtCb29sZWFufSBzdWJ0cmFjdCAtIHNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHN1YnRyYWN0IHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlY3QgLSBUaGUgbW9kaWZpZXIgcmVjdCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaW5jbHVkZVNjcm9sbChyZWN0LCBlbGVtZW50KSB7XG4gIHZhciBzdWJ0cmFjdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gIHZhciBtb2RpZmllciA9IHN1YnRyYWN0ID8gLTEgOiAxO1xuICByZWN0LnRvcCArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5ib3R0b20gKz0gc2Nyb2xsVG9wICogbW9kaWZpZXI7XG4gIHJlY3QubGVmdCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdCAqIG1vZGlmaWVyO1xuICByZXR1cm4gcmVjdDtcbn1cblxuLypcbiAqIEhlbHBlciB0byBkZXRlY3QgYm9yZGVycyBvZiBhIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXG4gKiBSZXN1bHQgb2YgYGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eWAgb24gdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBheGlzIC0gYHhgIG9yIGB5YFxuICogQHJldHVybiB7bnVtYmVyfSBib3JkZXJzIC0gVGhlIGJvcmRlcnMgc2l6ZSBvZiB0aGUgZ2l2ZW4gYXhpc1xuICovXG5cbmZ1bmN0aW9uIGdldEJvcmRlcnNTaXplKHN0eWxlcywgYXhpcykge1xuICB2YXIgc2lkZUEgPSBheGlzID09PSAneCcgPyAnTGVmdCcgOiAnVG9wJztcbiAgdmFyIHNpZGVCID0gc2lkZUEgPT09ICdMZWZ0JyA/ICdSaWdodCcgOiAnQm90dG9tJztcblxuICByZXR1cm4gK3N0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10uc3BsaXQoJ3B4JylbMF0gKyArc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXS5zcGxpdCgncHgnKVswXTtcbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93U2l6ZXMoKSB7XG4gIHZhciBib2R5ID0gd2luZG93LmRvY3VtZW50LmJvZHk7XG4gIHZhciBodG1sID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IE1hdGgubWF4KGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5Lm9mZnNldEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLm9mZnNldEhlaWdodCksXG4gICAgd2lkdGg6IE1hdGgubWF4KGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkub2Zmc2V0V2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwub2Zmc2V0V2lkdGgpXG4gIH07XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG5cblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGVsZW1lbnQgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gb2Zmc2V0c1xuICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0KG9mZnNldHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIFRlbGxzIGlmIHlvdSBhcmUgcnVubmluZyBJbnRlcm5ldCBFeHBsb3JlciAxMFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHJldHVybnMge0Jvb2xlYW59IGlzSUUxMFxuICovXG52YXIgaXNJRTEwID0gdW5kZWZpbmVkO1xuXG52YXIgaXNJRTEwJDEgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChpc0lFMTAgPT09IHVuZGVmaW5lZCkge1xuICAgIGlzSUUxMCA9IG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ01TSUUgMTAnKSAhPT0gLTE7XG4gIH1cbiAgcmV0dXJuIGlzSUUxMDtcbn07XG5cbi8qKlxuICogR2V0IGJvdW5kaW5nIGNsaWVudCByZWN0IG9mIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gY2xpZW50IHJlY3RcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSB7fTtcblxuICAvLyBJRTEwIDEwIEZJWDogUGxlYXNlLCBkb24ndCBhc2ssIHRoZSBlbGVtZW50IGlzbid0XG4gIC8vIGNvbnNpZGVyZWQgaW4gRE9NIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4uLlxuICAvLyBUaGlzIGlzbid0IHJlcHJvZHVjaWJsZSBpbiBJRTEwIGNvbXBhdGliaWxpdHkgbW9kZSBvZiBJRTExXG4gIGlmIChpc0lFMTAkMSgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChlbGVtZW50LCAnbGVmdCcpO1xuICAgICAgcmVjdC50b3AgKz0gc2Nyb2xsVG9wO1xuICAgICAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQ7XG4gICAgICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LnJpZ2h0ICs9IHNjcm9sbExlZnQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7fVxuICB9IGVsc2Uge1xuICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICB3aWR0aDogcmVjdC5yaWdodCAtIHJlY3QubGVmdCxcbiAgICBoZWlnaHQ6IHJlY3QuYm90dG9tIC0gcmVjdC50b3BcbiAgfTtcblxuICAvLyBzdWJ0cmFjdCBzY3JvbGxiYXIgc2l6ZSBmcm9tIHNpemVzXG4gIHZhciBzaXplcyA9IGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJyA/IGdldFdpbmRvd1NpemVzKCkgOiB7fTtcbiAgdmFyIHdpZHRoID0gc2l6ZXMud2lkdGggfHwgZWxlbWVudC5jbGllbnRXaWR0aCB8fCByZXN1bHQucmlnaHQgLSByZXN1bHQubGVmdDtcbiAgdmFyIGhlaWdodCA9IHNpemVzLmhlaWdodCB8fCBlbGVtZW50LmNsaWVudEhlaWdodCB8fCByZXN1bHQuYm90dG9tIC0gcmVzdWx0LnRvcDtcblxuICB2YXIgaG9yaXpTY3JvbGxiYXIgPSBlbGVtZW50Lm9mZnNldFdpZHRoIC0gd2lkdGg7XG4gIHZhciB2ZXJ0U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgLSBoZWlnaHQ7XG5cbiAgLy8gaWYgYW4gaHlwb3RoZXRpY2FsIHNjcm9sbGJhciBpcyBkZXRlY3RlZCwgd2UgbXVzdCBiZSBzdXJlIGl0J3Mgbm90IGEgYGJvcmRlcmBcbiAgLy8gd2UgbWFrZSB0aGlzIGNoZWNrIGNvbmRpdGlvbmFsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gIGlmIChob3JpelNjcm9sbGJhciB8fCB2ZXJ0U2Nyb2xsYmFyKSB7XG4gICAgdmFyIHN0eWxlcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50KTtcbiAgICBob3JpelNjcm9sbGJhciAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd4Jyk7XG4gICAgdmVydFNjcm9sbGJhciAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd5Jyk7XG5cbiAgICByZXN1bHQud2lkdGggLT0gaG9yaXpTY3JvbGxiYXI7XG4gICAgcmVzdWx0LmhlaWdodCAtPSB2ZXJ0U2Nyb2xsYmFyO1xuICB9XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3QocmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKGNoaWxkcmVuLCBwYXJlbnQpIHtcbiAgdmFyIGlzSUUxMCA9IGlzSUUxMCQxKCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuICB2YXIgb2Zmc2V0cyA9IGdldENsaWVudFJlY3Qoe1xuICAgIHRvcDogY2hpbGRyZW5SZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wLFxuICAgIGxlZnQ6IGNoaWxkcmVuUmVjdC5sZWZ0IC0gcGFyZW50UmVjdC5sZWZ0LFxuICAgIHdpZHRoOiBjaGlsZHJlblJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiBjaGlsZHJlblJlY3QuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoaXNIVE1MIHx8IHBhcmVudC5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgdmFyIHN0eWxlcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQpO1xuICAgIHZhciBib3JkZXJUb3BXaWR0aCA9IGlzSUUxMCAmJiBpc0hUTUwgPyAwIDogK3N0eWxlcy5ib3JkZXJUb3BXaWR0aC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgYm9yZGVyTGVmdFdpZHRoID0gaXNJRTEwICYmIGlzSFRNTCA/IDAgOiArc3R5bGVzLmJvcmRlckxlZnRXaWR0aC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgbWFyZ2luVG9wID0gaXNJRTEwICYmIGlzSFRNTCA/IDAgOiArc3R5bGVzLm1hcmdpblRvcC5zcGxpdCgncHgnKVswXTtcbiAgICB2YXIgbWFyZ2luTGVmdCA9IGlzSUUxMCAmJiBpc0hUTUwgPyAwIDogK3N0eWxlcy5tYXJnaW5MZWZ0LnNwbGl0KCdweCcpWzBdO1xuXG4gICAgb2Zmc2V0cy50b3AgLT0gYm9yZGVyVG9wV2lkdGggLSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5ib3R0b20gLT0gYm9yZGVyVG9wV2lkdGggLSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5sZWZ0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG4gICAgb2Zmc2V0cy5yaWdodCAtPSBib3JkZXJMZWZ0V2lkdGggLSBtYXJnaW5MZWZ0O1xuXG4gICAgLy8gQXR0YWNoIG1hcmdpblRvcCBhbmQgbWFyZ2luTGVmdCBiZWNhdXNlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcyB3ZSBtYXkgbmVlZCB0aGVtXG4gICAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5tYXJnaW5MZWZ0ID0gbWFyZ2luTGVmdDtcbiAgfVxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoc2Nyb2xsUGFyZW50KSAmJiAoaXNJRTEwIHx8IHNjcm9sbFBhcmVudC5ub2RlTmFtZSAhPT0gJ0JPRFknKSkge1xuICAgIG9mZnNldHMgPSBpbmNsdWRlU2Nyb2xsKG9mZnNldHMsIHBhcmVudCk7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlKGVsZW1lbnQpIHtcbiAgdmFyIGh0bWwgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB2YXIgcmVsYXRpdmVPZmZzZXQgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoZWxlbWVudCwgaHRtbCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KGh0bWwuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoaHRtbC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGh0bWwpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChodG1sLCAnbGVmdCcpO1xuXG4gIHZhciBvZmZzZXQgPSB7XG4gICAgdG9wOiBzY3JvbGxUb3AgLSByZWxhdGl2ZU9mZnNldC50b3AgKyByZWxhdGl2ZU9mZnNldC5tYXJnaW5Ub3AsXG4gICAgbGVmdDogc2Nyb2xsTGVmdCAtIHJlbGF0aXZlT2Zmc2V0LmxlZnQgKyByZWxhdGl2ZU9mZnNldC5tYXJnaW5MZWZ0LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KG9mZnNldCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgZml4ZWQgb3IgaXMgaW5zaWRlIGEgZml4ZWQgcGFyZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gY3VzdG9tQ29udGFpbmVyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvIFwiaXNGaXhlZD9cIlxuICovXG5mdW5jdGlvbiBpc0ZpeGVkKGVsZW1lbnQpIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbi8qKlxuICogQ29tcHV0ZWQgdGhlIGJvdW5kYXJpZXMgbGltaXRzIGFuZCByZXR1cm4gdGhlbVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWRkaW5nXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBib3VuZGFyaWVzRWxlbWVudCAtIEVsZW1lbnQgdXNlZCB0byBkZWZpbmUgdGhlIGJvdW5kYXJpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IENvb3JkaW5hdGVzIG9mIHRoZSBib3VuZGFyaWVzXG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBib3VuZGFyaWVzID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocG9wcGVyKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3dpbmRvdycpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBib3VuZGFyaWVzRWxlbWVudDtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShib3VuZGFyaWVzTm9kZSwgb2Zmc2V0UGFyZW50KTtcblxuICAgIC8vIEluIGNhc2Ugb2YgSFRNTCwgd2UgbmVlZCBhIGRpZmZlcmVudCBjb21wdXRhdGlvblxuICAgIGlmIChib3VuZGFyaWVzTm9kZS5ub2RlTmFtZSA9PT0gJ0hUTUwnICYmICFpc0ZpeGVkKG9mZnNldFBhcmVudCkpIHtcbiAgICAgIHZhciBfZ2V0V2luZG93U2l6ZXMgPSBnZXRXaW5kb3dTaXplcygpLFxuICAgICAgICAgIGhlaWdodCA9IF9nZXRXaW5kb3dTaXplcy5oZWlnaHQsXG4gICAgICAgICAgd2lkdGggPSBfZ2V0V2luZG93U2l6ZXMud2lkdGg7XG5cbiAgICAgIGJvdW5kYXJpZXMudG9wICs9IG9mZnNldHMudG9wIC0gb2Zmc2V0cy5tYXJnaW5Ub3A7XG4gICAgICBib3VuZGFyaWVzLmJvdHRvbSA9IGhlaWdodCArIG9mZnNldHMudG9wO1xuICAgICAgYm91bmRhcmllcy5sZWZ0ICs9IG9mZnNldHMubGVmdCAtIG9mZnNldHMubWFyZ2luTGVmdDtcbiAgICAgIGJvdW5kYXJpZXMucmlnaHQgPSB3aWR0aCArIG9mZnNldHMubGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIGFsbCB0aGUgb3RoZXIgRE9NIGVsZW1lbnRzLCB0aGlzIG9uZSBpcyBnb29kXG4gICAgICBib3VuZGFyaWVzID0gb2Zmc2V0cztcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcGFkZGluZ3NcbiAgYm91bmRhcmllcy5sZWZ0ICs9IHBhZGRpbmc7XG4gIGJvdW5kYXJpZXMudG9wICs9IHBhZGRpbmc7XG4gIGJvdW5kYXJpZXMucmlnaHQgLT0gcGFkZGluZztcbiAgYm91bmRhcmllcy5ib3R0b20gLT0gcGFkZGluZztcblxuICByZXR1cm4gYm91bmRhcmllcztcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHVzZWQgdG8gdHJhbnNmb3JtIHRoZSBgYXV0b2AgcGxhY2VtZW50IHRvIHRoZSBwbGFjZW1lbnQgd2l0aCBtb3JlXG4gKiBhdmFpbGFibGUgc3BhY2UuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChwbGFjZW1lbnQsIHJlZlJlY3QsIHBvcHBlciwgcmVmZXJlbmNlLCBib3VuZGFyaWVzRWxlbWVudCkge1xuICBpZiAocGxhY2VtZW50LmluZGV4T2YoJ2F1dG8nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gcGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKHBvcHBlciwgcmVmZXJlbmNlLCAwLCBib3VuZGFyaWVzRWxlbWVudCk7XG5cbiAgdmFyIHNpZGVzID0ge1xuICAgIHRvcDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcCxcbiAgICByaWdodDogYm91bmRhcmllcy5yaWdodCAtIHJlZlJlY3QucmlnaHQsXG4gICAgYm90dG9tOiBib3VuZGFyaWVzLmJvdHRvbSAtIHJlZlJlY3QuYm90dG9tLFxuICAgIGxlZnQ6IHJlZlJlY3QubGVmdCAtIGJvdW5kYXJpZXMubGVmdFxuICB9O1xuXG4gIHZhciBjb21wdXRlZFBsYWNlbWVudCA9IE9iamVjdC5rZXlzKHNpZGVzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHNpZGVzW2JdIC0gc2lkZXNbYV07XG4gIH0pWzBdO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgcmV0dXJuIGNvbXB1dGVkUGxhY2VtZW50ICsgKHZhcmlhdGlvbiA/ICctJyArIHZhcmlhdGlvbiA6ICcnKTtcbn1cblxuLyoqXG4gKiBHZXQgb2Zmc2V0cyB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudH0gcmVmZXJlbmNlIC0gdGhlIHJlZmVyZW5jZSBlbGVtZW50ICh0aGUgcG9wcGVyIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcylcbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGdldFJlZmVyZW5jZU9mZnNldHMoc3RhdGUsIHBvcHBlciwgcmVmZXJlbmNlKSB7XG4gIHZhciBjb21tb25PZmZzZXRQYXJlbnQgPSBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KHBvcHBlciwgcmVmZXJlbmNlKTtcbiAgcmV0dXJuIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShyZWZlcmVuY2UsIGNvbW1vbk9mZnNldFBhcmVudCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvdXRlciBzaXplcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCAob2Zmc2V0IHNpemUgKyBtYXJnaW5zKVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3QgY29udGFpbmluZyB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJTaXplcyhlbGVtZW50KSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIHggPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5Ub3ApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luQm90dG9tKTtcbiAgdmFyIHkgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblJpZ2h0KTtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCArIHksXG4gICAgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCArIHhcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG9wcG9zaXRlIHBsYWNlbWVudCBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudFxuICovXG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgdmFyIGhhc2ggPSB7IGxlZnQ6ICdyaWdodCcsIHJpZ2h0OiAnbGVmdCcsIGJvdHRvbTogJ3RvcCcsIHRvcDogJ2JvdHRvbScgfTtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHBvc2l0aW9uIC0gQ1NTIHBvc2l0aW9uIHRoZSBQb3BwZXIgd2lsbCBnZXQgYXBwbGllZFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0cyAtIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge1N0cmluZ30gcGxhY2VtZW50IC0gb25lIG9mIHRoZSB2YWxpZCBwbGFjZW1lbnQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gcG9wcGVyT2Zmc2V0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGdldFBvcHBlck9mZnNldHMocG9wcGVyLCByZWZlcmVuY2VPZmZzZXRzLCBwbGFjZW1lbnQpIHtcbiAgcGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgLy8gR2V0IHBvcHBlciBub2RlIHNpemVzXG4gIHZhciBwb3BwZXJSZWN0ID0gZ2V0T3V0ZXJTaXplcyhwb3BwZXIpO1xuXG4gIC8vIEFkZCBwb3NpdGlvbiwgd2lkdGggYW5kIGhlaWdodCB0byBvdXIgb2Zmc2V0cyBvYmplY3RcbiAgdmFyIHBvcHBlck9mZnNldHMgPSB7XG4gICAgd2lkdGg6IHBvcHBlclJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiBwb3BwZXJSZWN0LmhlaWdodFxuICB9O1xuXG4gIC8vIGRlcGVuZGluZyBieSB0aGUgcG9wcGVyIHBsYWNlbWVudCB3ZSBoYXZlIHRvIGNvbXB1dGUgaXRzIG9mZnNldHMgc2xpZ2h0bHkgZGlmZmVyZW50bHlcbiAgdmFyIGlzSG9yaXogPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuICB2YXIgbWFpblNpZGUgPSBpc0hvcml6ID8gJ3RvcCcgOiAnbGVmdCc7XG4gIHZhciBzZWNvbmRhcnlTaWRlID0gaXNIb3JpeiA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc0hvcml6ID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2Vjb25kYXJ5TWVhc3VyZW1lbnQgPSAhaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBwb3BwZXJPZmZzZXRzW21haW5TaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbbWFpblNpZGVdICsgcmVmZXJlbmNlT2Zmc2V0c1ttZWFzdXJlbWVudF0gLyAyIC0gcG9wcGVyUmVjdFttZWFzdXJlbWVudF0gLyAyO1xuICBpZiAocGxhY2VtZW50ID09PSBzZWNvbmRhcnlTaWRlKSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gLSBwb3BwZXJSZWN0W3NlY29uZGFyeU1lYXN1cmVtZW50XTtcbiAgfSBlbHNlIHtcbiAgICBwb3BwZXJPZmZzZXRzW3NlY29uZGFyeVNpZGVdID0gcmVmZXJlbmNlT2Zmc2V0c1tnZXRPcHBvc2l0ZVBsYWNlbWVudChzZWNvbmRhcnlTaWRlKV07XG4gIH1cblxuICByZXR1cm4gcG9wcGVyT2Zmc2V0cztcbn1cblxuLyoqXG4gKiBNaW1pY3MgdGhlIGBmaW5kYCBtZXRob2Qgb2YgQXJyYXlcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICogQGFyZ3VtZW50IHByb3BcbiAqIEBhcmd1bWVudCB2YWx1ZVxuICogQHJldHVybnMgaW5kZXggb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmluZChhcnIsIGNoZWNrKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZCBpZiBzdXBwb3J0ZWRcbiAgaWYgKEFycmF5LnByb3RvdHlwZS5maW5kKSB7XG4gICAgcmV0dXJuIGFyci5maW5kKGNoZWNrKTtcbiAgfVxuXG4gIC8vIHVzZSBgZmlsdGVyYCB0byBvYnRhaW4gdGhlIHNhbWUgYmVoYXZpb3Igb2YgYGZpbmRgXG4gIHJldHVybiBhcnIuZmlsdGVyKGNoZWNrKVswXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBtYXRjaGluZyBvYmplY3RcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICogQGFyZ3VtZW50IHByb3BcbiAqIEBhcmd1bWVudCB2YWx1ZVxuICogQHJldHVybnMgaW5kZXggb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFyciwgcHJvcCwgdmFsdWUpIHtcbiAgLy8gdXNlIG5hdGl2ZSBmaW5kSW5kZXggaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KSB7XG4gICAgcmV0dXJuIGFyci5maW5kSW5kZXgoZnVuY3Rpb24gKGN1cikge1xuICAgICAgcmV0dXJuIGN1cltwcm9wXSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICAvLyB1c2UgYGZpbmRgICsgYGluZGV4T2ZgIGlmIGBmaW5kSW5kZXhgIGlzbid0IHN1cHBvcnRlZFxuICB2YXIgbWF0Y2ggPSBmaW5kKGFyciwgZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmpbcHJvcF0gPT09IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIGFyci5pbmRleE9mKG1hdGNoKTtcbn1cblxuLyoqXG4gKiBMb29wIHRyb3VnaCB0aGUgbGlzdCBvZiBtb2RpZmllcnMgYW5kIHJ1biB0aGVtIGluIG9yZGVyLFxuICogZWFjaCBvZiB0aGVtIHdpbGwgdGhlbiBlZGl0IHRoZSBkYXRhIG9iamVjdC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gZW5kcyAtIE9wdGlvbmFsIG1vZGlmaWVyIG5hbWUgdXNlZCBhcyBzdG9wcGVyXG4gKiBAcmV0dXJucyB7ZGF0YU9iamVjdH1cbiAqL1xuZnVuY3Rpb24gcnVuTW9kaWZpZXJzKG1vZGlmaWVycywgZGF0YSwgZW5kcykge1xuICB2YXIgbW9kaWZpZXJzVG9SdW4gPSBlbmRzID09PSB1bmRlZmluZWQgPyBtb2RpZmllcnMgOiBtb2RpZmllcnMuc2xpY2UoMCwgZmluZEluZGV4KG1vZGlmaWVycywgJ25hbWUnLCBlbmRzKSk7XG5cbiAgbW9kaWZpZXJzVG9SdW4uZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAobW9kaWZpZXIuZnVuY3Rpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybignYG1vZGlmaWVyLmZ1bmN0aW9uYCBpcyBkZXByZWNhdGVkLCB1c2UgYG1vZGlmaWVyLmZuYCEnKTtcbiAgICB9XG4gICAgdmFyIGZuID0gbW9kaWZpZXIuZnVuY3Rpb24gfHwgbW9kaWZpZXIuZm47XG4gICAgaWYgKG1vZGlmaWVyLmVuYWJsZWQgJiYgaXNGdW5jdGlvbihmbikpIHtcbiAgICAgIGRhdGEgPSBmbihkYXRhLCBtb2RpZmllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLCBjb21wdXRpbmcgdGhlIG5ldyBvZmZzZXRzIGFuZCBhcHBseWluZ1xuICogdGhlIG5ldyBzdHlsZS48YnIgLz5cbiAqIFByZWZlciBgc2NoZWR1bGVVcGRhdGVgIG92ZXIgYHVwZGF0ZWAgYmVjYXVzZSBvZiBwZXJmb3JtYW5jZSByZWFzb25zLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiB1cGRhdGUoKSB7XG4gIC8vIGlmIHBvcHBlciBpcyBkZXN0cm95ZWQsIGRvbid0IHBlcmZvcm0gYW55IGZ1cnRoZXIgdXBkYXRlXG4gIGlmICh0aGlzLnN0YXRlLmlzRGVzdHJveWVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGRhdGEgPSB7XG4gICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgc3R5bGVzOiB7fSxcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICBmbGlwcGVkOiBmYWxzZSxcbiAgICBvZmZzZXRzOiB7fVxuICB9O1xuXG4gIC8vIGNvbXB1dGUgcmVmZXJlbmNlIGVsZW1lbnQgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlT2Zmc2V0cyh0aGlzLnN0YXRlLCB0aGlzLnBvcHBlciwgdGhpcy5yZWZlcmVuY2UpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50KTtcblxuICAvLyBzdG9yZSB0aGUgY29tcHV0ZWQgcGxhY2VtZW50IGluc2lkZSBgb3JpZ2luYWxQbGFjZW1lbnRgXG4gIGRhdGEub3JpZ2luYWxQbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcblxuICAvLyBjb21wdXRlIHRoZSBwb3BwZXIgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0UG9wcGVyT2Zmc2V0cyh0aGlzLnBvcHBlciwgZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSwgZGF0YS5wbGFjZW1lbnQpO1xuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSlcbiAqL1xuZnVuY3Rpb24gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKHByb3BlcnR5KSB7XG4gIHZhciBwcmVmaXhlcyA9IFtmYWxzZSwgJ21zJywgJ3dlYmtpdCcsICdtb3onLCAnbyddO1xuICB2YXIgdXBwZXJQcm9wID0gcHJvcGVydHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuYm9keS5zdHlsZVt0b0NoZWNrXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBEZXN0cm95IHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgdGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgLy8gdG91Y2ggRE9NIG9ubHkgaWYgYGFwcGx5U3R5bGVgIG1vZGlmaWVyIGlzIGVuYWJsZWRcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKHRoaXMubW9kaWZpZXJzLCAnYXBwbHlTdHlsZScpKSB7XG4gICAgdGhpcy5wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCd4LXBsYWNlbWVudCcpO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlW2dldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyldID0gJyc7XG4gIH1cblxuICB0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycygpO1xuXG4gIC8vIHJlbW92ZSB0aGUgcG9wcGVyIGlmIHVzZXIgZXhwbGljaXR5IGFza2VkIGZvciB0aGUgZGVsZXRpb24gb24gZGVzdHJveVxuICAvLyBkbyBub3QgdXNlIGByZW1vdmVgIGJlY2F1c2UgSUUxMSBkb2Vzbid0IHN1cHBvcnQgaXRcbiAgaWYgKHRoaXMub3B0aW9ucy5yZW1vdmVPbkRlc3Ryb3kpIHtcbiAgICB0aGlzLnBvcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbFBhcmVudCwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKSB7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQubm9kZU5hbWUgPT09ICdCT0RZJztcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IHdpbmRvdyA6IHNjcm9sbFBhcmVudDtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgaWYgKCFpc0JvZHkpIHtcbiAgICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoZ2V0U2Nyb2xsUGFyZW50KHRhcmdldC5wYXJlbnROb2RlKSwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKTtcbiAgfVxuICBzY3JvbGxQYXJlbnRzLnB1c2godGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBvcHRpb25zLCBzdGF0ZSwgdXBkYXRlQm91bmQpIHtcbiAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBzdGF0ZS51cGRhdGVCb3VuZCA9IHVwZGF0ZUJvdW5kO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3RhdGUudXBkYXRlQm91bmQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAvLyBTY3JvbGwgZXZlbnQgbGlzdGVuZXIgb24gc2Nyb2xsIHBhcmVudHNcbiAgdmFyIHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxQYXJlbnQocmVmZXJlbmNlKTtcbiAgYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbEVsZW1lbnQsICdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCwgc3RhdGUuc2Nyb2xsUGFyZW50cyk7XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBzY3JvbGxFbGVtZW50O1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gdHJ1ZTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCBhZGQgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHN0YXJ0IHJlY2FsY3VsYXRpbmdcbiAqIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIgZWxlbWVudCB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICghdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHNldHVwRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucywgdGhpcy5zdGF0ZSwgdGhpcy5zY2hlZHVsZVVwZGF0ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZSwgc3RhdGUpIHtcbiAgLy8gUmVtb3ZlIHJlc2l6ZSBldmVudCBsaXN0ZW5lciBvbiB3aW5kb3dcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcblxuICAvLyBSZW1vdmUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyIG9uIHNjcm9sbCBwYXJlbnRzXG4gIHN0YXRlLnNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgfSk7XG5cbiAgLy8gUmVzZXQgc3RhdGVcbiAgc3RhdGUudXBkYXRlQm91bmQgPSBudWxsO1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0gW107XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBudWxsO1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gZmFsc2U7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIHJlbW92ZSByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgd29uJ3QgcmVjYWxjdWxhdGUgcG9wcGVyIHBvc2l0aW9uXG4gKiB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC4gSXQgYWxzbyB3b24ndCB0cmlnZ2VyIG9uVXBkYXRlIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY2hlZHVsZVVwZGF0ZSk7XG4gICAgdGhpcy5zdGF0ZSA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMucmVmZXJlbmNlLCB0aGlzLnN0YXRlKTtcbiAgfVxufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEsIG9wdGlvbnMpIHtcbiAgLy8gYXBwbHkgdGhlIGZpbmFsIG9mZnNldHMgdG8gdGhlIHBvcHBlclxuICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICB2YXIgc3R5bGVzID0ge1xuICAgIHBvc2l0aW9uOiBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uXG4gIH07XG5cbiAgdmFyIGF0dHJpYnV0ZXMgPSB7XG4gICAgJ3gtcGxhY2VtZW50JzogZGF0YS5wbGFjZW1lbnRcbiAgfTtcblxuICAvLyByb3VuZCB0b3AgYW5kIGxlZnQgdG8gYXZvaWQgYmx1cnJ5IHRleHRcbiAgdmFyIGxlZnQgPSBNYXRoLnJvdW5kKGRhdGEub2Zmc2V0cy5wb3BwZXIubGVmdCk7XG4gIHZhciB0b3AgPSBNYXRoLnJvdW5kKGRhdGEub2Zmc2V0cy5wb3BwZXIudG9wKTtcblxuICAvLyBpZiBncHVBY2NlbGVyYXRpb24gaXMgc2V0IHRvIHRydWUgYW5kIHRyYW5zZm9ybSBpcyBzdXBwb3J0ZWQsXG4gIC8vICB3ZSB1c2UgYHRyYW5zbGF0ZTNkYCB0byBhcHBseSB0aGUgcG9zaXRpb24gdG8gdGhlIHBvcHBlciB3ZVxuICAvLyBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgc3VwcG9ydGVkIHByZWZpeGVkIHZlcnNpb24gaWYgbmVlZGVkXG4gIHZhciBwcmVmaXhlZFByb3BlcnR5ID0gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKTtcbiAgaWYgKG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uICYmIHByZWZpeGVkUHJvcGVydHkpIHtcbiAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICBzdHlsZXMudG9wID0gMDtcbiAgICBzdHlsZXMubGVmdCA9IDA7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGh3ZXJpc2UsIHdlIHVzZSB0aGUgc3RhbmRhcmQgYGxlZnRgIGFuZCBgdG9wYCBwcm9wZXJ0aWVzXG4gICAgc3R5bGVzLmxlZnQgPSBsZWZ0O1xuICAgIHN0eWxlcy50b3AgPSB0b3A7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSAndG9wLCBsZWZ0JztcbiAgfVxuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLnN0eWxlc2Agd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIsXG4gIC8vIGluIHRoaXMgd2F5IHdlIGNhbiBtYWtlIHRoZSAzcmQgcGFydHkgbW9kaWZpZXJzIGFkZCBjdXN0b20gc3R5bGVzIHRvIGl0XG4gIC8vIEJlIGF3YXJlLCBtb2RpZmllcnMgY291bGQgb3ZlcnJpZGUgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXNcbiAgLy8gbGluZXMgb2YgdGhpcyBtb2RpZmllciFcbiAgc2V0U3R5bGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBfZXh0ZW5kcyh7fSwgc3R5bGVzLCBkYXRhLnN0eWxlcykpO1xuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLmF0dHJpYnV0ZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyB0aGV5IHdpbGwgYmUgc2V0IGFzIEhUTUwgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuICBzZXRBdHRyaWJ1dGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBfZXh0ZW5kcyh7fSwgYXR0cmlidXRlcywgZGF0YS5hdHRyaWJ1dGVzKSk7XG5cbiAgLy8gaWYgdGhlIGFycm93IHN0eWxlIGhhcyBiZWVuIGNvbXB1dGVkLCBhcHBseSB0aGUgYXJyb3cgc3R5bGVcbiAgaWYgKGRhdGEub2Zmc2V0cy5hcnJvdykge1xuICAgIHNldFN0eWxlcyhkYXRhLmFycm93RWxlbWVudCwgZGF0YS5vZmZzZXRzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFBvcHBlci5qcyBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGFwcGx5U3R5bGVPbkxvYWQocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMsIG1vZGlmaWVyT3B0aW9ucywgc3RhdGUpIHtcbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIHZhciByZWZlcmVuY2VPZmZzZXRzID0gZ2V0UmVmZXJlbmNlT2Zmc2V0cyhzdGF0ZSwgcG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICB2YXIgcGxhY2VtZW50ID0gY29tcHV0ZUF1dG9QbGFjZW1lbnQob3B0aW9ucy5wbGFjZW1lbnQsIHJlZmVyZW5jZU9mZnNldHMsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50KTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS48YnIgLz5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgbmVlZGVkIG1vZGlmaWVyIGlzIGxpc3RlZCBhbmQgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVycyAtIGxpc3Qgb2YgbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZ05hbWUgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWROYW1lIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyUmVxdWlyZWQobW9kaWZpZXJzLCByZXF1ZXN0aW5nTmFtZSwgcmVxdWVzdGVkTmFtZSkge1xuICB2YXIgcmVxdWVzdGluZyA9IGZpbmQobW9kaWZpZXJzLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgIHJldHVybiBuYW1lID09PSByZXF1ZXN0aW5nTmFtZTtcbiAgfSk7XG5cbiAgdmFyIGlzUmVxdWlyZWQgPSAhIXJlcXVlc3RpbmcgJiYgbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09IHJlcXVlc3RlZE5hbWUgJiYgbW9kaWZpZXIuZW5hYmxlZCAmJiBtb2RpZmllci5vcmRlciA8IHJlcXVlc3Rpbmcub3JkZXI7XG4gIH0pO1xuXG4gIGlmICghaXNSZXF1aXJlZCkge1xuICAgIHZhciBfcmVxdWVzdGluZyA9ICdgJyArIHJlcXVlc3RpbmdOYW1lICsgJ2AnO1xuICAgIHZhciByZXF1ZXN0ZWQgPSAnYCcgKyByZXF1ZXN0ZWROYW1lICsgJ2AnO1xuICAgIGNvbnNvbGUud2FybihyZXF1ZXN0ZWQgKyAnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcgKyBfcmVxdWVzdGluZyArICcgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnICsgX3JlcXVlc3RpbmcgKyAnIScpO1xuICB9XG4gIHJldHVybiBpc1JlcXVpcmVkO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gYXJyb3coZGF0YSwgb3B0aW9ucykge1xuICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnYXJyb3cnLCAna2VlcFRvZ2V0aGVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBhcnJvd0VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpc24ndCBhIHF1ZXJ5IHNlbGVjdG9yIHdlIG11c3QgY2hlY2sgdGhhdCB0aGVcbiAgICAvLyBwcm92aWRlZCBET00gbm9kZSBpcyBjaGlsZCBvZiBpdHMgcG9wcGVyIG5vZGVcbiAgICBpZiAoIWRhdGEuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93LmVsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICB2YXIgcmVmZXJlbmNlID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2lkZSA9IGlzVmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JztcbiAgdmFyIGFsdFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gIHZhciBvcFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICB2YXIgYXJyb3dFbGVtZW50U2l6ZSA9IGdldE91dGVyU2l6ZXMoYXJyb3dFbGVtZW50KVtsZW5dO1xuXG4gIC8vXG4gIC8vIGV4dGVuZHMga2VlcFRvZ2V0aGVyIGJlaGF2aW9yIG1ha2luZyBzdXJlIHRoZSBwb3BwZXIgYW5kIGl0cyByZWZlcmVuY2UgaGF2ZSBlbm91Z2ggcGl4ZWxzIGluIGNvbmp1Y3Rpb25cbiAgLy9cblxuICAvLyB0b3AvbGVmdCBzaWRlXG4gIGlmIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUgPCBwb3BwZXJbc2lkZV0pIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC09IHBvcHBlcltzaWRlXSAtIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUpO1xuICB9XG4gIC8vIGJvdHRvbS9yaWdodCBzaWRlXG4gIGlmIChyZWZlcmVuY2Vbc2lkZV0gKyBhcnJvd0VsZW1lbnRTaXplID4gcG9wcGVyW29wU2lkZV0pIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdICs9IHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgLSBwb3BwZXJbb3BTaWRlXTtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICB2YXIgc2lkZVZhbHVlID0gY2VudGVyIC0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKVtzaWRlXTtcblxuICAvLyBwcmV2ZW50IGFycm93RWxlbWVudCBmcm9tIGJlaW5nIHBsYWNlZCBub3QgY29udGlndW91c2x5IHRvIGl0cyBwb3BwZXJcbiAgc2lkZVZhbHVlID0gTWF0aC5tYXgoTWF0aC5taW4ocG9wcGVyW2xlbl0gLSBhcnJvd0VsZW1lbnRTaXplLCBzaWRlVmFsdWUpLCAwKTtcblxuICBkYXRhLmFycm93RWxlbWVudCA9IGFycm93RWxlbWVudDtcbiAgZGF0YS5vZmZzZXRzLmFycm93ID0ge307XG4gIGRhdGEub2Zmc2V0cy5hcnJvd1tzaWRlXSA9IHNpZGVWYWx1ZTtcbiAgZGF0YS5vZmZzZXRzLmFycm93W2FsdFNpZGVdID0gJyc7IC8vIG1ha2Ugc3VyZSB0byB1bnNldCBhbnkgZXZlbnR1YWwgYWx0U2lkZSB2YWx1ZSBmcm9tIHRoZSBET00gbm9kZVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IHZhcmlhdGlvbiBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50IHZhcmlhdGlvblxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbikge1xuICBpZiAodmFyaWF0aW9uID09PSAnZW5kJykge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9IGVsc2UgaWYgKHZhcmlhdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgIHJldHVybiAnZW5kJztcbiAgfVxuICByZXR1cm4gdmFyaWF0aW9uO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgYWNjZXB0ZWQgcGxhY2VtZW50cyB0byB1c2UgYXMgdmFsdWVzIG9mIHRoZSBgcGxhY2VtZW50YCBvcHRpb24uPGJyIC8+XG4gKiBWYWxpZCBwbGFjZW1lbnRzIGFyZTpcbiAqIC0gYGF1dG9gXG4gKiAtIGB0b3BgXG4gKiAtIGByaWdodGBcbiAqIC0gYGJvdHRvbWBcbiAqIC0gYGxlZnRgXG4gKlxuICogRWFjaCBwbGFjZW1lbnQgY2FuIGhhdmUgYSB2YXJpYXRpb24gZnJvbSB0aGlzIGxpc3Q6XG4gKiAtIGAtc3RhcnRgXG4gKiAtIGAtZW5kYFxuICpcbiAqIFZhcmlhdGlvbnMgYXJlIGludGVycHJldGVkIGVhc2lseSBpZiB5b3UgdGhpbmsgb2YgdGhlbSBhcyB0aGUgbGVmdCB0byByaWdodFxuICogd3JpdHRlbiBsYW5ndWFnZXMuIEhvcml6b250YWxseSAoYHRvcGAgYW5kIGBib3R0b21gKSwgYHN0YXJ0YCBpcyBsZWZ0IGFuZCBgZW5kYFxuICogaXMgcmlnaHQuPGJyIC8+XG4gKiBWZXJ0aWNhbGx5IChgbGVmdGAgYW5kIGByaWdodGApLCBgc3RhcnRgIGlzIHRvcCBhbmQgYGVuZGAgaXMgYm90dG9tLlxuICpcbiAqIFNvbWUgdmFsaWQgZXhhbXBsZXMgYXJlOlxuICogLSBgdG9wLWVuZGAgKG9uIHRvcCBvZiByZWZlcmVuY2UsIHJpZ2h0IGFsaWduZWQpXG4gKiAtIGByaWdodC1zdGFydGAgKG9uIHJpZ2h0IG9mIHJlZmVyZW5jZSwgdG9wIGFsaWduZWQpXG4gKiAtIGBib3R0b21gIChvbiBib3R0b20sIGNlbnRlcmVkKVxuICogLSBgYXV0by1yaWdodGAgKG9uIHRoZSBzaWRlIHdpdGggbW9yZSBzcGFjZSBhdmFpbGFibGUsIGFsaWdubWVudCBkZXBlbmRzIGJ5IHBsYWNlbWVudClcbiAqXG4gKiBAc3RhdGljXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAZW51bSB7U3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWV0aG9kIHBsYWNlbWVudHNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIHBsYWNlbWVudHMgPSBbJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdhdXRvLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJywgJ3RvcC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAncmlnaHQtZW5kJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tJywgJ2JvdHRvbS1zdGFydCcsICdsZWZ0LWVuZCcsICdsZWZ0JywgJ2xlZnQtc3RhcnQnXTtcblxuLy8gR2V0IHJpZCBvZiBgYXV0b2AgYGF1dG8tc3RhcnRgIGFuZCBgYXV0by1lbmRgXG52YXIgdmFsaWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5zbGljZSgzKTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHBsYWNlbWVudCwgcmV0dXJucyBhbGwgdGhlIHN1YnNlcXVlbnQgcGxhY2VtZW50c1xuICogY2xvY2t3aXNlIChvciBjb3VudGVyLWNsb2Nrd2lzZSkuXG4gKlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudCAtIEEgdmFsaWQgcGxhY2VtZW50IChpdCBhY2NlcHRzIHZhcmlhdGlvbnMpXG4gKiBAYXJndW1lbnQge0Jvb2xlYW59IGNvdW50ZXIgLSBTZXQgdG8gdHJ1ZSB0byB3YWxrIHRoZSBwbGFjZW1lbnRzIGNvdW50ZXJjbG9ja3dpc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gcGxhY2VtZW50cyBpbmNsdWRpbmcgdGhlaXIgdmFyaWF0aW9uc1xuICovXG5mdW5jdGlvbiBjbG9ja3dpc2UocGxhY2VtZW50KSB7XG4gIHZhciBjb3VudGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaW5kZXggPSB2YWxpZFBsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpO1xuICB2YXIgYXJyID0gdmFsaWRQbGFjZW1lbnRzLnNsaWNlKGluZGV4ICsgMSkuY29uY2F0KHZhbGlkUGxhY2VtZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICByZXR1cm4gY291bnRlciA/IGFyci5yZXZlcnNlKCkgOiBhcnI7XG59XG5cbnZhciBCRUhBVklPUlMgPSB7XG4gIEZMSVA6ICdmbGlwJyxcbiAgQ0xPQ0tXSVNFOiAnY2xvY2t3aXNlJyxcbiAgQ09VTlRFUkNMT0NLV0lTRTogJ2NvdW50ZXJjbG9ja3dpc2UnXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gZmxpcChkYXRhLCBvcHRpb25zKSB7XG4gIC8vIGlmIGBpbm5lcmAgbW9kaWZpZXIgaXMgZW5hYmxlZCwgd2UgY2FuJ3QgdXNlIHRoZSBgZmxpcGAgbW9kaWZpZXJcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaW5uZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQpO1xuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVsxXSB8fCAnJztcblxuICB2YXIgZmxpcE9yZGVyID0gW107XG5cbiAgc3dpdGNoIChvcHRpb25zLmJlaGF2aW9yKSB7XG4gICAgY2FzZSBCRUhBVklPUlMuRkxJUDpcbiAgICAgIGZsaXBPcmRlciA9IFtwbGFjZW1lbnQsIHBsYWNlbWVudE9wcG9zaXRlXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQkVIQVZJT1JTLkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ09VTlRFUkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZsaXBPcmRlciA9IG9wdGlvbnMuYmVoYXZpb3I7XG4gIH1cblxuICBmbGlwT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCwgaW5kZXgpIHtcbiAgICBpZiAocGxhY2VtZW50ICE9PSBzdGVwIHx8IGZsaXBPcmRlci5sZW5ndGggPT09IGluZGV4ICsgMSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGdldENsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG4gICAgdmFyIHJlZk9mZnNldHMgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuXG4gICAgLy8gdXNpbmcgZmxvb3IgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgbWF5IGNvbnRhaW4gZGVjaW1hbHMgd2UgYXJlIG5vdCBnb2luZyB0byBjb25zaWRlciBoZXJlXG4gICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICB2YXIgb3ZlcmxhcHNSZWYgPSBwbGFjZW1lbnQgPT09ICdsZWZ0JyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKHJlZk9mZnNldHMubGVmdCkgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIGZsb29yKHBvcHBlck9mZnNldHMubGVmdCkgPCBmbG9vcihyZWZPZmZzZXRzLnJpZ2h0KSB8fCBwbGFjZW1lbnQgPT09ICd0b3AnICYmIGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKHJlZk9mZnNldHMudG9wKSB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nICYmIGZsb29yKHBvcHBlck9mZnNldHMudG9wKSA8IGZsb29yKHJlZk9mZnNldHMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NMZWZ0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKGJvdW5kYXJpZXMubGVmdCk7XG4gICAgdmFyIG92ZXJmbG93c1JpZ2h0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5yaWdodCkgPiBmbG9vcihib3VuZGFyaWVzLnJpZ2h0KTtcbiAgICB2YXIgb3ZlcmZsb3dzVG9wID0gZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IoYm91bmRhcmllcy50b3ApO1xuICAgIHZhciBvdmVyZmxvd3NCb3R0b20gPSBmbG9vcihwb3BwZXJPZmZzZXRzLmJvdHRvbSkgPiBmbG9vcihib3VuZGFyaWVzLmJvdHRvbSk7XG5cbiAgICB2YXIgb3ZlcmZsb3dzQm91bmRhcmllcyA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIG92ZXJmbG93c0xlZnQgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIG92ZXJmbG93c1JpZ2h0IHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgb3ZlcmZsb3dzVG9wIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgb3ZlcmZsb3dzQm90dG9tO1xuXG4gICAgLy8gZmxpcCB0aGUgdmFyaWF0aW9uIGlmIHJlcXVpcmVkXG4gICAgdmFyIGlzVmVydGljYWwgPSBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IGlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnZW5kJyAmJiBvdmVyZmxvd3NSaWdodCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzVG9wIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzQm90dG9tKTtcblxuICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzIHx8IGZsaXBwZWRWYXJpYXRpb24pIHtcbiAgICAgIC8vIHRoaXMgYm9vbGVhbiB0byBkZXRlY3QgYW55IGZsaXAgbG9vcFxuICAgICAgZGF0YS5mbGlwcGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKG92ZXJsYXBzUmVmIHx8IG92ZXJmbG93c0JvdW5kYXJpZXMpIHtcbiAgICAgICAgcGxhY2VtZW50ID0gZmxpcE9yZGVyW2luZGV4ICsgMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAgIHZhcmlhdGlvbiA9IGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRhdGEucGxhY2VtZW50ID0gcGxhY2VtZW50ICsgKHZhcmlhdGlvbiA/ICctJyArIHZhcmlhdGlvbiA6ICcnKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRQb3BwZXJPZmZzZXRzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgcG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgdmFyIHJlZmVyZW5jZSA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdyaWdodCcgOiAnYm90dG9tJztcbiAgdmFyIG9wU2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICBpZiAocG9wcGVyW3NpZGVdIDwgZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pIC0gcG9wcGVyW21lYXN1cmVtZW50XTtcbiAgfVxuICBpZiAocG9wcGVyW29wU2lkZV0gPiBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW3NpZGVdKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdmFsdWUgKyB1bml0IGludG8gYSBweCB2YWx1ZSBudW1iZXJcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIHttb2RpZmllcnN+b2Zmc2V0fVxuICogQHByaXZhdGVcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBzdHIgLSBWYWx1ZSArIHVuaXQgc3RyaW5nXG4gKiBAYXJndW1lbnQge1N0cmluZ30gbWVhc3VyZW1lbnQgLSBgaGVpZ2h0YCBvciBgd2lkdGhgXG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEByZXR1cm5zIHtOdW1iZXJ8U3RyaW5nfVxuICogVmFsdWUgaW4gcGl4ZWxzLCBvciBvcmlnaW5hbCBzdHJpbmcgaWYgbm8gdmFsdWVzIHdlcmUgZXh0cmFjdGVkXG4gKi9cbmZ1bmN0aW9uIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cykge1xuICAvLyBzZXBhcmF0ZSB2YWx1ZSBmcm9tIHVuaXRcbiAgdmFyIHNwbGl0ID0gc3RyLm1hdGNoKC8oKD86XFwtfFxcKyk/XFxkKlxcLj9cXGQqKSguKikvKTtcbiAgdmFyIHZhbHVlID0gK3NwbGl0WzFdO1xuICB2YXIgdW5pdCA9IHNwbGl0WzJdO1xuXG4gIC8vIElmIGl0J3Mgbm90IGEgbnVtYmVyIGl0J3MgYW4gb3BlcmF0b3IsIEkgZ3Vlc3NcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAodW5pdC5pbmRleE9mKCclJykgPT09IDApIHtcbiAgICB2YXIgZWxlbWVudCA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJyVwJzpcbiAgICAgICAgZWxlbWVudCA9IHBvcHBlck9mZnNldHM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJSc6XG4gICAgICBjYXNlICclcic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBlbGVtZW50ID0gcmVmZXJlbmNlT2Zmc2V0cztcbiAgICB9XG5cbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3QoZWxlbWVudCk7XG4gICAgcmV0dXJuIHJlY3RbbWVhc3VyZW1lbnRdIC8gMTAwICogdmFsdWU7XG4gIH0gZWxzZSBpZiAodW5pdCA9PT0gJ3ZoJyB8fCB1bml0ID09PSAndncnKSB7XG4gICAgLy8gaWYgaXMgYSB2aCBvciB2dywgd2UgY2FsY3VsYXRlIHRoZSBzaXplIGJhc2VkIG9uIHRoZSB2aWV3cG9ydFxuICAgIHZhciBzaXplID0gdm9pZCAwO1xuICAgIGlmICh1bml0ID09PSAndmgnKSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpemUgLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBpcyBhbiBleHBsaWNpdCBwaXhlbCB1bml0LCB3ZSBnZXQgcmlkIG9mIHRoZSB1bml0IGFuZCBrZWVwIHRoZSB2YWx1ZVxuICAgIC8vIGlmIGlzIGFuIGltcGxpY2l0IHVuaXQsIGl0J3MgcHgsIGFuZCB3ZSByZXR1cm4ganVzdCB0aGUgdmFsdWVcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBgb2Zmc2V0YCBzdHJpbmcgdG8gZXh0cmFwb2xhdGUgYHhgIGFuZCBgeWAgbnVtZXJpYyBvZmZzZXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IG9mZnNldFxuICogQGFyZ3VtZW50IHtPYmplY3R9IHBvcHBlck9mZnNldHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSByZWZlcmVuY2VPZmZzZXRzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gYmFzZVBsYWNlbWVudFxuICogQHJldHVybnMge0FycmF5fSBhIHR3byBjZWxscyBhcnJheSB3aXRoIHggYW5kIHkgb2Zmc2V0cyBpbiBudW1iZXJzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT2Zmc2V0KG9mZnNldCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cywgYmFzZVBsYWNlbWVudCkge1xuICB2YXIgb2Zmc2V0cyA9IFswLCAwXTtcblxuICAvLyBVc2UgaGVpZ2h0IGlmIHBsYWNlbWVudCBpcyBsZWZ0IG9yIHJpZ2h0IGFuZCBpbmRleCBpcyAwIG90aGVyd2lzZSB1c2Ugd2lkdGhcbiAgLy8gaW4gdGhpcyB3YXkgdGhlIGZpcnN0IG9mZnNldCB3aWxsIHVzZSBhbiBheGlzIGFuZCB0aGUgc2Vjb25kIG9uZVxuICAvLyB3aWxsIHVzZSB0aGUgb3RoZXIgb25lXG4gIHZhciB1c2VIZWlnaHQgPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAvLyBTcGxpdCB0aGUgb2Zmc2V0IHN0cmluZyB0byBvYnRhaW4gYSBsaXN0IG9mIHZhbHVlcyBhbmQgb3BlcmFuZHNcbiAgLy8gVGhlIHJlZ2V4IGFkZHJlc3NlcyB2YWx1ZXMgd2l0aCB0aGUgcGx1cyBvciBtaW51cyBzaWduIGluIGZyb250ICgrMTAsIC0yMCwgZXRjKVxuICB2YXIgZnJhZ21lbnRzID0gb2Zmc2V0LnNwbGl0KC8oXFwrfFxcLSkvKS5tYXAoZnVuY3Rpb24gKGZyYWcpIHtcbiAgICByZXR1cm4gZnJhZy50cmltKCk7XG4gIH0pO1xuXG4gIC8vIERldGVjdCBpZiB0aGUgb2Zmc2V0IHN0cmluZyBjb250YWlucyBhIHBhaXIgb2YgdmFsdWVzIG9yIGEgc2luZ2xlIG9uZVxuICAvLyB0aGV5IGNvdWxkIGJlIHNlcGFyYXRlZCBieSBjb21tYSBvciBzcGFjZVxuICB2YXIgZGl2aWRlciA9IGZyYWdtZW50cy5pbmRleE9mKGZpbmQoZnJhZ21lbnRzLCBmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnNlYXJjaCgvLHxcXHMvKSAhPT0gLTE7XG4gIH0pKTtcblxuICBpZiAoZnJhZ21lbnRzW2RpdmlkZXJdICYmIGZyYWdtZW50c1tkaXZpZGVyXS5pbmRleE9mKCcsJykgPT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKCdPZmZzZXRzIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZShzKSBhcmUgZGVwcmVjYXRlZCwgdXNlIGEgY29tbWEgKCwpIGluc3RlYWQuJyk7XG4gIH1cblxuICAvLyBJZiBkaXZpZGVyIGlzIGZvdW5kLCB3ZSBkaXZpZGUgdGhlIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kcyB0byBkaXZpZGVcbiAgLy8gdGhlbSBieSBvZnNldCBYIGFuZCBZLlxuICB2YXIgc3BsaXRSZWdleCA9IC9cXHMqLFxccyp8XFxzKy87XG4gIHZhciBvcHMgPSBkaXZpZGVyICE9PSAtMSA/IFtmcmFnbWVudHMuc2xpY2UoMCwgZGl2aWRlcikuY29uY2F0KFtmcmFnbWVudHNbZGl2aWRlcl0uc3BsaXQoc3BsaXRSZWdleClbMF1dKSwgW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVsxXV0uY29uY2F0KGZyYWdtZW50cy5zbGljZShkaXZpZGVyICsgMSkpXSA6IFtmcmFnbWVudHNdO1xuXG4gIC8vIENvbnZlcnQgdGhlIHZhbHVlcyB3aXRoIHVuaXRzIHRvIGFic29sdXRlIHBpeGVscyB0byBhbGxvdyBvdXIgY29tcHV0YXRpb25zXG4gIG9wcyA9IG9wcy5tYXAoZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIC8vIE1vc3Qgb2YgdGhlIHVuaXRzIHJlbHkgb24gdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBwb3BwZXJcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSAoaW5kZXggPT09IDEgPyAhdXNlSGVpZ2h0IDogdXNlSGVpZ2h0KSA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgbWVyZ2VXaXRoUHJldmlvdXMgPSBmYWxzZTtcbiAgICByZXR1cm4gb3BcbiAgICAvLyBUaGlzIGFnZ3JlZ2F0ZXMgYW55IGArYCBvciBgLWAgc2lnbiB0aGF0IGFyZW4ndCBjb25zaWRlcmVkIG9wZXJhdG9yc1xuICAgIC8vIGUuZy46IDEwICsgKzUgPT4gWzEwLCArLCArNV1cbiAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICBpZiAoYVthLmxlbmd0aCAtIDFdID09PSAnJyAmJiBbJysnLCAnLSddLmluZGV4T2YoYikgIT09IC0xKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSA9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlV2l0aFByZXZpb3VzKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSArPSBiO1xuICAgICAgICBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdGhlIHN0cmluZyB2YWx1ZXMgaW50byBudW1iZXIgdmFsdWVzIChpbiBweClcbiAgICAubWFwKGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiB0b1ZhbHVlKHN0ciwgbWVhc3VyZW1lbnQsIHBvcHBlck9mZnNldHMsIHJlZmVyZW5jZU9mZnNldHMpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBMb29wIHRyb3VnaCB0aGUgb2Zmc2V0cyBhcnJheXMgYW5kIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbnNcbiAgb3BzLmZvckVhY2goZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIG9wLmZvckVhY2goZnVuY3Rpb24gKGZyYWcsIGluZGV4Mikge1xuICAgICAgaWYgKGlzTnVtZXJpYyhmcmFnKSkge1xuICAgICAgICBvZmZzZXRzW2luZGV4XSArPSBmcmFnICogKG9wW2luZGV4MiAtIDFdID09PSAnLScgPyAtMSA6IDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQGFyZ3VtZW50IHtOdW1iZXJ8U3RyaW5nfSBvcHRpb25zLm9mZnNldD0wXG4gKiBUaGUgb2Zmc2V0IHZhbHVlIGFzIGRlc2NyaWJlZCBpbiB0aGUgbW9kaWZpZXIgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gb2Zmc2V0KGRhdGEsIF9yZWYpIHtcbiAgdmFyIG9mZnNldCA9IF9yZWYub2Zmc2V0O1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQsXG4gICAgICBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIHZhciBvZmZzZXRzID0gdm9pZCAwO1xuICBpZiAoaXNOdW1lcmljKCtvZmZzZXQpKSB7XG4gICAgb2Zmc2V0cyA9IFsrb2Zmc2V0LCAwXTtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXRzID0gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXIsIHJlZmVyZW5jZSwgYmFzZVBsYWNlbWVudCk7XG4gIH1cblxuICBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0IC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3JpZ2h0Jykge1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzFdO1xuICB9IGVsc2UgaWYgKGJhc2VQbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgcG9wcGVyLmxlZnQgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIudG9wIC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1sxXTtcbiAgfVxuXG4gIGRhdGEucG9wcGVyID0gcG9wcGVyO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGJvdW5kYXJpZXNFbGVtZW50ID0gb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCB8fCBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciByZWZlcmVuY2UgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICAgIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICAgIHZhciBpc1ZlcnRpY2FsID0gWydib3R0b20nLCAndG9wJ10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG4gICAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICAgIHZhciBzaGlmdE9mZnNldHMgPSB7XG4gICAgICBzdGFydDogZGVmaW5lUHJvcGVydHkoe30sIHNpZGUsIHJlZmVyZW5jZVtzaWRlXSksXG4gICAgICBlbmQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0gKyByZWZlcmVuY2VbbWVhc3VyZW1lbnRdIC0gcG9wcGVyW21lYXN1cmVtZW50XSlcbiAgICB9O1xuXG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIHNoaWZ0T2Zmc2V0c1tzaGlmdHZhcmlhdGlvbl0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBoaWRlKGRhdGEpIHtcbiAgaWYgKCFpc01vZGlmaWVyUmVxdWlyZWQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsICdoaWRlJywgJ3ByZXZlbnRPdmVyZmxvdycpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgcmVmUmVjdCA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gIHZhciBib3VuZCA9IGZpbmQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSAncHJldmVudE92ZXJmbG93JztcbiAgfSkuYm91bmRhcmllcztcblxuICBpZiAocmVmUmVjdC5ib3R0b20gPCBib3VuZC50b3AgfHwgcmVmUmVjdC5sZWZ0ID4gYm91bmQucmlnaHQgfHwgcmVmUmVjdC50b3AgPiBib3VuZC5ib3R0b20gfHwgcmVmUmVjdC5yaWdodCA8IGJvdW5kLmxlZnQpIHtcbiAgICAvLyBBdm9pZCB1bm5lY2Vzc2FyeSBET00gYWNjZXNzIGlmIHZpc2liaWxpdHkgaGFzbid0IGNoYW5nZWRcbiAgICBpZiAoZGF0YS5oaWRlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSB0cnVlO1xuICAgIGRhdGEuYXR0cmlidXRlc1sneC1vdXQtb2YtYm91bmRhcmllcyddID0gJyc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGRhdGEuaGlkZSA9IGZhbHNlO1xuICAgIGRhdGEuYXR0cmlidXRlc1sneC1vdXQtb2YtYm91bmRhcmllcyddID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaW5uZXIoZGF0YSkge1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICB2YXIgcmVmZXJlbmNlID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucmVmZXJlbmNlKTtcbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbcGxhY2VtZW50XSAtIChzdWJ0cmFjdExlbmd0aCA/IHBvcHBlcltpc0hvcml6ID8gJ3dpZHRoJyA6ICdoZWlnaHQnXSA6IDApO1xuXG4gIGRhdGEucGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldENsaWVudFJlY3QocG9wcGVyKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBNb2RpZmllciBmdW5jdGlvbiwgZWFjaCBtb2RpZmllciBjYW4gaGF2ZSBhIGZ1bmN0aW9uIG9mIHRoaXMgdHlwZSBhc3NpZ25lZFxuICogdG8gaXRzIGBmbmAgcHJvcGVydHkuPGJyIC8+XG4gKiBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCB1cGRhdGUsIHRoaXMgbWVhbnMgdGhhdCB5b3UgbXVzdFxuICogbWFrZSBzdXJlIHRoZXkgYXJlIHBlcmZvcm1hbnQgZW5vdWdoIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuICpcbiAqIEBmdW5jdGlvbiBNb2RpZmllckZuXG4gKiBAYXJndW1lbnQge2RhdGFPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge2RhdGFPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuXG4vKipcbiAqIE1vZGlmaWVycyBhcmUgcGx1Z2lucyB1c2VkIHRvIGFsdGVyIHRoZSBiZWhhdmlvciBvZiB5b3VyIHBvcHBlcnMuPGJyIC8+XG4gKiBQb3BwZXIuanMgdXNlcyBhIHNldCBvZiA5IG1vZGlmaWVycyB0byBwcm92aWRlIGFsbCB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0aWVzXG4gKiBuZWVkZWQgYnkgdGhlIGxpYnJhcnkuXG4gKlxuICogVXN1YWxseSB5b3UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSB0aGUgYG9yZGVyYCwgYGZuYCBhbmQgYG9uTG9hZGAgcHJvcHMuXG4gKiBBbGwgdGhlIG90aGVyIHByb3BlcnRpZXMgYXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgYmUgdHdlYWtlZC5cbiAqIEBuYW1lc3BhY2UgbW9kaWZpZXJzXG4gKi9cbnZhciBtb2RpZmllcnMgPSB7XG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHNoaWZ0IHRoZSBwb3BwZXIgb24gdGhlIHN0YXJ0IG9yIGVuZCBvZiBpdHMgcmVmZXJlbmNlXG4gICAqIGVsZW1lbnQuPGJyIC8+XG4gICAqIEl0IHdpbGwgcmVhZCB0aGUgdmFyaWF0aW9uIG9mIHRoZSBgcGxhY2VtZW50YCBwcm9wZXJ0eS48YnIgLz5cbiAgICogSXQgY2FuIGJlIG9uZSBlaXRoZXIgYC1lbmRgIG9yIGAtc3RhcnRgLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgc2hpZnQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAxMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBzaGlmdFxuICB9LFxuXG4gIC8qKlxuICAgKiBUaGUgYG9mZnNldGAgbW9kaWZpZXIgY2FuIHNoaWZ0IHlvdXIgcG9wcGVyIG9uIGJvdGggaXRzIGF4aXMuXG4gICAqXG4gICAqIEl0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyB1bml0czpcbiAgICogLSBgcHhgIG9yIHVuaXRsZXNzLCBpbnRlcnByZXRlZCBhcyBwaXhlbHNcbiAgICogLSBgJWAgb3IgYCVyYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgKiAtIGAlcGAsIHBlcmNlbnRhZ2UgcmVsYXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogLSBgdndgLCBDU1Mgdmlld3BvcnQgd2lkdGggdW5pdFxuICAgKiAtIGB2aGAsIENTUyB2aWV3cG9ydCBoZWlnaHQgdW5pdFxuICAgKlxuICAgKiBGb3IgbGVuZ3RoIGlzIGludGVuZGVkIHRoZSBtYWluIGF4aXMgcmVsYXRpdmUgdG8gdGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyLjxiciAvPlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHBsYWNlbWVudCBpcyBgdG9wYCBvciBgYm90dG9tYCwgdGhlIGxlbmd0aCB3aWxsIGJlIHRoZVxuICAgKiBgd2lkdGhgLiBJbiBjYXNlIG9mIGBsZWZ0YCBvciBgcmlnaHRgLCBpdCB3aWxsIGJlIHRoZSBoZWlnaHQuXG4gICAqXG4gICAqIFlvdSBjYW4gcHJvdmlkZSBhIHNpbmdsZSB2YWx1ZSAoYXMgYE51bWJlcmAgb3IgYFN0cmluZ2ApLCBvciBhIHBhaXIgb2YgdmFsdWVzXG4gICAqIGFzIGBTdHJpbmdgIGRpdmlkZWQgYnkgYSBjb21tYSBvciBvbmUgKG9yIG1vcmUpIHdoaXRlIHNwYWNlcy48YnIgLz5cbiAgICogVGhlIGxhdHRlciBpcyBhIGRlcHJlY2F0ZWQgbWV0aG9kIGJlY2F1c2UgaXQgbGVhZHMgdG8gY29uZnVzaW9uIGFuZCB3aWxsIGJlXG4gICAqIHJlbW92ZWQgaW4gdjIuPGJyIC8+XG4gICAqIEFkZGl0aW9uYWxseSwgaXQgYWNjZXB0cyBhZGRpdGlvbnMgYW5kIHN1YnRyYWN0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudCB1bml0cy5cbiAgICogTm90ZSB0aGF0IG11bHRpcGxpY2F0aW9ucyBhbmQgZGl2aXNpb25zIGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIFZhbGlkIGV4YW1wbGVzIGFyZTpcbiAgICogYGBgXG4gICAqIDEwXG4gICAqICcxMCUnXG4gICAqICcxMCwgMTAnXG4gICAqICcxMCUsIDEwJ1xuICAgKiAnMTAgKyAxMCUnXG4gICAqICcxMCAtIDV2aCArIDMlJ1xuICAgKiAnLTEwcHggKyA1dmgsIDVweCAtIDYlJ1xuICAgKiBgYGBcbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIG9mZnNldDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj0yMDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDIwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IG9mZnNldCxcbiAgICAvKiogQHByb3Age051bWJlcnxTdHJpbmd9IG9mZnNldD0wXG4gICAgICogVGhlIG9mZnNldCB2YWx1ZSBhcyBkZXNjcmliZWQgaW4gdGhlIG1vZGlmaWVyIGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgb2Zmc2V0OiAwXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gcHJldmVudCB0aGUgcG9wcGVyIGZyb20gYmVpbmcgcG9zaXRpb25lZCBvdXRzaWRlIHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQW4gc2NlbmFyaW8gZXhpc3RzIHdoZXJlIHRoZSByZWZlcmVuY2UgaXRzZWxmIGlzIG5vdCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuPGJyIC8+XG4gICAqIFdlIGNhbiBzYXkgaXQgaGFzIFwiZXNjYXBlZCB0aGUgYm91bmRhcmllc1wiIOKAlCBvciBqdXN0IFwiZXNjYXBlZFwiLjxiciAvPlxuICAgKiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgcG9wcGVyIHNob3VsZCBlaXRoZXI6XG4gICAqXG4gICAqIC0gZGV0YWNoIGZyb20gdGhlIHJlZmVyZW5jZSBhbmQgcmVtYWluIFwidHJhcHBlZFwiIGluIHRoZSBib3VuZGFyaWVzLCBvclxuICAgKiAtIGlmIGl0IHNob3VsZCBpZ25vcmUgdGhlIGJvdW5kYXJ5IGFuZCBcImVzY2FwZSB3aXRoIGl0cyByZWZlcmVuY2VcIlxuICAgKlxuICAgKiBXaGVuIGBlc2NhcGVXaXRoUmVmZXJlbmNlYCBpcyBzZXQgdG9gdHJ1ZWAgYW5kIHJlZmVyZW5jZSBpcyBjb21wbGV0ZWx5XG4gICAqIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMsIHRoZSBwb3BwZXIgd2lsbCBvdmVyZmxvdyAob3IgY29tcGxldGVseSBsZWF2ZSlcbiAgICogdGhlIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gcmVtYWluIGF0dGFjaGVkIHRvIHRoZSBlZGdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAzMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gICAgLyoqXG4gICAgICogQHByb3Age0FycmF5fSBwcmlvcml0eT1bJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddXG4gICAgICogUG9wcGVyIHdpbGwgdHJ5IHRvIHByZXZlbnQgb3ZlcmZsb3cgZm9sbG93aW5nIHRoZXNlIHByaW9yaXRpZXMgYnkgZGVmYXVsdCxcbiAgICAgKiB0aGVuLCBpdCBjb3VsZCBvdmVyZmxvdyBvbiB0aGUgbGVmdCBhbmQgb24gdG9wIG9mIHRoZSBgYm91bmRhcmllc0VsZW1lbnRgXG4gICAgICovXG4gICAgcHJpb3JpdHk6IFsnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJ10sXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogQW1vdW50IG9mIHBpeGVsIHVzZWQgdG8gZGVmaW5lIGEgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3VuZGFyaWVzXG4gICAgICogYW5kIHRoZSBwb3BwZXIgdGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgaGFzIGFsd2F5cyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLCBjYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNob3RoZXJzXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXhwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gYXNzdXJlIGl0IHRvIHBvaW50IHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcywgeW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVjdGlvbiBhcmUgbmVlZGVkLlxuICAgKlxuICAgKiBJdCBoYXMgbm8gZWZmZWN0IGlmIG5vIGBhcnJvd0VsZW1lbnRgIGlzIHByb3ZpZGVkLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgYXJyb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA1MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcnJvdyxcbiAgICAvKiogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gZWxlbWVudD0nW3gtYXJyb3ddJyAtIFNlbGVjdG9yIG9yIG5vZGUgdXNlZCBhcyBhcnJvdyAqL1xuICAgIGVsZW1lbnQ6ICdbeC1hcnJvd10nXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gZmxpcCB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50IHdoZW4gaXQgc3RhcnRzIHRvIG92ZXJsYXAgaXRzXG4gICAqIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYHByZXZlbnRPdmVyZmxvd2AgbW9kaWZpZXIgYmVmb3JlIGl0IGluIG9yZGVyIHRvIHdvcmsuXG4gICAqXG4gICAqICoqTk9URToqKiB0aGlzIG1vZGlmaWVyIHdpbGwgaW50ZXJydXB0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZSBhbmQgd2lsbFxuICAgKiByZXN0YXJ0IGl0IGlmIGl0IGRldGVjdHMgdGhlIG5lZWQgdG8gZmxpcCB0aGUgcGxhY2VtZW50LlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgZmxpcDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj02MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDYwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGZsaXAsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xBcnJheX0gYmVoYXZpb3I9J2ZsaXAnXG4gICAgICogVGhlIGJlaGF2aW9yIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3BwZXIncyBwbGFjZW1lbnQuIEl0IGNhbiBiZSBvbmUgb2ZcbiAgICAgKiBgZmxpcGAsIGBjbG9ja3dpc2VgLCBgY291bnRlcmNsb2Nrd2lzZWAgb3IgYW4gYXJyYXkgd2l0aCBhIGxpc3Qgb2YgdmFsaWRcbiAgICAgKiBwbGFjZW1lbnRzICh3aXRoIG9wdGlvbmFsIHZhcmlhdGlvbnMpLlxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLFxuICAgICAqIHRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBrZWVwVG9nZXRoZXIgaXMgZW5hYmxlZClcbiAgICAgKi9cbiAgICBib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2UgdGhlIHBvcHBlciBmbG93IHRvd2FyZCB0aGUgaW5uZXIgb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB3aGVuIHRoaXMgbW9kaWZpZXIgaXMgZGlzYWJsZWQsIHRoZSBwb3BwZXIgd2lsbCBiZSBwbGFjZWQgb3V0c2lkZVxuICAgKiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBpbm5lcjoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj03MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDcwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9ZmFsc2UgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogaW5uZXJcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBoaWRlIHRoZSBwb3BwZXIgd2hlbiBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGVcbiAgICogcG9wcGVyIGJvdW5kYXJpZXMuIEl0IHdpbGwgc2V0IGEgYHgtb3V0LW9mLWJvdW5kYXJpZXNgIGF0dHJpYnV0ZSB3aGljaCBjYW5cbiAgICogYmUgdXNlZCB0byBoaWRlIHdpdGggYSBDU1Mgc2VsZWN0b3IgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgaXNcbiAgICogb3V0IG9mIGJvdW5kYXJpZXMuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgcHJldmVudE92ZXJmbG93YCBtb2RpZmllciBiZWZvcmUgaXQgaW4gb3JkZXIgdG8gd29yay5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGhpZGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9ODAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA4MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBoaWRlXG4gIH0sXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGNvbXB1dGVkIHN0eWxlcyB0byB0aGUgcG9wcGVyIGVsZW1lbnQuXG4gICAqXG4gICAqIEFsbCB0aGUgRE9NIG1hbmlwdWxhdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhpcyBtb2RpZmllci4gVGhpcyBpcyB1c2VmdWwgaW4gY2FzZVxuICAgKiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgUG9wcGVyLmpzIGluc2lkZSBhIGZyYW1ld29yayBvciB2aWV3IGxpYnJhcnkgYW5kIHlvdVxuICAgKiB3YW50IHRvIGRlbGVnYXRlIGFsbCB0aGUgRE9NIG1hbmlwdWxhdGlvbnMgdG8gaXQuXG4gICAqXG4gICAqIEp1c3QgZGlzYWJsZSB0aGlzIG1vZGlmaWVyIGFuZCBkZWZpbmUgeW91IG93biB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFwcGx5U3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9OTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA5MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcHBseVN0eWxlLFxuICAgIC8qKiBAcHJvcCB7RnVuY3Rpb259ICovXG4gICAgb25Mb2FkOiBhcHBseVN0eWxlT25Mb2FkLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzZCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHRydWVcbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgYGRhdGFPYmplY3RgIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgaW5mb3JtYXRpb25zIHVzZWQgYnkgUG9wcGVyLmpzXG4gKiB0aGlzIG9iamVjdCBnZXQgcGFzc2VkIHRvIG1vZGlmaWVycyBhbmQgdG8gdGhlIGBvbkNyZWF0ZWAgYW5kIGBvblVwZGF0ZWAgY2FsbGJhY2tzLlxuICogQG5hbWUgZGF0YU9iamVjdFxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuaW5zdGFuY2UgVGhlIFBvcHBlci5qcyBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEucGxhY2VtZW50IFBsYWNlbWVudCBhcHBsaWVkIHRvIHBvcHBlclxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEub3JpZ2luYWxQbGFjZW1lbnQgUGxhY2VtZW50IG9yaWdpbmFsbHkgZGVmaW5lZCBvbiBpbml0XG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuZmxpcHBlZCBUcnVlIGlmIHBvcHBlciBoYXMgYmVlbiBmbGlwcGVkIGJ5IGZsaXAgbW9kaWZpZXJcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGF0YS5oaWRlIFRydWUgaWYgdGhlIHJlZmVyZW5jZSBlbGVtZW50IGlzIG91dCBvZiBib3VuZGFyaWVzLCB1c2VmdWwgdG8ga25vdyB3aGVuIHRvIGhpZGUgdGhlIHBvcHBlci5cbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IGRhdGEuYXJyb3dFbGVtZW50IE5vZGUgdXNlZCBhcyBhcnJvdyBieSBhcnJvdyBtb2RpZmllclxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuc3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLCBpdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYm91bmRhcmllcyBPZmZzZXRzIG9mIHRoZSBwb3BwZXIgYm91bmRhcmllc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cyBUaGUgbWVhc3VyZW1lbnRzIG9mIHBvcHBlciwgcmVmZXJlbmNlIGFuZCBhcnJvdyBlbGVtZW50cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucG9wcGVyIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgYHRvcGAsIGBsZWZ0YCwgYHdpZHRoYCwgYGhlaWdodGAgdmFsdWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLmFycm9dIGB0b3BgIGFuZCBgbGVmdGAgb2Zmc2V0cywgb25seSBvbmUgb2YgdGhlbSB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIDBcbiAqL1xuXG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBwcm92aWRlZCB0byBQb3BwZXIuanMgY29uc3RydWN0b3IuPGJyIC8+XG4gKiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGVuIHVzaW5nIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgb2YgUG9wcGVyLmpzLjxiciAvPlxuICogVG8gb3ZlcnJpZGUgYW4gb3B0aW9uLCBzaW1wbHkgcGFzcyBhcyAzcmQgYXJndW1lbnQgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWVcbiAqIHN0cnVjdHVyZSBvZiB0aGlzIG9iamVjdCwgZXhhbXBsZTpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWYsIHBvcCwge1xuICogICBtb2RpZmllcnM6IHtcbiAqICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHN0YXRpY1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgREVGQVVMVFMgPSB7XG4gIC8qKlxuICAgKiBQb3BwZXIncyBwbGFjZW1lbnRcbiAgICogQHByb3Age1BvcHBlci5wbGFjZW1lbnRzfSBwbGFjZW1lbnQ9J2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkXG4gICAqIEBwcm9wIHtCb29sZWFufSBldmVudHNFbmFibGVkPXRydWVcbiAgICovXG4gIGV2ZW50c0VuYWJsZWQ6IHRydWUsXG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBwb3BwZXIgd2hlblxuICAgKiB5b3UgY2FsbCB0aGUgYGRlc3Ryb3lgIG1ldGhvZC5cbiAgICogQHByb3Age0Jvb2xlYW59IHJlbW92ZU9uRGVzdHJveT1mYWxzZVxuICAgKi9cbiAgcmVtb3ZlT25EZXN0cm95OiBmYWxzZSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyBjcmVhdGVkLjxiciAvPlxuICAgKiBCeSBkZWZhdWx0LCBpcyBzZXQgdG8gbm8tb3AuPGJyIC8+XG4gICAqIEFjY2VzcyBQb3BwZXIuanMgaW5zdGFuY2Ugd2l0aCBgZGF0YS5pbnN0YW5jZWAuXG4gICAqIEBwcm9wIHtvbkNyZWF0ZUNhbGxiYWNrfVxuICAgKi9cbiAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKCkge30sXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgdXBkYXRlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgY2FsbGVkXG4gICAqIG9uIHRoZSBpbml0aWFsaXphdGlvbi9jcmVhdGlvbiBvZiB0aGUgcG9wcGVyLCBidXQgb25seSBvbiBzdWJzZXF1ZW50XG4gICAqIHVwZGF0ZXMuPGJyIC8+XG4gICAqIEJ5IGRlZmF1bHQsIGlzIHNldCB0byBuby1vcC48YnIgLz5cbiAgICogQWNjZXNzIFBvcHBlci5qcyBpbnN0YW5jZSB3aXRoIGBkYXRhLmluc3RhbmNlYC5cbiAgICogQHByb3Age29uVXBkYXRlQ2FsbGJhY2t9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanNcbiAgICogQHByb3Age21vZGlmaWVyc31cbiAgICovXG4gIG1vZGlmaWVyczogbW9kaWZpZXJzXG59O1xuXG4vKipcbiAqIEBjYWxsYmFjayBvbkNyZWF0ZUNhbGxiYWNrXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBvblVwZGF0ZUNhbGxiYWNrXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vLyBVdGlsc1xuLy8gTWV0aG9kc1xudmFyIFBvcHBlciA9XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBjbGFzcyBQb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8cmVmZXJlbmNlT2JqZWN0fSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIGVsZW1lbnQgdXNlZCB0byBwb3NpdGlvbiB0aGUgcG9wcGVyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXIgLSBUaGUgSFRNTCBlbGVtZW50IHVzZWQgYXMgcG9wcGVyLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBZb3VyIGN1c3RvbSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4gW0RFRkFVTFRTXSgjZGVmYXVsdHMpXG4gKiBAcmV0dXJuIHtPYmplY3R9IGluc3RhbmNlIC0gVGhlIGdlbmVyYXRlZCBQb3BwZXIuanMgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICBjbGFzc0NhbGxDaGVjayh0aGlzLCBQb3BwZXIpO1xuICB0aGlzLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgdGhpcy5kZXN0cm95ID0gZGVzdHJveTtcbiAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycyA9IGVuYWJsZUV2ZW50TGlzdGVuZXJzO1xuICB0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycyA9IGRpc2FibGVFdmVudExpc3RlbmVycztcblxuICB0aGlzLnNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudXBkYXRlKTtcbiAgfTtcblxuICAvLyBtYWtlIHVwZGF0ZSgpIGRlYm91bmNlZCwgc28gdGhhdCBpdCBvbmx5IHJ1bnMgYXQgbW9zdCBvbmNlLXBlci10aWNrXG4gIHRoaXMudXBkYXRlID0gZGVib3VuY2UodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgLy8gd2l0aCB7fSB3ZSBjcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdGhlIG9wdGlvbnMgaW5zaWRlIGl0XG4gIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMsIG9wdGlvbnMpO1xuXG4gIC8vIGluaXQgc3RhdGVcbiAgdGhpcy5zdGF0ZSA9IHtcbiAgICBpc0Rlc3Ryb3llZDogZmFsc2UsXG4gICAgaXNDcmVhdGVkOiBmYWxzZSxcbiAgICBzY3JvbGxQYXJlbnRzOiBbXVxuICB9O1xuXG4gIC8vIGdldCByZWZlcmVuY2UgYW5kIHBvcHBlciBlbGVtZW50cyAoYWxsb3cgalF1ZXJ5IHdyYXBwZXJzKVxuICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZS5qcXVlcnkgPyByZWZlcmVuY2VbMF0gOiByZWZlcmVuY2U7XG4gIHRoaXMucG9wcGVyID0gcG9wcGVyLmpxdWVyeSA/IHBvcHBlclswXSA6IHBvcHBlcjtcblxuICAvLyBtYWtlIHN1cmUgdG8gYXBwbHkgdGhlIHBvcHBlciBwb3NpdGlvbiBiZWZvcmUgYW55IGNvbXB1dGF0aW9uXG4gIHNldFN0eWxlcyh0aGlzLnBvcHBlciwgeyBwb3NpdGlvbjogJ2Fic29sdXRlJyB9KTtcblxuICAvLyByZWZhY3RvcmluZyBtb2RpZmllcnMnIGxpc3QgKE9iamVjdCA9PiBBcnJheSlcbiAgdGhpcy5tb2RpZmllcnMgPSBPYmplY3Qua2V5cyhQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgbmFtZTogbmFtZVxuICAgIH0sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnNbbmFtZV0pO1xuICB9KTtcblxuICAvLyBhc3NpZ24gZGVmYXVsdCB2YWx1ZXMgdG8gbW9kaWZpZXJzLCBtYWtpbmcgc3VyZSB0byBvdmVycmlkZSB0aGVtIHdpdGhcbiAgLy8gdGhlIG9uZXMgZGVmaW5lZCBieSB1c2VyXG4gIHRoaXMubW9kaWZpZXJzID0gdGhpcy5tb2RpZmllcnMubWFwKGZ1bmN0aW9uIChkZWZhdWx0Q29uZmlnKSB7XG4gICAgdmFyIHVzZXJDb25maWcgPSBvcHRpb25zLm1vZGlmaWVycyAmJiBvcHRpb25zLm1vZGlmaWVyc1tkZWZhdWx0Q29uZmlnLm5hbWVdIHx8IHt9O1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdENvbmZpZywgdXNlckNvbmZpZyk7XG4gIH0pO1xuXG4gIC8vIGFkZCBjdXN0b20gbW9kaWZpZXJzIHRvIHRoZSBtb2RpZmllcnMgbGlzdFxuICBpZiAob3B0aW9ucy5tb2RpZmllcnMpIHtcbiAgICB0aGlzLm9wdGlvbnMubW9kaWZpZXJzID0gX2V4dGVuZHMoe30sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnMsIG9wdGlvbnMubW9kaWZpZXJzKTtcbiAgICBPYmplY3Qua2V5cyhvcHRpb25zLm1vZGlmaWVycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgLy8gdGFrZSBpbiBhY2NvdW50IG9ubHkgY3VzdG9tIG1vZGlmaWVyc1xuICAgICAgaWYgKFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbW9kaWZpZXIgPSBvcHRpb25zLm1vZGlmaWVyc1tuYW1lXTtcbiAgICAgICAgbW9kaWZpZXIubmFtZSA9IG5hbWU7XG4gICAgICAgIF90aGlzLm1vZGlmaWVycy5wdXNoKG1vZGlmaWVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNvcnQgdGhlIG1vZGlmaWVycyBieSBvcmRlclxuICB0aGlzLm1vZGlmaWVycyA9IHRoaXMubW9kaWZpZXJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gIH0pO1xuXG4gIC8vIG1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgd2hlbiBQb3BwZXIuanMgZ2V0IGluaXRlZFxuICAvLyBzdWNoIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgb2YgaXRzIG1vZGlmaWVyXG4gIC8vIHRoZXkgY291bGQgYWRkIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZWlyIG9wdGlvbnMgY29uZmlndXJhdGlvblxuICAvLyBCRSBBV0FSRTogZG9uJ3QgYWRkIG9wdGlvbnMgdG8gYG9wdGlvbnMubW9kaWZpZXJzLm5hbWVgIGJ1dCB0byBgbW9kaWZpZXJPcHRpb25zYCFcbiAgdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXJPcHRpb25zKSB7XG4gICAgaWYgKG1vZGlmaWVyT3B0aW9ucy5lbmFibGVkICYmIGlzRnVuY3Rpb24obW9kaWZpZXJPcHRpb25zLm9uTG9hZCkpIHtcbiAgICAgIG1vZGlmaWVyT3B0aW9ucy5vbkxvYWQoX3RoaXMucmVmZXJlbmNlLCBfdGhpcy5wb3BwZXIsIF90aGlzLm9wdGlvbnMsIG1vZGlmaWVyT3B0aW9ucywgX3RoaXMuc3RhdGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZmlyZSB0aGUgZmlyc3QgdXBkYXRlIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIgaW4gdGhlIHJpZ2h0IHBsYWNlXG4gIHRoaXMudXBkYXRlKCk7XG5cbiAgdmFyIGV2ZW50c0VuYWJsZWQgPSB0aGlzLm9wdGlvbnMuZXZlbnRzRW5hYmxlZDtcbiAgaWYgKGV2ZW50c0VuYWJsZWQpIHtcbiAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkID0gZXZlbnRzRW5hYmxlZDtcbn07XG5cbi8qKlxuICogVGhlIGByZWZlcmVuY2VPYmplY3RgIGlzIGFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIGFuIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggUG9wcGVyLmpzXG4gKiBhbmQgbGV0cyB5b3UgdXNlIGl0IGFzIHJlcGxhY2VtZW50IG9mIGEgcmVhbCBET00gbm9kZS48YnIgLz5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIHBvc2l0aW9uIGEgcG9wcGVyIHJlbGF0aXZlbHkgdG8gYSBzZXQgb2YgY29vcmRpbmF0ZXNcbiAqIGluIGNhc2UgeW91IGRvbid0IGhhdmUgYSBET00gbm9kZSB0byB1c2UgYXMgcmVmZXJlbmNlLlxuICpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWZlcmVuY2VPYmplY3QsIHBvcHBlck5vZGUpO1xuICogYGBgXG4gKlxuICogTkI6IFRoaXMgZmVhdHVyZSBpc24ndCBzdXBwb3J0ZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTBcbiAqIEBuYW1lIHJlZmVyZW5jZU9iamVjdFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZGF0YS5nZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRhLmNsaWVudFdpZHRoXG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50SGVpZ2h0XG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgdmlydHVhbCByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuXG5cblBvcHBlci5VdGlscyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCkuUG9wcGVyVXRpbHM7XG5Qb3BwZXIucGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5Qb3BwZXIuRGVmYXVsdHMgPSBERUZBVUxUUztcblxuZXhwb3J0IGRlZmF1bHQgUG9wcGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9wcGVyLmpzLm1hcFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9wb3BwZXIuanMvZGlzdC9lc20vcG9wcGVyLmpzIiwiaW1wb3J0IFBvcHBlciBmcm9tICdwb3BwZXIuanMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQgeyp9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICB2YXIgZ2V0VHlwZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cblxuXG5cblxuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgY29udGFpbmVyOiBmYWxzZSxcbiAgZGVsYXk6IDAsXG4gIGh0bWw6IGZhbHNlLFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICB0aXRsZTogJycsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLFxuICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxuICBvZmZzZXQ6IDBcbn07XG5cbnZhciBUb29sdGlwID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFRvb2x0aXAuanMgaW5zdGFuY2VcbiAgICogQGNsYXNzIFRvb2x0aXBcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSBlbGVtZW50IHVzZWQgdG8gcG9zaXRpb24gdGhlIHRvb2x0aXBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMucGxhY2VtZW50PWJvdHRvbVxuICAgKiAgICAgIFBsYWNlbWVudCBvZiB0aGUgcG9wcGVyIGFjY2VwdGVkIHZhbHVlczogYHRvcCgtc3RhcnQsIC1lbmQpLCByaWdodCgtc3RhcnQsIC1lbmQpLCBib3R0b20oLXN0YXJ0LCAtZW5kKSxcbiAgICogICAgICBsZWZ0KC1zdGFydCwgLWVuZClgXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSBET00gbm9kZSB1c2VkIGFzIHJlZmVyZW5jZSBvZiB0aGUgdG9vbHRpcCAoaXQgY2FuIGJlIGEgalF1ZXJ5IGVsZW1lbnQpLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudHxTdHJpbmd8ZmFsc2V9IG9wdGlvbnMuY29udGFpbmVyPWZhbHNlIC0gQXBwZW5kIHRoZSB0b29sdGlwIHRvIGEgc3BlY2lmaWMgZWxlbWVudC5cbiAgICogQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBvcHRpb25zLmRlbGF5PTBcbiAgICogICAgICBEZWxheSBzaG93aW5nIGFuZCBoaWRpbmcgdGhlIHRvb2x0aXAgKG1zKSAtIGRvZXMgbm90IGFwcGx5IHRvIG1hbnVhbCB0cmlnZ2VyIHR5cGUuXG4gICAqICAgICAgSWYgYSBudW1iZXIgaXMgc3VwcGxpZWQsIGRlbGF5IGlzIGFwcGxpZWQgdG8gYm90aCBoaWRlL3Nob3cuXG4gICAqICAgICAgT2JqZWN0IHN0cnVjdHVyZSBpczogYHsgc2hvdzogNTAwLCBoaWRlOiAxMDAgfWBcbiAgICogQHBhcmFtIHtCb29sZWFufSBvcHRpb25zLmh0bWw9ZmFsc2UgLSBJbnNlcnQgSFRNTCBpbnRvIHRoZSB0b29sdGlwLiBJZiBmYWxzZSwgdGhlIGNvbnRlbnQgd2lsbCBpbnNlcnRlZCB3aXRoIGBpbm5lclRleHRgLlxuICAgKiBAcGFyYW0ge1N0cmluZ3xQbGFjZW1lbnRGdW5jdGlvbn0gb3B0aW9ucy5wbGFjZW1lbnQ9J3RvcCcgLSBPbmUgb2YgdGhlIGFsbG93ZWQgcGxhY2VtZW50cywgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgb25lIG9mIHRoZW0uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnRlbXBsYXRlPSc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj48ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PjwvZGl2PidcbiAgICogICAgICBCYXNlIEhUTUwgdG8gdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSB0b29sdGlwLlxuICAgKiAgICAgIFRoZSB0b29sdGlwJ3MgYHRpdGxlYCB3aWxsIGJlIGluamVjdGVkIGludG8gdGhlIGAudG9vbHRpcC1pbm5lcmAgb3IgYC50b29sdGlwX19pbm5lcmAuXG4gICAqICAgICAgYC50b29sdGlwLWFycm93YCBvciBgLnRvb2x0aXBfX2Fycm93YCB3aWxsIGJlY29tZSB0aGUgdG9vbHRpcCdzIGFycm93LlxuICAgKiAgICAgIFRoZSBvdXRlcm1vc3Qgd3JhcHBlciBlbGVtZW50IHNob3VsZCBoYXZlIHRoZSBgLnRvb2x0aXBgIGNsYXNzLlxuICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudHxUaXRsZUZ1bmN0aW9ufSBvcHRpb25zLnRpdGxlPScnIC0gRGVmYXVsdCB0aXRsZSB2YWx1ZSBpZiBgdGl0bGVgIGF0dHJpYnV0ZSBpc24ndCBwcmVzZW50LlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy50cmlnZ2VyPSdob3ZlciBmb2N1cydcbiAgICogICAgICBIb3cgdG9vbHRpcCBpcyB0cmlnZ2VyZWQgLSBjbGljayB8IGhvdmVyIHwgZm9jdXMgfCBtYW51YWwuXG4gICAqICAgICAgWW91IG1heSBwYXNzIG11bHRpcGxlIHRyaWdnZXJzOyBzZXBhcmF0ZSB0aGVtIHdpdGggYSBzcGFjZS4gYG1hbnVhbGAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIHRyaWdnZXIuXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnRcbiAgICogICAgICBUaGUgZWxlbWVudCB1c2VkIGFzIGJvdW5kYXJpZXMgZm9yIHRoZSB0b29sdGlwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBQb3BwZXIuanMnXG4gICAqICAgICAgW2JvdW5kYXJpZXNFbGVtZW50IGRvY3NdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9wb3BwZXItZG9jdW1lbnRhdGlvbi5odG1sKVxuICAgKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTAgLSBPZmZzZXQgb2YgdGhlIHRvb2x0aXAgcmVsYXRpdmUgdG8gaXRzIHJlZmVyZW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gUG9wcGVyLmpzJ1xuICAgKiAgICAgIFtvZmZzZXQgZG9jc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL3BvcHBlci1kb2N1bWVudGF0aW9uLmh0bWwpXG4gICAqIEByZXR1cm4ge09iamVjdH0gaW5zdGFuY2UgLSBUaGUgZ2VuZXJhdGVkIHRvb2x0aXAgaW5zdGFuY2VcbiAgICovXG4gIGZ1bmN0aW9uIFRvb2x0aXAocmVmZXJlbmNlLCBvcHRpb25zKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9vbHRpcCk7XG5cbiAgICBfaW5pdGlhbGlzZVByb3BzLmNhbGwodGhpcyk7XG5cbiAgICAvLyBhcHBseSB1c2VyIG9wdGlvbnMgb3ZlciBkZWZhdWx0IG9uZXNcbiAgICBvcHRpb25zID0gX2V4dGVuZHMoe30sIERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XG5cbiAgICByZWZlcmVuY2UuanF1ZXJ5ICYmIChyZWZlcmVuY2UgPSByZWZlcmVuY2VbMF0pO1xuXG4gICAgLy8gY2FjaGUgcmVmZXJlbmNlIGFuZCBvcHRpb25zXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIGdldCBldmVudHMgbGlzdFxuICAgIHZhciBldmVudHMgPSB0eXBlb2Ygb3B0aW9ucy50cmlnZ2VyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudHJpZ2dlci5zcGxpdCgnICcpLmZpbHRlcihmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgcmV0dXJuIFsnY2xpY2snLCAnaG92ZXInLCAnZm9jdXMnXS5pbmRleE9mKHRyaWdnZXIpICE9PSAtMTtcbiAgICB9KSA6IFtdO1xuXG4gICAgLy8gc2V0IGluaXRpYWwgc3RhdGVcbiAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcblxuICAgIC8vIHNldCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9zZXRFdmVudExpc3RlbmVycyhyZWZlcmVuY2UsIGV2ZW50cywgb3B0aW9ucyk7XG4gIH1cblxuICAvL1xuICAvLyBQdWJsaWMgbWV0aG9kc1xuICAvL1xuXG4gIC8qKlxuICAgKiBSZXZlYWxzIGFuIGVsZW1lbnQncyB0b29sdGlwLiBUaGlzIGlzIGNvbnNpZGVyZWQgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcgb2YgdGhlIHRvb2x0aXAuXG4gICAqIFRvb2x0aXBzIHdpdGggemVyby1sZW5ndGggdGl0bGVzIGFyZSBuZXZlciBkaXNwbGF5ZWQuXG4gICAqIEBtZW1iZXJvZiBUb29sdGlwXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIEhpZGVzIGFuIGVsZW1lbnTigJlzIHRvb2x0aXAuIFRoaXMgaXMgY29uc2lkZXJlZCBhIOKAnG1hbnVhbOKAnSB0cmlnZ2VyaW5nIG9mIHRoZSB0b29sdGlwLlxuICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBIaWRlcyBhbmQgZGVzdHJveXMgYW4gZWxlbWVudOKAmXMgdG9vbHRpcC5cbiAgICogQG1lbWJlcm9mIFRvb2x0aXBcbiAgICovXG5cblxuICAvKipcbiAgICogVG9nZ2xlcyBhbiBlbGVtZW504oCZcyB0b29sdGlwLiBUaGlzIGlzIGNvbnNpZGVyZWQgYSDigJxtYW51YWzigJ0gdHJpZ2dlcmluZyBvZiB0aGUgdG9vbHRpcC5cbiAgICogQG1lbWJlcm9mIFRvb2x0aXBcbiAgICovXG5cblxuICAvL1xuICAvLyBEZWZhdWx0c1xuICAvL1xuXG5cbiAgLy9cbiAgLy8gUHJpdmF0ZSBtZXRob2RzXG4gIC8vXG5cbiAgY3JlYXRlQ2xhc3MoVG9vbHRpcCwgW3tcbiAgICBrZXk6ICdfY3JlYXRlJyxcblxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB0b29sdGlwIG5vZGVcbiAgICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlXG4gICAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8VGl0bGVGdW5jdGlvbn0gdGl0bGVcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFsbG93SHRtbFxuICAgICAqIEByZXR1cm4ge0hUTUxlbGVtZW50fSB0b29sdGlwTm9kZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlKHJlZmVyZW5jZSwgdGVtcGxhdGUsIHRpdGxlLCBhbGxvd0h0bWwpIHtcbiAgICAgIC8vIGNyZWF0ZSB0b29sdGlwIGVsZW1lbnRcbiAgICAgIHZhciB0b29sdGlwR2VuZXJhdG9yID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdG9vbHRpcEdlbmVyYXRvci5pbm5lckhUTUwgPSB0ZW1wbGF0ZTtcbiAgICAgIHZhciB0b29sdGlwTm9kZSA9IHRvb2x0aXBHZW5lcmF0b3IuY2hpbGROb2Rlc1swXTtcblxuICAgICAgLy8gYWRkIHVuaXF1ZSBJRCB0byBvdXIgdG9vbHRpcCAobmVlZGVkIGZvciBhY2Nlc3NpYmlsaXR5IHJlYXNvbnMpXG4gICAgICB0b29sdGlwTm9kZS5pZCA9ICd0b29sdGlwXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgMTApO1xuXG4gICAgICAvLyBzZXQgaW5pdGlhbCBgYXJpYS1oaWRkZW5gIHN0YXRlIHRvIGBmYWxzZWAgKGl0J3MgdmlzaWJsZSEpXG4gICAgICB0b29sdGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG5cbiAgICAgIC8vIGFkZCB0aXRsZSB0byB0b29sdGlwXG4gICAgICB2YXIgdGl0bGVOb2RlID0gdG9vbHRpcEdlbmVyYXRvci5xdWVyeVNlbGVjdG9yKHRoaXMuaW5uZXJTZWxlY3Rvcik7XG4gICAgICBpZiAodGl0bGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgLy8gaWYgdGl0bGUgaXMgYSBub2RlLCBhcHBlbmQgaXQgb25seSBpZiBhbGxvd0h0bWwgaXMgdHJ1ZVxuICAgICAgICBhbGxvd0h0bWwgJiYgdGl0bGVOb2RlLmFwcGVuZENoaWxkKHRpdGxlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aXRsZSkpIHtcbiAgICAgICAgLy8gaWYgdGl0bGUgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBhbmQgc2V0IGlubmVyVGV4dCBvciBpbm5lckh0bWwgZGVwZW5kaW5nIGJ5IGBhbGxvd0h0bWxgIHZhbHVlXG4gICAgICAgIHZhciB0aXRsZVRleHQgPSB0aXRsZS5jYWxsKHJlZmVyZW5jZSk7XG4gICAgICAgIGFsbG93SHRtbCA/IHRpdGxlTm9kZS5pbm5lckhUTUwgPSB0aXRsZVRleHQgOiB0aXRsZU5vZGUuaW5uZXJUZXh0ID0gdGl0bGVUZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgaXQncyBqdXN0IGEgc2ltcGxlIHRleHQsIHNldCBpbm5lclRleHQgb3IgaW5uZXJIdG1sIGRlcGVuZGluZyBieSBgYWxsb3dIdG1sYCB2YWx1ZVxuICAgICAgICBhbGxvd0h0bWwgPyB0aXRsZU5vZGUuaW5uZXJIVE1MID0gdGl0bGUgOiB0aXRsZU5vZGUuaW5uZXJUZXh0ID0gdGl0bGU7XG4gICAgICB9XG5cbiAgICAgIC8vIHJldHVybiB0aGUgZ2VuZXJhdGVkIHRvb2x0aXAgbm9kZVxuICAgICAgcmV0dXJuIHRvb2x0aXBOb2RlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19zaG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3Nob3cocmVmZXJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAvLyBkb24ndCBzaG93IGlmIGl0J3MgYWxyZWFkeSB2aXNpYmxlXG4gICAgICBpZiAodGhpcy5faXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcblxuICAgICAgLy8gaWYgdGhlIHRvb2x0aXBOb2RlIGFscmVhZHkgZXhpc3RzLCBqdXN0IHNob3cgaXRcbiAgICAgIGlmICh0aGlzLl90b29sdGlwTm9kZSkge1xuICAgICAgICB0aGlzLl90b29sdGlwTm9kZS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgICAgdGhpcy5wb3BwZXJJbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aXRsZVxuICAgICAgdmFyIHRpdGxlID0gcmVmZXJlbmNlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSB8fCBvcHRpb25zLnRpdGxlO1xuXG4gICAgICAvLyBkb24ndCBzaG93IHRvb2x0aXAgaWYgbm8gdGl0bGUgaXMgZGVmaW5lZFxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIHRvb2x0aXAgbm9kZVxuICAgICAgdmFyIHRvb2x0aXBOb2RlID0gdGhpcy5fY3JlYXRlKHJlZmVyZW5jZSwgb3B0aW9ucy50ZW1wbGF0ZSwgdGl0bGUsIG9wdGlvbnMuaHRtbCk7XG5cbiAgICAgIC8vIEFkZCBgYXJpYS1kZXNjcmliZWRieWAgdG8gb3VyIHJlZmVyZW5jZSBlbGVtZW50IGZvciBhY2Nlc3NpYmlsaXR5IHJlYXNvbnNcbiAgICAgIHRvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRvb2x0aXBOb2RlLmlkKTtcblxuICAgICAgLy8gYXBwZW5kIHRvb2x0aXAgdG8gY29udGFpbmVyXG4gICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fZmluZENvbnRhaW5lcihvcHRpb25zLmNvbnRhaW5lciwgcmVmZXJlbmNlKTtcblxuICAgICAgdGhpcy5fYXBwZW5kKHRvb2x0aXBOb2RlLCBjb250YWluZXIpO1xuXG4gICAgICB2YXIgcG9wcGVyT3B0aW9ucyA9IHtcbiAgICAgICAgcGxhY2VtZW50OiBvcHRpb25zLnBsYWNlbWVudCxcbiAgICAgICAgYXJyb3dFbGVtZW50OiB0aGlzLmFycm93U2VsZWN0b3JcbiAgICAgIH07XG5cbiAgICAgIGlmIChvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50KSB7XG4gICAgICAgIHBvcHBlck9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcHBlckluc3RhbmNlID0gbmV3IFBvcHBlcihyZWZlcmVuY2UsIHRvb2x0aXBOb2RlLCBwb3BwZXJPcHRpb25zKTtcblxuICAgICAgdGhpcy5fdG9vbHRpcE5vZGUgPSB0b29sdGlwTm9kZTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2hpZGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGlkZSgpIC8qcmVmZXJlbmNlLCBvcHRpb25zKi97XG4gICAgICAvLyBkb24ndCBoaWRlIGlmIGl0J3MgYWxyZWFkeSBoaWRkZW5cbiAgICAgIGlmICghdGhpcy5faXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcblxuICAgICAgLy8gaGlkZSB0b29sdGlwTm9kZVxuICAgICAgdGhpcy5fdG9vbHRpcE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuX3Rvb2x0aXBOb2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZGlzcG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kaXNwb3NlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX3Rvb2x0aXBOb2RlKSB7XG4gICAgICAgIHRoaXMuX2hpZGUoKTtcblxuICAgICAgICAvLyBkZXN0cm95IGluc3RhbmNlXG4gICAgICAgIHRoaXMucG9wcGVySW5zdGFuY2UuZGVzdHJveSgpO1xuXG4gICAgICAgIC8vIHJlbW92ZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgZnVuYyA9IF9yZWYuZnVuYyxcbiAgICAgICAgICAgICAgZXZlbnQgPSBfcmVmLmV2ZW50O1xuXG4gICAgICAgICAgX3RoaXMuX3Rvb2x0aXBOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cbiAgICAgICAgLy8gZGVzdHJveSB0b29sdGlwTm9kZVxuICAgICAgICB0aGlzLl90b29sdGlwTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3Rvb2x0aXBOb2RlKTtcbiAgICAgICAgdGhpcy5fdG9vbHRpcE5vZGUgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2ZpbmRDb250YWluZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZmluZENvbnRhaW5lcihjb250YWluZXIsIHJlZmVyZW5jZSkge1xuICAgICAgLy8gaWYgY29udGFpbmVyIGlzIGEgcXVlcnksIGdldCB0aGUgcmVsYXRpdmUgZWxlbWVudFxuICAgICAgaWYgKHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcik7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lciA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gaWYgY29udGFpbmVyIGlzIGBmYWxzZWAsIHNldCBpdCB0byByZWZlcmVuY2UgcGFyZW50XG4gICAgICAgIGNvbnRhaW5lciA9IHJlZmVyZW5jZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmQgdG9vbHRpcCB0byBjb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgVG9vbHRpcFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdG9vbHRpcFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfGZhbHNlfSBjb250YWluZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2FwcGVuZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hcHBlbmQodG9vbHRpcE5vZGUsIGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2x0aXBOb2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfc2V0RXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0RXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBldmVudHMsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgZGlyZWN0RXZlbnRzID0gW107XG4gICAgICB2YXIgb3Bwb3NpdGVFdmVudHMgPSBbXTtcblxuICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgICBjYXNlICdob3Zlcic6XG4gICAgICAgICAgICBkaXJlY3RFdmVudHMucHVzaCgnbW91c2VlbnRlcicpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnbW91c2VsZWF2ZScpO1xuICAgICAgICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgICAgICAgIGRpcmVjdEV2ZW50cy5wdXNoKCdmb2N1cycpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnYmx1cicpO1xuICAgICAgICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgICAgICAgIGRpcmVjdEV2ZW50cy5wdXNoKCdjbGljaycpO1xuICAgICAgICAgICAgb3Bwb3NpdGVFdmVudHMucHVzaCgnY2xpY2snKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNjaGVkdWxlIHNob3cgdG9vbHRpcFxuICAgICAgZGlyZWN0RXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gZnVuYyhldnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMyLl9pc09wZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXZ0LnVzZWRCeVRvb2x0aXAgPSB0cnVlO1xuICAgICAgICAgIF90aGlzMi5fc2NoZWR1bGVTaG93KHJlZmVyZW5jZSwgb3B0aW9ucy5kZWxheSwgb3B0aW9ucywgZXZ0KTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMyLl9ldmVudHMucHVzaCh7IGV2ZW50OiBldmVudCwgZnVuYzogZnVuYyB9KTtcbiAgICAgICAgcmVmZXJlbmNlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHNjaGVkdWxlIGhpZGUgdG9vbHRpcFxuICAgICAgb3Bwb3NpdGVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKGV2dCkge1xuICAgICAgICAgIGlmIChldnQudXNlZEJ5VG9vbHRpcCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpczIuX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIG9wdGlvbnMuZGVsYXksIG9wdGlvbnMsIGV2dCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzMi5fZXZlbnRzLnB1c2goeyBldmVudDogZXZlbnQsIGZ1bmM6IGZ1bmMgfSk7XG4gICAgICAgIHJlZmVyZW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19zY2hlZHVsZVNob3cnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc2NoZWR1bGVTaG93KHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMgLyosIGV2dCAqLykge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIC8vIGRlZmF1bHRzIHRvIDBcbiAgICAgIHZhciBjb21wdXRlZERlbGF5ID0gZGVsYXkgJiYgZGVsYXkuc2hvdyB8fCBkZWxheSB8fCAwO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLl9zaG93KHJlZmVyZW5jZSwgb3B0aW9ucyk7XG4gICAgICB9LCBjb21wdXRlZERlbGF5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfc2NoZWR1bGVIaWRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIGRlbGF5LCBvcHRpb25zLCBldnQpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAvLyBkZWZhdWx0cyB0byAwXG4gICAgICB2YXIgY29tcHV0ZWREZWxheSA9IGRlbGF5ICYmIGRlbGF5LmhpZGUgfHwgZGVsYXkgfHwgMDtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzNC5faXNPcGVuID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoX3RoaXM0Ll90b29sdGlwTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB3ZSBhcmUgaGlkaW5nIGJlY2F1c2Ugb2YgYSBtb3VzZWxlYXZlLCB3ZSBtdXN0IGNoZWNrIHRoYXQgdGhlIG5ld1xuICAgICAgICAvLyByZWZlcmVuY2UgaXNuJ3QgdGhlIHRvb2x0aXAsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gaGlkZSBpdFxuICAgICAgICBpZiAoZXZ0LnR5cGUgPT09ICdtb3VzZWxlYXZlJykge1xuICAgICAgICAgIHZhciBpc1NldCA9IF90aGlzNC5fc2V0VG9vbHRpcE5vZGVFdmVudChldnQsIHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMpO1xuXG4gICAgICAgICAgLy8gaWYgd2Ugc2V0IHRoZSBuZXcgZXZlbnQsIGRvbid0IGhpZGUgdGhlIHRvb2x0aXAgeWV0XG4gICAgICAgICAgLy8gdGhlIG5ldyBldmVudCB3aWxsIHRha2UgY2FyZSB0byBoaWRlIGl0IGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChpc1NldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzNC5faGlkZShyZWZlcmVuY2UsIG9wdGlvbnMpO1xuICAgICAgfSwgY29tcHV0ZWREZWxheSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBUb29sdGlwO1xufSgpO1xuXG4vKipcbiAqIFBsYWNlbWVudCBmdW5jdGlvbiwgaXRzIGNvbnRleHQgaXMgdGhlIFRvb2x0aXAgaW5zdGFuY2UuXG4gKiBAbWVtYmVyb2YgVG9vbHRpcFxuICogQGNhbGxiYWNrIFBsYWNlbWVudEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0b29sdGlwIC0gdG9vbHRpcCBET00gbm9kZS5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIHJlZmVyZW5jZSBET00gbm9kZS5cbiAqIEByZXR1cm4ge1N0cmluZ30gcGxhY2VtZW50IC0gT25lIG9mIHRoZSBhbGxvd2VkIHBsYWNlbWVudCBvcHRpb25zLlxuICovXG5cbi8qKlxuICogVGl0bGUgZnVuY3Rpb24sIGl0cyBjb250ZXh0IGlzIHRoZSBUb29sdGlwIGluc3RhbmNlLlxuICogQG1lbWJlcm9mIFRvb2x0aXBcbiAqIEBjYWxsYmFjayBUaXRsZUZ1bmN0aW9uXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHBsYWNlbWVudCAtIFRoZSBkZXNpcmVkIHRpdGxlLlxuICovXG5cblxudmFyIF9pbml0aWFsaXNlUHJvcHMgPSBmdW5jdGlvbiBfaW5pdGlhbGlzZVByb3BzKCkge1xuICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICB0aGlzLnNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90aGlzNS5fc2hvdyhfdGhpczUucmVmZXJlbmNlLCBfdGhpczUub3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5oaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdGhpczUuX2hpZGUoKTtcbiAgfTtcblxuICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90aGlzNS5fZGlzcG9zZSgpO1xuICB9O1xuXG4gIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfdGhpczUuX2lzT3Blbikge1xuICAgICAgcmV0dXJuIF90aGlzNS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfdGhpczUuc2hvdygpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmFycm93U2VsZWN0b3IgPSAnLnRvb2x0aXAtYXJyb3csIC50b29sdGlwX19hcnJvdyc7XG4gIHRoaXMuaW5uZXJTZWxlY3RvciA9ICcudG9vbHRpcC1pbm5lciwgLnRvb2x0aXBfX2lubmVyJztcbiAgdGhpcy5fZXZlbnRzID0gW107XG5cbiAgdGhpcy5fc2V0VG9vbHRpcE5vZGVFdmVudCA9IGZ1bmN0aW9uIChldnQsIHJlZmVyZW5jZSwgZGVsYXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVsYXRlZHJlZmVyZW5jZSA9IGV2dC5yZWxhdGVkcmVmZXJlbmNlIHx8IGV2dC50b0VsZW1lbnQ7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhldnQyKSB7XG4gICAgICB2YXIgcmVsYXRlZHJlZmVyZW5jZTIgPSBldnQyLnJlbGF0ZWRyZWZlcmVuY2UgfHwgZXZ0Mi50b0VsZW1lbnQ7XG5cbiAgICAgIC8vIFJlbW92ZSBldmVudCBsaXN0ZW5lciBhZnRlciBjYWxsXG4gICAgICBfdGhpczUuX3Rvb2x0aXBOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0LnR5cGUsIGNhbGxiYWNrKTtcblxuICAgICAgLy8gSWYgdGhlIG5ldyByZWZlcmVuY2UgaXMgbm90IHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgICAgaWYgKCFyZWZlcmVuY2UuY29udGFpbnMocmVsYXRlZHJlZmVyZW5jZTIpKSB7XG4gICAgICAgIC8vIFNjaGVkdWxlIHRvIGhpZGUgdG9vbHRpcFxuICAgICAgICBfdGhpczUuX3NjaGVkdWxlSGlkZShyZWZlcmVuY2UsIG9wdGlvbnMuZGVsYXksIG9wdGlvbnMsIGV2dDIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoX3RoaXM1Ll90b29sdGlwTm9kZS5jb250YWlucyhyZWxhdGVkcmVmZXJlbmNlKSkge1xuICAgICAgLy8gbGlzdGVuIHRvIG1vdXNlbGVhdmUgb24gdGhlIHRvb2x0aXAgZWxlbWVudCB0byBiZSBhYmxlIHRvIGhpZGUgdGhlIHRvb2x0aXBcbiAgICAgIF90aGlzNS5fdG9vbHRpcE5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnQudHlwZSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvb2x0aXAuanMubWFwXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Rvb2x0aXAuanMvZGlzdC9lc20vdG9vbHRpcC5qcyIsImltcG9ydCB2dG9vbHRpcCwgeyBkZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vdi10b29sdGlwJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGwgKFZ1ZSwgb3B0aW9ucykge1xyXG4gIGlmIChpbnN0YWxsLmluc3RhbGxlZCkgcmV0dXJuXHJcbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlXHJcblxyXG4gIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyB8fCB7fSlcclxuICB2dG9vbHRpcC5vcHRpb25zID0gb3B0aW9uc1xyXG4gIFZ1ZS5kaXJlY3RpdmUoJ3Rvb2x0aXAnLCB2dG9vbHRpcClcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFZUb29sdGlwID0gdnRvb2x0aXBcclxuXHJcbmNvbnN0IHBsdWdpbiA9IHtcclxuICBpbnN0YWxsLFxyXG59XHJcblxyXG4vLyBBdXRvLWluc3RhbGxcclxubGV0IEdsb2JhbFZ1ZSA9IG51bGxcclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgR2xvYmFsVnVlID0gd2luZG93LlZ1ZVxyXG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgR2xvYmFsVnVlID0gZ2xvYmFsLlZ1ZVxyXG59XHJcbmlmIChHbG9iYWxWdWUpIHtcclxuICBHbG9iYWxWdWUudXNlKHBsdWdpbilcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/v-tooltip/dist/v-tooltip.common.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nvar Vue = require('vue');\nVue = 'default' in Vue ? Vue['default'] : Vue;\n\nvar version = '2.1.0';\n\nvar compatible = (/^2\\./).test(Vue.version);\nif (!compatible) {\n Vue.util.warn('VueClickaway ' + version + ' only supports Vue 2.x, and does not support Vue ' + Vue.version);\n}\n\n\n\n// @SECTION: implementation\n\nvar HANDLER = '_vue_clickaway_handler';\n\nfunction bind(el, binding) {\n unbind(el);\n\n var callback = binding.value;\n if (typeof callback !== 'function') {\n if (process.env.NODE_ENV !== 'production') {\n Vue.util.warn(\n 'v-' + binding.name + '=\"' +\n binding.expression + '\" expects a function value, ' +\n 'got ' + callback\n );\n }\n return;\n }\n\n // @NOTE: Vue binds directives in microtasks, while UI events are dispatched\n // in macrotasks. This causes the listener to be set up before\n // the \"origin\" click event (the event that lead to the binding of\n // the directive) arrives at the document root. To work around that,\n // we ignore events until the end of the \"initial\" macrotask.\n // @REFERENCE: https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/\n // @REFERENCE: https://github.com/simplesmiler/vue-clickaway/issues/8\n var initialMacrotaskEnded = false;\n setTimeout(function() {\n initialMacrotaskEnded = true;\n }, 0);\n\n el[HANDLER] = function(ev) {\n // @NOTE: IE 5.0+\n // @REFERENCE: https://developer.mozilla.org/en/docs/Web/API/Node/contains\n if (initialMacrotaskEnded && !el.contains(ev.target)) {\n return callback(ev);\n }\n };\n\n document.documentElement.addEventListener('click', el[HANDLER], false);\n}\n\nfunction unbind(el) {\n document.documentElement.removeEventListener('click', el[HANDLER], false);\n delete el[HANDLER];\n}\n\nvar directive = {\n bind: bind,\n update: function(el, binding) {\n if (binding.value === binding.oldValue) return;\n bind(el, binding);\n },\n unbind: unbind,\n};\n\nvar mixin = {\n directives: { onClickaway: directive },\n};\n\nexports.version = version;\nexports.directive = directive;\nexports.mixin = mixin;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-clickaway/dist/vue-clickaway.common.js\n// module id = 14\n// module chunks = 0","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.VueColor=t():e.VueColor=t()}(this,function(){return function(e){function t(r){if(o[r])return o[r].exports;var a=o[r]={exports:{},id:r,loaded:!1};return e[r].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var o={};return t.m=e,t.c=o,t.p=\"\",t(0)}([function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}var a=o(37),i=r(a),n=o(38),s=r(n),l=o(41),c=r(l),u=o(42),h=r(u),d=o(39),f=r(d),p=o(40),_=r(p),v=o(36),g=r(v),b=o(6),x=r(b),m=o(8),w=r(m),C=o(4),y=r(C),k=o(5),F=r(k),A=o(7),R=r(A),S=o(3),M=r(S),E={version:\"2.0.9\",Compact:i.default,Material:s.default,Slider:c.default,Swatches:h.default,Photoshop:f.default,Sketch:_.default,Chrome:g.default,Alpha:x.default,Checkboard:w.default,EditableInput:y.default,Hue:F.default,Saturation:R.default,ColorMixin:M.default};e.exports=E},function(e,t){e.exports=function(){var e=[];return e.toString=function(){for(var e=[],t=0;t=0&&g.splice(t,1)}function s(e){var t=document.createElement(\"style\");return t.type=\"text/css\",i(e,t),t}function l(e,t){var o,r,a;if(t.singleton){var i=v++;o=_||(_=s(t)),r=c.bind(null,o,i,!1),a=c.bind(null,o,i,!0)}else o=s(t),r=u.bind(null,o),a=function(){n(o)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else a()}}function c(e,t,o,r){var a=o?\"\":r.css;if(e.styleSheet)e.styleSheet.cssText=b(t,a);else{var i=document.createTextNode(a),n=e.childNodes;n[t]&&e.removeChild(n[t]),n.length?e.insertBefore(i,n[t]):e.appendChild(i)}}function u(e,t){var o=t.css,r=t.media,a=t.sourceMap;if(r&&e.setAttribute(\"media\",r),a&&(o+=\"\\n/*# sourceURL=\"+a.sources[0]+\" */\",o+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(a))))+\" */\"),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}var h={},d=function(e){var t;return function(){return\"undefined\"==typeof t&&(t=e.apply(this,arguments)),t}},f=d(function(){return/msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase())}),p=d(function(){return document.head||document.getElementsByTagName(\"head\")[0]}),_=null,v=0,g=[];e.exports=function(e,t){t=t||{},\"undefined\"==typeof t.singleton&&(t.singleton=f()),\"undefined\"==typeof t.insertAt&&(t.insertAt=\"bottom\");var o=a(e);return r(o,t),function(e){for(var i=[],n=0;n0?(0,n.default)(e.hex):(0,n.default)(e),o&&o.setAlpha(r||1);var a=o.toHsl(),i=o.toHsv();return 0===a.s&&(a.h=e.h||t||0,i.h=e.h||t||0),{hsl:a,hex:o.toHexString().toUpperCase(),rgba:o.toRgb(),hsv:i,oldHue:e.h||t||a.h,source:e.source,a:e.a||o.getAlpha()}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(35),n=r(i);t.default={props:[\"value\"],data:function(){return{val:a(this.value)}},computed:{colors:{get:function(){return this.val},set:function(e){this.val=e,this.$emit(\"input\",e)}}},watch:{value:function(e){this.val=a(e)}},methods:{colorChange:function(e,t){this.oldHue=this.colors.hsl.h,this.colors=a(e,t||this.oldHue)},isValidHex:function(e){return(0,n.default)(e).isValid()},simpleCheckForValidColor:function(e){for(var t=[\"r\",\"g\",\"b\",\"a\",\"h\",\"s\",\"a\",\"v\"],o=0,r=0,a=0;a=2?void(this.fieldsIndex=0):void this.fieldsIndex++},showHighlight:function(){this.highlight=!0},hideHighlight:function(){this.highlight=!1}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=[\"#4D4D4D\",\"#999999\",\"#FFFFFF\",\"#F44E3B\",\"#FE9200\",\"#FCDC00\",\"#DBDF00\",\"#A4DD00\",\"#68CCCA\",\"#73D8FF\",\"#AEA1FF\",\"#FDA1FF\",\"#333333\",\"#808080\",\"#CCCCCC\",\"#D33115\",\"#E27300\",\"#FCC400\",\"#B0BC00\",\"#68BC00\",\"#16A5A5\",\"#009CE0\",\"#7B64FF\",\"#FA28FF\",\"#000000\",\"#666666\",\"#B3B3B3\",\"#9F0500\",\"#C45100\",\"#FB9E00\",\"#808900\",\"#194D33\",\"#0C797D\",\"#0062B1\",\"#653294\",\"#AB149E\"];t.default={name:\"Compact\",mixins:[i.default],props:{},components:{\"ed-in\":s.default},computed:{pick:function(){return this.colors.hex}},data:function(){return{defaultColors:l}},methods:{handlerClick:function(e){this.colorChange({hex:e,source:\"hex\"})},onChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(4),i=r(a),n=o(3),s=r(n);t.default={name:\"Material\",mixins:[s.default],components:{\"ed-in\":i.default},methods:{onChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=o(7),c=r(l),u=o(5),h=r(u),d=o(6),f=r(d);t.default={name:\"Photoshop\",mixins:[i.default],props:{head:{type:String,default:\"Color Picker\"}},components:{saturation:c.default,hue:h.default,alpha:f.default,\"ed-in\":s.default},data:function(){return{currentColor:\"#FFF\"}},created:function(){this.currentColor=this.colors.hex},methods:{childChange:function(e){this.colorChange(e)},inputChange:function(e){e&&(e[\"#\"]?this.isValidHex(e[\"#\"])&&this.colorChange({hex:e[\"#\"],source:\"hex\"}):(e.r||e.g||e.b||e.a)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))},handleAccept:function(){this.$emit(\"ok\")},handleCancel:function(){this.$emit(\"cancel\")}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(4),s=r(n),l=o(7),c=r(l),u=o(5),h=r(u),d=o(6),f=r(d),p=[\"#D0021B\",\"#F5A623\",\"#F8E71C\",\"#8B572A\",\"#7ED321\",\"#417505\",\"#BD10E0\",\"#9013FE\",\"#4A90E2\",\"#50E3C2\",\"#B8E986\",\"#000000\",\"#4A4A4A\",\"#9B9B9B\",\"#FFFFFF\"];t.default={name:\"Sketch\",mixins:[i.default],components:{saturation:c.default,hue:h.default,alpha:f.default,\"ed-in\":s.default},data:function(){return{presetColors:p}},computed:{activeColor:function(){var e=this.colors.rgba;return\"rgba(\"+[e.r,e.g,e.b,e.a].join(\",\")+\")\"}},methods:{handlePreset:function(e){this.colorChange({hex:e,source:\"hex\"})},childChange:function(e){this.colorChange(e)},inputChange:function(e){e&&(e.hex?this.isValidHex(e.hex)&&this.colorChange({hex:e.hex,source:\"hex\"}):(e.r||e.g||e.b||e.a)&&this.colorChange({r:e.r||this.colors.rgba.r,g:e.g||this.colors.rgba.g,b:e.b||this.colors.rgba.b,a:e.a||this.colors.rgba.a,source:\"rgba\"}))}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),i=r(a),n=o(5),s=r(n);t.default={name:\"Slider\",mixins:[i.default],props:{direction:String},components:{hue:s.default},computed:{activeOffset:function(){return Math.round(100*this.colors.hsl.s)/100===.5?Math.round(100*this.colors.hsl.l)/100:0}},data:function(){return{swatches:[\".80\",\".65\",\".50\",\".35\",\".20\"]}},methods:{hueChange:function(e){this.colorChange(e)},handleSwClick:function(e,t){this.colorChange({h:this.colors.hsl.h,s:.5,l:t,source:\"hsl\"})}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(34),i=r(a),n=o(3),s=r(n),l=[\"red\",\"pink\",\"purple\",\"deepPurple\",\"indigo\",\"blue\",\"lightBlue\",\"cyan\",\"teal\",\"green\",\"lightGreen\",\"lime\",\"yellow\",\"amber\",\"orange\",\"deepOrange\",\"brown\",\"blueGrey\"],c=[\"900\",\"700\",\"500\",\"300\",\"100\"],u=function(){var e=[];return l.forEach(function(t){var o=[];c.forEach(function(e){o.push(i.default[t][e].toUpperCase())}),e.push(o)}),e}();t.default={name:\"Swatches\",mixins:[s.default],computed:{pick:function(){return this.colors.hex}},data:function(){return{defaultColors:u}},methods:{handlerClick:function(e){this.colorChange({hex:e,source:\"hex\"})}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(8),i=r(a);t.default={name:\"Alpha\",props:{value:Object,onChange:Function},components:{checkboard:i.default},computed:{colors:function(){return this.value},gradientColor:function(){var e=this.colors.rgba,t=[e.r,e.g,e.b].join(\",\");return\"linear-gradient(to right, rgba(\"+t+\", 0) 0%, rgba(\"+t+\", 1) 100%)\"}},methods:{handleChange:function(e,t){!t&&e.preventDefault();var o,r=this.$refs.container,a=r.clientWidth,i=r.getBoundingClientRect().left+window.pageXOffset,n=e.pageX||(e.touches?e.touches[0].pageX:0),s=n-i;o=s<0?0:s>a?1:Math.round(100*s/a)/100,this.colors.a!==o&&this.$emit(\"change\",{h:this.colors.hsl.h,s:this.colors.hsl.s,l:this.colors.hsl.l,a:o,source:\"rgba\"})},handleMouseDown:function(e){this.handleChange(e,!0),window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t){\"use strict\";function o(e,t,o){if(\"undefined\"==typeof document)return null;var r=document.createElement(\"canvas\");r.width=r.height=2*o;var a=r.getContext(\"2d\");return a?(a.fillStyle=e,a.fillRect(0,0,r.width,r.height),a.fillStyle=t,a.fillRect(0,0,o,o),a.translate(o,o),a.fillRect(0,0,o,o),r.toDataURL()):null}function r(e,t,r){var i=e+\",\"+t+\",\"+r;if(a[i])return a[i];var n=o(e,t,r);return a[i]=n,n}Object.defineProperty(t,\"__esModule\",{value:!0});var a={};t.default={name:\"Checkboard\",props:{size:{type:[Number,String],default:8},white:{type:String,default:\"#fff\"},grey:{type:String,default:\"#e6e6e6\"}},computed:{bgStyle:function(){return\"url(\"+r(this.white,this.grey,this.size)+\") center left\"}}}},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"editableInput\",props:{label:String,value:[String,Number],max:Number,arrowOffset:{type:Number,default:1}},computed:{val:function(){return this.value}},filters:{maxFilter:{read:function(e){return this.max&&e>this.max?this.max:e},write:function(e,t){return e}}},methods:{update:function(e){this.handleChange(e.target.value)},handleChange:function(e){var t={};t[this.label]=e,this.$emit(\"change\",t)},handleBlur:function(e){console.log(e)},handleKeyDown:function(e){var t=this.val,o=Number(t);if(o){var r=this.arrowOffset||1;38===e.keyCode&&(t=o+r,this.handleChange(t),e.preventDefault()),40===e.keyCode&&(t=o-r,this.handleChange(t),e.preventDefault())}},handleDrag:function(e){console.log(e)},handleMouseDown:function(e){console.log(e)}}}},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"Hue\",props:{value:Object,direction:{type:String,default:\"horizontal\"}},computed:{colors:function(){return this.value},directionClass:function(){return{\"vue-color__c-hue--horizontal\":\"horizontal\"===this.direction,\"vue-color__c-hue--vertical\":\"vertical\"===this.direction}},pointerTop:function(){return\"vertical\"===this.direction?-(100*this.colors.hsl.h/360)+100+\"%\":0},pointerLeft:function(){return\"vertical\"===this.direction?0:100*this.colors.hsl.h/360+\"%\"}},methods:{handleChange:function(e,t){!t&&e.preventDefault();var o,r,a=this.$refs.container,i=a.clientWidth,n=a.clientHeight,s=a.getBoundingClientRect().left+window.pageXOffset,l=a.getBoundingClientRect().top+window.pageYOffset,c=e.pageX||(e.touches?e.touches[0].pageX:0),u=e.pageY||(e.touches?e.touches[0].pageY:0),h=c-s,d=u-l;\"vertical\"===this.direction?(d<0?o=359:d>n?o=0:(r=-(100*d/n)+100,o=360*r/100),this.colors.hsl.h!==o&&this.$emit(\"change\",{h:o,s:this.colors.hsl.s,l:this.colors.hsl.l,a:this.colors.hsl.a,source:\"hsl\"})):(h<0?o=0:h>i?o=359:(r=100*h/i,o=360*r/100),this.colors.hsl.h!==o&&this.$emit(\"change\",{h:o,s:this.colors.hsl.s,l:this.colors.hsl.l,a:this.colors.hsl.a,source:\"hsl\"}))},handleMouseDown:function(e){this.handleChange(e,!0),window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(e){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t,o){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(33),i=r(a);t.default={name:\"Saturation\",props:{value:Object},computed:{colors:function(){return this.value},bgColor:function(){return\"hsl(\"+this.colors.hsl.h+\", 100%, 50%)\"},pointerTop:function(){return-(100*this.colors.hsv.v)+100+\"%\"},pointerLeft:function(){return 100*this.colors.hsv.s+\"%\"}},methods:{throttle:(0,i.default)(function(e,t){e(t)},20,{leading:!0,trailing:!1}),handleChange:function(e,t){!t&&e.preventDefault();var o=this.$refs.container,r=o.clientWidth,a=o.clientHeight,i=o.getBoundingClientRect().left+window.pageXOffset,n=o.getBoundingClientRect().top+window.pageYOffset,s=e.pageX||(e.touches?e.touches[0].pageX:0),l=e.pageY||(e.touches?e.touches[0].pageY:0),c=s-i,u=l-n;c<0?c=0:c>r?c=r:u<0?u=0:u>a&&(u=a);var h=100*c/r,d=-(100*u/a)+100;this.throttle(this.onChange,{h:this.colors.hsl.h,s:h,v:d>0?d:.01,a:this.colors.hsl.a,source:\"hsva\"})},onChange:function(e){this.$emit(\"change\",e)},handleMouseDown:function(e){window.addEventListener(\"mousemove\",this.handleChange),window.addEventListener(\"mouseup\",this.handleChange),window.addEventListener(\"mouseup\",this.handleMouseUp)},handleMouseUp:function(e){this.unbindEventListeners()},unbindEventListeners:function(){window.removeEventListener(\"mousemove\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleChange),window.removeEventListener(\"mouseup\",this.handleMouseUp)}}}},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__compact{padding-top:5px;padding-left:5px;width:240px;border-radius:2px;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16);background-color:#fff}.vue-color__compact__colors{overflow:hidden;padding:0;margin:0}.vue-color__compact__color-item{list-style:none;width:15px;height:15px;float:left;margin-right:5px;margin-bottom:5px;position:relative;cursor:pointer}.vue-color__compact__color-item--white{box-shadow:inset 0 0 0 1px #ddd}.vue-color__compact__color-item--white .vue-color__compact__dot{background:#000}.vue-color__compact__dot{position:absolute;top:5px;right:5px;bottom:5px;left:5px;border-radius:50%;opacity:1;background:#fff}.vue-color__compact__fields{display:flex;padding-bottom:6px;padding-right:5px;position:relative}.vue-color__compact__fields .vue-color__editable-input__input{width:70%;padding-left:30%;background:none;font-size:12px;color:#333;height:16px}.vue-color__compact__fields .vue-color__editable-input__label{position:absolute;top:3px;left:0;line-height:16px;text-transform:uppercase;font-size:12px;color:#999}.vue-color__compact__pick-color{position:absolute;top:6px;left:5px;height:9px;width:9px}.vue-color__compact__col-3{flex:1}.vue_color__compact__col-hex{flex:2}.vue_color__compact__col-hex .vue-color__editable-input__input{width:80%;padding-left:20%}.vue_color__compact__col-hex .vue-color__editable-input__label{display:none}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__editable-input{position:relative}.vue-color__editable-input__input{padding:0;border:0;outline:none}.vue-color__editable-input__label{text-transform:capitalize}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-hue{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px}.vue-color__c-hue--horizontal{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vue-color__c-hue--vertical{background:linear-gradient(0deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vue-color__c-hue__container{cursor:pointer;margin:0 2px;position:relative;height:100%}.vue-color__c-hue__pointer{z-index:2;position:absolute}.vue-color__c-hue__picker{cursor:pointer;margin-top:1px;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;transform:translateX(-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__saturation,.vue-color__saturation--black,.vue-color__saturation--white{cursor:pointer;position:absolute;top:0;left:0;right:0;bottom:0}.vue-color__saturation--white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.vue-color__saturation--black{background:linear-gradient(0deg,#000,transparent)}.vue-color__saturation--pointer{cursor:pointer;position:absolute}.vue-color__saturation--circle{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__material{width:98px;height:98px;padding:16px;font-family:Roboto;position:relative;border-radius:2px;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16);background-color:#fff}.vue-color__material .vue-color__editable-input__input{width:100%;margin-top:12px;font-size:15px;color:#333;height:30px}.vue-color__material .vue-color__editable-input__label{position:absolute;top:0;left:0;font-size:11px;color:#999;text-transform:capitalize}.vue-color__material__hex{border-bottom-width:2px;border-bottom-style:solid}.vue-color__material__split{display:flex;margin-right:-10px;padding-top:11px}.vue-color__material__third{flex:1;padding-right:10px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__slider{position:relative;width:410px}.vue-color__slider__hue-warp{height:12px;position:relative}.vue-color__slider__hue-warp .vue-color__c-hue__picker{width:14px;height:14px;border-radius:6px;transform:translate(-7px,-2px);background-color:#f8f8f8;box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vue-color__slider__swatches{display:flex;margin-top:20px}.vue-color__slider__swatch{margin-right:1px;flex:1;width:20%}.vue-color__slider__swatch:first-child{margin-right:1px}.vue-color__slider__swatch:first-child .vue-color__slider__swatch-picker{border-radius:2px 0 0 2px}.vue-color__slider__swatch:last-child{margin-right:0}.vue-color__slider__swatch:last-child .vue-color__slider__swatch-picker{border-radius:0 2px 2px 0}.vue-color__slider__swatch-picker{cursor:pointer;height:12px}.vue-color__slider__swatch-picker--active{transform:scaleY(1.8);border-radius:3.6px/2px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__swatches{width:320px;height:240px;overflow-y:scroll;background-color:#fff;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16)}.vue-color__swatches__box{padding:16px 0 6px 16px;overflow:hidden}.vue-color__swatches__color-group{padding-bottom:10px;width:40px;float:left;margin-right:10px}.vue-color__swatches__color-it{width:40px;height:24px;cursor:pointer;background:#880e4f;margin-bottom:1px;overflow:hidden;border-radius:2px 2px 0 0}.vue-color__swatches__pick{fill:#fff;margin-left:8px;display:block}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,'.vue-color__photoshop{background:#dcdcdc;border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.25),0 8px 16px rgba(0,0,0,.15);box-sizing:initial;width:513px;font-family:Roboto}.vue-color__photoshop__head{background-image:linear-gradient(-180deg,#f0f0f0,#d4d4d4);border-bottom:1px solid #b1b1b1;box-shadow:inset 0 1px 0 0 hsla(0,0%,100%,.2),inset 0 -1px 0 0 rgba(0,0,0,.02);height:23px;line-height:24px;border-radius:4px 4px 0 0;font-size:13px;color:#4d4d4d;text-align:center}.vue-color__photoshop__body{padding:15px;display:flex}.vue-color__photoshop__saturation-wrap{width:256px;height:256px;position:relative;border:2px solid #b3b3b3;border-bottom:2px solid #f0f0f0;overflow:hidden}.vue-color__photoshop__saturation-wrap .vue-color__saturation--circle{width:12px;height:12px}.vue-color__photoshop__hue-wrap{position:relative;height:256px;width:19px;margin-left:10px;border:2px solid #b3b3b3;border-bottom:2px solid #f0f0f0}.vue-color__photoshop__hue-pointer{position:relative}.vue-color__photoshop__hue-pointer--left,.vue-color__photoshop__hue-pointer--right{position:absolute;width:0;height:0;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #555}.vue-color__photoshop__hue-pointer--left:after,.vue-color__photoshop__hue-pointer--right:after{content:\"\";width:0;height:0;border-style:solid;border-width:4px 0 4px 6px;border-color:transparent transparent transparent #fff;position:absolute;top:1px;left:1px;transform:translate(-8px,-5px)}.vue-color__photoshop__hue-pointer--left{transform:translate(-13px,-4px)}.vue-color__photoshop__hue-pointer--right{transform:translate(20px,-4px) rotate(180deg)}.vue-color__photoshop__controls{width:180px;margin-left:10px;display:flex}.vue-color__photoshop__actions{margin-left:20px;flex:1}.vue-color__photoshop__ac-btn{cursor:pointer;background-image:linear-gradient(-180deg,#fff,#e6e6e6);border:1px solid #878787;border-radius:2px;height:20px;box-shadow:0 1px 0 0 #eaeaea;font-size:14px;color:#000;line-height:20px;text-align:center;margin-bottom:10px}.vue-color__photoshop__previews{width:60px}.vue-color__photoshop__previews__swatches{border:1px solid #b3b3b3;border-bottom:1px solid #f0f0f0;margin-bottom:2px;margin-top:1px}.vue-color__photoshop__previews__pr-color{height:34px;box-shadow:inset 1px 0 0 #000,inset -1px 0 0 #000,inset 0 1px 0 #000}.vue-color__photoshop__previews__label{font-size:14px;color:#000;text-align:center}.vue-color__photoshop__fields{padding-top:5px;padding-bottom:9px;width:80px;position:relative}.vue-color__photoshop__fields .vue-color__editable-input__input{margin-left:40%;width:40%;height:18px;border:1px solid #888;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 1px 0 0 #ececec;margin-bottom:5px;font-size:13px;padding-left:3px;margin-right:10px}.vue-color__photoshop__fields .vue-color__editable-input__label{top:0;left:0;width:34px;text-transform:uppercase;font-size:13px;height:18px;line-height:22px;position:absolute}.vue-color__photoshop__fields__divider{height:5px}.vue-color__photoshop__fields__hex .vue-color__editable-input__input{margin-left:20%;width:80%;height:18px;border:1px solid #888;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 1px 0 0 #ececec;margin-bottom:6px;font-size:13px;padding-left:3px}.vue-color__photoshop__fields__hex .vue-color__editable-input__label{position:absolute;top:0;left:0;width:14px;text-transform:uppercase;font-size:13px;height:18px;line-height:22px}',\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__sketch{position:relative;width:200px;padding:10px 10px 0;box-sizing:initial;background:#fff;border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.15),0 8px 16px rgba(0,0,0,.15)}.vue-color__sketch__saturation-wrap{width:100%;padding-bottom:75%;position:relative;overflow:hidden}.vue-color__sketch__controls{display:flex}.vue-color__sketch__sliders{padding:4px 0;flex:1}.vue-color__sketch__sliders .vue-color__c-alpha__gradient,.vue-color__sketch__sliders .vue-color__c-hue{border-radius:2px}.vue-color__sketch__hue-wrap{position:relative;height:10px}.vue-color__sketch__alpha-wrap{position:relative;height:10px;margin-top:4px;overflow:hidden}.vue-color__sketch__color-wrap{width:24px;height:24px;position:relative;margin-top:4px;margin-left:4px;border-radius:3px}.vue-color__sketch__active-color{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset 0 0 4px rgba(0,0,0,.25);z-index:2}.vue-color__sketch__field{display:flex;padding-top:4px}.vue-color__sketch__field .vue-color__editable-input__input{width:80%;padding:4px 10% 3px;border:none;box-shadow:inset 0 0 0 1px #ccc;font-size:11px}.vue-color__sketch__field .vue-color__editable-input__label{display:block;text-align:center;font-size:11px;color:#222;padding-top:3px;padding-bottom:4px;text-transform:capitalize}.vue-color__sketch__field--single{flex:1;padding-left:6px}.vue-color__sketch__field--double{flex:2}.vue-color__sketch__presets{margin-right:-10px;margin-left:-10px;padding-left:10px;padding-top:10px;border-top:1px solid #eee}.vue-color__sketch__presets-color{border-radius:3px;overflow:hidden;position:relative;display:inline-block;margin:0 10px 10px 0;vertical-align:top;cursor:pointer;width:16px;height:16px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__chrome{background:#fff;border-radius:2px;box-shadow:0 0 2px rgba(0,0,0,.3),0 4px 8px rgba(0,0,0,.3);box-sizing:initial;width:225px;font-family:Menlo;background-color:#fff}.vue-color__chrome__controls{display:flex}.vue-color__chrome__color-wrap{width:32px}.vue-color__chrome__active-color{margin-top:6px;width:16px;height:16px;border-radius:8px;position:relative;overflow:hidden}.vue-color__chrome__sliders{flex:1}.vue-color__chrome__sliders .vue-color__c-alpha__gradient,.vue-color__chrome__sliders .vue-color__c-hue{border-radius:2px}.vue-color__chrome__sliders .vue-color__c-alpha__picker,.vue-color__chrome__sliders .vue-color__c-hue__picker{width:12px;height:12px;border-radius:6px;transform:translate(-6px,-2px);background-color:#f8f8f8;box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vue-color__chrome__fields-wrap{padding-top:16px;display:flex}.vue-color__chrome__fields{display:flex;margin-left:-6px;flex:1}.vue-color__chrome__field{padding-left:6px;width:100%}.vue-color__chrome__toggle-btn{width:32px;text-align:right;position:relative}.vue-color__chrome__icon{margin-right:-4px;margin-top:12px;cursor:pointer;position:relative;z-index:2}.vue-color__chrome__icon-highlight{position:absolute;width:24px;height:28px;background:#eee;border-radius:4px;top:10px;left:12px}.vue-color__chrome__hue-wrap{margin-bottom:8px}.vue-color__chrome__alpha-wrap,.vue-color__chrome__hue-wrap{position:relative;height:10px}.vue-color__chrome__chrome-body{padding:16px 16px 12px;background-color:#fff}.vue-color__chrome__saturation-wrap{width:100%;padding-bottom:55%;position:relative;border-radius:2px 2px 0 0;overflow:hidden}.vue-color__chrome__saturation-wrap .vue-color__saturation--circle{width:12px;height:12px}.vue-color__chrome__fields .vue-color__editable-input__input{font-size:11px;color:#333;width:100%;border-rradius:2px;border:none;box-shadow:inset 0 0 0 1px #dadada;height:21px;text-align:center}.vue-color__chrome__fields .vue-color__editable-input__label{text-transform:uppercase;font-size:11px;line-height:11px;color:#969696;text-align:center;display:block;margin-top:12px}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-alpha,.vue-color__c-alpha__checkboard-wrap{position:absolute;top:0;right:0;bottom:0;left:0}.vue-color__c-alpha__checkboard-wrap{overflow:hidden}.vue-color__c-alpha__gradient{position:absolute;top:0;right:0;bottom:0;left:0}.vue-color__c-alpha__container{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.vue-color__c-alpha__pointer{z-index:2;position:absolute}.vue-color__c-alpha__picker{cursor:pointer;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;margin-top:1px;transform:translateX(-2px)}\",\"\"])},function(e,t,o){t=e.exports=o(1)(),t.push([e.id,\".vue-color__c-checkerboard{position:absolute;top:0;right:0;bottom:0;left:0}\",\"\"])},function(e,t){(function(t){function o(e,t,o){function r(t){var o=_,r=v;return _=v=void 0,k=t,b=e.apply(r,o)}function i(e){return k=e,x=setTimeout(u,t),F?r(e):b}function n(e){var o=e-m,r=e-k,a=t-o;return A?C(a,g-r):a}function c(e){var o=e-m,r=e-k;return void 0===m||o>=t||o<0||A&&r>=g}function u(){var e=y();return c(e)?h(e):void(x=setTimeout(u,n(e)))}function h(e){return x=void 0,R&&_?r(e):(_=v=void 0,b)}function d(){void 0!==x&&clearTimeout(x),k=0,_=m=v=x=void 0}function f(){return void 0===x?b:h(y())}function p(){var e=y(),o=c(e);if(_=arguments,v=this,m=e,o){if(void 0===x)return i(m);if(A)return x=setTimeout(u,t),r(m)}return void 0===x&&(x=setTimeout(u,t)),\nb}var _,v,g,b,x,m,k=0,F=!1,A=!1,R=!0;if(\"function\"!=typeof e)throw new TypeError(l);return t=s(t)||0,a(o)&&(F=!!o.leading,A=\"maxWait\"in o,g=A?w(s(o.maxWait)||0,t):g,R=\"trailing\"in o?!!o.trailing:R),p.cancel=d,p.flush=f,p}function r(e,t,r){var i=!0,n=!0;if(\"function\"!=typeof e)throw new TypeError(l);return a(r)&&(i=\"leading\"in r?!!r.leading:i,n=\"trailing\"in r?!!r.trailing:n),o(e,t,{leading:i,maxWait:t,trailing:n})}function a(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==typeof e}function n(e){return\"symbol\"==typeof e||i(e)&&m.call(e)==u}function s(e){if(\"number\"==typeof e)return e;if(n(e))return c;if(a(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=a(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(h,\"\");var o=f.test(e);return o||p.test(e)?_(e.slice(2),o?2:8):d.test(e)?c:+e}var l=\"Expected a function\",c=NaN,u=\"[object Symbol]\",h=/^\\s+|\\s+$/g,d=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,p=/^0o[0-7]+$/i,_=parseInt,v=\"object\"==typeof t&&t&&t.Object===Object&&t,g=\"object\"==typeof self&&self&&self.Object===Object&&self,b=v||g||Function(\"return this\")(),x=Object.prototype,m=x.toString,w=Math.max,C=Math.min,y=function(){return b.Date.now()};e.exports=r}).call(t,function(){return this}())},function(e,t,o){var r,a,i;!function(o,n){a=[],r=n,i=\"function\"==typeof r?r.apply(t,a):r,!(void 0!==i&&(e.exports=i))}(this,function(){return{red:{50:\"#ffebee\",100:\"#ffcdd2\",200:\"#ef9a9a\",300:\"#e57373\",400:\"#ef5350\",500:\"#f44336\",600:\"#e53935\",700:\"#d32f2f\",800:\"#c62828\",900:\"#b71c1c\",a100:\"#ff8a80\",a200:\"#ff5252\",a400:\"#ff1744\",a700:\"#d50000\"},pink:{50:\"#fce4ec\",100:\"#f8bbd0\",200:\"#f48fb1\",300:\"#f06292\",400:\"#ec407a\",500:\"#e91e63\",600:\"#d81b60\",700:\"#c2185b\",800:\"#ad1457\",900:\"#880e4f\",a100:\"#ff80ab\",a200:\"#ff4081\",a400:\"#f50057\",a700:\"#c51162\"},purple:{50:\"#f3e5f5\",100:\"#e1bee7\",200:\"#ce93d8\",300:\"#ba68c8\",400:\"#ab47bc\",500:\"#9c27b0\",600:\"#8e24aa\",700:\"#7b1fa2\",800:\"#6a1b9a\",900:\"#4a148c\",a100:\"#ea80fc\",a200:\"#e040fb\",a400:\"#d500f9\",a700:\"#aa00ff\"},deepPurple:{50:\"#ede7f6\",100:\"#d1c4e9\",200:\"#b39ddb\",300:\"#9575cd\",400:\"#7e57c2\",500:\"#673ab7\",600:\"#5e35b1\",700:\"#512da8\",800:\"#4527a0\",900:\"#311b92\",a100:\"#b388ff\",a200:\"#7c4dff\",a400:\"#651fff\",a700:\"#6200ea\"},indigo:{50:\"#e8eaf6\",100:\"#c5cae9\",200:\"#9fa8da\",300:\"#7986cb\",400:\"#5c6bc0\",500:\"#3f51b5\",600:\"#3949ab\",700:\"#303f9f\",800:\"#283593\",900:\"#1a237e\",a100:\"#8c9eff\",a200:\"#536dfe\",a400:\"#3d5afe\",a700:\"#304ffe\"},blue:{50:\"#e3f2fd\",100:\"#bbdefb\",200:\"#90caf9\",300:\"#64b5f6\",400:\"#42a5f5\",500:\"#2196f3\",600:\"#1e88e5\",700:\"#1976d2\",800:\"#1565c0\",900:\"#0d47a1\",a100:\"#82b1ff\",a200:\"#448aff\",a400:\"#2979ff\",a700:\"#2962ff\"},lightBlue:{50:\"#e1f5fe\",100:\"#b3e5fc\",200:\"#81d4fa\",300:\"#4fc3f7\",400:\"#29b6f6\",500:\"#03a9f4\",600:\"#039be5\",700:\"#0288d1\",800:\"#0277bd\",900:\"#01579b\",a100:\"#80d8ff\",a200:\"#40c4ff\",a400:\"#00b0ff\",a700:\"#0091ea\"},cyan:{50:\"#e0f7fa\",100:\"#b2ebf2\",200:\"#80deea\",300:\"#4dd0e1\",400:\"#26c6da\",500:\"#00bcd4\",600:\"#00acc1\",700:\"#0097a7\",800:\"#00838f\",900:\"#006064\",a100:\"#84ffff\",a200:\"#18ffff\",a400:\"#00e5ff\",a700:\"#00b8d4\"},teal:{50:\"#e0f2f1\",100:\"#b2dfdb\",200:\"#80cbc4\",300:\"#4db6ac\",400:\"#26a69a\",500:\"#009688\",600:\"#00897b\",700:\"#00796b\",800:\"#00695c\",900:\"#004d40\",a100:\"#a7ffeb\",a200:\"#64ffda\",a400:\"#1de9b6\",a700:\"#00bfa5\"},green:{50:\"#e8f5e9\",100:\"#c8e6c9\",200:\"#a5d6a7\",300:\"#81c784\",400:\"#66bb6a\",500:\"#4caf50\",600:\"#43a047\",700:\"#388e3c\",800:\"#2e7d32\",900:\"#1b5e20\",a100:\"#b9f6ca\",a200:\"#69f0ae\",a400:\"#00e676\",a700:\"#00c853\"},lightGreen:{50:\"#f1f8e9\",100:\"#dcedc8\",200:\"#c5e1a5\",300:\"#aed581\",400:\"#9ccc65\",500:\"#8bc34a\",600:\"#7cb342\",700:\"#689f38\",800:\"#558b2f\",900:\"#33691e\",a100:\"#ccff90\",a200:\"#b2ff59\",a400:\"#76ff03\",a700:\"#64dd17\"},lime:{50:\"#f9fbe7\",100:\"#f0f4c3\",200:\"#e6ee9c\",300:\"#dce775\",400:\"#d4e157\",500:\"#cddc39\",600:\"#c0ca33\",700:\"#afb42b\",800:\"#9e9d24\",900:\"#827717\",a100:\"#f4ff81\",a200:\"#eeff41\",a400:\"#c6ff00\",a700:\"#aeea00\"},yellow:{50:\"#fffde7\",100:\"#fff9c4\",200:\"#fff59d\",300:\"#fff176\",400:\"#ffee58\",500:\"#ffeb3b\",600:\"#fdd835\",700:\"#fbc02d\",800:\"#f9a825\",900:\"#f57f17\",a100:\"#ffff8d\",a200:\"#ffff00\",a400:\"#ffea00\",a700:\"#ffd600\"},amber:{50:\"#fff8e1\",100:\"#ffecb3\",200:\"#ffe082\",300:\"#ffd54f\",400:\"#ffca28\",500:\"#ffc107\",600:\"#ffb300\",700:\"#ffa000\",800:\"#ff8f00\",900:\"#ff6f00\",a100:\"#ffe57f\",a200:\"#ffd740\",a400:\"#ffc400\",a700:\"#ffab00\"},orange:{50:\"#fff3e0\",100:\"#ffe0b2\",200:\"#ffcc80\",300:\"#ffb74d\",400:\"#ffa726\",500:\"#ff9800\",600:\"#fb8c00\",700:\"#f57c00\",800:\"#ef6c00\",900:\"#e65100\",a100:\"#ffd180\",a200:\"#ffab40\",a400:\"#ff9100\",a700:\"#ff6d00\"},deepOrange:{50:\"#fbe9e7\",100:\"#ffccbc\",200:\"#ffab91\",300:\"#ff8a65\",400:\"#ff7043\",500:\"#ff5722\",600:\"#f4511e\",700:\"#e64a19\",800:\"#d84315\",900:\"#bf360c\",a100:\"#ff9e80\",a200:\"#ff6e40\",a400:\"#ff3d00\",a700:\"#dd2c00\"},brown:{50:\"#efebe9\",100:\"#d7ccc8\",200:\"#bcaaa4\",300:\"#a1887f\",400:\"#8d6e63\",500:\"#795548\",600:\"#6d4c41\",700:\"#5d4037\",800:\"#4e342e\",900:\"#3e2723\"},grey:{50:\"#fafafa\",100:\"#f5f5f5\",200:\"#eeeeee\",300:\"#e0e0e0\",400:\"#bdbdbd\",500:\"#9e9e9e\",600:\"#757575\",700:\"#616161\",800:\"#424242\",900:\"#212121\"},blueGrey:{50:\"#eceff1\",100:\"#cfd8dc\",200:\"#b0bec5\",300:\"#90a4ae\",400:\"#78909c\",500:\"#607d8b\",600:\"#546e7a\",700:\"#455a64\",800:\"#37474f\",900:\"#263238\"},darkText:{primary:\"rgba(0, 0, 0, 0.87)\",secondary:\"rgba(0, 0, 0, 0.54)\",disabled:\"rgba(0, 0, 0, 0.38)\",dividers:\"rgba(0, 0, 0, 0.12)\"},lightText:{primary:\"rgba(255, 255, 255, 1)\",secondary:\"rgba(255, 255, 255, 0.7)\",disabled:\"rgba(255, 255, 255, 0.5)\",dividers:\"rgba(255, 255, 255, 0.12)\"},darkIcons:{active:\"rgba(0, 0, 0, 0.54)\",inactive:\"rgba(0, 0, 0, 0.38)\"},lightIcons:{active:\"rgba(255, 255, 255, 1)\",inactive:\"rgba(255, 255, 255, 0.5)\"},white:\"#ffffff\",black:\"#000000\"}})},function(e,t,o){var r;!function(a){function i(e,t){if(e=e?e:\"\",t=t||{},e instanceof i)return e;if(!(this instanceof i))return new i(e,t);var o=n(e);this._originalInput=e,this._r=o.r,this._g=o.g,this._b=o.b,this._a=o.a,this._roundA=X(100*this._a)/100,this._format=t.format||o.format,this._gradientType=t.gradientType,this._r<1&&(this._r=X(this._r)),this._g<1&&(this._g=X(this._g)),this._b<1&&(this._b=X(this._b)),this._ok=o.ok,this._tc_id=V++}function n(e){var t={r:0,g:0,b:0},o=1,r=null,a=null,i=null,n=!1,l=!1;return\"string\"==typeof e&&(e=P(e)),\"object\"==typeof e&&(N(e.r)&&N(e.g)&&N(e.b)?(t=s(e.r,e.g,e.b),n=!0,l=\"%\"===String(e.r).substr(-1)?\"prgb\":\"rgb\"):N(e.h)&&N(e.s)&&N(e.v)?(r=B(e.s),a=B(e.v),t=h(e.h,r,a),n=!0,l=\"hsv\"):N(e.h)&&N(e.s)&&N(e.l)&&(r=B(e.s),i=B(e.l),t=c(e.h,r,i),n=!0,l=\"hsl\"),e.hasOwnProperty(\"a\")&&(o=e.a)),o=M(o),{ok:n,format:e.format||l,r:q(255,Y(t.r,0)),g:q(255,Y(t.g,0)),b:q(255,Y(t.b,0)),a:o}}function s(e,t,o){return{r:255*E(e,255),g:255*E(t,255),b:255*E(o,255)}}function l(e,t,o){e=E(e,255),t=E(t,255),o=E(o,255);var r,a,i=Y(e,t,o),n=q(e,t,o),s=(i+n)/2;if(i==n)r=a=0;else{var l=i-n;switch(a=s>.5?l/(2-i-n):l/(i+n),i){case e:r=(t-o)/l+(t1&&(o-=1),o<1/6?e+6*(t-e)*o:o<.5?t:o<2/3?e+(t-e)*(2/3-o)*6:e}var a,i,n;if(e=E(e,360),t=E(t,100),o=E(o,100),0===t)a=i=n=o;else{var s=o<.5?o*(1+t):o+t-o*t,l=2*o-s;a=r(l,s,e+1/3),i=r(l,s,e),n=r(l,s,e-1/3)}return{r:255*a,g:255*i,b:255*n}}function u(e,t,o){e=E(e,255),t=E(t,255),o=E(o,255);var r,a,i=Y(e,t,o),n=q(e,t,o),s=i,l=i-n;if(a=0===i?0:l/i,i==n)r=0;else{switch(i){case e:r=(t-o)/l+(t>1)+720)%360;--t;)r.h=(r.h+a)%360,n.push(i(r));return n}function R(e,t){t=t||6;for(var o=i(e).toHsv(),r=o.h,a=o.s,n=o.v,s=[],l=1/t;t--;)s.push(i({h:r,s:a,v:n})),n=(n+l)%1;return s}function S(e){var t={};for(var o in e)e.hasOwnProperty(o)&&(t[e[o]]=o);return t}function M(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function E(e,t){H(e)&&(e=\"100%\");var o=O(e);return e=q(t,Y(0,parseFloat(e))),o&&(e=parseInt(e*t,10)/100),a.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function j(e){return q(1,Y(0,e))}function L(e){return parseInt(e,16)}function H(e){return\"string\"==typeof e&&e.indexOf(\".\")!=-1&&1===parseFloat(e)}function O(e){return\"string\"==typeof e&&e.indexOf(\"%\")!=-1}function z(e){return 1==e.length?\"0\"+e:\"\"+e}function B(e){return e<=1&&(e=100*e+\"%\"),e}function D(e){return a.round(255*parseFloat(e)).toString(16)}function $(e){return L(e)/255}function N(e){return!!Z.CSS_UNIT.exec(e)}function P(e){e=e.replace(T,\"\").replace(U,\"\").toLowerCase();var t=!1;if(G[e])e=G[e],t=!0;else if(\"transparent\"==e)return{r:0,g:0,b:0,a:0,format:\"name\"};var o;return(o=Z.rgb.exec(e))?{r:o[1],g:o[2],b:o[3]}:(o=Z.rgba.exec(e))?{r:o[1],g:o[2],b:o[3],a:o[4]}:(o=Z.hsl.exec(e))?{h:o[1],s:o[2],l:o[3]}:(o=Z.hsla.exec(e))?{h:o[1],s:o[2],l:o[3],a:o[4]}:(o=Z.hsv.exec(e))?{h:o[1],s:o[2],v:o[3]}:(o=Z.hsva.exec(e))?{h:o[1],s:o[2],v:o[3],a:o[4]}:(o=Z.hex8.exec(e))?{r:L(o[1]),g:L(o[2]),b:L(o[3]),a:$(o[4]),format:t?\"name\":\"hex8\"}:(o=Z.hex6.exec(e))?{r:L(o[1]),g:L(o[2]),b:L(o[3]),format:t?\"name\":\"hex\"}:(o=Z.hex4.exec(e))?{r:L(o[1]+\"\"+o[1]),g:L(o[2]+\"\"+o[2]),b:L(o[3]+\"\"+o[3]),a:$(o[4]+\"\"+o[4]),format:t?\"name\":\"hex8\"}:!!(o=Z.hex3.exec(e))&&{r:L(o[1]+\"\"+o[1]),g:L(o[2]+\"\"+o[2]),b:L(o[3]+\"\"+o[3]),format:t?\"name\":\"hex\"}}function I(e){var t,o;return e=e||{level:\"AA\",size:\"small\"},t=(e.level||\"AA\").toUpperCase(),o=(e.size||\"small\").toLowerCase(),\"AA\"!==t&&\"AAA\"!==t&&(t=\"AA\"),\"small\"!==o&&\"large\"!==o&&(o=\"small\"),{level:t,size:o}}var T=/^\\s+/,U=/\\s+$/,V=0,X=a.round,q=a.min,Y=a.max,W=a.random;i.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,o,r,i,n,s=this.toRgb();return e=s.r/255,t=s.g/255,o=s.b/255,r=e<=.03928?e/12.92:a.pow((e+.055)/1.055,2.4),i=t<=.03928?t/12.92:a.pow((t+.055)/1.055,2.4),n=o<=.03928?o/12.92:a.pow((o+.055)/1.055,2.4),.2126*r+.7152*i+.0722*n},setAlpha:function(e){return this._a=M(e),this._roundA=X(100*this._a)/100,this},toHsv:function(){var e=u(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=u(this._r,this._g,this._b),t=X(360*e.h),o=X(100*e.s),r=X(100*e.v);return 1==this._a?\"hsv(\"+t+\", \"+o+\"%, \"+r+\"%)\":\"hsva(\"+t+\", \"+o+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHsl:function(){var e=l(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=l(this._r,this._g,this._b),t=X(360*e.h),o=X(100*e.s),r=X(100*e.l);return 1==this._a?\"hsl(\"+t+\", \"+o+\"%, \"+r+\"%)\":\"hsla(\"+t+\", \"+o+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHex:function(e){return d(this._r,this._g,this._b,e)},toHexString:function(e){return\"#\"+this.toHex(e)},toHex8:function(e){return f(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return\"#\"+this.toHex8(e)},toRgb:function(){return{r:X(this._r),g:X(this._g),b:X(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\"rgb(\"+X(this._r)+\", \"+X(this._g)+\", \"+X(this._b)+\")\":\"rgba(\"+X(this._r)+\", \"+X(this._g)+\", \"+X(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:X(100*E(this._r,255))+\"%\",g:X(100*E(this._g,255))+\"%\",b:X(100*E(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\"rgb(\"+X(100*E(this._r,255))+\"%, \"+X(100*E(this._g,255))+\"%, \"+X(100*E(this._b,255))+\"%)\":\"rgba(\"+X(100*E(this._r,255))+\"%, \"+X(100*E(this._g,255))+\"%, \"+X(100*E(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return 0===this._a?\"transparent\":!(this._a<1)&&(K[d(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t=\"#\"+p(this._r,this._g,this._b,this._a),o=t,r=this._gradientType?\"GradientType = 1, \":\"\";if(e){var a=i(e);o=\"#\"+p(a._r,a._g,a._b,a._a)}return\"progid:DXImageTransform.Microsoft.gradient(\"+r+\"startColorstr=\"+t+\",endColorstr=\"+o+\")\"},toString:function(e){var t=!!e;e=e||this._format;var o=!1,r=this._a<1&&this._a>=0,a=!t&&r&&(\"hex\"===e||\"hex6\"===e||\"hex3\"===e||\"hex4\"===e||\"hex8\"===e||\"name\"===e);return a?\"name\"===e&&0===this._a?this.toName():this.toRgbString():(\"rgb\"===e&&(o=this.toRgbString()),\"prgb\"===e&&(o=this.toPercentageRgbString()),\"hex\"!==e&&\"hex6\"!==e||(o=this.toHexString()),\"hex3\"===e&&(o=this.toHexString(!0)),\"hex4\"===e&&(o=this.toHex8String(!0)),\"hex8\"===e&&(o=this.toHex8String()),\"name\"===e&&(o=this.toName()),\"hsl\"===e&&(o=this.toHslString()),\"hsv\"===e&&(o=this.toHsvString()),o||this.toHexString())},clone:function(){return i(this.toString())},_applyModification:function(e,t){var o=e.apply(null,[this].concat([].slice.call(t)));return this._r=o._r,this._g=o._g,this._b=o._b,this.setAlpha(o._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(x,arguments)},darken:function(){return this._applyModification(m,arguments)},desaturate:function(){return this._applyModification(_,arguments)},saturate:function(){return this._applyModification(v,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(w,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(A,arguments)},complement:function(){return this._applyCombination(C,arguments)},monochromatic:function(){return this._applyCombination(R,arguments)},splitcomplement:function(){return this._applyCombination(F,arguments)},triad:function(){return this._applyCombination(y,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},i.fromRatio=function(e,t){if(\"object\"==typeof e){var o={};for(var r in e)e.hasOwnProperty(r)&&(\"a\"===r?o[r]=e[r]:o[r]=B(e[r]));e=o}return i(e,t)},i.equals=function(e,t){return!(!e||!t)&&i(e).toRgbString()==i(t).toRgbString()},i.random=function(){return i.fromRatio({r:W(),g:W(),b:W()})},i.mix=function(e,t,o){o=0===o?0:o||50;var r=i(e).toRgb(),a=i(t).toRgb(),n=o/100,s={r:(a.r-r.r)*n+r.r,g:(a.g-r.g)*n+r.g,b:(a.b-r.b)*n+r.b,a:(a.a-r.a)*n+r.a};return i(s)},i.readability=function(e,t){var o=i(e),r=i(t);return(a.max(o.getLuminance(),r.getLuminance())+.05)/(a.min(o.getLuminance(),r.getLuminance())+.05)},i.isReadable=function(e,t,o){var r,a,n=i.readability(e,t);switch(a=!1,r=I(o),r.level+r.size){case\"AAsmall\":case\"AAAlarge\":a=n>=4.5;break;case\"AAlarge\":a=n>=3;break;case\"AAAsmall\":a=n>=7}return a},i.mostReadable=function(e,t,o){var r,a,n,s,l=null,c=0;o=o||{},a=o.includeFallbackColors,n=o.level,s=o.size;for(var u=0;uc&&(c=r,l=i(t[u]));return i.isReadable(e,l,{level:n,size:s})||!a?l:(o.includeFallbackColors=!1,i.mostReadable(e,[\"#fff\",\"#000\"],o))};var G=i.names={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},K=i.hexNames=S(G),Z=function(){var e=\"[-\\\\+]?\\\\d+%?\",t=\"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\",o=\"(?:\"+t+\")|(?:\"+e+\")\",r=\"[\\\\s|\\\\(]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")\\\\s*\\\\)?\",a=\"[\\\\s|\\\\(]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")[,|\\\\s]+(\"+o+\")\\\\s*\\\\)?\";return{CSS_UNIT:new RegExp(o),rgb:new RegExp(\"rgb\"+r),rgba:new RegExp(\"rgba\"+a),hsl:new RegExp(\"hsl\"+r),hsla:new RegExp(\"hsla\"+a),hsv:new RegExp(\"hsv\"+r),hsva:new RegExp(\"hsva\"+a),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();\"undefined\"!=typeof e&&e.exports?e.exports=i:(r=function(){return i}.call(t,o,t,e),!(void 0!==r&&(e.exports=r)))}(Math)},function(e,t,o){var r,a;o(64),r=o(9);var i=o(52);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(55),r=o(10);var i=o(43);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(59),r=o(11);var i=o(47);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(62),r=o(12);var i=o(50);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(63),r=o(13);var i=o(51);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(60),r=o(14);var i=o(48);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t,o){var r,a;o(61),r=o(15);var i=o(49);a=r=r||{},\"object\"!=typeof r.default&&\"function\"!=typeof r.default||(a=r=r.default),\"function\"==typeof a&&(a=a.options),a.render=i.render,a.staticRenderFns=i.staticRenderFns,e.exports=r},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__compact\"},[o(\"ul\",{staticClass:\"vue-color__compact__colors\"},e._l(e.defaultColors,function(t){return o(\"li\",{staticClass:\"vue-color__compact__color-item\",class:{\"vue-color__compact__color-item--white\":\"#FFFFFF\"===t},style:{background:t},on:{click:function(o){e.handlerClick(t)}}},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t===e.pick,expression:\"c === pick\"}],staticClass:\"vue-color__compact__dot\"})])}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__editable-input\"},[o(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.val,expression:\"val\"}],staticClass:\"vue-color__editable-input__input\",domProps:{value:e.val},on:{keydown:e.handleKeyDown,input:[function(t){t.target.composing||(e.val=t.target.value)},e.update]}}),e._v(\" \"),o(\"span\",{staticClass:\"vue-color__editable-input__label\"},[e._v(e._s(e.label))])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{class:[\"vue-color__c-hue\",e.directionClass]},[o(\"div\",{ref:\"container\",staticClass:\"vue-color__c-hue__container\",on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[o(\"div\",{staticClass:\"vue-color__c-hue__pointer\",style:{top:e.pointerTop,left:e.pointerLeft}},[o(\"div\",{staticClass:\"vue-color__c-hue__picker\"})])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{ref:\"container\",staticClass:\"vue-color__saturation\",style:{background:e.bgColor},on:{mousedown:e.handleMouseDown}},[o(\"div\",{staticClass:\"vue-color__saturation--white\"}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__saturation--black\"}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__saturation--pointer\",style:{top:e.pointerTop,left:e.pointerLeft}},[o(\"div\",{staticClass:\"vue-color__saturation--circle\"})])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__material\"},[o(\"ed-in\",{staticClass:\"vue-color__material__hex\",style:{borderColor:e.colors.hex},attrs:{label:\"hex\"},on:{change:e.onChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__split\"},[o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.onChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.onChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__material__third\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.onChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1)])],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__slider\"},[o(\"div\",{staticClass:\"vue-color__slider__hue-warp\"},[o(\"hue\",{on:{change:e.hueChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__slider__swatches\"},e._l(e.swatches,function(t,r){return o(\"div\",{staticClass:\"vue-color__slider__swatch\",attrs:{\"data-index\":r},on:{click:function(o){e.handleSwClick(r,t)}}},[o(\"div\",{staticClass:\"vue-color__slider__swatch-picker\",class:{\"vue-color__slider__swatch-picker--active\":t==e.activeOffset},style:{background:\"hsl(\"+e.colors.hsl.h+\", 50%, \"+100*t+\"%)\"}})])}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__swatches\",attrs:{\"data-pick\":e.pick}},[o(\"div\",{staticClass:\"vue-color__swatches__box\"},e._l(e.defaultColors,function(t){return o(\"div\",{staticClass:\"vue-color__swatches__color-group\"},e._l(t,function(t){return o(\"div\",{staticClass:\"vue-color__swatches__color-it\",style:{background:t},attrs:{\"data-color\":t},on:{click:function(o){e.handlerClick(t)}}},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t==e.pick,expression:\"c == pick\"}],staticClass:\"vue-color__swatches__pick\"},[o(\"svg\",{staticStyle:{width:\"24px\",height:\"24px\"},attrs:{viewBox:\"0 0 24 24\"}},[o(\"path\",{attrs:{d:\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"}})])])])}))}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__photoshop\"},[o(\"div\",{staticClass:\"vue-color__photoshop__head\"},[e._v(e._s(e.head))]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__body\"},[o(\"div\",{staticClass:\"vue-color__photoshop__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__hue-wrap\"},[o(\"hue\",{attrs:{direction:\"vertical\"},on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}},[o(\"div\",{staticClass:\"vue-color__photoshop__hue-pointer\"},[o(\"i\",{staticClass:\"vue-color__photoshop__hue-pointer--left\"}),o(\"i\",{staticClass:\"vue-color__photoshop__hue-pointer--right\"})])])],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__controls\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews__label\"},[e._v(\"new\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__swatches\"},[o(\"div\",{staticClass:\"vue-color__photoshop__previews__pr-color\",style:{background:e.colors.hex}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__pr-color\",style:{background:e.currentColor}})]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__previews__label\"},[e._v(\"current\")])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__actions\"},[o(\"div\",{staticClass:\"vue-color__photoshop__ac-btn\",on:{click:e.handleAccept}},[e._v(\"OK\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__ac-btn\",on:{click:e.handleCancel}},[e._v(\"Cancel\")]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields\"},[o(\"ed-in\",{attrs:{label:\"h\"},on:{change:e.inputChange},model:{value:e.colors.hsl.h,callback:function(t){e.colors.hsl.h=t},expression:\"colors.hsl.h\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"s\"},on:{change:e.inputChange},model:{value:e.colors.hsl.s,callback:function(t){e.colors.hsl.s=t},expression:\"colors.hsl.s\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"v\"},on:{change:e.inputChange},model:{value:e.colors.hsl.l,callback:function(t){e.colors.hsl.l=t},expression:\"colors.hsl.l\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields__divider\"}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}}),e._v(\" \"),o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}}),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__photoshop__fields__divider\"}),e._v(\" \"),o(\"ed-in\",{staticClass:\"vue-color__photoshop__fields__hex\",attrs:{label:\"#\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1)])])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__sketch\"},[o(\"div\",{staticClass:\"vue-color__sketch__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__controls\"},[o(\"div\",{staticClass:\"vue-color__sketch__sliders\"},[o(\"div\",{staticClass:\"vue-color__sketch__hue-wrap\"},[o(\"hue\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__alpha-wrap\"},[o(\"alpha\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1)]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__color-wrap\"},[o(\"div\",{staticClass:\"vue-color__sketch__active-color\",style:{background:e.activeColor}})])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field\"},[o(\"div\",{staticClass:\"vue-color__sketch__field--double\"},[o(\"ed-in\",{attrs:{label:\"hex\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__sketch__field--single\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{\nstaticClass:\"vue-color__sketch__presets\"},e._l(e.presetColors,function(t){return o(\"div\",{staticClass:\"vue-color__sketch__presets-color\",style:{background:t},on:{click:function(o){e.handlePreset(t)}}})}))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__chrome\"},[o(\"div\",{staticClass:\"vue-color__chrome__saturation-wrap\"},[o(\"saturation\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__chrome-body\"},[o(\"div\",{staticClass:\"vue-color__chrome__controls\"},[o(\"div\",{staticClass:\"vue-color__chrome__color-wrap\"},[o(\"div\",{staticClass:\"vue-color__chrome__active-color\",style:{background:e.activeColor}})]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__sliders\"},[o(\"div\",{staticClass:\"vue-color__chrome__hue-wrap\"},[o(\"hue\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__alpha-wrap\"},[o(\"alpha\",{on:{change:e.childChange},model:{value:e.colors,callback:function(t){e.colors=t},expression:\"colors\"}})],1)])]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__fields-wrap\"},[o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:0===e.fieldsIndex,expression:\"fieldsIndex === 0\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"hex\"},on:{change:e.inputChange},model:{value:e.colors.hex,callback:function(t){e.colors.hex=t},expression:\"colors.hex\"}})],1)]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:1===e.fieldsIndex,expression:\"fieldsIndex === 1\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"r\"},on:{change:e.inputChange},model:{value:e.colors.rgba.r,callback:function(t){e.colors.rgba.r=t},expression:\"colors.rgba.r\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"g\"},on:{change:e.inputChange},model:{value:e.colors.rgba.g,callback:function(t){e.colors.rgba.g=t},expression:\"colors.rgba.g\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"b\"},on:{change:e.inputChange},model:{value:e.colors.rgba.b,callback:function(t){e.colors.rgba.b=t},expression:\"colors.rgba.b\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:2===e.fieldsIndex,expression:\"fieldsIndex === 2\"}],staticClass:\"vue-color__chrome__fields\"},[o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"h\"},on:{change:e.inputChange},model:{value:e.colors.hsl.h,callback:function(t){e.colors.hsl.h=t},expression:\"colors.hsl.h\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"s\"},on:{change:e.inputChange},model:{value:e.colors.hsl.s,callback:function(t){e.colors.hsl.s=t},expression:\"colors.hsl.s\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"l\"},on:{change:e.inputChange},model:{value:e.colors.hsl.l,callback:function(t){e.colors.hsl.l=t},expression:\"colors.hsl.l\"}})],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__field\"},[o(\"ed-in\",{attrs:{label:\"a\",\"arrow-offset\":.01,max:1},on:{change:e.inputChange},model:{value:e.colors.a,callback:function(t){e.colors.a=t},expression:\"colors.a\"}})],1)]),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__chrome__toggle-btn\",on:{click:e.toggleViews}},[o(\"div\",{staticClass:\"vue-color__chrome__icon\"},[o(\"svg\",{staticStyle:{width:\"24px\",height:\"24px\"},attrs:{viewBox:\"0 0 24 24\"},on:{mouseover:e.showHighlight,mouseenter:e.showHighlight,mouseout:e.hideHighlight}},[o(\"path\",{attrs:{fill:\"#333\",d:\"M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z\"}})])]),e._v(\" \"),o(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.highlight,expression:\"highlight\"}],staticClass:\"vue-color__chrome__icon-highlight\"})])])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__c-alpha\"},[o(\"div\",{staticClass:\"vue-color__c-alpha__checkboard-wrap\"},[o(\"checkboard\")],1),e._v(\" \"),o(\"div\",{staticClass:\"vue-color__c-alpha__gradient\",style:{background:e.gradientColor}}),e._v(\" \"),o(\"div\",{ref:\"container\",staticClass:\"vue-color__c-alpha__container\",on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[o(\"div\",{staticClass:\"vue-color__c-alpha__pointer\",style:{left:100*e.colors.a+\"%\"}},[o(\"div\",{staticClass:\"vue-color__c-alpha__picker\"})])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o(\"div\",{staticClass:\"vue-color__c-checkerboard\",style:{background:e.bgStyle}})},staticRenderFns:[]}},function(e,t,o){var r=o(21);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(22);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(23);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(24);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(25);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(26);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(27);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(28);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(29);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(30);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(31);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)},function(e,t,o){var r=o(32);\"string\"==typeof r&&(r=[[e.id,r,\"\"]]);o(2)(r,{});r.locals&&(e.exports=r.locals)}])});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-color/dist/vue-color.min.js\n// module id = 15\n// module chunks = 0","\n/* styles */\nrequire(\"!!vue-style-loader!css-loader?minimize!../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-1073f3cf\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./FAB.vue\")\nrequire(\"!!vue-style-loader!css-loader?minimize!../node_modules/vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-1073f3cf\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=1!./FAB.vue\")\n\nvar Component = require(\"!../node_modules/vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./FAB.vue\"),\n /* template */\n require(\"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1073f3cf\\\"}!../node_modules/vue-loader/lib/selector?type=template&index=0!./FAB.vue\"),\n /* scopeId */\n \"data-v-1073f3cf\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/FAB.vue\n// module id = 16\n// module chunks = 0","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n directives: [{\n name: \"on-clickaway\",\n rawName: \"v-on-clickaway\",\n value: (_vm.away),\n expression: \"away\"\n }],\n ref: _vm.fabWrapper,\n staticClass: \"fab-wrapper\",\n style: ([_vm.pos, {\n zIndex: _vm.zIndex\n }, {\n position: _vm.positionType\n }]),\n attrs: {\n \"id\": _vm.position + '-wrapper'\n }\n }, [_c('div', {\n staticClass: \"actions-container\",\n style: (_vm.listPos),\n attrs: {\n \"id\": _vm.position + '-action'\n }\n }, [_c('transition', {\n attrs: {\n \"name\": \"fab-actions-appear\",\n \"enter-active-class\": _vm.transitionEnter,\n \"leave-active-class\": _vm.transitionLeave\n }\n }, [_c('ul', {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: (_vm.toggle),\n expression: \"toggle\"\n }],\n staticClass: \"fab-list\"\n }, [_vm._l((_vm.actions), function(action) {\n return [_c('transition', {\n attrs: {\n \"enter-active-class\": \"animated quick zoomIn\",\n \"leave-active-class\": \"animated quick zoomOut\"\n },\n on: {\n \"after-enter\": _vm.afterActionsTransitionEnter\n }\n }, [(action.tooltip) ? [(_vm.toggle) ? _c('li', {\n directives: [{\n name: \"tooltip\",\n rawName: \"v-tooltip\",\n value: ({\n content: action.tooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip',\n trigger: _vm.tooltipTrigger\n }),\n expression: \"{ content: action.tooltip, placement: tooltipPosition, classes: 'fab-tooltip', trigger: tooltipTrigger}\"\n }],\n ref: \"actions\",\n refInFor: true,\n staticClass: \"pointer\",\n style: ({\n 'background-color': action.color || _vm.bgColor\n }),\n on: {\n \"click\": function($event) {\n _vm.toParent(action.name)\n }\n }\n }, [_c('i', {\n class: [_vm.actionIconSize, 'material-icons']\n }, [_vm._v(_vm._s(action.icon))])]) : _vm._e()] : [(_vm.toggle) ? _c('li', {\n staticClass: \"pointer\",\n style: ({\n 'background-color': action.color || _vm.bgColor\n }),\n on: {\n \"click\": function($event) {\n _vm.toParent(action.name)\n }\n }\n }, [_c('i', {\n class: [_vm.actionIconSize, 'material-icons']\n }, [_vm._v(_vm._s(action.icon))])]) : _vm._e()]], 2)]\n })], 2)])], 1), _vm._v(\" \"), (_vm.rippleShow) ? [(_vm.mainTooltip) ? [_c('div', {\n directives: [{\n name: \"ripple\",\n rawName: \"v-ripple\",\n value: (_vm.rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''),\n expression: \"rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''\"\n }, {\n name: \"tooltip\",\n rawName: \"v-tooltip\",\n value: ({\n content: _vm.mainTooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip'\n }),\n expression: \"{ content: mainTooltip, placement: tooltipPosition, classes: 'fab-tooltip' }\"\n }],\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n on: {\n \"click\": function($event) {\n _vm.toggle = !_vm.toggle\n }\n }\n }, [_c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons main']\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons close']\n }, [_vm._v(\"add\")])])] : [_c('div', {\n directives: [{\n name: \"ripple\",\n rawName: \"v-ripple\",\n value: (_vm.rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''),\n expression: \"rippleColor == 'light' ? 'rgba(255, 255, 255, 0.35)' : ''\"\n }],\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n on: {\n \"click\": function($event) {\n _vm.toggle = !_vm.toggle\n }\n }\n }, [_c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons main']\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n class: [_vm.mainIconSize, {\n rotate: _vm.toggle && _vm.allowRotation\n }, 'material-icons close']\n }, [_vm._v(\"add\")])])]] : [(_vm.mainTooltip) ? [_c('div', {\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n }),\n attrs: {\n \"v-tooltip\": {\n content: _vm.mainTooltip,\n placement: _vm.tooltipPosition,\n classes: 'fab-tooltip'\n }\n }\n }, [_c('i', {\n staticClass: \"material-icons md-36 main\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n staticClass: \"material-icons md-36 close\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(\"add\")])])] : [_c('div', {\n staticClass: \"fab-main pointer\",\n style: ({\n 'background-color': _vm.bgColor,\n 'padding': _vm.paddingAmount\n })\n }, [_c('i', {\n staticClass: \"material-icons md-36 main\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(_vm._s(_vm.mainIcon))]), _vm._v(\" \"), _c('i', {\n staticClass: \"material-icons md-36 close\",\n class: {\n rotate: _vm.toggle && _vm.allowRotation\n }\n }, [_vm._v(\"add\")])])]]], 2)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-1073f3cf\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/FAB.vue\n// module id = 17\n// module chunks = 0","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n attrs: {\n \"id\": \"app\"\n }\n }, [_c('link', {\n attrs: {\n \"rel\": \"stylesheet\",\n \"href\": \"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.4.1/css/bulma.min.css\"\n }\n }), _vm._v(\" \"), _c('link', {\n attrs: {\n \"href\": \"https://fonts.googleapis.com/icon?family=Material+Icons\",\n \"rel\": \"stylesheet\"\n }\n }), _vm._v(\" \"), _c('a', {\n attrs: {\n \"href\": _vm.repoUrl\n }\n }, [_c('img', {\n staticStyle: {\n \"position\": \"absolute\",\n \"top\": \"0\",\n \"right\": \"0\",\n \"border\": \"0\"\n },\n attrs: {\n \"src\": \"https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67\",\n \"alt\": \"Fork me on GitHub\",\n \"data-canonical-src\": \"https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png\"\n }\n })]), _vm._v(\" \"), _vm._m(0), _vm._v(\" \"), _c('section', {\n staticClass: \"section\",\n staticStyle: {\n \"padding-top\": \".5rem\"\n }\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-8 is-offset-2\"\n }, [_c('div', {\n staticClass: \"box formated\"\n }, [_vm._m(1), _vm._v(\" \"), _c('div', {\n staticClass: \"content\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-4\",\n staticStyle: {\n \"display\": \"flex\",\n \"justify-content\": \"center\"\n }\n }, [_c('div', {\n staticClass: \"field is-pulled-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Color\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control\"\n }, [_c('chrome-picker', {\n model: {\n value: (_vm.colors),\n callback: function($$v) {\n _vm.colors = $$v\n },\n expression: \"colors\"\n }\n })], 1)])]), _vm._v(\" \"), _c('div', {\n staticClass: \"column\"\n }, [_c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Position\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expanded\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.position),\n expression: \"position\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.position = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.positions), function(pos) {\n return _c('option', [_vm._v(_vm._s(pos))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Position Type\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.positionType),\n expression: \"positionType\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.positionType = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.positionTypes), function(type) {\n return _c('option', [_vm._v(_vm._s(type))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Size\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.iconSizes),\n expression: \"iconSizes\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.iconSizes = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.sizes), function(size) {\n return _c('option', [_vm._v(_vm._s(size))])\n }))])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field has-text-left\"\n }, [_c('label', {\n staticClass: \"label\"\n }, [_vm._v(\"Tooltip event\")]), _vm._v(\" \"), _c('p', {\n staticClass: \"control is-expandend\"\n }, [_c('span', {\n staticClass: \"select is-fullwidth\"\n }, [_c('select', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.tooltipEvent),\n expression: \"tooltipEvent\"\n }],\n on: {\n \"change\": function($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {\n return o.selected\n }).map(function(o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val\n });\n _vm.tooltipEvent = $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n }\n }\n }, _vm._l((_vm.tooltipEvents), function(type) {\n return _c('option', [_vm._v(_vm._s(type))])\n }))])])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n Main Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.mainIcon),\n expression: \"mainIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.mainIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.mainIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.mainTooltip),\n expression: \"mainTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.mainTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.mainTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n First Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.firstIcon),\n expression: \"firstIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.firstIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.firstIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.firstTooltip),\n expression: \"firstTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.firstTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.firstTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"label\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_vm._v(\"\\n Second Icon & Tooltip\\n \")]), _vm._v(\" \"), _c('div', {\n staticClass: \"field is-horizontal\"\n }, [_c('div', {\n staticClass: \"field-body\"\n }, [_c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.secondIcon),\n expression: \"secondIcon\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.secondIcon)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.secondIcon = $event.target.value\n }\n }\n })])]), _vm._v(\" \"), _c('div', {\n staticClass: \"field\"\n }, [_c('p', {\n staticClass: \"control\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.secondTooltip),\n expression: \"secondTooltip\"\n }],\n staticClass: \"input\",\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.secondTooltip)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.secondTooltip = $event.target.value\n }\n }\n })])])])]), _vm._v(\" \"), _c('label', {\n staticClass: \"checkbox\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.enableRotation),\n expression: \"enableRotation\"\n }],\n attrs: {\n \"type\": \"checkbox\"\n },\n domProps: {\n \"checked\": Array.isArray(_vm.enableRotation) ? _vm._i(_vm.enableRotation, null) > -1 : (_vm.enableRotation)\n },\n on: {\n \"__c\": function($event) {\n var $$a = _vm.enableRotation,\n $$el = $event.target,\n $$c = $$el.checked ? (true) : (false);\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$c) {\n $$i < 0 && (_vm.enableRotation = $$a.concat($$v))\n } else {\n $$i > -1 && (_vm.enableRotation = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.enableRotation = $$c\n }\n }\n }\n }), _vm._v(\"\\n Enable Rotation\\n \")]), _vm._v(\" \"), _c('label', {\n staticClass: \"checkbox\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.revertDirection),\n expression: \"revertDirection\"\n }],\n attrs: {\n \"type\": \"checkbox\"\n },\n domProps: {\n \"checked\": Array.isArray(_vm.revertDirection) ? _vm._i(_vm.revertDirection, null) > -1 : (_vm.revertDirection)\n },\n on: {\n \"__c\": function($event) {\n var $$a = _vm.revertDirection,\n $$el = $event.target,\n $$c = $$el.checked ? (true) : (false);\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$c) {\n $$i < 0 && (_vm.revertDirection = $$a.concat($$v))\n } else {\n $$i > -1 && (_vm.revertDirection = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.revertDirection = $$c\n }\n }\n }\n }), _vm._v(\"\\n Revert Direction\\n \")]), _vm._v(\" \"), _c('label', {\n staticClass: \"checkbox\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding-right\": \"1rem\"\n }\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.autoReverse),\n expression: \"autoReverse\"\n }],\n attrs: {\n \"type\": \"checkbox\"\n },\n domProps: {\n \"checked\": Array.isArray(_vm.autoReverse) ? _vm._i(_vm.autoReverse, null) > -1 : (_vm.autoReverse)\n },\n on: {\n \"__c\": function($event) {\n var $$a = _vm.autoReverse,\n $$el = $event.target,\n $$c = $$el.checked ? (true) : (false);\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$c) {\n $$i < 0 && (_vm.autoReverse = $$a.concat($$v))\n } else {\n $$i > -1 && (_vm.autoReverse = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.autoReverse = $$c\n }\n }\n }\n }), _vm._v(\"\\n Auto Reverse Direction\\n \")])])]), _vm._v(\" \"), _c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column has-text-centered\"\n }, [_c('a', {\n attrs: {\n \"href\": _vm.repoUrl\n }\n }, [_vm._v(\"Installation & Code usage\")])])])])])])])])]), _vm._v(\" \"), _c('footer', {\n staticClass: \"footer\"\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"content has-text-centered\"\n }, [_c('p', [_c('strong', [_vm._v(\"Floating Action Button Vue Component\")]), _vm._v(\" by \"), _c('a', {\n attrs: {\n \"href\": _vm.teamUrl\n }\n }, [_vm._v(\"Pygmy Team\")]), _vm._v(\".\\n \")]), _vm._v(\" \"), _vm._m(2)])])]), _vm._v(\" \"), _c('fab', {\n attrs: {\n \"position\": _vm.position,\n \"icon-size\": _vm.iconSizes,\n \"position-type\": _vm.positionType,\n \"revert-direction\": _vm.revertDirection,\n \"auto-reverse\": _vm.autoReverse,\n \"bg-color\": _vm.colors.hex,\n \"main-icon\": _vm.mainIcon,\n \"main-tooltip\": _vm.mainTooltip,\n \"actions\": [{\n name: 'alertMe',\n icon: _vm.firstIcon,\n tooltip: _vm.firstTooltip,\n color: '#d11014'\n }, {\n name: 'alertMe',\n icon: _vm.secondIcon,\n tooltip: _vm.secondTooltip\n }],\n \"fixed-tooltip\": _vm.fixedTooltip,\n \"enable-rotation\": _vm.enableRotation\n },\n on: {\n \"alertMe\": _vm.alert\n }\n })], 1)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('section', {\n staticClass: \"hero\"\n }, [_c('div', {\n staticClass: \"hero-body\",\n staticStyle: {\n \"padding\": \"1rem 0\"\n }\n }, [_c('div', {\n staticClass: \"container\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column is-8 is-offset-3\",\n staticStyle: {\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n }, [_c('div', {\n staticClass: \"is-pulled-left\"\n }, [_c('img', {\n attrs: {\n \"width\": \"350px\",\n \"src\": require(\"./assets/logo.png\")\n }\n })]), _vm._v(\" \"), _c('div', {\n staticClass: \"is-pulled-left\",\n staticStyle: {\n \"text-align\": \"left\"\n }\n }, [_c('h1', {\n staticClass: \"title text-medium-grey\",\n staticStyle: {\n \"margin-bottom\": \".5rem\"\n }\n }, [_vm._v(\"\\n Floating Action Button\\n \")]), _vm._v(\" \"), _c('hr', {\n staticClass: \"is-marginless\"\n }), _vm._v(\" \"), _c('h2', {\n staticClass: \"subtitle text-light-grey\",\n staticStyle: {\n \"margin-top\": \".5rem\"\n }\n }, [_vm._v(\"\\n A Vue Component\\n \"), _c('span', {\n staticClass: \"is-pulled-right\"\n }, [_c('a', {\n staticClass: \"github-button\",\n attrs: {\n \"href\": \"https://github.com/PygmySlowLoris/vue-fab\",\n \"data-icon\": \"octicon-star\",\n \"data-size\": \"large\",\n \"aria-label\": \"Star PygmySlowLoris/vue-fab on GitHub\"\n }\n }, [_vm._v(\"Star\")])])])])])])])])])\n},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticClass: \"heading\"\n }, [_c('div', {\n staticClass: \"columns\"\n }, [_c('div', {\n staticClass: \"column\"\n }, [_c('i', {\n staticClass: \"material-icons top-left\"\n }, [_vm._v(\"code\")]), _vm._v(\" \"), _c('span', {\n staticClass: \"is-pulled-right\"\n }, [_c('b', [_vm._v(\"Example\")])])])])])\n},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('p', [_c('small', [_vm._v(\"Used dependencies for this demo: \"), _c('a', {\n attrs: {\n \"href\": \"http://bulma.io\"\n }\n }, [_vm._v(\"bulma\")]), _vm._v(\" | \"), _c('a', {\n attrs: {\n \"href\": \"https://github.com/xiaokaike/vue-color\"\n }\n }, [_vm._v(\"vue-color\")])])])\n}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-d877a75c\"}!./~/vue-loader/lib/selector.js?type=template&index=0!./demo/App.vue\n// module id = 18\n// module chunks = 0","export default {\n bind: function(el, binding){\n\n // Default values.\n const props = {\n event: 'click',\n transition: 600\n };\n\n setProps(Object.keys(binding.modifiers),props);\n\n el.addEventListener(props.event, function(event) {\n rippler(event, el, binding.value);\n });\n\n var bg = binding.value || 'rgba(0, 0, 0, 0.35)';\n\n function rippler(event, el) {\n var target = el;\n\n // Get necessary variables\n var rect = target.getBoundingClientRect(),\n left = rect.left,\n top = rect.top,\n width = target.offsetWidth,\n height = target.offsetHeight,\n dx = event.clientX - left,\n dy = event.clientY - top,\n maxX = Math.max(dx, width - dx),\n maxY = Math.max(dy, height - dy),\n style = window.getComputedStyle(target),\n radius = Math.sqrt((maxX * maxX) + (maxY * maxY));\n\n // Create the ripple and its container\n var ripple = document.createElement(\"div\"),\n rippleContainer = document.createElement(\"div\");\n\n //Styles for ripple\n ripple.style.marginTop= '0px';\n ripple.style.marginLeft= '0px';\n ripple.style.width= '1px';\n ripple.style.height= '1px';\n ripple.style.transition= 'all ' + props.transition + 'ms cubic-bezier(0.4, 0, 0.2, 1)';\n ripple.style.borderRadius= '50%';\n ripple.style.pointerEvents= 'none';\n ripple.style.position= 'relative';\n ripple.style.zIndex= '9999';\n ripple.style.backgroundColor = bg;\n\n //Styles for rippleContainer\n rippleContainer.style.position= 'absolute';\n rippleContainer.style.left = '0';\n rippleContainer.style.top = '0';\n rippleContainer.style.height = '0';\n rippleContainer.style.width = '0';\n rippleContainer.style.pointerEvents = 'none';\n rippleContainer.style.overflow = 'hidden';\n\n rippleContainer.appendChild(ripple);\n document.body.appendChild(rippleContainer);\n\n ripple.style.marginLeft = dx + \"px\";\n ripple.style.marginTop = dy + \"px\";\n\n rippleContainer.style.left = left + (((window.pageXOffset || document.scrollLeft) - (document.clientLeft || 0)) || 0) + \"px\";\n rippleContainer.style.top = top + (((window.pageYOffset || document.scrollTop) - (document.clientTop || 0)) || 0) + \"px\";\n rippleContainer.style.width = width + \"px\";\n rippleContainer.style.height = height + \"px\";\n rippleContainer.style.borderTopLeftRadius = style.borderTopLeftRadius;\n rippleContainer.style.borderTopRightRadius = style.borderTopRightRadius;\n rippleContainer.style.borderBottomLeftRadius = style.borderBottomLeftRadius;\n rippleContainer.style.borderBottomRightRadius = style.borderBottomRightRadius;\n\n setTimeout(function() {\n\n ripple.style.width = radius * 2 + \"px\";\n ripple.style.height = radius * 2 + \"px\";\n ripple.style.marginLeft = dx - radius + \"px\";\n ripple.style.marginTop = dy - radius + \"px\";\n }, 0);\n\n setTimeout(function() {\n ripple.style.backgroundColor = \"rgba(0, 0, 0, 0)\";\n }, 250);\n\n setTimeout(function() {\n ripple.remove();\n rippleContainer.remove();\n }, 650);\n }\n }\n}\n\nfunction setProps(modifiers,props) {\n modifiers.forEach(function(item) {\n if(isNaN(Number(item)))\n props.event = item;\n else\n props.transition = item;\n });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-ripple-directive/src/ripple.js\n// module id = 19\n// module chunks = 0","// style-loader: Adds some css to the DOM by adding a