From b0ecc2a669ad9b5fb72a9ab9df8167f56853bedc Mon Sep 17 00:00:00 2001 From: Jean Ouina Date: Sun, 19 Jul 2020 13:29:54 +0200 Subject: [PATCH] Sync with rauenzi/BetterDiscordApp 640c511 --- BetterDiscordApp/js/main.js | 15 ++++++++++----- BetterDiscordApp/js/main.min.js | 2 +- BetterDiscordApp/src/0globals.js | 11 ++--------- BetterDiscordApp/src/modules/core.js | 8 +++++++- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/BetterDiscordApp/js/main.js b/BetterDiscordApp/js/main.js index e586098..279a707 100644 --- a/BetterDiscordApp/js/main.js +++ b/BetterDiscordApp/js/main.js @@ -160,12 +160,9 @@ export const LCChanelog = { const bbdChangelog = { description: "BBD's changelog.", changes: [{ - title: "What's New?", - items: ["**Lightcord** is now using BandagedBD. That means all plugins you were using can be used too !", "**Window Transparency** changes were made to more compatible with external window managers and addons like Glasstron.", "Initialization sequence has once again been changed slightly to hopefully improve loading times."] - }, { title: "Bug Fixes", type: "fixed", - items: ["Some fixes related to showing modals in the `BdApi`."] + items: ["Some fixes related to showing modals in the `BdApi`.", "Fixed the open folder buttons for plugins and themes"] }] }; const settings = { @@ -2039,6 +2036,9 @@ __webpack_require__.r(__webpack_exports__); +const { + ipcRenderer +} = __webpack_require__(/*! electron */ "electron"); function Core() {// Object.assign(bdConfig, __non_webpack_require__(DataStore.configFile)); // this.init(); @@ -2047,14 +2047,19 @@ function Core() {// Object.assign(bdConfig, __non_webpack_require__(DataStore.co let methods; Core.prototype.setConfig = function (config) { + if (this.hasStarted) return; Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__["bdConfig"], config); }; Core.prototype.setMethods = function (m) { + if (this.hasStarted) return; methods = m; }; Core.prototype.init = async function () { + if (this.hasStarted) return; + this.hasStarted = true; + if (!Array.prototype.flat) { _utils__WEBPACK_IMPORTED_MODULE_1__["default"].alert("Not Supported", "BetterDiscord v" + _0globals__WEBPACK_IMPORTED_MODULE_0__["bbdVersion"] + " does not support this old version (" + _0globals__WEBPACK_IMPORTED_MODULE_0__["currentDiscordVersion"] + ") of Discord. Please update your Discord installation before proceeding."); return; @@ -12674,4 +12679,4 @@ module.exports = require("yauzl"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2NpcmN1cy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvbGlnaHRjb3JkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9sYXllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2VydmVyQ2FyZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2lkZWJhclZpZXcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2Nyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NHcm91cC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJJdGVtLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFyU2VwYXJhdG9yLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGltZXN0YW1wUmVuZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1rZGlycFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJtb2R1bGVcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibm9kZS1mZXRjaFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJpbXJhZlwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJ5YXV6bFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsIml0ZW1zIiwidHlwZSIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0IiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsImNzcyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJwcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkJldHRlckRpc2NvcmQiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwicmVtb3ZlRGEiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwiY2hpbGRyZW4iLCJwdXNoIiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwiam9pbiIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhdGNoQ2xhc3NNb2R1bGVzIiwibm9ybWFsaXplRWxlbWVudCIsInBhdGNoRE9NTWV0aG9kcyIsIm1vZHVsZXMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsInNwbGl0IiwiY29tcG9uZW50TmFtZSIsImNsYXNzTmFtZXMiLCJjbGFzc0xpc3QiLCJub3JtYWxDbGFzcyIsImNhbWVsQ2FzZSIsInMiLCJpIiwidG9VcHBlckNhc2UiLCJzbGljZSIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInRvUmVtb3ZlIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJ0b2tlbiIsInRva2VucyIsInQiLCJDb2xvcmVkVGV4dCIsImluamVjdENvbG9yZWRUZXh0IiwiY2FuY2VsQ29sb3JlZFRleHQiLCJNZXNzYWdlQ29tcG9uZW50IiwiYmVmb3JlIiwibWV0aG9kQXJndW1lbnRzIiwiY2hpbGRyZW5NZXNzYWdlQ29udGVudCIsIm1lc3NhZ2VDb250ZW50IiwiZGlzcGxheU5hbWUiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImVsZW0iLCJzZXRQcm9wZXJ0eSIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwiYWRkb25DYWNoZSIsInRpbWVDYWNoZSIsIndhdGNoZXJzIiwicGF0Y2hFeHRlbnNpb25zIiwiZ2V0Q29udGVudFJlcXVpcmUiLCJwbHVnaW5zRm9sZGVyIiwiX3BsdWdpbnNGb2xkZXIiLCJyZWFscGF0aFN5bmMiLCJkYXRhUGF0aCIsInRoZW1lc0ZvbGRlciIsIl90aGVtZXNGb2xkZXIiLCJsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSIsImRhdGFTdG9yZSIsImdldFNldHRpbmdHcm91cCIsInNldFNldHRpbmdHcm91cCIsImVuY3J5cHRTZXR0aW5nc0NhY2hlIiwiSlNPTiIsInBhcnNlIiwiZGVjcnlwdFNldHRpbmdzQ2FjaGUiLCJoYXNoIiwicmVzdWx0Iiwic3VzcGVjdCIsInNhdmVBZGRvbkNhY2hlIiwic3RyaW5naWZ5Iiwid2F0Y2hDb250ZW50IiwiY29udGVudFR5cGUiLCJpc1BsdWdpbiIsImJhc2VGb2xkZXIiLCJmaWxlRW5kaW5nIiwid2F0Y2giLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImVyciIsImNvZGUiLCJ1bmxvYWRQbHVnaW4iLCJ1bmxvYWRUaGVtZSIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZFBsdWdpbiIsImxvYWRUaGVtZSIsInJlbG9hZFBsdWdpbiIsInJlbG9hZFRoZW1lIiwidW53YXRjaENvbnRlbnQiLCJjbG9zZSIsImV4dHJhY3RNZXRhIiwiZmlyc3RMaW5lIiwiaGFzT2xkTWV0YSIsInBhcnNlT2xkTWV0YSIsImhhc05ld01ldGEiLCJwYXJzZU5ld01ldGEiLCJtZXRhIiwicmF3TWV0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiaW5kZXhPZiIsInBhcnNlZCIsImZvcm1hdCIsImJsb2NrIiwib3V0IiwiZmllbGQiLCJhY2N1bSIsImxpbmUiLCJjaGFyQXQiLCJsIiwic3Vic3RyIiwic2VsZiIsIm9yaWdpbmFsUmVxdWlyZSIsInBvc3NpYmxlUGF0aCIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN0cmlwQk9NIiwiYWRkZWQiLCJhdGltZU1zIiwibW9kaWZpZWQiLCJtdGltZU1zIiwic2l6ZSIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImNvbmZpZyIsImZsYXQiLCJ2ZXJzaW9uIiwiRUQiLCJXZWJTb2NrZXQiLCJwYXRjaEF0dHJpYnV0ZXMiLCJpbml0U2V0dGluZ3MiLCJjaGVja0Zvckd1aWxkcyIsImluaXRpYWxpemUiLCJpbml0aWFsaXplU2V0dGluZ3MiLCJjb250ZW50TWFuYWdlciIsImF0b2IiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsInRvcCIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsIkFuY2hvciIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsIm9yaWdpbmFsIiwic2F2ZVNldHRpbmdzIiwibG9hZFNldHRpbmdzIiwic2V0dGluZyIsIkFwaSIsImdldFByZWRpY2F0ZVNlY3Rpb25zIiwic2V0dGluZ01vZHVsZSIsImNhbGwiLCJzZWN0aW9uIiwicG9wZWQiLCJwb3AiLCJyZW5kZXJTaWRlYmFyIiwiY2xhc3NOYW1lTGF5ZXIiLCJjbGFzc05hbWVTb2NpYWxMaW5rcyIsImNsYXNzTmFtZU1vZGFsIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImxheWVyIiwiYW5pbWF0aW5nIiwic29jaWFsTGlua3MiLCJtb2RhbCIsImlubmVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJ0b1N0cmluZyIsInNvY2lhbE1vZHVsZTEiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJsaW5rIiwiY2xhc3NOYW1lQ29sb3JNdXRlZCIsInNpemVzIiwiY2xhc3NOYW1lVmVyc2lvbkhhc2giLCJjb2xvck11dGVkIiwic2l6ZTMyIiwidmVyc2lvbkhhc2giLCJicmFuY2giLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJlbGVjdHJvbiIsImdldEdsb2JhbCIsImNvbW1pdCIsIm9yaWdpbmFsVmVyc2lvbnMiLCJzcGxpY2UiLCJnZXRHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZmluZEJ5UHJvcHMiLCJndWlsZHMiLCJwaWxsIiwiZ3VpbGRMaXN0SXRlbXNQYXRjaCIsIkd1aWxkQ2xhc3NlcyIsImxpc3RJdGVtQ2xhc3MiLCJibG9iQ2xhc3MiLCJyZWFjdEluc3RhbmNlIiwiR3VpbGRDb21wb25lbnQiLCJyZXR1cm4iLCJ0aGlzT2JqZWN0IiwiZ3VpbGREYXRhIiwidW5yZWFkIiwic2VsZWN0ZWQiLCJhdWRpbyIsInZpZGVvIiwiYmFkZ2UiLCJhbmltYXRhYmxlIiwiZ3VpbGRQaWxsUGF0Y2giLCJndWlsZFBpbGwiLCJob3ZlcmVkIiwiZ3VpbGRTZXBhcmF0b3JQYXRjaCIsIkd1aWxkcyIsImd1aWxkQ29tcG9uZW50cyIsIkd1aWxkU2VwYXJhdG9yIiwiU2VwYXJhdG9yIiwiQXR0YWNobWVudFBhdGNoIiwiQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJnZXROZXN0ZWRQcm9wIiwicGF0Y2giLCJtZXNzYWdlSGVhZGVyUGF0Y2giLCJNZXNzYWdlSGVhZGVyIiwiY2hhdCIsIm5leHRUaWNrIiwiZ2V0RWxlbWVudEJ5SWQiLCJjaGlsZE5vZGVzIiwiYmxvY2tEaXYiLCJkaXN0YW50IiwiZ2V0QmFkZ2VzIiwiYmFkZ2VzIiwic3ZnIiwid2lkdGgiLCJzY29wZXMiLCJzY29wZSIsImNvbXBvbmVudCIsImRpdjIiLCJyZWFjdERvbSIsInJlbmRlciIsIm1lbWJlckxpc3RQYXRjaCIsIk1lbWJlckxpc3RJdGVtIiwicmVuZGVyRGVjb3JhdG9ycyIsInVwZGF0ZUluamVjdG9yIiwiaW5qZWN0aW9uUGF0aCIsInJtcmYiLCJ5YXV6bCIsIm1rZGlycCIsInJlcXVlc3QiLCJwYXJlbnRQYXRoIiwiZm9sZGVyTmFtZSIsInppcExpbmsiLCJzYXZlZFppcCIsImV4dHJhY3RlZEZvbGRlciIsInN1Y2Nlc3MiLCJlbmNvZGluZyIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsImFscmVhZHlFeGlzdHMiLCJyZXMiLCJleGlzdHMiLCJyZW5hbWUiLCJyb3VuZCIsInBlcmZvcm1hbmNlIiwid3JpdGVGaWxlIiwiemlwZmlsZSIsImxhenlFbnRyaWVzIiwiemlwIiwib24iLCJlbnRyeSIsImZpbGVOYW1lIiwicmVhZEVudHJ5IiwiZnVsbFBhdGgiLCJzeW5jIiwiZGlybmFtZSIsIm9wZW5SZWFkU3RyZWFtIiwicmVhZFN0cmVhbSIsInBpcGUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uY2UiLCJiYWNrdXBGb2xkZXIiLCJ1bmxpbmsiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInJlbGVhc2VDaGFubmVsIiwiZ2xvYmFscyIsImdldFJlbGVhc2VDaGFubmVsIiwic3RhYmxlIiwiY2FuYXJ5IiwicHRiIiwicGx1Z2luRGF0YSIsIkJERmlsZSIsIndyaXRlRmlsZVN5bmMiLCJzZXR0aW5nc0ZpbGUiLCJ1bmxpbmtTeW5jIiwiX2luamVjdGlvblBhdGgiLCJiYXNlIiwicm9hbWluZ0Jhc2UiLCJnZXRQYXRoIiwicm9hbWluZ0xvY2F0aW9uIiwicmVhbExvY2F0aW9uIiwiY29uZmlnRmlsZSIsIl9jb25maWdGaWxlIiwiX0JERmlsZSIsIl9zZXR0aW5nc0ZpbGUiLCJnZXRQbHVnaW5GaWxlIiwiRGV2TW9kZSIsImRlYnVnTGlzdGVuZXIiLCJjb3B5U2VsZWN0b3JMaXN0ZW5lciIsInN0YXJ0RGVidWdMaXN0ZW5lciIsInN0YXJ0Q29weVNlbGVjdG9yIiwic3RvcERlYnVnTGlzdGVuZXIiLCJzdG9wQ29weVNlbGVjdG9yIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIndoaWNoIiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzdG9wUHJvcGFnYXRpb24iLCJzZWxlY3RvciIsImdldFNlbGVjdG9yIiwiY2xhc3NMYXllciIsImNsYXNzSXRlbXMiLCJkaXNhYmxlZFBvaW50ZXJFdmVudHMiLCJtZW51IiwiYXR0YWNoIiwiY20iLCJxdWVyeSIsImNvbnRhaW5lciIsImxheWVyQ29udGFpbmVyIiwiY21XcmFwIiwic3R5bGVGbGV4aWJsZSIsImFjY29tbW9kYXRlU2Nyb2xsYmFyIiwiYXBwZW5kIiwiY2xpZW50WSIsImxlZnQiLCJjbGllbnRYIiwic2Nyb2xsZXJDbGFzc2VzIiwic2Nyb2xsZXJXcmFwIiwic2Nyb2xsZXJUaGVtZWQiLCJ0aGVtZUdob3N0SGFpcmxpbmUiLCJzY3JvbGxlciIsInJlbW92ZUNNIiwia2V5Q29kZSIsImNtZyIsImNtaSIsIml0ZW0iLCJsYWJlbENvbnRhaW5lciIsImNvbG9yRGVmYXVsdCIsImxhYmVsIiwiTmF0aXZlTW9kdWxlIiwiY29weSIsImVsZW1lbnRzIiwicXVlcnlBbGwiLCJmb2N1c2VkIiwic2VwYXJhdG9yIiwic2Nyb2xsSGVpZ2h0IiwiZWwiLCJuYW1lcyIsInBhcmVudE5vZGUiLCJ1bnNoaWZ0Iiwib3duZXJEb2N1bWVudCIsInRhZ05hbWUiLCJmcm9tIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJnZXRSdWxlcyIsInN0eWxlU2hlZXRzIiwic2hlZXRzIiwicnVsZXMiLCJjc3NSdWxlcyIsImVsZW1lbnRSdWxlcyIsInNlbGVjdG9yVGV4dCIsIm1hdGNoZXMiLCJEaXNhYmxlVHlwaW5nIiwic3RhcnRUeXBpbmciLCJ0eXBpbmdNb2R1bGUiLCJkaXNhYmxlZCIsInN0b3BUeXBpbmciLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwibmV3UHJvbWlzZSIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsImhhbmRsZVJlcXVlc3QiLCJSb3V0ZXMiLCJzdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJqc29uIiwicHJvbWlzZSIsInVzZXJfaWQiLCJjYXRjaCIsIkxpZ2h0Y29yZEVycm9yIiwicm91dGUiLCJyZWplY3QiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJCdWdIdW50ZXJCYWRnZSIsIkNpcmN1cyIsImhlYWQiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGltZSIsInRpbWVGcmFjdGlvbiIsInByb2dyZXNzIiwiUSIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0Iiwic29tZSIsIm4iLCJub2RlVHlwZSIsImJhc2VFbGVtZW50IiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJjbG9uZU5vZGUiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiY2xhc3NuYW1lIiwiaW5kaWNhdG9yIiwiaGFzQ2xhc3MiLCJldmVyeSIsInJlcGxhY2VDbGFzcyIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiYXBwZW5kVG8iLCJ0aGlzTm9kZSIsInRoYXROb2RlIiwicHJlcGVuZFRvIiwicHJlcGVuZCIsImluc2VydEFmdGVyIiwidGFyZ2V0Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwibmV3Tm9kZSIsIm5leHQiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwiaW5kZXgiLCJwYXJlbnQiLCJmaW5kQ2hpbGQiLCJmaW5kQ2hpbGRyZW4iLCJwYXJlbnRzIiwiY2xvc2VzdCIsInBhcmVudHNVbnRpbCIsInNpYmxpbmdzIiwiYXR0cmlidXRlIiwiZ2xvYmFsIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhlaWdodCIsInRleHRDb250ZW50Iiwib3V0ZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzIiwiZXZlbnQiLCJkZWxlZ2F0ZSIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwiY2FuY2VsIiwibmV3Q2FuY2VsIiwiZmluZEluZGV4IiwiX19vZmZBbGwiLCJtYXRjaEZpbHRlciIsImxpc3RlbmVyIiwiZGVmYXVsdEZpbHRlciIsIm9uTW91bnRDaGFuZ2UiLCJvbk1vdW50Iiwid3JhcHBlZENhbGxiYWNrIiwib2JzZXJ2ZXIiLCJub2RlcyIsInJlbW92ZWROb2RlcyIsImRpcmVjdE1hdGNoIiwicGFyZW50TWF0Y2giLCJvblVubW91bnQiLCJvbkFkZGVkIiwid3JhcCIsImRvbVdyYXBwZXIiLCJyZXNvbHZlRWxlbWVudCIsIkVtb2ppUmVnZXgiLCJDdXN0b21FbW9qaU1vZHVsZSIsIkN1c3RvbUVtb2ppIiwiRW1vamlNb2R1bGVBcGkiLCJnZXRDdXN0b21FbW9qaUJ5SWQiLCJBdXRvY29tcGxldGVNb2R1bGUiLCJBdXRvQ29tcGxldGlvblRlbXBsYXRlcyIsImdldEF1dG9jb21wbGV0ZU9wdGlvbnMiLCJFbW9qaU1vZHVsZVF1ZXJ5IiwicXVlcnlFbW9qaVJlc3VsdHMiLCJNZXNzYWdlcyIsIkVNT0pJX01BVENISU5HIiwiZ3VpbGRNb2R1bGUiLCJnZXRHdWlsZCIsImdldEd1aWxkcyIsImlzRmV0Y2hpbmciLCJlbW9qaVNlYXJjaCIsImdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQiLCJMSUdIVENPUkRfRU1PSklTIiwiYXJnMSIsImFyZzIiLCJjb25kaXRpb24iLCJzZXRFbW9qaVVzYWJsZSIsInF1ZXJ5UmVzdWx0cyIsInJlc3VsdHMiLCJyZW5kZXJSZXN1bHRzIiwiRCIsImVtb2ppcyIsIkVNT0pJIiwiRW1vamkiLCJlbW9qaSIsInVuaXF1ZU5hbWUiLCJzZW50aW5lbCIsImd1aWxkSWQiLCJnZXRQbGFpblRleHQiLCJpc0FuaW1hdGVkIiwiYW5pbWF0ZWQiLCJtYW5hZ2VkIiwib3JpZ2luYWxOYW1lIiwiZ2V0UmF3VGV4dCIsImNhbmNlbEVtb2ppUmVuZGVyIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJuZXdDb250ZW50IiwiaGFzUGFyc2VkIiwiZXhlYyIsInJhdyIsIndvcmRzIiwid29yZCIsImFyciIsImVtb2ppSWQiLCJqdW1ib2FibGUiLCJyZWR1Y2UiLCJjdXJyZW50Iiwic2hpZnQiLCJvIiwidSIsImQiLCJvbkNsaWNrIiwib25Ib3ZlciIsIlIiLCJwcmVmaXgiLCJUaXRsZSIsIkVtb2ppRmlsdGVyTW9kdWxlIiwiaXNFbW9qaURpc2FibGVkIiwiaXNVc2FibGUiLCJ1c2FibGUiLCJzdXJyb2dhdGVzIiwiZGl2ZXJzaXR5IiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwia2V5d29yZCIsIm9vZiIsIm5vX2NvbW1lbnRzIiwicmVnZXhwcyIsInJlZ2V4IiwiaGFzaFRvVXJsIiwiY2hlY2tIYXNoIiwiZ2V0Q3VycmVudFdlYkNvbnRlbnRzIiwidXNlckFnZW50IiwiX19wYXRoIiwiaXNGcm9tTG9hZGVyIiwiY3J5cHRvIiwiQnVmZmVyIiwiYWxsb2MiLCJjcmVhdGVSZWFkU3RyZWFtIiwiY2h1bmsiLCJjb25jYXQiLCJoYXNoUmVzdWx0IiwiZGlnZXN0IiwicmVuZGVyVG9FbGVtZW50cyIsImZsb3dlclN0YXJNb2R1bGUiLCJmbG93ZXJTdGFyQ29udGFpbmVyIiwiY2hpbGRNb2R1bGUiLCJjaGlsZENvbnRhaW5lciIsImJvcmRlckNvbG9yIiwibmV4dE5vZGUiLCJjb25maXJtVGV4dCIsImRhbmdlciIsIm9uQ2FuY2VsIiwib25Db25maXJtIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwic3BhbiIsImZsb2F0IiwiZmxvd2VyU3RhciIsImdldEtleWVkQXJyYXkiLCJidWZmZXIiLCJpbnN0YWxsUGF0aCIsImN1cnNvciIsInN0cm9rZSIsInNhdmUiLCJPYmplY3RTdG9yYWdlIiwibG9jYWxTdG9yYWdlTW9kdWxlIiwibG9jYWxTdG9yYWdlIiwiaW1wbCIsImJ0b2EiLCJzZXRJbnRlcnZhbCIsInNhZmVKU09OUGFyc2UiLCJnZW5lcmF0ZUtleSIsImRlY2lwaGVyIiwiZGVjcnlwdGVkIiwiZmluYWwiLCJjaXBoZXIiLCJlbmNyeXB0ZWQiLCJQbHVnaW5Nb2R1bGUiLCJsb2FkUGx1Z2luRGF0YSIsImxvYWQiLCJzYXZlUGx1Z2luRGF0YSIsImNoYW5uZWxTd2l0Y2giLCJzdGFydFBsdWdpbiIsInN0b3BQbHVnaW4iLCJlbmFibGVQbHVnaW4iLCJkaXNhYmxlUGx1Z2luIiwidG9nZ2xlUGx1Z2luIiwicCIsImZpbGVuYW1lT3JOYW1lIiwiYmRwbHVnaW4iLCJkZWxldGUiLCJlZGl0Iiwib3Blbkl0ZW0iLCJ1cGRhdGVQbHVnaW5MaXN0Iiwic2F2ZWQiLCJuZXdNZXNzYWdlIiwib25NZXNzYWdlIiwib25Td2l0Y2giLCJWMl9QdWJsaWNTZXJ2ZXJzIiwiX2FwcGVuZEJ1dHRvbiIsIkxheWVyIiwicm9vdElkIiwiVjJDX1B1YmxpY1NlcnZlcnMiLCJyb290IiwiX3Jvb3QiLCJpbmplY3RSb290IiwiY2xhc3NOYW1lTGF5ZXJzIiwibGF5ZXJzIiwiYnV0dG9uIiwiYnRuIiwiY2lyY2xlQnV0dG9uTWFzayIsImNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyIiwiZG93bmxvYWRQcm9ncmVzcyIsInR1dG9yaWFsQ29udGFpbmVyIiwiYWRkQnV0dG9uIiwiZ3VpbGRQYXRjaCIsIkd1aWxkTGlzdCIsIndlYnBhY2tNb2R1bGVzIiwiR3VpbGRMaXN0T2xkIiwicmVtb3ZlQnV0dG9uIiwiQkRTaWRlYmFySGVhZGVyIiwiUHVyZUNvbXBvbmVudCIsInNpZGViYXJDb21wb25lbnRzIiwiSGVhZGVyIiwiSXRlbSIsImNoYW5nZWxvZ0J1dHRvbiIsIkhpc3RvcnkiLCJyZW5kZXJlZCIsImlzQ2xlYXJpbmdDYWNoZSIsIlYyX1NldHRpbmdzUGFuZWwiLCJ1cGRhdGVTZXR0aW5ncyIsInNpZGViYXIiLCJWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIiLCJyZWdpc3RlckNvbXBvbmVudHMiLCJyZWdpc3RlciIsIm1ha2VDb21wb25lbnQiLCJsaWdodGNvcmRDb21wb25lbnQiLCJQcmVzZW5jZUNvbXBvbmVudCIsIkFjY291bnRJbmZvc0NvbXBvbmVudCIsIkFwaVByZXZpZXdDb21wb25lbnQiLCJjb3JlQ29tcG9uZW50IiwiY3VzdG9tQ3NzQ29tcG9uZW50IiwicmVuZGVyQWRkb25QYW5lIiwiY2xhc3NTaWRlYmFyIiwiY29udGVudFJlZ2lvbiIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJjb3JlU2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsImNhdGVnb3JpZXMiLCJTZXQiLCJzZWN0aW9ucyIsImxpZ2h0Y29yZFNldHRpbmdzIiwiUHJlc2VuY2VTZXR0aW5ncyIsIk1zZ0xvZ1NldHRpbmdzIiwiY2hlY2tlZCIsInB1YmxpY1NlcnZlcnNNb2R1bGUiLCJ2b2ljZU1vZGUiLCJ0ZkhvdXIiLCJjb2xvcmVkVGV4dCIsImRNb2RlIiwiU2V0dGluZ3MiLCJkZXZNb2RlIiwiZm9yY2VVcGRhdGUiLCJjYWxsUmluZ2luZ0JlYXQiLCJzZXR0aW5nc1N0b3JlIiwic2hvd0N1cnJlbnRHYW1lIiwidXBkYXRlUmVtb3RlU2V0dGluZ3MiLCJnZXRDdXJyZW50V2luZG93Iiwic2V0QWx3YXlzT25Ub3AiLCJBbnRpQWRETSIsImJsdXJQcml2YXRlIiwiZGlzYWJsZVR5cGluZyIsImFwcFNldHRpbmdzIiwicmVsYXVuY2giLCJleGl0IiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsImlzQ2hlY2tlZCIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsImlwYyIsInNlbmQiLCJhcmd2IiwicXVpdCIsInNlc3Npb24iLCJjbGVhckNhY2hlIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3MiLCJWMkNfQWNjb3VudEluZm9zIiwiQXBpUHJldmlldyIsIkNzc0VkaXRvciIsIkNvbnRlbnRMaXN0IiwiQ29tcG9uZW50Iiwib3JpZ2luYWxSZW5kZXIiLCJlbnVtZXJhYmxlIiwiQ2FyZExpc3QiLCJTZXR0aW5nQ29tcG9uZW50IiwicGFuZWxzIiwicGFuZWwiLCJnZXRDb21wb25lbnQiLCJMQ2l0ZW1zIiwiTENEZXZJdGVtcyIsIlRoZW1lTW9kdWxlIiwibG9hZFRoZW1lRGF0YSIsInRoZW1lIiwidW5lc2NhcGUiLCJzYXZlVGhlbWVEYXRhIiwiZW5hYmxlVGhlbWUiLCJkaXNhYmxlVGhlbWUiLCJ0b2dnbGVUaGVtZSIsImJkdGhlbWUiLCJ1cGRhdGVUaGVtZUxpc3QiLCJfd2luZG93Q29uZmlnRmlsZSIsInRyYW5zcGFyZW50IiwiZnJhbWUiLCJjaGFyQ29kZUF0IiwiZ2V0VGV4dEFyZWEiLCJjaGFubmVsVGV4dEFyZWEiLCJ0aXRsZVdyYXBwZXIiLCJpbnNlcnRUZXh0IiwidGV4dGFyZWEiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZXhlY0NvbW1hbmQiLCJtb2R1bGVOYW1lIiwiZ3JvdXBDb2xsYXBzZWQiLCJncm91cEVuZCIsImVzY2FwZSIsInBhcmFtcyIsImluc3RlYWQiLCJzaWxlbnQiLCJmb3JjZSIsIm9yaWdNZXRob2QiLCJjYW5jZWxlZCIsImNhbmNlbFBhdGNoIiwib3JpZ2luYWxNZXRob2QiLCJjYWxsT3JpZ2luYWxNZXRob2QiLCJ0ZW1wUmV0IiwiX19tb25rZXlQYXRjaGVkIiwiZGlzY29ubmVjdCIsImhhc05vdGljZSIsIm1lbWJlcmxpc3QiLCJtZW1iZXJzV3JhcCIsImZvcm0iLCJyaWdodCIsImJvdHRvbSIsInRvYXN0V3JhcHBlciIsImljb24iLCJ0aW1lb3V0IiwidG9hc3RFbGVtIiwiaW5uZXJUZXh0IiwibW9kYWxNb2R1bGUiLCJoaWRlT25GdWxsc2NyZWVuIiwiaGVhZGVyTW9kdWxlIiwiaGVhZGVyIiwiZm9vdGVyMk1vZHVsZSIsImZvY3VzTG9jayIsImJhY2tkcm9wIiwiYmFja2Ryb3BXaXRoTGF5ZXIiLCJjbG9zaW5nTGlzdGVuZXJzIiwicGx1Z2luRXJyb3JzIiwidGhlbWVFcnJvcnMiLCJnZW5lcmF0ZVRhYiIsInRhYnMiLCJNb2RhbFN0YWNrIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIlRleHRFbGVtZW50IiwiRmxleENoaWxkIiwiVGl0bGVzIiwiQ2hhbmdlbG9nIiwiZGVmYXVsdFByb3BzIiwic2VsZWN0YWJsZSIsIk1hcmtkb3duUGFyc2VyIiwiaW1hZ2UiLCJzdWJ0aXRsZSIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJtYXJnaW4iLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJTaXplcyIsIlNNQUxMIiwiQ29sb3JzIiwiU1RBTkRBUkQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsImpvaW5CRDIiLCJzdXBwb3J0TGluayIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIk1vZGFsQWN0aW9ucyIsIk1hcmtkb3duIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJlbXB0eUZ1bmN0aW9uIiwib3Blbk1vZGFsIiwicmVkIiwibW9kYWxLZXkiLCJWMiIsImVkaXRvckRldGFjaGVkIiwicmVxIiwid2VicGFja0pzb25wIiwiX19leHRyYV9pZF9fIiwic2hvdWxkUHJvdGVjdCIsInRoZU1vZHVsZSIsImNsZWFyIiwic29ydCIsImdldFRva2VuIiwiZ2V0RW1haWwiLCJzaG93VG9rZW4iLCJwcm90ZWN0IiwiaXNEZWZhdWx0IiwibW9kIiwicHJveHkiLCJmdW5jIiwiX19wcm90b19fIiwicHJvcE5hbWVzIiwicHJvdG9OYW1lcyIsInByb3RvUHJvcCIsImludGVybmFsIiwiam9pbkJEMSIsIkludml0ZUFjdGlvbnMiLCJhY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsIiwibGVhdmVCRDEiLCJHdWlsZEFjdGlvbnMiLCJsZWF2ZUd1aWxkIiwibGVhdmVCRDIiLCJqb2luTEMiLCJsZWF2ZUxDIiwicmVhY3RDb21wb25lbnQiLCJhbmNob3JDbGFzc2VzIiwic2xhdGVFZGl0b3JDbGFzc2VzIiwibWVzc2FnZUNsYXNzZXMiLCJ1bnJlYWRNZW50aW9uc0JhciIsImd1aWxkc0Vycm9yIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJUb29sdGlwV3JhcHBlciIsIlRvb2x0aXBzIiwiaGlkZSIsInNob3ciLCJzdWJtaXQiLCJhY3RpdmF0ZVJhZ2luZ0RlbW9uIiwiZGlzbWlzcyIsIktleUdlbmVyYXRvciIsIkxheWVyU3RhY2siLCJVc2VyU3RvcmUiLCJDaGFubmVsU3RvcmUiLCJDaGFubmVsQWN0aW9ucyIsIlByaXZhdGVDaGFubmVsQWN0aW9ucyIsIm9wZW5ETSIsInVzZXJJZCIsInNlbGZJZCIsInByaXZhdGVDaGFubmVsSWQiLCJnZXRETUZyb21Vc2VySWQiLCJzZWxlY3RQcml2YXRlQ2hhbm5lbCIsIm9wZW5Qcml2YXRlQ2hhbm5lbCIsInBhcnNlU2V0dGluZ3MiLCJWb2ljZU1vZGUiLCJwcm9maWxNb2R1bGUiLCJmZXRjaE11dHVhbEZyaWVuZHMiLCJMaWdodGNvcmRVc2VyQmFkZ2UiLCJtYXJnaW5Nb2R1bGUyIiwiZGVmYXVsdE1hcmdpbmg1IiwiY29sb3JNb2R1bGUiLCJjb2xvclN0YW5kYXJkIiwic2l6ZU1vZHVsZSIsInNjcm9sbGJhck1vZHVsZTEiLCJzY3JvbGxiYXJHaG9zdEhhaXJsaW5lIiwiR3VpbGRNb2R1bGUiLCJnZXRSZWxhdGlvbnNoaXBzIiwic2Vzc2lvbk1vZHVsZSIsImdldFNlc3Npb25zIiwic2l6ZTE0IiwiaDUiLCJnZXRQcm9maWxlVmFsdWUiLCJnZXRTdGF0aXN0aWNzIiwiZ2V0U2Vzc2lvblZhbHVlIiwibWFyZ2luQm90dG9tMjAiLCJzZXNzaW9uc1JhdyIsInNlc3Npb25zIiwic2Vzc2lvbklkIiwiY2xpZW50SW5mbyIsIm9zIiwiY2xpZW50IiwiYWN0aXZpdGllcyIsInJlcGVhdCIsImNyZWF0ZWRBdCIsImF2YXRhclVSTCIsImF2YXRhciIsImdldEF2YXRhclVSTCIsImdldERhdGUiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImZsYWdzIiwiaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiIsImVtYWlsIiwibWZhRW5hYmxlZCIsIm1vYmlsZSIsInBob25lIiwidmVyaWZpZWQiLCJyZWxhdGlvbnMiLCJmcmllbmRzIiwiaXNGcmllbmQiLCJpc0Jsb2NrZWQiLCJoaWdodGxpZ2h0SlMiLCJoaWdobGlnaHQiLCJtZXNzYWdlTW9kdWxlMSIsIm1lc3NhZ2VNb2R1bGUyIiwiQ29kZUNvbnRlbnQiLCJfX2h0bWwiLCJsYW5ndWFnZSIsIm1hcmdpbkJvdHRvbTgiLCJzZXR0aW5nVGl0bGUiLCJmb3JtTW9kdWxlIiwic3RhdGVzIiwiRm9ybVNlY3Rpb24iLCJhbGxDb21wb25lbnRzIiwiY29tcCIsIkFsbFByZXZpZXdzIiwidGFiIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsImdldFByb3BzIiwicmVuZGVyUHJldmlldyIsImJhY2tncm91bmRDb2xvciIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJyZW5kZXJDb2RlIiwiZ2VuZXJhdGVDb2RlIiwiZ2V0U3RyRm9yUHJvcCIsImNvbXBQYXRoIiwibGFuZyIsIlN0cmluZyIsIiQkdHlwZW9mIiwiU3ltYm9sIiwiZm9yIiwiY29tcE5hbWUiLCJjb21wQ2F0ZWdvcnkiLCJwcm9wU3RyaW5ncyIsImNoaWxkcmVuUHJvcCIsInN0ciIsIm9wZW5UYWciLCJjbG9zZVRhZyIsInZpc2libGVLZXkiLCJwcm9wT2JqZWN0IiwiaXNMYXN0IiwiaXNGaXJzdCIsImNoaWxkcmVuRGF0YSIsImhlbHAiLCJtYXJnaW5Cb3R0b20iLCJyZW5kZXJzIiwiVjJDX1BsdWdpbkNhcmQiLCJzaG93U2V0dGluZ3MiLCJzZXRJbml0aWFsU3RhdGUiLCJoYXNTZXR0aW5ncyIsImFkZG9uIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInJlbG9hZHMiLCJ0cnVzdGVkIiwiY2xvc2VTZXR0aW5ncyIsInBhbmVsUmVmIiwic2V0dGluZ3NPcGVuIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVmcyIsInNldHRpbmdzcGFuZWwiLCJzZXRJbW1lZGlhdGUiLCJpc0hpZGRlbiIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJjYXJkTm9kZSIsInRoaXNOb2RlT2Zmc2V0IiwiY29udGFpbmVyT2Zmc2V0IiwiZW5kUG9pbnQiLCJnZXRTdHJpbmciLCJzZXR0aW5nc0NvbXBvbmVudCIsInJlZiIsIlhTdmciLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lSW5kZXgiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsInBvcExheWVyIiwibWFrZUxpbmsiLCJtYWtlQnV0dG9uIiwiYWN0aW9uIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bm1vdW50ZWQiLCJsaW5rcyIsImludml0ZSIsInRlc3RlciIsImRvbmF0ZSIsInBhdHJlb24iLCJhdXRob3JJZCIsImF1dGhvckxpbmsiLCJpc1NjYW5uaW5nIiwiVG9vbHRpcCIsImFzY2VuZGluZyIsImlzUGx1Z2lucyIsInJldmVyc2UiLCJvbkFkZG9uQ2hhbmdlcyIsImNvbXBvbmVudERpZE1vdW50IiwiYmRFdmVudHMiLCJvcGVuRm9sZGVyIiwic2hvdWxkRGVsZXRlIiwiY29uZmlybURlbGV0ZSIsInNvcnRPcHRpb25zIiwiZGlyZWN0aW9ucyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0QWRkb25zIiwic29ydGVkQWRkb25zIiwiYiIsImNhcCIsImZpcnN0Iiwic2Vjb25kIiwibG9jYWxlQ29tcGFyZSIsInJlbmRlckNoZWNrVXBkYXRlcyIsIlplcmVzUGx1Z2luTGlicmFyeSIsIlBsdWdpblVwZGF0ZXMiLCJjaGVja0FsbCIsIm1hcmdpbkxlZnQiLCJyZWZyZXNoSWNvbiIsImFkZG9uQ2FyZHMiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwib3BhY2l0eSIsIlYyQ19DaGVja2JveCIsImNoZWNrYm94RWxlbWVudCIsImNoZWNrYm94IiwiY2hlY2tib3hJbm5lciIsIlNlbGVjdCIsImRyb3Bkb3duIiwiY3JlYXRlUmVmIiwic2hvd01lbnUiLCJoaWRlTWVudSIsIm9wdCIsImlzT3BlbiIsIlNlYXJjaCIsIm9uS2V5RG93biIsInBsYWNlaG9sZGVyIiwiVjJDX0NvbnRlbnRDb2x1bW4iLCJjb250ZW50TW9kdWxlIiwiY29udGVudENvbHVtbiIsImNvbnRlbnRDb2x1bW5EZWZhdWx0IiwiVjJDX0Nzc0VkaXRvciIsImxpbmVzIiwiZGV0YWNoZWRFZGl0b3IiLCJWMkNfQ3NzRWRpdG9yRGV0YWNoZWQiLCJ1cGRhdGVDc3MiLCJzYXZlQ3NzIiwiZGV0YWNoIiwiZGV0YWNoZWQiLCJlZGl0b3IiLCJhY2UiLCJzZXRUaGVtZSIsInNldE1vZGUiLCJzZXRTaG93UHJpbnRNYXJnaW4iLCJzZXRGb250U2l6ZSIsImRlc3Ryb3kiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJkZXRhY2hlZFJvb3QiLCJjb2RlTWlycm9yIiwibGluZU51bWJlcnMiLCJtb2RlIiwiaW5kZW50VW5pdCIsInNjcm9sbGJhclN0eWxlIiwiX2Njc3MiLCJjY3NzIiwidXBkYXRlTGluZUNvdW50IiwibGluZUNvdW50IiwiU2V0dGluZ3NUaXRsZSIsIkNoZWNrYm94IiwiYm9yZGVyUmlnaHQiLCJib3JkZXJMZWZ0IiwiZm9udFNpemUiLCJhcmciLCJnZXRWYWx1ZSIsImRyb290IiwiaW5qZWN0RGV0YWNoZWRSb290IiwiQkRFcnJvckJvdW5kYXJ5IiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsIkRlbGV0ZSIsIkRvd25BcnJvdyIsIkVkaXQiLCJtYXJnaW5Nb2R1bGUiLCJtYXJnaW5Ub3A2MCIsIlYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyIsInByZXZpZXciLCJpc2ZldGNoaW5nIiwiYXNzZXRDb21wb25lbnRzIiwidXBkYXRlV2hlbkZldGNoZWQiLCJkZWZhdWx0U2V0dGluZyIsIlJQQ1Byb3BzIiwiYXNzZXQiLCJ1cGRhdGVQcmV2aWV3Iiwib3B0aW9uc0NvbXBvbmVudHMiLCJvaGdvZG9oZnVjayIsIl9vcHRpb25zQ29tcG9uZW50cyIsImFycmF5IiwiaW5wdXRUZXh0TW9kdWxlcyIsIklucHV0VGV4dCIsInJlbW92ZUtleWJpbmQiLCJfaG9yaXpvbnRhbCIsImlucHV0TWluaSIsInNpemUxNiIsInNpemUyMCIsImlucHV0IiwibGFzdEVkaXRlZCIsImlzVGltaW5nIiwicm93TW9kdWxlIiwiZmxleE1vZHVsZSIsImlucHV0TW9kdWxlIiwic2l6ZU1vZHVsZTIiLCJyb3ciLCJmbGV4Q2hpbGQiLCJJbnB1dE51bWJlck1vZHVsZXMiLCJJbnB1dE51bWJlciIsImNvbG9yVHJhbnNwYXJlbnQiLCJzZXRWYWx1ZSIsImNsaXBib2FyZCIsIklucHV0Q2hvaWNlTW9kdWxlcyIsIklucHV0Q2hvaWNlIiwiRGl2aWRlck1vZHVsZXMiLCJEaXZpZGVyIiwiZGl2aWRlciIsImRpdmlkZXJEZWZhdWx0IiwiRGlzY29yZEJ1dHRvbiIsIlJwY1ByZXZpZXciLCJhY3RpdmUiLCJjaGFuZ2VUYWIiLCJhbmNpZW50VGFiIiwic2V0QWN0aXZlIiwiZmxleCIsInJwYyIsImlzQWN0aXZlIiwiUHJvZmlsZSIsIlBvcG91dCIsIlRhYiIsImVtcHR5Q2xhc3NlcyIsIlByZXNlbmNlRXJyb3JDYXRjaGVyIiwiZXJySW5mbyIsImVtcHR5U3RhdGVJbWFnZSIsImVtcHR5U3RhdGVIZWFkZXIiLCJlbXB0eVN0YXRlU3VidGV4dCIsInBvcG91dE1vZHVsZXMiLCJVc2VyUG9wb3V0Q29tcG9uZW50IiwiUG9wb3V0UHJvcHMiLCJVc2VyUG9wb3V0IiwicmVuZGVyMSIsImNoYW5uZWxJZCIsImRpc2FibGVVc2VyUHJvZmlsZUxpbmsiLCJyZW5kZXIyIiwicmVuZGVyMyIsInBvcG91dCIsImV4Y2x1ZGVQcm9wZXJ0aWVzIiwicHJvZmlsZU1vZHVsZXMiLCJVc2VyUHJvZmlsZUNvbXBvbmVudCIsIlByb2ZpbGVQcm9wcyIsImNvbm5lY3RlZFByb2ZpbGVTdG9yZSIsIlVzZXJQcm9maWxlIiwicmVuZGVyNCIsInByb2ZpbGUiLCJWMkNfTGF5ZXIiLCJrZXl1cExpc3RlbmVyIiwidHJhbnNmb3JtIiwiY29tcG9uZW50V2lsbE1vdW50IiwiY2hhbmdlQ2F0ZWdvcnkiLCJzZWFyY2hLZXlEb3duIiwiY2hlY2tDb25uZWN0aW9uIiwiY29ubmVjdCIsIkd1aWxkU3RvcmUiLCJBdmF0YXJEZWZhdWx0cyIsIlNvcnRlZEd1aWxkU3RvcmUiLCJzZWxlY3RlZENhdGVnb3J5IiwibG9hZGluZyIsInNlcnZlcnMiLCJjb25uZWN0aW9uIiwiZmV0Y2giLCJzZXJ2ZXIiLCJqb2luZWQiLCJlbmQiLCJ0ZXJtIiwiY2F0ZWdvcnlCdXR0b25zIiwidG90YWwiLCJzYnYiLCJjb250ZW50U2Nyb2xsZXIiLCJzZXJ2ZXJDYXJkIiwicGlubmVkIiwiYWNjZXB0SW52aXRlIiwiaW52aXRlX2NvZGUiLCJqb2luRW5kUG9pbnQiLCJpZGVudGlmaWVyIiwiY3JlZGVudGlhbHMiLCJ3aW5kb3dPcHRpb25zIiwic2NyZWVuWCIsInNjcmVlblkiLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInJlc2l6YWJsZSIsIm1heGltaXphYmxlIiwibWluaW1pemFibGUiLCJhbHdheXNPblRvcCIsImNlbnRlciIsIndlYlByZWZlcmVuY2VzIiwibm9kZUludGVncmF0aW9uIiwiYmRTZXJ2ZXIiLCJvbmxpbmUiLCJtZW1iZXJzIiwiaWNvblVybCIsIm5hdGl2ZWpvaW4iLCJzZXJ2ZXIyIiwiZ3VpbGRMaXN0IiwiZ2V0RmxhdHRlbmVkR3VpbGRJZHMiLCJkZWZhdWx0TGlzdCIsIkRFRkFVTFRfQVZBVEFSUyIsIlNlcnZlckNhcmQiLCJmYWxsYmFjayIsImZsb29yIiwiY29ubmVjdEVuZFBvaW50IiwiU2lkZWJhclZpZXciLCJ0b29scyIsIlRvb2xzIiwiVGFiQmFyU2VwYXJhdG9yIiwic2VhcmNoSW5wdXQiLCJUYWJCYXJIZWFkZXIiLCJUYWJCYXJJdGVtIiwibWF4TGVuZ3RoIiwic2VhcmNoaW5wdXQiLCJub3RDb25uZWN0ZWQiLCJjb2x1bW5Nb2R1bGUiLCJtaW5IZWlnaHQiLCJsaW5lSGVpZ2h0IiwiVjJDX1NlcnZlckNhcmQiLCJpbWFnZUVycm9yIiwiY2FyZE1vZHVsZSIsImNhcmQiLCJjYXJkUHJpbWFyeSIsIl9ob3Jpem9udGFsUmV2ZXJzZSIsIndyYXBNb2R1bGUiLCJub1dyYXAiLCJzdHJlYW1lck1vZGVFbmFibGVkIiwib25FcnJvciIsImhhbmRsZUVycm9yIiwiZHJhZ2dhYmxlIiwiaG9yaXpvbnRhbCIsIlYyQ19TaWRlYmFyVmlldyIsIlNjcm9sbGVyIiwiZmFkZSIsImRhcmsiLCJWMkNfUmVsb2FkSWNvbiIsInhtbG5zIiwiVjJDX1Njcm9sbGVyIiwic2Nyb2xsZXJNb2R1bGUxIiwic2Nyb2xsZXJIb3Jpem9udGFsIiwic2Nyb2xsZXJNb2R1bGUyIiwic2lkZWJhclJlZ2lvblNjcm9sbGVyIiwid3JhcHBlckNsYXNzIiwic2Nyb2xsZXJGYWRlIiwic2Nyb2xsZXJDbGFzcyIsImNvbnRlbnRSZWdpb25TY3JvbGxlciIsImNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXAiLCJ0aGVtZUdob3N0Iiwic2Nyb2xsZXJUcmFjayIsIlYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiU2V0dGluZ3NHcm91cCIsIlYyQ19TZXR0aW5nc0dyb3VwIiwiYnV0dG9uQ29tcG9uZW50IiwiVjJDX1NldHRpbmdzVGl0bGUiLCJjbGFzc25hbWVzIiwiZ2V0Q2xhc3NOYW1lIiwiU3dpdGNoSXRlbSIsImJldGEiLCJ1c2VyU2V0dGluZ3NWb2ljZSIsIlYyQ19UYWJCYXJIZWFkZXIiLCJWMkNfVGFiQmFySXRlbSIsIlYyQ19UYWJCYXJTZXBhcmF0b3IiLCJpbnRlcnZhbE1vZHVsZTEiLCJJbnRlcnZhbCIsIlRpbWVSZW5kZXIiLCJfaW50ZXJ2YWwiLCJnZXRVcGRhdGVkVGltZSIsImdldERpZmYiLCJjaGVja1VuaXgiLCJob3VycyIsIm1pbnV0ZXMiLCJzZWNvbmRzIiwicmVuZGVyVGltZSIsIm51bWJlciIsInJlbW92ZVplcm8iLCJ1c2VkUHJvcHMiLCJVU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9FTkQiLCJVU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVCIsIlYyQ19Ub29scyIsInRvb2xzTW9kdWxlIiwidG9vbHNDb250YWluZXIiLCJjb250YWluZXJNb2R1bGUiLCJjbG9zZUJ1dHRvbiIsImNsb3NlQnV0dG9uQm9sZCIsImtleWJpbmQiLCJrZXliaW5kQm9sZCIsIlRvb2x0aXBDbGFzc2VzIiwiZ2V0VG9vbHRpcENsYXNzZXMiLCJUb29sdGlwTGF5ZXJzIiwiZ2V0VG9vbHRpcExheWVycyIsImdldENsYXNzIiwic2lkZU9yQ29sb3IiLCJ1cHBlckNhc2UiLCJ0b29sdGlwQ2xhc3MiLCJjbGFzc0V4aXN0cyIsInRvUHgiLCJFbXVsYXRlZFRvb2x0aXAiLCJwcmV2ZW50RmxpcCIsInRvb2x0aXBFbGVtZW50IiwidG9vbHRpcCIsImxhYmVsRWxlbWVudCIsInRvb2x0aXBDb250ZW50IiwicG9pbnRlckVsZW1lbnQiLCJ0b29sdGlwUG9pbnRlciIsInBvcG91dHMiLCJjYW5TaG93QWJvdmUiLCJjYW5TaG93QmVsb3ciLCJjYW5TaG93TGVmdCIsImNhblNob3dSaWdodCIsIl9jbGFzc05hbWUiLCJzaG93QWJvdmUiLCJzaG93QmVsb3ciLCJzaG93TGVmdCIsInNob3dSaWdodCIsImNlbnRlckhvcml6b250YWxseSIsImNlbnRlclZlcnRpY2FsbHkiLCJub2RlY2VudGVyIiwiZmluZERPTU5vZGUiLCJWMkNfWFN2ZyJdLCJtYXBwaW5ncyI6Ijs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtR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OztBQWhCcUQsQzs7Ozs7Ozs7Ozs7QUNGMUQsbUM7Ozs7Ozs7Ozs7O0FDQUEscUM7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsK0I7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsaUM7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsa0MiLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IG1pbmltdW1EaXNjb3JkVmVyc2lvbiA9IFwiMC4wLjMwNlwiO1xyXG5leHBvcnQgY29uc3QgY3VycmVudERpc2NvcmRWZXJzaW9uID0gKHdpbmRvdy5EaXNjb3JkTmF0aXZlICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcCAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAuZ2V0VmVyc2lvbiAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAuZ2V0VmVyc2lvbigpKSB8fCBcIjAuMC4zMDZcIjtcclxuZXhwb3J0IGNvbnN0IG1pblN1cHBvcnRlZFZlcnNpb24gPSBcIjAuMy4wXCI7XHJcbmV4cG9ydCBjb25zdCBiYmRWZXJzaW9uID0gXCIwLjMuNVwiO1xyXG4vKlxyXG5leHBvcnQgY29uc3QgTENDaGFuZWxvZyA9IHtcclxuICAgIGRlc2NyaXB0aW9uOiBcIkxpZ2h0Y29yZCdzIGNoYW5nZWxvZ1wiLFxyXG4gICAgY2hhbmdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiV2hhdCdzIE5ldz9cIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIGlzIG5vdyBhdmFpbGFibGUgIVwiLFxyXG4gICAgICAgICAgICAgICAgXCJXZSByZW1vdmVkIGVtb3Rlcy4gVGhhdCdzIHNhZCBmb3IgcGVvcGxlIHdobyB3ZXJlIGFjdHVhbGx5IHVzaW5nIGl0LCBidXQgaXQgd2FzIGxlYWRpbmcgdG8gbW9yZSBsb2FkaW5nIHRpbWUgYW5kIHNvbWUgYmFzaWMgd29yZHMgd2VyZSBlbW90ZS5cIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgXSxcclxuICAgIGltYWdlOiBcImh0dHBzOi8vaS5pbWd1ci5jb20vc2ZOaHF3UC5wbmdcIixcclxuICAgIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgc3VidGl0bGU6IFwidlwiK3JlbW90ZS5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikudmVyc2lvbixcclxuICAgIGZvb3RlcjogKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgY29uc3QgVGV4dEVsZW1lbnQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRleHRcIik7XHJcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XHJcbiAgICAgICAgaWYoIVRleHRFbGVtZW50IHx8ICFNb2RhbFN0YWNrKXJldHVybiBudWxsXHJcblxyXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgICAgIGNvbnN0IEFuY2hvckNsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIikgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07XHJcbiAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcclxuICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgY2xpY2suc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIEJEVjIuam9pbkxDKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IEFuY2hvciA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7Y2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCwgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKTtcclxuICAgICAgICByZXR1cm4gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRleHRFbGVtZW50LCB7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkR9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcclxuICAgIH0pKClcclxufSovXHJcbmV4cG9ydCBjb25zdCBiYmRDaGFuZ2Vsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJCQkQncyBjaGFuZ2Vsb2cuXCIsXHJcbiAgICBjaGFuZ2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJXaGF0J3MgTmV3P1wiLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgXCIqKkxpZ2h0Y29yZCoqIGlzIG5vdyB1c2luZyBCYW5kYWdlZEJELiBUaGF0IG1lYW5zIGFsbCBwbHVnaW5zIHlvdSB3ZXJlIHVzaW5nIGNhbiBiZSB1c2VkIHRvbyAhXCIsXHJcbiAgICAgICAgICAgICAgICBcIioqV2luZG93IFRyYW5zcGFyZW5jeSoqIGNoYW5nZXMgd2VyZSBtYWRlIHRvIG1vcmUgY29tcGF0aWJsZSB3aXRoIGV4dGVybmFsIHdpbmRvdyBtYW5hZ2VycyBhbmQgYWRkb25zIGxpa2UgR2xhc3N0cm9uLlwiLFxyXG4gICAgICAgICAgICAgICAgXCJJbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBoYXMgb25jZSBhZ2FpbiBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgdG8gaG9wZWZ1bGx5IGltcHJvdmUgbG9hZGluZyB0aW1lcy5cIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkJ1ZyBGaXhlc1wiLFxyXG4gICAgICAgICAgICB0eXBlOiBcImZpeGVkXCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIlNvbWUgZml4ZXMgcmVsYXRlZCB0byBzaG93aW5nIG1vZGFscyBpbiB0aGUgYEJkQXBpYC5cIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xyXG4gICAgXCJDdXN0b20gY3NzIGxpdmUgdXBkYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0wXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxyXG4gICAgXCJDdXN0b20gY3NzIGF1dG8gdWRwYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0xXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxyXG4gICAgXCJCZXR0ZXJEaXNjb3JkIEJsdWVcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLWJcIiwgIGluZm86IFwiUmVwbGFjZSBEaXNjb3JkIGJsdWUgd2l0aCBCRCBCbHVlXCIsICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogZmFsc2UsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwifSxcclxuXHJcbiAgICAvKiBDb3JlICovXHJcbiAgICAvKiA9PT09PT0gKi9cclxuICAgIFwiUHVibGljIFNlcnZlcnNcIjogICAgICAgICAgICAge2lkOiBcImJkYS1ncy0xXCIsICBpbmZvOiBcIkRpc3BsYXkgcHVibGljIHNlcnZlcnMgYnV0dG9uXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJNaW5pbWFsIE1vZGVcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTJcIiwgIGluZm86IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzLlwiLCAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIlZvaWNlIE1vZGVcIjogICAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtNFwiLCAgaW5mbzogXCJPbmx5IHNob3cgdm9pY2UgY2hhdFwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiSGlkZSBDaGFubmVsc1wiOiAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0zXCIsICBpbmZvOiBcIkhpZGUgY2hhbm5lbHMgaW4gbWluaW1hbCBtb2RlXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJEYXJrIE1vZGVcIjogICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTVcIiwgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIlZvaWNlIERpc2Nvbm5lY3RcIjogICAgICAgICAgIHtpZDogXCJiZGEtZGMtMFwiLCAgaW5mbzogXCJEaXNjb25uZWN0IGZyb20gdm9pY2Ugc2VydmVyIHdoZW4gY2xvc2luZyBEaXNjb3JkXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiMjQgSG91ciBUaW1lc3RhbXBzXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy02XCIsICBpbmZvOiBcIlJlcGxhY2UgMTJociB0aW1lc3RhbXBzIHdpdGggcHJvcGVyIG9uZXNcIiwgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJDb2xvcmVkIFRleHRcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTdcIiwgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIiwgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIk5vcm1hbGl6ZSBDbGFzc2VzXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTRcIiwgaW5mbzogXCJBZGRzIHN0YWJsZSBjbGFzc2VzIHRvIGVsZW1lbnRzIHRvIGhlbHAgdGhlbWVzLiAoZS5nLiBhZGRzIC5kYS1jaGFubmVscyB0byAuY2hhbm5lbHMtSWUybDZBKVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcblxyXG4gICAgLyogQ29udGVudCAqL1xyXG4gICAgXCJDb250ZW50IEVycm9yIE1vZGFsXCI6ICAgICAgICB7aWQ6IFwiZm9yay1wcy0xXCIsIGluZm86IFwiU2hvd3MgYSBtb2RhbCB3aXRoIHBsdWdpbi90aGVtZSBlcnJvcnNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2NhbiBQbHVnaW5zXCI6ICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtNlwiLCBpbmZvOiBcIlNjYW4gcGx1Z2lucyBmb3IgYW55IHRocmVhdCB0aGF0IGNhbiBiZSBoaWRkZW4gaW5zaWRlLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJTaG93IFRvYXN0c1wiOiAgICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy0yXCIsIGluZm86IFwiU2hvd3MgYSBzbWFsbCBub3RpZmljYXRpb24gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvblwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJTY3JvbGwgVG8gU2V0dGluZ3NcIjogICAgICAgICB7aWQ6IFwiZm9yay1wcy0zXCIsIGluZm86IFwiQXV0by1zY3JvbGxzIHRvIGEgcGx1Z2luJ3Mgc2V0dGluZ3Mgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgKG9ubHkgaWYgb3V0IG9mIHZpZXcpXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkF1dG9tYXRpYyBMb2FkaW5nXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTVcIiwgaW5mbzogXCJBdXRvbWF0aWNhbGx5IGxvYWRzLCByZWxvYWRzLCBhbmQgdW5sb2FkcyBwbHVnaW5zIGFuZCB0aGVtZXNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiRW5hYmxlIEVkaXQgQnV0dG9uXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtN1wiLCBpbmZvOiBcIkVuYWJsZSBhbiBFZGl0IEJ1dHRvbiBvbiB0aGUgcGx1Z2luIGFuZCB0aGVtZSBwYW5lbC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuXHJcbiAgICAvKiBEZXZlbG9wZXIgKi9cclxuICAgIFwiRGV2ZWxvcGVyIE1vZGVcIjogICAgICAgICBcdCAge2lkOiBcImJkYS1ncy04XCIsIGluZm86IFwiRGV2ZWxvcGVyIE1vZGUgVG9nZ2xlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcbiAgICBcIkNvcHkgU2VsZWN0b3JcIjpcdFx0XHQgIHtpZDogXCJmb3JrLWRtLTFcIiwgaW5mbzogXCJBZGRzIGEgXFxcIkNvcHkgU2VsZWN0b3JcXFwiIG9wdGlvbiB0byBjb250ZXh0IG1lbnVzIHdoZW4gZGV2ZWxvcGVyIG1vZGUgaXMgYWN0aXZlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcbiAgICBcIlJlYWN0IERldlRvb2xzXCI6XHRcdFx0ICB7aWQ6IFwicmVhY3REZXZUb29sc1wiLCBpbmZvOiBcIkFkZHMgcmVhY3QgZGV2ZWxvcGVyIHRvb2xzIHRvIHRoZSBkZXZ0b29scy4gTXVzdCBiZSBpbnN0YWxsZWQgaW4gR29vZ2xlIENocm9tZSBvbiB5b3VyIHBjLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG5cclxuICAgIC8qKiBMaWdodGNvcmQgKi9cclxuICAgIFwiRGlzYWJsZSBCZXR0ZXJEaXNjb3JkXCI6ICAgICAge2lkOiBcImJkLWRpc2FibGVcIiwgIGluZm86IFwiRGlzYWJsZSBCZXR0ZXJkaXNjb3JkIChwbHVnaW5zLCB0aGVtZXMsIGV0YykgKE5vdCBpbXBsZW1lbnRlZCkuXCIsIGltcGxlbWVudGVkOiBmYWxzZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkJsdXIgUGVyc29uYWwgSW5mb3JtYXRpb25cIjogIHtpZDogXCJsaWdodGNvcmQtNlwiLCBpbmZvOiBcIkJsdXIgc2Vuc2l0aXZlIGluZm9ybWF0aW9ucyBsaWtlIGVtYWlsLCBwYXltZW50IGluZm9zIGFuZCBtb3JlLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkNhbGxpbmcgUmluZyBCZWF0XCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMlwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3Mgc3BlY2lhbCBjYWxsaW5nIGJlYXQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRGV2ZWxvcGVyIE9wdGlvbnNcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0xXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyAmIExpZ2h0Y29yZCdzIEludGVybmFsIERldmVsb3BlciBPcHRpb25zLiBUaGlzIGFsbG93IHRoZSBcXFwiRXhwZXJpbWVudHNcXFwiIHRhYiwgdGhlIFxcXCJEZXZlbG9wZXIgT3B0aW9uc1xcXCIgdGFiIGFuZCB0aGUgXFxcIkxpZ2h0Y29yZCBBcGlcXFwiIHNlY3Rpb24uXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQWQgQmxvY2tcIjogICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC00XCIsIGluZm86IFwiQmxvY2sgYW55IEJPVCB0aGF0IGRtcyB5b3Ugd2l0aCBhbiBpbnZpdGUgbGluay4gRXZlbiBpbiBhbiBlbWJlZC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJFbmFibGUgTGlnaHRjb3JkIFNlcnZlcnNcIjogICB7aWQ6IFwibGlnaHRjb3JkLTVcIiwgaW5mbzogXCJFbmFibGUgTGlnaHRjb3JkJ3Mgc2VydmVycy4gRGlzYWJsaW5nIHRoaXMgd2lsbCBkaXNhYmxlIGN1c3RvbSBiYWRnZXMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRGlzYWJsZSB0eXBpbmdcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC03XCIsIGluZm86IFwiRG9uJ3QgbGV0IG90aGVyIHNlZSB5b3UncmUgdHlwaW5nLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkxpZ2h0Y29yZCBUYWJzXCI6ICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtOFwiLCBpbmZvOiBcIkFsbG93cyB5b3UgdG8gbGF1bmNoIG11bHRpcGxlIGluc3RhbmNlcyBvZiBMaWdodGNvcmQgaW4gdGhlIHNhbWUgd2luZG93LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIiwgZXhwZXJpbWVudGFsOiB0cnVlfSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkIFdpbmRvdyAqL1xyXG4gICAgXCJBbHdheXMtb24tVG9wXCI6ICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTNcIiwgaW5mbzogXCJFbmFibGUgdGhlIHdpbmRvdydzIEFsd2F5cy1vbi1Ub3AgbW9kZSwgd2hlcmUgTGlnaHRjb3JkIHN0YXlzIG9uIHRvcCBvZiBvdGhlciBhcHBsaWNhdGlvbnMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcclxuICAgIFwiTm8gV2luZG93IEJvdW5kc1wiOiAgICAgICAgICAge2lkOiBcIm5vX3dpbmRvd19ib3VuZFwiLCBpbmZvOiBcIkRpc2FibGUgV2luZG93IEJvdW5kcy4gQ2FuIGJlIHVzZWZ1bCBpZiB5b3UgdXNlIGEgd2luZG93IG1hbmFnZXIuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IHByb2Nlc3MucGxhdGZvcm0gIT09IFwibGludXhcIiwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcIkVuYWJsZSBHbGFzc3Ryb25cIjogICAgICAgICAgIHtpZDogXCJlbmFibGVfZ2xhc3N0cm9uXCIsIGluZm86IFwiRW5hYmxlIEdsYXNzdHJvbi4gSWYgeW91J3JlIG5vdCB1c2luZyB0cmFuc3BhcmVudCB0aGVtZXMsIHRoaXMgY2FuIHJlZHVjZSBsYWcuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcclxuICAgIFxyXG4gICAgLyoqIFJpY2hQcmVzZW5jZSAqL1xyXG4gICAgXCJFbmFibGVcIjogICAgICAgICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIiwgaW5mbzogXCJFbmFibGUgUmljaFByZXNlbmNlIGJlbG93LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcInN0YXR1c1wifVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb29raWUgPSB7XHJcbiAgICBcImJkYS1ncy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy0yXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtM1wiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTRcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy01XCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy02XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtN1wiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTBcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTFcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTJcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTRcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy02XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy03XCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy1iXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOFwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZGMtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0wXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtY3NzLTFcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy05XCI6IHRydWUsXHJcbiAgICBcImZvcmstZG0tMVwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1wcy0xXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtMlwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy00XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTZcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy03XCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWVzLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstZXMtM1wiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXdwLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstd3AtMlwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1iZXRhXCI6IHRydWUsXHJcbiAgICBcInJlYWN0RGV2VG9vbHNcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0xXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMlwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTNcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC00XCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNVwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtNlwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtN1wiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLThcIjogZmFsc2UsXHJcbiAgICBcIm5vX3dpbmRvd19ib3VuZFwiOiBmYWxzZSxcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NDb29raWUgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5nc1JQQyA9IHt9O1xyXG5leHBvcnQgY29uc3QgZGVmYXVsdFJQQyA9IHtcclxuICAgIFwibmFtZVwiOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgXCJhcHBsaWNhdGlvbl9pZFwiOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiLFxyXG4gICAgXCJzdGF0ZVwiOiBcIkxpZ2h0Y29yZCBDbGllbnRcIixcclxuICAgIFwiZGV0YWlsc1wiOiBcIkJyb3dzaW5nIERpc2NvcmRcIixcclxuICAgIFwidGltZXN0YW1wcy5zdGFydFwiOiBEYXRlLm5vdygpLFxyXG4gICAgXCJhc3NldHMuc21hbGxcIjogbnVsbCxcclxuICAgIFwiYXNzZXRzLmxhcmdlXCI6IFwiNzEyMzIzODIxMDM3NjgyNzkxXCJcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGJkcGx1Z2luRXJyb3JzID0gW107XHJcbmV4cG9ydCBjb25zdCBiZHRoZW1lRXJyb3JzID0gW107IC8vIGRlZmluZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcclxuXHJcbmV4cG9ydCBjb25zdCBiZENvbmZpZyA9IE9iamVjdC5jcmVhdGUoQmV0dGVyRGlzY29yZENvbmZpZyk7XHJcblxyXG5leHBvcnQgY29uc3QgYmR0aGVtZXMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGJkcGx1Z2lucyA9IHt9O1xyXG5cclxuZXhwb3J0IGNvbnN0IHBsdWdpbkNvb2tpZSA9IHt9O1xyXG5leHBvcnQgY29uc3QgdGhlbWVDb29raWUgPSB7fTsiLCJpbXBvcnQgbG9jYWxTdG9yYWdlRml4IGZyb20gXCIuL2xvY2FsU3RvcmFnZUZpeFwiO1xyXG5pbXBvcnQgbG9hZGluZ0ljb24gZnJvbSBcIi4vbG9hZGluZ0ljb25cIjtcclxubG9jYWxTdG9yYWdlRml4KCk7XHJcbmxvYWRpbmdJY29uKCk7XHJcblxyXG5jb25zdCBkZXByZWNhdGVHbG9iYWwgPSAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgLy8gdmFsdWUgPSB0eXBlb2YodmFsdWUpICE9PSBcIm9iamVjdFwiID8gdmFsdWUgOiBuZXcgUHJveHkodmFsdWUsIHtcclxuICAgIC8vICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kKSB7XHJcbiAgICAvLyAgICAgICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KG1vZCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBvYmpbbW9kXTtcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICAgIHNldDogZnVuY3Rpb24ob2JqLCBtb2QpIHtcclxuICAgIC8vICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gVXRpbHMuZXJyKFwiRGVwcmVjYXRlZCBHbG9iYWxcIiwgXCJUcnlpbmcgdG8gb3ZlcndyaXRlIGRlcHJlY2F0ZWQgQkQgZ2xvYmFsc1wiKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIGtleSwge1xyXG4gICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgVXRpbHMud2FybihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIGBcIiR7a2V5fVwiIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuIFBsZWFzZSBvbmx5IHVzZSBCZEFwaS5gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pOyAgXHJcbn07XHJcblxyXG5cclxuaW1wb3J0ICogYXMgR2xvYmFscyBmcm9tIFwiLi8wZ2xvYmFsc1wiO1xyXG5cclxuY29uc3QgZ2xvYmFsS2V5cyA9IE9iamVjdC5rZXlzKEdsb2JhbHMpO1xyXG5mb3IgKGNvbnN0IGtleSBvZiBnbG9iYWxLZXlzKSBkZXByZWNhdGVHbG9iYWwoa2V5LCBHbG9iYWxzW2tleV0pO1xyXG5cclxuXHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi9tb2R1bGVzL2JkQXBpXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL21vZHVsZXMvY2xhc3NOb3JtYWxpemVyXCI7XHJcblxyXG5kZXByZWNhdGVHbG9iYWwoXCJCRFYyXCIsIEJEVjIpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJwbHVnaW5Nb2R1bGVcIiwgcGx1Z2luTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwidGhlbWVNb2R1bGVcIiwgdGhlbWVNb2R1bGUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJVdGlsc1wiLCBVdGlscyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkJERXZlbnRzXCIsIEJERXZlbnRzKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwic2V0dGluZ3NQYW5lbFwiLCBzZXR0aW5nc1BhbmVsKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiRGF0YVN0b3JlXCIsIERhdGFTdG9yZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNvbnRlbnRNYW5hZ2VyXCIsIENvbnRlbnRNYW5hZ2VyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQ2xhc3NOb3JtYWxpemVyXCIsIENsYXNzTm9ybWFsaXplcik7XHJcblxyXG53aW5kb3cuQmRBcGkgPSBCZEFwaTtcclxuXHJcbmltcG9ydCBDb3JlIGZyb20gXCIuL21vZHVsZXMvY29yZVwiO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJtYWluQ29yZVwiLCBDb3JlKTtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29yZVdyYXBwZXIge1xyXG4gICAgY29uc3RydWN0b3IoYmRDb25maWcsIG1ldGhvZHMpIHtcclxuICAgICAgICBDb3JlLnNldENvbmZpZyhiZENvbmZpZyk7XHJcbiAgICAgICAgQ29yZS5zZXRNZXRob2RzKG1ldGhvZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgLy8gZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgdGhpcy5tYWluQ29yZSk7XHJcbiAgICAgICAgQ29yZS5pbml0KCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIGZ1bmN0aW9uIHBhdGNoTW9kdWxlTG9hZCgpIHtcclxuLy8gICAgIGNvbnN0IG5hbWVzcGFjZSA9IFwiYmV0dGVyZGlzY29yZFwiO1xyXG4vLyAgICAgY29uc3QgcHJlZml4ID0gYCR7bmFtZXNwYWNlfS9gO1xyXG4vLyAgICAgY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKTtcclxuLy8gICAgIGNvbnN0IGxvYWQgPSBNb2R1bGUuX2xvYWQ7XHJcbi8vICAgICAvLyBjb25zdCByZXNvbHZlRmlsZW5hbWUgPSBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZTtcclxuXHJcbi8vICAgICBNb2R1bGUuX2xvYWQgPSBmdW5jdGlvbihyZXF1ZXN0KSB7XHJcbi8vICAgICAgICAgaWYgKHJlcXVlc3QgPT09IG5hbWVzcGFjZSB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4vLyAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ZWQgPSByZXF1ZXN0LnN1YnN0cihwcmVmaXgubGVuZ3RoKTtcclxuLy8gICAgICAgICAgICAgaWYgKHJlcXVlc3RlZCA9PSBcImFwaVwiKSByZXR1cm4gQmRBcGk7XHJcbi8vICAgICAgICAgfVxyXG5cclxuLy8gICAgICAgICByZXR1cm4gbG9hZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4vLyAgICAgfTtcclxuXHJcbi8vICAgICAvLyBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZSA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBwYXJlbnQsIGlzTWFpbikge1xyXG4vLyAgICAgLy8gICAgIGlmIChyZXF1ZXN0ID09PSBcImJldHRlcmRpc2NvcmRcIiB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgoXCJiZXR0ZXJkaXNjb3JkL1wiKSkge1xyXG4vLyAgICAgLy8gICAgICAgICBjb25zdCBjb250ZW50UGF0aCA9IFBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luUGF0aEJ5TW9kdWxlKHBhcmVudCk7XHJcbi8vICAgICAvLyAgICAgICAgIGlmIChjb250ZW50UGF0aCkgcmV0dXJuIHJlcXVlc3Q7XHJcbi8vICAgICAvLyAgICAgfVxyXG5cclxuLy8gICAgIC8vICAgICByZXR1cm4gcmVzb2x2ZUZpbGVuYW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbi8vICAgICAvLyB9O1xyXG5cclxuLy8gICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuLy8gICAgICAgICBNb2R1bGUuX2xvYWQgPSBsb2FkO1xyXG4vLyAgICAgfTtcclxuLy8gfVxyXG5cclxuLy8gcGF0Y2hNb2R1bGVMb2FkKCk7XHJcblxyXG4vLyB2YXIgc2V0dGluZ3NQYW5lbCwgdm9pY2VNb2RlLCwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGU7XHJcbi8vIHZhciBiZENvbmZpZyA9IG51bGw7IiwiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gICAgY29uc3QgdjJMb2FkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgdjJMb2FkZXIuY2xhc3NOYW1lID0gXCJiZC1sb2FkZXJ2MlwiO1xyXG4gICAgdjJMb2FkZXIudGl0bGUgPSBcIkJhbmRhZ2VkQkQgaXMgbG9hZGluZy4uLlwiO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2MkxvYWRlcik7XHJcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBjb250ZW50V2luZG93R2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiKS5nZXQ7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50V2luZG93ID0gUmVmbGVjdC5hcHBseShjb250ZW50V2luZG93R2V0dGVyLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KGNvbnRlbnRXaW5kb3csIHtcclxuICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBvYmpbcHJvcF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbC5iaW5kKG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBpbnRlcmNlcHRpb24gYnkgcGF0Y2hpbmcgUmVmbGVjdC5hcHBseSBhbmQgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0LCBcImFwcGx5XCIsIHt2YWx1ZTogUmVmbGVjdC5hcHBseSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCBcImJpbmRcIiwge3ZhbHVlOiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcblxyXG4gICAgY29uc3Qgb09wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjtcclxuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYXJndW1lbnRzWzFdO1xyXG4gICAgICAgIGlmICh1cmwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImFwaS93ZWJob29rc1wiKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob09wZW4sIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRGSG91ciB7XHJcbiAgICBpbmplY3QyNEhvdXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsMjRIb3VyKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHR3ZWx2ZUhvdXIgPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXFxcXHMoQU18UE0pYCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydCA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNlwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gZGF0YS5yZXR1cm5WYWx1ZS5tYXRjaCh0d2VsdmVIb3VyKTtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaGVkIHx8IG1hdGNoZWQubGVuZ3RoICE9PSA0KSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGVkWzNdID09PSBcIkFNXCIpIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMDBcIiA6IG1hdGNoZWRbMV0ucGFkU3RhcnQoMiwgXCIwXCIpfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMTJcIiA6IHBhcnNlSW50KG1hdGNoZWRbMV0pICsgMTJ9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBjYW5jZWxDb3p5ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImNhbGVuZGFyRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ296eSBtb2RlXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ29tcGFjdCA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJkYXRlRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ29tcGFjdCBtb2RlXHJcbiAgICAgICAgdGhpcy5jYW5jZWwyNEhvdXIgPSAoKSA9PiB7Y2FuY2VsQ296eSgpOyBjYW5jZWxDb21wYWN0KCk7fTsgLy8gQ2FuY2VsIGJvdGhcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUyNEhvdXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsMjRIb3VyKSB0aGlzLmNhbmNlbDI0SG91cigpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5jb25zdCBkaXNwYXRjaGVyID0gd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyXHJcbmNvbnN0IENoYW5uZWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDaGFubmVsICYmIGUuZGVmYXVsdC5oYXNDaGFubmVsKVswXS5kZWZhdWx0XHJcbmxldCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbmxldCBETU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwpWzBdXHJcblxyXG5jb25zdCBibG9ja2VkID0ge31cclxuXHJcbmxldCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdXHJcbmZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyKCl7XHJcbiAgICBpZih1c2VyTW9kdWxlKXJldHVybiB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgcmV0dXJuIG51bGxcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEFudGlCb3RETSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuYW50aURNID0gdGhpcy5hbnRpRE0uYmluZCh0aGlzKVxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG5cclxuICAgICAgICBkaXNwYXRjaGVyLnVuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgYW50aURNKGV2KXtcclxuICAgICAgICBpZighZXYubWVzc2FnZS5hdXRob3IuYm90KXJldHVyblxyXG4gICAgICAgIGlmKGV2Lm1lc3NhZ2UuYXV0aG9yLmlkID09PSBnZXRDdXJyZW50VXNlcigpLmlkKVxyXG4gICAgICAgIGlmKGV2Lm1lc3NhZ2UuZ3VpbGRfaWQpcmV0dXJuXHJcblxyXG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBDaGFubmVsTW9kdWxlLmdldENoYW5uZWwoZXYubWVzc2FnZS5jaGFubmVsX2lkKVxyXG4gICAgICAgIGlmKCFjaGFubmVsKXJldHVybiAvLyBtaWdodCBiZSBicm9rZW5cclxuXHJcbiAgICAgICAgaWYoY2hhbm5lbC50eXBlICE9PSAxKXJldHVyblxyXG5cclxuICAgICAgICBpZihibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSlyZXR1cm4gLy8gSWYgdGhlIHVzZXIgdW5ibG9jayB0aGUgYm90LCBEb24ndCBibG9jayBpdCBhZ2Fpbi5cclxuXHJcbiAgICAgICAgaWYoc2Nhbk1lc3NhZ2UoZXYubWVzc2FnZSkpe1xyXG4gICAgICAgICAgICBibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSA9IHRydWVcclxuICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGBbQWRCbG9ja106IEJsb2NrZWQgJHtldi5tZXNzYWdlLmF1dGhvci51c2VybmFtZX0jJHtldi5tZXNzYWdlLmF1dGhvci5kaXNjcmltaW5hdG9yfWAsIHtcclxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIndhcm5pbmdcIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZighcmVsYXRpb25TaGlwTW9kdWxlKXJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcClbMF1cclxuICAgICAgICAgICAgcmVsYXRpb25TaGlwTW9kdWxlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKGV2Lm1lc3NhZ2UuYXV0aG9yLmlkLCB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogXCJDb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgIH0sIDIpXHJcbiAgICAgICAgICAgIGlmKCFETU1vZHVsZSlETU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwpWzBdXHJcbiAgICAgICAgICAgIERNTW9kdWxlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbChjaGFubmVsLmlkLCBmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNjYW5NZXNzYWdlKG1lc3NhZ2Upe1xyXG4gICAgaWYoLyhkaXNjb3JkXFwuZ2d8ZGlzY29yZFxcLmNvbVxcL2ludml0ZVxcL3xkaXNjb3JkYXBwXFwuY29tXFwvaW52aXRlXFwvKS9nLnRlc3QobWVzc2FnZS5jb250ZW50KSlyZXR1cm4gdHJ1ZVxyXG4gICAgaWYoRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmdnL1wiKSB8fCBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmQuY29tL2ludml0ZS9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkYXBwLmNvbS9pbnZpdGUvXCIpKXJldHVybiB0cnVlXHJcblxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbn1cclxuZnVuY3Rpb24gRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgc2VhcmNoKXtcclxuICAgIGxldCBlbWJlZHMgPSBtZXNzYWdlLmVtYmVkc1xyXG4gICAgaWYoZW1iZWRzLmxlbmd0aCA9PT0gMClyZXR1cm4gZmFsc2VcclxuICAgIHJldHVybiBlbWJlZHMubWFwKGVtYmVkID0+IHtcclxuICAgICAgICBpZihlbWJlZC50eXBlICE9PSBcInJpY2hcIilyZXR1cm4gZmFsc2VcclxuICAgICAgICBpZigoZW1iZWQudGl0bGUgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKChlbWJlZC5kZXNjcmlwdGlvbiB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoKChlbWJlZC5mb290ZXIgfHwgXCJcIikgJiYgZW1iZWQuZm9vdGVyLnRleHQgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKGVtYmVkLmZpZWxkcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlLmluY2x1ZGVzKHNlYXJjaCkgfHwgZS5uYW1lLmluY2x1ZGVzKHNlYXJjaClcclxuICAgICAgICB9KS5pbmNsdWRlcyh0cnVlKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH0pLmluY2x1ZGVzKHRydWUpXHJcbn0iLCJpbXBvcnQge3NldHRpbmdzUlBDLCBkZWZhdWx0UlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uRGlzcGF0Y2hlciYmbS5kZWZhdWx0JiZtLmRlZmF1bHQuZGlzcGF0Y2gpWzBdLmRlZmF1bHRcclxuY29uc3QgQWN0aW9uVHlwZXMgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uQWN0aW9uVHlwZXMpWzBdLkFjdGlvblR5cGVzXHJcblxyXG5jb25zdCBzb2NrZXRJZCA9IFwibGlnaHRjb3JkLXNwb29mLXNvY2tldFwiXHJcbmNvbnN0IHBpZCA9IHByb2Nlc3MucGlkXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ3VzdG9tUmljaFByZXNlbmNlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gc2V0dGluZ3NSUENcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IGZvcm1hdGVkR2FtZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQgPT09IGZhbHNlKXJldHVybiBudWxsXHJcbiAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ2FtZVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRHYW1lKCl7XHJcbiAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaCh7XHJcbiAgICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQ0FMX0FDVElWSVRZX1VQREFURSxcclxuICAgICAgICAgICAgc29ja2V0SWQsXHJcbiAgICAgICAgICAgIHBpZCxcclxuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuZm9ybWF0ZWRHYW1lXHJcbiAgICAgICAgfSkgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKSB7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkVuYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZXQoc2V0dGluZ3NSUEMgfHwgT2JqZWN0LmNyZWF0ZShkZWZhdWx0UlBDKSlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpIHtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEaXNhYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmZXRjaEFzc2V0cyhhcHBsaWNhdGlvbklkKXtcclxuICAgICAgICBsZXQgYXNzZXRzID0gYXdhaXQgQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXNzZXRzKVswXS5nZXRBc3NldHMoYXBwbGljYXRpb25JZClcclxuICAgICAgICBpZihhc3NldHMudW5kZWZpbmVkICYmIHR5cGVvZiBhc3NldHMudW5kZWZpbmVkID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBcHBsaWNhdGlvblwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXNzZXRzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGFjdGl2aXR5KXtcclxuICAgICAgICB0aGlzLmdhbWUgPSBhY3Rpdml0eVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxufSIsImltcG9ydCB7cGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IG1haW5Db3JlIGZyb20gXCIuL2NvcmVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IEJkQXBpID0ge1xyXG4gICAgZ2V0IFJlYWN0KCkgeyByZXR1cm4gQkRWMi5SZWFjdDsgfSxcclxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIEJEVjIuUmVhY3REb207IH0sXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIEJEVjIuUmVhY3RDb21wb25lbnQ7fSxcclxuICAgIGdldCBXaW5kb3dDb25maWdGaWxlKCkge3JldHVybiBVdGlscy5XaW5kb3dDb25maWdGaWxlO30sXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7cmV0dXJuIHNldHRpbmdzO30sXHJcbiAgICBnZXQgZW1vdGVzKCkge3JldHVybiB7fX0sIC8vIGRlcHJlY2F0ZWQsIGRlbGV0ZWQgYWxsIGVtb3RlcyBmcm9tIGJldHRlcmRpc2NvcmQuXHJcbiAgICBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9LFxyXG4gICAgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxyXG59O1xyXG5cclxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRChpZCksIGNzcyk7XHJcbn07XHJcblxyXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuQmRBcGkuY2xlYXJDU1MgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xyXG4gICAgRE9NLmFkZFNjcmlwdChET00uZXNjYXBlSUQoaWQpLCB1cmwpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU2NyaXB0KERPTS5lc2NhcGVJRChpZCkpO1xyXG59O1xyXG5cclxuLy9HZXQgYW5vdGhlciBwbHVnaW5cclxuLy9uYW1lID0gbmFtZSBvZiBwbHVnaW5cclxuQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIGlmIChiZHBsdWdpbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gYmRwbHVnaW5zW25hbWVdLnBsdWdpbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgQmV0dGVyRGlzY29yZCBDb3JlXHJcbkJkQXBpLmdldENvcmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRpb24gTm90aWNlXCIsIGBCZEFwaS5nZXRDb3JlKCkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5gKTtcclxuICAgIHJldHVybiBtYWluQ29yZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIG1vZGFsLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBhIHN0cmluZyBvZiB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIG1vZGFsXHJcbiAqL1xyXG5CZEFwaS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwge2NhbmNlbFRleHQ6IG51bGx9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy9TaG93IHRvYXN0IGFsZXJ0XHJcbkJkQXBpLnNob3dUb2FzdCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgVXRpbHMuc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEFsbChmaWx0ZXIpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3BzID0gZnVuY3Rpb24oLi4ucHJvcHMpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5UHJvdG90eXBlcyhwcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBCRFYyLmdldEludGVybmFsSW5zdGFuY2Uobm9kZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkubG9hZERhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0RGF0YSA9IEJkQXBpLmxvYWREYXRhO1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNhdmVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCBkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLnNldERhdGEgPSBCZEFwaS5zYXZlRGF0YTtcclxuXHJcbi8vIERlbGV0ZXMgZGF0YVxyXG5CZEFwaS5kZWxldGVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbi8vIFBhdGNoZXMgb3RoZXIgZnVuY3Rpb25zXHJcbkJkQXBpLm1vbmtleVBhdGNoID0gZnVuY3Rpb24od2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIFV0aWxzLm1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcclxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBVdGlscy5vblJlbW92ZWQobm9kZSwgY2FsbGJhY2spO1xyXG59O1xyXG5cclxuLy8gV3JhcHMgZnVuY3Rpb24gaW4gdHJ5Li5jYXRjaFxyXG5CZEFwaS5zdXBwcmVzc0Vycm9ycyA9IGZ1bmN0aW9uKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlscy50ZXN0SlNPTihkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXBsdWdpbkNvb2tpZVtuYW1lXTtcclxufTtcclxuXHJcbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhlbWVDb29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiAhIXNldHRpbmdzQ29va2llW2lkXTtcclxufTtcclxuXHJcbkJkQXBpLmVuYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIHRydWUpO1xyXG59O1xyXG5cclxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIGZhbHNlKTtcclxufTtcclxuXHJcbkJkQXBpLnRvZ2dsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsICFzZXR0aW5nc0Nvb2tpZVtpZF0pO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRCRERhdGEoa2V5KTtcclxufTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zZXRCRERhdGEgPSBmdW5jdGlvbihrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5cclxuXHJcbmNvbnN0IG1ha2VBZGRvbkFQSSA9IChjb29raWUsIGxpc3QsIG1hbmFnZXIpID0+IG5ldyBjbGFzcyBBZGRvbkFQSSB7XHJcblxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gbWFuYWdlci5mb2xkZXI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICEhY29va2llW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZW5hYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmRpc2FibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlKG5hbWUpIHtcclxuICAgICAgICBpZiAoY29va2llW25hbWVdKSB0aGlzLmRpc2FibGUobmFtZSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLnJlbG9hZChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQobmFtZSkge1xyXG4gICAgICAgIGlmIChsaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W25hbWVdLnBsdWdpbikgcmV0dXJuIGxpc3RbbmFtZV0ucGx1Z2luO1xyXG4gICAgICAgICAgICByZXR1cm4gbGlzdFtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsaXN0KS5tYXAoayA9PiB0aGlzLmdldChrKSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5CZEFwaS5QbHVnaW5zID0gbWFrZUFkZG9uQVBJKHBsdWdpbkNvb2tpZSwgYmRwbHVnaW5zLCBwbHVnaW5Nb2R1bGUpO1xyXG5CZEFwaS5UaGVtZXMgPSBtYWtlQWRkb25BUEkodGhlbWVDb29raWUsIGJkdGhlbWVzLCB0aGVtZU1vZHVsZSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCZEFwaTtcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CZEFwaSA9IEJkQXBpIiwiLyogQkRFdmVudHMgKi9cclxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcImV2ZW50c1wiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCREV2ZW50cyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKClcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQkRFdmVudHMgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBkaXNwYXRjaChldmVudE5hbWUsIC4uLmFyZ3MpIHt0aGlzLmVtaXQoZXZlbnROYW1lLCAuLi5hcmdzKTt9XHJcbiAgICBvZmYoZXZlbnROYW1lLCBldmVudEFjdGlvbikge3RoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEFjdGlvbik7fVxyXG59OyIsIi8qKlxyXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xyXG4gKi9cclxuXHJcbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5sZXQgc2VsZWN0b3JzXHJcbmNvbnN0IHJlbW92ZURhID0gVXRpbHMucmVtb3ZlRGFcclxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCl7XHJcbiAgICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXHJcbiAgICBpZighc3RhbmRhcmRTaWRlYmFyVmlldylyZXR1cm4gbnVsbFxyXG4gICAgbGV0IGRlZmF1bHRDbGFzc05hbWUgPSByZW1vdmVEYShzdGFuZGFyZFNpZGViYXJWaWV3LnN0YW5kYXJkU2lkZWJhclZpZXcpXHJcbiAgICBsZXQgc2VsZWN0cyA9IFtdXHJcbiAgICBsZXQgdXNlclNldHRpbmdzQWNjb3VudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJTZXR0aW5nc0FjY291bnQpWzBdXHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IEJETW9kdWxlcy5nZXQoZSA9PiB0eXBlb2YgZS5jaGlsZHJlbiA9PT0gXCJzdHJpbmdcIilbMF1cclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucGF5bWVudFNvdXJjZVJvdylbMF0ucGF5bWVudFNvdXJjZVJvdyl9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnN1YlRleHQgJiYgZS5kZXNjcmlwdGlvbldyYXBwZXIpWzBdLnN1YlRleHQpfWApXHJcbiAgICBpZih1c2VyU2V0dGluZ3NBY2NvdW50KXtcclxuICAgICAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEodXNlclNldHRpbmdzQWNjb3VudC51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcclxuICAgICAgICBzZWxlY3RzLnB1c2goYC4ke3JlbW92ZURhKHVzZXJTZXR0aW5nc0FjY291bnQudXNlclNldHRpbmdzU2VjdXJpdHkpfSAuJHtyZW1vdmVEYShjaGlsZHJlbi5jaGlsZHJlbil9ID4gZGl2Om50aC1jaGlsZCgyKWApXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhzZWxlY3RzKVxyXG4gICAgcmV0dXJuIHNlbGVjdHNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJsdXJQcml2YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9ycyB8fCBnZXRTZWxlY3RvcnMoKVxyXG5cclxuICAgICAgICBpZighc2VsZWN0b3JzKWNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBzZWxlY3RvcnMgdG8gYmx1ciBwZXJzb25uYWwgaW5mb3JtYXRpb25zLlwiKSlcclxuICAgICAgICBET01Ub29scy5hZGRTdHlsZShcImJsdXJQcml2YXRlXCIsIGBcclxuJHtzZWxlY3RvcnMuam9pbihcIiwgXCIpfSB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDg1LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBibHVyKDRweCk7XHJcbiAgICBvcGFjaXR5OiAuODtcclxufVxyXG5cclxuJHtzZWxlY3RvcnMubWFwKGUgPT4gZStcIjpob3ZlclwiKS5qb2luKFwiLCBcIil9ICB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDksLjY4LC41Myk7XHJcbiAgICBmaWx0ZXI6IG5vbmU7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG59YClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIERPTVRvb2xzLnJlbW92ZVN0eWxlKFwiYmx1clByaXZhdGVcIilcclxuICAgIH1cclxufSIsImltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcclxuY29uc3QgcmFuZENsYXNzID0gbmV3IFJlZ0V4cChgXig/ISR7bm9ybWFsaXplZFByZWZpeH0tKSgoPzpbQS1aYS16XXxbMC05XXwtKSspLSg/OltBLVphLXpdfFswLTldfC18Xyl7Nn0kYCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkNsYXNzTm9ybWFsaXplciA9IHRoaXNcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXRjaERPTU1ldGhvZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG91bGRJZ25vcmUodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwibGF5ZXJDb250YWluZXItXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIiNcIikgJiYgKHZhbHVlLmxlbmd0aCA9PSA3IHx8IHZhbHVlLmxlbmd0aCA9PSA0KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlRmlsdGVyKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMobW9kdWxlKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gbW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KHZhbHVlLnNwbGl0KFwiIFwiKVswXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsQ2xhc3MubWF0Y2gocmFuZENsYXNzKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgIW1hdGNoLmxlbmd0aCB8fCBtYXRjaC5sZW5ndGggPCAyKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2hbMV0uc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hET01NZXRob2RzKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucztcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24odG9rZW4pIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgdG9rZW5zID0gdG9rZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShjb250YWlucywgdGhpcywgW3Rva2VuLnNwbGl0KFwiIFwiKVswXV0pO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gdG9rZW5zLmV2ZXJ5KHQgPT4gY29udGFpbnMuY2FsbCh0aGlzLCB0KSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYWRkID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQ7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoYWRkLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHJlbW92ZSwgdGhpcywgdG9rZW5zKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29sb3JlZFRleHQge1xyXG4gICAgaW5qZWN0Q29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsQ29sb3JlZFRleHQpIHJldHVybjtcclxuICAgICAgICBpZiAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbENvbG9yZWRUZXh0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcyB8fCAhcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlQ29udGVudCA9IHByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VDb250ZW50LnR5cGUgfHwgIW1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSB8fCBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuZGlzcGxheU5hbWUgIT0gXCJNZXNzYWdlQ29udGVudFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVHlwZSA9IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZTtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsVHlwZS5fX29yaWdpbmFsTWV0aG9kKSByZXR1cm47IC8vIERvbid0IHBhdGNoIGFnYWluXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSA9IGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsVHlwZShwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb2xlQ29sb3IgPSBzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdID8gcHJvcHMubWVzc2FnZS5jb2xvclN0cmluZyB8fCBcIlwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLnN0eWxlID0ge2NvbG9yOiByb2xlQ29sb3J9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbFR5cGU7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLCBvcmlnaW5hbFR5cGUpO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lTWFya3VwID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXS5tYXJrdXBcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK2NsYXNzTmFtZU1hcmt1cC5zcGxpdChcIiBcIilbMF0pLmZvckVhY2goZWxlbSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW0uc3R5bGUuc2V0UHJvcGVydHkoXCJjb2xvclwiLCBcIlwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge2JkQ29uZmlnLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgcGx1Z2luQ2VydGlmaWVyLCB7IGVuY3J5cHRTZXR0aW5nc0NhY2hlLCBkZWNyeXB0U2V0dGluZ3NDYWNoZSwgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IHsgY2FwdHVyZVJlamVjdGlvblN5bWJvbCB9IGZyb20gXCJldmVudHNcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xyXG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUocmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHAuZ2V0QXBwUGF0aCgpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XHJcbmNsYXNzIE1ldGFFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIk1ldGFFcnJvclwiO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9yaWdpbmFsSlNSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdO1xyXG5jb25zdCBvcmlnaW5hbENTU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID8gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA6ICgpID0+IHtyZXR1cm4gbnVsbDt9O1xyXG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/KD86XFxyXFxufFxcbilbXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xyXG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xyXG5cclxuZXhwb3J0IGxldCBhZGRvbkNhY2hlID0ge31cclxuXHJcbmxldCBoYXNQYXRjaGVkID0gZmFsc2VcclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbnRlbnRNYW5hZ2VyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEV4dGVuc2lvbnMoKXtcclxuICAgICAgICBpZihoYXNQYXRjaGVkKXJldHVyblxyXG4gICAgICAgIGhhc1BhdGNoZWQgPSB0cnVlXHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInBsdWdpblwiKTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInRoZW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwbHVnaW5zRm9sZGVyKCkge3JldHVybiB0aGlzLl9wbHVnaW5zRm9sZGVyIHx8ICh0aGlzLl9wbHVnaW5zRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwicGx1Z2lucy9cIikpKTt9XHJcbiAgICBnZXQgdGhlbWVzRm9sZGVyKCkge3JldHVybiB0aGlzLl90aGVtZXNGb2xkZXIgfHwgKHRoaXMuX3RoZW1lc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInRoZW1lcy9cIikpKTt9XHJcblxyXG4gICAgbG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKXtcclxuICAgICAgICBpZih0eXBlb2YgZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSAhPT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IEpTT04ucGFyc2UoZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSkpXHJcbiAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSB7fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5rZXlzKGFkZG9uQ2FjaGUpXHJcbiAgICAgICAgLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgIGlmKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuXHJcbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFt7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwidGltZXN0YW1wXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGtleTogXCJyZXN1bHRcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcImhhc2hcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCJcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgZm9yKGxldCBwcm9wIG9mIHByb3BzKXtcclxuICAgICAgICAgICAgICAgIGlmKCEocHJvcC5rZXkgaW4gdmFsdWUpIHx8IHR5cGVvZiB2YWx1ZVtwcm9wLmtleV0gIT09IHByb3AudHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHZhbHVlLmhhc2ggIT09IGtleSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih2YWx1ZS5yZXN1bHQuc3VzcGVjdCl7IC8vIHJlZmV0Y2ggZnJvbSByZW1vdGUgdG8gYmUgc3VyZSB5b3UncmUgdXAgdG8gZGF0ZS5cclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQWRkb25DYWNoZSgpe1xyXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoSlNPTi5zdHJpbmdpZnkoYWRkb25DYWNoZSkpKVxyXG4gICAgfVxyXG5cclxuICAgIHdhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gY29udGVudFR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSA9IGZzLndhdGNoKGJhc2VGb2xkZXIsIHtwZXJzaXN0ZW50OiBmYWxzZX0sIGFzeW5jIChldmVudFR5cGUsIGZpbGVuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnRUeXBlIHx8ICFmaWxlbmFtZSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZmlsZUVuZGluZykpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHJldHVybiBwbHVnaW5Nb2R1bGUudW5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGVtZU1vZHVsZS51bmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJyZW5hbWVcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5yZWxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5yZWxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXS5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBoYXNPbGRNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLy9NRVRBXCIpO1xyXG4gICAgICAgIGlmIChoYXNPbGRNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU9sZE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgY29uc3QgaGFzTmV3TWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8qKlwiKTtcclxuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlT2xkTWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgcmF3TWV0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcclxuICAgICAgICBpZiAobWV0YS5pbmRleE9mKFwiTUVUQVwiKSA8IDApIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFV0aWxzLnRlc3RKU09OKHJhd01ldGEpO1xyXG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcclxuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XHJcbiAgICAgICAgcGFyc2VkLmZvcm1hdCA9IFwianNvblwiO1xyXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VOZXdNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBibG9jayA9IGNvbnRlbnQuc3BsaXQoXCIvKipcIiwgMilbMV0uc3BsaXQoXCIqL1wiLCAxKVswXTtcclxuICAgICAgICBjb25zdCBvdXQgPSB7fTtcclxuICAgICAgICBsZXQgZmllbGQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBhY2N1bSA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGJsb2NrLnNwbGl0KHNwbGl0UmVnZXgpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gXCJAXCIgJiYgbGluZS5jaGFyQXQoMSkgIT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRbZmllbGRdID0gYWNjdW07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gbGluZS5pbmRleE9mKFwiIFwiKTtcclxuICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5zdWJzdHIoMSwgbCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gPSBsaW5lLnN1YnN0cihsICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSArPSBcIiBcIiArIGxpbmUucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpLnJlcGxhY2UoZXNjYXBlZEF0UmVnZXgsIFwiQFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRbZmllbGRdID0gYWNjdW0udHJpbSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvdXRbXCJcIl07XHJcbiAgICAgICAgb3V0LmZvcm1hdCA9IFwianNkb2NcIjtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRlbnRSZXF1aXJlKHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gaXNQbHVnaW4gPyBvcmlnaW5hbEpTUmVxdWlyZSA6IG9yaWdpbmFsQ1NTUmVxdWlyZTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyBzZWxmLnBsdWdpbnNGb2xkZXIgOiBzZWxmLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICAgICAgY29uc3QgcG9zc2libGVQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBvc3NpYmxlUGF0aCkgfHwgZmlsZW5hbWUgIT09IGZzLnJlYWxwYXRoU3luYyhwb3NzaWJsZVBhdGgpKSByZXR1cm4gUmVmbGVjdC5hcHBseShvcmlnaW5hbFJlcXVpcmUsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBcInV0ZjhcIik7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBVdGlscy5zdHJpcEJPTShjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShjb250ZW50KTtcclxuICAgICAgICAgICAgbWV0YS5maWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBtZXRhLmFkZGVkID0gc3RhdHMuYXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5tb2RpZmllZCA9IHN0YXRzLm10aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEuc2l6ZSA9IHN0YXRzLnNpemU7XHJcbiAgICAgICAgICAgIGlmICghaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1ldGEuY3NzID0gY29udGVudDtcclxuICAgICAgICAgICAgICAgIGlmIChtZXRhLmZvcm1hdCA9PSBcImpzb25cIikgbWV0YS5jc3MgPSBtZXRhLmNzcy5zcGxpdChcIlxcblwiKS5zbGljZSgxKS5qb2luKFwiXFxuXCIpO1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IGBtb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgbW9kdWxlLmZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZEV4cG9ydCA9ICFVdGlscy5pc0VtcHR5KG1vZHVsZS5leHBvcnRzKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaWRFeHBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhLnR5cGUgPSBtb2R1bGUuZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1ldGE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVdGlscy53YXJuKFwiTW9kdWxlIE5vdCBFeHBvcnRlZFwiLCBgJHttZXRhLm5hbWV9LCBwbGVhc2Ugc3RhcnQgc2V0dGluZyBtb2R1bGUuZXhwb3J0c2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gYFxcbm1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07XFxubW9kdWxlLmV4cG9ydHMudHlwZSA9ICR7bWV0YS5leHBvcnRzIHx8IG1ldGEubmFtZX07YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgZmlsZW5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBsYWNlaG9sZGVyUGx1Z2luKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4ge3BsdWdpbjoge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0TmFtZTogKCkgPT4ge3JldHVybiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZTt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0QXV0aG9yOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fSxcclxuICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiAoKSA9PiB7cmV0dXJuIGRhdGEubWVzc2FnZSA/IGRhdGEubWVzc2FnZSA6IFwiVGhpcyBwbHVnaW4gd2FzIHVuYWJsZSB0byBiZSBsb2FkZWQuIENoZWNrIHRoZSBhdXRob3IncyBwYWdlIGZvciB1cGRhdGVzLlwiO30sXHJcbiAgICAgICAgICAgICAgICBnZXRWZXJzaW9uOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgZmlsZW5hbWU6IGRhdGEuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgIHNvdXJjZTogZGF0YS5zb3VyY2UgPyBkYXRhLnNvdXJjZSA6IFwiXCIsXHJcbiAgICAgICAgICAgIHdlYnNpdGU6IGRhdGEud2Vic2l0ZSA/IGRhdGEud2Vic2l0ZSA6IFwiXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG5cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NGaWxlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSksIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICB9LCAoaGFzaCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogaGFzaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCB0cnVlKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZVtyZXN1bHQuaGFzaF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlc3VsdC5oYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7d2luZG93LnJlcXVpcmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHdpbmRvdy5yZXF1aXJlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGlmKCFjb250ZW50Lm5hbWUpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ2Fubm90IGVzY2FwZSB0aGUgSUQuXCIsIGVycm9yOiB7bWVzc2FnZTogXCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmVwbGFjZScgb2YgdW5kZWZpbmVkXCIsIHN0YWNrOiBcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIn19XHJcbiAgICAgICAgY29udGVudC5pZCA9IFV0aWxzLmVzY2FwZUlEKGNvbnRlbnQubmFtZSk7XHJcbiAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50LnBsdWdpbiA9IG5ldyBjb250ZW50LnR5cGUoKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXTtcclxuICAgICAgICAgICAgICAgIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldID0gY29udGVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVsZXRlIGJkdGhlbWVzW2NvbnRlbnQubmFtZV07XHJcbiAgICAgICAgICAgIGJkdGhlbWVzW2NvbnRlbnQubmFtZV0gPSBjb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICB1bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3cucmVxdWlyZS5jYWNoZVt3aW5kb3cucmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSB1bmxvYWRlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319O31cclxuICAgIH1cclxuXHJcbiAgICBpc0xvYWRlZChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICB0cnkge3dpbmRvdy5yZXF1aXJlLmNhY2hlW3dpbmRvdy5yZXF1aXJlLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO31cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIGZhbHNlO31cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgY2FudFVubG9hZCA9IHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgaWYgKGNhbnRVbmxvYWQpIHJldHVybiBjYW50VW5sb2FkO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV3Q29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuICAgICAgICBjb25zdCBjb250ZW50TGlzdCA9IE9iamVjdC52YWx1ZXMoaXNQbHVnaW4gPyBiZHBsdWdpbnMgOiBiZHRoZW1lcyk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gaXNQbHVnaW4gPyBjLnBsdWdpbi5nZXROYW1lKCkgOiBjLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGFkZGVkID0gZmlsZXMuZmlsdGVyKGYgPT4gIWNvbnRlbnRMaXN0LmZpbmQodCA9PiB0LmZpbGVuYW1lID09IGYpICYmIGYuZW5kc1dpdGgoZmlsZUVuZGluZykgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGYpKS5pc0ZpbGUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFsbENvbnRlbnQodHlwZSkge1xyXG4gICAgICAgIHRoaXMucGF0Y2hFeHRlbnNpb25zKClcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSBlcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQbHVnaW5zKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwicGx1Z2luXCIpO31cclxuICAgIGxvYWRUaGVtZXMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoXCJ0aGVtZVwiKTt9XHJcbn07XHJcblxyXG4vKipcclxuICogRG9uJ3QgZXhwb3NlIGNvbnRlbnRNYW5hZ2VyIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiaW1wb3J0IHtiZENvbmZpZywgbWluU3VwcG9ydGVkVmVyc2lvbiwgYmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luRXJyb3JzLCBiZHRoZW1lRXJyb3JzLCBiYmRDaGFuZ2Vsb2csIGRlZmF1bHRDb29raWUsIGN1cnJlbnREaXNjb3JkVmVyc2lvbiwgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgQkRMb2dvIGZyb20gXCIuLi91aS9iZExvZ29cIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xyXG5pbXBvcnQgTGlnaHRjb3JkTG9nbyBmcm9tIFwiLi4vc3ZnL2xpZ2h0Y29yZFwiO1xyXG5pbXBvcnQgUGx1Z2luQ2VydGlmaWVyIGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xyXG5pbXBvcnQgZGlzdGFudCwgeyB1dWlkdjQgfSBmcm9tIFwiLi9kaXN0YW50XCI7XHJcbmltcG9ydCBFbW9qaU1vZHVsZSBmcm9tIFwiLi9lbW9qaU1vZHVsZVwiXHJcbmltcG9ydCB7cmVtb3RlIGFzIGVsZWN0cm9ufSBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgdjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5cclxuZnVuY3Rpb24gQ29yZSgpIHtcclxuICAgIC8vIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKERhdGFTdG9yZS5jb25maWdGaWxlKSk7XHJcbiAgICAvLyB0aGlzLmluaXQoKTtcclxufVxyXG5cclxubGV0IG1ldGhvZHNcclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgT2JqZWN0LmFzc2lnbihiZENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnNldE1ldGhvZHMgPSBmdW5jdGlvbihtKSB7XHJcbiAgICBtZXRob2RzID0gbVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKCFBcnJheS5wcm90b3R5cGUuZmxhdCkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmJkVmVyc2lvbiArIFwiIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvbGQgdmVyc2lvbiAoXCIgKyBjdXJyZW50RGlzY29yZFZlcnNpb24gKyBcIikgb2YgRGlzY29yZC4gUGxlYXNlIHVwZGF0ZSB5b3VyIERpc2NvcmQgaW5zdGFsbGF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJkQ29uZmlnLnZlcnNpb24gPCBtaW5TdXBwb3J0ZWRWZXJzaW9uKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiZENvbmZpZy52ZXJzaW9uICsgXCIgKHlvdXIgdmVyc2lvbilcIiArIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxhdGVzdCBqcyAoXCIgKyBiYmRWZXJzaW9uICsgXCIpLjxicj48YnI+IFBsZWFzZSBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkdpdEh1YjwvYT5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuRUQpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBFbmhhbmNlZERpc2NvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LldlYlNvY2tldCAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUgJiYgd2luZG93LldlYlNvY2tldC5uYW1lLmluY2x1ZGVzKFwiUGF0Y2hlZFwiKSkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIFBvd2VyY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRyaWJ1dGVzLmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xyXG5cclxuICAgIC8qXHJcbiAgICBjb25zdCBsYXRlc3RMb2NhbFZlcnNpb24gPSBiZENvbmZpZy51cGRhdGVyID8gYmRDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogYmRDb25maWcubGF0ZXN0VmVyc2lvbjtcclxuICAgIGlmIChsYXRlc3RMb2NhbFZlcnNpb24gPiBiZENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFwiVXBkYXRlIEF2YWlsYWJsZVwiLCBbYFRoZXJlIGlzIGFuIHVwZGF0ZSBhdmFpbGFibGUgZm9yIEJhbmRhZ2VkQkQncyBJbmplY3RvciAoJHtsYXRlc3RMb2NhbFZlcnNpb259KS5gLCBcIllvdSBjYW4gZWl0aGVyIHVwZGF0ZSBhbmQgcmVzdGFydCBub3csIG9yIGxhdGVyLlwiXSwge1xyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogXCJVcGRhdGUgTm93XCIsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiTWF5YmUgTGF0ZXJcIixcclxuICAgICAgICAgICAgb25Db25maXJtOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwZGF0ZUZhaWxlZCA9ICgpID0+IHtVdGlscy5hbGVydChcIkNvdWxkIE5vdCBVcGRhdGVcIiwgYFVuYWJsZSB0byB1cGRhdGUgYXV0b21hdGljYWxseSwgcGxlYXNlIGRvd25sb2FkIHRoZSBpbnN0YWxsZXIgYW5kIHJlaW5zdGFsbCBub3JtYWxseS48YnIgLz48YnIgLz48YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkRvd25sb2FkIEluc3RhbGxlcjwvYT5gKTt9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5leGl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSovXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcclxuICAgIHRoaXMuaW5pdFNldHRpbmdzKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xyXG4gICAgQkRWMi5pbml0aWFsaXplKCk7XHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiVXBkYXRpbmcgU2V0dGluZ3NcIik7XHJcbiAgICBzZXR0aW5nc1BhbmVsLmluaXRpYWxpemVTZXR0aW5ncygpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIEFkZG9ucyBDYWNoZVwiKVxyXG4gICAgYXdhaXQgY29udGVudE1hbmFnZXIubG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XHJcbiAgICBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbnMoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWVzKCk7XHJcblxyXG4gICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIGF0b2IoRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpKSk7XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWRjLTBcIl0pIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnRuLmJ0bi1kaXNjb25uZWN0XCIpLmNsaWNrKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBQbHVnaW5DZXJ0aWZpZXIuc3RhcnQoKVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJSZW1vdmluZyBMb2FkaW5nIEljb25cIik7XHJcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpLmxlbmd0aCkgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBNYWluIE9ic2VydmVyXCIpO1xyXG4gICAgdGhpcy5pbml0T2JzZXJ2ZXIoKTtcclxuXHJcbiAgICAvLyBTaG93IGxvYWRpbmcgZXJyb3JzXHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIHtcclxuICAgICAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcclxuICAgICAgICBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogYmRwbHVnaW5FcnJvcnMsIHRoZW1lczogYmR0aGVtZUVycm9yc30pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByZXZpb3VzVmVyc2lvbiA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJ2ZXJzaW9uXCIpO1xyXG4gICAgaWYgKGJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcclxuICAgICAgICBpZiAoYmJkQ2hhbmdlbG9nKSB0aGlzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJ2ZXJzaW9uXCIsIGJiZFZlcnNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIEVtb2ppTW9kdWxlLnN0YXJ0KClcclxuXHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoU29jaWFsLmJpbmQodGhpcyksIFwiQkQgU29jaWFsIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRQaWxscy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFBpbGxzIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRMaXN0SXRlbXMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBMaXN0IEl0ZW1zIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRTZXBhcmF0b3IuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBTZXBhcmF0b3IgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZXNzYWdlSGVhZGVyLmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgQ2hhdCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lbWJlckxpc3QuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBNZW1iZXIgTGlzdCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dGFjaG1lbnQuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XHJcblxyXG4gICAgaWYoYmRDb25maWcuaGF2ZUluc3RhbGxlZERlZmF1bHQpe1xyXG4gICAgICAgIGxldCBhbGVydCA9IFV0aWxzLmFsZXJ0KFwiRmlyc3QgSW5zdGFsbGF0aW9uXCIsIFwiQXMgaXQgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGluc3RhbGwgTGlnaHRjb3JkLCBXZSBhZGRlZCB0d28gZGVmYXVsdCB0aGVtZXMgYW5kIG9uZSBkZWZhdWx0IHBsdWdpbiBpbiB5b3VyIHBsdWdpbi90aGVtZSBmb2xkZXIuIENoZWNrIGl0IGluIHRoZSBQbHVnaW4vVGhlbWUgc2V0dGluZ3MuXCIpXHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgYWxlcnQub25DbG9zZShyZXNvbHZlKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsb2dvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnQgPiBkaXYudHlwZVdpbmRvd3MtMXphLW43LndpdGhGcmFtZS1oYVlsdEkudGl0bGVCYXItQUM0cEdWLmhvcml6b250YWxSZXZlcnNlLTN0UmpZNy5mbGV4LTFPMUdLWS5kaXJlY3Rpb25Sb3dSZXZlcnNlLW04SWpJcS5qdXN0aWZ5U3RhcnQtMk5ERnppLmFsaWduU3RyZXRjaC1EcEdQZjMuZGEtdHlwZVdpbmRvd3MuZGEtd2l0aEZyYW1lLmRhLXRpdGxlQmFyLmRhLWhvcml6b250YWxSZXZlcnNlLmRhLWZsZXguZGEtZGlyZWN0aW9uUm93UmV2ZXJzZS5kYS1qdXN0aWZ5U3RhcnQuZGEtYWxpZ25TdHJldGNoID4gZGl2LndvcmRtYXJrV2luZG93cy0xdjBsWUQud29yZG1hcmstMmlERGZtLmRhLXdvcmRtYXJrV2luZG93cy5kYS13b3JkbWFya1wiKVxyXG4gICAgaWYobG9nbyl7XHJcbiAgICAgICAgbG9nby5zdHlsZS50b3AgPSBcIjNweFwiXHJcbiAgICAgICAgbG9nby5pbm5lckhUTUwgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMTBcIiB3aWR0aD1cIjcwXCIgdmlld0JveD1cIjAgMCA3Mi41NCAxMFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC01cHgsIG1hcmdpbi10b3A6IDEwcHhcIj5cclxuICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTQ0LjgxLDkuNjdWNi4zM2MwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxQTMuNTMsMy41MywwLDAsMCw0Ni4yLDNjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNjdjMCwyLjIxLDEuODksMy4zMywzLjc3LDMuMzNhMy44NywzLjg3LDAsMCwwLDMuNDUtMi4xOGwtMi4xMi0xQzQ3LDExLjE3LDQ0LjgxLDEwLjg1LDQ0LjgxLDkuNjdaTTEwLjY4LDEyLjg5aDIuNDFWMy4xN0gxMC42OFpNNzEuNzYsMy4xNEg2OC4xOVY3LjIzTDcwLjU3LDkuNHYtNGgxLjI3Yy44MSwwLDEuMjEuNDEsMS4yMSwxdjNjMCwuNjMtLjM4LDEuMDUtMS4yMSwxLjA1SDY4LjE4djIuMzFoMy41N2MxLjkyLDAsMy43Mi0xLDMuNzItMy4yVjYuMzlDNzUuNDgsNC4xMyw3My42OCwzLjE0LDcxLjc2LDMuMTRaTTU0LjIyLDNjLTIsMC00LDEuMS00LDMuMzRWOS42NmMwLDIuMjMsMiwzLjM0LDQsMy4zNHMzLjk1LTEuMTEsMy45NS0zLjM0VjYuMzRDNTguMTksNC4xMSw1Ni4yLDMsNTQuMjIsM1ptMS41NSw2LjY2YzAsLjctLjc4LDEuMDYtMS41NCwxLjA2cy0xLjU1LS4zNS0xLjU1LTEuMDZWNi4zNGMwLS43Mi43NS0xLjEsMS41LTEuMXMxLjU5LjM1LDEuNTksMS4xWk02Ni44NCw2LjM0YzAtMi4yOS0xLjU4LTMuMi0zLjU1LTMuMkg1OS40NnY5LjczaDIuNDVWOS43N2guNDNsMi4yMiwzLjA5aDNMNjUsOS41MkM2Ni4xMyw5LjE1LDY2Ljg0LDguMTQsNjYuODQsNi4zNFpNNjMuMzMsNy42NUg2MS45MVY1LjQzaDEuNDJBMS4xMSwxLjExLDAsMSwxLDYzLjMzLDcuNjVaTTI5LjgzLDEzaDIuNDJWMy4wNkgyOS44M1Y2LjczbC0zLDBWMy4wOUgyNC43djkuNzhoMi4xNFY4LjY4bDMsMFpNMTcuMTYsOS43NlY2LjQyYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFhMy41NSwzLjU1LDAsMCwwLTMuMzYtMi4yNGMtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS43NmMwLDIuMjEsMiwzLjE1LDMuOSwzLjE1czMuNTgtMSwzLjU4LTNWNy41OEgxOC43OWwwLDEuMzZIMjAuM3YuNzdDMjAuMywxMC45MiwxNy4xNiwxMC45NCwxNy4xNiw5Ljc2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtMi45MyAtMylcIi8+XHJcbiAgICA8cG9seWdvbiBmaWxsPVwiY3VycmVudENvbG9yXCIgcG9pbnRzPVwiMzUuOTEgMC4wNiAzOC40MyAwLjA2IDM4LjQzIDEuODQgMzUuOTIgMS44MSAzNS45NyAxMCAzMy41NSAxMCAzMy40OSAxLjc1IDMwLjk4IDEuNzQgMzAuOTggMC4wNiAzMy40OSAwLjA2IDM1LjkxIDAuMDZcIi8+XHJcbiAgICA8cG9seWdvbiBmaWxsPVwiY3VycmVudENvbG9yXCIgcG9pbnRzPVwiMCA5Ljk3IDYuNSAxMCA2LjUgNy42MyAyLjQxIDcuNjMgMi40MSAwLjI2IDAgMi4yNiAwIDkuOTdcIi8+XHJcbjwvc3ZnPmBcclxuICAgIH1cclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0cmlidXRlcyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IGF0dHJpYnNQYXRjaHMgPSBbXVxyXG4gICAgdGhpcy5jYW5jZWxQYXRjaEF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBhdHRyaWJzUGF0Y2hzLmZvckVhY2goZSA9PiBlKCkpXHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUoIXYyLk1lc3NhZ2VDb21wb25lbnQpYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpXHJcbiAgICBcclxuICAgIC8vIFRPRE86IHRyeSB0byBwYXRjaCBjb3JyZWN0bHkgdGhlIHVzZXIgcG9wb3V0IG9uIGEgbmV4dCB1cGRhdGVcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkRpc2NvcmRUYWdcIilcclxuICAgIC50aGVuKERpc2NvcmRUYWcgPT4ge1xyXG4gICAgICAgIGxldCBEaXNjb3JkVGFnQ29tcCA9IERpc2NvcmRUYWcuZGVmYXVsdFxyXG4gICAgICAgIERpc2NvcmRUYWcuZGVmYXVsdCA9IGZ1bmN0aW9uKHByb3BzKXtcclxuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gRGlzY29yZFRhZ0NvbXAocHJvcHMpXHJcblxyXG4gICAgICAgICAgICBsZXQgaWQgPSB1dWlkdjQoKVxyXG5cclxuICAgICAgICAgICAgbGV0IGJhZGdlRGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIixcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiNXB4XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBrZXk6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSlcclxuXHJcbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtyZXR1cm5WYWx1ZV1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHMudXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBwcm9wcy51c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGJhZGdlRGl2KVxyXG4gICAgICAgICAgICBsZXQgZGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGNoaWxkcmVuKVxyXG4gICAgICAgICAgICBhcHBseUJhZGdlcyhpZCwgcHJvcHMudXNlciwgZmFsc2UpXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGl2XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZihkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UpeyAvLyB0aGlzIGNhbiBiZSBhIGJsb2NrZWQgbWVzc2FnZSAobm90IG9wZW5lZClcclxuICAgICAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcImRhdGEtbWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxyXG4gICAgICAgIH1cclxuICAgIH19KSlcclxuICAgICAgICAvKlxyXG4gICAgYXR0cmlic1BhdGNocy5wdXNoKFV0aWxzLm1vbmtleVBhdGNoKHYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcIm1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcclxuICAgIH19KSkqL1xyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5jaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn1gKS5sZW5ndGggPiAwKSB0aW1lc0NoZWNrZWQrKztcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9IC4ke2d1aWxkfSAuJHtibG9ifWApLmxlbmd0aCA+IDApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwibG9hZGluZ1wiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO30pO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbmplY3RFeHRlcm5hbHMgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGF3YWl0IERPTS5hZGRTY3JpcHQoXCJhY2Utc2NyaXB0XCIsIFwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuMi45L2FjZS5qc1wiKTtcclxuICAgIGlmICh3aW5kb3cucmVxdWlyZS5vcmlnaW5hbCkgd2luZG93LnJlcXVpcmUgPSB3aW5kb3cucmVxdWlyZS5vcmlnaW5hbDtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBpZighRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpICYmICFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKXtcclxuICAgICAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBkZWZhdWx0Q29va2llKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIGRlZmF1bHRSUEMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBzZXR0aW5nc1BhbmVsLmxvYWRTZXR0aW5ncygpO1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiBkZWZhdWx0Q29va2llKSB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW3NldHRpbmddID0gZGVmYXVsdENvb2tpZVtzZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucHJvdG90eXBlICYmIGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMpXHJcbiAgICAudGhlbihzZXR0aW5nTW9kdWxlID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGdldFByZWRpY2F0ZVNlY3Rpb25zID0gc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9uc1xyXG4gICAgICAgIHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0UHJlZGljYXRlU2VjdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcblxyXG4gICAgICAgICAgICBpZihyZXN1bHRbMV0uc2VjdGlvbiA9PT0gXCJNeSBBY2NvdW50XCIpeyAvLyB1c2VyIHNldHRpbmdzLCBub3QgZ3VpbGQgc2V0dGluZ3NcclxuICAgICAgICAgICAgICAgIGxldCBwb3BlZCA9IFtdXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnNldHRpbmdzUGFuZWwucmVuZGVyU2lkZWJhcih0aGlzKSlcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZShwb3BlZFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9wZWQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn07XHJcblxyXG5cclxubGV0IGNsYXNzTmFtZUxheWVyXHJcbmxldCBjbGFzc05hbWVTb2NpYWxMaW5rc1xyXG5sZXQgY2xhc3NOYW1lTW9kYWxcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IG1haW5PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luTW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSBwbHVnaW5Nb2R1bGUucmF3T2JzZXJ2ZXIobXV0YXRpb24pO1xyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vdGhpbmcgYWRkZWQsIHNraXBcclxuICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVMYXllciljbGFzc05hbWVMYXllciA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVTb2NpYWxMaW5rcyljbGFzc05hbWVTb2NpYWxMaW5rcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVNb2RhbCljbGFzc05hbWVNb2RhbCA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubW9kYWwgJiYgdHlwZW9mIGUubW9kYWwgPT09IFwic3RyaW5nXCIgJiYgZS5pbm5lciAmJiB0eXBlb2YgZS5pbm5lciA9PT0gXCJzdHJpbmdcIiAmJiAhZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUpWzBdLm1vZGFsXHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpID09PSBcIkdVSUxEX1NFVFRJTkdTXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZVNvY2lhbExpbmtzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiO1xyXG5cclxuICAgICAgICAgICAgLy8gRW1vamkgUGlja2VyXHJcbiAgICAgICAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcclxuICAgICAgICAgICAgLy9pZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIyKSAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lRW1vamlQaWNrZXIpLmxlbmd0aCAgJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVFbW9qaVBpY2tlcikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lQW5pbWF0b3JMZWZ0KSkgcXVpY2tFbW90ZU1lbnUub2JzQ2FsbGJhY2sobm9kZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuc2hvd0NoYW5nZWxvZ01vZGFsID0gZnVuY3Rpb24ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuYWxlcnQgPSBmdW5jdGlvbih0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoU29jaWFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJUYWJCYXJcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghVGFiQmFyKSByZXR1cm47XHJcbiAgICB0aGlzLnNvY2lhbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAzXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChBbmNob3IpIHtcclxuICAgICAgICAgICAgbGV0IHNvY2lhbE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zb2NpYWxMaW5rcylbMF1cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUgPSBuZXdPbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVDb2xvck11dGVkLFxyXG4gICAgICAgICAgICBzaXplcyxcclxuICAgICAgICAgICAgY2xhc3NOYW1lVmVyc2lvbkhhc2hcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvck11dGVkKVswXS5jb2xvck11dGVkLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJzaW9uSGFzaClbMF0udmVyc2lvbkhhc2hcclxuICAgICAgICBdXHJcblxyXG4gICAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke2JkQ29uZmlnLmhhc2ggPyBiZENvbmZpZy5oYXNoLnN1YnN0cmluZygwLCA3KSA6IGJkQ29uZmlnLmJyYW5jaH0pYDtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBMaWdodGNvcmQgJHtlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikudmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgYCgkeyhlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikuY29tbWl0IHx8IFwiVW5rbm93blwiKS5zbGljZSgwLCA3KX0pYCkpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBCQkQgJHtiYmRWZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCB2ZXJzaW9uSGFzaCkpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcclxuICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsVmVyc2lvbnMoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICB9O1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0R3VpbGRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBndWlsZHNXcmFwcGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICBjb25zdCBndWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkTGlzdEl0ZW1zID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcclxuICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgYmxvYkNsYXNzID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XHJcbiAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XHJcbiAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5yZXR1cm5WYWx1ZSAmJiBkYXRhLnRoaXNPYmplY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWVcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudW5yZWFkKSBjbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuc2VsZWN0ZWQpIGNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmF1ZGlvKSBjbGFzc05hbWUgKz0gXCIgYmQtYXVkaW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS52aWRlbykgY2xhc3NOYW1lICs9IFwiIGJkLXZpZGVvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYmFkZ2UpIGNsYXNzTmFtZSArPSBcIiBiZC1iYWRnZVwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmFuaW1hdGFibGUpIGNsYXNzTmFtZSArPSBcIiBiZC1hbmltYXRhYmxlXCI7XHJcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFBpbGxzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkUGlsbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgaWYgKHByb3BzLnNlbGVjdGVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ob3ZlcmVkXCI7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgIGNvbnN0IGd1aWxkQ29tcG9uZW50cyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICBpZiAoIWd1aWxkQ29tcG9uZW50cyB8fCAhR3VpbGRzKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZC1zZXBhcmF0b3JcIjtcclxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5BdHRhY2htZW50UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdIC8vIHRlbXBvcmFyeVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhQXR0YWNobWVudCB8fCAhQXR0YWNobWVudC5kZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXJldHVyblxyXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSB8fCBudWxsXHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XHJcblxyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF0dGFjaG1lbnQgfHwgIWF0dGFjaG1lbnQudXJsKXJldHVyblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XHJcbiAgICAgICAgICAgIGlkOiBcImNlcnRpZmllZC1cIitpZFxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIFBsdWdpbkNlcnRpZmllci5wYXRjaChhdHRhY2htZW50LCBcImNlcnRpZmllZC1cIitpZClcclxuICAgIH19KVxyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgTWVzc2FnZUhlYWRlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiTWVzc2FnZVRpbWVzdGFtcFwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lc3NhZ2VIZWFkZXIgfHwgIU1lc3NhZ2VIZWFkZXIuZGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZXNzYWdlSGVhZGVyLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwibWVzc2FnZS5hdXRob3JcIik7XHJcbiAgICAgICAgLy8gY29uc3QgaGVhZGVyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHNcIik7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuXCIpO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF1dGhvciB8fCAhYXV0aG9yLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAoYXV0aG9yLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGF1dGhvci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBhdXRob3IuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIGF1dGhvciwgdHJ1ZSlcclxuICAgIH19KTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBjaGF0KXtcclxuICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmFkZ2VzLVwiK2lkKVxyXG4gICAgICAgIGlmKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMClyZXR1cm5cclxuICAgICAgICBpZihkaXYuY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuXHJcbiAgICAgICAgbGV0IGJsb2NrRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgIGJsb2NrRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChibG9ja0RpdilcclxuXHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcblxyXG4gICAgICAgIGRpc3RhbnQuZ2V0QmFkZ2VzKHVzZXIuaWQpXHJcbiAgICAgICAgLnRoZW4oYmFkZ2VzID0+IHtcclxuICAgICAgICAgICAgYmFkZ2VzLmZvckVhY2goYmFkZ2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiMTZweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTZweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiYWRnZS5zY29wZXMuZm9yRWFjaChzY29wZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NvcGUgPT09IFwidXNlclwiKXsvLyByZXF1aXJlIHVzZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudXNlciA9IHVzZXJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSBcclxuICAgICAgICAgICAgICAgIGlmKCFiYWRnZS5ocmVmKXtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5BbmNob3IgPSBBbmNob3JcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5ocmVmID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBiYWRnZS5uYW1lfSxcclxuICAgICAgICAgICAgICAgICAgICBiYWRnZS5ocmVmID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBiYWRnZS5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKSkgOiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihlbGVtZW50LCBkaXYyKVxyXG4gICAgICAgICAgICAgICAgZGl2Mi5jaGlsZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lbWJlckxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm1lbWJlckxpc3RQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgTWVtYmVyTGlzdEl0ZW0gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1lbWJlckxpc3RJdGVtXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVtYmVyTGlzdEl0ZW0gfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLnJlbmRlckRlY29yYXRvcnMpIHJldHVybjtcclxuICAgIHRoaXMubWVtYmVyTGlzdFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLCBcInJlbmRlckRlY29yYXRvcnNcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEudGhpc09iamVjdCwgXCJwcm9wcy51c2VyXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIXVzZXIgfHwgIXVzZXIuaWQpcmV0dXJuXHJcbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh1c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCB1c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXtcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJhZGdlcy1cIitpZH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBmYWxzZSlcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnVwZGF0ZUluamVjdG9yID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBpbmplY3Rpb25QYXRoID0gRGF0YVN0b3JlLmluamVjdGlvblBhdGg7XHJcbiAgICBpZiAoIWluamVjdGlvblBhdGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuICAgIGNvbnN0IHJtcmYgPSByZXF1aXJlKFwicmltcmFmXCIpO1xyXG4gICAgY29uc3QgeWF1emwgPSByZXF1aXJlKFwieWF1emxcIik7XHJcbiAgICBjb25zdCBta2RpcnAgPSByZXF1aXJlKFwibWtkaXJwXCIpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IC8qcmVxdWlyZShcInJlcXVlc3RcIik7Ki8gbnVsbFxyXG5cclxuICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLnJlc29sdmUoaW5qZWN0aW9uUGF0aCwgXCIuLlwiKTtcclxuICAgIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGluamVjdGlvblBhdGgpO1xyXG4gICAgY29uc3QgemlwTGluayA9IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9hcmNoaXZlL2luamVjdG9yLnppcFwiO1xyXG4gICAgY29uc3Qgc2F2ZWRaaXAgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJpbmplY3Rvci56aXBcIik7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJCZXR0ZXJEaXNjb3JkQXBwLWluamVjdG9yXCIpO1xyXG5cclxuICAgIC8vIERvd25sb2FkIHRoZSBpbmplY3RvciB6aXAgZmlsZVxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xyXG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcclxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xyXG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcblxyXG4gICAgICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIldyaXRpbmcgXCIgKyBzYXZlZFppcCk7XHJcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZShzYXZlZFppcCwgYm9keSwgZXJyID0+IHJlc29sdmUoIWVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBzdWNjZXNzO1xyXG5cclxuICAgIC8vIENoZWNrIGFuZCBkZWxldGUgcmVuYW1lIGV4dHJhY3Rpb25cclxuICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKGV4dHJhY3RlZEZvbGRlciwgcmVzKSk7XHJcbiAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGAke2V4dHJhY3RlZEZvbGRlcn0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTtcclxuICAgIFxyXG4gICAgLy8gVW56aXAgdGhlIGRvd25sb2FkZWQgemlwIGZpbGVcclxuICAgIGNvbnN0IHppcGZpbGUgPSBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHlhdXpsLm9wZW4oc2F2ZWRaaXAsIHtsYXp5RW50cmllczogdHJ1ZX0sIChlcnIsIHppcCkgPT4gIHIoemlwKSkpO1xyXG4gICAgemlwZmlsZS5vbihcImVudHJ5XCIsIGZ1bmN0aW9uKGVudHJ5KSB7XHJcbiAgICAgICAgLy8gU2tpcCBkaXJlY3RvcmllcywgdGhleSBhcmUgaGFuZGxlZCB3aXRoIG1rZGlycFxyXG4gICAgICAgIGlmIChlbnRyeS5maWxlTmFtZS5lbmRzV2l0aChcIi9cIikpIHJldHVybiB6aXBmaWxlLnJlYWRFbnRyeSgpO1xyXG5cclxuICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkV4dHJhY3RpbmcgXCIgKyBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgLy8gTWFrZSBhbnkgbmVlZGVkIHBhcmVudCBkaXJlY3Rvcmllc1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoZnVsbFBhdGgpKTtcclxuICAgICAgICB6aXBmaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCBmdW5jdGlvbihlcnIsIHJlYWRTdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5vbihcImVuZFwiLCBmdW5jdGlvbigpIHt6aXBmaWxlLnJlYWRFbnRyeSgpO30pOyAvLyBHbyB0byBuZXh0IGZpbGUgYWZ0ZXIgdGhpc1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLnBpcGUoZnMuY3JlYXRlV3JpdGVTdHJlYW0oZnVsbFBhdGgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgemlwZmlsZS5yZWFkRW50cnkoKTsgLy8gU3RhcnQgcmVhZGluZ1xyXG5cclxuICAgIC8vIFdhaXQgZm9yIHRoZSBmaW5hbCBmaWxlIHRvIGZpbmlzaFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB6aXBmaWxlLm9uY2UoXCJlbmRcIiwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZmluYWwgc3RlcFxyXG4gICAgY29uc3QgYmFja3VwRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGAke2ZvbGRlck5hbWV9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShpbmplY3Rpb25QYXRoLCBiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBSZW5hbWUgdGhlIGV4dHJhY3RlZCBmb2xkZXIgdG8gd2hhdCBpdCBzaG91bGQgYmVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xyXG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiRmFpbGVkIHRvIHJlbmFtZSB0aGUgZmluYWwgZGlyZWN0b3J5XCIpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHJlbmFtZSBoYWQgaXNzdWVzLCBkZWxldGUgd2hhdCB3ZSB0cmllZCB0byByZW5hbWUgYW5kIHJlc3RvcmUgYmFja3VwXHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIlNvbWV0aGluZyB3ZW50IHdyb25nLi4uIHJlc3RvcmluZyBiYWNrdXBzLlwiKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoZXh0cmFjdGVkRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoYmFja3VwRm9sZGVyLCBpbmplY3Rpb25QYXRoLCByZXNvbHZlKSk7XHJcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgd2UndmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgc2hvdWxkIGhhdmUgZ29uZSBzbW9vdGhseS5cclxuICAgIC8vIENsZWFudXAgdGhlIGJhY2t1cCBmb2xkZXIgdGhlbiByZW1vdmUgdGhlIHppcFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy51bmxpbmsoc2F2ZWRaaXAsIHJlc29sdmUpKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpO1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb3JlIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiY29uc3QgX19ub25fd2VicGFja19yZXF1aXJlX18gPSB3aW5kb3cucmVxdWlyZVxyXG5cclxuaW1wb3J0IHtiZENvbmZpZ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuXHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IHJlbGVhc2VDaGFubmVsID0gRGlzY29yZE5hdGl2ZS5nbG9iYWxzID8gRGlzY29yZE5hdGl2ZS5nbG9iYWxzLnJlbGVhc2VDaGFubmVsIDogRGlzY29yZE5hdGl2ZS5hcHAgPyBEaXNjb3JkTmF0aXZlLmFwcC5nZXRSZWxlYXNlQ2hhbm5lbCgpIDogXCJzdGFibGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEYXRhU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0ge3NldHRpbmdzOiB7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX19O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YSA9IHt9O1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EYXRhU3RvcmUgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5CREZpbGUpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuQkRGaWxlLCBcImJpbmFyeVwiKSlcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgc2V0dGluZ3MgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyh0aGlzLnNldHRpbmdzRmlsZSk7XHJcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwge1tyZWxlYXNlQ2hhbm5lbF06IHNldHRpbmdzfSk7XHJcbiAgICAgICAgICAgIGVsc2Ugc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJERGF0YShcInNldHRpbmdzXCIsIHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIFV0aWxzLmFsZXJ0KFwiQ29ycnVwdCBTdG9yYWdlXCIsIFwiVGhlIGJkIHN0b3JhZ2UgaGFzIHNvbWVob3cgYmVjb21lIGNvcnJ1cHQuIFlvdSBtYXkgZWl0aGVyIHRyeSB0byBzYWx2YWdlIHRoZSBmaWxlIG9yIGRlbGV0ZSBpdCB0aGVuIHJlbG9hZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbmplY3Rpb25QYXRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0aW9uUGF0aCkgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGg7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBiYXNlID0gZWxlY3Ryb24uZ2V0QXBwUGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdCYXNlID0gZWxlY3Ryb24uZ2V0UGF0aChcInVzZXJEYXRhXCIpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdMb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShyb2FtaW5nQmFzZSwgZWxlY3Ryb24uZ2V0VmVyc2lvbigpLCBcIm1vZHVsZXNcIiwgXCJkaXNjb3JkX2Rlc2t0b3BfY29yZVwiLCBcImluamVjdG9yXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29uZmlnRmlsZSgpIHtyZXR1cm4gdGhpcy5fY29uZmlnRmlsZSB8fCAodGhpcy5fY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmluamVjdGlvblBhdGgsIFwiYmV0dGVyZGlzY29yZFwiLCBcImNvbmZpZy5qc29uXCIpKTt9XHJcbiAgICBnZXQgQkRGaWxlKCkge3JldHVybiB0aGlzLl9CREZpbGUgfHwgKHRoaXMuX0JERmlsZSA9IHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCwgXCJiZHN0b3JhZ2UuanNvblwiKSk7fVxyXG4gICAgZ2V0IHNldHRpbmdzRmlsZSgpIHtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGaWxlIHx8ICh0aGlzLl9zZXR0aW5nc0ZpbGUgPSBwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGgsIFwiYmRzZXR0aW5ncy5qc29uXCIpKTt9XHJcbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XHJcblxyXG4gICAgZ2V0U2V0dGluZ0dyb3VwKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZXR0aW5nR3JvdXAoa2V5LCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldID0gZGF0YTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCRERhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEZXZNb2RlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGVidWdMaXN0ZW5lciA9IHRoaXMuZGVidWdMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIgPSB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIHRoaXMuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnREZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BEZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlYnVnTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAxMTkgfHwgZS53aGljaCA9PSAxMTgpIHsvL0Y4XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbJWNEZXZNb2RlJWNdICVjQnJlYWsvUmVzdW1lXCIsIFwiY29sb3I6IHJlZDtcIiwgXCJjb2xvcjogIzMwMzAzMDsgZm9udC13ZWlnaHQ6NzAwO1wiLCBcImNvbG9yOnJlZDtcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIGRlYnVnZ2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvcHlTZWxlY3Rvckxpc3RlbmVyKGUpIHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgICAgIGNsYXNzTGF5ZXIsIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NJdGVtc1xyXG4gICAgICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1lbnUpWzBdXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHtcclxuICAgICAgICAgICAgICAgIGlmKCFjbGFzc0l0ZW1zIHx8ICFjbGFzc0xheWVyLmxheWVyKXJldHVybiBjb25zb2xlLmxvZyhjbGFzc0l0ZW1zLCBjbGFzc0xheWVyLmxheWVyKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbSA9IERPTS5xdWVyeShcIi5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLm1lbnUpKTtcclxuICAgICAgICAgICAgICAgIGlmICghY20pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50ID4gLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzTGF5ZXIubGF5ZXJDb250YWluZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NMYXllci5sYXllcn1cIj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLm1lbnV9ICR7Y2xhc3NJdGVtcy5zdHlsZUZsZXhpYmxlfSAke2NsYXNzSXRlbXMuYWNjb21tb2RhdGVTY3JvbGxiYXJ9IGJkLWNvbnRleHQtbWVudVwiIHN0eWxlPVwiXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmFwcGVuZChjbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChjbVdyYXApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJtZW51XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIilcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuaWQgPSBcImJkLWNvcHktc2VsZWN0b3ItY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgXCJDb3B5IFNlbGVjdG9yIEFjdGlvbnNcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDbGFzc2VzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zY3JvbGxlcldyYXApWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJXcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJDbGFzc2VzLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyQ2xhc3Nlcy50aGVtZUdob3N0SGFpcmxpbmV9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlcilbMF0uc2Nyb2xsZXJ9ICR7Y2xhc3NJdGVtcy5zY3JvbGxlcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyV3JhcC5hcHBlbmQoc2Nyb2xsZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgY20uYXBwZW5kKHNjcm9sbGVyV3JhcClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IGNtLnBhcmVudEVsZW1lbnRcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBjbS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZyA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJncm91cFwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5sYWJlbENvbnRhaW5lcn0gJHtjbGFzc0l0ZW1zLmNvbG9yRGVmYXVsdH1cIiByb2xlPVwibWVudWl0ZW1cIiBpZD1cImJkLWNvcHktc2VsZWN0b3ItaXRlbS1jbVwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY21pLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5sYWJlbH1cIj5Db3B5IFNlbGVjdG9yPC9kaXY+YCkpO1xyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5OYXRpdmVNb2R1bGUuY29weShzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IERPTS5xdWVyeUFsbChcImRpdltyb2xlPW1lbnVpdGVtXS5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzICYmIGVsZW1lbnRzLmZvckVhY2goZWxlbSA9PiBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NJdGVtcy5mb2N1c2VkKSlcclxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LmFkZChjbGFzc0l0ZW1zLmZvY3VzZWQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBjbWcuYXBwZW5kKGNtaSk7XHJcbiAgICAgICAgICAgICAgICBpZihzY3JvbGxlci5jaGlsZE5vZGVzLmxlbmd0aCl7IC8vIGFwZW5kIGEgc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cInNlcGFyYXRvclwiIGNsYXNzPVwiJHtjbGFzc0l0ZW1zLnNlcGFyYXRvcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZChzZXBhcmF0b3IpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoY21nKTtcclxuICAgICAgICAgICAgICAgIGlmKGNtV3JhcC5jbGllbnRIZWlnaHQgPCBjbVdyYXAuc2Nyb2xsSGVpZ2h0KXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nIFwiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IChjbVdyYXAuc3R5bGUudG9wIC0gY21nLmNsaWVudEhlaWdodCkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZ1wiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGF0dGFjaCwgMSk7XHJcbiAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb24gZnVsbFBhdGgoZWwpe1xyXG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgd2hpbGUgKGVsLnBhcmVudE5vZGUpe1xyXG4gICAgICAgICAgICAgIGlmIChlbC5pZCl7XHJcbiAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KCcjJytlbC5pZCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmIChlbD09ZWwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LmZyb20oZWwuY2xhc3NMaXN0LmVudHJpZXMoKSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTEsZT1lbDtlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7ZT1lLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsYysrKTtcclxuICAgICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrKCh0eXBlb2YgZWwuY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsLmNsYXNzTmFtZSkgfHwgXCJcIikuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICEhZSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKStcIjpudGgtY2hpbGQoXCIrYytcIilcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbD1lbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmFtZXMuam9pbihcIiA+IFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bGxQYXRoKGVsZW1lbnQpXHJcbiAgICAgICAgLypcclxuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0UnVsZSA9IHJ1bGVzW3J1bGVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmIChsYXRlc3RSdWxlKSByZXR1cm4gbGF0ZXN0UnVsZS5zZWxlY3RvclRleHQ7XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoKSByZXR1cm4gYC4ke0FycmF5LmZyb20oZWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7XHJcbiAgICAgICAgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7Ki9cclxuICAgIH1cclxuXHJcbiAgICBnZXRSdWxlcyhlbGVtZW50LCBjc3MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHMpIHtcclxuICAgICAgICAvL2lmICh3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKSByZXR1cm4gd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBzaGVldHMgPSBbLi4uY3NzXS5maWx0ZXIocyA9PiAhcy5ocmVmIHx8ICFzLmhyZWYuaW5jbHVkZXMoXCJCZXR0ZXJEaXNjb3JkQXBwXCIpKTtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0cy5tYXAocyA9PiBbLi4uKHMuY3NzUnVsZXMgfHwgW10pXSkuZmxhdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlcyA9IHJ1bGVzLmZpbHRlcihyID0+IHIgJiYgci5zZWxlY3RvclRleHQgJiYgZWxlbWVudC5tYXRjaGVzKHIuc2VsZWN0b3JUZXh0KSAmJiByLnN0eWxlLmxlbmd0aCAmJiByLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmxlbmd0aCA8IDggJiYgIXIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFJ1bGVzO1xyXG4gICAgfVxyXG59OyIsImV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXNhYmxlVHlwaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnN0YXJ0VHlwaW5nKVxyXG4gICAgICAgIC50aGVuKHR5cGluZ01vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0YXJ0VHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3BUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RvcFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc2FibGVUeXBpbmcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQnVnSHVudGVyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9idWdfaHVudGVyXCJcclxuaW1wb3J0IExpZ2h0Y29yZFVzZXJCYWRnZSBmcm9tIFwiLi4vc3ZnL0xpZ2h0Y29yZFVzZXJcIjtcclxuaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCB7IHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDaXJjdXMgZnJvbSBcIi4uL3N2Zy9jaXJjdXNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7IC8vIEdlbmVyYXRlIFVVSUQgKE5vIGNyeXB0byBybmcpXHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG59ICBcclxuXHJcbmNvbnN0IGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXMgPSB7fVxyXG5sZXQgYmFkZ2VzVG9GZXRjaCA9IFtdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzdGFudFNlcnZlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2NhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IHtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc3RhbnRTZXJ2ZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhY2hlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNhY2hlKGRhdGEpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB0aGlzLl9jYWNoZSAhPT0gXCJvYmplY3RcIilyZXR1cm4gdGhpcy5fY2FjaGUgPSBkYXRhXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jYWNoZSwgZGF0YSlcclxuICAgIH0vKlxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZSgpe1xyXG4gICAgICAgIEJkQXBpLnNob3dUb2FzdChcIkRlbGV0aW5nIGFsbCBpbmZvcyBhYm91dCB5b3Ugb24gTGlnaHRjb3JkIFNlcnZlcnMuLi5cIiwge3R5cGU6IFwid2FyblwifSlcclxuICAgICAgICByZXR1cm4gaGFuZGxlUmVxdWVzdChSb3V0ZXMuZGVsZXRlLCBcImRlbGV0ZVwiKVxyXG4gICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZGVsZXRlIGFsbCBpbmZvcm1hdGlvbnM6ICR7KHJlcy5zdGF0dXMrXCIgXCIrcmVzLnN0YXR1c1RleHQrXCIgXCIrYXdhaXQgcmVzLnRleHQoKSl9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zLmApXHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dUb2FzdChcIlN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pXHJcbiAgICAgICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gPSBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpXHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBkZWxldGUgYWxsIGluZm9ybWF0aW9uczogJHtlcnIuc3RhY2t9YClcclxuICAgICAgICB9KVxyXG4gICAgfSovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgY3VzdG9tIGJhZGdlcyBmcm9tIHRoZSB1c2VyIElELlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXIgVGhlIHVzZXIgSUQgXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb25zdGFudHNbXCJiYWRnZXNcIl0+fVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRCYWRnZXModXNlcil7XHJcbiAgICAgICAgaWYodGhpcy5jYWNoZS5iYWRnZXNbdXNlcl0pcmV0dXJuIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXHJcbiAgICAgICAgaWYoYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSlyZXR1cm4gYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG5cclxuICAgICAgICBsZXQgcmVzb2x2ZVxyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzKSA9PiAocmVzb2x2ZSA9IHJlcykpXHJcbiAgICAgICAgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSA9IG5ld1Byb21pc2VcclxuXHJcbiAgICAgICAgY29uc3QgYmFkZ2VzID0gW11cclxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIENvbnN0YW50cy5iYWRnZXMpe1xyXG4gICAgICAgICAgICBpZihiYWRnZS5kZWZhdWx0VXNlcnMuaW5jbHVkZXModXNlcikpYmFkZ2VzLnB1c2goYmFkZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZldGNoZWRCYWRnZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSlyZXR1cm4gcmVzb2x2ZShbXSlcclxuICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaC5wdXNoKFt1c2VyLCByZXNvbHZlXSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlcnMgPSBiYWRnZXNUb0ZldGNoXHJcbiAgICAgICAgICAgICAgICBpZih1c2Vycy5sZW5ndGggPT09IDApcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBiYWRnZXNUb0ZldGNoID0gW11cclxuICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3QoUm91dGVzLmJhZGdlcywgXCJQT1NUXCIsIEpTT04uc3RyaW5naWZ5KHVzZXJzLm1hcChlID0+IGVbMF0pKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IHNlcnZlciBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgdXNlciBvZiByZXNwb25zZUJvZHkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHVzZXJzLmZpbmQocHJvbWlzZSA9PiBwcm9taXNlWzBdID09PSB1c2VyLnVzZXJfaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VbMV0odXNlci5iYWRnZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZighKGVyciBpbnN0YW5jZW9mIExpZ2h0Y29yZEVycm9yKSljb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCAwKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBmZXRjaGVkQmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoIUNvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBXZSBkbyBub3QgaGF2ZSB0aGUgQ29tcG9uZW50LCBza2lwIGl0LlxyXG4gICAgICAgICAgICBpZihiYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBBbHJlYWR5IGluc2VydGVkLlxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaChDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGJhZGdlczogT2JqZWN0LmFzc2lnbih0aGlzLmNhY2hlLmJhZGdlcywge1t1c2VyXTogYmFkZ2VzfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIH0sIDYwMDAwMCk7XHJcblxyXG4gICAgICAgIHJlc29sdmUoYmFkZ2VzKVxyXG4gICAgICAgIGRlbGV0ZSBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXHJcbiAgICAgICAgcmV0dXJuIGJhZGdlc1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocm91dGUsIG1ldGhvZCwgZGF0YSl7XHJcbiAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSl7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBMaWdodGNvcmRFcnJvcihcIlRoZSBjdXJyZW50IHNldHRpbmdzIGJsb2NrZWQgdGhlIHJlcXVlc3QuXCIpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGVGZXRjaChgJHtDb25zdGFudHMuU0VSVkVSX1VSTH0vYXBpL3YxJHtyb3V0ZX1gLCB7XHJcbiAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJDTElFTlRcIjogXCJMaWdodGNvcmRcIixcclxuICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gfHwgXCJOb25lOjpBbm9ueW1vdXNcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uKGRhdGEgPyB7XHJcbiAgICAgICAgICAgIGJvZHk6IGRhdGFcclxuICAgICAgICB9IDoge30pXHJcbiAgICB9KVxyXG59XHJcblxyXG5jbGFzcyBMaWdodGNvcmRFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiTGlnaHRjb3JkRXJyb3JcIlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgU0VSVkVSX1VSTDogXCJodHRwczovL2xpZ2h0Y29yZC5kZXJva3UueHl6XCIsXHJcbiAgICBiYWRnZXM6IFsgLy8gVE9ETzogQWRkIG1vcmUgYmFkZ2VzICsgc2VydmVyIHNpZGUgc3ZnXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZCBCdWcgSHVudGVyXCIsXHJcbiAgICAgICAgICAgIGlkOiBcImYwNDY5OGY1LTgxNmItNDFlMy1iZDAxLTkyMjkxMTkzZDdhNVwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcclxuICAgICAgICAgICAgICAgIFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIsXHJcbiAgICAgICAgICAgICAgICBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogQnVnSHVudGVyQmFkZ2UsXHJcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC9saWdodGNvcmQvd2lraS9iYWRnZXMjYnVnX2h1bnRlclwiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJ1ZmZvb25cIixcclxuICAgICAgICAgICAgaWQ6IFwiMDY5MDRkMzEtNjViNC00MWVjLWE1MGMtODY1OGJiZDFhZjk2XCIsXHJcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW1xyXG4gICAgICAgICAgICAgICAgXCIzODkwMTY4OTU1NDM3MDU2MDJcIixcclxuICAgICAgICAgICAgICAgIFwiNjY0NjAwMTM0NTI4NjYzNTY1XCIsXHJcbiAgICAgICAgICAgICAgICBcIjYyNTM1MDY1NzgyOTg5NjIyNFwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ2lyY3VzLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8veW91dHUuYmUvRUp0YjZ6LWRsVDg/dD0xNDVcIlxyXG4gICAgICAgIH1cclxuICAgIF1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFJvdXRlcyA9IHtcclxuICAgIGJhZGdlczogYC91c2Vycy9iYWRnZXNgXHJcbn0iLCIvKipcclxuICogQ29weXJpZ2h0IDIwMTggWmFjaGFyeSBSYXVlblxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcclxuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXHJcbiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXHJcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWRcclxuICogdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELFxyXG4gKiBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQVxyXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXHJcbiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxyXG4gKiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkVcclxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcbiAqIFxyXG4gKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CRFBsdWdpbkxpYnJhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQGludGVyZmFjZVxyXG4gKiBAbmFtZSBPZmZzZXRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRvcCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIC0gQm90dG9tIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gT3V0ZXIgd2lkdGggb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKi9cclxuXHJcbiAvKipcclxuICogRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWRkZWQgbGlzdGVuZXIuXHJcbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcclxuICovXHJcbiBcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEFkZHMgYSBzdHlsZSB0byB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgYXMgdGhlIGVsZW1lbnQgaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU3R5bGUoaWQsIGNzcykge1xyXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMvcmVxdWlyZXMgYSByZW1vdGUgc2NyaXB0IHRvIGJlIGxvYWRlZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGZvciB0aGlzIHNjcmlwdFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjcmlwdCBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XHJcblx0XHRcdHNjcmlwdC5zcmMgPSB1cmw7XHJcblx0XHRcdHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcclxuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHNjcmlwdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcclxuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cclxuICAgIHN0YXRpYyBhbmltYXRlKHt0aW1pbmcgPSBfID0+IF8sIHVwZGF0ZSwgZHVyYXRpb259KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xyXG4gICAgICAgICAgLy8gdGltZUZyYWN0aW9uIGdvZXMgZnJvbSAwIHRvIDFcclxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA+IDEpIHRpbWVGcmFjdGlvbiA9IDE7XHJcbiAgICAgIFxyXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1pbmcodGltZUZyYWN0aW9uKTtcclxuICAgICAgXHJcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XHJcbiAgICAgIFxyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA8IDEpIHtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBteSBzaGl0IHZlcnNpb24gb2Ygbm90IGhhdmluZyB0byB1c2UgYCRgIGZyb20galF1ZXJ5LiBNZWFuaW5nXHJcbiAgICAgKiB0aGF0IHlvdSBjYW4gcGFzcyBhIHNlbGVjdG9yIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucXVlcnl9LlxyXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTFxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucXVlcnlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gRWl0aGVyIHRoZSByZXN1bHQgb2YgYHBhcnNlSFRNTGAgb3IgYHF1ZXJ5YFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSFRNTChzZWxlY3Rvcik7XHJcbiAgICAgICAgY29uc3QgaXNIVE1MID0gZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0ID8gQXJyYXkuZnJvbShlbGVtZW50KS5zb21lKG4gPT4gbi5ub2RlVHlwZSA9PT0gMSkgOiBlbGVtZW50Lm5vZGVUeXBlID09PSAxO1xyXG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5KHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBBcnJheSBvZiBhbGwgZm91bmQgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5QWxsKHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXHJcbiAgICAgKiB0aGUgcGFyc2VkIEhUTUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGRvY3VtZW50IGZyYWdtZW50IHtAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50fS5cclxuICAgICAqIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpc3Qgb2YgZWxlbWVudHMgYXQgdGhlIHRvcCBsZXZlbCwgdGhleSBjYW4gdGhlbiBiZSBhcHBlbmRlZCBhbGwgYXQgb25jZSB0byBhbm90aGVyIG5vZGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcclxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xyXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXHJcbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7cmV0dXJuIHRoaXMucGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50KTt9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBzdHJpbmcgb2YgaHRtbCBhbmQgZXNjYXBlcyBpdCB1c2luZyB0aGUgYnJvd2VyJ3Mgb3duIGVzY2FwaW5nIG1lY2hhbmlzbS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gaHRtbCB0byBiZSBlc2NhcGVkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlc2NhcGVIVE1MKGh0bWwpIHtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgc3BhbkVsZW1lbnQuYXBwZW5kKHRleHROb2RlKTtcclxuICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gcmVtb3ZlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcmVzZW50OiBUb2dnbGUgY2xhc3MgdmFsdWU7XHJcbiAgICAgKiBpLmUuLCBpZiBjbGFzcyBleGlzdHMgdGhlbiByZW1vdmUgaXQgYW5kIHJldHVybiBmYWxzZSwgaWYgbm90LCB0aGVuIGFkZCBpdCBhbmQgcmV0dXJuIHRydWUuXHJcbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGV2YWx1YXRlcyB0byB0cnVlLCBhZGQgc3BlY2lmaWVkIGNsYXNzIHZhbHVlLCBhbmQgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCByZW1vdmUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmRpY2F0b3JdIC0gT3B0aW9uYWwgaW5kaWNhdG9yIGZvciBpZiB0aGUgY2xhc3Mgc2hvdWxkIGJlIHRvZ2dsZWRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvZ2dsZUNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSwgaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgY2xhc3NuYW1lID0gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XHJcbiAgICAgICAgZWxzZSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUpIHtcclxuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgb25lIGNsYXNzIHdpdGggYW5vdGhlclxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIGZvciB0aGUgY2xhc3NcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlcGxhY2VDbGFzcyhlbGVtZW50LCBvbGROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZShvbGROYW1lLCBuZXdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBhcHBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgcHJlcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJlcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUucHJlcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldE5vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluc2VydEFmdGVyKHRoaXNOb2RlLCB0YXJnZXROb2RlKSB7XHJcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuYWZ0ZXIobmV3RWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZnRlcih0aGlzTm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgICAgIHRoaXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXNOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIisgXCIgKyBzZWxlY3RvcikgOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHN1YnNlcXVlbnQgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ+ICpcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdWJzZXF1ZW50IHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHByZWNlZWRpbmcgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIHdoaWNoIGluZGV4IGluIGNoaWxkcmVuIGEgY2VydGFpbiBub2RlIGlzLiBTaW1pbGFyIHRvIGpRdWVyeSdzIGAkLmluZGV4KClgXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIG5vZGUgdG8gZmluZCBpdHMgaW5kZXggaW4gcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5kZXhJblBhcmVudChub2RlKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICBsZXQgbnVtID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgPT0gMSkgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXHJcbiAgICBzdGF0aWMgaW5kZXgobm9kZSkge3JldHVybiB0aGlzLmluZGV4SW5QYXJlbnQobm9kZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgbnVsbC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHBhcmVudFxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBzaWJsaW5nIGVsZW1lbnQgb3IgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiAhc2VsZWN0b3IgfHwgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGQoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgYW5jZXN0b3JzIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBwYXJlbnRzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xyXG4gICAgICAgIGVsc2Ugd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgYW5jZXN0b3JzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCIqXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHNpYmxpbmdzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNpYmxpbmdzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCIqXCIpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyBjc3Mgc3R5bGVzIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgc3R5bGUgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlIC0gQXR0cmlidXRlIHRvIGdldCBvciBzZXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWwuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVthdHRyaWJ1dGVdO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbYXR0cmlidXRlXSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSB3aWR0aCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHdpZHRoIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBXaWR0aCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3aWR0aChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIGhlaWdodCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGVpZ2h0LiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIEhlaWdodCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoZWlnaHQoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQgaWYgZ2l2ZW4gYSB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIENvbnRlbnQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVpdGhlciB0aGUgc3RyaW5nIHNldCBieSB0aGlzIGNhbGwgb3IgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBub2RlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdGV4dChlbGVtZW50LCB0ZXh0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0ZXh0KSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgcGFnZS5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG9mZnNldCBvZlxyXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZnNldChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIG9uY2UuXHJcbiAgICAgKiBgY29uc3QgY2FuY2VsID0gRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJmaXJlZCFcIik7IGNhbmNlbCgpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb24oZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kIG1hdGNoZXMge0BsaW5rIG1vZHVsZTpET01Ub29scy5vbn0gYnV0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyBpdHNlbGZcclxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uY2UoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBsZXQgbWF0Y2hGaWx0ZXIgPSBsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PSB0eXBlLCBkZWZhdWx0RmlsdGVyID0gXyA9PiBfO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBtYXRjaEZpbHRlciA9IGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50LCBkZWZhdWx0RmlsdGVyID0gbCA9PiBsLmVsZW1lbnQgPT0gZWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB0eXBlID8gbGlzdGVuZXJzLmZpbHRlcihtYXRjaEZpbHRlcikgOiBsaXN0ZW5lcnMuZmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbGlzdC5sZW5ndGg7IGMrKykgbGlzdFtjXS5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZWQgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGNsaWNrIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcImNsaWNrLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBlbGVtZW50IC0gRWxlbWVudCB0byByZW1vdmUgbGlzdGVuZXIgZnJvbVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudF0gLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIG9yaWdpbmFsIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmYoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZWxlbWVudCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHRoaXMuX19vZmZBbGwoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkgcmV0dXJuIHRoaXMuX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgbm9kZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGJvZHkuXHJcbiAgICAgKiBUaGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHVwb24gZmlyaW5nLlxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uTW91bnQgLSBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBmaXJlIG9uIE1vdW50IG9yIG9uIFVubW91bnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIG9uTW91bnQgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG9uTW91bnQgPyBtdXRhdGlvbi5hZGRlZE5vZGVzIDogbXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xyXG4gICAgc3RhdGljIG9uVW5tb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cclxuICAgIHN0YXRpYyBvbkFkZGVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnQobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb21iaW5lcyBtdWx0aXBsZSBlbGVtZW50cyBpbnRvIG9uZSBwYXJlbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheTxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gYXJyYXkgb2YgZWxlbWVudHMgdG8gcHV0IGludG8gYSBzaW5nbGUgcGFyZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3cmFwKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZG9tV3JhcHBlciA9IHRoaXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiZG9tLXdyYXBwZXJcIj48L2Rpdj5gKTtcclxuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcclxuICAgICAgICByZXR1cm4gZG9tV3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc29sdmVzIHRoZSBub2RlIHRvIGFuIEhUTUxFbGVtZW50LiBUaGlzIGlzIG1haW5seSB1c2VkIGJ5IGxpYnJhcnkgbW9kdWxlcy5cclxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVzb2x2ZUVsZW1lbnQobm9kZSkge1xyXG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5ET00gPSBET01Ub29scyIsImltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgRW1vamlSZWdleDogLzxhP1xcLihcXHcrKVxcLihcXGQrKT4vZ1xyXG59XHJcblxyXG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cclxubGV0IEVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG5sZXQgQXV0b2NvbXBsZXRlTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpWzBdXHJcbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdXHJcbmxldCBFbW9qaU1vZHVsZVF1ZXJ5ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpWzBdXHJcbmxldCBNZXNzYWdlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylbMF1cclxubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdXHJcbmxldCBlbW9qaVNlYXJjaCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmluaXQoKS5jYXRjaChlcnIgPT4gVXRpbHMuZXJyKFwiRW1vamlNb2R1bGVcIiwgXCJBbiBlcnJvciBvY2N1cmVkXCIsIGVycikpIC8vIGJldHRlciBsb2dnaW5nXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIC8qKiBFbW9qaSBBdXRvQ29tcGxldGUgKi9cclxuICAgICAgICBpZighQXV0b2NvbXBsZXRlTW9kdWxlKUF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilcclxuICAgICAgICBpZighQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylcclxuICAgICAgICBpZighRW1vamlNb2R1bGVRdWVyeSlFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVxyXG4gICAgICAgIGlmKCFNZXNzYWdlcylNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpXHJcbiAgICAgICAgaWYoIWd1aWxkTW9kdWxlKWd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVxyXG4gICAgICAgIGlmKCFlbW9qaVNlYXJjaCllbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuICAgICAgICBpZihBdXRvY29tcGxldGVNb2R1bGUgJiYgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgJiYgRW1vamlNb2R1bGVRdWVyeSAmJiBNZXNzYWdlcyAmJiBndWlsZE1vZHVsZSAmJiBlbW9qaVNlYXJjaCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQYXRjaGluZyBnZXRBdXRvY29tcGxldGVPcHRpb25zIG9mIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzYCwgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIGNvbnN0IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zXHJcbiAgICAgICAgICAgIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBmdW5jdGlvbihlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIHZhbHVlLkxJR0hUQ09SRF9FTU9KSVMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyhhcmcxLCBhcmcyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFyZzIubGVuZ3RoID4gMSAmJiBcIi5cIiA9PT0gYXJnMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFbW9qaVVzYWJsZShjb25kaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0cyh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBFbW9qaU1vZHVsZVF1ZXJ5LmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHModCwgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclJlc3VsdHMoZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEKGUsIHQsIGEuZW1vamlzLCBuLCByLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJLCBBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5FbW9qaSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBlLmlkIHx8IGUudW5pcXVlTmFtZSB8fCBlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGluZWw6IFwiLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWxkOiBudWxsICE9IGUuZ3VpbGRJZCA/IGd1aWxkTW9kdWxlLmRlZmF1bHQuZ2V0R3VpbGQoZS5ndWlsZElkKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIuXCIgKyBlICsgXCIuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRQbGFpblRleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmF3VGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBzdGFydCBhdXRvY29tcGxldGlvbiBvZiBMaWdodGNvcmQncyBlbW9qaXMuXCIpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIEVtb2ppIGRpc3BsYXkgKi9cclxuICAgICAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vamlSZW5kZXIpeyAvLyBUT0RPOiBQcm9wZXIgZW1vamkgZm9ybWF0dGluZyAvIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIW1lc3NhZ2UpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgIGlmKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e1xyXG4gICAgICAgICAgICAgICAgICogIHJhdzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIG5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBpZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGFuaW1hdGVkOiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICAgKiB9W119XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBlbW9qaXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gW11cclxuICAgICAgICAgICAgICAgIGZvcihsZXQgbm9kZSBvZiBjb250ZW50KXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2VcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IENvbnN0YW50cy5FbW9qaVJlZ2V4LmV4ZWMobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BhcnNlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFFbW9qaU1vZHVsZUFwaSlFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gRW1vamlNb2R1bGVBcGkuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQocGFyc2VkWzJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1vamkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbW9qaS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc1BhcnNlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdChcIiBcIikubWFwKCh3b3JkLCBpbmRleCwgYXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZClyZXR1cm4gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZW1vamkpcmV0dXJuIHdvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFDdXN0b21FbW9qaU1vZHVsZSlDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tRW1vamlNb2R1bGUuQ3VzdG9tRW1vamksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJldmlvdXMubGVuZ3RoID09PSAwKXJldHVybiBbY3VycmVudF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSArPSBgICR7Y3VycmVudH1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiK2N1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiLCBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnNoaWZ0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKG5ld0NvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5wdXNoKG5ld0NvbnRlbnQuc2hpZnQoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0vKlxyXG4gICAgICAgIGxldCB1c2VyTW9kdWxlXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiKVxyXG4gICAgICAgIC50aGVuKEVtb2ppUGlja2VyTGlzdFJvdyA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc3MgPSBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdFxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdCA9IGNsYXNzIEVtb2ppUGlja2VyTGlzdFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbilyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW9qaURlc2NyaXB0b3JzOiB0aGlzLnByb3BzLmVtb2ppRGVzY3JpcHRvcnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pc0Rpc2FibGVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KSkgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0LmRpc3BsYXlOYW1lID0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIlxyXG4gICAgICAgIH0pKi9cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEQoZSwgdCwgbiwgciwgbywgaSwgcywgdSwgbCwgYykge1xyXG4gICAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICB2YXIgZCA9IG4ubWFwKChmdW5jdGlvbihlLCBuKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodSwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIG9uQ2xpY2s6IG8sXHJcbiAgICAgICAgICAgIG9uSG92ZXI6IHIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0ID09PSBuLFxyXG4gICAgICAgICAgICBpbmRleDogblxyXG4gICAgICAgIH0sIGwoZSwgbikpKVxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIFtSKGksIHMsIGUsIGMpLCBkXVxyXG59XHJcblxyXG5mdW5jdGlvbiBSKGUsIHQsIG4sIHIpIHtcclxuICAgIHZhciBhID0gKG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcclxuICAgICAgICBwcmVmaXg6IHIobilcclxuICAgIH0pIDogdClcclxuICAgIGlmKEFycmF5LmlzQXJyYXkoYSkpe1xyXG4gICAgICAgIGEudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIHt9LCBcIltMaWdodGNvcmRdIFwiKSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGEgPSBcIltMSUdIVENPUkRdIFwiK2FcclxuICAgIH1cclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LlRpdGxlLCB7XHJcbiAgICAgICAgdGl0bGU6IGFcclxuICAgIH0sIGEpXHJcbn1cclxuUi5kaXNwbGF5TmFtZSA9IFwicmVuZGVySGVhZGVyXCI7XHJcblxyXG5sZXQgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbmxldCBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZSAmJiBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5sZXQgaXNVc2FibGUgPSBmYWxzZVxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcblxyXG5mdW5jdGlvbiBzZXRFbW9qaVVzYWJsZSh1c2FibGUpe1xyXG4gICAgaXNVc2FibGUgPSB1c2FibGVcclxuICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpcmV0dXJuXHJcbiAgICBpZighaXNFbW9qaURpc2FibGVkKWlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcblxyXG4gICAgaGFzUGF0Y2hlZCA9IHRydWVcclxuICAgIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkID0gZnVuY3Rpb24oZW1vamkpe1xyXG4gICAgICAgIGlmKGlzVXNhYmxlKXtcclxuICAgICAgICAgICAgaWYoZW1vamkuc3Vycm9nYXRlcyB8fCBlbW9qaS5kaXZlcnNpdHkpcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0Vtb2ppRGlzYWJsZWQuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgbm9kZUZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcclxuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiXHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5pbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXHJcbmltcG9ydCB7IGFkZG9uQ2FjaGUgfSBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXHJcblxyXG5jb25zdCBjYWNoZSA9IHt9XHJcbmNvbnN0IGNhY2hlMiA9IHt9XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luQ2VydGlmaWVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbkNlcnRpZmllciA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaChhdHRhY2htZW50LCBpZCl7XHJcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaXNUcnVzdGVkKGhhc2gpe1xyXG4gICAgICAgIHJldHVybiBjYWNoZVtoYXNoXSAmJiAhY2FjaGVbaGFzaF0uc3VzcGVjdFxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpe1xyXG4gICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICBsZXQgaXNIYXJtZnVsID0gZmFsc2VcclxuICAgIGZvcihsZXQga2V5d29yZCBvZiBkYXRhLnNwbGl0KC9bXlxcd1xcZF0rL2cpKXtcclxuICAgICAgICBmb3IobGV0IG9vZiBvZiBbXHJcbiAgICAgICAgICAgIFwidG9rZW5cIixcclxuICAgICAgICAgICAgXCJlbWFpbFwiLFxyXG4gICAgICAgICAgICBcInBob25lXCIsXHJcbiAgICAgICAgICAgIFwiTUZBXCIsXHJcbiAgICAgICAgICAgIFwiMmZhXCIsXHJcbiAgICAgICAgICAgIFwiY2hpbGRfcHJvY2Vzc1wiLFxyXG4gICAgICAgICAgICBcImxvY2FsU3RvcmFnZVwiLFxyXG4gICAgICAgICAgICBcImV2YWxcIixcclxuICAgICAgICAgICAgXCJnZXRHbG9iYWxcIixcclxuICAgICAgICAgICAgXCJCcm93c2VyV2luZG93XCJcclxuICAgICAgICBdKXtcclxuICAgICAgICAgICAgaWYoa2V5d29yZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG9vZi50b0xvd2VyQ2FzZSgpKSAmJiAha2V5d29yZC50b0xvd2VyQ2FzZSgpID09PSBcImRvbXRva2VubGlzdFwiKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG9vZiwga2V5d29yZClcclxuICAgICAgICAgICAgICAgIGlzSGFybWZ1bCA9IFwidG9rZW4gc3RlYWxlci92aXJ1c1wiXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IG5vX2NvbW1lbnRzID0gZGF0YS5yZXBsYWNlKC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfChbXlxcXFw6XXxeKVxcL1xcLy4qJC9nbSwgXCJcIikudHJpbSgpLy8gcmVtb3ZpbmcgdGhlIE1FVEEgY29tbWVudCBmcm9tIHBsdWdpbnNcclxuICAgICAgICBpZigoL3ZhciBbXFx3XFxkXyRdKz1cXFtcIi9naSkudGVzdChub19jb21tZW50cykpe1xyXG4gICAgICAgICAgICBpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFpc0hhcm1mdWwpe1xyXG4gICAgICAgICAgICBjb25zdCByZWdleHBzID0gW1xyXG4gICAgICAgICAgICAgICAgLyoqIGhleGFkZWNpbWFsICovXHJcbiAgICAgICAgICAgICAgICAvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLFxyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBfMHg4ZGI3KCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgICAgICAvKiogbWFuZ2xlZCAqL1xyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csIC8vIGIoJzB4MCcpXHJcbiAgICAgICAgICAgICAgICAvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBiKCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgZm9yKGxldCByZWdleCBvZiByZWdleHBzKXtcclxuICAgICAgICAgICAgICAgIGlmKGlzSGFybWZ1bClicmVha1xyXG4gICAgICAgICAgICAgICAgaWYocmVnZXgudGVzdChub19jb21tZW50cykpaXNIYXJtZnVsID0gXCJvYmZ1c2NhdGlvbi9oaWRkZW4gY29kZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWlzSGFybWZ1bClyZXR1cm4gcmVtb3ZlQ2FsbGJhY2soaGFzaClcclxuICAgIGNhY2hlW2hhc2hdID0ge1xyXG4gICAgICAgIHN1c3BlY3Q6IHRydWUsXHJcbiAgICAgICAgbmFtZTogaGFzaFRvVXJsW2hhc2hdLnNwbGl0KFwiL1wiKS5wb3AoKSxcclxuICAgICAgICB0eXBlOiBoYXNoVG9VcmxbaGFzaF0uZW5kc1dpdGgoXCIuanNcIikgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwiLFxyXG4gICAgICAgIGhhcm06IGlzSGFybWZ1bCxcclxuICAgICAgICBoYXNoOiBoYXNoLFxyXG4gICAgICAgIGZpbGVuYW1lXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnNvbGUubG9nKGBGb3VuZCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgJHtjYWNoZVtoYXNoXS50eXBlLnRvTG93ZXJDYXNlKCl9OiAke2NhY2hlW2hhc2hdLm5hbWV9YClcclxuXHJcbiAgICByZXN1bHRDYWxsYmFjayhjYWNoZVtoYXNoXSlcclxufVxyXG5cclxuY29uc3QgaGFzaFRvVXJsID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hhc2goaGFzaCwgZGF0YSwgZmlsZW5hbWUsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayl7XHJcbiAgICBjb25zb2xlLmxvZyhgRmlsZTogJHtmaWxlbmFtZX0gaGFzaDogJHtoYXNofWApXHJcbiAgICBpZighY2FjaGVbaGFzaF0pe1xyXG4gICAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiK2hhc2gsIHsgLy8gVXNpbmcgbm9kZS1mZXRjaCB0byBieXBhc3MgY29yc1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnVzZXJBZ2VudCAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICAgICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgcmVzdWx0Lmhhc2ggPSBoYXNoXHJcbiAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSA9IGZpbGVuYW1lXHJcblxyXG4gICAgICAgICAgICBjYWNoZVtoYXNoXSA9IHJlc3VsdFxyXG5cclxuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxyXG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBjYWNoZVtoYXNoXVxyXG5cclxuICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZShfX3BhdGgsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayA9IChoYXNoKSA9PiB7fSwgaXNGcm9tTG9hZGVyID0gZmFsc2UpeyAgICBcclxuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKVxyXG4gICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuXHJcbiAgICBjcmVhdGVSZWFkU3RyZWFtKF9fcGF0aCkub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgfSkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxyXG5cclxuICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBfX3BhdGhcclxuXHJcbiAgICAgICAgaWYoaXNGcm9tTG9hZGVyICYmIGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF0pe1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgIGlmKHZhbHVlLnRpbWVzdGFtcCA8IChEYXRlLm5vdygpIC0gNi4wNDhlKzgpKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgICAgICBjb250ZW50TWFuYWdlci5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2sodmFsdWUucmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBiYXNlbmFtZShfX3BhdGgpLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spXHJcbiAgICB9KVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpe1xyXG4gICAgaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSlyZXR1cm5cclxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuICAgIGlmKCFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSAmJiAhYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxyXG5cclxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnRcclxuICAgICAgICB9XHJcbiAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcclxuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXHJcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgICAgIGNhY2hlMlthdHRhY2htZW50LnVybF0gPSBoYXNoUmVzdWx0XHJcbiAgICAgICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IGF0dGFjaG1lbnQudXJsXHJcblxyXG4gICAgICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYXR0YWNobWVudC5maWxlbmFtZSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBhdHRhY2htZW50LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgaWYoZWxlbSllbGVtLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pLmNhdGNoKCgpPT57fSlcclxufVxyXG5cclxubGV0IGZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cclxuXHJcbi8qKlxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudFtdfSBlbGVtZW50cyBcclxuICogQHBhcmFtIHt7dHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgb2ZmaWNpYWw/OiBib29sZWFufXx7c3VzcGVjdDp0cnVlLCB0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBoYXJtOiBzdHJpbmd9fSByZXN1bHRcclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgZmlsZW5hbWUpe1xyXG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXHJcbiAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuIC8vIGFscmVhZHkgY2VydGlmaWVkL2RpdiBkb2VzIG5vdCBleGlzdCBhbnltb3JlLlxyXG5cclxuICAgIGlmKCFmbG93ZXJTdGFyTW9kdWxlKWZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG4gICAgaWYoIWNoaWxkTW9kdWxlKWNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcbiAgICBcclxuICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFxyXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGQudGFnTmFtZSA9PT0gXCJBXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIEFueXdheVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlY3Ryb24ucmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChjaGlsZC5ocmVmKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUoY2hpbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5leHROb2RlKGRpdi5wYXJlbnROb2RlKVxyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdmcpWzBdLnN2ZywgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCA0MCAzMlwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTMyKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1zdGF0dXMtZG5kKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6QkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLCBkaXYpXHJcbiAgICB9ZWxzZSBpZighcmVzdWx0Lm9mZmljaWFsKXtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgY2VydGlmaWVkIGJ5IExpZ2h0Y29yZC5cIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiM0ZjU0NWNcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiI2ZmZmZmZlwiLGQ6XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YWxsIGFuZCBsYXVuY2ggdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkby5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIGFuZCBJbnN0YWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkkndmUgY2hhbmdlZCBteSBtaW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGluc3RhbGxQYXRoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIiwgc3R5bGU6XCJicmFuZFwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCIsc3Ryb2tlOlwiIzM2MzkzZlwiLHN0eWxlOntjb2xvcjpcIiM0MDg3ZWRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiY3VycmVudENvbG9yXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTEwLjcsNS4yOGEyLjksMi45LDAsMCwwLTIuMTEuODYuMTEuMTEsMCwwLDAsMCwuMTZsMS4wNS45NGEuMTEuMTEsMCwwLDAsLjE1LDAsMS4yNywxLjI3LDAsMCwxLC45LS4zM2MuNjUsMCwuNjUuNzMuNjUuNzNhLjY0LjY0LDAsMCwxLS42NS42NSwxLjczLDEuNzMsMCwwLDEtMS4xOC0uNTRjLS4zMS0uMjYtLjM2LS4zMi0uNzMtLjY2UzcuMDYsNS4yOCw1LjY1LDUuMjhBMi4yNiwyLjI2LDAsMCwwLDMuMzcsNy41NiwyLjU5LDIuNTksMCwwLDAsMy44Miw5YTIuMTgsMi4xOCwwLDAsMCwxLjgzLjg5LDIuOTQsMi45NCwwLDAsMCwyLjEtLjgxLjExLjExLDAsMCwwLDAtLjE2TDYuNzQsOEEuMTEuMTEsMCwwLDAsNi42LDhhMS41OCwxLjU4LDAsMCwxLS45NC4yOWgwQS43MS43MSwwLDAsMSw1LDcuNTZINWEuNjMuNjMsMCwwLDEsLjY1LS42NGMuNzEsMCwxLjQyLjc1LDEuOTQsMS4yNy43NS43NiwxLjY2LDEuNzksMy4xMSwxLjc0QTIuMjgsMi4yOCwwLDAsMCwxMyw3LjY0YTIuNTksMi41OSwwLDAsMC0uNDUtMS40N0EyLjE0LDIuMTQsMCwwLDAsMTAuNyw1LjI4WlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBkb3dubG9hZCBhbmQgbG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBtdXN0IGVuYWJsZSBpdCBpbiB0aGUgc2V0dGluZ3MuXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnN0YWxsUGF0aCA9IGpvaW4ocmVzdWx0LnR5cGUgPT09IFwiUGx1Z2luXCIgPyBjb250ZW50TWFuYWdlci5fcGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLl90aGVtZXNGb2xkZXIsIHJlc3VsdC5maWxlbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChyZXN1bHQudHlwZStcIiBzdWNjZXNmdWxseSBpbnN0YWxsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoZXJyLm1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEtleWVkQXJyYXkob2JqKXtcclxuICAgIGxldCBhcnIgPSBbXVxyXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICAgIGFyci5wdXNoKFtrLCBvYmpba11dKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBhcnJcclxufVxyXG5cclxubGV0IGtleSA9IG51bGxcclxubGV0IHNhdmUgPSBudWxsXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChtPT5tLk9iamVjdFN0b3JhZ2UpXHJcbi50aGVuKGxvY2FsU3RvcmFnZU1vZHVsZSA9PiB7XHJcbiAgICBsZXQgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlTW9kdWxlLmltcGxcclxuICAgIHNhdmUgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIiwgYnRvYShKU09OLnN0cmluZ2lmeShrZXkpKSlcclxuICAgIH1cclxuICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBzYXZlKClcclxuICAgIH0sIDEwMDAwMCk7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IHZhbCA9IHNhZmVKU09OUGFyc2UoYXRvYihsb2NhbFN0b3JhZ2UuZ2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIpKSlcclxuICAgICAgICBpZih2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCAhQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggIT09IDIgfHwgdmFsLmZpbmQoZSA9PiB0eXBlb2YgZSAhPT0gXCJzdHJpbmdcIikgfHwgQnVmZmVyLmZyb20odmFsWzBdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDE2IHx8IEJ1ZmZlci5mcm9tKHZhbFsxXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAzMil7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlS2V5KClcclxuICAgICAgICAgICAgc2F2ZSgpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBrZXkgPSB2YWxcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9XHJcbn0pXHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleSgpe1xyXG4gICAga2V5ID0gW2NyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJiYXNlNjRcIiksIGNyeXB0by5yYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJiYXNlNjRcIildXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNhZmVKU09OUGFyc2UoanNvbil7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yID8gbmV3IEVycm9yKGUpIDogZVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoXCJhZXMtMjU2LWNiY1wiLCBCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpKVxyXG4gICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIikpO1xyXG4gICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWQudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIFwie31cIlxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0U2V0dGluZ3NDYWNoZShkYXRhKXtcclxuICAgIGxldCBhcmdzID0gW0J1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIildXHJcbiAgICBcclxuICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywgLi4uYXJncyk7XHJcbiAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhLCBcInV0ZjhcIikpO1xyXG4gICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZyhcImJhc2U2NFwiKVxyXG59IiwiaW1wb3J0IHtiZHBsdWdpbkVycm9ycywgcGx1Z2luQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5zfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbmNsYXNzIFBsdWdpbk1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbk1vZHVsZSA9IHRoaXNcbiAgICB9XG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlcjt9XG59XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5sb2FkUGx1Z2luRGF0YSgpO1xuICAgIGJkcGx1Z2luRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFBsdWdpbnMoKSkpO1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcGx1Z2luLCBuYW1lO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5nZXROYW1lKCk7XG4gICAgICAgICAgICBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgbG9hZGVkLlwiLCBlcnIpO1xuICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcImxvYWQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW25hbWVdKSBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGx1Z2luQ29va2llW25hbWVdKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBsdWdpbi5zdGFydCgpO1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XG4gICAgICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcInN0YXJ0KCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKVxuICAgIH1cbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG5cbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLm9uKFwiZGlkLW5hdmlnYXRlLWluLXBhZ2VcIiwgdGhpcy5jaGFubmVsU3dpdGNoLmJpbmQodGhpcykpO1xuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdGFydFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RhcnQoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdGFydGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIHBsdWdpbiArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc3RvcFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RvcCgpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdG9wcGVkLmApO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0b3BwZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCkgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnRvZ2dsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4pO1xuICAgIGVsc2UgdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy50b2dnbGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGNvbnN0IHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gKGNvbnNvbGUubG9nKHAuZmlsZW5hbWUsIGZpbGVuYW1lKSkgfHwgcC5maWxlbmFtZSA9PSBmaWxlbmFtZSkucGx1Z2luO1xuICAgIHRyeSB7IGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTt9XG4gICAgY2F0Y2ggKGVycikge2lmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJdfSk7fVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi1sb2FkZWRcIiwgcGx1Z2luLmdldE5hbWUoKSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVubG9hZFBsdWdpbiA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luLnBsdWdpbi5nZXROYW1lKCk7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGRlbGV0ZSBiZHBsdWdpbnNbcGx1Z2luXTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XG4gICAgfVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXVubG9hZGVkXCIsIHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIHRoaXMudW5sb2FkUGx1Z2luKGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm4gdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lT3JOYW1lKTtcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xuICAgIGNvbnN0IGVuYWJsZWQgPSBwbHVnaW5Db29raWVbcGx1Z2luXTtcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGlmIChiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCAmJiB0eXBlb2YoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQoKTtcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXJlbG9hZGVkXCIsIHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZpbGVuYW1lT3JOYW1lKTtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmdWxsUGF0aCk7XG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKGAke2Z1bGxQYXRofWApO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51cGRhdGVQbHVnaW5MaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwicGx1Z2luXCIpO1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFBsdWdpbihuYW1lKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbkRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiKTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwbHVnaW5Db29raWUsIHNhdmVkKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnNhdmVQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIsIHBsdWdpbkNvb2tpZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLm5ld01lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25NZXNzYWdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vbk1lc3NhZ2UoKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25NZXNzYWdlIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5jaGFubmVsU3dpdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uU3dpdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvblN3aXRjaCBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmF3T2JzZXJ2ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9ic2VydmVyKGUpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvYnNlcnZlciBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQbHVnaW5Nb2R1bGUoKTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgVjJDX1B1YmxpY1NlcnZlcnMgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgTGF5ZXIgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvbGF5ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9QdWJsaWNTZXJ2ZXJzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24gPSB0aGlzLl9hcHBlbmRCdXR0b24uYmluZCh0aGlzKTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjJfUHVibGljU2VydmVycyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5ZXIsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwiLCBpZDogXCJwdWJzbGF5ZXJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHVibGljU2VydmVycywge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCJ9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInB1YnNsYXllcnJvb3RcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXJzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJzICYmIGUubGF5ZXIpWzBdLmxheWVycy5zcGxpdChcIiBcIilbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gRE9NLnF1ZXJ5KFwiLmxheWVycywgLlwiK2NsYXNzTmFtZUxheWVycyk7XHJcbiAgICAgICAgaWYgKCFsYXllcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsYXllcnMuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KFwiPGRpdiBpZD0ncHVic2xheWVycm9vdCc+XCIpKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllcnNcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b24oKSB7XHJcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7QkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW19XCI+YCk7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBidG4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBCRFYyLmd1aWxkQ2xhc3Nlcy5jaXJjbGVCdXR0b25NYXNrfVwiPnB1YmxpYzwvZGl2PmApO1xyXG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5yZW5kZXIoKTt9KTtcclxuICAgICAgICBidG4uYXBwZW5kKGxhYmVsKTtcclxuICAgICAgICByZXR1cm4gYnRuO1xyXG4gICAgfVxyXG5cclxuICAgIF9hcHBlbmRCdXR0b24oKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kb3dubG9hZFByb2dyZXNzICYmIGUudHV0b3JpYWxDb250YWluZXIpWzBdLnR1dG9yaWFsQ29udGFpbmVyKVxyXG4gICAgICAgIF1cclxuICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgZGl2LiR7Y2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJ9ID4gZGl2YCk7XHJcbiAgICAgICAgRE9NLmFmdGVyKGd1aWxkcywgdGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gd2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0T2xkID0gd2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgVXRpbHMud2FybihcIlB1YmxpY1NlcnZlclwiLCBcIkNhbid0IGZpbmQgR3VpbGRMaXN0IGNvbXBvbmVudFwiKTtcclxuICAgICAgICB0aGlzLmd1aWxkUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHthZnRlcjogdGhpcy5fYXBwZW5kQnV0dG9ufSk7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQnV0dG9uKCkge1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmd1aWxkUGF0Y2g7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKS5yZW1vdmUoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIGZyb20gXCIuL3NldHRpbmdzUGFuZWxTaWRlYmFyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IGNvbG9yZWRUZXh0IGZyb20gXCIuL2NvbG9yZWRUZXh0XCI7XHJcbmltcG9ydCB0ZkhvdXIgZnJvbSBcIi4vMjRob3VyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcclxuaW1wb3J0IHZvaWNlTW9kZSBmcm9tIFwiLi92b2ljZU1vZGVcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9jbGFzc05vcm1hbGl6ZXJcIjtcclxuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcclxuXHJcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBDc3NFZGl0b3IgZnJvbSBcIi4uL3VpL2Nzc0VkaXRvclwiO1xyXG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xyXG5pbXBvcnQgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZnJvbSBcIi4uL3VpL3ByZXNlbmNlU2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi9DdXN0b21SaWNoUHJlc2VuY2VcIjtcclxuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IEFudGlBZERNIGZyb20gXCIuL0FudGlBZERNXCI7XHJcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xyXG5pbXBvcnQgZGlzYWJsZVR5cGluZyBmcm9tIFwiLi9kaXNhYmxlVHlwaW5nXCI7XHJcbmltcG9ydCBBcGlQcmV2aWV3IGZyb20gXCIuLi91aS9BcGlQcmV2aWV3XCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4uL3VpL3N3aXRjaFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuLi91aS9tYXJnaW50b3BcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IEhpc3RvcnkgZnJvbSBcIi4uL3VpL2ljb25zL2hpc3RvcnlcIjtcclxuXHJcbmNsYXNzIEJEU2lkZWJhckhlYWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNpZGViYXJDb21wb25lbnRzID0gd2VicGFja01vZHVsZXMuZmluZChlID0+IGUuU2VwYXJhdG9yICYmIGUuSGVhZGVyICYmIGUuSXRlbSlcclxuXHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gUmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQ2hhbmdlbG9nXCJ9LCBcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZmxvYXQ6IFwicmlnaHRcIiwgY3Vyc29yOiBcInBvaW50ZXJcIn0sIGNsYXNzTmFtZTogXCJiZC1jaGFuZ2Vsb2ctYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTt9fSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSGlzdG9yeSwge2NsYXNzTmFtZTogXCJiZC1pY29uXCIsIHNpemU6IFwiMTZweFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHJlbmRlcmVkID0gbmV3IHNpZGViYXJDb21wb25lbnRzLkhlYWRlcih7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBcIkJhbmRhZ2VkIEJEXCIsIGNoYW5nZWxvZ0J1dHRvbiksXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwiXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gcmVuZGVyZWRcclxuICAgIH1cclxufVxyXG5cclxubGV0IGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzID0gdGhpcy51cGRhdGVTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2lkZWJhciA9IG5ldyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckNvbXBvbmVudHMoKVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyQ29tcG9uZW50cygpe1xyXG4gICAgICAgIC8qKiBMaWdodGNvcmQgKi9cclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsaWdodGNvcmRcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmxpZ2h0Y29yZENvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJzdGF0dXNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLlByZXNlbmNlQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImFjY291bnRpbmZvXCIsIG1ha2VDb21wb25lbnQodGhpcy5BY2NvdW50SW5mb3NDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGNhcGlwcmV2aWV3XCIsIG1ha2VDb21wb25lbnQodGhpcy5BcGlQcmV2aWV3Q29tcG9uZW50LmJpbmQodGhpcykpKVxyXG5cclxuICAgICAgICAvKiBCYW5kYWdlZCBCRCAqL1xyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcIkJEQ2hhbmdlbG9nVGl0bGVcIiwgbWFrZUNvbXBvbmVudCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQkRTaWRlYmFySGVhZGVyKCkucmVuZGVyKClcclxuICAgICAgICB9KSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjb3JlXCIsIG1ha2VDb21wb25lbnQodGhpcy5jb3JlQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImN1c3RvbWNzc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuY3VzdG9tQ3NzQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInBsdWdpbnNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLnJlbmRlckFkZG9uUGFuZShcInBsdWdpbnNcIikpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInRoZW1lc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwidGhlbWVzXCIpKSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyLFxyXG4gICAgICAgICAgICBjbGFzc1NpZGViYXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIuc3BsaXQoXCIgXCIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgICAgIF1cclxuICAgICAgICBjb25zdCBzaWRlYmFyID0gRE9NLnF1ZXJ5KFwiLlwiK2NsYXNzTmFtZUxheWVyK1wiIC5cIitjbGFzc1NpZGViYXIuc3RhbmRhcmRTaWRlYmFyVmlldy5zcGxpdChcIiBcIilbMF0rXCIsIC5cIitjbGFzc05hbWVMYXllcitcIiAudWktc3RhbmRhcmQtc2lkZWJhci12aWV3XCIpO1xyXG4gICAgICAgIGlmICghc2lkZWJhcikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXNldHRpbmdzcGFuZS1jb250YWluZXJcIiBjbGFzcz1cIiR7Y2xhc3NTaWRlYmFyLmNvbnRlbnRSZWdpb259IGNvbnRlbnQtcmVnaW9uXCI+YCk7XHJcbiAgICAgICAgc2lkZWJhci5hcHBlbmQocm9vdCk7XHJcblxyXG4gICAgICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShyb290KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29yZVNldHRpbmdzKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaWdodGNvcmRTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwic3RhdHVzXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IE1zZ0xvZ1NldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwibXNnbG9nXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3MoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7fVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkLCBzaWRlYmFyKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCwgc2lkZWJhcik7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2V0dGluZ3MoaWQsIGVuYWJsZWQsIHNpZGViYXIpIHtcclxuICAgICAgICBpZighW1wibGlnaHRjb3JkLThcIiwgXCJub193aW5kb3dfYm91bmRcIiwgXCJlbmFibGVfZ2xhc3N0cm9uXCJdLmluY2x1ZGVzKGlkKSlzZXR0aW5nc0Nvb2tpZVtpZF0gPSBlbmFibGVkO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtM1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICAgICAgZWxzZSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLnJlbW92ZUJ1dHRvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2Ugdm9pY2VNb2RlLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy01XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZWQgJiYgaWQgPT0gXCJiZGEtZ3MtNlwiKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgY29sb3JlZFRleHQucmVtb3ZlQ29sb3JlZFRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSBDbGFzc05vcm1hbGl6ZXIuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy01XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIudW53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xyXG4gICAgICAgICAgICBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIG51bGwpO1xyXG4gICAgICAgICAgICBlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy04XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLWRtLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgZWxzZSBkTW9kZS5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmlmIChpZCA9PT0gXCJyZWFjdERldlRvb2xzXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHJlYWN0RGV2VG9vbHMuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSByZWFjdERldlRvb2xzLnN0b3AoKTtcclxuICAgICAgICB9Ki9cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgICAgICBlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIHNpZGViYXIuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTJcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlXHJcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5nc1N0b3JlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiB0eXBlb2YgZS5kZWZhdWx0ID09PSBcIm9iamVjdFwiICYmIFwic2hvd0N1cnJlbnRHYW1lXCIgaW4gZS5kZWZhdWx0KVswXVxyXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NTdG9yZSAmJiAhc2V0dGluZ3NTdG9yZS5kZWZhdWx0LnNob3dDdXJyZW50R2FtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQudXBkYXRlUmVtb3RlU2V0dGluZ3MpWzBdLmRlZmF1bHQudXBkYXRlUmVtb3RlU2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q3VycmVudEdhbWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgQ3VzdG9tUmljaFByZXNlbmNlLmRpc2FibGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcCh0cnVlKVxyXG4gICAgICAgICAgICBlbHNlIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AoZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTZcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgYmx1clByaXZhdGUuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC03XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHlwaW5nLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLThcIil7XHJcbiAgICAgICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHJlbW90ZS5nZXRHbG9iYWwoXCJhcHBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXQoXCJpc1RhYnNcIiwgZW5hYmxlZClcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLmV4aXQoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpe1xyXG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiTk9fV0lORE9XU19CT1VORFwiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIpe1xyXG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiR0xBU1NUUk9OXCIsIGVuYWJsZWQpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5leGl0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdGlhbGl6ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIC8vaWYgKHNldHRpbmdzQ29va2llLnJlYWN0RGV2VG9vbHMpIHJlYWN0RGV2VG9vbHMuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMlwiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtM1wiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy00XCJdKSB2b2ljZU1vZGUuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNVwiXSkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTRcIl0pIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTJcIl0pIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCJdKSBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtM1wiXSkgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcCh0cnVlKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC00XCJdKSBBbnRpQWRETS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC03XCJdKSBkaXNhYmxlVHlwaW5nLmVuYWJsZSgpXHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkge1xyXG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLThcIl0pIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIsIHNldHRpbmdzQ29va2llKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJTaWRlYmFyKHNpZGViYXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyLnJlbmRlcihzaWRlYmFyKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3JlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCwge2tleTogXCJjc3BhbmVsXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBzZWN0aW9uczogdGhpcy5jb3JlU2V0dGluZ3N9KVxyXG4gICAgfVxyXG5cclxuICAgIGxpZ2h0Y29yZENvbXBvbmVudChzaWRlYmFyLCBmb3JjZVVwZGF0ZSkge1xyXG4gICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHJlbW90ZS5nZXRHbG9iYWwoXCJhcHBTZXR0aW5nc1wiKVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRoaXMubGlnaHRjb3JkU2V0dGluZ3MubWFwKChzZWN0aW9uLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIChpID09PSAwID8gbnVsbCA6IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChNYXJnaW5Ub3ApKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHNlY3Rpb24udGl0bGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNDaGVja2VkID0gc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJsaWdodGNvcmQtOFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcImlzVGFic1wiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiTk9fV0lORE9XU19CT1VORFwiLCBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiR0xBU1NUUk9OXCIsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtpZDogc2V0dGluZy5pZCwga2V5OiBzZXR0aW5nLmlkLCBkYXRhOiBzZXR0aW5nLCBjaGVja2VkOiBpc0NoZWNrZWQsIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PSBcImxpZ2h0Y29yZC04XCIgJiYgaXNDaGVja2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rOiBcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJicmFuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmlwYy5zZW5kKFwiTkVXX1RBQlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJPcGVuIGEgbmV3IFRhYlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXHJcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxyXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlNob3VsZCByZWxhdW5jaFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiByZW1vdGUucHJvY2Vzcy5hcmd2LnNsaWNlKDEpLmNvbmNhdChbXCItLWRpc2FibGUtYmV0dGVyZGlzY29yZFwiXSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5hcHAucXVpdCgpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZVxyXG4gICAgICAgICAgICB9LCBcIlJlbGF1bmNoIHdpdGhvdXQgQmV0dGVyRGlzY29yZFwiKSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXHJcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxyXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihpc0NsZWFyaW5nQ2FjaGUpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNsZWFyaW5nIGNhY2hlLi4uXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmZvXCJcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkuc2Vzc2lvbi5jbGVhckNhY2hlKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNhY2hlIGlzIGNsZWFyZWQgIVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQuIENoZWNrIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0NsZWFyaW5nQ2FjaGVcclxuICAgICAgICAgICAgfSwgXCJDbGVhciBjYWNoZVwiKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBQcmVzZW5jZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XHJcbiAgICAgICAgICAgIGtleTogXCJscHBhbm5lbFwiLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiB0aGlzLlByZXNlbmNlU2V0dGluZ3NcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIEFjY291bnRJbmZvc0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19BY2NvdW50SW5mb3MsIHtcclxuICAgICAgICAgICAga2V5OiBcImxhcGFubmVsXCJcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIEFwaVByZXZpZXdDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBcGlQcmV2aWV3LCB7XHJcbiAgICAgICAgICAgIGtleTogXCJsYXBpcGFubmVsXCJcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGN1c3RvbUNzc0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge2tleTogXCJjc3NlZGl0b3JcIn0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcclxuICAgICAgICAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXHJcbiAgICAgICAgLy8gUmVhY3QgcmVmdXNlcyB0byBjaGFuZ2UgdGhlIGJ1dHRvbiB3aGVuIGdvaW5nXHJcbiAgICAgICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcclxuICAgICAgICAvLyB0byBkZWJ1ZyBsYXRlci5cclxuICAgICAgICBjbGFzcyBDb250ZW50TGlzdCBleHRlbmRzIEJEVjIucmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZml4ID0gdGhpcy5wcm9wcy50eXBlLnJlcGxhY2UoXCJzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlcigpIHtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ29udGVudExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGVudExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgICAgICAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudExpc3QsIHt0eXBlfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7dHlwZX0pKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsIG9uIHdpbmRvd1xyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIG1ha2VDb21wb25lbnQoY2hpbGRyZW4pe1xyXG4gICAgY2xhc3MgU2V0dGluZ0NvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihzaWRlYmFyLCAoKSA9PiB0aGlzLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNpZGViYXJcclxuICAgIHJldHVybiAocykgPT4ge1xyXG4gICAgICAgIHNpZGViYXIgPSBzXHJcbiAgICAgICAgcmV0dXJuIFNldHRpbmdDb21wb25lbnRcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMgPSB7fVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKHBhbmVsLCBjb21wb25lbnQpe1xyXG4gICAgICAgIHRoaXMucGFuZWxzW3BhbmVsXSA9IGNvbXBvbmVudFxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbXBvbmVudChwYW5lbCwgc2lkZWJhcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZWxzW3BhbmVsXShzaWRlYmFyKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gW3tcclxuICAgICAgICAgICAgdGV4dDogXCJCZXR0ZXJEaXNjb3JkIFNldHRpbmdzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjb3JlXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiUGx1Z2luc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwicGx1Z2luc1wiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlRoZW1lc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwidGhlbWVzXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiQ3VzdG9tIENTU1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwiY3VzdG9tY3NzXCJcclxuICAgICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTENpdGVtcygpe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJMaWdodGNvcmQgU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImxpZ2h0Y29yZFwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiUmljaFByZXNlbmNlXCIsIFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwic3RhdHVzXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJBY2NvdW50IEluZm9cIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImFjY291bnRpbmZvXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgICByZXR1cm4gaXRlbXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTENEZXZJdGVtcygpe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdXHJcbiAgICAgICAgaWYoIXdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSlyZXR1cm4gaXRlbXNcclxuICAgICAgICBpdGVtcy5wdXNoKC4uLltcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxpZ2h0Y29yZCBBcGlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkNvbXBvbmVudHMgUHJldmlld1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwibGNhcGlwcmV2aWV3XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKHNpZGViYXIpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTGlnaHRjb3JkXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4udGhpcy5MQ2l0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAuLi50aGlzLkxDRGV2SXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoZS5zZWN0aW9uKXJldHVybiBlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KFwiQkRDaGFuZ2Vsb2dUaXRsZVwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi50aGlzLml0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbFNpZGViYXIgb24gd2luZG93XHJcbiAqLyIsImltcG9ydCB7YmR0aGVtZUVycm9ycywgdGhlbWVDb29raWUsIHNldHRpbmdzQ29va2llLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNsYXNzIFRoZW1lTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlRoZW1lTW9kdWxlID0gdGhpc1xyXG4gICAgfVxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyO31cclxufVxyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxvYWRUaGVtZURhdGEoKTtcclxuICAgIGJkdGhlbWVFcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkVGhlbWVzKCkpKTtcclxuICAgIGNvbnN0IHRoZW1lcyA9IE9iamVjdC5rZXlzKGJkdGhlbWVzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbdGhlbWVzW2ldXTtcclxuICAgICAgICBpZiAoIXRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSB0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG5cclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHRoZW1lIGluIHRoZW1lQ29va2llKSB7XHJcbiAgICAgICAgaWYgKCFiZHRoZW1lc1t0aGVtZV0pIGRlbGV0ZSB0aGVtZUNvb2tpZVt0aGVtZV07XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBhcHBsaWVkLmApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gZGlzYWJsZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlVGhlbWUgPSBmdW5jdGlvbih0aGVtZSkge1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUpO1xyXG4gICAgZWxzZSB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC4gSXQgbWF5IG5vdCBoYXZlIGJlZW4gbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZSk7XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtbG9hZGVkXCIsIHRoZW1lLm5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnVubG9hZFRoZW1lID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWUubmFtZTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBkZWxldGUgYmR0aGVtZXNbdGhlbWVdO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXVubG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcclxuICAgIHRoaXMudW5sb2FkVGhlbWUoYmR0aGVtZS5maWxlbmFtZSk7XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCBiZHRoZW1lLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuIHRoaXMubG9hZFRoZW1lKGZpbGVuYW1lT3JOYW1lKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKSwgdGhpcy5lbmFibGVUaGVtZSh0aGVtZSwgdHJ1ZSk7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gdiR7YmR0aGVtZXNbdGhlbWVdLnZlcnNpb259IHdhcyByZWxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1yZWxvYWRlZFwiLCB0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVsb2FkVGhlbWUobmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudXBkYXRlVGhlbWVMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gQ29udGVudE1hbmFnZXIubG9hZE5ld0NvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVEYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIik7XHJcbiAgICBpZiAoc2F2ZWQpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoZW1lQ29va2llLCBzYXZlZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuc2F2ZVRoZW1lRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIiwgdGhlbWVDb29raWUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFRoZW1lTW9kdWxlKCk7IiwiaW1wb3J0IHtiYmRWZXJzaW9uLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzIHtcbiAgICAvKiogRG9jdW1lbnQvd2luZG93IHdpZHRoICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5XaWR0aCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7IH1cbiAgICAvKiogRG9jdW1lbnQvd2luZG93IGhlaWdodCAqL1xuICAgIHN0YXRpYyBnZXQgc2NyZWVuSGVpZ2h0KCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApOyB9XG5cbiAgICBzdGF0aWMgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChrZXkgPT09IFwiZnJhbWVcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3RyaXBCT00oY29udGVudCkge1xuICAgICAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUZXh0QXJlYSgpIHtcbiAgICAgICAgcmV0dXJuIERPTS5xdWVyeShcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGFubmVsVGV4dEFyZWEgJiYgZS50aXRsZVdyYXBwZXIpWzBdLmNoYW5uZWxUZXh0QXJlYS5zcGxpdChcIiBcIilbMF0rXCIgdGV4dGFyZWFcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGluc2VydFRleHQodGV4dGFyZWEsIHRleHQpIHtcbiAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTtcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgPSAwO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25FbmQgPSB0ZXh0YXJlYS52YWx1ZS5sZW5ndGg7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLCBmYWxzZSwgdGV4dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBsb2cobW9kdWxlTmFtZSwgbWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogIzNhNzFjMTsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogIzNhNzFjMTtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHdhcm4obW9kdWxlTmFtZSwgbWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6ICNFOEE0MDA7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6ICNFOEE0MDA7XCIsIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBlcnIobW9kdWxlTmFtZSwgbWVzc2FnZSwgZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogcmVkO1wiLCBcIlwiKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiJWNFcnJvcjogXCIgKyBlcnJvci5tZXNzYWdlLCBcImNvbG9yOiByZWQ7XCIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5zdGFjayk7XG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHRlc3RKU09OKGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBpc0VtcHR5KG9iaikge1xuICAgICAgICBpZiAob2JqID09IG51bGwgfHwgb2JqID09IHVuZGVmaW5lZCB8fCBvYmogPT0gXCJcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuICguLi5wYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiBtZXRob2QoLi4ucGFyYW1zKTtcdH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7IHRoaXMuZXJyKFwiU3VwcHJlc3NlZEVycm9yXCIsIFwiRXJyb3Igb2NjdXJyZWQgaW4gXCIgKyBtZXNzYWdlLCBlKTsgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBtb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHtiZWZvcmUsIGFmdGVyLCBpbnN0ZWFkLCBvbmNlID0gZmFsc2UsIHNpbGVudCA9IGZhbHNlLCBmb3JjZSA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gb3B0aW9ucy5kaXNwbGF5TmFtZSB8fCB3aGF0LmRpc3BsYXlOYW1lIHx8IHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJwYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXSkge1xuICAgICAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IobWV0aG9kTmFtZSwgXCJkb2VzIG5vdCBleGlzdCBmb3JcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcbiAgICAgICAgbGV0IGNhbmNlbGVkID0gZmFsc2VcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwidW5wYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAvL3doYXRbbWV0aG9kTmFtZV0gPSBvcmlnTWV0aG9kO1xuICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlIC8vIHRoaXMgYWxsb3cgdG8gbW9ua2V5cGF0Y2ggbW9yZSB0aGFuIG9uZSB0aW1lLlxuICAgICAgICB9O1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZihjYW5jZWxlZCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdNZXRob2QuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIHRoaXNPYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgbWV0aG9kQXJndW1lbnRzOiBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgY2FuY2VsUGF0Y2g6IGNhbmNlbCxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZDogb3JpZ01ldGhvZCxcbiAgICAgICAgICAgICAgICBjYWxsT3JpZ2luYWxNZXRob2Q6ICgpID0+IGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLm9yaWdpbmFsTWV0aG9kLmFwcGx5KGRhdGEudGhpc09iamVjdCwgZGF0YS5tZXRob2RBcmd1bWVudHMpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGluc3RlYWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wUmV0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoaW5zdGVhZCwgXCJgaW5zdGVhZGAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAodGVtcFJldCAhPT0gdW5kZWZpbmVkKSBkYXRhLnJldHVyblZhbHVlID0gdGVtcFJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRhdGEuY2FsbE9yaWdpbmFsTWV0aG9kKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyKSBVdGlscy5zdXBwcmVzc0Vycm9ycyhhZnRlciwgXCJgYWZ0ZXJgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25jZSkgY2FuY2VsKCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih3aGF0W21ldGhvZE5hbWVdLCBvcmlnTWV0aG9kKTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX21vbmtleVBhdGNoZWQgPSB0cnVlO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge3JldHVybiBvcmlnTWV0aG9kLnRvU3RyaW5nKCk7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsO1xuICAgIH1cblxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11dGF0aW9ucy5sZW5ndGg7IG0rKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW21dO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE5lc3RlZFByb3Aob2JqLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KC9cXHM/XFwuXFxzPy8pLnJlZHVjZShmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqW3Byb3BdO1xuICAgICAgICB9LCBvYmopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2hvd3MgYSB0b2FzdCBzaW1pbGFyIHRvIGFuZHJvaWQgdG93YXJkcyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvYXN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0LiBPcHRpb25hbCBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmljb24gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBpY29uIHNob3VsZCBzaG93IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUuIEEgdG9hc3Qgd2l0aG91dCB0eXBlIHdpbGwgYWx3YXlzIGhhdmUgbm8gaWNvbi4gRGVmYXVsdDogdHJ1ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnRpbWVvdXQgQWRqdXN0cyB0aGUgdGltZSAoaW4gbXMpIHRoZSB0b2FzdCBzaG91bGQgYmUgc2hvd24gZm9yIGJlZm9yZSBkaXNhcHBlYXJpbmcgYXV0b21hdGljYWxseS4gRGVmYXVsdDogMzAwMFxuICAgICAqL1xuICAgIHN0YXRpYyBzaG93VG9hc3QoY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhciAmJiBlLmhhc05vdGljZSlbMF0uc2lkZWJhci5zcGxpdChcIiBcIilbOV0rXCIgKyBkaXZcIikgfHwgbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlcmxpc3QgPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZW1iZXJzV3JhcClbMF0ubWVtYmVyc1dyYXApIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImZvcm1cIikgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMzEwO1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBtZW1iZXJsaXN0ID8gbWVtYmVybGlzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgPyByaWdodCAtIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogVXRpbHMuc2NyZWVuV2lkdGggLSBsZWZ0IC0gMjQwO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gZm9ybSA/IGZvcm0ub2Zmc2V0SGVpZ2h0IDogODA7XG4gICAgICAgICAgICBjb25zdCB0b2FzdFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdHNcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIGxlZnQgKyBcInB4XCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwid2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwiYm90dG9tXCIsIGJvdHRvbSArIFwicHhcIik7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmRDaGlsZCh0b2FzdFdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt0eXBlID0gXCJcIiwgaWNvbiA9IHRydWUsIHRpbWVvdXQgPSAzMDAwfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHRvYXN0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RcIik7XG4gICAgICAgIGlmICh0eXBlKSB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcInRvYXN0LVwiICsgdHlwZSk7XG4gICAgICAgIGlmICh0eXBlICYmIGljb24pIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiaWNvblwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLmFwcGVuZENoaWxkKHRvYXN0RWxlbSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9hc3RFbGVtLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5iZC10b2FzdHMgLmJkLXRvYXN0XCIpLmxlbmd0aCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYWxlcnQodGl0bGUsIGNvbnRlbnQpIHtcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHt0aXRsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIj5Pa2F5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xuICAgICAgICBjb25zdCBjbG9zaW5nTGlzdGVuZXJzID0gW11cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DbG9zZTogKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMgPSBbXSwgdGhlbWVzOiB0aGVtZUVycm9ycyA9IFtdfSkge1xuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycyB8fCAhdGhlbWVFcnJvcnMpIHJldHVybjtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMubGVuZ3RoICYmICF0aGVtZUVycm9ycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsIGJkLWNvbnRlbnQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+PGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGVudCBFcnJvcnM8L2Rpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyIFRPUFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+UGx1Z2luczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+VGhlbWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+TmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj5NZXNzYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj5FcnJvcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICBcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVUYWIoZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yc1wiPmApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+JHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtlcnIubWVzc2FnZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+PGEgY2xhc3M9XCJlcnJvci1saW5rXCIgaHJlZj1cIlwiPiR7ZXJyLmVycm9yID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBcIlwifTwvYT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYEVycm9yIGRldGFpbHMgZm9yICR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfS5gLCBlcnIuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XG4gICAgXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWJhci1pdGVtLnNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSBET00ucmVtb3ZlQ2xhc3Moc2VsZWN0ZWQsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MoZS50YXJnZXQsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuc2Nyb2xsZXJcIik7XG4gICAgICAgICAgICBzY3JvbGxlci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKHRhYnNbRE9NLmluZGV4KGUudGFyZ2V0KV0pO1xuICAgICAgICB9KSk7XG4gICAgXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgaWYgKHBsdWdpbkVycm9ycy5sZW5ndGgpIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWJhci1pdGVtXCIpLmNsaWNrKCk7XG4gICAgICAgIGVsc2UgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIilbMV0uY2xpY2soKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZml4ZWRcIiwgXCJpbXByb3ZlZFwiKTtcbiAgICAgICAgY29uc3QgVGV4dEVsZW1lbnQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRleHRcIik7XG4gICAgICAgIGNvbnN0IEZsZXhDaGlsZCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiQ2hpbGRcIik7XG4gICAgICAgIGNvbnN0IFRpdGxlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiVGFnc1wiLCBcImRlZmF1bHRcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5zZWxlY3RhYmxlID09IGZhbHNlKTtcbiAgICAgICAgY29uc3QgTWFya2Rvd25QYXJzZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImRlZmF1bHRSdWxlc1wiLCBcInBhcnNlXCIpO1xuICAgICAgICBpZiAoIUNoYW5nZWxvZyB8fCAhTW9kYWxTdGFjayB8fCAhQ2hhbmdlbG9nQ2xhc3NlcyB8fCAhVGV4dEVsZW1lbnQgfHwgIUZsZXhDaGlsZCB8fCAhVGl0bGVzIHx8ICFNYXJrZG93blBhcnNlcikgcmV0dXJuO1xuICAgIFxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpbWFnZSA9IFwiaHR0cHM6Ly9yZXBvc2l0b3J5LWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTA1NDczNTM3Lzk1N2I1NDgwLTdjMjYtMTFlOS04NDAxLTUwZmE4MjBjYmFlNVwiLCBcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIiwgXG4gICAgICAgICAgICBjaGFuZ2VzID0gW10sIFxuICAgICAgICAgICAgdGl0bGUgPSBcIkJhbmRhZ2VkQkRcIiwgXG4gICAgICAgICAgICBzdWJ0aXRsZSA9IGB2JHtiYmRWZXJzaW9ufWAsIFxuICAgICAgICAgICAgZm9vdGVyXG4gICAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBjZSA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nSXRlbXMgPSBbY2UoXCJpbWdcIiwge3NyYzogaW1hZ2V9KV07XG4gICAgICAgIGlmIChkZXNjcmlwdGlvbikgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcInBcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoZGVzY3JpcHRpb24pKSk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbmdlcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gPyBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdIDogQ2hhbmdlbG9nQ2xhc3Nlcy5hZGRlZDtcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IGMgPT0gMCA/IENoYW5nZWxvZ0NsYXNzZXMubWFyZ2luVG9wIDogXCJcIjtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7Y2xhc3NOYW1lOiBgJHt0eXBlfSAke21hcmdpbn1gLH0sIGVudHJ5LnRpdGxlKSk7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gY2UoXCJ1bFwiLCBudWxsLCBlbnRyeS5pdGVtcy5tYXAoaSA9PiBjZShcImxpXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGkpKSkpO1xuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChsaXN0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJIZWFkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LFxuICAgICAgICAgICAgICAgIGNlKFRpdGxlcy5kZWZhdWx0LCB7dGFnOiBUaXRsZXMuVGFncy5INH0sIHRpdGxlKSxcbiAgICAgICAgICAgICAgICBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkQsIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5kYXRlfSwgc3VidGl0bGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIFxuICAgICAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IEFuY2hvckNsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIikgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07XG4gICAgICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xuICAgICAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY2xpY2suc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBCRFYyLmpvaW5CRDIoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IEFuY2hvciA/IGNlKEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBjZShcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Rm9vdGVyID0gY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSwgZm9vdGVyID8gZm9vdGVyIDogZGVmYXVsdEZvb3Rlcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIGNlKENoYW5nZWxvZywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9uU2Nyb2xsOiBfID0+IF8sXG4gICAgICAgICAgICAgICAgb25DbG9zZTogXyA9PiBfLFxuICAgICAgICAgICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckZvb3RlcjogcmVuZGVyRm9vdGVyLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGFuZ2Vsb2dJdGVtc1xuICAgICAgICAgICAgfSwgcHJvcHMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeSBzdHJpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxuICAgICAqL1xuICAgIHN0YXRpYyBzaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBNb2RhbEFjdGlvbnMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIm9wZW5Nb2RhbFwiLCBcInVwZGF0ZU1vZGFsXCIpO1xuICAgICAgICBjb25zdCBNYXJrZG93biA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWFya2Rvd25cIik7XG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJDb25maXJtTW9kYWxcIik7XG4gICAgICAgIGlmICghTW9kYWxBY3Rpb25zIHx8ICFDb25maXJtYXRpb25Nb2RhbCB8fCAhTWFya2Rvd24pIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XG5cbiAgICAgICAgY29uc3QgZW1wdHlGdW5jdGlvbiA9ICgpID0+IHt9O1xuICAgICAgICBjb25zdCB7b25Db25maXJtID0gZW1wdHlGdW5jdGlvbiwgb25DYW5jZWwgPSBlbXB0eUZ1bmN0aW9uLCBjb25maXJtVGV4dCA9IFwiT2theVwiLCBjYW5jZWxUZXh0ID0gXCJDYW5jZWxcIiwgZGFuZ2VyID0gZmFsc2UsIGtleSA9IHVuZGVmaW5lZH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgY29udGVudCA9IFtjb250ZW50XTtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQubWFwKGMgPT4gdHlwZW9mKGMpID09PSBcInN0cmluZ1wiID8gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KE1hcmtkb3duLCBudWxsLCBjKSA6IGMpO1xuICAgICAgICByZXR1cm4gTW9kYWxBY3Rpb25zLm9wZW5Nb2RhbChwcm9wcyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KENvbmZpcm1hdGlvbk1vZGFsLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHRpdGxlLFxuICAgICAgICAgICAgICAgIHJlZDogZGFuZ2VyLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0LFxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtLFxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbFxuICAgICAgICAgICAgfSwgcHJvcHMpLCBjb250ZW50KTtcbiAgICAgICAgfSwge21vZGFsS2V5OiBrZXl9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtb3ZlRGEoY2xhc3NOYW1lKXtcbiAgICAgICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXG4gICAgICAgIHJldHVybiBjbGFzc05hbWUuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICFlLnN0YXJ0c1dpdGgoXCJkYS1cIikpLmpvaW4oXCIgXCIpXG4gICAgfVxufVxuXG5VdGlscy5zaG93VG9hc3QgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhVdGlscy5zaG93VG9hc3QsIFwiQ291bGQgbm90IHNob3cgdG9hc3QuXCIpO1xuXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVXRpbHMgPSBVdGlscyIsImltcG9ydCB7c2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuV2VicGFja01vZHVsZXMgPSAoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG4gICAgICAgICAgICBkZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xyXG4gICAgICAgICAgICBkZWxldGUgcmVxLmMuX19leHRyYV9pZF9fO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUHJvdGVjdCA9IHRoZU1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLnJlbW92ZSAmJiB0aGVNb2R1bGUuc2V0ICYmIHRoZU1vZHVsZS5jbGVhciAmJiB0aGVNb2R1bGUuZ2V0ICYmICF0aGVNb2R1bGUuc29ydCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLmdldFRva2VuIHx8IHRoZU1vZHVsZS5nZXRFbWFpbCB8fCB0aGVNb2R1bGUuc2hvd1Rva2VuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHByb3RlY3QgPSAodGhlTW9kdWxlLCBpc0RlZmF1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBtb2QgPSAhaXNEZWZhdWx0ID8gdGhlTW9kdWxlLmRlZmF1bHQgOiB0aGVNb2R1bGVcclxuICAgICAgICAgICAgICAgIGlmKCFtb2QpcmV0dXJuIHRoZU1vZHVsZVxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZC5yZW1vdmUgJiYgbW9kLnNldCAmJiBtb2QuY2xlYXIgJiYgbW9kLmdldCAmJiAhbW9kLnNvcnQpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtb2QuZ2V0VG9rZW4gJiYgIW1vZC5nZXRFbWFpbCAmJiAhbW9kLnNob3dUb2tlbilyZXR1cm4gdGhlTW9kdWxlXHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkobW9kLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiZ2V0VG9rZW5cIiB8fCBwcm9wID09PSBcImdldEVtYWlsXCIgfHwgcHJvcCA9PT0gXCJzaG93VG9rZW5cIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBmdW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0VG9rZW5cIiAmJiBvYmouZ2V0VG9rZW4pIHJldHVybiAoKSA9PiBcIm1mYS5YQ25iS3pvMENMSXFkSnpCbkwwRDhQZkRydXFrSk5IandIWHRyMzlVVTNGOGhIeDQzam9qSVN5aTVqZGpPNTJlOV9lOU1qbWFmWkZGcGMtc2VPTWFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRFbWFpbFwiICYmIG9iai5nZXRFbWFpbCkgcmV0dXJuICgpID0+IFwicHVwcGV0MTExMTJAZ21haWwuY29tXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIgJiYgb2JqLnNob3dUb2tlbikgcmV0dXJuICgpID0+IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiX19wcm90b19fXCIgJiYgb2JqLl9fcHJvdG9fXykgcmV0dXJuIHByb3h5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtmdW5jXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZighaXNEZWZhdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhlTW9kdWxlLCB7ZGVmYXVsdDogcHJveHl9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBwcm90ZWN0KG0uZGVmYXVsdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBwcm90ZWN0KG0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLmRlZmF1bHQsIHRydWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChwcm90ZWN0KG0sIGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZXM7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzID0gKHByb3BOYW1lcykgPT4gZmluZChtb2R1bGUgPT4gcHJvcE5hbWVzLmV2ZXJ5KHByb3AgPT4gbW9kdWxlW3Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9IChwcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeURpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IGRpc3BsYXlOYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7ZmluZCwgZmluZEFsbCwgZmluZEJ5VW5pcXVlUHJvcGVydGllcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSB7XHJcbiAgICAgICAgICAgIHJlYWN0OiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiQ29tcG9uZW50XCIsIFwiUHVyZUNvbXBvbmVudFwiLCBcIkNoaWxkcmVuXCIsIFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiXSksXHJcbiAgICAgICAgICAgIHJlYWN0RG9tOiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZmluZERPTU5vZGVcIl0pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmdldEludGVybmFsSW5zdGFuY2UgPSBlID0+IGVbT2JqZWN0LmtleXMoZSkuZmluZChrID0+IGsuc3RhcnRzV2l0aChcIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlXCIpKV07XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlYyID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGpvaW5CRDEoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIwVG1mbzVaYk9SQ1JxYkFkXCIpO31cclxuICAgIGxlYXZlQkQxKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI4NjAwNDc0NDk2NjkxNDA0OFwiKTt9XHJcblxyXG4gICAgam9pbkJEMigpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7fVxyXG4gICAgbGVhdmVCRDIoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjI4MDgwNjQ3MjkyODE5ODY1NlwiKTt9XHJcblxyXG4gICAgam9pbkxDKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiN2VGZmYyQVwiKTt9XHJcbiAgICBsZWF2ZUxDKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI3MDU5MDgzNTAyMTg2NjYxMTdcIik7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdERvbSgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdERvbTt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0LkNvbXBvbmVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3QuQ29tcG9uZW50O31cclxuXHJcbiAgICBnZXQgYW5jaG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIl0pIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O31cclxuICAgIGdldCBzbGF0ZUVkaXRvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzbGF0ZVRleHRBcmVhXCJdKTt9XHJcbiAgICBnZXQgbWVzc2FnZUNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJtZXNzYWdlXCIsIFwiY29udGFpbmVyQ296eVwiXSk7fVxyXG4gICAgZ2V0IGd1aWxkQ2xhc3NlcygpIHtcclxuXHRcdGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS53cmFwcGVyICYmIGUudW5yZWFkTWVudGlvbnNCYXIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmd1aWxkc0Vycm9yICYmIGUuc2VsZWN0ZWQpWzBdXHJcbiAgICAgICAgY29uc3QgcGlsbCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmJsb2JDb250YWluZXIpWzBdXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcblx0fVxyXG5cclxuICAgIGdldCBNZXNzYWdlQ29udGVudENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlQnV0dG9uc1wiKSk7fVxyXG4gICAgZ2V0IE1lc3NhZ2VDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTWVzc2FnZVwiKTt9XHJcbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImRhdGVGb3JtYXRcIl0pO31cclxuICAgIGdldCBUb29sdGlwV3JhcHBlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7fVxyXG4gICAgZ2V0IE5hdGl2ZU1vZHVsZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNldEJhZGdlXCJdKTt9XHJcbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7fVxyXG4gICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImxlYXZlR3VpbGRcIl0pO31cclxuICAgIGdldCBUb29sdGlwcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5oaWRlICYmIG0uc2hvdyAmJiAhbS5zZWFyY2ggJiYgIW0uc3VibWl0ICYmICFtLnNlYXJjaCAmJiAhbS5hY3RpdmF0ZVJhZ2luZ0RlbW9uICYmICFtLmRpc21pc3MpO31cclxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0udG9TdHJpbmcgJiYgL1wiYmluYXJ5XCIvLnRlc3QobS50b1N0cmluZygpKSk7fVxyXG4gICAgZ2V0IExheWVyU3RhY2soKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJwb3BMYXllclwiXSk7fVxyXG4gICAgZ2V0IFVzZXJTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEN1cnJlbnRVc2VyXCJdKTt9XHJcbiAgICBnZXQgQ2hhbm5lbFN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q2hhbm5lbFwiXSk7fVxyXG4gICAgZ2V0IENoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wib3BlblByaXZhdGVDaGFubmVsXCJdKTt9XHJcbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2VsZWN0UHJpdmF0ZUNoYW5uZWxcIl0pO31cclxuXHJcbiAgICBvcGVuRE0odXNlcklkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZklkID0gdGhpcy5Vc2VyU3RvcmUuZ2V0Q3VycmVudFVzZXIoKS5pZDtcclxuICAgICAgICBpZiAoc2VsZklkID09IHVzZXJJZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHByaXZhdGVDaGFubmVsSWQgPSB0aGlzLkNoYW5uZWxTdG9yZS5nZXRETUZyb21Vc2VySWQodXNlcklkKTtcclxuICAgICAgICBpZiAocHJpdmF0ZUNoYW5uZWxJZCkgcmV0dXJuIHRoaXMuUHJpdmF0ZUNoYW5uZWxBY3Rpb25zLnNlbGVjdFByaXZhdGVDaGFubmVsKHByaXZhdGVDaGFubmVsSWQpO1xyXG4gICAgICAgIHRoaXMuQ2hhbm5lbEFjdGlvbnMub3BlblByaXZhdGVDaGFubmVsKHNlbGZJZCwgdXNlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZVNldHRpbmdzKGNhdCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmcuY2F0ID09PSBjYXQgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9IHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jb25zdCBzdHlsZSA9IGBcclxuICAgIC5jb250YWluZXItMlJsMDF1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuY2hhdC0zYlJ4eHUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5zaWRlYmFyLTJLOHBGaCB7XHJcbiAgICAgICAgZmxleC1ncm93OiAxIWltcG9ydGFudDtcclxuICAgIH1cclxuYDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWb2ljZU1vZGUge1xyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiVm9pY2VNb2RlXCIsIHN0eWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcIlZvaWNlTW9kZVwiKTtcclxuICAgIH1cclxufTsiLCJjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG5kZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xyXG5kZWxldGUgcmVxLmMuX19leHRyYV9pZF9fO1xyXG5jb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gbS5kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gobS5kZWZhdWx0KTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kdWxlcztcclxufTtcclxuXHJcbmNvbnN0IGZpbmRCeVByb3BzID0gKC4uLnByb3BOYW1lcykgPT4gZmluZChtb2R1bGUgPT4gcHJvcE5hbWVzLmV2ZXJ5KHByb3AgPT4gbW9kdWxlW3Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9ICguLi5wcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeURpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IGRpc3BsYXlOYW1lKTtcclxuXHJcbmxldCBtb2QgPSAge2ZpbmQsIGZpbmRBbGwsIGZpbmRCeVByb3BzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XHJcbmV4cG9ydCBkZWZhdWx0IG1vZFxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLldlYnBhY2tNb2R1bGVzID0gbW9kIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5cclxubGV0IHByb2ZpbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lm9wZW4gJiYgZS5kZWZhdWx0LmZldGNoTXV0dWFsRnJpZW5kcylbMF1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0Y29yZFVzZXJCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuXHJcbiAgICAgICAgZGVsZXRlIHByb3BzLmhyZWYudGFyZ2V0XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKHByb3BzKVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8cHJvcHMuQW5jaG9yIGhyZWY9e1wiL3VzZXJzL1wiK3Byb3BzLnVzZXIuaWR9IHsuLi5wcm9wcy5ocmVmfSBvbkNsaWNrPXsoZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgICAgIGlmKCFwcm9maWxNb2R1bGUpcHJvZmlsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQub3BlbiAmJiBlLmRlZmF1bHQuZmV0Y2hNdXR1YWxGcmllbmRzKVswXVxyXG4gICAgICAgICAgICAgICAgcHJvZmlsTW9kdWxlLmRlZmF1bHQub3Blbihwcm9wcy51c2VyLmlkKVxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzMS4zIDI5LjVcIiB7Li4ucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi44IDFzMTIgOC4yIDcuNCAxOS43UzE2LjYgMjkgMjAgMjUuNnMtNC01LjYtOC43LTEwTDIyLjggMVwiIGZpbGw9XCJyZ2JhKDIyNyw2LDE5LC42KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi4xIDEyLjNjLTIuNSAzLjItNi4xIDQuOC04LjkgNC4zTDMuNiAyOC44Yy0uNy45LTEuOSAxLTIuOC4zLS45LS43LTEtMS45LS40LTIuOEwxMCAxNC4xYy0xLjMtMi41LS42LTYuNCAyLTkuNyAzLjItNCA4LTUuNSAxMC44LTMuNHMyLjQgNy4yLS43IDExLjN6XCIgZmlsbD1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvcHJvcHMuQW5jaG9yPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWdIdW50ZXJCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuOCAxczEyIDguMiA3LjQgMTkuN1MxNi42IDI5IDIwIDI1LjZzLTQtNS42LTguNy0xMEwyMi44IDFcIiBmaWxsPVwicmdiYSgyMjcsNiwxOSwuNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi4xIDEyLjNjLTIuNSAzLjItNi4xIDQuOC04LjkgNC4zTDMuNiAyOC44Yy0uNy45LTEuOSAxLTIuOC4zLS45LS43LTEtMS45LS40LTIuOEwxMCAxNC4xYy0xLjMtMi41LS42LTYuNCAyLTkuNyAzLjItNCA4LTUuNSAxMC44LTMuNHMyLjQgNy4yLS43IDExLjN6XCIgZmlsbD1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2lyY3VzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIHJldHVybiAoPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiICB7Li4udGhpcy5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNERDJFNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMzMgMzNhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0ybDEtMTJoMjhsMSAxMnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNFQTU5NkVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgMzVjLS43OTItMS44NzUtMS43NS0zLjI5MS0zLjQxNy00LjY2NiAxLjc1LTEuNDU5IDQuNTQyLTUuNSA1LjI1LTguMjkyczIuNzUgOC4xMjUgMi4wNDIgMTAuNjI1UzEzIDM1IDEzIDM1em0xMC4zMDMgMGMuNzkxLTEuODc1IDEuNzUtMy4yOTEgMy40MTYtNC42NjYtMS43NS0xLjQ1OS00LjU0MS01LjUtNS4yNS04LjI5Mi0uNzA3LTIuNzkyLTIuNzUgOC4xMjUtMi4wNCAxMC42MjUuNzA4IDIuNSAzLjg3NCAyLjMzMyAzLjg3NCAyLjMzM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNCRTE5MzFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43MjggMjQuMjYzQTIuNSAyLjUgMCAwMDggMjIuNWMwLS41NjUtLjE5NS0xLjA4MS0uNTExLTEuNUg0bC0uMjcyIDMuMjYzem0yOC41NDQgMEwzMiAyMWgtMy40ODlBMi40ODIgMi40ODIgMCAwMDI4IDIyLjVhMi41IDIuNSAwIDAwNC4yNzIgMS43NjN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTRcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjIyXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjZcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMyAzNUgxM3MyLTYgMi0xM2g2YzAgNyAyIDEzIDIgMTN6TTE3IDJoMnY3aC0yelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM1NUFDRUVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTguODM4LjIwNkMxNy42NjcuMDQyIDE3IC4zMTggMTcgMS40MTh2MWMwIDEuMS44NjUgMS43NTMgMS45MjMgMS40NTFsNS4xNTQtLjkwMWMxLjcxNS0uMzQzIDEuNTQ4LTEuNTkzLjA4NS0xLjg4NEwxOC44MzguMjA2elwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0NDRDZERFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOCA2bC0uMDgxLjEyM0MxMC45MzggMTYuOTgxIDMgMTUuMDE1IDMgMTl2Mi41YTIuNSAyLjUgMCAwMDQuOTUuNUgxMmEyIDIgMCAwMDQgMGg0YTIgMiAwIDAwNCAwaDQuMDVhMi41IDIuNSAwIDAwNC45NS0uNVYxOWMwLTQtOC0yLTE1LTEzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGcgZmlsbD1cIiNGNUY4RkFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk0OCA2LjA3OGwtLjAzLjA0NUMxNy4xMzIgMTEuNjE5IDEwLjgxMSAxNi4xMjYgOCAxOHY0YTIgMiAwIDAwNCAwdi00Yy45ODItLjk4MiA1LjgxMy02Ljc4NyA1Ljk4NC0xMS43MzItLjAxLS4wNjQtLjAyNy0uMTI2LS4wMzYtLjE5em0uMDguMzk4QzE4LjMyNCAxMS4zNzQgMjMuMDMxIDE3LjAzMSAyNCAxOHY0YTIgMiAwIDAwNCAwdi00Yy0yLjc1LTEuODMzLTguOTUzLTYuMTktOS45NzItMTEuNTI0elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk4NCA2LjI3QzE3LjkyMiA4LjM0NiAxNy42MDYgMTYuMzk0IDE2IDE4djRhMiAyIDAgMDA0IDB2LTRjLTEuNTY0LTEuNTY0LTEuOTA1LTkuMjQxLTEuOTc5LTExLjU1OS0uMDExLS4wNTctLjAyNy0uMTEzLS4wMzctLjE3MXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRMb2dvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNjggMTY4LjY5XCIgey4uLnByb3BzfSBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9e3Byb3BzLnNpemV9PlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19hXCIgeDE9ezY2Ljd9IHkxPXstNDg3Ljd9IHgyPXs2Ni43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19iXCIgeDE9ezEwMS43fSB5MT17LTQ4Ny43fSB4Mj17MTAxLjd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UyMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2NcIiB4MT17ODR9IHkxPXstNDA4fSB4Mj17ODR9IHkyPXstNTc2LjY5fSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjZmZmXCIgZD1cIk0xNC45IDM1LjNoMTM5LjJWMTMzSDE0Ljl6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNjYuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19hKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwMS43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2IpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwdjE2OGwxNjggLjY5VjB6bTExMS4zIDEyNC4xcy0zLjQtNC4xLTYuMy03LjdjMTIuNi0zLjUgMTcuNC0xMS4zIDE3LjQtMTEuM2E1Mi41MiA1Mi41MiAwIDAxLTExLjEgNS42IDY4LjYzIDY4LjYzIDAgMDEtMzguOSA0IDcwLjEyIDcwLjEyIDAgMDEtMTQuMS00LjEgNDguODggNDguODggMCAwMS03LjEtMy4zYy0uMy0uMi0uNi0uMy0uOS0uNWEuNzYuNzYgMCAwMC0uNC0uMmMtMS43LTEtMi42LTEuNi0yLjYtMS42czQuNiA3LjYgMTYuOCAxMS4yYy0yLjkgMy42LTYuNCA3LjktNi40IDcuOS0yMS4yLS42LTI5LjMtMTQuNS0yOS4zLTE0LjUgMC0zMC42IDEzLjgtNTUuNCAxMy44LTU1LjQgMTMuOC0xMC4zIDI2LjktMTAgMjYuOS0xMGwxIDEuMUM1Mi44IDUwLjMgNDUgNTcuOSA0NSA1Ny45YTU2LjIgNTYuMiAwIDAxNS43LTIuNyA3Mi4xOSA3Mi4xOSAwIDAxMjEuOC02IDguNzUgOC43NSAwIDAxMS42LS4yIDg5LjEgODkuMSAwIDAxMTkuNC0uMiA3OC40NSA3OC40NSAwIDAxMjguOSA5LjFzLTcuNS03LjItMjMuOS0xMi4xbDEuMy0xLjVzMTMuMS0uMyAyNi45IDEwYzAgMCAxMy44IDI0LjggMTMuOCA1NS40LjEtLjEtOCAxMy44LTI5LjIgMTQuNHpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2MpXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFYyQ19TZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0XCIpfVxyXG4gKi9cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxubGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbmxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbmxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG5sZXQgc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbmNvbnN0IEd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzKVswXS5kZWZhdWx0XHJcbmNvbnN0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFJlbGF0aW9uc2hpcHMpWzBdLmRlZmF1bHRcclxuY29uc3Qgc2Vzc2lvbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFNlc3Npb25zKVswXS5kZWZhdWx0XHJcbmNvbnN0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0FjY291bnRJbmZvcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZTIpbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxuICAgICAgICBpZighY29sb3JNb2R1bGUpY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG4gICAgICAgIGlmKCFzaXplTW9kdWxlKXNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJBY2NvdW50IEluZm9zXCIvPixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFByb2ZpbGVWYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBTdGF0aXN0aWNzXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U3RhdGlzdGljcygpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWQgU2Vzc2lvbnNcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTZXNzaW9uVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2Vzc2lvblZhbHVlKCl7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnNSYXcgPSBzZXNzaW9uTW9kdWxlLmdldFNlc3Npb25zKClcclxuICAgICAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSlcclxuXHJcbiAgICAgICAgaWYoc2Vzc2lvbnMubGVuZ3RoID09PSAwKXJldHVybiBcIi0gTm8gc2Vzc2lvbiBkZXRlY3RlZC4gUGxlYXNlIHRyeSBpbiBhIGZldyBzZWNvbmRzXCJcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gc2Vzc2lvbnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYCsgaWQ6ICR7ZS5zZXNzaW9uSWR9XHJcbisgb3M6ICR7ZS5jbGllbnRJbmZvLm9zWzBdLnRvVXBwZXJDYXNlKCkrZS5jbGllbnRJbmZvLm9zLnNsaWNlKDEpfVxyXG4rIGNsaWVudDogJHtlLmNsaWVudEluZm8uY2xpZW50fVxyXG4rIHN0YXR1czogJHtlLnN0YXR1c31cclxuKyBBY3Rpdml0aWVzOiAke2UuYWN0aXZpdGllcy5sZW5ndGh9YFxyXG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIitcIi1cIi5yZXBlYXQoMzgpK1wiXFxuXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZmlsZVZhbHVlKCl7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtEYXRlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHVzZXIuY3JlYXRlZEF0XHJcblxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihhdmF0YXJVUkwuc3RhcnRzV2l0aChcIi9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBcImh0dHBzOi8vZGlzY29yZC5jb21cIithdmF0YXJVUkxcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoYXZhdGFyVVJMLmVuZHNXaXRoKFwiP3NpemU9MTI4XCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gYXZhdGFyVVJMLnJlcGxhY2UoXCI/c2l6ZT0xMjhcIiwgXCI/c2l6ZT00MDk2XCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYCsgVXNlcm5hbWU6ICR7dXNlci51c2VybmFtZX1cclxuKyBEaXNjcmltaW5hdG9yOiAke3VzZXIuZGlzY3JpbWluYXRvcn1cclxuKyBUYWc6ICR7dXNlci50YWd9XHJcbisgSUQ6ICR7dXNlci5pZH1cclxuKyBBdmF0YXI6ICR7dXNlci5hdmF0YXJ9XHJcbisgQXZhdGFyIFVSTDogJHthdmF0YXJVUkx9XHJcbisgQ3JlYXRpb24gRGF0ZTogJHsoY3JlYXRlZEF0LmdldERhdGUoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9ICR7Y3JlYXRlZEF0LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9aCAke2NyZWF0ZWRBdC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9bWluICR7Y3JlYXRlZEF0LmdldFNlY29uZHMoKX1zXHJcbisgRmxhZ3M6ICR7dXNlci5mbGFnc31cclxuKyBIYXMgTml0cm86ICR7dXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBFbWFpbDogJHt1c2VyLmVtYWlsfVxyXG4tIDJGQTogJHt1c2VyLm1mYUVuYWJsZWQgPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEhhcyBCZWVuIE9uIE1vYmlsZTogJHt1c2VyLm1vYmlsZSA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gUGhvbmU6ICR7dXNlci5waG9uZSB8fCBcIk5vbmVcIn1cclxuLSBWZXJpZmllZDogJHt1c2VyLnZlcmlmaWVkfWBcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0aXN0aWNzKCl7XHJcblxyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IE9iamVjdC52YWx1ZXMoR3VpbGRNb2R1bGUuZ2V0R3VpbGRzKCkpXHJcbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LmtleXMocmVsYXRpb25TaGlwTW9kdWxlLmdldFJlbGF0aW9uc2hpcHMoKSlcclxuICAgICAgICBjb25zdCBmcmllbmRzID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0ZyaWVuZChlKSlcclxuICAgICAgICBjb25zdCBibG9ja2VkID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0Jsb2NrZWQoZSkpXHJcblxyXG4gICAgICAgIHJldHVybiBgKyBTZXJ2ZXIgQ291bnQ6ICR7Z3VpbGRzLmxlbmd0aH0gc2VydmVyc1xyXG4rIFJlbGF0aW9uczogJHtyZWxhdGlvbnMubGVuZ3RofSByZWxhdGlvbnNcclxuKyBGcmllbmRzIENvdW50OiAke2ZyaWVuZHMubGVuZ3RofSBmcmllbmRzXHJcbi0gQmxvY2tlZCBVc2VycyBDb3VudDogJHtibG9ja2VkLmxlbmd0aH0gYmxvY2tlZCB1c2Vyc2BcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmxldCBoaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbmxldCBtZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcblxyXG5jbGFzcyBDb2RlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTEpbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXHJcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUyKW1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcbiAgICAgICAgaWYoIXNjcm9sbGJhck1vZHVsZTEpc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbiAgICAgICAgaWYoIWhpZ2h0bGlnaHRKUyloaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHttZXNzYWdlTW9kdWxlMS5tYXJrdXB9ICR7bWVzc2FnZU1vZHVsZTIubWVzc2FnZUNvbnRlbnR9YH0+XHJcbiAgICAgICAgICAgIDxwcmU+XHJcbiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvY29kZT5cclxuICAgICAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn0iLCIvLyBHb29kIGx1Y2sgdG8gcmVhZCBteSBjb2RlLCBFdmVuIG1lIGNhbid0IHJlYWQgaXQgcHJvcGVybHkuXHJcblxyXG5pbXBvcnQgeyBzdGF0IH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4uL21vZHVsZXMvZGlzdGFudFwiXHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiXHJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCJcclxuXHJcbmNvbnN0IGtleXMgPSB7XHJcbiAgICBzZXR0aW5nVGl0bGU6IHV1aWR2NCgpXHJcbn1cclxubGV0IGZvcm1Nb2R1bGVcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpUHJldmlldyBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc3RhdGVzOiBbXVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighZm9ybU1vZHVsZSlmb3JtTW9kdWxlID0gd2VicGFja01vZHVsZXMuZmluZChlID0+IGUuRm9ybVNlY3Rpb24pXHJcbiAgICAgICAgLyoqIFxyXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGFsbENvbXBvbmVudHMgPSBbLi4ubmV3IFNldChPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzKS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdKS5tYXAoayA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2tdKVxyXG4gICAgICAgIH0pLmZsYXQoKSldXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGZvcm1Nb2R1bGUuRm9ybVNlY3Rpb24gdGFnPVwiaDJcIiB0aXRsZT1cIkxpZ2h0Y29yZCdzIEFwaSBBdmFpbGxhYmxlIGNvbXBvbmVudHNcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1UZXh0IHR5cGU9XCJkZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cIlwiIHNlbGVjdGFibGU9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBUaGVzZSBjb21wb25lbnRzIGFyZSBoZXJlIGZvciB0aGUgcGx1Z2luIGRldnMuIFRoZXkgY2FuIHF1aWNrbHkgZW1iZWQgYW55IGNvbXBvbmVudCBiZWxvdyB3aXRoIHRoaXMgcGFuZWwuXHJcbiAgICAgICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVRleHQ+XHJcbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wPjwvTWFyZ2luVG9wPlxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwib3V0bGluZWRcIiBzaXplPVwibWVkaXVtXCIgaG92ZXJDb2xvcj1cImdyZWVuXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkL2xpZ2h0Y29yZC93aWtpL0FwaXNcIilcclxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+LFxyXG4gICAgICAgICAgICBhbGxDb21wb25lbnRzLm1hcChjb21wID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZihjb21wLkFsbFByZXZpZXdzKUFsbFByZXZpZXdzID0gY29tcC5BbGxQcmV2aWV3c1xyXG4gICAgICAgICAgICAgICAgbGV0IG9uQ2hhbmdlID0gKHRhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBzZXRTdGF0ZSA9IChuZXdTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXM6IFtPYmplY3QuYXNzaWduKHN0YXRlLCBuZXdTdGF0ZSldLmNvbmNhdCh0aGlzLnN0YXRlLnN0YXRlcy5maWx0ZXIoZSA9PiBlLmVsZW0gIT09IGNvbXApKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlLnN0YXRlcy5maW5kKGUgPT4gZS5lbGVtID09PSBjb21wKVxyXG4gICAgICAgICAgICAgICAgaWYoIXN0YXRlKXtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiOiBcInByZXZpZXdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbTogY29tcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge31cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdGF0ZXMucHVzaChzdGF0ZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRQcm9wcyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWwgPSB7fVxyXG4gICAgICAgICAgICAgICAgICAgIEFsbFByZXZpZXdzLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFtPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1dID0gY2F0ZWdvcnlbMF1bT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUub3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFtrZXldID0gQWxsUHJldmlld3MuZmluZChlID0+IGUuZmluZChlID0+IGVba2V5XSkpW3N0YXRlLm9wdGlvbnNba2V5XV1ba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyUHJldmlldyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChjb21wLCBnZXRQcm9wcygpKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyQ29kZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianN4XCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwianN4XCIpfS8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianNcIiBjb250ZW50PXtnZW5lcmF0ZUNvZGUoXCJyZWFjdFwiKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRTdHJGb3JQcm9wID0gKHZhbHVlLCBjb21wUGF0aCwgbGFuZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbXBQYXRoID09PSBcIkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG4gICAgbWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxyXG59fSxcclxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLFxyXG4gICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsXHJcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICB9LCBjbGFzc05hbWU6IFwibGMtdGFiLWJveC1zaGFkb3dcIiB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGUsIG51bGwsIFwiUHJldmlldyB0YWJzXCIpXHJcbiAgICApXHJcbilgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgIG1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcclxuICAgIH19PlxyXG4gICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5QcmV2aWV3IHRhYnM8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdXIgY29tcG9uZW50cyBoZXJlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBcIiAgICBcIilcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGdlbmVyYXRlQ29kZSA9IGZ1bmN0aW9uKGxhbmcpeyAvLyBjb2RlIGZvcm1hdHRpbmcgaXMgaGFyZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maW5kKGUgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtjb21wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcFBhdGggPSBgTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLiR7Y29tcENhdGVnb3J5fS4ke2NvbXBOYW1lfWBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihrZXkgPT0gXCJjaGlsZHJlblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IGtleStcIj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xvc2VUYWcgPSBgPC8ke2NvbXBQYXRofT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0vPmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihsYW5nID09PSBcInJlYWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZHJlbiAmJiBjaGlsZHJlbi4kJHR5cGVvZiAmJiAoY2hpbGRyZW4uJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IGNoaWxkcmVuLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aXNpYmxlS2V5ID0gL1teXFx3XFxkX10vZy50ZXN0KGtleSkgPyBKU09OLnN0cmluZ2lmeShrZXkpIDoga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gdmlzaWJsZUtleStcIjogXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpID09PSAwKXJldHVybiBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiICAgIFwiICsgc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wT2JqZWN0ID0gXCJ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvcFN0cmluZ3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0xhc3QgPSBpID09PSBwcm9wU3RyaW5ncy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBpID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwiLFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IHN0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzTGFzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJlYWN0LmNyZWF0ZUVsZW1lbnQoJHtjb21wUGF0aH0sICR7cHJvcE9iamVjdH0sICR7Y2hpbGRyZW5EYXRhfSlgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGhlbHAgPSBjb21wLmhlbHAgfHwge31cclxuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gaGVscC5pbmZvID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtoZWxwLmluZm99XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgd2FybiA9IGhlbHAud2FybiA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cIndhcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC53YXJufVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IGRhbmdlciA9IGhlbHAuZGFuZ2VyID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuZGFuZ2VyfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gaGVscC5lcnJvciA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuZXJyb3J9XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgc3VjY2VzcyA9IGhlbHAuc3VjY2VzcyA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cInN1Y2Nlc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC5zdWNjZXNzfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdzVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAge2luZm99XHJcbiAgICAgICAgICAgICAgICAgICAge3N1Y2Nlc3N9XHJcbiAgICAgICAgICAgICAgICAgICAge3dhcm59XHJcbiAgICAgICAgICAgICAgICAgICAge2Vycm9yfVxyXG4gICAgICAgICAgICAgICAgICAgIHtkYW5nZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAge0FsbFByZXZpZXdzLm1hcChjYXRlZ29yeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0udGV4dClyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS5jaGlsZHJlbilyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtrZXl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIG9wdGlvbnM9e2NhdGVnb3J5Lm1hcCgoZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBKU09OLnN0cmluZ2lmeShlW09iamVjdC5rZXlzKGUpWzBdXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5vcHRpb25zLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5XTogKHZhbHVlLnZhbHVlIHx8IFwiMFwiKS5yZXBsYWNlKFwib3B0LVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBzZWFyY2hhYmxlPXt0cnVlfS8+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkJvdHRvbTogXCI4cHhcIn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzIHRhYnM9e1t7bGFiZWw6IFwiUHJldmlld1wiLCBpZDogXCJwcmV2aWV3XCJ9LCB7bGFiZWw6IFwiQ29kZVwiLCBpZDogXCJjb2RlXCJ9XX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZT17c3RhdGUudGFifSBjaGlsZHJlbj17c3RhdGUudGFiID09PSBcInByZXZpZXdcIiA/IHJlbmRlclByZXZpZXcoKSA6IHJlbmRlckNvZGUoKX0gb25DaGFuZ2U9e29uQ2hhbmdlfS8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW5kZXJzKCl7XHJcblxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCB7IHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxyXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDAsXHJcbiAgICAgICAgICAgIHRydXN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZUJvdHRvbSA9IGVUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlID0gdGhpcy5yZWZzLmNhcmROb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzTm9kZS5jbG9zZXN0KFwiZGl2W2NsYXNzKj1cXFwic2Nyb2xsZXItXFxcIl1cIilcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XHJcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaW5rcygpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBpZiAoYWRkb24ud2Vic2l0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiV2Vic2l0ZVwiLCBhZGRvbi53ZWJzaXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5pbnZpdGUpIHtcclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU3VwcG9ydCBTZXJ2ZXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBhZGRvbi5pbnZpdGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRvbi5kb25hdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIkRvbmF0ZVwiLCBhZGRvbi5kb25hdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24ucGF0cmVvbikgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiUGF0cmVvblwiLCBhZGRvbi5wYXRyZW9uKSk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmxpbmtzO1xyXG4gICAgICAgIHJldHVybiAobGlua3MubGVuZ3RoIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtZm9vdGVyIGJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAuLi4obGlua3MubWFwKChlbGVtZW50LCBpbmRleCkgPT4gaW5kZXggPCBsaW5rcy5sZW5ndGggLSAxID8gW2VsZW1lbnQsIFwiIHwgXCJdIDogZWxlbWVudCkuZmxhdCgpKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMudG9nZ2xlICYmIHRoaXMucHJvcHMudG9nZ2xlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxyXG4gICAgZGVsZXRlKCkge3RoaXMucHJvcHMucmVtb3ZlKHRoaXMubmFtZSk7fVxyXG4gICAgcmVsb2FkKCkge3RoaXMucHJvcHMucmVsb2FkKHRoaXMubmFtZSk7fVxyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IHRoaXMucHJvcHMuYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0IGF1dGhvcigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IHRoaXMucHJvcHMuYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldCB2ZXJzaW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IHRoaXMucHJvcHMuYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XHJcbiAgICAgICAgY29uc3Qge2F1dGhvcklkLCBhdXRob3JMaW5rfSA9IHRoaXMucHJvcHMuYWRkb247XHJcblxyXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge31cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocmVzb2x2ZSh0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSA/IGNvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7fSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IFwic3VzcGVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIiwgc3R5bGV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1oZWFkZXIgYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tY29udHJvbHMgYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVkaXQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRWRpdFwiLCA8RWRpdEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmVkaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVsb2FkICYmIHRoaXMubWFrZUJ1dHRvbihcIlJlbG9hZFwiLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMucmVsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyLXdyYXAgYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmZvb3RlclxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7IiwiaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVwiO1xyXG5pbXBvcnQgQ29udGVudENvbHVtbiBmcm9tIFwiLi9jb250ZW50Q29sdW1uXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcGRvd25cIjtcclxuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgcGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5cclxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhcmRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcclxuICAgICAgICB0aGlzLmlzUGx1Z2lucyA9IHRoaXMucHJvcHMudHlwZSA9PSBcInBsdWdpbnNcIjtcclxuICAgICAgICB0aGlzLmNvb2tpZSA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luQ29va2llIDogdGhlbWVDb29raWU7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gdGhpcy5pc1BsdWdpbnMgPyBwbHVnaW5Nb2R1bGUgOiB0aGVtZU1vZHVsZTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25BZGRvbkNoYW5nZXMgPSB0aGlzLm9uQWRkb25DaGFuZ2VzLmJpbmQodGhpcylcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXHJcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9dW5sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZvbGRlcigpIHtcclxuICAgICAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0odGhpcy5pc1BsdWdpbnMgPyBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KG5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhuYW1lKTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZWRpdChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUobmFtZSkge1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShuYW1lKTtcclxuICAgICAgICBpZiAoIXNob3VsZERlbGV0ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5kZWxldGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgWW91IFN1cmU/XCIsIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7bmFtZX0/YCwge1xyXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNvcnRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJOYW1lXCIsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBdXRob3JcIiwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiVmVyc2lvblwiLCB2YWx1ZTogXCJ2ZXJzaW9uXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiUmVjZW50bHkgQWRkZWRcIiwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJMYXN0IE1vZGlmaWVkXCIsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRmlsZSBTaXplXCIsIHZhbHVlOiBcInNpemVcIn0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXNjZW5kaW5nXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkRlc2NlbmRpbmdcIiwgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9wcyhhZGRvbikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleTogdGhpcy5nZXROYW1lKGFkZG9uKSxcclxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jb29raWVbdGhpcy5nZXROYW1lKGFkZG9uKV0sXHJcbiAgICAgICAgICAgIHRvZ2dsZTogdGhpcy5tYW5hZ2VyLnRvZ2dsZS5iaW5kKHRoaXMubWFuYWdlciksXHJcbiAgICAgICAgICAgIGVkaXQ6IHNldHRpbmdzQ29va2llW1wiZm9yay1wcy03XCJdID8gdGhpcy5lZGl0LmJpbmQodGhpcykgOiBudWxsLFxyXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGFkZG9uOiBhZGRvbixcclxuICAgICAgICAgICAgaGFzaDogYWRkb24uaGFzaFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaXN0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gdGhpcy5saXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gdGhpcy5zdGF0ZS5zb3J0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdGF0ZS5zb3J0LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IGFbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gYi5wbHVnaW4gJiYgYi5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYi5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpICA6IGJbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihmaXJzdCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0LnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzZWNvbmQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCA+IHNlY29uZCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBzb3J0ZWRBZGRvbnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYWRkb24gPSBzb3J0ZWRBZGRvbnNbYV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0QXV0aG9yKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSBtYXRjaGVzID0gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvcikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGRlc2NyaXB0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgdmVyc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoYWRkb24pO1xyXG4gICAgICAgICAgICByZW5kZXJlZC5wdXNoKDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgey4uLnByb3BzfSByZWxvYWQ9eyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiB0aGlzLm1hbmFnZXIucmVsb2FkLmJpbmQodGhpcy5tYW5hZ2VyKX0gLz48L0Vycm9yQm91bmRhcnk+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5hbWUoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IGFkZG9uLm5hbWUpO31cclxuICAgIGdldEF1dGhvcihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiBhZGRvbi5hdXRob3IpO31cclxuICAgIGdldERlc2NyaXB0aW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldFZlcnNpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IGFkZG9uLnZlcnNpb24pO31cclxuXHJcbiAgICByZW5kZXJDaGVja1VwZGF0ZXMoKXtcclxuICAgICAgICBpZighd2luZG93LlplcmVzUGx1Z2luTGlicmFyeSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKCF3aW5kb3cuUGx1Z2luVXBkYXRlcylyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCAhPT0gXCJmdW5jdGlvblwiKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYoIXRoaXMuaXNQbHVnaW5zKXJldHVybiBudWxsXHJcblxyXG4gICAgICAgIHJldHVybiA8VG9vbHRpcFdyYXAgdGV4dD1cIkNoZWNrcyBmb3IgdXBkYXRlcyBvZiBwbHVnaW5zIHRoYXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFJpZ2h0LWNsaWNrIGZvciBhIGxpc3QuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luTGVmdDogXCIxMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cImZpbGxlZFwiIHNpemU9XCJtaW5cIiBob3ZlckNvbG9yPVwiZGVmYXVsdFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIlBsdWdpbiB1cGRhdGUgY2hlY2sgaW4gcHJvZ3Jlc3MuXCIsIHt0eXBlOiBcImluZm9cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBjb21wbGV0ZS5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfX0gd3JhcHBlcj17ZmFsc2V9IGRpc2FibGVkPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIFVwZGF0ZXNcclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByZWZyZXNoSWNvbiA9IDxUb29sdGlwIGNvbG9yPVwiYmxhY2tcIiBwb3NpdGlvbj1cInRvcFwiIHRleHQ9XCJSZWxvYWQgTGlzdFwiPlxyXG4gICAgICAgICAgICB7KHByb3BzKSA9PiBcclxuICAgICAgICAgICAgPFJlbG9hZEljb24gey4uLnByb3BzfSBjbGFzc05hbWU9XCJiZC1pY29uIGJkLXJlbG9hZCBiZC1yZWxvYWQtaGVhZGVyXCIgc2l6ZT1cIjE4cHhcIiBvbkNsaWNrPXthc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BsdWdpbnMpIHBsdWdpbk1vZHVsZS51cGRhdGVQbHVnaW5MaXN0KCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoZW1lTW9kdWxlLnVwZGF0ZVRoZW1lTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICB9PC9Ub29sdGlwPjtcclxuICAgICAgICBjb25zdCBhZGRvbkNhcmRzID0gdGhpcy5nZXRBZGRvbnMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxDb250ZW50Q29sdW1uIHRpdGxlPXtgJHt0aGlzLnByb3BzLnR5cGUudG9VcHBlckNhc2UoKX3igJQke2FkZG9uQ2FyZHMubGVuZ3RofWB9PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjbGFzc05hbWU9XCJiZC1idXR0b24gYmQtcGZidG5cIiBvbkNsaWNrPXt0aGlzLm9wZW5Gb2xkZXIuYmluZCh0aGlzKX0+T3BlbiB7dGhpcy5pc1BsdWdpbnMgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwifSBGb2xkZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAge3RoaXMucmVuZGVyQ2hlY2tVcGRhdGVzKCl9XHJcbiAgICAgICAgICAgIHshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgcmVmcmVzaEljb259XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHMgYmQtYWRkb24tY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgIDxTZWFyY2ggb25DaGFuZ2U9e3RoaXMuc2VhcmNofSBwbGFjZWhvbGRlcj17YFNlYXJjaCAke3RoaXMucHJvcHMudHlwZX0uLi5gfSAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPlNvcnQgYnk6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuc29ydE9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnNvcnR9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+T3JkZXI6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuZGlyZWN0aW9uc30gb25DaGFuZ2U9e3RoaXMucmV2ZXJzZX0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmRhLXNsaXN0IGJkLWFkZG9uLWxpc3RcIj57YWRkb25DYXJkc308L2Rpdj5cclxuICAgICAgICA8L0NvbnRlbnRDb2x1bW4+XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ2FyZExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENhcmRMaXN0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCRExvZ28gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7aGVpZ2h0OiBcIjEwMCVcIiwgd2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ28gXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHtmaWxsUnVsZTogXCJldmVub2RkXCIsIGNsaXBSdWxlOiBcImV2ZW5vZGRcIiwgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLCBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwifSwgdmlld0JveDogXCIwIDAgMjAwMCAyMDAwXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtZXRhZGF0YVwiLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cxXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIyMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjE1XCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMjU1LDI1NSwyNTUsMC4xNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93M1wifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MylcIn0sIGQ6IFwiTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaXCIsIGZpbGw6IFwiIzE3MTcxN1wiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cyKVwifSwgZDogXCJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWlwiLCBmaWxsOiBcIiMzRTgyRTVcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MSlcIn0sIGQ6IFwiTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWlwiLCBmaWxsOiBcIiNGRkZGRkZcIiwgb3BhY2l0eTogXCIxXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ2hlY2tib3ggZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwibGlcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3ggXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveCwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtaW5uZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hJbm5lcilbMF0uY2hlY2tib3hJbm5lcn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveEVsZW1lbnQsIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZCwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcImNoZWNrYm94XCJ9KSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCAhdGhpcy5zdGF0ZS5jaGVja2VkKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgY2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IEFycm93IGZyb20gXCIuLi9pY29ucy9kb3duYXJyb3dcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtvcGVuOiBmYWxzZSwgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUgfHwgdGhpcy5wcm9wcy5vcHRpb25zWzBdLnZhbHVlfTtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dNZW51ID0gdGhpcy5zaG93TWVudS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGlkZU1lbnUgPSB0aGlzLmhpZGVNZW51LmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd01lbnUoZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IHRydWV9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTWVudSgpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiBmYWxzZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWV9KTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGVkKCkge3JldHVybiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT0gdGhpcy5zdGF0ZS52YWx1ZSk7fVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcHQgPT4gXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdC1vcHRpb24ke3NlbGVjdGVkLnZhbHVlID09IG9wdC52YWx1ZSA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWB9IG9uQ2xpY2s9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzLCBvcHQudmFsdWUpfT57b3B0LmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLnByb3BzLnN0eWxlID09IFwidHJhbnNwYXJlbnRcIiA/IFwiIGJkLXNlbGVjdC10cmFuc3BhcmVudFwiIDogXCJcIjtcclxuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLnN0YXRlLm9wZW4gPyBcIiBtZW51LW9wZW5cIiA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcFwiPlxyXG4vLyA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57dGhpcy5wcm9wcy5sYWJlbH08L2xhYmVsPlxyXG4vLyA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuLy8gICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWNvbnRyb2xzXCI+XHJcbi8vICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuLy8gICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuLy8gICAgIDwvZGl2PlxyXG4vLyA8L2Rpdj5cclxuLy8ge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbi8vIDwvZGl2PjsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwiLi4vaWNvbnMvc2VhcmNoXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlYXJjaC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfSBvbktleURvd249e3RoaXMucHJvcHMub25LZXlEb3dufSB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImJkLXNlYXJjaFwiIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfSBtYXhMZW5ndGg9XCI1MFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9O1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Td2l0Y2ggb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLmNoZWNrZWR9IC8+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NvbnRlbnRDb2x1bW4gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgZGlzcGxheU5hbWUoKSB7cmV0dXJuIFwiQ29udGVudENvbHVtblwiO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9sZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5wcm9wcy50aXRsZSA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSwgdGhpcy5wcm9wcy50aXRsZSkgOiBudWxsXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uICsgXCIgXCIrY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsIHN0eWxlOiB7cGFkZGluZzogXCI2MHB4IDQwcHggMHB4XCJ9fSxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcbmltcG9ydCBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZnJvbSBcIi4vY3NzRWRpdG9yRGV0YWNoZWRcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnByb3BzLmxpbmVzID0gMDtcclxuICAgICAgICBzZWxmLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHNlbGYuYXR0YWNoID0gc2VsZi5hdHRhY2guYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLmRldGFjaGVkRWRpdG9yID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCwge2F0dGFjaDogc2VsZi5hdHRhY2h9KTtcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2ggPSBzZWxmLmRldGFjaC5iaW5kKHNlbGYpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogdGhpcy5wcm9wcy5kZXRhY2hlZCB8fCBCRFYyLmVkaXRvckRldGFjaGVkXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL21vbm9rYWlcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5kZXRhY2hlZCAmJiAhc2VsZi5zdGF0ZS5kZXRhY2hlZCkge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5kZXRhY2hlZFJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb2RlTWlycm9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxyXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNzcygpIHtcclxuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcclxuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGNjc3MgPSBhdG9iKF9jY3NzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgY29uc3Qge2RldGFjaGVkfSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJlZGl0b3ItZGV0YWNoZWRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaDNcIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRWRpdG9yIERldGFjaGVkXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICFkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImRldGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImhlbHAtdGV4dFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlc3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIitcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiLFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGFyZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoYXJnKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZXRhY2hcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBidG9hKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkcm9vdCA9IHNlbGYuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIGlmICghZHJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gYXRvYihfY2Nzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjY3NzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJkLWRldGFjaGVkLWNzcy1lZGl0b3JcIiwgaWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1lZGl0b3JcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWlubmVycGFuZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiBzZWxmLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiYXR0YWNoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gYXR0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImF0dGFjaFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKERPTS5xdWVyeShcIiNlZGl0b3ItZGV0YWNoZWRcIikpIHNlbGYucHJvcHMuYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5yb290KTtcclxuICAgICAgICAgICAgICAgIHNlbGYucm9vdC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDc3MoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDc3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIGJ0b2EodGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRFcnJvckJvdW5kYXJ5IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSB7aGFzRXJyb3I6IGZhbHNlfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRDYXRjaCgpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7aGFzRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwicmVhY3QtZXJyb3JcIn0sIFwiQ29tcG9uZW50IEVycm9yXCIpOyAgXHJcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuOyBcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBCREVycm9yQm91bmRhcnkucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiLz48cGF0aCBkPVwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3duQXJyb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xMiA5LjI5TDEyIDEzLjE3bDMuODgtMy44OGMuMzktLjM5IDEuMDItLjM5IDEuNDEgMCAuMzkuMzkuMzkgMS4wMiAwIDEuNDFsLTQuNTkgNC41OWMtLjM5LjM5LTEuMDIuMzktMS40MSAwTDYuNyAxMC43Yy0uMzktLjM5LS4zOS0xLjAyIDAtMS40MS4zOS0uMzggMS4wMy0uMzkgMS40MiAwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJ7LyogPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ3aGl0ZVwiIHdpZHRoPVwiMThweFwiIGhlaWdodD1cIjE4cHhcIj5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbjwvc3ZnPiAqL31cclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaXN0b3J5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMThweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbiAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luVG9wNjApWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZSltYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiXHJcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi4vbW9kdWxlcy9kaXN0YW50XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5sZXQgVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QcmVzZW5jZVNldHRpbmdzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpIHx8IGRlZmF1bHRSUEMsXHJcbiAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlldyA9IG51bGxcclxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMgPSBuZXcgU2V0KClcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVXaGVuRmV0Y2hlZChjb21wKXtcclxuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5hZGQoY29tcClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlKHNldHRpbmcsIHZhbHVlKXtcclxuICAgICAgICBsZXQgZGVmYXVsdFNldHRpbmcgPSBSUENQcm9wcy5maW5kKGUgPT4gZS5pZCA9PT0gc2V0dGluZy5wcm9wcy5pZClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xyXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRTZXR0aW5nLmlkXTogISF2YWx1ZSA/IHZhbHVlIDogbnVsbFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLnN0YXRlLmFzc2V0c1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYoc2V0dGluZy5wcm9wcy5pZCA9PT0gXCJhcHBsaWNhdGlvbl9pZFwiKXtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcclxuICAgICAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5zZXQoc2V0dGluZ3NSUEMpXHJcbiAgICB9XHJcblxyXG4gICAgZmV0Y2hBc3NldHMoKXtcclxuICAgICAgICBpZih0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpe1xyXG4gICAgICAgICAgICBsZXQgYXBwID0gdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkICE9PSBhcHApe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gdHJ1ZVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5mZXRjaEFzc2V0cyh0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpXHJcbiAgICAgICAgLnRoZW4oYXNzZXRzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IE9iamVjdC5rZXlzKGFzc2V0cykubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NldCA9IGFzc2V0c1trXVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhc3NldC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXNzZXQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYXNzZXQudHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJldmlldyhkYXRhKXtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzIHx8IChWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzR3JvdXAgdGl0bGU9XCJSaWNoUHJlc2VuY2UgU2V0dGluZ3NcIiBzZXR0aW5ncz17dGhpcy5wcm9wcy5zZXR0aW5nc30gb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9Lz4sXHJcbiAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz4sXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUmljaFByZXNlbmNlXCIvPixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIHsvKiogb3B0aW9ucyAqL31cclxuICAgICAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb21wb25lbnRzfVxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wIC8+XHJcbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlByZXZpZXdcIi8+XHJcbiAgICAgICAgICAgICAgICB7LyoqIHByZXZpZXcgKi99XHJcbiAgICAgICAgICAgICAgICA8UnBjUHJldmlldyBzZXR0aW5ncz17dGhpc30vPlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXttYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PjwvZGl2PixcclxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbkNsaWNrPXt3aW5kb3cub2hnb2RvaGZ1Y2t9PlxyXG4gICAgICAgICAgICAgICAgT2ggZ29kIE9oIGZ1Y2tcclxuICAgICAgICAgICAgPC9idXR0b24+LFxyXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUxrWWE3cnBzX2c0XCIpXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgU2VlID8gSSBwdWxsZWQgYSBsaXRsZSBzbmVha3kgb24geWFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zQ29tcG9uZW50cygpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zQ29tcG9uZW50cyB8fCAodGhpcy5fb3B0aW9uc0NvbXBvbmVudHMgPSBSUENQcm9wcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGUudHlwZSA9PT0gXCJ0ZXh0XCIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dFRleHQgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5cclxuICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IFs8SW5wdXROdW1iZXIgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5dLypcclxuICAgICAgICAgICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheS51bnNoaWZ0KDxEaXNjb3JkQnV0dG9uIHRpdGxlPVwiQ29weSBDdXJyZW50IFRpbWVzdGFtcFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gLz4pXHJcbiAgICAgICAgICAgICAgICB9Ki9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVxyXG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwiY2hvaWNlXCIpe1xyXG4gICAgICAgICAgICAgICAgaWYoW1wiYXNzZXRzLnNtYWxsXCIsIFwiYXNzZXRzLmxhcmdlXCJdLmluY2x1ZGVzKGUuaWQpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0Q2hvaWNlIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfSBjaG9pY2VzPXtbe3ZhbHVlOiBcIm5vbmVcIiwgbGFiZWw6IFwiTm8gYXNzZXRzXCJ9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKX0vPlxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5rbm93biBjaG9pY2UuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG59XHJcbmNvbnN0IFJQQ1Byb3BzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkFwcGxpY2F0aW9uIElEXCIsXHJcbiAgICAgICAgaWQ6IFwiYXBwbGljYXRpb25faWRcIixcclxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIk5hbWVcIixcclxuICAgICAgICBpZDogXCJuYW1lXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiRGV0YWlsc1wiLFxyXG4gICAgICAgIGlkOiBcImRldGFpbHNcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJCcm93c2luZyBEaXNjb3JkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiU3RhdGVcIixcclxuICAgICAgICBpZDogXCJzdGF0ZVwiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkxpZ2h0Y29yZCBDbGllbnRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJUaW1lc3RhbXAgU3RhcnRcIixcclxuICAgICAgICBpZDogXCJ0aW1lc3RhbXBzLnN0YXJ0XCIsXHJcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICBnZXQgcGxhY2Vob2xkZXIoKXtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkxhcmdlQXNzZXRcIixcclxuICAgICAgICBpZDogXCJhc3NldHMubGFyZ2VcIixcclxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlNtYWxsQXNzZXRcIixcclxuICAgICAgICBpZDogXCJhc3NldHMuc21hbGxcIixcclxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXHJcbiAgICB9LFxyXG5dXHJcblxyXG5sZXQgaW5wdXRUZXh0TW9kdWxlc1xyXG5jbGFzcyBJbnB1dFRleHQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgaWYoaW5wdXRUZXh0TW9kdWxlcyAmJiBpbnB1dFRleHRNb2R1bGVzWzBdKXJldHVybiBpbnB1dFRleHRNb2R1bGVzXHJcbiAgICAgICAgcmV0dXJuIGlucHV0VGV4dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlucHV0ID0gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlRleHRJbnB1dCBwbGFjZWhvbGRlcj17c2V0dGluZy5wbGFjZWhvbGRlcn0gbmFtZT17c2V0dGluZy5pZH0gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH19IHR5cGU9XCJ0ZXh0XCIvPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICAgICAgaW5wdXRNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUyLFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IElucHV0TnVtYmVyTW9kdWxlc1xyXG5jbGFzcyBJbnB1dE51bWJlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gSW5wdXROdW1iZXJNb2R1bGVzIHx8IChJbnB1dE51bWJlck1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdLFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSB0eXBlPVwibnVtYmVyXCIgb25DaGFuZ2U9eyh2YWx1ZSwgbmFtZSwgaW5wdXQpID0+IHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZF0rL2csIFwiXCIpXHJcbiAgICAgICAgICAgIGlmKHZhbHVlID09IHRoaXMuc3RhdGUuZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRWYWx1ZSh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH19IHR5cGU9XCJ0ZXh0XCIvPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XHJcbiAgICAgICAgICAgICAgICB7c2V0dGluZy5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIgPyBcclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICB9fSBjb2xvcj1cImJyYW5kXCI+Q29weSBjdXJyZW50IHRpbWVzdGFtcDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+IDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBJbnB1dENob2ljZU1vZHVsZXNcclxuY2xhc3MgSW5wdXRDaG9pY2UgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdID8gXCJhc3NldC1cIit0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA6IFwibm9uZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci51cGRhdGVXaGVuRmV0Y2hlZCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGRhdGEpe1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGEudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlID09PSBcIm5vbmVcIiA/IG51bGwgOiB2YWx1ZS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxyXG4gICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhID09PSBcIm5vbmVcIiA/IG51bGwgOiB0aGlzLnN0YXRlLmRhdGEucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIElucHV0Q2hvaWNlTW9kdWxlcyB8fCAoSW5wdXRDaG9pY2VNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb3dNb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuYXNzZXRzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiK2UuaWQsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBvcHRpb25zLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICB2YWx1ZTogXCJub25lXCIsXHJcbiAgICAgICAgICAgIGxhYmVsOiBcIk5vIGFzc2V0c1wiXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvcHRpb25zPXtvcHRpb25zfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSAvPlxyXG4gICAgICAgICAgICAgICAgey8qPFNlbGVjdCB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSBvcHRpb25zPXtvcHRpb25zfS8+Ki99XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgRGl2aWRlck1vZHVsZXMgPSBbXVxyXG5jbGFzcyBEaXZpZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBEaXZpZGVyTW9kdWxlcyYmRGl2aWRlck1vZHVsZXNbMF0gPyBEaXZpZGVyTW9kdWxlcyA6IChEaXZpZGVyTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlciAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGRpdmlkZXIsXHJcbiAgICAgICAgICAgIGRpdmlkZXJEZWZhdWx0XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YCR7ZGl2aWRlci5kaXZpZGVyfSAke2RpdmlkZXJEZWZhdWx0LmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBEaXNjb3JkQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9IGNvbG9yPVwiYnJhbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgUnBjUHJldmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGFicyA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMucHJvcHMuc2V0dGluZ3MucHJldmlldyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VUYWIodGFiKXtcclxuICAgICAgICBsZXQgYW5jaWVudFRhYiA9IHRoaXMuc3RhdGUuYWN0aXZlXHJcbiAgICAgICAgaWYoYW5jaWVudFRhYiA9PT0gdGFiLnByb3BzLmlkKXJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0YWIuc2V0QWN0aXZlKHRydWUpXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogdGFiLnByb3BzLmlkXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiV3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYm5hdlwiIHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiRnVsbCBQcm9maWxlXCIgaWQ9XCJwcm9maWxlXCIvPlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIlVzZXIgUG9wb3V0XCIgaWQ9XCJwb3BvdXRcIi8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8UHJlc2VuY2VFcnJvckNhdGNoZXIgcHJldmlldz17dGhpcy5wcmV2aWV3fSBzdGF0ZT17dGhpcy5zdGF0ZS5ycGN9IHByb3BzPXt7cHJldmlldzogdGhpc319IGtleT17dGhpcy5zdGF0ZS5hY3RpdmV9IC8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfSAgIFxyXG5cclxuICAgIGlzQWN0aXZlKHRhYil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZlID09PSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJldmlldygpe1xyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlID09PSBcInByb2ZpbGVcIilyZXR1cm4gUHJvZmlsZVxyXG4gICAgICAgIHJldHVybiBQb3BvdXRcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgVGFiIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wcy5wcmV2aWV3LnRhYnMucHVzaCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogISFpc0FjdGl2ZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGBsYy1uYXZJdGVtYFxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlKXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUFjdGl2ZWBcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUluYWN0aXZlYFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMucHJldmlldy5jaGFuZ2VUYWIodGhpcylcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgZW1wdHlDbGFzc2VzXHJcbmNsYXNzIFByZXNlbmNlRXJyb3JDYXRjaGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbXBvbmVudERpZENhdGNoKGVyciwgZXJySW5mbyl7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyckluZm8pXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGVycm9yOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlKXtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmVycm9yKXtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IG5ldyB0aGlzLnByb3BzLnByZXZpZXcodGhpcy5wcm9wcy5wcm9wcylcclxuICAgICAgICAgICAgICAgIHByZXZpZXcuc2V0U3RhdGUodGhpcy5wcm9wcy5zdGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aWV3LnJlbmRlcigpXHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBlbXB0eUNsYXNzZXMgPSBlbXB0eUNsYXNzZXMgfHwgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5lbXB0eVN0YXRlSW1hZ2UpXHJcbiAgICAgICAgICAgIGlmKCFlbXB0eUNsYXNzZXMpe1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogXCIyMHB4XCJcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUltYWdlfSBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUhlYWRlcn0+QW4gZXJyb3Igb2NjdXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVTdWJ0ZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy4gSm9pbiBvdXIgwq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtgJHtCRFYyLmFuY2hvckNsYXNzZXMuYW5jaG9yfSAke0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWB9IHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD17MH0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5qb2luTEMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgc2VydmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgwq0gZm9yIGhlbHAuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxubGV0IHBvcG91dE1vZHVsZXNcclxubGV0IFVzZXJQb3BvdXRDb21wb25lbnRcclxubGV0IFBvcG91dFByb3BzXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwb3BvdXRNb2R1bGVzIHx8IChwb3BvdXRNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkZsdXhDb250YWluZXIoRm9yd2FyZFJlZihTdWJzY3JpYmVHdWlsZE1lbWJlcnNDb250YWluZXIoVXNlclBvcG91dCkpKVwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXtcclxuICAgICAgICAgICAgaWYoIVVzZXJQb3BvdXQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0IGNvbXBvbmVudC5gKVxyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQb3BvdXQuZGVmYXVsdCh7dXNlcklkOiB1c2VyLmlkLCBndWlsZElkOiBudWxsLCBjaGFubmVsSWQ6IG51bGwsIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWV9KS5yZW5kZXIoKVxyXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IHJlbmRlcjEudHlwZS5yZW5kZXIoUG9wb3V0UHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSBuZXcgcmVuZGVyMi50eXBlKHJlbmRlcjIucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXRDb21wb25lbnQgPSByZW5kZXIzLnR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIVVzZXJQb3BvdXRDb21wb25lbnQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0Q29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQb3BvdXRQcm9wcyA9IG5ldyBVc2VyUG9wb3V0LmRlZmF1bHQoe3VzZXJJZDogdXNlci5pZCwgZ3VpbGRJZDogbnVsbCwgY2hhbm5lbElkOiBudWxsLCBkaXNhYmxlVXNlclByb2ZpbGVMaW5rOiB0cnVlfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc3RvcCBwcm9wYWdhdGlvbiBzaGl0LlxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IDxkaXYgey4uLndpbmRvdy5MaWdodGNvcmQuQXBpLl8uZXhjbHVkZVByb3BlcnRpZXMocG9wb3V0LnByb3BzLCBbXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiXSl9IC8+XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXQgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAge2NvbnRhaW5lcn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHByb2ZpbGVNb2R1bGVzXHJcbmxldCBVc2VyUHJvZmlsZUNvbXBvbmVudFxyXG5sZXQgUHJvZmlsZVByb3BzXHJcbmxldCBjb25uZWN0ZWRQcm9maWxlU3RvcmVcclxuY2xhc3MgUHJvZmlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwcm9maWxlTW9kdWxlcyB8fCAocHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclByb2ZpbGVcIiksXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBVc2VyUHJvZmlsZSxcclxuICAgICAgICAgICAgdXNlck1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMSA9IG5ldyBVc2VyUHJvZmlsZS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJcclxuICAgICAgICAgICAgfSkucmVuZGVyKClcclxuICAgICAgICAgICAgY29ubmVjdGVkUHJvZmlsZVN0b3JlID0gcmVuZGVyMS50eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjIgPSBuZXcgcmVuZGVyMS50eXBlKHJlbmRlcjEucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSByZW5kZXIyLnR5cGUucmVuZGVyKHJlbmRlcjIucHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjQgPSBuZXcgcmVuZGVyMy50eXBlKHJlbmRlcjMucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQcm9maWxlQ29tcG9uZW50ID0gcmVuZGVyNC50eXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQcm9maWxlQ29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQcm9maWxlUHJvcHMgPSBuZXcgY29ubmVjdGVkUHJvZmlsZVN0b3JlKHtcclxuICAgICAgICAgICAgdXNlcjogdXNlcixcclxuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHt9XHJcbiAgICAgICAgfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwcm9maWxlID0gbmV3IFVzZXJQcm9maWxlQ29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFByb2ZpbGVQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIHByb2ZpbGUucHJvcHMuc3R5bGUgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcImF1dG9cIlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiIGxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIHtwcm9maWxlfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcbi8qXHJcbmxldCBwb3BvdXRNb2R1bGVcclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHsgLy8gVE9ETzogUHJvYmFibHkgdXNlIGludGVybmFsIENvbXBvbmVudHMgaW5zdGVhZCBvZiBtYWtpbmcgaXQgZnJvbSBzY3JhdGNoLlxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gcG9wb3V0TW9kdWxlIHx8IChwb3BvdXRNb2R1bGUgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ib3QpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hY3Rpdml0eVVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tdXRlZCAmJiBlLndyYXBwZXIgJiYgZS5iYXNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudGhlbWVHaG9zdEhhaXJsaW5lQ2hhbm5lbHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBybyAmJiBlLmlubGluZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcylbMF0uZGVmYXVsdC5NZXNzYWdlcyxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHByb3RpcE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlMSxcclxuICAgICAgICAgICAgTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIGF2YXRhck1vZHVsZTEsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGUxXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZTEuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VVc2VyUG9wb3V0fSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrVXNlclBvcG91dCA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVVzZXJQb3BvdXR9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdXNlclBvcG91dCBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VyUG9wb3V0fSByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyUGxheWluZ30+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS52ZXJ0aWNhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5Q2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5oZWFkZXJUb3B9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFyV3JhcHBlck5vcm1hbH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YXZhdGFyTW9kdWxlMX0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFySGludH0gdmlld0JveD1cIjAgMCA4MCA4MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBtYXNrPVwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTgwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJIaW50SW5uZXJ9PntNZXNzYWdlcy5WSUVXX1BST0ZJTEV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJUZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnTm9OaWNrbmFtZX0gJHtuYW1lVGFnTW9kdWxlMS5uYW1lVGFnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YCR7bmFtZVRhZ01vZHVsZTEudXNlcm5hbWV9ICR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnVXNlcm5hbWVOb05pY2tuYW1lfWB9Pnt1c2VyLnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+I3t1c2VyLmRpc2NyaW1pbmF0b3J9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVVzZXJQb3BvdXR9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmhlYWRlclRleHROb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTJ9YH0+e01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmJvZHlOb3JtYWx9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzVXNlclBvcG91dCA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5uYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eU5hbWV9PntkYXRhLm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLmRldGFpbHMpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnN0YXRlfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPXtkYXRhLnN0YXRlfT57ZGF0YS5zdGF0ZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZUNvbXBvbmVudCA9IHRpbWVzdGFtcFJlbmRlcihUaW1lc3RhbXAsIE1lc3NhZ2VzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Jvb3RNb2R1bGUxLmJvZHl9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9ICR7cm9vdE1vZHVsZTEuYm9keUlubmVyfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5VGl0bGV9PntNZXNzYWdlcy5OT1RFfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtub3RlTW9kdWxlMS5ub3RlfSAke3Jvb3RNb2R1bGUxLm5vdGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcGxhY2Vob2xkZXI9e01lc3NhZ2VzLk5PVEVfUExBQ0VIT0xERVJ9IG1heGxlbmd0aD1cIjI1NlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjM2cHhcIn19IGRpc2FibGVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5mb290ZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb3RpcH0gJHtwcm90aXBNb2R1bGUxLmlubGluZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHtwcm90aXBNb2R1bGUxLnByb30gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfSBzdHlsZT17e2NvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCJ9fT57TWVzc2FnZXMuUElOTkVEX01FU1NBR0VTX1BST19USVB9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Y29sb3JNb2R1bGUxLmNvbG9yU3RhbmRhcmR9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fSAke3Byb3RpcE1vZHVsZTEudGlwfWB9PntNZXNzYWdlcy5DT05URVhUX01FTlVfSElOVH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBTdGF0dXNNb2R1bGVzXHJcbmNsYXNzIFN0YXR1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBTdGF0dXNNb2R1bGVzIHx8IChTdGF0dXNNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRQcmVzZW5jZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGdldFByZXNlbmNlLFxyXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCBzdGF0dXMgPSBnZXRQcmVzZW5jZS5kZWZhdWx0LmdldFByZXNlbmNlKCkuc3RhdHVzXHJcbiAgICAgICAgaWYoc3RhdHVzID09PSBcImludmlzaWJsZVwiKXN0YXR1cyA9IFwib2ZmbGluZVwiXHJcbiAgICAgICAgcmV0dXJuIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHg9XCI2MFwiIHk9XCI2MFwiIGZpbGw9XCIjZmZmZmZmXCIgbWFzaz17YHVybCgjc3ZnLW1hc2stc3RhdHVzLSR7c3RhdHVzfSlgfSBjbGFzc05hbWU9e3BvaW50ZXJFdmVudHN9PjwvcmVjdD5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHRpbWVzdGFtcENsYXNzID0gXCJcIlxyXG5cclxubGV0IFByb2ZpbGVNb2R1bGVzXHJcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgeyAvLyBUT0RPOiBQcm9iYWJseSB1c2UgaW50ZXJuYWwgQ29tcG9uZW50cyBpbnN0ZWFkIG9mIG1ha2luZyBpdCBmcm9tIHNjcmF0Y2guXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBQcm9maWxlTW9kdWxlcyB8fCAoUHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXggJiYgZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmJvdClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmFjdGl2aXR5UHJvZmlsZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm11dGVkICYmIGUud3JhcHBlciAmJiBlLmJhc2UpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlckZhZGUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzKVswXS5kZWZhdWx0Lk1lc3NhZ2VzXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcclxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlfSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVByb2ZpbGV9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduU3RyZXRjaH0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEucm9vdH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnRvcFNlY3Rpb25QbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YH0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVySW5mb31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5uYW1lVGFnfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtyb290TW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS51c2VybmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtyb290TW9kdWxlMS5kaXNjcmltaW5hdG9yfT4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtmbGV4TW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnblN0cmV0Y2h9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZXN9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlcyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJGaWxsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVByb2ZpbGV9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzUHJvZmlsZSA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5fT5cclxuXHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcblx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9PlxyXG5cdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbkhlYWRlcn0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEubm90ZX0gJHtub3RlTW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjQwcHhcIn19IGRpc2FibGVkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0ICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25uZWN0ZWRBY2NvdW50cyAvPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnRzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBhY2NvdW50cyA9IFtdXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF1cclxuICAgICAgICBsZXQgQWNjb3VudE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRBY2NvdW50cylbMF0uZGVmYXVsdFxyXG5cclxuICAgICAgICBsZXQgYWNjcyA9IEFjY291bnRNb2R1bGUxLmdldEFjY291bnRzKCkuZmlsdGVyKGUgPT4gZS52aXNpYmlsaXR5ID09PSAxKVxyXG4gICAgICAgIGZvcihsZXQgYWNjIG9mIGFjY3Mpe1xyXG4gICAgICAgICAgICBhY2NvdW50cy5wdXNoKDxDb25uZWN0ZWRBY2NvdW50IGFjYz17YWNjfSAvPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGFjY291bnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbn0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50c30+XHJcbiAgICAgICAgICAgICAgICAgICAge2FjY291bnRzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBmbG93ZXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBhbmNob3JNb2R1bGUxLFxyXG4gICAgICAgICAgICBTb2NpYWxDb25zdGFudHNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hbmNob3IpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXQgJiYgZS5kZWZhdWx0Lm1hcClbMF0uZGVmYXVsdFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgYWNjID0gdGhpcy5wcm9wcy5hY2NcclxuICAgICAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSlcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YH0gc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgPGltZyBhbHQ9e2BMb2dvICR7Y29uc3RhbnRzU29jaWFsLm5hbWV9YH0gY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRJY29ufSBzcmM9e2NvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXl9IC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lSW5uZXJ9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWV9PnthY2MubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIHthY2MudmVyaWZpZWQgPyAoPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyQ29udGFpbmVyfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb259YH0gc3R5bGU9e3t3aWR0aDogXCIxNnB4XCIsIGhlaWdodDogXCIxNnB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNGY1NDVjXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17Zmxvd2VyTW9kdWxlMS5jaGlsZENvbnRhaW5lcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTUuMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwiIGZpbGw9XCIjZmZmZmZmXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9e2Ake2FuY2hvck1vZHVsZTEuYW5jaG9yfSAke2FuY2hvck1vZHVsZTEuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE9wZW5JY29ufSB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IFVzZXJGbGFncyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLlVzZXJGbGFncylbMF0uVXNlckZsYWdzXHJcbiAgICAgICAgbGV0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBbXVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIGluIFVzZXJGbGFncyl7XHJcbiAgICAgICAgICAgIGlmKHVzZXIuaGFzRmxhZyhVc2VyRmxhZ3NbZmxhZ05hbWVdKSlzZXJpYWxpemVkLnB1c2goZmxhZ05hbWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIG9mIHNlcmlhbGl6ZWQpe1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoYWJsZSA9IGBwcm9maWxlQmFkZ2Uke2ZsYWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIiBcIikuc3BsaXQoXCIgXCIpLm1hcChlID0+IGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWBcclxuICAgICAgICAgICAgc2VhcmNoYWJsZSA9IHNlYXJjaGFibGUucmVwbGFjZShcIkh5cGVzcXVhZE9ubGluZVwiLCBcIkh5cGVTcXVhZE9ubGluZVwiKVxyXG4gICAgICAgICAgICBpZighcm9vdE1vZHVsZVtzZWFyY2hhYmxlXSljb250aW51ZVxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT17c2VhcmNoYWJsZX0vPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbil7XHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKDxCYWRnZSBuYW1lPVwicHJvZmlsZUJhZGdlUHJlbWl1bVwiIC8+KVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlV3JhcHBlcn0+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZX0gJHtyb290TW9kdWxlMVt0aGlzLnByb3BzLm5hbWVdfWB9PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRpbWVzdGFtcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RpbWVzdGFtcENsYXNzfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSovIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0xheWVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5rZXl1cExpc3RlbmVyID0gdGhpcy5rZXl1cExpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAga2V5dXBMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLnJlZnMucm9vdC5wYXJlbnROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqIHByb2dyZXNzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMua2V5dXBMaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaXNOb2RlID0gRE9NLnF1ZXJ5KGAjJHt0aGlzLnByb3BzLmlkfWApO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MS4xIC0gMC4xICogKDEgLSBwcm9ncmVzcyl9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBET00ucXVlcnkoXCIucHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LnJlbW92ZShcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqIHByb2dyZXNzICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiW2NsYXNzKj1cXFwibGF5ZXItXFxcIl1cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LmFkZChcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqICgxIC0gcHJvZ3Jlc3MpICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gMSAtIHByb2dyZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwibGF5ZXIgYmQtbGF5ZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLCBpZDogdGhpcy5wcm9wcy5pZCwgcmVmOiBcInJvb3RcIiwgc3R5bGU6IHtvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IFwic2NhbGUoMS4xKSB0cmFuc2xhdGVaKDBweClcIn19LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uL3Rvb2xzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBUYWJCYXJTZXBhcmF0b3IgZnJvbSBcIi4uL3RhYkJhclNlcGFyYXRvclwiO1xyXG5pbXBvcnQgVGFiQmFySGVhZGVyIGZyb20gXCIuLi90YWJCYXJIZWFkZXJcIjtcclxuaW1wb3J0IFRhYkJhckl0ZW0gZnJvbSBcIi4uL3RhYkJhckl0ZW1cIjtcclxuXHJcbmltcG9ydCBTZXJ2ZXJDYXJkIGZyb20gXCIuL3NlcnZlckNhcmRcIjtcclxuaW1wb3J0IFNpZGViYXJWaWV3IGZyb20gXCIuL3NpZGViYXJWaWV3XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHVibGljU2VydmVycyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5jbG9zZSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5ID0gdGhpcy5jaGFuZ2VDYXRlZ29yeS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaEtleURvd24gPSB0aGlzLnNlYXJjaEtleURvd24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbiA9IHRoaXMuY2hlY2tDb25uZWN0aW9uLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5qb2luID0gdGhpcy5qb2luLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ID0gdGhpcy5jb25uZWN0LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRHdWlsZHNcIl0pO1xyXG4gICAgICAgIHRoaXMuQXZhdGFyRGVmYXVsdHMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiXSk7XHJcbiAgICAgICAgdGhpcy5JbnZpdGVBY3Rpb25zID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7XHJcbiAgICAgICAgdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFNvcnRlZEd1aWxkc1wiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxyXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogMCxcclxuICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucHJvcHMucm9vdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKHF1ZXJ5LCBjbGVhcikge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZldGNoKGAke3NlbGYuZW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcImdldFwiXHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgYXdhaXQgcmVzLnRleHQoKVxyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gZGF0YS5yZXN1bHRzLnJlZHVjZSgoYXJyLCBzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHNlcnZlci5qb2luZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAvLyBhcnIucHVzaCg8U2VydmVyQ2FyZCBzZXJ2ZXI9e3NlcnZlcn0gam9pbj17c2VsZi5qb2lufS8+KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgICAgIH0sIFtdKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIHNlcnZlcnMgPSBzZWxmLnN0YXRlLnNlcnZlcnMuY29uY2F0KHNlcnZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9zZXJ2ZXJzLnVuc2hpZnQoc2VsZi5iZFNlcnZlcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlbmQgPSBkYXRhLnNpemUgKyBkYXRhLmZyb207XHJcbiAgICAgICAgICAgIGRhdGEubmV4dCA9IGA/ZnJvbT0ke2VuZH1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSBkYXRhLm5leHQgKz0gYCZ0ZXJtPSR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkpIGRhdGEubmV4dCArPSBgJmNhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoZW5kID49IGRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEudG90YWw7XHJcbiAgICAgICAgICAgICAgICBkYXRhLm5leHQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBgU2hvd2luZyAxLSR7ZW5kfSBvZiAke2RhdGEudG90YWx9IHJlc3VsdHMgaW4gJHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIHRpdGxlICs9IGAgZm9yICR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgc2VydmVyczogc2VydmVycyxcclxuICAgICAgICAgICAgICAgIG5leHQ6IGRhdGEubmV4dFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhzZWxmKTtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVmcy5zYnYucmVmcy5jb250ZW50U2Nyb2xsZXIuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIGxvYWQgc2VydmVycy4gQ2hlY2sgY29uc29sZSBmb3IgZGV0YWlsc1wiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgam9pbihzZXJ2ZXJDYXJkKSB7XHJcbiAgICAgICAgaWYgKHNlcnZlckNhcmQucHJvcHMucGlubmVkKSByZXR1cm4gdGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShzZXJ2ZXJDYXJkLnByb3BzLmludml0ZV9jb2RlKTtcclxuXHJcbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7c2VydmVyQ2FyZC5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcn1gLHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2VydmVyQ2FyZC5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZi53aW5kb3dPcHRpb25zO1xyXG4gICAgICAgIG9wdGlvbnMueCA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblggKyB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBvcHRpb25zLndpZHRoIC8gMik7XHJcbiAgICAgICAgb3B0aW9ucy55ID0gTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWSArIHdpbmRvdy5pbm5lckhlaWdodCAvIDIgLSBvcHRpb25zLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cgPSBuZXcgKHdpbmRvdy5yZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3cpKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0P3Njb3Blcz1ndWlsZHMuam9pbiZwcmV2aW91c1VybD1odHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIjtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cud2ViQ29udGVudHMub24oXCJkaWQtbmF2aWdhdGVcIiwgKGV2ZW50LCB1cmwpID0+IHtcclxuICAgICAgICAgICAgaWYgKHVybCAhPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiKSByZXR1cm47XHJcbiAgICAgICAgICAgIHNlbGYuam9pbldpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgICAgICBzZWxmLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdy5sb2FkVVJMKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWluaW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xyXG4gICAgICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYmRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjc1MDArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiMjAwMDArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9pY29ucy84NjAwNDc0NDk2NjkxNDA0OC8yOTJlN2Y2YmZmZjJiNzFkZmQxM2U1MDhhODU5YWVkZC53ZWJwXCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXIyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBvbmxpbmU6IFwiMzArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiNTArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgTGlnaHRjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI4NjAwNDc0NDk2NjkxNDA0OFwiLFxyXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vYXZhdGFyczMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjU2OTAwNTg/cz0yMDAmdj00XCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjdlRmZmMkFcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHRoaXMuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtzZXJ2ZXI6IHNlcnZlciwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSlcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vc2VhcmNoLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2luRW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0RW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qb2luLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb2Ase1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogMCxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMixcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclZpZXcsIHtyZWY6IFwic2J2XCJ9LCB0aGlzLmNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzaWRlYmFyOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuc2lkZWJhclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuY29udGVudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b29sczoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwicHRcIiwgcmVmOiBcInRvb2xzXCIsIG9uQ2xpY2s6IHRoaXMuY2xvc2V9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lkZWJhcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJcIiwga2V5OiBcInBzXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyIFNJREVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCIsIHN0eWxlOiB7Zm9udFNpemU6IFwiMTZweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJQdWJsaWMgU2VydmVyc1wiXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySGVhZGVyLCB7dGV4dDogXCJDYXRlZ29yaWVzXCJ9KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJJdGVtLCB7aWQ6IGluZGV4LCBvbkNsaWNrOiB0aGlzLmNoYW5nZUNhdGVnb3J5LCBrZXk6IGluZGV4LCB0ZXh0OiB2YWx1ZSwgc2VsZWN0ZWQ6IHRoaXMuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gaW5kZXh9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlcixcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRleHQtaW5wdXQgZmxleC12ZXJ0aWNhbFwiLCBzdHlsZToge3dpZHRoOiBcIjE3MnB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7cmVmOiBcInNlYXJjaGlucHV0XCIsIG9uS2V5RG93bjogdGhpcy5zZWFyY2hLZXlEb3duLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwidGV4dFwiLCBjbGFzc05hbWU6IFwiaW5wdXQgZGVmYXVsdFwiLCBwbGFjZWhvbGRlcjogXCJTZWFyY2guLi5cIiwgbWF4TGVuZ3RoOiBcIjUwXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2hLZXlEb3duKGUpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nIHx8IGUud2hpY2ggIT09IDEzKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogZS50YXJnZXQudmFsdWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgcXVlcnkgPSBgP3Rlcm09JHtlLnRhcmdldC52YWx1ZX1gO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgIT09IDApIHtcclxuICAgICAgICAgICAgcXVlcnkgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5zZWFyY2gocXVlcnksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYXRlZ29yeUJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VDYXRlZ29yeShpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICBzZWxmLnJlZnMuc2VhcmNoaW5wdXQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBpZCxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGlkID09PSAwKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKGA/Y2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tpZF19YCwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5jb25uZWN0aW9uLnN0YXRlID09PSAxKSByZXR1cm4gc2VsZi5ub3RDb25uZWN0ZWQ7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7cmVmOiBcImNvbnRlbnRcIiwga2V5OiBcInBjXCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSksXHJcbiAgICAgICAgICAgIHNlbGYuYmRTZXJ2ZXIsXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5tYXAoKHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7a2V5OiBzZXJ2ZXIuaWRlbnRpZmllciwgc2VydmVyOiBzZXJ2ZXIsIGpvaW46IHNlbGYuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUubmV4dCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO3NlbGYuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTsgc2VsZi5zZWFyY2goc2VsZi5zdGF0ZS5uZXh0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLCBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5sb2FkaW5nID8gXCJMb2FkaW5nXCIgOiBcIkxvYWQgTW9yZVwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5sZW5ndGggPiAwICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pXHJcbiAgICAgICAgKV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vdENvbm5lY3RlZCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvL3JldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwgeyB0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlIH0pO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2tleTogXCJuY2NcIiwgcmVmOiBcImNvbnRlbnRcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXHJcbiAgICAgICAgICAgICAgICBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzZWxmLmNvbm5lY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IFwiMThweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSwgc2VsZi5iZFNlcnZlclxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJhXCIsXHJcbiAgICAgICAgICAgICAgICB7aHJlZjogXCJodHRwczovL2Rpc2NvcmRzZXJ2ZXJzLmNvbVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJEaXNjb3Jkc2VydmVycy5jb21cIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCB7Y29ubmVjdGlvbn0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIGlmIChjb25uZWN0aW9uLnN0YXRlICE9PSAyKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge2NvbG9yOiBcIiNiOWJiYmVcIiwgZm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgXCJDb25uZWN0ZWQgYXM6IFwiLFxyXG4gICAgICAgICAgICAgICAgYCR7Y29ubmVjdGlvbi51c2VyLnVzZXJuYW1lfSMke2Nvbm5lY3Rpb24udXNlci5kaXNjcmltaW5hdG9yfWBcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge3BhZGRpbmc6IFwiNXB4IDEwcHggMCAxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWluSGVpZ2h0OiBcIjIwcHhcIn0sIHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wiLCBvbkNsaWNrOiBzZWxmLmNvbm5lY3R9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlY29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxufVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXJ2ZXJDYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuc2VydmVyLmljb25VcmwpIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGltYWdlRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgICBqb2luZWQ6IHRoaXMucHJvcHMuZ3VpbGRMaXN0LmluY2x1ZGVzKHRoaXMucHJvcHMuc2VydmVyLmlkZW50aWZpZXIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NlcnZlcn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGxldCBjYXJkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2FyZCAmJiBlLmNhcmRQcmltYXJ5KVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxleENoaWxkICYmIGUuX2hvcml6b250YWxSZXZlcnNlKVswXVxyXG4gICAgICAgIGxldCB3cmFwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubm9XcmFwICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWQpWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIiwgLy8gY2FyZFByaW1hcnktMUh2LXRvXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGAke2NhcmRNb2R1bGUuY2FyZH0gJHtjYXJkTW9kdWxlLmNhcmRQcmltYXJ5fSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9IGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxyXG4gICAgICAgICAgICAvLyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAvLyBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgLy8geyBjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZmxleC0xTzFHS1kgZGlyZWN0aW9uUm93LTN2M3RmRyBqdXN0aWZ5U3RhcnQtMnlJWm8wIGFsaWduU3RyZXRjaC0xaHd4TWEgbm9XcmFwLTNqeW52NlwiIH0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge3JlZjogXCJpbWdcIiwgY2xhc3NOYW1lOiBcImJkLXNlcnZlci1pbWFnZVwiLCBzcmM6IHNlcnZlci5pY29uVXJsLCBvbkVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyksIGRyYWdnYWJsZTogZmFsc2V9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuZmxleENoaWxkK1wiIGJkLXNlcnZlci1jb250ZW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwK1wiIGJkLXNlcnZlci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1uYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5tZW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgTWVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5IGJkLXNlcnZlci1kZXNjcmlwdGlvbi1jb250YWluZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBzY3JvbGxlciBiZC1zZXJ2ZXItZGVzY3JpcHRpb25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2IGJkLXNlcnZlci1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXhDaGlsZC1mYW9WVzMgYmQtc2VydmVyLXRhZ3NcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGNvbG9yR3JlZW4tMjlpQUtZXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzNhYzE1Y1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5lcnJvciAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGRpc2FibGVkLTlhRjJ1Z1wiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiNjMTNhM2FcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk5cIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCJ9LCBvbkNsaWNrOiAoKSA9PiB7dGhpcy5qb2luKCk7fX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUVycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pbigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmpvaW4odGhpcyk7XHJcbiAgICAgICAgLy90aGlzLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2Nyb2xsZXIgZnJvbSBcIi4uL3Njcm9sbGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2lkZWJhclZpZXcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NpZGViYXIsIGNvbnRlbnQsIHRvb2xzfSA9IHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aSB1aS1zdGFuZGFyZC1zaWRlYmFyLXZpZXdcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJSZWdpb24tVkZUVWtOIHNpZGViYXItcmVnaW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7a2V5OiBcInNpZGViYXJTY3JvbGxlclwiLCByZWY6IFwic2lkZWJhclNjcm9sbGVyXCIsIHNpZGViYXI6IHRydWUsIGZhZGU6IHNpZGViYXIuZmFkZSB8fCB0cnVlLCBkYXJrOiBzaWRlYmFyLmRhcmsgfHwgdHJ1ZX0sIHNpZGViYXIuY29tcG9uZW50KVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50UmVnaW9uLTNuRHVZeSBjb250ZW50LXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRUcmFuc2l0aW9uV3JhcC0zaHFPRVcgY29udGVudC10cmFuc2l0aW9uLXdyYXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcC0zWVpYZG0gY29udGVudC1yZWdpb24tc2Nyb2xsZXItd3JhcCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdC0yOE1TbjAgc2Nyb2xsZXJUcmFjay0xWklwc3ZcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyLTI2bmMxZSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlciBzY3JvbGxlclwiLCByZWY6IFwiY29udGVudFNjcm9sbGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudENvbHVtbi0yaHJJWUggY29udGVudENvbHVtbkRlZmF1bHQtMVZRa0dNIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sIGNvbnRlbnQuY29tcG9uZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLmNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUmVsb2FkSWNvbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xyXG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIiNkY2RkZGVcIixcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1yZWxvYWQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMub25DbGljayxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7d2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCJ9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6IFwibm9uZVwiLCBkOiBcIk0wIDBoMjR2MjRIMHpcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2Nyb2xsZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9zY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXlcclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXJIb3Jpem9udGFsKVswXVxyXG4gICAgICAgIGxldCBzY3JvbGxlck1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyUmVnaW9uU2Nyb2xsZXIpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9JHt0aGlzLnByb3BzLmZhZGUgPyBcIiBcIitzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlIDogXCJcIn1gO1xyXG4gICAgICAgIGxldCBzY3JvbGxlckNsYXNzID0gc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyK1wiIHNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNpZGViYXIpIHNjcm9sbGVyQ2xhc3MgKz0gYCAke3Njcm9sbGVyTW9kdWxlMi5zaWRlYmFyUmVnaW9uU2Nyb2xsZXJ9IHNpZGViYXItcmVnaW9uLXNjcm9sbGVyYFxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNvbnRlbnRDb2x1bW4pIHtcclxuICAgICAgICAgICAgc2Nyb2xsZXJDbGFzcyArPSBcIiBcIitzY3JvbGxlck1vZHVsZTIuY29udGVudFJlZ2lvblNjcm9sbGVyK1wiIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdWNrICovXHJcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXB9IGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRyYWNrfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHtjaGlsZHJlbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJ3cmFwXCIsIGNsYXNzTmFtZTogd3JhcHBlckNsYXNzfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJcIiwgcmVmOiBcInNjcm9sbGVyXCIsIGNsYXNzTmFtZTogc2Nyb2xsZXJDbGFzc30sXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIGkgIT09IDAgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wLCB7fSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZX0pKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL3N3aXRjaFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NldHRpbmdzR3JvdXAgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3RpdGxlLCBzZXR0aW5ncywgYnV0dG9ufSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uQ29tcG9uZW50ID0gYnV0dG9uID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwidGl0bGUtYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiBidXR0b24ub25DbGlja30sIGJ1dHRvbi50aXRsZSkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZX0pLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF0sIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShpZCwgY2hlY2tlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgICAgICAgfSldO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc1RpdGxlIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuLy9oMi0yZ1dFLW8gdGl0bGUtM3NaV1lRIHNpemUxNi0xNGNHejUgaGVpZ2h0MjAtbU8yZUlOIHdlaWdodFNlbWlCb2xkLU5KZXh6aSBkYS1oMiBkYS10aXRsZSBkYS1zaXplMTYgZGEtaGVpZ2h0MjAgZGEtd2VpZ2h0U2VtaUJvbGQgZGVmYXVsdENvbG9yLTFfYWpYMCBkYS1kZWZhdWx0Q29sb3IgbWFyZ2luVG9wNjAtM1BHYnRLIGRhLW1hcmdpblRvcDYwIG1hcmdpbkJvdHRvbTIwLTMycUlENyBkYS1tYXJnaW5Cb3R0b20yMFxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5cclxubGV0IGNsYXNzbmFtZXMgPSBbXVxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XHJcbiAgICBsZXQgY2xhc3NOYW1lID0gY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKG5hbWUrXCItXCIpKVxyXG4gICAgaWYoY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm5hbWUpWzBdXHJcbiAgICBjbGFzc25hbWVzLnB1c2goY2xhc3NOYW1lKVxyXG4gICAgcmV0dXJuIGNsYXNzTmFtZVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2hJdGVtIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmNoZWNrZWQgPSAhdGhpcy5wcm9wcy5jaGVja2VkO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgdGhpcy5wcm9wcy5jaGVja2VkKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IHt0ZXh0LCBpbmZvfSA9IHRoaXMucHJvcHMuZGF0YTtcclxuICAgICAgICBpZighY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKFwiYmV0YS1cIikpKXtcclxuICAgICAgICAgICAgY2xhc3NuYW1lcy5wdXNoKEJETW9kdWxlcy5nZXQoZSA9PiBlLmJldGEgJiYgKCFlLmNvbnRhaW5lciAmJiAhZS51c2VyU2V0dGluZ3NWb2ljZSkpWzBdLmJldGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucHJvcHMuZGF0YS5leHBlcmltZW50YWwpe1xyXG4gICAgICAgICAgICBpbmZvID0gW1xyXG4gICAgICAgICAgICAgICAgaW5mbyxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdXBcIiwge2NsYXNzTmFtZTogZ2V0Q2xhc3NOYW1lKFwiYmV0YVwiKX0sIFwiKEVYUEVSSU1FTlRBTClcIilcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZmxleCBmbGV4LXZlcnRpY2FsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXAgdWktc3dpdGNoLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC1ob3Jpem9udGFsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXBcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDMgbWFyZ2luLXJlc2V0IG1hcmdpbi1yZXNldCB1aS1mbGV4LWNoaWxkXCJ9LCB0ZXh0KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10ZXh0IHN0eWxlLWRlc2NyaXB0aW9uIG1hcmdpbi10b3AtNFwiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LCBpbmZvKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckhlYWRlciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJ9LCB0aGlzLnByb3BzLnRleHQsIHRoaXMucHJvcHMuYnV0dG9uKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVGFiQmFySXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnByb3BzLnNlbGVjdGVkIHx8IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogYHVpLXRhYi1iYXItaXRlbSR7dGhpcy5wcm9wcy5zZWxlY3RlZCA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWAsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnByb3BzLmlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhclNlcGFyYXRvciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLXNlcGFyYXRvciBtYXJnaW4tdG9wLTggbWFyZ2luLWJvdHRvbS04XCJ9KTtcclxuICAgIH1cclxufSIsIlwidXNlIHN0cmljdFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdFxyXG5cclxuY29uc3QgaW50ZXJ2YWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuSW50ZXJ2YWwpWzBdXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcG9uZW50LCBNZXNzYWdlcykge1xyXG4gICAgY2xhc3MgVGltZVJlbmRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgIHRoaXMuX2ludGVydmFsID0gbmV3IGludGVydmFsTW9kdWxlMS5JbnRlcnZhbCgpXHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbC5zdGFydCgxZTMsIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldFN0YXRlKHNlbGYuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbC5zdG9wKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShhY3Rpdml0eSl7XHJcbiAgICAgICAgICAgIGlmKGFjdGl2aXR5LnRpbWVzdGFtcHMuZW5kID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuZW5kICYmIGFjdGl2aXR5LnRpbWVzdGFtcHMuc3RhcnQgPT09IHRoaXMucHJvcHMudGltZXN0YW1wcy5zdGFydClyZXR1cm5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXRVcGRhdGVkVGltZSgpe1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHRoaXMucHJvcHMudGltZXN0YW1wc1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKSAvIDFlMztcclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLmVuZCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREaWZmKG5vdywgY2hlY2tVbml4KHRpbWVzdGFtcHMuZW5kKSAvIDFlMylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihudWxsICE9IHRpbWVzdGFtcHMuc3RhcnQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihjaGVja1VuaXgodGltZXN0YW1wcy5zdGFydCkgLyAxZTMsIG5vdylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaG91cnM6IDAsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzOiAwLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kczogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJUaW1lKG51bWJlciwgcmVtb3ZlWmVybyl7XHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gPT09IHVuZGVmaW5lZClyZW1vdmVaZXJvID0gZmFsc2VcclxuICAgICAgICAgICAgaWYocmVtb3ZlWmVybyAmJiBudW1iZXIgPD0gMClyZXR1cm4gLTFcclxuICAgICAgICAgICAgaWYobnVtYmVyIDwgMTApcmV0dXJuIFwiMFwiK251bWJlclxyXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXREaWZmKHRpbWVzdGFtcCwgbm93KXtcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gTWF0aC5tYXgobm93IC0gdGltZXN0YW1wLCAwKVxyXG4gICAgICAgICAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3IoaG91cnMpICUgNjBcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKGhvdXJzIC8gNjApICUgNjBcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiBNYXRoLmZsb29yKGhvdXJzIC8gMzYwMCkgJSAyNCxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXMsXHJcbiAgICAgICAgICAgICAgICBzZWNvbmRzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgICAgIGxldCB0aW1lc3RhbXBzID0gcHJvcHMudGltZXN0YW1wc1xyXG5cclxuICAgICAgICAgICAgbGV0IHVzZWRQcm9wcyA9IGZ1bmN0aW9uKHByb3BzLCBpdGVtcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gcHJvcHMpIHJldHVybiB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHt9XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWl0ZW1zLmluZGV4T2Yoa2V5KSA+PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wc1trZXldID0gcHJvcHNba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGltZXN0YW1wc1xyXG4gICAgICAgICAgICB9KHByb3BzLCBbXCJ0aW1lc3RhbXBzXCJdKVxyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdGF0ZVxyXG4gICAgICAgICAgICBsZXQgaG91cnMgPSBzdGF0ZS5ob3Vyc1xyXG4gICAgICAgICAgICBsZXQgbWludXRlcyA9IHN0YXRlLm1pbnV0ZXNcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBzdGF0ZS5zZWNvbmRzXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgaG91cnM6IHRoaXMucmVuZGVyVGltZShob3VycywgITApLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogdGhpcy5yZW5kZXJUaW1lKG1pbnV0ZXMpLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kczogdGhpcy5yZW5kZXJUaW1lKHNlY29uZHMpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuZW5kICE9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgT2JqZWN0LmFzc2lnbih7fSwgdXNlZFByb3BzLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogTWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfRU5ELmZvcm1hdChkYXRhKVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGltZXN0YW1wcy5zdGFydCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX1NUQVJULmZvcm1hdChkYXRhKVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVGltZVJlbmRlclxyXG59O1xyXG5cclxuZnVuY3Rpb24gY2hlY2tVbml4KGUpIHtcclxuICAgIHJldHVybiAoXCJcIiArIGUpLmxlbmd0aCA8IDEzID8gMWUzICogZSA6IGVcclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVG9vbHMgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IHRvb2xzTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9vbHNDb250YWluZXIpWzBdXHJcbiAgICAgICAgbGV0IGNvbnRhaW5lck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRhaW5lciAmJiBlLmNsb3NlQnV0dG9uICYmIGUuY2xvc2VCdXR0b25Cb2xkKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ0b29scy1jb250YWluZXIgXCIrdG9vbHNNb2R1bGUudG9vbHNDb250YWluZXJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ0b29scyBcIit0b29sc01vZHVsZS50b29sc30sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY29udGFpbmVyTW9kdWxlLmNvbnRhaW5lcn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYnRuLWNsb3NlIFwiK2NvbnRhaW5lck1vZHVsZS5jbG9zZUJ1dHRvbiwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFhTdmcsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZXNjLXRleHQgXCIrY29udGFpbmVyTW9kdWxlLmtleWJpbmR9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkVTQ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2xpY2spIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jbG9zZUJ1dHRvbiAmJiBlLmtleWJpbmRCb2xkKVswXS5jbG9zZUJ1dHRvbi5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmIChjbG9zZUJ1dHRvbikgY2xvc2VCdXR0b24uY2xpY2soKTtcclxuICAgIH1cclxufSIsIi8qKlxyXG4gKiBUb29sdGlwIHRoYXQgYXV0b21hdGljYWxseSBzaG93IGFuZCBoaWRlIHRoZW1zZWx2ZXMgb24gbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBldmVudHMuXHJcbiAqIFdpbGwgYWxzbyByZW1vdmUgdGhlbXNlbHZlcyBpZiB0aGUgbm9kZSB0byB3YXRjaCBpcyByZW1vdmVkIGZyb20gRE9NIHRocm91Z2hcclxuICogYSBNdXRhdGlvbk9ic2VydmVyLlxyXG4gKlxyXG4gKiBOb3RlIHRoaXMgaXMgbm90IHVzaW5nIERpc2NvcmQncyBpbnRlcm5hbHMgYnV0IG5vcm1hbCBET00gbWFuaXB1bGF0aW9uIGFuZCBlbXVsYXRlc1xyXG4gKiBEaXNjb3JkJ3Mgb3duIHRvb2x0aXBzIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuXHJcbiAqXHJcbiAqIEBtb2R1bGUgRW11bGF0ZWRUb29sdGlwXHJcbiAqIEB2ZXJzaW9uIDAuMC4xXHJcbiAqL1xyXG5cclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljIGRpc2FibGVkUG9pbnRlckV2ZW50cy0xcHRnVEJcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMjM3cHg7IGJvdHRvbTogNTFweDtcIj5cclxuLy9cdDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyB0b29sdGlwVG9wLVhERFN4eCB0b29sdGlwQmxhY2stUFBHNDd6IHRvb2x0aXBEaXNhYmxlUG9pbnRlckV2ZW50cy0zZWFCR05cIiBzdHlsZT1cIm9wYWNpdHk6IDE7IHRyYW5zZm9ybTogbm9uZTtcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHQ8ZGl2IGNsYXNzPVwidG9vbHRpcENvbnRlbnQtYnFWTFdLXCI+VXNlciBTZXR0aW5nczwvZGl2PlxyXG4vL1x0PC9kaXY+XHJcbi8vPC9kaXY+XHJcblxyXG4vLzxkaXYgY2xhc3M9XCJsYXllci12OUh5WWNcIiBzdHlsZT1cInRvcDogODYwcHg7IGxlZnQ6IDYzMi41cHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwVG9wLVhERFN4eFwiPlxyXG4vL1x0XHQ8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLXCI+PC9kaXY+XHJcbi8vXHRcdENoYW5nZWxvZ1xyXG4vL1x0PC9kaXY+XHJcbi8vPC9kaXY+XHJcbmxldCBUb29sdGlwQ2xhc3Nlc1xyXG5mdW5jdGlvbiBnZXRUb29sdGlwQ2xhc3Nlcygpe1xyXG5cdGlmKFRvb2x0aXBDbGFzc2VzKXJldHVybiBUb29sdGlwQ2xhc3Nlc1xyXG5cdHJldHVybiBUb29sdGlwQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwidG9vbHRpcFwiLCBcInRvb2x0aXBCbGFja1wiKTtcclxufVxyXG5sZXQgVG9vbHRpcExheWVyc1xyXG5mdW5jdGlvbiBnZXRUb29sdGlwTGF5ZXJzKCl7XHJcblx0aWYoVG9vbHRpcExheWVycylyZXR1cm4gVG9vbHRpcExheWVyc1xyXG5cdHJldHVybiBUb29sdGlwTGF5ZXJzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJsYXllclwiLCBcImxheWVyQ29udGFpbmVyXCIpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDbGFzcyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XHJcbiAgICBjb25zdCB1cHBlckNhc2UgPSBzaWRlT3JDb2xvclswXS50b1VwcGVyQ2FzZSgpICsgc2lkZU9yQ29sb3Iuc2xpY2UoMSk7XHJcbiAgICBjb25zdCB0b29sdGlwQ2xhc3MgPSBnZXRUb29sdGlwQ2xhc3NlcygpW2B0b29sdGlwJHt1cHBlckNhc2V9YF07XHJcbiAgICBpZiAodG9vbHRpcENsYXNzKSByZXR1cm4gdG9vbHRpcENsYXNzO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBjbGFzc0V4aXN0cyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XHJcbiAgICByZXR1cm4gZ2V0Q2xhc3Moc2lkZU9yQ29sb3IpID8gdHJ1ZSA6IGZhbHNlO1xyXG59O1xyXG5cclxuY29uc3QgdG9QeCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9cHhgO1xyXG59O1xyXG5cclxuLyogPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkYS1sYXllclwiIHN0eWxlPVwibGVmdDogMjM0LjVweDsgYm90dG9tOiA1MXB4O1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIGRhLXRvb2x0aXAgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3elwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcksgZGEtdG9vbHRpcFBvaW50ZXJcIj48L2Rpdj5cclxuICAgICAgICBVc2VyIFNldHRpbmdzXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+ICovXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRlZFRvb2x0aXAge1xyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQGNvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8alF1ZXJ5KX0gbm9kZSAtIERPTSBub2RlIHRvIG1vbml0b3IgYW5kIHNob3cgdGhlIHRvb2x0aXAgb25cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlwIC0gc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9YmxhY2tdIC0gY29ycmVsYXRlcyB0byB0aGUgZGlzY29yZCBzdHlsaW5nL2NvbG9ycyAoYmxhY2ssIGJyYW5kLCBncmVlbiwgZ3JleSwgcmVkLCB5ZWxsb3cpXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNpZGU9dG9wXSAtIGNhbiBiZSBhbnkgb2YgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XHJcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmV2ZW50RmxpcD1mYWxzZV0gLSBwcmV2ZW50cyBtb3ZpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIG9wcG9zaXRlIHNpZGUgaWYgaXQgaXMgdG9vIGJpZyBvciBnb2VzIG9mZnNjcmVlblxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kaXNhYmxlZD1mYWxzZV0gLSB3aGV0aGVyIHRoZSB0b29sdGlwIHNob3VsZCBiZSBkaXNhYmxlZCBmcm9tIHNob3dpbmcgb24gaG92ZXJcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3Rvcihub2RlLCB0ZXh0LCBvcHRpb25zID0ge30pIHtcclxuXHRcdGNvbnN0IHtzdHlsZSA9IFwiYmxhY2tcIiwgc2lkZSA9IFwidG9wXCIsIHByZXZlbnRGbGlwID0gZmFsc2UsIGRpc2FibGVkID0gZmFsc2V9ID0gb3B0aW9ucztcclxuXHRcdHRoaXMubm9kZSA9IG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcclxuICAgICAgICB0aGlzLmxhYmVsID0gdGV4dDtcclxuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGUudG9Mb3dlckNhc2UoKTtcclxuXHRcdHRoaXMuc2lkZSA9IHNpZGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLnByZXZlbnRGbGlwID0gcHJldmVudEZsaXA7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG5cclxuICAgICAgICBpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc2lkZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFNpZGUgJHt0aGlzLnNpZGV9IGRvZXMgbm90IGV4aXN0LmApO1xyXG5cdFx0aWYgKCFjbGFzc0V4aXN0cyh0aGlzLnN0eWxlKSkgcmV0dXJuIFV0aWxzLmVycihcIkVtdWxhdGVkVG9vbHRpcFwiLCBgU3R5bGUgJHt0aGlzLnN0eWxlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdFxyXG5cdFx0dGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwTGF5ZXJzKCkubGF5ZXIgKyBcIiBcIiArIGdldFRvb2x0aXBMYXllcnMoKS5kaXNhYmxlZFBvaW50ZXJFdmVudHM7XHJcblxyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cclxuXHRcdHRoaXMubGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMubGFiZWxFbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcENvbnRlbnRcclxuXHJcblx0XHRjb25zdCBwb2ludGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHRwb2ludGVyRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBQb2ludGVyO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuYXBwZW5kKHBvaW50ZXJFbGVtZW50KTtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuYXBwZW5kKHRoaXMubGFiZWxFbGVtZW50KTtcclxuXHRcdHRoaXMuZWxlbWVudC5hcHBlbmQodGhpcy50b29sdGlwRWxlbWVudCk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zaG93KCk7XHJcblxyXG5cdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuXHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKHRoaXMubm9kZSkgPiAtMTtcclxuXHRcdFx0XHRcdGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKHRoaXMubm9kZSkpO1xyXG5cdFx0XHRcdFx0aWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaGlkZSgpO1xyXG5cdFx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb250YWluZXIgd2hlcmUgdGhlIHRvb2x0aXAgd2lsbCBiZSBhcHBlbmRlZC4gKi9cclxuICAgIGdldCBjb250YWluZXIoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLnBvcG91dHMpWzBdLnBvcG91dHMuc3BsaXQoXCIgXCIpWzBdK1wiIH4gLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyQ29udGFpbmVyKVswXS5sYXllckNvbnRhaW5lci5zcGxpdChcIiBcIilbMF0pOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIGFib3ZlIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0Fib3ZlKCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPj0gMDsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBiZWxvdyB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dCZWxvdygpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0ICsgdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA8PSBVdGlscy5zY3JlZW5IZWlnaHQ7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gdG8gdGhlIGxlZnQgb2YgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93TGVmdCgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbGVtZW50ICovXHJcblx0Z2V0IGNhblNob3dSaWdodCgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIDw9IFV0aWxzLnNjcmVlbldpZHRoOyB9XHJcblxyXG4gICAgLyoqIEhpZGVzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWxlYXZlLiAqL1xyXG5cdGhpZGUoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xyXG5cdH1cclxuXHJcbiAgICAvKiogU2hvd3MgdGhlIHRvb2x0aXAuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIG1vdXNlZW50ZXIuIFdpbGwgYXR0ZW1wdCB0byBmbGlwIGlmIHBvc2l0aW9uIHdhcyB3cm9uZy4gKi9cclxuXHRzaG93KCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMubGFiZWw7XHJcblx0XHR0aGlzLmNvbnRhaW5lci5hcHBlbmQodGhpcy5lbGVtZW50KTtcclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwidG9wXCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0Fib3ZlIHx8ICghdGhpcy5jYW5TaG93QWJvdmUgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93QmVsb3coKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwiYm90dG9tXCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0JlbG93IHx8ICghdGhpcy5jYW5TaG93QmVsb3cgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93QWJvdmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwibGVmdFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dMZWZ0IHx8ICghdGhpcy5jYW5TaG93TGVmdCAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93TGVmdCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd1JpZ2h0KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInJpZ2h0XCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd1JpZ2h0IHx8ICghdGhpcy5jYW5TaG93UmlnaHQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd1JpZ2h0KCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93TGVmdCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCBhYm92ZSB0aGUgbm9kZS4gKi9cclxuXHRzaG93QWJvdmUoKSB7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJ0b3BcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLSAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJIb3Jpem9udGFsbHkoKTtcclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYmVsb3cgdGhlIG5vZGUuICovXHJcblx0c2hvd0JlbG93KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwiYm90dG9tXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0ICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBsZWZ0IG9mIHRoZSBub2RlLiAqL1xyXG5cdHNob3dMZWZ0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwibGVmdFwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLSAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSByaWdodCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93UmlnaHQoKSB7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJyaWdodFwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB0aGlzLm5vZGUub2Zmc2V0V2lkdGggKyAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5KCk7XHJcblx0fVxyXG5cclxuXHRjZW50ZXJIb3Jpem9udGFsbHkoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZWNlbnRlciA9IHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgKHRoaXMubm9kZS5vZmZzZXRXaWR0aCAvIDIpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeChub2RlY2VudGVyIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpKSk7XHJcblx0fVxyXG5cclxuXHRjZW50ZXJWZXJ0aWNhbGx5KCkge1xyXG5cdFx0Y29uc3Qgbm9kZWNlbnRlciA9IHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyAodGhpcy5ub2RlLm9mZnNldEhlaWdodCAvIDIpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMikpKTtcclxuXHR9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi90b29sdGlwXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCB0ZXh0ID0gXCJcIn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IEJEVjIucmVhY3REb20uZmluZERPTU5vZGUodGhpcyk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAodGhpcy5ub2RlLCB0ZXh0LCB7c3R5bGUsIHNpZGV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnRvb2x0aXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19YU3ZnIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge3htbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDEyIDEyXCIsIHN0eWxlOiB7d2lkdGg6IFwiMThweFwiLCBoZWlnaHQ6IFwiMThweFwifX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZ1wiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiYWNrZ3JvdW5kXCIsIGZpbGw6IFwibm9uZVwiLCBmaWxsUnVsZTogXCJldmVub2RkXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMCAwaDEydjEySDBcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7Y2xhc3NOYW1lOiBcImZpbGxcIiwgZmlsbDogXCIjZGNkZGRlXCIsIGQ6IFwiTTkuNSAzLjIwNUw4Ljc5NSAyLjUgNiA1LjI5NSAzLjIwNSAyLjVsLS43MDUuNzA1TDUuMjk1IDYgMi41IDguNzk1bC43MDUuNzA1TDYgNi43MDUgOC43OTUgOS41bC43MDUtLjcwNUw2LjcwNSA2XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWtkaXJwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vZHVsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJub2RlLWZldGNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmltcmFmXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInlhdXpsXCIpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2NpcmN1cy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvbGlnaHRjb3JkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9sYXllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2VydmVyQ2FyZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2lkZWJhclZpZXcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2Nyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NHcm91cC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJJdGVtLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFyU2VwYXJhdG9yLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGltZXN0YW1wUmVuZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1rZGlycFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJtb2R1bGVcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibm9kZS1mZXRjaFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJpbXJhZlwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJ5YXV6bFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsInR5cGUiLCJpdGVtcyIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0IiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsImNzcyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJwcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkJldHRlckRpc2NvcmQiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwicmVtb3ZlRGEiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwiY2hpbGRyZW4iLCJwdXNoIiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwiam9pbiIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhdGNoQ2xhc3NNb2R1bGVzIiwibm9ybWFsaXplRWxlbWVudCIsInBhdGNoRE9NTWV0aG9kcyIsIm1vZHVsZXMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsInNwbGl0IiwiY29tcG9uZW50TmFtZSIsImNsYXNzTmFtZXMiLCJjbGFzc0xpc3QiLCJub3JtYWxDbGFzcyIsImNhbWVsQ2FzZSIsInMiLCJpIiwidG9VcHBlckNhc2UiLCJzbGljZSIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInRvUmVtb3ZlIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJ0b2tlbiIsInRva2VucyIsInQiLCJDb2xvcmVkVGV4dCIsImluamVjdENvbG9yZWRUZXh0IiwiY2FuY2VsQ29sb3JlZFRleHQiLCJNZXNzYWdlQ29tcG9uZW50IiwiYmVmb3JlIiwibWV0aG9kQXJndW1lbnRzIiwiY2hpbGRyZW5NZXNzYWdlQ29udGVudCIsIm1lc3NhZ2VDb250ZW50IiwiZGlzcGxheU5hbWUiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImVsZW0iLCJzZXRQcm9wZXJ0eSIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwiYWRkb25DYWNoZSIsInRpbWVDYWNoZSIsIndhdGNoZXJzIiwicGF0Y2hFeHRlbnNpb25zIiwiZ2V0Q29udGVudFJlcXVpcmUiLCJwbHVnaW5zRm9sZGVyIiwiX3BsdWdpbnNGb2xkZXIiLCJyZWFscGF0aFN5bmMiLCJkYXRhUGF0aCIsInRoZW1lc0ZvbGRlciIsIl90aGVtZXNGb2xkZXIiLCJsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSIsImRhdGFTdG9yZSIsImdldFNldHRpbmdHcm91cCIsInNldFNldHRpbmdHcm91cCIsImVuY3J5cHRTZXR0aW5nc0NhY2hlIiwiSlNPTiIsInBhcnNlIiwiZGVjcnlwdFNldHRpbmdzQ2FjaGUiLCJoYXNoIiwicmVzdWx0Iiwic3VzcGVjdCIsInNhdmVBZGRvbkNhY2hlIiwic3RyaW5naWZ5Iiwid2F0Y2hDb250ZW50IiwiY29udGVudFR5cGUiLCJpc1BsdWdpbiIsImJhc2VGb2xkZXIiLCJmaWxlRW5kaW5nIiwid2F0Y2giLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImVyciIsImNvZGUiLCJ1bmxvYWRQbHVnaW4iLCJ1bmxvYWRUaGVtZSIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZFBsdWdpbiIsImxvYWRUaGVtZSIsInJlbG9hZFBsdWdpbiIsInJlbG9hZFRoZW1lIiwidW53YXRjaENvbnRlbnQiLCJjbG9zZSIsImV4dHJhY3RNZXRhIiwiZmlyc3RMaW5lIiwiaGFzT2xkTWV0YSIsInBhcnNlT2xkTWV0YSIsImhhc05ld01ldGEiLCJwYXJzZU5ld01ldGEiLCJtZXRhIiwicmF3TWV0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiaW5kZXhPZiIsInBhcnNlZCIsImZvcm1hdCIsImJsb2NrIiwib3V0IiwiZmllbGQiLCJhY2N1bSIsImxpbmUiLCJjaGFyQXQiLCJsIiwic3Vic3RyIiwic2VsZiIsIm9yaWdpbmFsUmVxdWlyZSIsInBvc3NpYmxlUGF0aCIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN0cmlwQk9NIiwiYWRkZWQiLCJhdGltZU1zIiwibW9kaWZpZWQiLCJtdGltZU1zIiwic2l6ZSIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImlwY1JlbmRlcmVyIiwiY29uZmlnIiwiaGFzU3RhcnRlZCIsImZsYXQiLCJ2ZXJzaW9uIiwiRUQiLCJXZWJTb2NrZXQiLCJwYXRjaEF0dHJpYnV0ZXMiLCJpbml0U2V0dGluZ3MiLCJjaGVja0Zvckd1aWxkcyIsImluaXRpYWxpemUiLCJpbml0aWFsaXplU2V0dGluZ3MiLCJjb250ZW50TWFuYWdlciIsImF0b2IiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsInRvcCIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsIkFuY2hvciIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsIm9yaWdpbmFsIiwic2F2ZVNldHRpbmdzIiwibG9hZFNldHRpbmdzIiwic2V0dGluZyIsIkFwaSIsImdldFByZWRpY2F0ZVNlY3Rpb25zIiwic2V0dGluZ01vZHVsZSIsImNhbGwiLCJzZWN0aW9uIiwicG9wZWQiLCJwb3AiLCJyZW5kZXJTaWRlYmFyIiwiY2xhc3NOYW1lTGF5ZXIiLCJjbGFzc05hbWVTb2NpYWxMaW5rcyIsImNsYXNzTmFtZU1vZGFsIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImxheWVyIiwiYW5pbWF0aW5nIiwic29jaWFsTGlua3MiLCJtb2RhbCIsImlubmVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJ0b1N0cmluZyIsInNvY2lhbE1vZHVsZTEiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJsaW5rIiwiY2xhc3NOYW1lQ29sb3JNdXRlZCIsInNpemVzIiwiY2xhc3NOYW1lVmVyc2lvbkhhc2giLCJjb2xvck11dGVkIiwic2l6ZTMyIiwidmVyc2lvbkhhc2giLCJicmFuY2giLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJlbGVjdHJvbiIsImdldEdsb2JhbCIsImNvbW1pdCIsIm9yaWdpbmFsVmVyc2lvbnMiLCJzcGxpY2UiLCJnZXRHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZmluZEJ5UHJvcHMiLCJndWlsZHMiLCJwaWxsIiwiZ3VpbGRMaXN0SXRlbXNQYXRjaCIsIkd1aWxkQ2xhc3NlcyIsImxpc3RJdGVtQ2xhc3MiLCJibG9iQ2xhc3MiLCJyZWFjdEluc3RhbmNlIiwiR3VpbGRDb21wb25lbnQiLCJyZXR1cm4iLCJ0aGlzT2JqZWN0IiwiZ3VpbGREYXRhIiwidW5yZWFkIiwic2VsZWN0ZWQiLCJhdWRpbyIsInZpZGVvIiwiYmFkZ2UiLCJhbmltYXRhYmxlIiwiZ3VpbGRQaWxsUGF0Y2giLCJndWlsZFBpbGwiLCJob3ZlcmVkIiwiZ3VpbGRTZXBhcmF0b3JQYXRjaCIsIkd1aWxkcyIsImd1aWxkQ29tcG9uZW50cyIsIkd1aWxkU2VwYXJhdG9yIiwiU2VwYXJhdG9yIiwiQXR0YWNobWVudFBhdGNoIiwiQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJnZXROZXN0ZWRQcm9wIiwicGF0Y2giLCJtZXNzYWdlSGVhZGVyUGF0Y2giLCJNZXNzYWdlSGVhZGVyIiwiY2hhdCIsIm5leHRUaWNrIiwiZ2V0RWxlbWVudEJ5SWQiLCJjaGlsZE5vZGVzIiwiYmxvY2tEaXYiLCJkaXN0YW50IiwiZ2V0QmFkZ2VzIiwiYmFkZ2VzIiwic3ZnIiwid2lkdGgiLCJzY29wZXMiLCJzY29wZSIsImNvbXBvbmVudCIsImRpdjIiLCJyZWFjdERvbSIsInJlbmRlciIsIm1lbWJlckxpc3RQYXRjaCIsIk1lbWJlckxpc3RJdGVtIiwicmVuZGVyRGVjb3JhdG9ycyIsInVwZGF0ZUluamVjdG9yIiwiaW5qZWN0aW9uUGF0aCIsInJtcmYiLCJ5YXV6bCIsIm1rZGlycCIsInJlcXVlc3QiLCJwYXJlbnRQYXRoIiwiZm9sZGVyTmFtZSIsInppcExpbmsiLCJzYXZlZFppcCIsImV4dHJhY3RlZEZvbGRlciIsInN1Y2Nlc3MiLCJlbmNvZGluZyIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsImFscmVhZHlFeGlzdHMiLCJyZXMiLCJleGlzdHMiLCJyZW5hbWUiLCJyb3VuZCIsInBlcmZvcm1hbmNlIiwid3JpdGVGaWxlIiwiemlwZmlsZSIsImxhenlFbnRyaWVzIiwiemlwIiwib24iLCJlbnRyeSIsImZpbGVOYW1lIiwicmVhZEVudHJ5IiwiZnVsbFBhdGgiLCJzeW5jIiwiZGlybmFtZSIsIm9wZW5SZWFkU3RyZWFtIiwicmVhZFN0cmVhbSIsInBpcGUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uY2UiLCJiYWNrdXBGb2xkZXIiLCJ1bmxpbmsiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInJlbGVhc2VDaGFubmVsIiwiZ2xvYmFscyIsImdldFJlbGVhc2VDaGFubmVsIiwic3RhYmxlIiwiY2FuYXJ5IiwicHRiIiwicGx1Z2luRGF0YSIsIkJERmlsZSIsIndyaXRlRmlsZVN5bmMiLCJzZXR0aW5nc0ZpbGUiLCJ1bmxpbmtTeW5jIiwiX2luamVjdGlvblBhdGgiLCJiYXNlIiwicm9hbWluZ0Jhc2UiLCJnZXRQYXRoIiwicm9hbWluZ0xvY2F0aW9uIiwicmVhbExvY2F0aW9uIiwiY29uZmlnRmlsZSIsIl9jb25maWdGaWxlIiwiX0JERmlsZSIsIl9zZXR0aW5nc0ZpbGUiLCJnZXRQbHVnaW5GaWxlIiwiRGV2TW9kZSIsImRlYnVnTGlzdGVuZXIiLCJjb3B5U2VsZWN0b3JMaXN0ZW5lciIsInN0YXJ0RGVidWdMaXN0ZW5lciIsInN0YXJ0Q29weVNlbGVjdG9yIiwic3RvcERlYnVnTGlzdGVuZXIiLCJzdG9wQ29weVNlbGVjdG9yIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIndoaWNoIiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzdG9wUHJvcGFnYXRpb24iLCJzZWxlY3RvciIsImdldFNlbGVjdG9yIiwiY2xhc3NMYXllciIsImNsYXNzSXRlbXMiLCJkaXNhYmxlZFBvaW50ZXJFdmVudHMiLCJtZW51IiwiYXR0YWNoIiwiY20iLCJxdWVyeSIsImNvbnRhaW5lciIsImxheWVyQ29udGFpbmVyIiwiY21XcmFwIiwic3R5bGVGbGV4aWJsZSIsImFjY29tbW9kYXRlU2Nyb2xsYmFyIiwiYXBwZW5kIiwiY2xpZW50WSIsImxlZnQiLCJjbGllbnRYIiwic2Nyb2xsZXJDbGFzc2VzIiwic2Nyb2xsZXJXcmFwIiwic2Nyb2xsZXJUaGVtZWQiLCJ0aGVtZUdob3N0SGFpcmxpbmUiLCJzY3JvbGxlciIsInJlbW92ZUNNIiwia2V5Q29kZSIsImNtZyIsImNtaSIsIml0ZW0iLCJsYWJlbENvbnRhaW5lciIsImNvbG9yRGVmYXVsdCIsImxhYmVsIiwiTmF0aXZlTW9kdWxlIiwiY29weSIsImVsZW1lbnRzIiwicXVlcnlBbGwiLCJmb2N1c2VkIiwic2VwYXJhdG9yIiwic2Nyb2xsSGVpZ2h0IiwiZWwiLCJuYW1lcyIsInBhcmVudE5vZGUiLCJ1bnNoaWZ0Iiwib3duZXJEb2N1bWVudCIsInRhZ05hbWUiLCJmcm9tIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJnZXRSdWxlcyIsInN0eWxlU2hlZXRzIiwic2hlZXRzIiwicnVsZXMiLCJjc3NSdWxlcyIsImVsZW1lbnRSdWxlcyIsInNlbGVjdG9yVGV4dCIsIm1hdGNoZXMiLCJEaXNhYmxlVHlwaW5nIiwic3RhcnRUeXBpbmciLCJ0eXBpbmdNb2R1bGUiLCJkaXNhYmxlZCIsInN0b3BUeXBpbmciLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwibmV3UHJvbWlzZSIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsImhhbmRsZVJlcXVlc3QiLCJSb3V0ZXMiLCJzdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJqc29uIiwicHJvbWlzZSIsInVzZXJfaWQiLCJjYXRjaCIsIkxpZ2h0Y29yZEVycm9yIiwicm91dGUiLCJyZWplY3QiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJCdWdIdW50ZXJCYWRnZSIsIkNpcmN1cyIsImhlYWQiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGltZSIsInRpbWVGcmFjdGlvbiIsInByb2dyZXNzIiwiUSIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0Iiwic29tZSIsIm4iLCJub2RlVHlwZSIsImJhc2VFbGVtZW50IiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJjbG9uZU5vZGUiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiY2xhc3NuYW1lIiwiaW5kaWNhdG9yIiwiaGFzQ2xhc3MiLCJldmVyeSIsInJlcGxhY2VDbGFzcyIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiYXBwZW5kVG8iLCJ0aGlzTm9kZSIsInRoYXROb2RlIiwicHJlcGVuZFRvIiwicHJlcGVuZCIsImluc2VydEFmdGVyIiwidGFyZ2V0Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwibmV3Tm9kZSIsIm5leHQiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwiaW5kZXgiLCJwYXJlbnQiLCJmaW5kQ2hpbGQiLCJmaW5kQ2hpbGRyZW4iLCJwYXJlbnRzIiwiY2xvc2VzdCIsInBhcmVudHNVbnRpbCIsInNpYmxpbmdzIiwiYXR0cmlidXRlIiwiZ2xvYmFsIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhlaWdodCIsInRleHRDb250ZW50Iiwib3V0ZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzIiwiZXZlbnQiLCJkZWxlZ2F0ZSIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwiY2FuY2VsIiwibmV3Q2FuY2VsIiwiZmluZEluZGV4IiwiX19vZmZBbGwiLCJtYXRjaEZpbHRlciIsImxpc3RlbmVyIiwiZGVmYXVsdEZpbHRlciIsIm9uTW91bnRDaGFuZ2UiLCJvbk1vdW50Iiwid3JhcHBlZENhbGxiYWNrIiwib2JzZXJ2ZXIiLCJub2RlcyIsInJlbW92ZWROb2RlcyIsImRpcmVjdE1hdGNoIiwicGFyZW50TWF0Y2giLCJvblVubW91bnQiLCJvbkFkZGVkIiwid3JhcCIsImRvbVdyYXBwZXIiLCJyZXNvbHZlRWxlbWVudCIsIkVtb2ppUmVnZXgiLCJDdXN0b21FbW9qaU1vZHVsZSIsIkN1c3RvbUVtb2ppIiwiRW1vamlNb2R1bGVBcGkiLCJnZXRDdXN0b21FbW9qaUJ5SWQiLCJBdXRvY29tcGxldGVNb2R1bGUiLCJBdXRvQ29tcGxldGlvblRlbXBsYXRlcyIsImdldEF1dG9jb21wbGV0ZU9wdGlvbnMiLCJFbW9qaU1vZHVsZVF1ZXJ5IiwicXVlcnlFbW9qaVJlc3VsdHMiLCJNZXNzYWdlcyIsIkVNT0pJX01BVENISU5HIiwiZ3VpbGRNb2R1bGUiLCJnZXRHdWlsZCIsImdldEd1aWxkcyIsImlzRmV0Y2hpbmciLCJlbW9qaVNlYXJjaCIsImdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQiLCJMSUdIVENPUkRfRU1PSklTIiwiYXJnMSIsImFyZzIiLCJjb25kaXRpb24iLCJzZXRFbW9qaVVzYWJsZSIsInF1ZXJ5UmVzdWx0cyIsInJlc3VsdHMiLCJyZW5kZXJSZXN1bHRzIiwiRCIsImVtb2ppcyIsIkVNT0pJIiwiRW1vamkiLCJlbW9qaSIsInVuaXF1ZU5hbWUiLCJzZW50aW5lbCIsImd1aWxkSWQiLCJnZXRQbGFpblRleHQiLCJpc0FuaW1hdGVkIiwiYW5pbWF0ZWQiLCJtYW5hZ2VkIiwib3JpZ2luYWxOYW1lIiwiZ2V0UmF3VGV4dCIsImNhbmNlbEVtb2ppUmVuZGVyIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJuZXdDb250ZW50IiwiaGFzUGFyc2VkIiwiZXhlYyIsInJhdyIsIndvcmRzIiwid29yZCIsImFyciIsImVtb2ppSWQiLCJqdW1ib2FibGUiLCJyZWR1Y2UiLCJjdXJyZW50Iiwic2hpZnQiLCJvIiwidSIsImQiLCJvbkNsaWNrIiwib25Ib3ZlciIsIlIiLCJwcmVmaXgiLCJUaXRsZSIsIkVtb2ppRmlsdGVyTW9kdWxlIiwiaXNFbW9qaURpc2FibGVkIiwiaXNVc2FibGUiLCJ1c2FibGUiLCJzdXJyb2dhdGVzIiwiZGl2ZXJzaXR5IiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwia2V5d29yZCIsIm9vZiIsIm5vX2NvbW1lbnRzIiwicmVnZXhwcyIsInJlZ2V4IiwiaGFzaFRvVXJsIiwiY2hlY2tIYXNoIiwiZ2V0Q3VycmVudFdlYkNvbnRlbnRzIiwidXNlckFnZW50IiwiX19wYXRoIiwiaXNGcm9tTG9hZGVyIiwiY3J5cHRvIiwiQnVmZmVyIiwiYWxsb2MiLCJjcmVhdGVSZWFkU3RyZWFtIiwiY2h1bmsiLCJjb25jYXQiLCJoYXNoUmVzdWx0IiwiZGlnZXN0IiwicmVuZGVyVG9FbGVtZW50cyIsImZsb3dlclN0YXJNb2R1bGUiLCJmbG93ZXJTdGFyQ29udGFpbmVyIiwiY2hpbGRNb2R1bGUiLCJjaGlsZENvbnRhaW5lciIsImJvcmRlckNvbG9yIiwibmV4dE5vZGUiLCJjb25maXJtVGV4dCIsImRhbmdlciIsIm9uQ2FuY2VsIiwib25Db25maXJtIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwic3BhbiIsImZsb2F0IiwiZmxvd2VyU3RhciIsImdldEtleWVkQXJyYXkiLCJidWZmZXIiLCJpbnN0YWxsUGF0aCIsImN1cnNvciIsInN0cm9rZSIsInNhdmUiLCJPYmplY3RTdG9yYWdlIiwibG9jYWxTdG9yYWdlTW9kdWxlIiwibG9jYWxTdG9yYWdlIiwiaW1wbCIsImJ0b2EiLCJzZXRJbnRlcnZhbCIsInNhZmVKU09OUGFyc2UiLCJnZW5lcmF0ZUtleSIsImRlY2lwaGVyIiwiZGVjcnlwdGVkIiwiZmluYWwiLCJjaXBoZXIiLCJlbmNyeXB0ZWQiLCJQbHVnaW5Nb2R1bGUiLCJsb2FkUGx1Z2luRGF0YSIsImxvYWQiLCJzYXZlUGx1Z2luRGF0YSIsImNoYW5uZWxTd2l0Y2giLCJzdGFydFBsdWdpbiIsInN0b3BQbHVnaW4iLCJlbmFibGVQbHVnaW4iLCJkaXNhYmxlUGx1Z2luIiwidG9nZ2xlUGx1Z2luIiwicCIsImZpbGVuYW1lT3JOYW1lIiwiYmRwbHVnaW4iLCJkZWxldGUiLCJlZGl0Iiwib3Blbkl0ZW0iLCJ1cGRhdGVQbHVnaW5MaXN0Iiwic2F2ZWQiLCJuZXdNZXNzYWdlIiwib25NZXNzYWdlIiwib25Td2l0Y2giLCJWMl9QdWJsaWNTZXJ2ZXJzIiwiX2FwcGVuZEJ1dHRvbiIsIkxheWVyIiwicm9vdElkIiwiVjJDX1B1YmxpY1NlcnZlcnMiLCJyb290IiwiX3Jvb3QiLCJpbmplY3RSb290IiwiY2xhc3NOYW1lTGF5ZXJzIiwibGF5ZXJzIiwiYnV0dG9uIiwiYnRuIiwiY2lyY2xlQnV0dG9uTWFzayIsImNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyIiwiZG93bmxvYWRQcm9ncmVzcyIsInR1dG9yaWFsQ29udGFpbmVyIiwiYWRkQnV0dG9uIiwiZ3VpbGRQYXRjaCIsIkd1aWxkTGlzdCIsIndlYnBhY2tNb2R1bGVzIiwiR3VpbGRMaXN0T2xkIiwicmVtb3ZlQnV0dG9uIiwiQkRTaWRlYmFySGVhZGVyIiwiUHVyZUNvbXBvbmVudCIsInNpZGViYXJDb21wb25lbnRzIiwiSGVhZGVyIiwiSXRlbSIsImNoYW5nZWxvZ0J1dHRvbiIsIkhpc3RvcnkiLCJyZW5kZXJlZCIsImlzQ2xlYXJpbmdDYWNoZSIsIlYyX1NldHRpbmdzUGFuZWwiLCJ1cGRhdGVTZXR0aW5ncyIsInNpZGViYXIiLCJWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIiLCJyZWdpc3RlckNvbXBvbmVudHMiLCJyZWdpc3RlciIsIm1ha2VDb21wb25lbnQiLCJsaWdodGNvcmRDb21wb25lbnQiLCJQcmVzZW5jZUNvbXBvbmVudCIsIkFjY291bnRJbmZvc0NvbXBvbmVudCIsIkFwaVByZXZpZXdDb21wb25lbnQiLCJjb3JlQ29tcG9uZW50IiwiY3VzdG9tQ3NzQ29tcG9uZW50IiwicmVuZGVyQWRkb25QYW5lIiwiY2xhc3NTaWRlYmFyIiwiY29udGVudFJlZ2lvbiIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJjb3JlU2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsImNhdGVnb3JpZXMiLCJTZXQiLCJzZWN0aW9ucyIsImxpZ2h0Y29yZFNldHRpbmdzIiwiUHJlc2VuY2VTZXR0aW5ncyIsIk1zZ0xvZ1NldHRpbmdzIiwiY2hlY2tlZCIsInB1YmxpY1NlcnZlcnNNb2R1bGUiLCJ2b2ljZU1vZGUiLCJ0ZkhvdXIiLCJjb2xvcmVkVGV4dCIsImRNb2RlIiwiU2V0dGluZ3MiLCJkZXZNb2RlIiwiZm9yY2VVcGRhdGUiLCJjYWxsUmluZ2luZ0JlYXQiLCJzZXR0aW5nc1N0b3JlIiwic2hvd0N1cnJlbnRHYW1lIiwidXBkYXRlUmVtb3RlU2V0dGluZ3MiLCJnZXRDdXJyZW50V2luZG93Iiwic2V0QWx3YXlzT25Ub3AiLCJBbnRpQWRETSIsImJsdXJQcml2YXRlIiwiZGlzYWJsZVR5cGluZyIsImFwcFNldHRpbmdzIiwicmVsYXVuY2giLCJleGl0IiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsImlzQ2hlY2tlZCIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsImlwYyIsInNlbmQiLCJhcmd2IiwicXVpdCIsInNlc3Npb24iLCJjbGVhckNhY2hlIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3MiLCJWMkNfQWNjb3VudEluZm9zIiwiQXBpUHJldmlldyIsIkNzc0VkaXRvciIsIkNvbnRlbnRMaXN0IiwiQ29tcG9uZW50Iiwib3JpZ2luYWxSZW5kZXIiLCJlbnVtZXJhYmxlIiwiQ2FyZExpc3QiLCJTZXR0aW5nQ29tcG9uZW50IiwicGFuZWxzIiwicGFuZWwiLCJnZXRDb21wb25lbnQiLCJMQ2l0ZW1zIiwiTENEZXZJdGVtcyIsIlRoZW1lTW9kdWxlIiwibG9hZFRoZW1lRGF0YSIsInRoZW1lIiwidW5lc2NhcGUiLCJzYXZlVGhlbWVEYXRhIiwiZW5hYmxlVGhlbWUiLCJkaXNhYmxlVGhlbWUiLCJ0b2dnbGVUaGVtZSIsImJkdGhlbWUiLCJ1cGRhdGVUaGVtZUxpc3QiLCJfd2luZG93Q29uZmlnRmlsZSIsInRyYW5zcGFyZW50IiwiZnJhbWUiLCJjaGFyQ29kZUF0IiwiZ2V0VGV4dEFyZWEiLCJjaGFubmVsVGV4dEFyZWEiLCJ0aXRsZVdyYXBwZXIiLCJpbnNlcnRUZXh0IiwidGV4dGFyZWEiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZXhlY0NvbW1hbmQiLCJtb2R1bGVOYW1lIiwiZ3JvdXBDb2xsYXBzZWQiLCJncm91cEVuZCIsImVzY2FwZSIsInBhcmFtcyIsImluc3RlYWQiLCJzaWxlbnQiLCJmb3JjZSIsIm9yaWdNZXRob2QiLCJjYW5jZWxlZCIsImNhbmNlbFBhdGNoIiwib3JpZ2luYWxNZXRob2QiLCJjYWxsT3JpZ2luYWxNZXRob2QiLCJ0ZW1wUmV0IiwiX19tb25rZXlQYXRjaGVkIiwiZGlzY29ubmVjdCIsImhhc05vdGljZSIsIm1lbWJlcmxpc3QiLCJtZW1iZXJzV3JhcCIsImZvcm0iLCJyaWdodCIsImJvdHRvbSIsInRvYXN0V3JhcHBlciIsImljb24iLCJ0aW1lb3V0IiwidG9hc3RFbGVtIiwiaW5uZXJUZXh0IiwibW9kYWxNb2R1bGUiLCJoaWRlT25GdWxsc2NyZWVuIiwiaGVhZGVyTW9kdWxlIiwiaGVhZGVyIiwiZm9vdGVyMk1vZHVsZSIsImZvY3VzTG9jayIsImJhY2tkcm9wIiwiYmFja2Ryb3BXaXRoTGF5ZXIiLCJjbG9zaW5nTGlzdGVuZXJzIiwicGx1Z2luRXJyb3JzIiwidGhlbWVFcnJvcnMiLCJnZW5lcmF0ZVRhYiIsInRhYnMiLCJNb2RhbFN0YWNrIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIlRleHRFbGVtZW50IiwiRmxleENoaWxkIiwiVGl0bGVzIiwiQ2hhbmdlbG9nIiwiZGVmYXVsdFByb3BzIiwic2VsZWN0YWJsZSIsIk1hcmtkb3duUGFyc2VyIiwiaW1hZ2UiLCJzdWJ0aXRsZSIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJtYXJnaW4iLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJTaXplcyIsIlNNQUxMIiwiQ29sb3JzIiwiU1RBTkRBUkQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsImpvaW5CRDIiLCJzdXBwb3J0TGluayIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIk1vZGFsQWN0aW9ucyIsIk1hcmtkb3duIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJlbXB0eUZ1bmN0aW9uIiwib3Blbk1vZGFsIiwicmVkIiwibW9kYWxLZXkiLCJWMiIsImVkaXRvckRldGFjaGVkIiwicmVxIiwid2VicGFja0pzb25wIiwiX19leHRyYV9pZF9fIiwic2hvdWxkUHJvdGVjdCIsInRoZU1vZHVsZSIsImNsZWFyIiwic29ydCIsImdldFRva2VuIiwiZ2V0RW1haWwiLCJzaG93VG9rZW4iLCJwcm90ZWN0IiwiaXNEZWZhdWx0IiwibW9kIiwicHJveHkiLCJmdW5jIiwiX19wcm90b19fIiwicHJvcE5hbWVzIiwicHJvdG9OYW1lcyIsInByb3RvUHJvcCIsImludGVybmFsIiwiam9pbkJEMSIsIkludml0ZUFjdGlvbnMiLCJhY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsIiwibGVhdmVCRDEiLCJHdWlsZEFjdGlvbnMiLCJsZWF2ZUd1aWxkIiwibGVhdmVCRDIiLCJqb2luTEMiLCJsZWF2ZUxDIiwicmVhY3RDb21wb25lbnQiLCJhbmNob3JDbGFzc2VzIiwic2xhdGVFZGl0b3JDbGFzc2VzIiwibWVzc2FnZUNsYXNzZXMiLCJ1bnJlYWRNZW50aW9uc0JhciIsImd1aWxkc0Vycm9yIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJUb29sdGlwV3JhcHBlciIsIlRvb2x0aXBzIiwiaGlkZSIsInNob3ciLCJzdWJtaXQiLCJhY3RpdmF0ZVJhZ2luZ0RlbW9uIiwiZGlzbWlzcyIsIktleUdlbmVyYXRvciIsIkxheWVyU3RhY2siLCJVc2VyU3RvcmUiLCJDaGFubmVsU3RvcmUiLCJDaGFubmVsQWN0aW9ucyIsIlByaXZhdGVDaGFubmVsQWN0aW9ucyIsIm9wZW5ETSIsInVzZXJJZCIsInNlbGZJZCIsInByaXZhdGVDaGFubmVsSWQiLCJnZXRETUZyb21Vc2VySWQiLCJzZWxlY3RQcml2YXRlQ2hhbm5lbCIsIm9wZW5Qcml2YXRlQ2hhbm5lbCIsInBhcnNlU2V0dGluZ3MiLCJWb2ljZU1vZGUiLCJwcm9maWxNb2R1bGUiLCJmZXRjaE11dHVhbEZyaWVuZHMiLCJMaWdodGNvcmRVc2VyQmFkZ2UiLCJtYXJnaW5Nb2R1bGUyIiwiZGVmYXVsdE1hcmdpbmg1IiwiY29sb3JNb2R1bGUiLCJjb2xvclN0YW5kYXJkIiwic2l6ZU1vZHVsZSIsInNjcm9sbGJhck1vZHVsZTEiLCJzY3JvbGxiYXJHaG9zdEhhaXJsaW5lIiwiR3VpbGRNb2R1bGUiLCJnZXRSZWxhdGlvbnNoaXBzIiwic2Vzc2lvbk1vZHVsZSIsImdldFNlc3Npb25zIiwic2l6ZTE0IiwiaDUiLCJnZXRQcm9maWxlVmFsdWUiLCJnZXRTdGF0aXN0aWNzIiwiZ2V0U2Vzc2lvblZhbHVlIiwibWFyZ2luQm90dG9tMjAiLCJzZXNzaW9uc1JhdyIsInNlc3Npb25zIiwic2Vzc2lvbklkIiwiY2xpZW50SW5mbyIsIm9zIiwiY2xpZW50IiwiYWN0aXZpdGllcyIsInJlcGVhdCIsImNyZWF0ZWRBdCIsImF2YXRhclVSTCIsImF2YXRhciIsImdldEF2YXRhclVSTCIsImdldERhdGUiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImZsYWdzIiwiaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiIsImVtYWlsIiwibWZhRW5hYmxlZCIsIm1vYmlsZSIsInBob25lIiwidmVyaWZpZWQiLCJyZWxhdGlvbnMiLCJmcmllbmRzIiwiaXNGcmllbmQiLCJpc0Jsb2NrZWQiLCJoaWdodGxpZ2h0SlMiLCJoaWdobGlnaHQiLCJtZXNzYWdlTW9kdWxlMSIsIm1lc3NhZ2VNb2R1bGUyIiwiQ29kZUNvbnRlbnQiLCJfX2h0bWwiLCJsYW5ndWFnZSIsIm1hcmdpbkJvdHRvbTgiLCJzZXR0aW5nVGl0bGUiLCJmb3JtTW9kdWxlIiwic3RhdGVzIiwiRm9ybVNlY3Rpb24iLCJhbGxDb21wb25lbnRzIiwiY29tcCIsIkFsbFByZXZpZXdzIiwidGFiIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsImdldFByb3BzIiwicmVuZGVyUHJldmlldyIsImJhY2tncm91bmRDb2xvciIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJyZW5kZXJDb2RlIiwiZ2VuZXJhdGVDb2RlIiwiZ2V0U3RyRm9yUHJvcCIsImNvbXBQYXRoIiwibGFuZyIsIlN0cmluZyIsIiQkdHlwZW9mIiwiU3ltYm9sIiwiZm9yIiwiY29tcE5hbWUiLCJjb21wQ2F0ZWdvcnkiLCJwcm9wU3RyaW5ncyIsImNoaWxkcmVuUHJvcCIsInN0ciIsIm9wZW5UYWciLCJjbG9zZVRhZyIsInZpc2libGVLZXkiLCJwcm9wT2JqZWN0IiwiaXNMYXN0IiwiaXNGaXJzdCIsImNoaWxkcmVuRGF0YSIsImhlbHAiLCJtYXJnaW5Cb3R0b20iLCJyZW5kZXJzIiwiVjJDX1BsdWdpbkNhcmQiLCJzaG93U2V0dGluZ3MiLCJzZXRJbml0aWFsU3RhdGUiLCJoYXNTZXR0aW5ncyIsImFkZG9uIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInJlbG9hZHMiLCJ0cnVzdGVkIiwiY2xvc2VTZXR0aW5ncyIsInBhbmVsUmVmIiwic2V0dGluZ3NPcGVuIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVmcyIsInNldHRpbmdzcGFuZWwiLCJzZXRJbW1lZGlhdGUiLCJpc0hpZGRlbiIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJjYXJkTm9kZSIsInRoaXNOb2RlT2Zmc2V0IiwiY29udGFpbmVyT2Zmc2V0IiwiZW5kUG9pbnQiLCJnZXRTdHJpbmciLCJzZXR0aW5nc0NvbXBvbmVudCIsInJlZiIsIlhTdmciLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lSW5kZXgiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsInBvcExheWVyIiwibWFrZUxpbmsiLCJtYWtlQnV0dG9uIiwiYWN0aW9uIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bm1vdW50ZWQiLCJsaW5rcyIsImludml0ZSIsInRlc3RlciIsImRvbmF0ZSIsInBhdHJlb24iLCJhdXRob3JJZCIsImF1dGhvckxpbmsiLCJpc1NjYW5uaW5nIiwiVG9vbHRpcCIsImFzY2VuZGluZyIsImlzUGx1Z2lucyIsInJldmVyc2UiLCJvbkFkZG9uQ2hhbmdlcyIsImNvbXBvbmVudERpZE1vdW50IiwiYmRFdmVudHMiLCJvcGVuRm9sZGVyIiwic2hvdWxkRGVsZXRlIiwiY29uZmlybURlbGV0ZSIsInNvcnRPcHRpb25zIiwiZGlyZWN0aW9ucyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0QWRkb25zIiwic29ydGVkQWRkb25zIiwiYiIsImNhcCIsImZpcnN0Iiwic2Vjb25kIiwibG9jYWxlQ29tcGFyZSIsInJlbmRlckNoZWNrVXBkYXRlcyIsIlplcmVzUGx1Z2luTGlicmFyeSIsIlBsdWdpblVwZGF0ZXMiLCJjaGVja0FsbCIsIm1hcmdpbkxlZnQiLCJyZWZyZXNoSWNvbiIsImFkZG9uQ2FyZHMiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwib3BhY2l0eSIsIlYyQ19DaGVja2JveCIsImNoZWNrYm94RWxlbWVudCIsImNoZWNrYm94IiwiY2hlY2tib3hJbm5lciIsIlNlbGVjdCIsImRyb3Bkb3duIiwiY3JlYXRlUmVmIiwic2hvd01lbnUiLCJoaWRlTWVudSIsIm9wdCIsImlzT3BlbiIsIlNlYXJjaCIsIm9uS2V5RG93biIsInBsYWNlaG9sZGVyIiwiVjJDX0NvbnRlbnRDb2x1bW4iLCJjb250ZW50TW9kdWxlIiwiY29udGVudENvbHVtbiIsImNvbnRlbnRDb2x1bW5EZWZhdWx0IiwiVjJDX0Nzc0VkaXRvciIsImxpbmVzIiwiZGV0YWNoZWRFZGl0b3IiLCJWMkNfQ3NzRWRpdG9yRGV0YWNoZWQiLCJ1cGRhdGVDc3MiLCJzYXZlQ3NzIiwiZGV0YWNoIiwiZGV0YWNoZWQiLCJlZGl0b3IiLCJhY2UiLCJzZXRUaGVtZSIsInNldE1vZGUiLCJzZXRTaG93UHJpbnRNYXJnaW4iLCJzZXRGb250U2l6ZSIsImRlc3Ryb3kiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJkZXRhY2hlZFJvb3QiLCJjb2RlTWlycm9yIiwibGluZU51bWJlcnMiLCJtb2RlIiwiaW5kZW50VW5pdCIsInNjcm9sbGJhclN0eWxlIiwiX2Njc3MiLCJjY3NzIiwidXBkYXRlTGluZUNvdW50IiwibGluZUNvdW50IiwiU2V0dGluZ3NUaXRsZSIsIkNoZWNrYm94IiwiYm9yZGVyUmlnaHQiLCJib3JkZXJMZWZ0IiwiZm9udFNpemUiLCJhcmciLCJnZXRWYWx1ZSIsImRyb290IiwiaW5qZWN0RGV0YWNoZWRSb290IiwiQkRFcnJvckJvdW5kYXJ5IiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsIkRlbGV0ZSIsIkRvd25BcnJvdyIsIkVkaXQiLCJtYXJnaW5Nb2R1bGUiLCJtYXJnaW5Ub3A2MCIsIlYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyIsInByZXZpZXciLCJpc2ZldGNoaW5nIiwiYXNzZXRDb21wb25lbnRzIiwidXBkYXRlV2hlbkZldGNoZWQiLCJkZWZhdWx0U2V0dGluZyIsIlJQQ1Byb3BzIiwiYXNzZXQiLCJ1cGRhdGVQcmV2aWV3Iiwib3B0aW9uc0NvbXBvbmVudHMiLCJvaGdvZG9oZnVjayIsIl9vcHRpb25zQ29tcG9uZW50cyIsImFycmF5IiwiaW5wdXRUZXh0TW9kdWxlcyIsIklucHV0VGV4dCIsInJlbW92ZUtleWJpbmQiLCJfaG9yaXpvbnRhbCIsImlucHV0TWluaSIsInNpemUxNiIsInNpemUyMCIsImlucHV0IiwibGFzdEVkaXRlZCIsImlzVGltaW5nIiwicm93TW9kdWxlIiwiZmxleE1vZHVsZSIsImlucHV0TW9kdWxlIiwic2l6ZU1vZHVsZTIiLCJyb3ciLCJmbGV4Q2hpbGQiLCJJbnB1dE51bWJlck1vZHVsZXMiLCJJbnB1dE51bWJlciIsImNvbG9yVHJhbnNwYXJlbnQiLCJzZXRWYWx1ZSIsImNsaXBib2FyZCIsIklucHV0Q2hvaWNlTW9kdWxlcyIsIklucHV0Q2hvaWNlIiwiRGl2aWRlck1vZHVsZXMiLCJEaXZpZGVyIiwiZGl2aWRlciIsImRpdmlkZXJEZWZhdWx0IiwiRGlzY29yZEJ1dHRvbiIsIlJwY1ByZXZpZXciLCJhY3RpdmUiLCJjaGFuZ2VUYWIiLCJhbmNpZW50VGFiIiwic2V0QWN0aXZlIiwiZmxleCIsInJwYyIsImlzQWN0aXZlIiwiUHJvZmlsZSIsIlBvcG91dCIsIlRhYiIsImVtcHR5Q2xhc3NlcyIsIlByZXNlbmNlRXJyb3JDYXRjaGVyIiwiZXJySW5mbyIsImVtcHR5U3RhdGVJbWFnZSIsImVtcHR5U3RhdGVIZWFkZXIiLCJlbXB0eVN0YXRlU3VidGV4dCIsInBvcG91dE1vZHVsZXMiLCJVc2VyUG9wb3V0Q29tcG9uZW50IiwiUG9wb3V0UHJvcHMiLCJVc2VyUG9wb3V0IiwicmVuZGVyMSIsImNoYW5uZWxJZCIsImRpc2FibGVVc2VyUHJvZmlsZUxpbmsiLCJyZW5kZXIyIiwicmVuZGVyMyIsInBvcG91dCIsImV4Y2x1ZGVQcm9wZXJ0aWVzIiwicHJvZmlsZU1vZHVsZXMiLCJVc2VyUHJvZmlsZUNvbXBvbmVudCIsIlByb2ZpbGVQcm9wcyIsImNvbm5lY3RlZFByb2ZpbGVTdG9yZSIsIlVzZXJQcm9maWxlIiwicmVuZGVyNCIsInByb2ZpbGUiLCJWMkNfTGF5ZXIiLCJrZXl1cExpc3RlbmVyIiwidHJhbnNmb3JtIiwiY29tcG9uZW50V2lsbE1vdW50IiwiY2hhbmdlQ2F0ZWdvcnkiLCJzZWFyY2hLZXlEb3duIiwiY2hlY2tDb25uZWN0aW9uIiwiY29ubmVjdCIsIkd1aWxkU3RvcmUiLCJBdmF0YXJEZWZhdWx0cyIsIlNvcnRlZEd1aWxkU3RvcmUiLCJzZWxlY3RlZENhdGVnb3J5IiwibG9hZGluZyIsInNlcnZlcnMiLCJjb25uZWN0aW9uIiwiZmV0Y2giLCJzZXJ2ZXIiLCJqb2luZWQiLCJlbmQiLCJ0ZXJtIiwiY2F0ZWdvcnlCdXR0b25zIiwidG90YWwiLCJzYnYiLCJjb250ZW50U2Nyb2xsZXIiLCJzZXJ2ZXJDYXJkIiwicGlubmVkIiwiYWNjZXB0SW52aXRlIiwiaW52aXRlX2NvZGUiLCJqb2luRW5kUG9pbnQiLCJpZGVudGlmaWVyIiwiY3JlZGVudGlhbHMiLCJ3aW5kb3dPcHRpb25zIiwic2NyZWVuWCIsInNjcmVlblkiLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInJlc2l6YWJsZSIsIm1heGltaXphYmxlIiwibWluaW1pemFibGUiLCJhbHdheXNPblRvcCIsImNlbnRlciIsIndlYlByZWZlcmVuY2VzIiwibm9kZUludGVncmF0aW9uIiwiYmRTZXJ2ZXIiLCJvbmxpbmUiLCJtZW1iZXJzIiwiaWNvblVybCIsIm5hdGl2ZWpvaW4iLCJzZXJ2ZXIyIiwiZ3VpbGRMaXN0IiwiZ2V0RmxhdHRlbmVkR3VpbGRJZHMiLCJkZWZhdWx0TGlzdCIsIkRFRkFVTFRfQVZBVEFSUyIsIlNlcnZlckNhcmQiLCJmYWxsYmFjayIsImZsb29yIiwiY29ubmVjdEVuZFBvaW50IiwiU2lkZWJhclZpZXciLCJ0b29scyIsIlRvb2xzIiwiVGFiQmFyU2VwYXJhdG9yIiwic2VhcmNoSW5wdXQiLCJUYWJCYXJIZWFkZXIiLCJUYWJCYXJJdGVtIiwibWF4TGVuZ3RoIiwic2VhcmNoaW5wdXQiLCJub3RDb25uZWN0ZWQiLCJjb2x1bW5Nb2R1bGUiLCJtaW5IZWlnaHQiLCJsaW5lSGVpZ2h0IiwiVjJDX1NlcnZlckNhcmQiLCJpbWFnZUVycm9yIiwiY2FyZE1vZHVsZSIsImNhcmQiLCJjYXJkUHJpbWFyeSIsIl9ob3Jpem9udGFsUmV2ZXJzZSIsIndyYXBNb2R1bGUiLCJub1dyYXAiLCJzdHJlYW1lck1vZGVFbmFibGVkIiwib25FcnJvciIsImhhbmRsZUVycm9yIiwiZHJhZ2dhYmxlIiwiaG9yaXpvbnRhbCIsIlYyQ19TaWRlYmFyVmlldyIsIlNjcm9sbGVyIiwiZmFkZSIsImRhcmsiLCJWMkNfUmVsb2FkSWNvbiIsInhtbG5zIiwiVjJDX1Njcm9sbGVyIiwic2Nyb2xsZXJNb2R1bGUxIiwic2Nyb2xsZXJIb3Jpem9udGFsIiwic2Nyb2xsZXJNb2R1bGUyIiwic2lkZWJhclJlZ2lvblNjcm9sbGVyIiwid3JhcHBlckNsYXNzIiwic2Nyb2xsZXJGYWRlIiwic2Nyb2xsZXJDbGFzcyIsImNvbnRlbnRSZWdpb25TY3JvbGxlciIsImNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXAiLCJ0aGVtZUdob3N0Iiwic2Nyb2xsZXJUcmFjayIsIlYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiU2V0dGluZ3NHcm91cCIsIlYyQ19TZXR0aW5nc0dyb3VwIiwiYnV0dG9uQ29tcG9uZW50IiwiVjJDX1NldHRpbmdzVGl0bGUiLCJjbGFzc25hbWVzIiwiZ2V0Q2xhc3NOYW1lIiwiU3dpdGNoSXRlbSIsImJldGEiLCJ1c2VyU2V0dGluZ3NWb2ljZSIsIlYyQ19UYWJCYXJIZWFkZXIiLCJWMkNfVGFiQmFySXRlbSIsIlYyQ19UYWJCYXJTZXBhcmF0b3IiLCJpbnRlcnZhbE1vZHVsZTEiLCJJbnRlcnZhbCIsIlRpbWVSZW5kZXIiLCJfaW50ZXJ2YWwiLCJnZXRVcGRhdGVkVGltZSIsImdldERpZmYiLCJjaGVja1VuaXgiLCJob3VycyIsIm1pbnV0ZXMiLCJzZWNvbmRzIiwicmVuZGVyVGltZSIsIm51bWJlciIsInJlbW92ZVplcm8iLCJ1c2VkUHJvcHMiLCJVU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9FTkQiLCJVU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVCIsIlYyQ19Ub29scyIsInRvb2xzTW9kdWxlIiwidG9vbHNDb250YWluZXIiLCJjb250YWluZXJNb2R1bGUiLCJjbG9zZUJ1dHRvbiIsImNsb3NlQnV0dG9uQm9sZCIsImtleWJpbmQiLCJrZXliaW5kQm9sZCIsIlRvb2x0aXBDbGFzc2VzIiwiZ2V0VG9vbHRpcENsYXNzZXMiLCJUb29sdGlwTGF5ZXJzIiwiZ2V0VG9vbHRpcExheWVycyIsImdldENsYXNzIiwic2lkZU9yQ29sb3IiLCJ1cHBlckNhc2UiLCJ0b29sdGlwQ2xhc3MiLCJjbGFzc0V4aXN0cyIsInRvUHgiLCJFbXVsYXRlZFRvb2x0aXAiLCJwcmV2ZW50RmxpcCIsInRvb2x0aXBFbGVtZW50IiwidG9vbHRpcCIsImxhYmVsRWxlbWVudCIsInRvb2x0aXBDb250ZW50IiwicG9pbnRlckVsZW1lbnQiLCJ0b29sdGlwUG9pbnRlciIsInBvcG91dHMiLCJjYW5TaG93QWJvdmUiLCJjYW5TaG93QmVsb3ciLCJjYW5TaG93TGVmdCIsImNhblNob3dSaWdodCIsIl9jbGFzc05hbWUiLCJzaG93QWJvdmUiLCJzaG93QmVsb3ciLCJzaG93TGVmdCIsInNob3dSaWdodCIsImNlbnRlckhvcml6b250YWxseSIsImNlbnRlclZlcnRpY2FsbHkiLCJub2RlY2VudGVyIiwiZmluZERPTU5vZGUiLCJWMkNfWFN2ZyJdLCJtYXBwaW5ncyI6Ijs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixF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LENBQVduakIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDQyxlQUFTLEVBQUUsTUFBWjtBQUFvQnkrQixVQUFJLEVBQUUsU0FBMUI7QUFBcUN4RCxPQUFDLEVBQUU7QUFBeEMsS0FBakMsQ0FKSixDQUhHLENBQVA7QUFVSDs7QUFoQnFELEM7Ozs7Ozs7Ozs7O0FDRjFELG1DOzs7Ozs7Ozs7OztBQ0FBLHFDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLCtCOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLGtDIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsImltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBtaW5pbXVtRGlzY29yZFZlcnNpb24gPSBcIjAuMC4zMDZcIjtcclxuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBtaW5TdXBwb3J0ZWRWZXJzaW9uID0gXCIwLjMuMFwiO1xyXG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjVcIjtcclxuLypcclxuZXhwb3J0IGNvbnN0IExDQ2hhbmVsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJMaWdodGNvcmQncyBjaGFuZ2Vsb2dcIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCBpcyBub3cgYXZhaWxhYmxlICFcIixcclxuICAgICAgICAgICAgICAgIFwiV2UgcmVtb3ZlZCBlbW90ZXMuIFRoYXQncyBzYWQgZm9yIHBlb3BsZSB3aG8gd2VyZSBhY3R1YWxseSB1c2luZyBpdCwgYnV0IGl0IHdhcyBsZWFkaW5nIHRvIG1vcmUgbG9hZGluZyB0aW1lIGFuZCBzb21lIGJhc2ljIHdvcmRzIHdlcmUgZW1vdGUuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBpbWFnZTogXCJodHRwczovL2kuaW1ndXIuY29tL3NmTmhxd1AucG5nXCIsXHJcbiAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcclxuICAgIHN1YnRpdGxlOiBcInZcIityZW1vdGUuZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb24sXHJcbiAgICBmb290ZXI6IChmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGlmKCFUZXh0RWxlbWVudCB8fCAhTW9kYWxTdGFjaylyZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBCRFYyLmpvaW5MQygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0RWxlbWVudCwge3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XHJcbiAgICB9KSgpXHJcbn0qL1xyXG5leHBvcnQgY29uc3QgYmJkQ2hhbmdlbG9nID0ge1xyXG4gICAgZGVzY3JpcHRpb246IFwiQkJEJ3MgY2hhbmdlbG9nLlwiLFxyXG4gICAgY2hhbmdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQnVnIEZpeGVzXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiLFxyXG4gICAgICAgICAgICAgICAgXCJGaXhlZCB0aGUgb3BlbiBmb2xkZXIgYnV0dG9ucyBmb3IgcGx1Z2lucyBhbmQgdGhlbWVzXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcclxuICAgIFwiQ3VzdG9tIGNzcyBsaXZlIHVwZGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMFwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQ3VzdG9tIGNzcyBhdXRvIHVkcGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMVwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQmV0dGVyRGlzY29yZCBCbHVlXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy1iXCIsICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLCAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IGZhbHNlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIn0sXHJcblxyXG4gICAgLyogQ29yZSAqL1xyXG4gICAgLyogPT09PT09ICovXHJcbiAgICBcIlB1YmxpYyBTZXJ2ZXJzXCI6ICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtMVwiLCAgaW5mbzogXCJEaXNwbGF5IHB1YmxpYyBzZXJ2ZXJzIGJ1dHRvblwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiTWluaW1hbCBNb2RlXCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0yXCIsICBpbmZvOiBcIkhpZGUgZWxlbWVudHMgYW5kIHJlZHVjZSB0aGUgc2l6ZSBvZiBlbGVtZW50cy5cIiwgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBNb2RlXCI6ICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTRcIiwgIGluZm86IFwiT25seSBzaG93IHZvaWNlIGNoYXRcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkhpZGUgQ2hhbm5lbHNcIjogICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtM1wiLCAgaW5mbzogXCJIaWRlIGNoYW5uZWxzIGluIG1pbmltYWwgbW9kZVwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiRGFyayBNb2RlXCI6ICAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy01XCIsICBpbmZvOiBcIk1ha2UgY2VydGFpbiBlbGVtZW50cyBkYXJrIGJ5IGRlZmF1bHQod2lwKVwiLCAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBEaXNjb25uZWN0XCI6ICAgICAgICAgICB7aWQ6IFwiYmRhLWRjLTBcIiwgIGluZm86IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIjI0IEhvdXIgVGltZXN0YW1wc1wiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtNlwiLCAgaW5mbzogXCJSZXBsYWNlIDEyaHIgdGltZXN0YW1wcyB3aXRoIHByb3BlciBvbmVzXCIsICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiQ29sb3JlZCBUZXh0XCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy03XCIsICBpbmZvOiBcIk1ha2UgdGV4dCBjb2xvciB0aGUgc2FtZSBhcyByb2xlIGNvbG9yXCIsICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJOb3JtYWxpemUgQ2xhc3Nlc1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy00XCIsIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG5cclxuICAgIC8qIENvbnRlbnQgKi9cclxuICAgIFwiQ29udGVudCBFcnJvciBNb2RhbFwiOiAgICAgICAge2lkOiBcImZvcmstcHMtMVwiLCBpbmZvOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjYW4gUGx1Z2luc1wiOiAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTZcIiwgaW5mbzogXCJTY2FuIHBsdWdpbnMgZm9yIGFueSB0aHJlYXQgdGhhdCBjYW4gYmUgaGlkZGVuIGluc2lkZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2hvdyBUb2FzdHNcIjogICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtMlwiLCBpbmZvOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtM1wiLCBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJBdXRvbWF0aWMgTG9hZGluZ1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy01XCIsIGluZm86IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkVuYWJsZSBFZGl0IEJ1dHRvblwiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTdcIiwgaW5mbzogXCJFbmFibGUgYW4gRWRpdCBCdXR0b24gb24gdGhlIHBsdWdpbiBhbmQgdGhlbWUgcGFuZWwuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcblxyXG4gICAgLyogRGV2ZWxvcGVyICovXHJcbiAgICBcIkRldmVsb3BlciBNb2RlXCI6ICAgICAgICAgXHQgIHtpZDogXCJiZGEtZ3MtOFwiLCBpbmZvOiBcIkRldmVsb3BlciBNb2RlIFRvZ2dsZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJDb3B5IFNlbGVjdG9yXCI6XHRcdFx0ICB7aWQ6IFwiZm9yay1kbS0xXCIsIGluZm86IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJSZWFjdCBEZXZUb29sc1wiOlx0XHRcdCAge2lkOiBcInJlYWN0RGV2VG9vbHNcIiwgaW5mbzogXCJBZGRzIHJlYWN0IGRldmVsb3BlciB0b29scyB0byB0aGUgZGV2dG9vbHMuIE11c3QgYmUgaW5zdGFsbGVkIGluIEdvb2dsZSBDaHJvbWUgb24geW91ciBwYy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiAgICAgIHtpZDogXCJiZC1kaXNhYmxlXCIsICBpbmZvOiBcIkRpc2FibGUgQmV0dGVyZGlzY29yZCAocGx1Z2lucywgdGhlbWVzLCBldGMpIChOb3QgaW1wbGVtZW50ZWQpLlwiLCBpbXBsZW1lbnRlZDogZmFsc2UsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJCbHVyIFBlcnNvbmFsIEluZm9ybWF0aW9uXCI6ICB7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJDYWxsaW5nIFJpbmcgQmVhdFwiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTJcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzIHNwZWNpYWwgY2FsbGluZyBiZWF0LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRldmVsb3BlciBPcHRpb25zXCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMVwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgJiBMaWdodGNvcmQncyBJbnRlcm5hbCBEZXZlbG9wZXIgT3B0aW9ucy4gVGhpcyBhbGxvdyB0aGUgXFxcIkV4cGVyaW1lbnRzXFxcIiB0YWIsIHRoZSBcXFwiRGV2ZWxvcGVyIE9wdGlvbnNcXFwiIHRhYiBhbmQgdGhlIFxcXCJMaWdodGNvcmQgQXBpXFxcIiBzZWN0aW9uLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbXMgeW91IHdpdGggYW4gaW52aXRlIGxpbmsuIEV2ZW4gaW4gYW4gZW1iZWQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRW5hYmxlIExpZ2h0Y29yZCBTZXJ2ZXJzXCI6ICAge2lkOiBcImxpZ2h0Y29yZC01XCIsIGluZm86IFwiRW5hYmxlIExpZ2h0Y29yZCdzIHNlcnZlcnMuIERpc2FibGluZyB0aGlzIHdpbGwgZGlzYWJsZSBjdXN0b20gYmFkZ2VzLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRpc2FibGUgdHlwaW5nXCI6ICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtN1wiLCBpbmZvOiBcIkRvbid0IGxldCBvdGhlciBzZWUgeW91J3JlIHR5cGluZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJMaWdodGNvcmQgVGFic1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLThcIiwgaW5mbzogXCJBbGxvd3MgeW91IHRvIGxhdW5jaCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgTGlnaHRjb3JkIGluIHRoZSBzYW1lIHdpbmRvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCIsIGV4cGVyaW1lbnRhbDogdHJ1ZX0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cclxuICAgIFwiQWx3YXlzLW9uLVRvcFwiOiAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0zXCIsIGluZm86IFwiRW5hYmxlIHRoZSB3aW5kb3cncyBBbHdheXMtb24tVG9wIG1vZGUsIHdoZXJlIExpZ2h0Y29yZCBzdGF5cyBvbiB0b3Agb2Ygb3RoZXIgYXBwbGljYXRpb25zLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcIk5vIFdpbmRvdyBCb3VuZHNcIjogICAgICAgICAgIHtpZDogXCJub193aW5kb3dfYm91bmRcIiwgaW5mbzogXCJEaXNhYmxlIFdpbmRvdyBCb3VuZHMuIENhbiBiZSB1c2VmdWwgaWYgeW91IHVzZSBhIHdpbmRvdyBtYW5hZ2VyLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBwcm9jZXNzLnBsYXRmb3JtICE9PSBcImxpbnV4XCIsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXCJFbmFibGUgR2xhc3N0cm9uXCI6ICAgICAgICAgICB7aWQ6IFwiZW5hYmxlX2dsYXNzdHJvblwiLCBpbmZvOiBcIkVuYWJsZSBHbGFzc3Ryb24uIElmIHlvdSdyZSBub3QgdXNpbmcgdHJhbnNwYXJlbnQgdGhlbWVzLCB0aGlzIGNhbiByZWR1Y2UgbGFnLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcclxuICAgIC8qKiBSaWNoUHJlc2VuY2UgKi9cclxuICAgIFwiRW5hYmxlXCI6ICAgICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIsIGluZm86IFwiRW5hYmxlIFJpY2hQcmVzZW5jZSBiZWxvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJzdGF0dXNcIn1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29va2llID0ge1xyXG4gICAgXCJiZGEtZ3MtMVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTNcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtNlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTdcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy04XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0wXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0yXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtNlwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtN1wiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtYlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWRjLTBcIjogZmFsc2UsXHJcbiAgICBcImJkYS1jc3MtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0xXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLWRtLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstcHMtMVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNFwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy02XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtN1wiOiBmYWxzZSxcclxuICAgIFwiZm9yay1lcy0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWVzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay13cC0xXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLXdwLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstYmV0YVwiOiB0cnVlLFxyXG4gICAgXCJyZWFjdERldlRvb2xzXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTJcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0zXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNFwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTZcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTdcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC04XCI6IGZhbHNlLFxyXG4gICAgXCJub193aW5kb3dfYm91bmRcIjogZmFsc2UsXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XHJcbiAgICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcclxuICAgIFwiYXBwbGljYXRpb25faWRcIjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIixcclxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXHJcbiAgICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXHJcbiAgICBcInRpbWVzdGFtcHMuc3RhcnRcIjogRGF0ZS5ub3coKSxcclxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXHJcbiAgICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbkVycm9ycyA9IFtdO1xyXG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblxyXG5leHBvcnQgY29uc3QgYmRDb25maWcgPSBPYmplY3QuY3JlYXRlKEJldHRlckRpc2NvcmRDb25maWcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVzID0ge307XHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcclxuZXhwb3J0IGNvbnN0IHRoZW1lQ29va2llID0ge307IiwiaW1wb3J0IGxvY2FsU3RvcmFnZUZpeCBmcm9tIFwiLi9sb2NhbFN0b3JhZ2VGaXhcIjtcclxuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XHJcbmxvY2FsU3RvcmFnZUZpeCgpO1xyXG5sb2FkaW5nSWNvbigpO1xyXG5cclxuY29uc3QgZGVwcmVjYXRlR2xvYmFsID0gKGtleSwgdmFsdWUpID0+IHtcclxuICAgIC8vIHZhbHVlID0gdHlwZW9mKHZhbHVlKSAhPT0gXCJvYmplY3RcIiA/IHZhbHVlIDogbmV3IFByb3h5KHZhbHVlLCB7XHJcbiAgICAvLyAgICAgZ2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgLy8gICAgICAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gb2JqW21vZF07XHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgICBzZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kKSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIFV0aWxzLmVycihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIFwiVHJ5aW5nIHRvIG92ZXJ3cml0ZSBkZXByZWNhdGVkIEJEIGdsb2JhbHNcIik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBrZXksIHtcclxuICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBgXCIke2tleX1cIiB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2Ugb25seSB1c2UgQmRBcGkuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTsgIFxyXG59O1xyXG5cclxuXHJcbmltcG9ydCAqIGFzIEdsb2JhbHMgZnJvbSBcIi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGdsb2JhbEtleXMgPSBPYmplY3Qua2V5cyhHbG9iYWxzKTtcclxuZm9yIChjb25zdCBrZXkgb2YgZ2xvYmFsS2V5cykgZGVwcmVjYXRlR2xvYmFsKGtleSwgR2xvYmFsc1trZXldKTtcclxuXHJcblxyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL21vZHVsZXMvYmRFdmVudHNcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9tb2R1bGVzL2NsYXNzTm9ybWFsaXplclwiO1xyXG5cclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRWMlwiLCBCRFYyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwicGx1Z2luTW9kdWxlXCIsIHBsdWdpbk1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInRoZW1lTW9kdWxlXCIsIHRoZW1lTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiVXRpbHNcIiwgVXRpbHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJCREV2ZW50c1wiLCBCREV2ZW50cyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInNldHRpbmdzUGFuZWxcIiwgc2V0dGluZ3NQYW5lbCk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkRhdGFTdG9yZVwiLCBEYXRhU3RvcmUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDb250ZW50TWFuYWdlclwiLCBDb250ZW50TWFuYWdlcik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNsYXNzTm9ybWFsaXplclwiLCBDbGFzc05vcm1hbGl6ZXIpO1xyXG5cclxud2luZG93LkJkQXBpID0gQmRBcGk7XHJcblxyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcclxuZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgQ29yZSk7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnLCBtZXRob2RzKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoYmRDb25maWcpO1xyXG4gICAgICAgIENvcmUuc2V0TWV0aG9kcyhtZXRob2RzKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIC8vIGRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIHRoaXMubWFpbkNvcmUpO1xyXG4gICAgICAgIENvcmUuaW5pdCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBmdW5jdGlvbiBwYXRjaE1vZHVsZUxvYWQoKSB7XHJcbi8vICAgICBjb25zdCBuYW1lc3BhY2UgPSBcImJldHRlcmRpc2NvcmRcIjtcclxuLy8gICAgIGNvbnN0IHByZWZpeCA9IGAke25hbWVzcGFjZX0vYDtcclxuLy8gICAgIGNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIik7XHJcbi8vICAgICBjb25zdCBsb2FkID0gTW9kdWxlLl9sb2FkO1xyXG4vLyAgICAgLy8gY29uc3QgcmVzb2x2ZUZpbGVuYW1lID0gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWU7XHJcblxyXG4vLyAgICAgTW9kdWxlLl9sb2FkID0gZnVuY3Rpb24ocmVxdWVzdCkge1xyXG4vLyAgICAgICAgIGlmIChyZXF1ZXN0ID09PSBuYW1lc3BhY2UgfHwgcmVxdWVzdC5zdGFydHNXaXRoKHByZWZpeCkpIHtcclxuLy8gICAgICAgICAgICAgY29uc3QgcmVxdWVzdGVkID0gcmVxdWVzdC5zdWJzdHIocHJlZml4Lmxlbmd0aCk7XHJcbi8vICAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQgPT0gXCJhcGlcIikgcmV0dXJuIEJkQXBpO1xyXG4vLyAgICAgICAgIH1cclxuXHJcbi8vICAgICAgICAgcmV0dXJuIGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuLy8gICAgIH07XHJcblxyXG4vLyAgICAgLy8gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgPSBmdW5jdGlvbiAocmVxdWVzdCwgcGFyZW50LCBpc01haW4pIHtcclxuLy8gICAgIC8vICAgICBpZiAocmVxdWVzdCA9PT0gXCJiZXR0ZXJkaXNjb3JkXCIgfHwgcmVxdWVzdC5zdGFydHNXaXRoKFwiYmV0dGVyZGlzY29yZC9cIikpIHtcclxuLy8gICAgIC8vICAgICAgICAgY29uc3QgY29udGVudFBhdGggPSBQbHVnaW5NYW5hZ2VyLmdldFBsdWdpblBhdGhCeU1vZHVsZShwYXJlbnQpO1xyXG4vLyAgICAgLy8gICAgICAgICBpZiAoY29udGVudFBhdGgpIHJldHVybiByZXF1ZXN0O1xyXG4vLyAgICAgLy8gICAgIH1cclxuXHJcbi8vICAgICAvLyAgICAgcmV0dXJuIHJlc29sdmVGaWxlbmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4vLyAgICAgLy8gfTtcclxuXHJcbi8vICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbi8vICAgICAgICAgTW9kdWxlLl9sb2FkID0gbG9hZDtcclxuLy8gICAgIH07XHJcbi8vIH1cclxuXHJcbi8vIHBhdGNoTW9kdWxlTG9hZCgpO1xyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwsIGRNb2RlLCBwdWJsaWNTZXJ2ZXJzTW9kdWxlO1xyXG4vLyB2YXIgYmRDb25maWcgPSBudWxsOyIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICAgIGNvbnN0IHYyTG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHYyTG9hZGVyLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxuICAgIHYyTG9hZGVyLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodjJMb2FkZXIpO1xyXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgY29udGVudFdpbmRvd0dldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIikuZ2V0O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IFJlZmxlY3QuYXBwbHkoY29udGVudFdpbmRvd0dldHRlciwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb250ZW50V2luZG93LCB7XHJcbiAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWwuYmluZChvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgaW50ZXJjZXB0aW9uIGJ5IHBhdGNoaW5nIFJlZmxlY3QuYXBwbHkgYW5kIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdCwgXCJhcHBseVwiLCB7dmFsdWU6IFJlZmxlY3QuYXBwbHksIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgXCJiaW5kXCIsIHt2YWx1ZTogRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG5cclxuICAgIGNvbnN0IG9PcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47XHJcbiAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICBpZiAodXJsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJhcGkvd2ViaG9va3NcIikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG9PcGVuLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBURkhvdXIge1xyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvbXBhY3QgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiZGF0ZUZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvbXBhY3QgbW9kZVxyXG4gICAgICAgIHRoaXMuY2FuY2VsMjRIb3VyID0gKCkgPT4ge2NhbmNlbENvenkoKTsgY2FuY2VsQ29tcGFjdCgpO307IC8vIENhbmNlbCBib3RoXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlMjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgdGhpcy5jYW5jZWwyNEhvdXIoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxyXG5jb25zdCBDaGFubmVsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q2hhbm5lbCAmJiBlLmRlZmF1bHQuaGFzQ2hhbm5lbClbMF0uZGVmYXVsdFxyXG5sZXQgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG5sZXQgRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG5cclxuY29uc3QgYmxvY2tlZCA9IHt9XHJcblxyXG5sZXQgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcigpe1xyXG4gICAgaWYodXNlck1vZHVsZSlyZXR1cm4gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBBbnRpQm90RE0ge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmFudGlETSA9IHRoaXMuYW50aURNLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci51bnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGFudGlETShldil7XHJcbiAgICAgICAgaWYoIWV2Lm1lc3NhZ2UuYXV0aG9yLmJvdClyZXR1cm5cclxuICAgICAgICBpZihldi5tZXNzYWdlLmF1dGhvci5pZCA9PT0gZ2V0Q3VycmVudFVzZXIoKS5pZClcclxuICAgICAgICBpZihldi5tZXNzYWdlLmd1aWxkX2lkKXJldHVyblxyXG5cclxuICAgICAgICBjb25zdCBjaGFubmVsID0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsKGV2Lm1lc3NhZ2UuY2hhbm5lbF9pZClcclxuICAgICAgICBpZighY2hhbm5lbClyZXR1cm4gLy8gbWlnaHQgYmUgYnJva2VuXHJcblxyXG4gICAgICAgIGlmKGNoYW5uZWwudHlwZSAhPT0gMSlyZXR1cm5cclxuXHJcbiAgICAgICAgaWYoYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0pcmV0dXJuIC8vIElmIHRoZSB1c2VyIHVuYmxvY2sgdGhlIGJvdCwgRG9uJ3QgYmxvY2sgaXQgYWdhaW4uXHJcblxyXG4gICAgICAgIGlmKHNjYW5NZXNzYWdlKGV2Lm1lc3NhZ2UpKXtcclxuICAgICAgICAgICAgYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0gPSB0cnVlXHJcbiAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChgW0FkQmxvY2tdOiBCbG9ja2VkICR7ZXYubWVzc2FnZS5hdXRob3IudXNlcm5hbWV9IyR7ZXYubWVzc2FnZS5hdXRob3IuZGlzY3JpbWluYXRvcn1gLCB7XHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ3YXJuaW5nXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXJlbGF0aW9uU2hpcE1vZHVsZSlyZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbiAgICAgICAgICAgIHJlbGF0aW9uU2hpcE1vZHVsZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcChldi5tZXNzYWdlLmF1dGhvci5pZCwge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IFwiQ29udGV4dE1lbnVcIlxyXG4gICAgICAgICAgICB9LCAyKVxyXG4gICAgICAgICAgICBpZighRE1Nb2R1bGUpRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG4gICAgICAgICAgICBETU1vZHVsZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwoY2hhbm5lbC5pZCwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzY2FuTWVzc2FnZShtZXNzYWdlKXtcclxuICAgIGlmKC8oZGlzY29yZFxcLmdnfGRpc2NvcmRcXC5jb21cXC9pbnZpdGVcXC98ZGlzY29yZGFwcFxcLmNvbVxcL2ludml0ZVxcLykvZy50ZXN0KG1lc3NhZ2UuY29udGVudCkpcmV0dXJuIHRydWVcclxuICAgIGlmKEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5nZy9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmNvbS9pbnZpdGUvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZGFwcC5jb20vaW52aXRlL1wiKSlyZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG59XHJcbmZ1bmN0aW9uIEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIHNlYXJjaCl7XHJcbiAgICBsZXQgZW1iZWRzID0gbWVzc2FnZS5lbWJlZHNcclxuICAgIGlmKGVtYmVkcy5sZW5ndGggPT09IDApcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gZW1iZWRzLm1hcChlbWJlZCA9PiB7XHJcbiAgICAgICAgaWYoZW1iZWQudHlwZSAhPT0gXCJyaWNoXCIpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgaWYoKGVtYmVkLnRpdGxlIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoZW1iZWQuZGVzY3JpcHRpb24gfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKCgoZW1iZWQuZm9vdGVyIHx8IFwiXCIpICYmIGVtYmVkLmZvb3Rlci50ZXh0IHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZihlbWJlZC5maWVsZHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZS52YWx1ZS5pbmNsdWRlcyhzZWFyY2gpIHx8IGUubmFtZS5pbmNsdWRlcyhzZWFyY2gpXHJcbiAgICAgICAgfSkuaW5jbHVkZXModHJ1ZSkpcmV0dXJuIHRydWVcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9KS5pbmNsdWRlcyh0cnVlKVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc1JQQywgZGVmYXVsdFJQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBkaXNwYXRjaGVyID0gQkRNb2R1bGVzLmdldChtPT5tLkRpc3BhdGNoZXImJm0uZGVmYXVsdCYmbS5kZWZhdWx0LmRpc3BhdGNoKVswXS5kZWZhdWx0XHJcbmNvbnN0IEFjdGlvblR5cGVzID0gQkRNb2R1bGVzLmdldChtPT5tLkFjdGlvblR5cGVzKVswXS5BY3Rpb25UeXBlc1xyXG5cclxuY29uc3Qgc29ja2V0SWQgPSBcImxpZ2h0Y29yZC1zcG9vZi1zb2NrZXRcIlxyXG5jb25zdCBwaWQgPSBwcm9jZXNzLnBpZFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEN1c3RvbVJpY2hQcmVzZW5jZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZSA9IHNldHRpbmdzUlBDXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBmb3JtYXRlZEdhbWUoKXtcclxuICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkID09PSBmYWxzZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGxldCBnYW1lID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcclxuICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgIH1cclxuXHJcbiAgICBzZW5kR2FtZSgpe1xyXG4gICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2goe1xyXG4gICAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0NBTF9BQ1RJVklUWV9VUERBVEUsXHJcbiAgICAgICAgICAgIHNvY2tldElkLFxyXG4gICAgICAgICAgICBwaWQsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiB0aGlzLmZvcm1hdGVkR2FtZVxyXG4gICAgICAgIH0pICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCkge1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFbmFibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0KHNldHRpbmdzUlBDIHx8IE9iamVjdC5jcmVhdGUoZGVmYXVsdFJQQykpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGlzYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmV0Y2hBc3NldHMoYXBwbGljYXRpb25JZCl7XHJcbiAgICAgICAgbGV0IGFzc2V0cyA9IGF3YWl0IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEFzc2V0cylbMF0uZ2V0QXNzZXRzKGFwcGxpY2F0aW9uSWQpXHJcbiAgICAgICAgaWYoYXNzZXRzLnVuZGVmaW5lZCAmJiB0eXBlb2YgYXNzZXRzLnVuZGVmaW5lZCA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gQXBwbGljYXRpb25cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0c1xyXG4gICAgfVxyXG5cclxuICAgIHNldChhY3Rpdml0eSl7XHJcbiAgICAgICAgdGhpcy5nYW1lID0gYWN0aXZpdHlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3BsdWdpbkNvb2tpZSwgdGhlbWVDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBtYWluQ29yZSBmcm9tIFwiLi9jb3JlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jb25zdCBCZEFwaSA9IHtcclxuICAgIGdldCBSZWFjdCgpIHsgcmV0dXJuIEJEVjIuUmVhY3Q7IH0sXHJcbiAgICBnZXQgUmVhY3RET00oKSB7IHJldHVybiBCRFYyLlJlYWN0RG9tOyB9LFxyXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiBCRFYyLlJlYWN0Q29tcG9uZW50O30sXHJcbiAgICBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtyZXR1cm4gVXRpbHMuV2luZG93Q29uZmlnRmlsZTt9LFxyXG4gICAgZ2V0IHNldHRpbmdzKCkge3JldHVybiBzZXR0aW5nczt9LFxyXG4gICAgZ2V0IGVtb3RlcygpIHtyZXR1cm4ge319LCAvLyBkZXByZWNhdGVkLCBkZWxldGVkIGFsbCBlbW90ZXMgZnJvbSBiZXR0ZXJkaXNjb3JkLlxyXG4gICAgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfSxcclxuICAgIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cclxufTtcclxuXHJcbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxufTtcclxuXHJcbkJkQXBpLmdldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRXaW5kb3dQcmVmZXJlbmNlKGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkuaW5qZWN0Q1NTID0gZnVuY3Rpb24gKGlkLCBjc3MpIHtcclxuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQoaWQpLCBjc3MpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLmNsZWFyQ1NTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKGlkKSk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcclxuICAgIERPTS5hZGRTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSwgdXJsKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NLnJlbW92ZVNjcmlwdChET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vR2V0IGFub3RoZXIgcGx1Z2luXHJcbi8vbmFtZSA9IG5hbWUgb2YgcGx1Z2luXHJcbkJkQXBpLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBpZiAoYmRwbHVnaW5zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGJkcGx1Z2luc1tuYW1lXS5wbHVnaW47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbi8vR2V0IEJldHRlckRpc2NvcmQgQ29yZVxyXG5CZEFwaS5nZXRDb3JlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgVXRpbHMud2FybihcIkRlcHJlY2F0aW9uIE5vdGljZVwiLCBgQmRBcGkuZ2V0Q29yZSgpIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuYCk7XHJcbiAgICByZXR1cm4gbWFpbkNvcmU7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBtb2RhbC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gYSBzdHJpbmcgb2YgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBtb2RhbFxyXG4gKi9cclxuQmRBcGkuYWxlcnQgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIHtjYW5jZWxUZXh0OiBudWxsfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cclxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcclxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICovXHJcbkJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vU2hvdyB0b2FzdCBhbGVydFxyXG5CZEFwaS5zaG93VG9hc3QgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIFV0aWxzLnNob3dUb2FzdChjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRBbGwoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm9wcyA9IGZ1bmN0aW9uKC4uLnByb3BzKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKHByb3BzKTtcclxufTtcclxuXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3RvdHlwZXMgPSBmdW5jdGlvbiguLi5wcm90b3MpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3RvdHlwZXMocHJvdG9zKTtcclxufTtcclxuXHJcbkJkQXBpLmZpbmRNb2R1bGVCeURpc3BsYXlOYW1lID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUobmFtZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIHJlYWN0IGluc3RhbmNlXHJcbkJkQXBpLmdldEludGVybmFsSW5zdGFuY2UgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2Ygd2luZG93LmpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgbm9kZSA9IG5vZGVbMF07XHJcbiAgICByZXR1cm4gQkRWMi5nZXRJbnRlcm5hbEluc3RhbmNlKG5vZGUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmxvYWREYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbkJkQXBpLmdldERhdGEgPSBCZEFwaS5sb2FkRGF0YTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zYXZlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXREYXRhID0gQmRBcGkuc2F2ZURhdGE7XHJcblxyXG4vLyBEZWxldGVzIGRhdGFcclxuQmRBcGkuZGVsZXRlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5kZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG4vLyBQYXRjaGVzIG90aGVyIGZ1bmN0aW9uc1xyXG5CZEFwaS5tb25rZXlQYXRjaCA9IGZ1bmN0aW9uKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBVdGlscy5tb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEV2ZW50IHdoZW4gZWxlbWVudCBpcyByZW1vdmVkXHJcbkJkQXBpLm9uUmVtb3ZlZCA9IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gVXRpbHMub25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKTtcclxufTtcclxuXHJcbi8vIFdyYXBzIGZ1bmN0aW9uIGluIHRyeS4uY2F0Y2hcclxuQmRBcGkuc3VwcHJlc3NFcnJvcnMgPSBmdW5jdGlvbihtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBVdGlscy5zdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpO1xyXG59O1xyXG5cclxuLy8gVGVzdHMgZm9yIHZhbGlkIEpTT05cclxuQmRBcGkudGVzdEpTT04gPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICByZXR1cm4gVXRpbHMudGVzdEpTT04oZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1BsdWdpbkVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gISFwbHVnaW5Db29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1RoZW1lRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXRoZW1lQ29va2llW25hbWVdO1xyXG59O1xyXG5cclxuQmRBcGkuaXNTZXR0aW5nRW5hYmxlZCA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gISFzZXR0aW5nc0Nvb2tpZVtpZF07XHJcbn07XHJcblxyXG5CZEFwaS5lbmFibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCB0cnVlKTtcclxufTtcclxuXHJcbkJkQXBpLmRpc2FibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCBmYWxzZSk7XHJcbn07XHJcblxyXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCAhc2V0dGluZ3NDb29raWVbaWRdKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XHJcbn07XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuXHJcblxyXG5jb25zdCBtYWtlQWRkb25BUEkgPSAoY29va2llLCBsaXN0LCBtYW5hZ2VyKSA9PiBuZXcgY2xhc3MgQWRkb25BUEkge1xyXG5cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIG1hbmFnZXIuZm9sZGVyO31cclxuXHJcbiAgICBpc0VuYWJsZWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhIWNvb2tpZVtuYW1lXTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5kaXNhYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZShuYW1lKSB7XHJcbiAgICAgICAgaWYgKGNvb2tpZVtuYW1lXSkgdGhpcy5kaXNhYmxlKG5hbWUpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5lbmFibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5yZWxvYWQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KG5hbWUpIHtcclxuICAgICAgICBpZiAobGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtuYW1lXS5wbHVnaW4pIHJldHVybiBsaXN0W25hbWVdLnBsdWdpbjtcclxuICAgICAgICAgICAgcmV0dXJuIGxpc3RbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobGlzdCkubWFwKGsgPT4gdGhpcy5nZXQoaykpLmZpbHRlcihhID0+IGEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQmRBcGkuUGx1Z2lucyA9IG1ha2VBZGRvbkFQSShwbHVnaW5Db29raWUsIGJkcGx1Z2lucywgcGx1Z2luTW9kdWxlKTtcclxuQmRBcGkuVGhlbWVzID0gbWFrZUFkZG9uQVBJKHRoZW1lQ29va2llLCBiZHRoZW1lcywgdGhlbWVNb2R1bGUpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7XHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQmRBcGkgPSBCZEFwaSIsIi8qIEJERXZlbnRzICovXHJcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJldmVudHNcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQkRFdmVudHMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlcigpXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJERXZlbnRzID0gdGhpc1xyXG4gICAgfVxyXG4gICAgZGlzcGF0Y2goZXZlbnROYW1lLCAuLi5hcmdzKSB7dGhpcy5lbWl0KGV2ZW50TmFtZSwgLi4uYXJncyk7fVxyXG4gICAgb2ZmKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pIHt0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pO31cclxufTsiLCIvKipcclxuICogQ3JlZGl0cyB0byBAaGVsbGJvdW5kMTMzNyBvbiBnaXRodWIgZm9yIHRoZSBjc3NcclxuICovXHJcblxyXG5pbXBvcnQgRE9NVG9vbHMgZnJvbSBcIi4vZG9tdG9vbHNcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxubGV0IHNlbGVjdG9yc1xyXG5jb25zdCByZW1vdmVEYSA9IFV0aWxzLnJlbW92ZURhXHJcbmZ1bmN0aW9uIGdldFNlbGVjdG9ycygpe1xyXG4gICAgbGV0IHN0YW5kYXJkU2lkZWJhclZpZXcgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgaWYoIXN0YW5kYXJkU2lkZWJhclZpZXcpcmV0dXJuIG51bGxcclxuICAgIGxldCBkZWZhdWx0Q2xhc3NOYW1lID0gcmVtb3ZlRGEoc3RhbmRhcmRTaWRlYmFyVmlldy5zdGFuZGFyZFNpZGViYXJWaWV3KVxyXG4gICAgbGV0IHNlbGVjdHMgPSBbXVxyXG4gICAgbGV0IHVzZXJTZXR0aW5nc0FjY291bnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyU2V0dGluZ3NBY2NvdW50KVswXVxyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBCRE1vZHVsZXMuZ2V0KGUgPT4gdHlwZW9mIGUuY2hpbGRyZW4gPT09IFwic3RyaW5nXCIpWzBdXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLnBheW1lbnQtaW5mbyAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZXNjcmlwdGlvbiAmJiB0eXBlb2YgZS5kZXNjcmlwdGlvbiA9PT0gXCJzdHJpbmdcIiAmJiBlLmRlc2NyaXB0aW9uLmluY2x1ZGVzKFwiZm9ybVRleHRcIikpWzBdLmRlc2NyaXB0aW9uKX1gKVxyXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnBheW1lbnRTb3VyY2VSb3cpWzBdLnBheW1lbnRTb3VyY2VSb3cpfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdWJUZXh0ICYmIGUuZGVzY3JpcHRpb25XcmFwcGVyKVswXS5zdWJUZXh0KX1gKVxyXG4gICAgaWYodXNlclNldHRpbmdzQWNjb3VudCl7XHJcbiAgICAgICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKHVzZXJTZXR0aW5nc0FjY291bnQudXNlclNldHRpbmdzQWNjb3VudCl9IGRpdjpudGgtY2hpbGQoMik+ZGl2Om50aC1jaGlsZCgyKT4uJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS52aWV3Qm9keSlbMF0udmlld0JvZHkpfWApXHJcbiAgICAgICAgc2VsZWN0cy5wdXNoKGAuJHtyZW1vdmVEYSh1c2VyU2V0dGluZ3NBY2NvdW50LnVzZXJTZXR0aW5nc1NlY3VyaXR5KX0gLiR7cmVtb3ZlRGEoY2hpbGRyZW4uY2hpbGRyZW4pfSA+IGRpdjpudGgtY2hpbGQoMilgKVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coc2VsZWN0cylcclxuICAgIHJldHVybiBzZWxlY3RzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCbHVyUHJpdmF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMgfHwgZ2V0U2VsZWN0b3JzKClcclxuXHJcbiAgICAgICAgaWYoIXNlbGVjdG9ycyljb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc2VsZWN0b3JzIHRvIGJsdXIgcGVyc29ubmFsIGluZm9ybWF0aW9ucy5cIikpXHJcbiAgICAgICAgRE9NVG9vbHMuYWRkU3R5bGUoXCJibHVyUHJpdmF0ZVwiLCBgXHJcbiR7c2VsZWN0b3JzLmpvaW4oXCIsIFwiKX0ge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKTtcclxuICAgIGZpbHRlcjogYmx1cig0cHgpO1xyXG4gICAgb3BhY2l0eTogLjg7XHJcbn1cclxuXHJcbiR7c2VsZWN0b3JzLm1hcChlID0+IGUrXCI6aG92ZXJcIikuam9pbihcIiwgXCIpfSAge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA5LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBub25lO1xyXG4gICAgb3BhY2l0eTogMTtcclxufWApXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBET01Ub29scy5yZW1vdmVTdHlsZShcImJsdXJQcml2YXRlXCIpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmNvbnN0IG5vcm1hbGl6ZWRQcmVmaXggPSBcImRhXCI7XHJcbmNvbnN0IHJhbmRDbGFzcyA9IG5ldyBSZWdFeHAoYF4oPyEke25vcm1hbGl6ZWRQcmVmaXh9LSkoKD86W0EtWmEtel18WzAtOV18LSkrKS0oPzpbQS1aYS16XXxbMC05XXwtfF8pezZ9JGApO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENsYXNzTm9ybWFsaXplciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5DbGFzc05vcm1hbGl6ZXIgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJ0RWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGF0Y2hET01NZXRob2RzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvdWxkSWdub3JlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5lbmRzV2l0aChcInB4XCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiY2hcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJlbVwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcIm1zXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImxheWVyQ29udGFpbmVyLVwiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIjXCIpICYmICh2YWx1ZS5sZW5ndGggPT0gNyB8fCB2YWx1ZS5sZW5ndGggPT0gNCkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhcImNhbGMoXCIpIHx8IHZhbHVlLmluY2x1ZGVzKFwicmdiYVwiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZUZpbHRlcihtb2R1bGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG1vZHVsZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAobW9kdWxlLl9fZXNNb2R1bGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG1vZHVsZSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIG1vZHVsZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1vZHVsZVtiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLnNwbGl0KFwiLVwiKS5sZW5ndGggPT09IDEpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdCh2YWx1ZS5zcGxpdChcIiBcIilbMF0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5vcm1hbENsYXNzLm1hdGNoKHJhbmRDbGFzcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoIHx8ICFtYXRjaC5sZW5ndGggfHwgbWF0Y2gubGVuZ3RoIDwgMikgY29udGludWU7IC8vIFNob3VsZG4ndCBldmVyIGhhcHBlbiBzaW5jZSB0aGV5IHBhc3NlZCB0aGUgbW9kdWxlRmlsdGVyLCBidXQgeW91IG5ldmVyIGtub3dcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbWVsQ2FzZSA9IG1hdGNoWzFdLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV0gKz0gYCAke2NvbXBvbmVudE5hbWV9LSR7Y2FtZWxDYXNlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsZXQgbmV3U3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbENsYXNzLnN0YXJ0c1dpdGgoYCR7Y29tcG9uZW50TmFtZX0tYCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgbmV3U3RyaW5nICs9IGAgJHtub3JtYWxDbGFzc31gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV0gPSBuZXdTdHJpbmcudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBub3JtYWxpemVFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNsZW4gPSBjbGFzc2VzLmxlbmd0aDsgYyA8IGNsZW47IGMrKykge1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KGNsYXNzZXNbY10pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBjbGFzc2VzW2NdLm1hdGNoKHJhbmRDbGFzcylbMV07XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NsYXNzID0gbWF0Y2guc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoYCR7bm9ybWFsaXplZFByZWZpeH0tJHtuZXdDbGFzc31gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBlbGVtZW50LmNoaWxkcmVuKSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoY2hpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldmVydEVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSB0aGlzLnJldmVydEVsZW1lbnQoZWxlbWVudC5jaGlsZHJlblswXSk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB0aGlzLnJldmVydEVsZW1lbnQoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBjb25zdCB0b1JlbW92ZSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICBpZiAoY2xhc3Nlc1tjXS5zdGFydHNXaXRoKGAke25vcm1hbGl6ZWRQcmVmaXh9LWApKSB0b1JlbW92ZS5wdXNoKGNsYXNzZXNbY10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4udG9SZW1vdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoRE9NTWV0aG9kcygpIHtcclxuICAgICAgICBjb25zdCBjb250YWlucyA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnM7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHRva2VuKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHRva2VucyA9IHRva2VuLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoY29udGFpbnMsIHRoaXMsIFt0b2tlbi5zcGxpdChcIiBcIilbMF1dKTtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIHRva2Vucy5ldmVyeSh0ID0+IGNvbnRhaW5zLmNhbGwodGhpcywgdCkpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZCA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGFkZCwgdGhpcywgdG9rZW5zKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmUgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShyZW1vdmUsIHRoaXMsIHRva2Vucyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbn07IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbG9yZWRUZXh0IHtcclxuICAgIGluamVjdENvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbENvbG9yZWRUZXh0KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWxDb2xvcmVkVGV4dCA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHtiZWZvcmU6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgICAgIGlmICghcHJvcHMgfHwgIXByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUNvbnRlbnQgPSBwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtZXNzYWdlQ29udGVudC50eXBlIHx8ICFtZXNzYWdlQ29udGVudC50eXBlLnR5cGUgfHwgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLmRpc3BsYXlOYW1lICE9IFwiTWVzc2FnZUNvbnRlbnRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFR5cGUgPSBtZXNzYWdlQ29udGVudC50eXBlLnR5cGU7XHJcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFR5cGUuX19vcmlnaW5hbE1ldGhvZCkgcmV0dXJuOyAvLyBEb24ndCBwYXRjaCBhZ2FpblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUgPSBmdW5jdGlvbihwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbFR5cGUocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9sZUNvbG9yID0gc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSA/IHByb3BzLm1lc3NhZ2UuY29sb3JTdHJpbmcgfHwgXCJcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5zdHlsZSA9IHtjb2xvcjogcm9sZUNvbG9yfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ2luYWxUeXBlO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSwgb3JpZ2luYWxUeXBlKTtcclxuICAgICAgICB9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZU1hcmt1cCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF0ubWFya3VwXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5cIitjbGFzc05hbWVNYXJrdXAuc3BsaXQoXCIgXCIpWzBdKS5mb3JFYWNoKGVsZW0gPT4ge1xyXG4gICAgICAgICAgICBlbGVtLnN0eWxlLnNldFByb3BlcnR5KFwiY29sb3JcIiwgXCJcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtiZENvbmZpZywgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcclxuaW1wb3J0IGRhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IHBsdWdpbkNlcnRpZmllciwgeyBlbmNyeXB0U2V0dGluZ3NDYWNoZSwgZGVjcnlwdFNldHRpbmdzQ2FjaGUsIHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCB7IGNhcHR1cmVSZWplY3Rpb25TeW1ib2wgfSBmcm9tIFwiZXZlbnRzXCI7XHJcblxyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpLk1vZHVsZTtcclxuTW9kdWxlLmdsb2JhbFBhdGhzLnB1c2gocGF0aC5yZXNvbHZlKHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwLmdldEFwcFBhdGgoKSwgXCJub2RlX21vZHVsZXNcIikpO1xyXG5jbGFzcyBNZXRhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJNZXRhRXJyb3JcIjtcclxuICAgIH1cclxufVxyXG5jb25zdCBvcmlnaW5hbEpTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXTtcclxuY29uc3Qgb3JpZ2luYWxDU1NSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA/IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gOiAoKSA9PiB7cmV0dXJuIG51bGw7fTtcclxuY29uc3Qgc3BsaXRSZWdleCA9IC9bXlxcU1xcclxcbl0qPyg/OlxcclxcbnxcXG4pW15cXFNcXHJcXG5dKj9cXCpbXlxcU1xcclxcbl0/LztcclxuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcclxuXHJcbmV4cG9ydCBsZXQgYWRkb25DYWNoZSA9IHt9XHJcblxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb250ZW50TWFuYWdlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLndhdGNoZXJzID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hFeHRlbnNpb25zKCl7XHJcbiAgICAgICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cclxuICAgICAgICBoYXNQYXRjaGVkID0gdHJ1ZVxyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJ0aGVtZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGx1Z2luc0ZvbGRlcigpIHtyZXR1cm4gdGhpcy5fcGx1Z2luc0ZvbGRlciB8fCAodGhpcy5fcGx1Z2luc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInBsdWdpbnMvXCIpKSk7fVxyXG4gICAgZ2V0IHRoZW1lc0ZvbGRlcigpIHtyZXR1cm4gdGhpcy5fdGhlbWVzRm9sZGVyIHx8ICh0aGlzLl90aGVtZXNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJ0aGVtZXMvXCIpKSk7fVxyXG5cclxuICAgIGxvYWRBZGRvbkNlcnRpZmllckNhY2hlKCl7XHJcbiAgICAgICAgaWYodHlwZW9mIGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikgIT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSBKU09OLnBhcnNlKGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikpKVxyXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0ge31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3Qua2V5cyhhZGRvbkNhY2hlKVxyXG4gICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICBpZighdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKXJldHVybiBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcblxyXG4gICAgICAgICAgICBsZXQgcHJvcHMgPSBbe1xyXG4gICAgICAgICAgICAgICAga2V5OiBcInRpbWVzdGFtcFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwicmVzdWx0XCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGtleTogXCJoYXNoXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiXHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBpZighKHByb3Aua2V5IGluIHZhbHVlKSB8fCB0eXBlb2YgdmFsdWVbcHJvcC5rZXldICE9PSBwcm9wLnR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih2YWx1ZS5oYXNoICE9PSBrZXkpe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodmFsdWUucmVzdWx0LnN1c3BlY3QpeyAvLyByZWZldGNoIGZyb20gcmVtb3RlIHRvIGJlIHN1cmUgeW91J3JlIHVwIHRvIGRhdGUuXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUFkZG9uQ2FjaGUoKXtcclxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKEpTT04uc3RyaW5naWZ5KGFkZG9uQ2FjaGUpKSlcclxuICAgIH1cclxuXHJcbiAgICB3YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcclxuICAgICAgICBpZiAodGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IGNvbnRlbnRUeXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0gPSBmcy53YXRjaChiYXNlRm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xyXG4gICAgICAgICAgICB0cnkge2ZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVOT0VOVFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSByZXR1cm4gcGx1Z2luTW9kdWxlLnVubG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhlbWVNb2R1bGUudW5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwicmVuYW1lXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUucmVsb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUucmVsb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0uY2xvc2UoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV07XHJcbiAgICB9XHJcblxyXG4gICAgZXh0cmFjdE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgaGFzT2xkTWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8vTUVUQVwiKTtcclxuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIGNvbnN0IGhhc05ld01ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvKipcIik7XHJcbiAgICAgICAgaWYgKGhhc05ld01ldGEpIHJldHVybiB0aGlzLnBhcnNlTmV3TWV0YShjb250ZW50KTtcclxuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU9sZE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IHJhd01ldGEgPSBtZXRhLnN1YnN0cmluZyhtZXRhLmxhc3RJbmRleE9mKFwiLy9NRVRBXCIpICsgNiwgbWV0YS5sYXN0SW5kZXhPZihcIiovL1wiKSk7XHJcbiAgICAgICAgaWYgKG1ldGEuaW5kZXhPZihcIk1FVEFcIikgPCAwKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBVdGlscy50ZXN0SlNPTihyYXdNZXRhKTtcclxuICAgICAgICBpZiAoIXBhcnNlZCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgY291bGQgbm90IGJlIHBhcnNlZC5cIik7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQubmFtZSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgbWlzc2luZyBuYW1lIGRhdGEuXCIpO1xyXG4gICAgICAgIHBhcnNlZC5mb3JtYXQgPSBcImpzb25cIjtcclxuICAgICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlTmV3TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgYmxvY2sgPSBjb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XHJcbiAgICAgICAgY29uc3Qgb3V0ID0ge307XHJcbiAgICAgICAgbGV0IGZpZWxkID0gXCJcIjtcclxuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9jay5zcGxpdChzcGxpdFJlZ2V4KSkge1xyXG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGxpbmUuaW5kZXhPZihcIiBcIik7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcclxuICAgICAgICAgICAgICAgIGFjY3VtID0gbGluZS5zdWJzdHIobCArIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gKz0gXCIgXCIgKyBsaW5lLnJlcGxhY2UoXCJcXFxcblwiLCBcIlxcblwiKS5yZXBsYWNlKGVzY2FwZWRBdFJlZ2V4LCBcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtLnRyaW0oKTtcclxuICAgICAgICBkZWxldGUgb3V0W1wiXCJdO1xyXG4gICAgICAgIG91dC5mb3JtYXQgPSBcImpzZG9jXCI7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250ZW50UmVxdWlyZSh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWlyZSA9IGlzUGx1Z2luID8gb3JpZ2luYWxKU1JlcXVpcmUgOiBvcmlnaW5hbENTU1JlcXVpcmU7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1vZHVsZSwgZmlsZW5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gc2VsZi5wbHVnaW5zRm9sZGVyIDogc2VsZi50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aCA9IHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwb3NzaWJsZVBhdGgpIHx8IGZpbGVuYW1lICE9PSBmcy5yZWFscGF0aFN5bmMocG9zc2libGVQYXRoKSkgcmV0dXJuIFJlZmxlY3QuYXBwbHkob3JpZ2luYWxSZXF1aXJlLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgXCJ1dGY4XCIpO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gVXRpbHMuc3RyaXBCT00oY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNlbGYuZXh0cmFjdE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgICAgIG1ldGEuZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgbWV0YS5hZGRlZCA9IHN0YXRzLmF0aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEubW9kaWZpZWQgPSBzdGF0cy5tdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLnNpemUgPSBzdGF0cy5zaXplO1xyXG4gICAgICAgICAgICBpZiAoIWlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgICAgICBtZXRhLmNzcyA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobWV0YS5mb3JtYXQgPT0gXCJqc29uXCIpIG1ldGEuY3NzID0gbWV0YS5jc3Muc3BsaXQoXCJcXG5cIikuc2xpY2UoMSkuam9pbihcIlxcblwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBgbW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1BsdWdpbikge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIG1vZHVsZS5maWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaWRFeHBvcnQgPSAhVXRpbHMuaXNFbXB0eShtb2R1bGUuZXhwb3J0cyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlkRXhwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YS50eXBlID0gbW9kdWxlLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXRpbHMud2FybihcIk1vZHVsZSBOb3QgRXhwb3J0ZWRcIiwgYCR7bWV0YS5uYW1lfSwgcGxlYXNlIHN0YXJ0IHNldHRpbmcgbW9kdWxlLmV4cG9ydHNgKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ICs9IGBcXG5tb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O1xcbm1vZHVsZS5leHBvcnRzLnR5cGUgPSAke21ldGEuZXhwb3J0cyB8fCBtZXRhLm5hbWV9O2A7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIGZpbGVuYW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQbGFjZWhvbGRlclBsdWdpbihkYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHtwbHVnaW46IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIGdldE5hbWU6ICgpID0+IHtyZXR1cm4gZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWU7fSxcclxuICAgICAgICAgICAgICAgIGdldEF1dGhvcjogKCkgPT4ge3JldHVybiBcIj8/P1wiO30sXHJcbiAgICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjogKCkgPT4ge3JldHVybiBkYXRhLm1lc3NhZ2UgPyBkYXRhLm1lc3NhZ2UgOiBcIlRoaXMgcGx1Z2luIHdhcyB1bmFibGUgdG8gYmUgbG9hZGVkLiBDaGVjayB0aGUgYXV0aG9yJ3MgcGFnZSBmb3IgdXBkYXRlcy5cIjt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0VmVyc2lvbjogKCkgPT4ge3JldHVybiBcIj8/P1wiO31cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbmFtZTogZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgIGZpbGVuYW1lOiBkYXRhLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBzb3VyY2U6IGRhdGEuc291cmNlID8gZGF0YS5zb3VyY2UgOiBcIlwiLFxyXG4gICAgICAgICAgICB3ZWJzaXRlOiBkYXRhLndlYnNpdGUgPyBkYXRhLndlYnNpdGUgOiBcIlwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZih0eXBlKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pe1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRmlsZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgfSwgKGhhc2gpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6IGhhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGVbcmVzdWx0Lmhhc2hdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNoOiByZXN1bHQuaGFzaCxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3VzcGVjdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIlRoaXMgcGx1Z2luIG1pZ2h0IGJlIGRhbmdlcm91cyAoXCIrcmVzdWx0Lmhhcm0rXCIpLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge3dpbmRvdy5yZXF1aXJlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29tcGlsZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB3aW5kb3cucmVxdWlyZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICBpZighY29udGVudC5uYW1lKXJldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNhbm5vdCBlc2NhcGUgdGhlIElELlwiLCBlcnJvcjoge21lc3NhZ2U6IFwiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlcGxhY2UnIG9mIHVuZGVmaW5lZFwiLCBzdGFjazogXCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmVwbGFjZScgb2YgdW5kZWZpbmVkXCJ9fVxyXG4gICAgICAgIGNvbnRlbnQuaWQgPSBVdGlscy5lc2NhcGVJRChjb250ZW50Lm5hbWUpO1xyXG4gICAgICAgIGlmIChpc1BsdWdpbikge1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRlbnQudHlwZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29udGVudC5wbHVnaW4gPSBuZXcgY29udGVudC50eXBlKCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV07XHJcbiAgICAgICAgICAgICAgICBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBiZHRoZW1lc1tjb250ZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICBiZHRoZW1lc1tjb250ZW50Lm5hbWVdID0gY29udGVudDtcclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgdW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZih0eXBlKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkZWxldGUgd2luZG93LnJlcXVpcmUuY2FjaGVbd2luZG93LnJlcXVpcmUucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgdW5sb2FkZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fTt9XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2FkZWQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHt3aW5kb3cucmVxdWlyZS5jYWNoZVt3aW5kb3cucmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiBmYWxzZTt9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVsb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGNhbnRVbmxvYWQgPSB0aGlzLnVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgICAgIGlmIChjYW50VW5sb2FkKSByZXR1cm4gY2FudFVubG9hZDtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE5ld0NvbnRlbnQodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoYmFzZWRpcik7XHJcbiAgICAgICAgY29uc3QgY29udGVudExpc3QgPSBPYmplY3QudmFsdWVzKGlzUGx1Z2luID8gYmRwbHVnaW5zIDogYmR0aGVtZXMpO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjb250ZW50TGlzdC5maWx0ZXIodCA9PiAhZmlsZXMuaW5jbHVkZXModC5maWxlbmFtZSkpLm1hcChjID0+IGlzUGx1Z2luID8gYy5wbHVnaW4uZ2V0TmFtZSgpIDogYy5uYW1lKTtcclxuICAgICAgICBjb25zdCBhZGRlZCA9IGZpbGVzLmZpbHRlcihmID0+ICFjb250ZW50TGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKGZpbGVFbmRpbmcpICYmIGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmKSkuaXNGaWxlKCkpO1xyXG4gICAgICAgIHJldHVybiB7YWRkZWQsIHJlbW92ZWR9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRBbGxDb250ZW50KHR5cGUpIHtcclxuICAgICAgICB0aGlzLnBhdGNoRXh0ZW5zaW9ucygpXHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikgZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGx1Z2lucygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInBsdWdpblwiKTt9XHJcbiAgICBsb2FkVGhlbWVzKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwidGhlbWVcIik7fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb250ZW50TWFuYWdlciAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XHJcbiAqLyIsImltcG9ydCB7YmRDb25maWcsIG1pblN1cHBvcnRlZFZlcnNpb24sIGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbkVycm9ycywgYmR0aGVtZUVycm9ycywgYmJkQ2hhbmdlbG9nLCBkZWZhdWx0Q29va2llLCBjdXJyZW50RGlzY29yZFZlcnNpb24sIGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvYmRMb2dvXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9saWdodGNvcmRcIjtcclxuaW1wb3J0IFBsdWdpbkNlcnRpZmllciBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IGRpc3RhbnQsIHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xyXG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIlxyXG5pbXBvcnQge3JlbW90ZSBhcyBlbGVjdHJvbn0gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0IHYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5cclxuY29uc3Qge2lwY1JlbmRlcmVyfSA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTtcclxuXHJcbmZ1bmN0aW9uIENvcmUoKSB7XHJcbiAgICAvLyBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhEYXRhU3RvcmUuY29uZmlnRmlsZSkpO1xyXG4gICAgLy8gdGhpcy5pbml0KCk7XHJcbn1cclxuXHJcbmxldCBtZXRob2RzXHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWQpIHJldHVybjtcclxuICAgIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIGNvbmZpZyk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRNZXRob2RzID0gZnVuY3Rpb24obSkge1xyXG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xyXG4gICAgbWV0aG9kcyA9IG1cclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWQpIHJldHVybjtcclxuICAgIHRoaXMuaGFzU3RhcnRlZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFBcnJheS5wcm90b3R5cGUuZmxhdCkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmJkVmVyc2lvbiArIFwiIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvbGQgdmVyc2lvbiAoXCIgKyBjdXJyZW50RGlzY29yZFZlcnNpb24gKyBcIikgb2YgRGlzY29yZC4gUGxlYXNlIHVwZGF0ZSB5b3VyIERpc2NvcmQgaW5zdGFsbGF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJkQ29uZmlnLnZlcnNpb24gPCBtaW5TdXBwb3J0ZWRWZXJzaW9uKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiZENvbmZpZy52ZXJzaW9uICsgXCIgKHlvdXIgdmVyc2lvbilcIiArIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxhdGVzdCBqcyAoXCIgKyBiYmRWZXJzaW9uICsgXCIpLjxicj48YnI+IFBsZWFzZSBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkdpdEh1YjwvYT5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuRUQpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBFbmhhbmNlZERpc2NvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LldlYlNvY2tldCAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUgJiYgd2luZG93LldlYlNvY2tldC5uYW1lLmluY2x1ZGVzKFwiUGF0Y2hlZFwiKSkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIFBvd2VyY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRyaWJ1dGVzLmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xyXG5cclxuICAgIC8qXHJcbiAgICBjb25zdCBsYXRlc3RMb2NhbFZlcnNpb24gPSBiZENvbmZpZy51cGRhdGVyID8gYmRDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogYmRDb25maWcubGF0ZXN0VmVyc2lvbjtcclxuICAgIGlmIChsYXRlc3RMb2NhbFZlcnNpb24gPiBiZENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFwiVXBkYXRlIEF2YWlsYWJsZVwiLCBbYFRoZXJlIGlzIGFuIHVwZGF0ZSBhdmFpbGFibGUgZm9yIEJhbmRhZ2VkQkQncyBJbmplY3RvciAoJHtsYXRlc3RMb2NhbFZlcnNpb259KS5gLCBcIllvdSBjYW4gZWl0aGVyIHVwZGF0ZSBhbmQgcmVzdGFydCBub3csIG9yIGxhdGVyLlwiXSwge1xyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogXCJVcGRhdGUgTm93XCIsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiTWF5YmUgTGF0ZXJcIixcclxuICAgICAgICAgICAgb25Db25maXJtOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwZGF0ZUZhaWxlZCA9ICgpID0+IHtVdGlscy5hbGVydChcIkNvdWxkIE5vdCBVcGRhdGVcIiwgYFVuYWJsZSB0byB1cGRhdGUgYXV0b21hdGljYWxseSwgcGxlYXNlIGRvd25sb2FkIHRoZSBpbnN0YWxsZXIgYW5kIHJlaW5zdGFsbCBub3JtYWxseS48YnIgLz48YnIgLz48YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkRvd25sb2FkIEluc3RhbGxlcjwvYT5gKTt9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5leGl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSovXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcclxuICAgIHRoaXMuaW5pdFNldHRpbmdzKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xyXG4gICAgQkRWMi5pbml0aWFsaXplKCk7XHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiVXBkYXRpbmcgU2V0dGluZ3NcIik7XHJcbiAgICBzZXR0aW5nc1BhbmVsLmluaXRpYWxpemVTZXR0aW5ncygpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIEFkZG9ucyBDYWNoZVwiKVxyXG4gICAgYXdhaXQgY29udGVudE1hbmFnZXIubG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XHJcbiAgICBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbnMoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWVzKCk7XHJcblxyXG4gICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIGF0b2IoRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpKSk7XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWRjLTBcIl0pIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnRuLmJ0bi1kaXNjb25uZWN0XCIpLmNsaWNrKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBQbHVnaW5DZXJ0aWZpZXIuc3RhcnQoKVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJSZW1vdmluZyBMb2FkaW5nIEljb25cIik7XHJcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpLmxlbmd0aCkgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBNYWluIE9ic2VydmVyXCIpO1xyXG4gICAgdGhpcy5pbml0T2JzZXJ2ZXIoKTtcclxuXHJcbiAgICAvLyBTaG93IGxvYWRpbmcgZXJyb3JzXHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIHtcclxuICAgICAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcclxuICAgICAgICBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogYmRwbHVnaW5FcnJvcnMsIHRoZW1lczogYmR0aGVtZUVycm9yc30pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByZXZpb3VzVmVyc2lvbiA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJ2ZXJzaW9uXCIpO1xyXG4gICAgaWYgKGJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcclxuICAgICAgICBpZiAoYmJkQ2hhbmdlbG9nKSB0aGlzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJ2ZXJzaW9uXCIsIGJiZFZlcnNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIEVtb2ppTW9kdWxlLnN0YXJ0KClcclxuXHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoU29jaWFsLmJpbmQodGhpcyksIFwiQkQgU29jaWFsIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRQaWxscy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFBpbGxzIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRMaXN0SXRlbXMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBMaXN0IEl0ZW1zIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRTZXBhcmF0b3IuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBTZXBhcmF0b3IgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZXNzYWdlSGVhZGVyLmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgQ2hhdCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lbWJlckxpc3QuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBNZW1iZXIgTGlzdCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dGFjaG1lbnQuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XHJcblxyXG4gICAgaWYoYmRDb25maWcuaGF2ZUluc3RhbGxlZERlZmF1bHQpe1xyXG4gICAgICAgIGxldCBhbGVydCA9IFV0aWxzLmFsZXJ0KFwiRmlyc3QgSW5zdGFsbGF0aW9uXCIsIFwiQXMgaXQgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGluc3RhbGwgTGlnaHRjb3JkLCBXZSBhZGRlZCB0d28gZGVmYXVsdCB0aGVtZXMgYW5kIG9uZSBkZWZhdWx0IHBsdWdpbiBpbiB5b3VyIHBsdWdpbi90aGVtZSBmb2xkZXIuIENoZWNrIGl0IGluIHRoZSBQbHVnaW4vVGhlbWUgc2V0dGluZ3MuXCIpXHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgYWxlcnQub25DbG9zZShyZXNvbHZlKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsb2dvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnQgPiBkaXYudHlwZVdpbmRvd3MtMXphLW43LndpdGhGcmFtZS1oYVlsdEkudGl0bGVCYXItQUM0cEdWLmhvcml6b250YWxSZXZlcnNlLTN0UmpZNy5mbGV4LTFPMUdLWS5kaXJlY3Rpb25Sb3dSZXZlcnNlLW04SWpJcS5qdXN0aWZ5U3RhcnQtMk5ERnppLmFsaWduU3RyZXRjaC1EcEdQZjMuZGEtdHlwZVdpbmRvd3MuZGEtd2l0aEZyYW1lLmRhLXRpdGxlQmFyLmRhLWhvcml6b250YWxSZXZlcnNlLmRhLWZsZXguZGEtZGlyZWN0aW9uUm93UmV2ZXJzZS5kYS1qdXN0aWZ5U3RhcnQuZGEtYWxpZ25TdHJldGNoID4gZGl2LndvcmRtYXJrV2luZG93cy0xdjBsWUQud29yZG1hcmstMmlERGZtLmRhLXdvcmRtYXJrV2luZG93cy5kYS13b3JkbWFya1wiKVxyXG4gICAgaWYobG9nbyl7XHJcbiAgICAgICAgbG9nby5zdHlsZS50b3AgPSBcIjNweFwiXHJcbiAgICAgICAgbG9nby5pbm5lckhUTUwgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMTBcIiB3aWR0aD1cIjcwXCIgdmlld0JveD1cIjAgMCA3Mi41NCAxMFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC01cHgsIG1hcmdpbi10b3A6IDEwcHhcIj5cclxuICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTQ0LjgxLDkuNjdWNi4zM2MwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxQTMuNTMsMy41MywwLDAsMCw0Ni4yLDNjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNjdjMCwyLjIxLDEuODksMy4zMywzLjc3LDMuMzNhMy44NywzLjg3LDAsMCwwLDMuNDUtMi4xOGwtMi4xMi0xQzQ3LDExLjE3LDQ0LjgxLDEwLjg1LDQ0LjgxLDkuNjdaTTEwLjY4LDEyLjg5aDIuNDFWMy4xN0gxMC42OFpNNzEuNzYsMy4xNEg2OC4xOVY3LjIzTDcwLjU3LDkuNHYtNGgxLjI3Yy44MSwwLDEuMjEuNDEsMS4yMSwxdjNjMCwuNjMtLjM4LDEuMDUtMS4yMSwxLjA1SDY4LjE4djIuMzFoMy41N2MxLjkyLDAsMy43Mi0xLDMuNzItMy4yVjYuMzlDNzUuNDgsNC4xMyw3My42OCwzLjE0LDcxLjc2LDMuMTRaTTU0LjIyLDNjLTIsMC00LDEuMS00LDMuMzRWOS42NmMwLDIuMjMsMiwzLjM0LDQsMy4zNHMzLjk1LTEuMTEsMy45NS0zLjM0VjYuMzRDNTguMTksNC4xMSw1Ni4yLDMsNTQuMjIsM1ptMS41NSw2LjY2YzAsLjctLjc4LDEuMDYtMS41NCwxLjA2cy0xLjU1LS4zNS0xLjU1LTEuMDZWNi4zNGMwLS43Mi43NS0xLjEsMS41LTEuMXMxLjU5LjM1LDEuNTksMS4xWk02Ni44NCw2LjM0YzAtMi4yOS0xLjU4LTMuMi0zLjU1LTMuMkg1OS40NnY5LjczaDIuNDVWOS43N2guNDNsMi4yMiwzLjA5aDNMNjUsOS41MkM2Ni4xMyw5LjE1LDY2Ljg0LDguMTQsNjYuODQsNi4zNFpNNjMuMzMsNy42NUg2MS45MVY1LjQzaDEuNDJBMS4xMSwxLjExLDAsMSwxLDYzLjMzLDcuNjVaTTI5LjgzLDEzaDIuNDJWMy4wNkgyOS44M1Y2LjczbC0zLDBWMy4wOUgyNC43djkuNzhoMi4xNFY4LjY4bDMsMFpNMTcuMTYsOS43NlY2LjQyYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFhMy41NSwzLjU1LDAsMCwwLTMuMzYtMi4yNGMtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS43NmMwLDIuMjEsMiwzLjE1LDMuOSwzLjE1czMuNTgtMSwzLjU4LTNWNy41OEgxOC43OWwwLDEuMzZIMjAuM3YuNzdDMjAuMywxMC45MiwxNy4xNiwxMC45NCwxNy4xNiw5Ljc2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtMi45MyAtMylcIi8+XHJcbiAgICA8cG9seWdvbiBmaWxsPVwiY3VycmVudENvbG9yXCIgcG9pbnRzPVwiMzUuOTEgMC4wNiAzOC40MyAwLjA2IDM4LjQzIDEuODQgMzUuOTIgMS44MSAzNS45NyAxMCAzMy41NSAxMCAzMy40OSAxLjc1IDMwLjk4IDEuNzQgMzAuOTggMC4wNiAzMy40OSAwLjA2IDM1LjkxIDAuMDZcIi8+XHJcbiAgICA8cG9seWdvbiBmaWxsPVwiY3VycmVudENvbG9yXCIgcG9pbnRzPVwiMCA5Ljk3IDYuNSAxMCA2LjUgNy42MyAyLjQxIDcuNjMgMi40MSAwLjI2IDAgMi4yNiAwIDkuOTdcIi8+XHJcbjwvc3ZnPmBcclxuICAgIH1cclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0cmlidXRlcyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IGF0dHJpYnNQYXRjaHMgPSBbXVxyXG4gICAgdGhpcy5jYW5jZWxQYXRjaEF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBhdHRyaWJzUGF0Y2hzLmZvckVhY2goZSA9PiBlKCkpXHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUoIXYyLk1lc3NhZ2VDb21wb25lbnQpYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpXHJcbiAgICBcclxuICAgIC8vIFRPRE86IHRyeSB0byBwYXRjaCBjb3JyZWN0bHkgdGhlIHVzZXIgcG9wb3V0IG9uIGEgbmV4dCB1cGRhdGVcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkRpc2NvcmRUYWdcIilcclxuICAgIC50aGVuKERpc2NvcmRUYWcgPT4ge1xyXG4gICAgICAgIGxldCBEaXNjb3JkVGFnQ29tcCA9IERpc2NvcmRUYWcuZGVmYXVsdFxyXG4gICAgICAgIERpc2NvcmRUYWcuZGVmYXVsdCA9IGZ1bmN0aW9uKHByb3BzKXtcclxuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gRGlzY29yZFRhZ0NvbXAocHJvcHMpXHJcblxyXG4gICAgICAgICAgICBsZXQgaWQgPSB1dWlkdjQoKVxyXG5cclxuICAgICAgICAgICAgbGV0IGJhZGdlRGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIixcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiNXB4XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBrZXk6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSlcclxuXHJcbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtyZXR1cm5WYWx1ZV1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHMudXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBwcm9wcy51c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGJhZGdlRGl2KVxyXG4gICAgICAgICAgICBsZXQgZGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGNoaWxkcmVuKVxyXG4gICAgICAgICAgICBhcHBseUJhZGdlcyhpZCwgcHJvcHMudXNlciwgZmFsc2UpXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGl2XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZihkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UpeyAvLyB0aGlzIGNhbiBiZSBhIGJsb2NrZWQgbWVzc2FnZSAobm90IG9wZW5lZClcclxuICAgICAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcImRhdGEtbWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxyXG4gICAgICAgIH1cclxuICAgIH19KSlcclxuICAgICAgICAvKlxyXG4gICAgYXR0cmlic1BhdGNocy5wdXNoKFV0aWxzLm1vbmtleVBhdGNoKHYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcIm1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcclxuICAgIH19KSkqL1xyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5jaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn1gKS5sZW5ndGggPiAwKSB0aW1lc0NoZWNrZWQrKztcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9IC4ke2d1aWxkfSAuJHtibG9ifWApLmxlbmd0aCA+IDApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwibG9hZGluZ1wiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO30pO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbmplY3RFeHRlcm5hbHMgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGF3YWl0IERPTS5hZGRTY3JpcHQoXCJhY2Utc2NyaXB0XCIsIFwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuMi45L2FjZS5qc1wiKTtcclxuICAgIGlmICh3aW5kb3cucmVxdWlyZS5vcmlnaW5hbCkgd2luZG93LnJlcXVpcmUgPSB3aW5kb3cucmVxdWlyZS5vcmlnaW5hbDtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBpZighRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpICYmICFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKXtcclxuICAgICAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBkZWZhdWx0Q29va2llKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIGRlZmF1bHRSUEMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBzZXR0aW5nc1BhbmVsLmxvYWRTZXR0aW5ncygpO1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiBkZWZhdWx0Q29va2llKSB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW3NldHRpbmddID0gZGVmYXVsdENvb2tpZVtzZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucHJvdG90eXBlICYmIGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMpXHJcbiAgICAudGhlbihzZXR0aW5nTW9kdWxlID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGdldFByZWRpY2F0ZVNlY3Rpb25zID0gc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9uc1xyXG4gICAgICAgIHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0UHJlZGljYXRlU2VjdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcblxyXG4gICAgICAgICAgICBpZihyZXN1bHRbMV0uc2VjdGlvbiA9PT0gXCJNeSBBY2NvdW50XCIpeyAvLyB1c2VyIHNldHRpbmdzLCBub3QgZ3VpbGQgc2V0dGluZ3NcclxuICAgICAgICAgICAgICAgIGxldCBwb3BlZCA9IFtdXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnNldHRpbmdzUGFuZWwucmVuZGVyU2lkZWJhcih0aGlzKSlcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZShwb3BlZFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9wZWQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn07XHJcblxyXG5cclxubGV0IGNsYXNzTmFtZUxheWVyXHJcbmxldCBjbGFzc05hbWVTb2NpYWxMaW5rc1xyXG5sZXQgY2xhc3NOYW1lTW9kYWxcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IG1haW5PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luTW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSBwbHVnaW5Nb2R1bGUucmF3T2JzZXJ2ZXIobXV0YXRpb24pO1xyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vdGhpbmcgYWRkZWQsIHNraXBcclxuICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVMYXllciljbGFzc05hbWVMYXllciA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVTb2NpYWxMaW5rcyljbGFzc05hbWVTb2NpYWxMaW5rcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVNb2RhbCljbGFzc05hbWVNb2RhbCA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubW9kYWwgJiYgdHlwZW9mIGUubW9kYWwgPT09IFwic3RyaW5nXCIgJiYgZS5pbm5lciAmJiB0eXBlb2YgZS5pbm5lciA9PT0gXCJzdHJpbmdcIiAmJiAhZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUpWzBdLm1vZGFsXHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpID09PSBcIkdVSUxEX1NFVFRJTkdTXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZVNvY2lhbExpbmtzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiO1xyXG5cclxuICAgICAgICAgICAgLy8gRW1vamkgUGlja2VyXHJcbiAgICAgICAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcclxuICAgICAgICAgICAgLy9pZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIyKSAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lRW1vamlQaWNrZXIpLmxlbmd0aCAgJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVFbW9qaVBpY2tlcikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lQW5pbWF0b3JMZWZ0KSkgcXVpY2tFbW90ZU1lbnUub2JzQ2FsbGJhY2sobm9kZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuc2hvd0NoYW5nZWxvZ01vZGFsID0gZnVuY3Rpb24ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuYWxlcnQgPSBmdW5jdGlvbih0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoU29jaWFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJUYWJCYXJcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghVGFiQmFyKSByZXR1cm47XHJcbiAgICB0aGlzLnNvY2lhbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAzXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChBbmNob3IpIHtcclxuICAgICAgICAgICAgbGV0IHNvY2lhbE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zb2NpYWxMaW5rcylbMF1cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUgPSBuZXdPbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVDb2xvck11dGVkLFxyXG4gICAgICAgICAgICBzaXplcyxcclxuICAgICAgICAgICAgY2xhc3NOYW1lVmVyc2lvbkhhc2hcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvck11dGVkKVswXS5jb2xvck11dGVkLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJzaW9uSGFzaClbMF0udmVyc2lvbkhhc2hcclxuICAgICAgICBdXHJcblxyXG4gICAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke2JkQ29uZmlnLmhhc2ggPyBiZENvbmZpZy5oYXNoLnN1YnN0cmluZygwLCA3KSA6IGJkQ29uZmlnLmJyYW5jaH0pYDtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBMaWdodGNvcmQgJHtlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikudmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgYCgkeyhlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikuY29tbWl0IHx8IFwiVW5rbm93blwiKS5zbGljZSgwLCA3KX0pYCkpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBCQkQgJHtiYmRWZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCB2ZXJzaW9uSGFzaCkpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcclxuICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsVmVyc2lvbnMoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICB9O1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0R3VpbGRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBndWlsZHNXcmFwcGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICBjb25zdCBndWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkTGlzdEl0ZW1zID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcclxuICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgYmxvYkNsYXNzID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XHJcbiAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XHJcbiAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5yZXR1cm5WYWx1ZSAmJiBkYXRhLnRoaXNPYmplY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWVcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudW5yZWFkKSBjbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuc2VsZWN0ZWQpIGNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmF1ZGlvKSBjbGFzc05hbWUgKz0gXCIgYmQtYXVkaW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS52aWRlbykgY2xhc3NOYW1lICs9IFwiIGJkLXZpZGVvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYmFkZ2UpIGNsYXNzTmFtZSArPSBcIiBiZC1iYWRnZVwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmFuaW1hdGFibGUpIGNsYXNzTmFtZSArPSBcIiBiZC1hbmltYXRhYmxlXCI7XHJcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFBpbGxzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkUGlsbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgaWYgKHByb3BzLnNlbGVjdGVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ob3ZlcmVkXCI7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgIGNvbnN0IGd1aWxkQ29tcG9uZW50cyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICBpZiAoIWd1aWxkQ29tcG9uZW50cyB8fCAhR3VpbGRzKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZC1zZXBhcmF0b3JcIjtcclxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5BdHRhY2htZW50UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdIC8vIHRlbXBvcmFyeVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhQXR0YWNobWVudCB8fCAhQXR0YWNobWVudC5kZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXJldHVyblxyXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSB8fCBudWxsXHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XHJcblxyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF0dGFjaG1lbnQgfHwgIWF0dGFjaG1lbnQudXJsKXJldHVyblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XHJcbiAgICAgICAgICAgIGlkOiBcImNlcnRpZmllZC1cIitpZFxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIFBsdWdpbkNlcnRpZmllci5wYXRjaChhdHRhY2htZW50LCBcImNlcnRpZmllZC1cIitpZClcclxuICAgIH19KVxyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgTWVzc2FnZUhlYWRlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiTWVzc2FnZVRpbWVzdGFtcFwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lc3NhZ2VIZWFkZXIgfHwgIU1lc3NhZ2VIZWFkZXIuZGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZXNzYWdlSGVhZGVyLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwibWVzc2FnZS5hdXRob3JcIik7XHJcbiAgICAgICAgLy8gY29uc3QgaGVhZGVyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHNcIik7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuXCIpO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF1dGhvciB8fCAhYXV0aG9yLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAoYXV0aG9yLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGF1dGhvci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBhdXRob3IuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIGF1dGhvciwgdHJ1ZSlcclxuICAgIH19KTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBjaGF0KXtcclxuICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmFkZ2VzLVwiK2lkKVxyXG4gICAgICAgIGlmKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMClyZXR1cm5cclxuICAgICAgICBpZihkaXYuY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuXHJcbiAgICAgICAgbGV0IGJsb2NrRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgIGJsb2NrRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChibG9ja0RpdilcclxuXHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcblxyXG4gICAgICAgIGRpc3RhbnQuZ2V0QmFkZ2VzKHVzZXIuaWQpXHJcbiAgICAgICAgLnRoZW4oYmFkZ2VzID0+IHtcclxuICAgICAgICAgICAgYmFkZ2VzLmZvckVhY2goYmFkZ2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiMTZweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTZweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiYWRnZS5zY29wZXMuZm9yRWFjaChzY29wZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NvcGUgPT09IFwidXNlclwiKXsvLyByZXF1aXJlIHVzZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudXNlciA9IHVzZXJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSBcclxuICAgICAgICAgICAgICAgIGlmKCFiYWRnZS5ocmVmKXtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5BbmNob3IgPSBBbmNob3JcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5ocmVmID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBiYWRnZS5uYW1lfSxcclxuICAgICAgICAgICAgICAgICAgICBiYWRnZS5ocmVmID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBiYWRnZS5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKSkgOiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihlbGVtZW50LCBkaXYyKVxyXG4gICAgICAgICAgICAgICAgZGl2Mi5jaGlsZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lbWJlckxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm1lbWJlckxpc3RQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgTWVtYmVyTGlzdEl0ZW0gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1lbWJlckxpc3RJdGVtXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVtYmVyTGlzdEl0ZW0gfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLnJlbmRlckRlY29yYXRvcnMpIHJldHVybjtcclxuICAgIHRoaXMubWVtYmVyTGlzdFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLCBcInJlbmRlckRlY29yYXRvcnNcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEudGhpc09iamVjdCwgXCJwcm9wcy51c2VyXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIXVzZXIgfHwgIXVzZXIuaWQpcmV0dXJuXHJcbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh1c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCB1c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXtcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJhZGdlcy1cIitpZH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBmYWxzZSlcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnVwZGF0ZUluamVjdG9yID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBpbmplY3Rpb25QYXRoID0gRGF0YVN0b3JlLmluamVjdGlvblBhdGg7XHJcbiAgICBpZiAoIWluamVjdGlvblBhdGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuICAgIGNvbnN0IHJtcmYgPSByZXF1aXJlKFwicmltcmFmXCIpO1xyXG4gICAgY29uc3QgeWF1emwgPSByZXF1aXJlKFwieWF1emxcIik7XHJcbiAgICBjb25zdCBta2RpcnAgPSByZXF1aXJlKFwibWtkaXJwXCIpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IC8qcmVxdWlyZShcInJlcXVlc3RcIik7Ki8gbnVsbFxyXG5cclxuICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLnJlc29sdmUoaW5qZWN0aW9uUGF0aCwgXCIuLlwiKTtcclxuICAgIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGluamVjdGlvblBhdGgpO1xyXG4gICAgY29uc3QgemlwTGluayA9IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9hcmNoaXZlL2luamVjdG9yLnppcFwiO1xyXG4gICAgY29uc3Qgc2F2ZWRaaXAgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJpbmplY3Rvci56aXBcIik7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJCZXR0ZXJEaXNjb3JkQXBwLWluamVjdG9yXCIpO1xyXG5cclxuICAgIC8vIERvd25sb2FkIHRoZSBpbmplY3RvciB6aXAgZmlsZVxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xyXG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcclxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xyXG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcblxyXG4gICAgICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIldyaXRpbmcgXCIgKyBzYXZlZFppcCk7XHJcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZShzYXZlZFppcCwgYm9keSwgZXJyID0+IHJlc29sdmUoIWVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBzdWNjZXNzO1xyXG5cclxuICAgIC8vIENoZWNrIGFuZCBkZWxldGUgcmVuYW1lIGV4dHJhY3Rpb25cclxuICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKGV4dHJhY3RlZEZvbGRlciwgcmVzKSk7XHJcbiAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGAke2V4dHJhY3RlZEZvbGRlcn0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTtcclxuICAgIFxyXG4gICAgLy8gVW56aXAgdGhlIGRvd25sb2FkZWQgemlwIGZpbGVcclxuICAgIGNvbnN0IHppcGZpbGUgPSBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHlhdXpsLm9wZW4oc2F2ZWRaaXAsIHtsYXp5RW50cmllczogdHJ1ZX0sIChlcnIsIHppcCkgPT4gIHIoemlwKSkpO1xyXG4gICAgemlwZmlsZS5vbihcImVudHJ5XCIsIGZ1bmN0aW9uKGVudHJ5KSB7XHJcbiAgICAgICAgLy8gU2tpcCBkaXJlY3RvcmllcywgdGhleSBhcmUgaGFuZGxlZCB3aXRoIG1rZGlycFxyXG4gICAgICAgIGlmIChlbnRyeS5maWxlTmFtZS5lbmRzV2l0aChcIi9cIikpIHJldHVybiB6aXBmaWxlLnJlYWRFbnRyeSgpO1xyXG5cclxuICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkV4dHJhY3RpbmcgXCIgKyBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgLy8gTWFrZSBhbnkgbmVlZGVkIHBhcmVudCBkaXJlY3Rvcmllc1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoZnVsbFBhdGgpKTtcclxuICAgICAgICB6aXBmaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCBmdW5jdGlvbihlcnIsIHJlYWRTdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5vbihcImVuZFwiLCBmdW5jdGlvbigpIHt6aXBmaWxlLnJlYWRFbnRyeSgpO30pOyAvLyBHbyB0byBuZXh0IGZpbGUgYWZ0ZXIgdGhpc1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLnBpcGUoZnMuY3JlYXRlV3JpdGVTdHJlYW0oZnVsbFBhdGgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgemlwZmlsZS5yZWFkRW50cnkoKTsgLy8gU3RhcnQgcmVhZGluZ1xyXG5cclxuICAgIC8vIFdhaXQgZm9yIHRoZSBmaW5hbCBmaWxlIHRvIGZpbmlzaFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB6aXBmaWxlLm9uY2UoXCJlbmRcIiwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZmluYWwgc3RlcFxyXG4gICAgY29uc3QgYmFja3VwRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGAke2ZvbGRlck5hbWV9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShpbmplY3Rpb25QYXRoLCBiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBSZW5hbWUgdGhlIGV4dHJhY3RlZCBmb2xkZXIgdG8gd2hhdCBpdCBzaG91bGQgYmVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xyXG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiRmFpbGVkIHRvIHJlbmFtZSB0aGUgZmluYWwgZGlyZWN0b3J5XCIpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHJlbmFtZSBoYWQgaXNzdWVzLCBkZWxldGUgd2hhdCB3ZSB0cmllZCB0byByZW5hbWUgYW5kIHJlc3RvcmUgYmFja3VwXHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIlNvbWV0aGluZyB3ZW50IHdyb25nLi4uIHJlc3RvcmluZyBiYWNrdXBzLlwiKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoZXh0cmFjdGVkRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoYmFja3VwRm9sZGVyLCBpbmplY3Rpb25QYXRoLCByZXNvbHZlKSk7XHJcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgd2UndmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgc2hvdWxkIGhhdmUgZ29uZSBzbW9vdGhseS5cclxuICAgIC8vIENsZWFudXAgdGhlIGJhY2t1cCBmb2xkZXIgdGhlbiByZW1vdmUgdGhlIHppcFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy51bmxpbmsoc2F2ZWRaaXAsIHJlc29sdmUpKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpO1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb3JlIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiY29uc3QgX19ub25fd2VicGFja19yZXF1aXJlX18gPSB3aW5kb3cucmVxdWlyZVxyXG5cclxuaW1wb3J0IHtiZENvbmZpZ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuXHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IHJlbGVhc2VDaGFubmVsID0gRGlzY29yZE5hdGl2ZS5nbG9iYWxzID8gRGlzY29yZE5hdGl2ZS5nbG9iYWxzLnJlbGVhc2VDaGFubmVsIDogRGlzY29yZE5hdGl2ZS5hcHAgPyBEaXNjb3JkTmF0aXZlLmFwcC5nZXRSZWxlYXNlQ2hhbm5lbCgpIDogXCJzdGFibGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEYXRhU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0ge3NldHRpbmdzOiB7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX19O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YSA9IHt9O1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EYXRhU3RvcmUgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5CREZpbGUpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuQkRGaWxlLCBcImJpbmFyeVwiKSlcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgc2V0dGluZ3MgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyh0aGlzLnNldHRpbmdzRmlsZSk7XHJcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwge1tyZWxlYXNlQ2hhbm5lbF06IHNldHRpbmdzfSk7XHJcbiAgICAgICAgICAgIGVsc2Ugc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJERGF0YShcInNldHRpbmdzXCIsIHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIFV0aWxzLmFsZXJ0KFwiQ29ycnVwdCBTdG9yYWdlXCIsIFwiVGhlIGJkIHN0b3JhZ2UgaGFzIHNvbWVob3cgYmVjb21lIGNvcnJ1cHQuIFlvdSBtYXkgZWl0aGVyIHRyeSB0byBzYWx2YWdlIHRoZSBmaWxlIG9yIGRlbGV0ZSBpdCB0aGVuIHJlbG9hZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbmplY3Rpb25QYXRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0aW9uUGF0aCkgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGg7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBiYXNlID0gZWxlY3Ryb24uZ2V0QXBwUGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdCYXNlID0gZWxlY3Ryb24uZ2V0UGF0aChcInVzZXJEYXRhXCIpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdMb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShyb2FtaW5nQmFzZSwgZWxlY3Ryb24uZ2V0VmVyc2lvbigpLCBcIm1vZHVsZXNcIiwgXCJkaXNjb3JkX2Rlc2t0b3BfY29yZVwiLCBcImluamVjdG9yXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29uZmlnRmlsZSgpIHtyZXR1cm4gdGhpcy5fY29uZmlnRmlsZSB8fCAodGhpcy5fY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmluamVjdGlvblBhdGgsIFwiYmV0dGVyZGlzY29yZFwiLCBcImNvbmZpZy5qc29uXCIpKTt9XHJcbiAgICBnZXQgQkRGaWxlKCkge3JldHVybiB0aGlzLl9CREZpbGUgfHwgKHRoaXMuX0JERmlsZSA9IHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCwgXCJiZHN0b3JhZ2UuanNvblwiKSk7fVxyXG4gICAgZ2V0IHNldHRpbmdzRmlsZSgpIHtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGaWxlIHx8ICh0aGlzLl9zZXR0aW5nc0ZpbGUgPSBwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGgsIFwiYmRzZXR0aW5ncy5qc29uXCIpKTt9XHJcbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XHJcblxyXG4gICAgZ2V0U2V0dGluZ0dyb3VwKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZXR0aW5nR3JvdXAoa2V5LCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldID0gZGF0YTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCRERhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEZXZNb2RlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGVidWdMaXN0ZW5lciA9IHRoaXMuZGVidWdMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIgPSB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIHRoaXMuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnREZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BEZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlYnVnTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAxMTkgfHwgZS53aGljaCA9PSAxMTgpIHsvL0Y4XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbJWNEZXZNb2RlJWNdICVjQnJlYWsvUmVzdW1lXCIsIFwiY29sb3I6IHJlZDtcIiwgXCJjb2xvcjogIzMwMzAzMDsgZm9udC13ZWlnaHQ6NzAwO1wiLCBcImNvbG9yOnJlZDtcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIGRlYnVnZ2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvcHlTZWxlY3Rvckxpc3RlbmVyKGUpIHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgICAgIGNsYXNzTGF5ZXIsIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NJdGVtc1xyXG4gICAgICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1lbnUpWzBdXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHtcclxuICAgICAgICAgICAgICAgIGlmKCFjbGFzc0l0ZW1zIHx8ICFjbGFzc0xheWVyLmxheWVyKXJldHVybiBjb25zb2xlLmxvZyhjbGFzc0l0ZW1zLCBjbGFzc0xheWVyLmxheWVyKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbSA9IERPTS5xdWVyeShcIi5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLm1lbnUpKTtcclxuICAgICAgICAgICAgICAgIGlmICghY20pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50ID4gLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzTGF5ZXIubGF5ZXJDb250YWluZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NMYXllci5sYXllcn1cIj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLm1lbnV9ICR7Y2xhc3NJdGVtcy5zdHlsZUZsZXhpYmxlfSAke2NsYXNzSXRlbXMuYWNjb21tb2RhdGVTY3JvbGxiYXJ9IGJkLWNvbnRleHQtbWVudVwiIHN0eWxlPVwiXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmFwcGVuZChjbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChjbVdyYXApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJtZW51XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIilcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuaWQgPSBcImJkLWNvcHktc2VsZWN0b3ItY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgXCJDb3B5IFNlbGVjdG9yIEFjdGlvbnNcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDbGFzc2VzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zY3JvbGxlcldyYXApWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJXcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJDbGFzc2VzLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyQ2xhc3Nlcy50aGVtZUdob3N0SGFpcmxpbmV9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlcilbMF0uc2Nyb2xsZXJ9ICR7Y2xhc3NJdGVtcy5zY3JvbGxlcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyV3JhcC5hcHBlbmQoc2Nyb2xsZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgY20uYXBwZW5kKHNjcm9sbGVyV3JhcClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IGNtLnBhcmVudEVsZW1lbnRcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBjbS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZyA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJncm91cFwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5sYWJlbENvbnRhaW5lcn0gJHtjbGFzc0l0ZW1zLmNvbG9yRGVmYXVsdH1cIiByb2xlPVwibWVudWl0ZW1cIiBpZD1cImJkLWNvcHktc2VsZWN0b3ItaXRlbS1jbVwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY21pLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5sYWJlbH1cIj5Db3B5IFNlbGVjdG9yPC9kaXY+YCkpO1xyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5OYXRpdmVNb2R1bGUuY29weShzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IERPTS5xdWVyeUFsbChcImRpdltyb2xlPW1lbnVpdGVtXS5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzICYmIGVsZW1lbnRzLmZvckVhY2goZWxlbSA9PiBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NJdGVtcy5mb2N1c2VkKSlcclxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LmFkZChjbGFzc0l0ZW1zLmZvY3VzZWQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBjbWcuYXBwZW5kKGNtaSk7XHJcbiAgICAgICAgICAgICAgICBpZihzY3JvbGxlci5jaGlsZE5vZGVzLmxlbmd0aCl7IC8vIGFwZW5kIGEgc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cInNlcGFyYXRvclwiIGNsYXNzPVwiJHtjbGFzc0l0ZW1zLnNlcGFyYXRvcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZChzZXBhcmF0b3IpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoY21nKTtcclxuICAgICAgICAgICAgICAgIGlmKGNtV3JhcC5jbGllbnRIZWlnaHQgPCBjbVdyYXAuc2Nyb2xsSGVpZ2h0KXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nIFwiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IChjbVdyYXAuc3R5bGUudG9wIC0gY21nLmNsaWVudEhlaWdodCkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZ1wiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGF0dGFjaCwgMSk7XHJcbiAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb24gZnVsbFBhdGgoZWwpe1xyXG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgd2hpbGUgKGVsLnBhcmVudE5vZGUpe1xyXG4gICAgICAgICAgICAgIGlmIChlbC5pZCl7XHJcbiAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KCcjJytlbC5pZCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmIChlbD09ZWwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LmZyb20oZWwuY2xhc3NMaXN0LmVudHJpZXMoKSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTEsZT1lbDtlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7ZT1lLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsYysrKTtcclxuICAgICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrKCh0eXBlb2YgZWwuY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsLmNsYXNzTmFtZSkgfHwgXCJcIikuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICEhZSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKStcIjpudGgtY2hpbGQoXCIrYytcIilcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbD1lbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmFtZXMuam9pbihcIiA+IFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bGxQYXRoKGVsZW1lbnQpXHJcbiAgICAgICAgLypcclxuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0UnVsZSA9IHJ1bGVzW3J1bGVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmIChsYXRlc3RSdWxlKSByZXR1cm4gbGF0ZXN0UnVsZS5zZWxlY3RvclRleHQ7XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoKSByZXR1cm4gYC4ke0FycmF5LmZyb20oZWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7XHJcbiAgICAgICAgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7Ki9cclxuICAgIH1cclxuXHJcbiAgICBnZXRSdWxlcyhlbGVtZW50LCBjc3MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHMpIHtcclxuICAgICAgICAvL2lmICh3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKSByZXR1cm4gd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBzaGVldHMgPSBbLi4uY3NzXS5maWx0ZXIocyA9PiAhcy5ocmVmIHx8ICFzLmhyZWYuaW5jbHVkZXMoXCJCZXR0ZXJEaXNjb3JkQXBwXCIpKTtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0cy5tYXAocyA9PiBbLi4uKHMuY3NzUnVsZXMgfHwgW10pXSkuZmxhdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlcyA9IHJ1bGVzLmZpbHRlcihyID0+IHIgJiYgci5zZWxlY3RvclRleHQgJiYgZWxlbWVudC5tYXRjaGVzKHIuc2VsZWN0b3JUZXh0KSAmJiByLnN0eWxlLmxlbmd0aCAmJiByLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmxlbmd0aCA8IDggJiYgIXIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFJ1bGVzO1xyXG4gICAgfVxyXG59OyIsImV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXNhYmxlVHlwaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnN0YXJ0VHlwaW5nKVxyXG4gICAgICAgIC50aGVuKHR5cGluZ01vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0YXJ0VHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3BUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RvcFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc2FibGVUeXBpbmcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQnVnSHVudGVyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9idWdfaHVudGVyXCJcclxuaW1wb3J0IExpZ2h0Y29yZFVzZXJCYWRnZSBmcm9tIFwiLi4vc3ZnL0xpZ2h0Y29yZFVzZXJcIjtcclxuaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCB7IHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDaXJjdXMgZnJvbSBcIi4uL3N2Zy9jaXJjdXNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7IC8vIEdlbmVyYXRlIFVVSUQgKE5vIGNyeXB0byBybmcpXHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG59ICBcclxuXHJcbmNvbnN0IGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXMgPSB7fVxyXG5sZXQgYmFkZ2VzVG9GZXRjaCA9IFtdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzdGFudFNlcnZlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2NhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IHtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc3RhbnRTZXJ2ZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhY2hlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNhY2hlKGRhdGEpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB0aGlzLl9jYWNoZSAhPT0gXCJvYmplY3RcIilyZXR1cm4gdGhpcy5fY2FjaGUgPSBkYXRhXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jYWNoZSwgZGF0YSlcclxuICAgIH0vKlxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZSgpe1xyXG4gICAgICAgIEJkQXBpLnNob3dUb2FzdChcIkRlbGV0aW5nIGFsbCBpbmZvcyBhYm91dCB5b3Ugb24gTGlnaHRjb3JkIFNlcnZlcnMuLi5cIiwge3R5cGU6IFwid2FyblwifSlcclxuICAgICAgICByZXR1cm4gaGFuZGxlUmVxdWVzdChSb3V0ZXMuZGVsZXRlLCBcImRlbGV0ZVwiKVxyXG4gICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZGVsZXRlIGFsbCBpbmZvcm1hdGlvbnM6ICR7KHJlcy5zdGF0dXMrXCIgXCIrcmVzLnN0YXR1c1RleHQrXCIgXCIrYXdhaXQgcmVzLnRleHQoKSl9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zLmApXHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dUb2FzdChcIlN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pXHJcbiAgICAgICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gPSBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpXHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBkZWxldGUgYWxsIGluZm9ybWF0aW9uczogJHtlcnIuc3RhY2t9YClcclxuICAgICAgICB9KVxyXG4gICAgfSovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgY3VzdG9tIGJhZGdlcyBmcm9tIHRoZSB1c2VyIElELlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXIgVGhlIHVzZXIgSUQgXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb25zdGFudHNbXCJiYWRnZXNcIl0+fVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRCYWRnZXModXNlcil7XHJcbiAgICAgICAgaWYodGhpcy5jYWNoZS5iYWRnZXNbdXNlcl0pcmV0dXJuIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXHJcbiAgICAgICAgaWYoYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSlyZXR1cm4gYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG5cclxuICAgICAgICBsZXQgcmVzb2x2ZVxyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzKSA9PiAocmVzb2x2ZSA9IHJlcykpXHJcbiAgICAgICAgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSA9IG5ld1Byb21pc2VcclxuXHJcbiAgICAgICAgY29uc3QgYmFkZ2VzID0gW11cclxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIENvbnN0YW50cy5iYWRnZXMpe1xyXG4gICAgICAgICAgICBpZihiYWRnZS5kZWZhdWx0VXNlcnMuaW5jbHVkZXModXNlcikpYmFkZ2VzLnB1c2goYmFkZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZldGNoZWRCYWRnZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSlyZXR1cm4gcmVzb2x2ZShbXSlcclxuICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaC5wdXNoKFt1c2VyLCByZXNvbHZlXSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlcnMgPSBiYWRnZXNUb0ZldGNoXHJcbiAgICAgICAgICAgICAgICBpZih1c2Vycy5sZW5ndGggPT09IDApcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBiYWRnZXNUb0ZldGNoID0gW11cclxuICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3QoUm91dGVzLmJhZGdlcywgXCJQT1NUXCIsIEpTT04uc3RyaW5naWZ5KHVzZXJzLm1hcChlID0+IGVbMF0pKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IHNlcnZlciBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgdXNlciBvZiByZXNwb25zZUJvZHkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHVzZXJzLmZpbmQocHJvbWlzZSA9PiBwcm9taXNlWzBdID09PSB1c2VyLnVzZXJfaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VbMV0odXNlci5iYWRnZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZighKGVyciBpbnN0YW5jZW9mIExpZ2h0Y29yZEVycm9yKSljb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCAwKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBmZXRjaGVkQmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoIUNvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBXZSBkbyBub3QgaGF2ZSB0aGUgQ29tcG9uZW50LCBza2lwIGl0LlxyXG4gICAgICAgICAgICBpZihiYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBBbHJlYWR5IGluc2VydGVkLlxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaChDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGJhZGdlczogT2JqZWN0LmFzc2lnbih0aGlzLmNhY2hlLmJhZGdlcywge1t1c2VyXTogYmFkZ2VzfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIH0sIDYwMDAwMCk7XHJcblxyXG4gICAgICAgIHJlc29sdmUoYmFkZ2VzKVxyXG4gICAgICAgIGRlbGV0ZSBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXHJcbiAgICAgICAgcmV0dXJuIGJhZGdlc1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocm91dGUsIG1ldGhvZCwgZGF0YSl7XHJcbiAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSl7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBMaWdodGNvcmRFcnJvcihcIlRoZSBjdXJyZW50IHNldHRpbmdzIGJsb2NrZWQgdGhlIHJlcXVlc3QuXCIpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGVGZXRjaChgJHtDb25zdGFudHMuU0VSVkVSX1VSTH0vYXBpL3YxJHtyb3V0ZX1gLCB7XHJcbiAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJDTElFTlRcIjogXCJMaWdodGNvcmRcIixcclxuICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gfHwgXCJOb25lOjpBbm9ueW1vdXNcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uKGRhdGEgPyB7XHJcbiAgICAgICAgICAgIGJvZHk6IGRhdGFcclxuICAgICAgICB9IDoge30pXHJcbiAgICB9KVxyXG59XHJcblxyXG5jbGFzcyBMaWdodGNvcmRFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiTGlnaHRjb3JkRXJyb3JcIlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgU0VSVkVSX1VSTDogXCJodHRwczovL2xpZ2h0Y29yZC5kZXJva3UueHl6XCIsXHJcbiAgICBiYWRnZXM6IFsgLy8gVE9ETzogQWRkIG1vcmUgYmFkZ2VzICsgc2VydmVyIHNpZGUgc3ZnXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZCBCdWcgSHVudGVyXCIsXHJcbiAgICAgICAgICAgIGlkOiBcImYwNDY5OGY1LTgxNmItNDFlMy1iZDAxLTkyMjkxMTkzZDdhNVwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcclxuICAgICAgICAgICAgICAgIFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIsXHJcbiAgICAgICAgICAgICAgICBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogQnVnSHVudGVyQmFkZ2UsXHJcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC9saWdodGNvcmQvd2lraS9iYWRnZXMjYnVnX2h1bnRlclwiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJ1ZmZvb25cIixcclxuICAgICAgICAgICAgaWQ6IFwiMDY5MDRkMzEtNjViNC00MWVjLWE1MGMtODY1OGJiZDFhZjk2XCIsXHJcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW1xyXG4gICAgICAgICAgICAgICAgXCIzODkwMTY4OTU1NDM3MDU2MDJcIixcclxuICAgICAgICAgICAgICAgIFwiNjY0NjAwMTM0NTI4NjYzNTY1XCIsXHJcbiAgICAgICAgICAgICAgICBcIjYyNTM1MDY1NzgyOTg5NjIyNFwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ2lyY3VzLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8veW91dHUuYmUvRUp0YjZ6LWRsVDg/dD0xNDVcIlxyXG4gICAgICAgIH1cclxuICAgIF1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFJvdXRlcyA9IHtcclxuICAgIGJhZGdlczogYC91c2Vycy9iYWRnZXNgXHJcbn0iLCIvKipcclxuICogQ29weXJpZ2h0IDIwMTggWmFjaGFyeSBSYXVlblxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcclxuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXHJcbiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXHJcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWRcclxuICogdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELFxyXG4gKiBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQVxyXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXHJcbiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxyXG4gKiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkVcclxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcbiAqIFxyXG4gKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CRFBsdWdpbkxpYnJhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQGludGVyZmFjZVxyXG4gKiBAbmFtZSBPZmZzZXRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRvcCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIC0gQm90dG9tIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gT3V0ZXIgd2lkdGggb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKi9cclxuXHJcbiAvKipcclxuICogRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWRkZWQgbGlzdGVuZXIuXHJcbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcclxuICovXHJcbiBcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEFkZHMgYSBzdHlsZSB0byB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgYXMgdGhlIGVsZW1lbnQgaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU3R5bGUoaWQsIGNzcykge1xyXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMvcmVxdWlyZXMgYSByZW1vdGUgc2NyaXB0IHRvIGJlIGxvYWRlZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGZvciB0aGlzIHNjcmlwdFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjcmlwdCBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XHJcblx0XHRcdHNjcmlwdC5zcmMgPSB1cmw7XHJcblx0XHRcdHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcclxuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHNjcmlwdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcclxuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cclxuICAgIHN0YXRpYyBhbmltYXRlKHt0aW1pbmcgPSBfID0+IF8sIHVwZGF0ZSwgZHVyYXRpb259KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xyXG4gICAgICAgICAgLy8gdGltZUZyYWN0aW9uIGdvZXMgZnJvbSAwIHRvIDFcclxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA+IDEpIHRpbWVGcmFjdGlvbiA9IDE7XHJcbiAgICAgIFxyXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1pbmcodGltZUZyYWN0aW9uKTtcclxuICAgICAgXHJcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XHJcbiAgICAgIFxyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA8IDEpIHtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBteSBzaGl0IHZlcnNpb24gb2Ygbm90IGhhdmluZyB0byB1c2UgYCRgIGZyb20galF1ZXJ5LiBNZWFuaW5nXHJcbiAgICAgKiB0aGF0IHlvdSBjYW4gcGFzcyBhIHNlbGVjdG9yIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucXVlcnl9LlxyXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTFxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucXVlcnlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gRWl0aGVyIHRoZSByZXN1bHQgb2YgYHBhcnNlSFRNTGAgb3IgYHF1ZXJ5YFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSFRNTChzZWxlY3Rvcik7XHJcbiAgICAgICAgY29uc3QgaXNIVE1MID0gZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0ID8gQXJyYXkuZnJvbShlbGVtZW50KS5zb21lKG4gPT4gbi5ub2RlVHlwZSA9PT0gMSkgOiBlbGVtZW50Lm5vZGVUeXBlID09PSAxO1xyXG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5KHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBBcnJheSBvZiBhbGwgZm91bmQgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5QWxsKHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXHJcbiAgICAgKiB0aGUgcGFyc2VkIEhUTUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGRvY3VtZW50IGZyYWdtZW50IHtAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50fS5cclxuICAgICAqIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpc3Qgb2YgZWxlbWVudHMgYXQgdGhlIHRvcCBsZXZlbCwgdGhleSBjYW4gdGhlbiBiZSBhcHBlbmRlZCBhbGwgYXQgb25jZSB0byBhbm90aGVyIG5vZGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcclxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xyXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXHJcbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7cmV0dXJuIHRoaXMucGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50KTt9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBzdHJpbmcgb2YgaHRtbCBhbmQgZXNjYXBlcyBpdCB1c2luZyB0aGUgYnJvd2VyJ3Mgb3duIGVzY2FwaW5nIG1lY2hhbmlzbS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gaHRtbCB0byBiZSBlc2NhcGVkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlc2NhcGVIVE1MKGh0bWwpIHtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgc3BhbkVsZW1lbnQuYXBwZW5kKHRleHROb2RlKTtcclxuICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gcmVtb3ZlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcmVzZW50OiBUb2dnbGUgY2xhc3MgdmFsdWU7XHJcbiAgICAgKiBpLmUuLCBpZiBjbGFzcyBleGlzdHMgdGhlbiByZW1vdmUgaXQgYW5kIHJldHVybiBmYWxzZSwgaWYgbm90LCB0aGVuIGFkZCBpdCBhbmQgcmV0dXJuIHRydWUuXHJcbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGV2YWx1YXRlcyB0byB0cnVlLCBhZGQgc3BlY2lmaWVkIGNsYXNzIHZhbHVlLCBhbmQgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCByZW1vdmUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmRpY2F0b3JdIC0gT3B0aW9uYWwgaW5kaWNhdG9yIGZvciBpZiB0aGUgY2xhc3Mgc2hvdWxkIGJlIHRvZ2dsZWRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvZ2dsZUNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSwgaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgY2xhc3NuYW1lID0gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XHJcbiAgICAgICAgZWxzZSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUpIHtcclxuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgb25lIGNsYXNzIHdpdGggYW5vdGhlclxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIGZvciB0aGUgY2xhc3NcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlcGxhY2VDbGFzcyhlbGVtZW50LCBvbGROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZShvbGROYW1lLCBuZXdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBhcHBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgcHJlcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJlcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUucHJlcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldE5vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluc2VydEFmdGVyKHRoaXNOb2RlLCB0YXJnZXROb2RlKSB7XHJcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuYWZ0ZXIobmV3RWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZnRlcih0aGlzTm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgICAgIHRoaXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXNOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIisgXCIgKyBzZWxlY3RvcikgOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHN1YnNlcXVlbnQgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ+ICpcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdWJzZXF1ZW50IHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHByZWNlZWRpbmcgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIHdoaWNoIGluZGV4IGluIGNoaWxkcmVuIGEgY2VydGFpbiBub2RlIGlzLiBTaW1pbGFyIHRvIGpRdWVyeSdzIGAkLmluZGV4KClgXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIG5vZGUgdG8gZmluZCBpdHMgaW5kZXggaW4gcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5kZXhJblBhcmVudChub2RlKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICBsZXQgbnVtID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgPT0gMSkgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXHJcbiAgICBzdGF0aWMgaW5kZXgobm9kZSkge3JldHVybiB0aGlzLmluZGV4SW5QYXJlbnQobm9kZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgbnVsbC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHBhcmVudFxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBzaWJsaW5nIGVsZW1lbnQgb3IgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiAhc2VsZWN0b3IgfHwgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGQoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgYW5jZXN0b3JzIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBwYXJlbnRzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xyXG4gICAgICAgIGVsc2Ugd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgYW5jZXN0b3JzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCIqXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHNpYmxpbmdzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNpYmxpbmdzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCIqXCIpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyBjc3Mgc3R5bGVzIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgc3R5bGUgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlIC0gQXR0cmlidXRlIHRvIGdldCBvciBzZXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWwuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVthdHRyaWJ1dGVdO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbYXR0cmlidXRlXSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSB3aWR0aCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHdpZHRoIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBXaWR0aCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3aWR0aChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIGhlaWdodCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGVpZ2h0LiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIEhlaWdodCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoZWlnaHQoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQgaWYgZ2l2ZW4gYSB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIENvbnRlbnQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVpdGhlciB0aGUgc3RyaW5nIHNldCBieSB0aGlzIGNhbGwgb3IgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBub2RlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdGV4dChlbGVtZW50LCB0ZXh0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0ZXh0KSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgcGFnZS5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG9mZnNldCBvZlxyXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZnNldChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIG9uY2UuXHJcbiAgICAgKiBgY29uc3QgY2FuY2VsID0gRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJmaXJlZCFcIik7IGNhbmNlbCgpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb24oZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kIG1hdGNoZXMge0BsaW5rIG1vZHVsZTpET01Ub29scy5vbn0gYnV0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyBpdHNlbGZcclxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uY2UoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBsZXQgbWF0Y2hGaWx0ZXIgPSBsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PSB0eXBlLCBkZWZhdWx0RmlsdGVyID0gXyA9PiBfO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBtYXRjaEZpbHRlciA9IGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50LCBkZWZhdWx0RmlsdGVyID0gbCA9PiBsLmVsZW1lbnQgPT0gZWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB0eXBlID8gbGlzdGVuZXJzLmZpbHRlcihtYXRjaEZpbHRlcikgOiBsaXN0ZW5lcnMuZmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbGlzdC5sZW5ndGg7IGMrKykgbGlzdFtjXS5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZWQgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGNsaWNrIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcImNsaWNrLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBlbGVtZW50IC0gRWxlbWVudCB0byByZW1vdmUgbGlzdGVuZXIgZnJvbVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudF0gLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIG9yaWdpbmFsIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmYoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZWxlbWVudCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHRoaXMuX19vZmZBbGwoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkgcmV0dXJuIHRoaXMuX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgbm9kZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGJvZHkuXHJcbiAgICAgKiBUaGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHVwb24gZmlyaW5nLlxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uTW91bnQgLSBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBmaXJlIG9uIE1vdW50IG9yIG9uIFVubW91bnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIG9uTW91bnQgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG9uTW91bnQgPyBtdXRhdGlvbi5hZGRlZE5vZGVzIDogbXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xyXG4gICAgc3RhdGljIG9uVW5tb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cclxuICAgIHN0YXRpYyBvbkFkZGVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnQobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb21iaW5lcyBtdWx0aXBsZSBlbGVtZW50cyBpbnRvIG9uZSBwYXJlbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheTxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gYXJyYXkgb2YgZWxlbWVudHMgdG8gcHV0IGludG8gYSBzaW5nbGUgcGFyZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3cmFwKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZG9tV3JhcHBlciA9IHRoaXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiZG9tLXdyYXBwZXJcIj48L2Rpdj5gKTtcclxuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcclxuICAgICAgICByZXR1cm4gZG9tV3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc29sdmVzIHRoZSBub2RlIHRvIGFuIEhUTUxFbGVtZW50LiBUaGlzIGlzIG1haW5seSB1c2VkIGJ5IGxpYnJhcnkgbW9kdWxlcy5cclxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVzb2x2ZUVsZW1lbnQobm9kZSkge1xyXG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5ET00gPSBET01Ub29scyIsImltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgRW1vamlSZWdleDogLzxhP1xcLihcXHcrKVxcLihcXGQrKT4vZ1xyXG59XHJcblxyXG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cclxubGV0IEVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG5sZXQgQXV0b2NvbXBsZXRlTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpWzBdXHJcbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdXHJcbmxldCBFbW9qaU1vZHVsZVF1ZXJ5ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpWzBdXHJcbmxldCBNZXNzYWdlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylbMF1cclxubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdXHJcbmxldCBlbW9qaVNlYXJjaCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmluaXQoKS5jYXRjaChlcnIgPT4gVXRpbHMuZXJyKFwiRW1vamlNb2R1bGVcIiwgXCJBbiBlcnJvciBvY2N1cmVkXCIsIGVycikpIC8vIGJldHRlciBsb2dnaW5nXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIC8qKiBFbW9qaSBBdXRvQ29tcGxldGUgKi9cclxuICAgICAgICBpZighQXV0b2NvbXBsZXRlTW9kdWxlKUF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilcclxuICAgICAgICBpZighQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylcclxuICAgICAgICBpZighRW1vamlNb2R1bGVRdWVyeSlFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVxyXG4gICAgICAgIGlmKCFNZXNzYWdlcylNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpXHJcbiAgICAgICAgaWYoIWd1aWxkTW9kdWxlKWd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVxyXG4gICAgICAgIGlmKCFlbW9qaVNlYXJjaCllbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuICAgICAgICBpZihBdXRvY29tcGxldGVNb2R1bGUgJiYgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgJiYgRW1vamlNb2R1bGVRdWVyeSAmJiBNZXNzYWdlcyAmJiBndWlsZE1vZHVsZSAmJiBlbW9qaVNlYXJjaCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQYXRjaGluZyBnZXRBdXRvY29tcGxldGVPcHRpb25zIG9mIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzYCwgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIGNvbnN0IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zXHJcbiAgICAgICAgICAgIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBmdW5jdGlvbihlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIHZhbHVlLkxJR0hUQ09SRF9FTU9KSVMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyhhcmcxLCBhcmcyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFyZzIubGVuZ3RoID4gMSAmJiBcIi5cIiA9PT0gYXJnMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFbW9qaVVzYWJsZShjb25kaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0cyh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBFbW9qaU1vZHVsZVF1ZXJ5LmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHModCwgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclJlc3VsdHMoZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEKGUsIHQsIGEuZW1vamlzLCBuLCByLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJLCBBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5FbW9qaSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBlLmlkIHx8IGUudW5pcXVlTmFtZSB8fCBlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGluZWw6IFwiLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWxkOiBudWxsICE9IGUuZ3VpbGRJZCA/IGd1aWxkTW9kdWxlLmRlZmF1bHQuZ2V0R3VpbGQoZS5ndWlsZElkKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIuXCIgKyBlICsgXCIuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRQbGFpblRleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmF3VGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBzdGFydCBhdXRvY29tcGxldGlvbiBvZiBMaWdodGNvcmQncyBlbW9qaXMuXCIpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIEVtb2ppIGRpc3BsYXkgKi9cclxuICAgICAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vamlSZW5kZXIpeyAvLyBUT0RPOiBQcm9wZXIgZW1vamkgZm9ybWF0dGluZyAvIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIW1lc3NhZ2UpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgIGlmKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e1xyXG4gICAgICAgICAgICAgICAgICogIHJhdzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIG5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBpZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGFuaW1hdGVkOiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICAgKiB9W119XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBlbW9qaXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gW11cclxuICAgICAgICAgICAgICAgIGZvcihsZXQgbm9kZSBvZiBjb250ZW50KXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2VcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IENvbnN0YW50cy5FbW9qaVJlZ2V4LmV4ZWMobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BhcnNlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFFbW9qaU1vZHVsZUFwaSlFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gRW1vamlNb2R1bGVBcGkuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQocGFyc2VkWzJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1vamkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbW9qaS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc1BhcnNlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdChcIiBcIikubWFwKCh3b3JkLCBpbmRleCwgYXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZClyZXR1cm4gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZW1vamkpcmV0dXJuIHdvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFDdXN0b21FbW9qaU1vZHVsZSlDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tRW1vamlNb2R1bGUuQ3VzdG9tRW1vamksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJldmlvdXMubGVuZ3RoID09PSAwKXJldHVybiBbY3VycmVudF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSArPSBgICR7Y3VycmVudH1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiK2N1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiLCBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnNoaWZ0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKG5ld0NvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5wdXNoKG5ld0NvbnRlbnQuc2hpZnQoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0vKlxyXG4gICAgICAgIGxldCB1c2VyTW9kdWxlXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiKVxyXG4gICAgICAgIC50aGVuKEVtb2ppUGlja2VyTGlzdFJvdyA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc3MgPSBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdFxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdCA9IGNsYXNzIEVtb2ppUGlja2VyTGlzdFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbilyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW9qaURlc2NyaXB0b3JzOiB0aGlzLnByb3BzLmVtb2ppRGVzY3JpcHRvcnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pc0Rpc2FibGVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KSkgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0LmRpc3BsYXlOYW1lID0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIlxyXG4gICAgICAgIH0pKi9cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEQoZSwgdCwgbiwgciwgbywgaSwgcywgdSwgbCwgYykge1xyXG4gICAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICB2YXIgZCA9IG4ubWFwKChmdW5jdGlvbihlLCBuKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodSwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIG9uQ2xpY2s6IG8sXHJcbiAgICAgICAgICAgIG9uSG92ZXI6IHIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0ID09PSBuLFxyXG4gICAgICAgICAgICBpbmRleDogblxyXG4gICAgICAgIH0sIGwoZSwgbikpKVxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIFtSKGksIHMsIGUsIGMpLCBkXVxyXG59XHJcblxyXG5mdW5jdGlvbiBSKGUsIHQsIG4sIHIpIHtcclxuICAgIHZhciBhID0gKG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcclxuICAgICAgICBwcmVmaXg6IHIobilcclxuICAgIH0pIDogdClcclxuICAgIGlmKEFycmF5LmlzQXJyYXkoYSkpe1xyXG4gICAgICAgIGEudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIHt9LCBcIltMaWdodGNvcmRdIFwiKSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGEgPSBcIltMSUdIVENPUkRdIFwiK2FcclxuICAgIH1cclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LlRpdGxlLCB7XHJcbiAgICAgICAgdGl0bGU6IGFcclxuICAgIH0sIGEpXHJcbn1cclxuUi5kaXNwbGF5TmFtZSA9IFwicmVuZGVySGVhZGVyXCI7XHJcblxyXG5sZXQgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbmxldCBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZSAmJiBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5sZXQgaXNVc2FibGUgPSBmYWxzZVxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcblxyXG5mdW5jdGlvbiBzZXRFbW9qaVVzYWJsZSh1c2FibGUpe1xyXG4gICAgaXNVc2FibGUgPSB1c2FibGVcclxuICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpcmV0dXJuXHJcbiAgICBpZighaXNFbW9qaURpc2FibGVkKWlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcblxyXG4gICAgaGFzUGF0Y2hlZCA9IHRydWVcclxuICAgIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkID0gZnVuY3Rpb24oZW1vamkpe1xyXG4gICAgICAgIGlmKGlzVXNhYmxlKXtcclxuICAgICAgICAgICAgaWYoZW1vamkuc3Vycm9nYXRlcyB8fCBlbW9qaS5kaXZlcnNpdHkpcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0Vtb2ppRGlzYWJsZWQuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgbm9kZUZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcclxuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiXHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5pbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXHJcbmltcG9ydCB7IGFkZG9uQ2FjaGUgfSBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXHJcblxyXG5jb25zdCBjYWNoZSA9IHt9XHJcbmNvbnN0IGNhY2hlMiA9IHt9XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luQ2VydGlmaWVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbkNlcnRpZmllciA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaChhdHRhY2htZW50LCBpZCl7XHJcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaXNUcnVzdGVkKGhhc2gpe1xyXG4gICAgICAgIHJldHVybiBjYWNoZVtoYXNoXSAmJiAhY2FjaGVbaGFzaF0uc3VzcGVjdFxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpe1xyXG4gICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICBsZXQgaXNIYXJtZnVsID0gZmFsc2VcclxuICAgIGZvcihsZXQga2V5d29yZCBvZiBkYXRhLnNwbGl0KC9bXlxcd1xcZF0rL2cpKXtcclxuICAgICAgICBmb3IobGV0IG9vZiBvZiBbXHJcbiAgICAgICAgICAgIFwidG9rZW5cIixcclxuICAgICAgICAgICAgXCJlbWFpbFwiLFxyXG4gICAgICAgICAgICBcInBob25lXCIsXHJcbiAgICAgICAgICAgIFwiTUZBXCIsXHJcbiAgICAgICAgICAgIFwiMmZhXCIsXHJcbiAgICAgICAgICAgIFwiY2hpbGRfcHJvY2Vzc1wiLFxyXG4gICAgICAgICAgICBcImxvY2FsU3RvcmFnZVwiLFxyXG4gICAgICAgICAgICBcImV2YWxcIixcclxuICAgICAgICAgICAgXCJnZXRHbG9iYWxcIixcclxuICAgICAgICAgICAgXCJCcm93c2VyV2luZG93XCJcclxuICAgICAgICBdKXtcclxuICAgICAgICAgICAgaWYoa2V5d29yZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG9vZi50b0xvd2VyQ2FzZSgpKSAmJiAha2V5d29yZC50b0xvd2VyQ2FzZSgpID09PSBcImRvbXRva2VubGlzdFwiKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG9vZiwga2V5d29yZClcclxuICAgICAgICAgICAgICAgIGlzSGFybWZ1bCA9IFwidG9rZW4gc3RlYWxlci92aXJ1c1wiXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IG5vX2NvbW1lbnRzID0gZGF0YS5yZXBsYWNlKC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfChbXlxcXFw6XXxeKVxcL1xcLy4qJC9nbSwgXCJcIikudHJpbSgpLy8gcmVtb3ZpbmcgdGhlIE1FVEEgY29tbWVudCBmcm9tIHBsdWdpbnNcclxuICAgICAgICBpZigoL3ZhciBbXFx3XFxkXyRdKz1cXFtcIi9naSkudGVzdChub19jb21tZW50cykpe1xyXG4gICAgICAgICAgICBpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFpc0hhcm1mdWwpe1xyXG4gICAgICAgICAgICBjb25zdCByZWdleHBzID0gW1xyXG4gICAgICAgICAgICAgICAgLyoqIGhleGFkZWNpbWFsICovXHJcbiAgICAgICAgICAgICAgICAvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLFxyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBfMHg4ZGI3KCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgICAgICAvKiogbWFuZ2xlZCAqL1xyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csIC8vIGIoJzB4MCcpXHJcbiAgICAgICAgICAgICAgICAvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBiKCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgZm9yKGxldCByZWdleCBvZiByZWdleHBzKXtcclxuICAgICAgICAgICAgICAgIGlmKGlzSGFybWZ1bClicmVha1xyXG4gICAgICAgICAgICAgICAgaWYocmVnZXgudGVzdChub19jb21tZW50cykpaXNIYXJtZnVsID0gXCJvYmZ1c2NhdGlvbi9oaWRkZW4gY29kZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWlzSGFybWZ1bClyZXR1cm4gcmVtb3ZlQ2FsbGJhY2soaGFzaClcclxuICAgIGNhY2hlW2hhc2hdID0ge1xyXG4gICAgICAgIHN1c3BlY3Q6IHRydWUsXHJcbiAgICAgICAgbmFtZTogaGFzaFRvVXJsW2hhc2hdLnNwbGl0KFwiL1wiKS5wb3AoKSxcclxuICAgICAgICB0eXBlOiBoYXNoVG9VcmxbaGFzaF0uZW5kc1dpdGgoXCIuanNcIikgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwiLFxyXG4gICAgICAgIGhhcm06IGlzSGFybWZ1bCxcclxuICAgICAgICBoYXNoOiBoYXNoLFxyXG4gICAgICAgIGZpbGVuYW1lXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnNvbGUubG9nKGBGb3VuZCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgJHtjYWNoZVtoYXNoXS50eXBlLnRvTG93ZXJDYXNlKCl9OiAke2NhY2hlW2hhc2hdLm5hbWV9YClcclxuXHJcbiAgICByZXN1bHRDYWxsYmFjayhjYWNoZVtoYXNoXSlcclxufVxyXG5cclxuY29uc3QgaGFzaFRvVXJsID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hhc2goaGFzaCwgZGF0YSwgZmlsZW5hbWUsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayl7XHJcbiAgICBjb25zb2xlLmxvZyhgRmlsZTogJHtmaWxlbmFtZX0gaGFzaDogJHtoYXNofWApXHJcbiAgICBpZighY2FjaGVbaGFzaF0pe1xyXG4gICAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiK2hhc2gsIHsgLy8gVXNpbmcgbm9kZS1mZXRjaCB0byBieXBhc3MgY29yc1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnVzZXJBZ2VudCAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICAgICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgcmVzdWx0Lmhhc2ggPSBoYXNoXHJcbiAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSA9IGZpbGVuYW1lXHJcblxyXG4gICAgICAgICAgICBjYWNoZVtoYXNoXSA9IHJlc3VsdFxyXG5cclxuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxyXG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBjYWNoZVtoYXNoXVxyXG5cclxuICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZShfX3BhdGgsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayA9IChoYXNoKSA9PiB7fSwgaXNGcm9tTG9hZGVyID0gZmFsc2UpeyAgICBcclxuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKVxyXG4gICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuXHJcbiAgICBjcmVhdGVSZWFkU3RyZWFtKF9fcGF0aCkub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgfSkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxyXG5cclxuICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBfX3BhdGhcclxuXHJcbiAgICAgICAgaWYoaXNGcm9tTG9hZGVyICYmIGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF0pe1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgIGlmKHZhbHVlLnRpbWVzdGFtcCA8IChEYXRlLm5vdygpIC0gNi4wNDhlKzgpKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgICAgICBjb250ZW50TWFuYWdlci5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2sodmFsdWUucmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBiYXNlbmFtZShfX3BhdGgpLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spXHJcbiAgICB9KVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpe1xyXG4gICAgaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSlyZXR1cm5cclxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuICAgIGlmKCFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSAmJiAhYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxyXG5cclxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnRcclxuICAgICAgICB9XHJcbiAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcclxuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXHJcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgICAgIGNhY2hlMlthdHRhY2htZW50LnVybF0gPSBoYXNoUmVzdWx0XHJcbiAgICAgICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IGF0dGFjaG1lbnQudXJsXHJcblxyXG4gICAgICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYXR0YWNobWVudC5maWxlbmFtZSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBhdHRhY2htZW50LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgaWYoZWxlbSllbGVtLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pLmNhdGNoKCgpPT57fSlcclxufVxyXG5cclxubGV0IGZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cclxuXHJcbi8qKlxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudFtdfSBlbGVtZW50cyBcclxuICogQHBhcmFtIHt7dHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgb2ZmaWNpYWw/OiBib29sZWFufXx7c3VzcGVjdDp0cnVlLCB0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBoYXJtOiBzdHJpbmd9fSByZXN1bHRcclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgZmlsZW5hbWUpe1xyXG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXHJcbiAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuIC8vIGFscmVhZHkgY2VydGlmaWVkL2RpdiBkb2VzIG5vdCBleGlzdCBhbnltb3JlLlxyXG5cclxuICAgIGlmKCFmbG93ZXJTdGFyTW9kdWxlKWZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG4gICAgaWYoIWNoaWxkTW9kdWxlKWNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcbiAgICBcclxuICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFxyXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGQudGFnTmFtZSA9PT0gXCJBXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIEFueXdheVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlY3Ryb24ucmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChjaGlsZC5ocmVmKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUoY2hpbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5leHROb2RlKGRpdi5wYXJlbnROb2RlKVxyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdmcpWzBdLnN2ZywgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCA0MCAzMlwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTMyKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1zdGF0dXMtZG5kKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6QkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLCBkaXYpXHJcbiAgICB9ZWxzZSBpZighcmVzdWx0Lm9mZmljaWFsKXtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgY2VydGlmaWVkIGJ5IExpZ2h0Y29yZC5cIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiM0ZjU0NWNcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiI2ZmZmZmZlwiLGQ6XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YWxsIGFuZCBsYXVuY2ggdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkby5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIGFuZCBJbnN0YWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkkndmUgY2hhbmdlZCBteSBtaW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGluc3RhbGxQYXRoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIiwgc3R5bGU6XCJicmFuZFwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCIsc3Ryb2tlOlwiIzM2MzkzZlwiLHN0eWxlOntjb2xvcjpcIiM0MDg3ZWRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiY3VycmVudENvbG9yXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTEwLjcsNS4yOGEyLjksMi45LDAsMCwwLTIuMTEuODYuMTEuMTEsMCwwLDAsMCwuMTZsMS4wNS45NGEuMTEuMTEsMCwwLDAsLjE1LDAsMS4yNywxLjI3LDAsMCwxLC45LS4zM2MuNjUsMCwuNjUuNzMuNjUuNzNhLjY0LjY0LDAsMCwxLS42NS42NSwxLjczLDEuNzMsMCwwLDEtMS4xOC0uNTRjLS4zMS0uMjYtLjM2LS4zMi0uNzMtLjY2UzcuMDYsNS4yOCw1LjY1LDUuMjhBMi4yNiwyLjI2LDAsMCwwLDMuMzcsNy41NiwyLjU5LDIuNTksMCwwLDAsMy44Miw5YTIuMTgsMi4xOCwwLDAsMCwxLjgzLjg5LDIuOTQsMi45NCwwLDAsMCwyLjEtLjgxLjExLjExLDAsMCwwLDAtLjE2TDYuNzQsOEEuMTEuMTEsMCwwLDAsNi42LDhhMS41OCwxLjU4LDAsMCwxLS45NC4yOWgwQS43MS43MSwwLDAsMSw1LDcuNTZINWEuNjMuNjMsMCwwLDEsLjY1LS42NGMuNzEsMCwxLjQyLjc1LDEuOTQsMS4yNy43NS43NiwxLjY2LDEuNzksMy4xMSwxLjc0QTIuMjgsMi4yOCwwLDAsMCwxMyw3LjY0YTIuNTksMi41OSwwLDAsMC0uNDUtMS40N0EyLjE0LDIuMTQsMCwwLDAsMTAuNyw1LjI4WlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBkb3dubG9hZCBhbmQgbG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBtdXN0IGVuYWJsZSBpdCBpbiB0aGUgc2V0dGluZ3MuXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnN0YWxsUGF0aCA9IGpvaW4ocmVzdWx0LnR5cGUgPT09IFwiUGx1Z2luXCIgPyBjb250ZW50TWFuYWdlci5fcGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLl90aGVtZXNGb2xkZXIsIHJlc3VsdC5maWxlbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChyZXN1bHQudHlwZStcIiBzdWNjZXNmdWxseSBpbnN0YWxsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoZXJyLm1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEtleWVkQXJyYXkob2JqKXtcclxuICAgIGxldCBhcnIgPSBbXVxyXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICAgIGFyci5wdXNoKFtrLCBvYmpba11dKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBhcnJcclxufVxyXG5cclxubGV0IGtleSA9IG51bGxcclxubGV0IHNhdmUgPSBudWxsXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChtPT5tLk9iamVjdFN0b3JhZ2UpXHJcbi50aGVuKGxvY2FsU3RvcmFnZU1vZHVsZSA9PiB7XHJcbiAgICBsZXQgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlTW9kdWxlLmltcGxcclxuICAgIHNhdmUgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIiwgYnRvYShKU09OLnN0cmluZ2lmeShrZXkpKSlcclxuICAgIH1cclxuICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBzYXZlKClcclxuICAgIH0sIDEwMDAwMCk7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IHZhbCA9IHNhZmVKU09OUGFyc2UoYXRvYihsb2NhbFN0b3JhZ2UuZ2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIpKSlcclxuICAgICAgICBpZih2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCAhQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggIT09IDIgfHwgdmFsLmZpbmQoZSA9PiB0eXBlb2YgZSAhPT0gXCJzdHJpbmdcIikgfHwgQnVmZmVyLmZyb20odmFsWzBdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDE2IHx8IEJ1ZmZlci5mcm9tKHZhbFsxXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAzMil7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlS2V5KClcclxuICAgICAgICAgICAgc2F2ZSgpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBrZXkgPSB2YWxcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9XHJcbn0pXHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleSgpe1xyXG4gICAga2V5ID0gW2NyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJiYXNlNjRcIiksIGNyeXB0by5yYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJiYXNlNjRcIildXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNhZmVKU09OUGFyc2UoanNvbil7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yID8gbmV3IEVycm9yKGUpIDogZVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoXCJhZXMtMjU2LWNiY1wiLCBCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpKVxyXG4gICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIikpO1xyXG4gICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWQudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIFwie31cIlxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0U2V0dGluZ3NDYWNoZShkYXRhKXtcclxuICAgIGxldCBhcmdzID0gW0J1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIildXHJcbiAgICBcclxuICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywgLi4uYXJncyk7XHJcbiAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhLCBcInV0ZjhcIikpO1xyXG4gICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZyhcImJhc2U2NFwiKVxyXG59IiwiaW1wb3J0IHtiZHBsdWdpbkVycm9ycywgcGx1Z2luQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5zfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbmNsYXNzIFBsdWdpbk1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbk1vZHVsZSA9IHRoaXNcbiAgICB9XG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlcjt9XG59XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5sb2FkUGx1Z2luRGF0YSgpO1xuICAgIGJkcGx1Z2luRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFBsdWdpbnMoKSkpO1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcGx1Z2luLCBuYW1lO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5nZXROYW1lKCk7XG4gICAgICAgICAgICBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgbG9hZGVkLlwiLCBlcnIpO1xuICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcImxvYWQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW25hbWVdKSBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGx1Z2luQ29va2llW25hbWVdKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBsdWdpbi5zdGFydCgpO1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XG4gICAgICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcInN0YXJ0KCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKVxuICAgIH1cbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG5cbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLm9uKFwiZGlkLW5hdmlnYXRlLWluLXBhZ2VcIiwgdGhpcy5jaGFubmVsU3dpdGNoLmJpbmQodGhpcykpO1xuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdGFydFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RhcnQoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdGFydGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIHBsdWdpbiArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc3RvcFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RvcCgpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdG9wcGVkLmApO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0b3BwZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCkgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnRvZ2dsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4pO1xuICAgIGVsc2UgdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy50b2dnbGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGNvbnN0IHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gKGNvbnNvbGUubG9nKHAuZmlsZW5hbWUsIGZpbGVuYW1lKSkgfHwgcC5maWxlbmFtZSA9PSBmaWxlbmFtZSkucGx1Z2luO1xuICAgIHRyeSB7IGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTt9XG4gICAgY2F0Y2ggKGVycikge2lmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJdfSk7fVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi1sb2FkZWRcIiwgcGx1Z2luLmdldE5hbWUoKSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVubG9hZFBsdWdpbiA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luLnBsdWdpbi5nZXROYW1lKCk7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGRlbGV0ZSBiZHBsdWdpbnNbcGx1Z2luXTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XG4gICAgfVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXVubG9hZGVkXCIsIHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIHRoaXMudW5sb2FkUGx1Z2luKGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm4gdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lT3JOYW1lKTtcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xuICAgIGNvbnN0IGVuYWJsZWQgPSBwbHVnaW5Db29raWVbcGx1Z2luXTtcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGlmIChiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCAmJiB0eXBlb2YoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQoKTtcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXJlbG9hZGVkXCIsIHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZpbGVuYW1lT3JOYW1lKTtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmdWxsUGF0aCk7XG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKGAke2Z1bGxQYXRofWApO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51cGRhdGVQbHVnaW5MaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwicGx1Z2luXCIpO1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFBsdWdpbihuYW1lKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbkRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiKTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwbHVnaW5Db29raWUsIHNhdmVkKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnNhdmVQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIsIHBsdWdpbkNvb2tpZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLm5ld01lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25NZXNzYWdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vbk1lc3NhZ2UoKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25NZXNzYWdlIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5jaGFubmVsU3dpdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uU3dpdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvblN3aXRjaCBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmF3T2JzZXJ2ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9ic2VydmVyKGUpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvYnNlcnZlciBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQbHVnaW5Nb2R1bGUoKTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgVjJDX1B1YmxpY1NlcnZlcnMgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgTGF5ZXIgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvbGF5ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9QdWJsaWNTZXJ2ZXJzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24gPSB0aGlzLl9hcHBlbmRCdXR0b24uYmluZCh0aGlzKTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjJfUHVibGljU2VydmVycyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5ZXIsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwiLCBpZDogXCJwdWJzbGF5ZXJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHVibGljU2VydmVycywge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCJ9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInB1YnNsYXllcnJvb3RcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXJzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJzICYmIGUubGF5ZXIpWzBdLmxheWVycy5zcGxpdChcIiBcIilbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gRE9NLnF1ZXJ5KFwiLmxheWVycywgLlwiK2NsYXNzTmFtZUxheWVycyk7XHJcbiAgICAgICAgaWYgKCFsYXllcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsYXllcnMuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KFwiPGRpdiBpZD0ncHVic2xheWVycm9vdCc+XCIpKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllcnNcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b24oKSB7XHJcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7QkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW19XCI+YCk7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBidG4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBCRFYyLmd1aWxkQ2xhc3Nlcy5jaXJjbGVCdXR0b25NYXNrfVwiPnB1YmxpYzwvZGl2PmApO1xyXG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5yZW5kZXIoKTt9KTtcclxuICAgICAgICBidG4uYXBwZW5kKGxhYmVsKTtcclxuICAgICAgICByZXR1cm4gYnRuO1xyXG4gICAgfVxyXG5cclxuICAgIF9hcHBlbmRCdXR0b24oKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kb3dubG9hZFByb2dyZXNzICYmIGUudHV0b3JpYWxDb250YWluZXIpWzBdLnR1dG9yaWFsQ29udGFpbmVyKVxyXG4gICAgICAgIF1cclxuICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgZGl2LiR7Y2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJ9ID4gZGl2YCk7XHJcbiAgICAgICAgRE9NLmFmdGVyKGd1aWxkcywgdGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gd2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0T2xkID0gd2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgVXRpbHMud2FybihcIlB1YmxpY1NlcnZlclwiLCBcIkNhbid0IGZpbmQgR3VpbGRMaXN0IGNvbXBvbmVudFwiKTtcclxuICAgICAgICB0aGlzLmd1aWxkUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHthZnRlcjogdGhpcy5fYXBwZW5kQnV0dG9ufSk7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQnV0dG9uKCkge1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmd1aWxkUGF0Y2g7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKS5yZW1vdmUoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIGZyb20gXCIuL3NldHRpbmdzUGFuZWxTaWRlYmFyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IGNvbG9yZWRUZXh0IGZyb20gXCIuL2NvbG9yZWRUZXh0XCI7XHJcbmltcG9ydCB0ZkhvdXIgZnJvbSBcIi4vMjRob3VyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcclxuaW1wb3J0IHZvaWNlTW9kZSBmcm9tIFwiLi92b2ljZU1vZGVcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9jbGFzc05vcm1hbGl6ZXJcIjtcclxuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcclxuXHJcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBDc3NFZGl0b3IgZnJvbSBcIi4uL3VpL2Nzc0VkaXRvclwiO1xyXG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xyXG5pbXBvcnQgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZnJvbSBcIi4uL3VpL3ByZXNlbmNlU2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi9DdXN0b21SaWNoUHJlc2VuY2VcIjtcclxuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IEFudGlBZERNIGZyb20gXCIuL0FudGlBZERNXCI7XHJcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xyXG5pbXBvcnQgZGlzYWJsZVR5cGluZyBmcm9tIFwiLi9kaXNhYmxlVHlwaW5nXCI7XHJcbmltcG9ydCBBcGlQcmV2aWV3IGZyb20gXCIuLi91aS9BcGlQcmV2aWV3XCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4uL3VpL3N3aXRjaFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuLi91aS9tYXJnaW50b3BcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IEhpc3RvcnkgZnJvbSBcIi4uL3VpL2ljb25zL2hpc3RvcnlcIjtcclxuXHJcbmNsYXNzIEJEU2lkZWJhckhlYWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNpZGViYXJDb21wb25lbnRzID0gd2VicGFja01vZHVsZXMuZmluZChlID0+IGUuU2VwYXJhdG9yICYmIGUuSGVhZGVyICYmIGUuSXRlbSlcclxuXHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gUmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQ2hhbmdlbG9nXCJ9LCBcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZmxvYXQ6IFwicmlnaHRcIiwgY3Vyc29yOiBcInBvaW50ZXJcIn0sIGNsYXNzTmFtZTogXCJiZC1jaGFuZ2Vsb2ctYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTt9fSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSGlzdG9yeSwge2NsYXNzTmFtZTogXCJiZC1pY29uXCIsIHNpemU6IFwiMTZweFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHJlbmRlcmVkID0gbmV3IHNpZGViYXJDb21wb25lbnRzLkhlYWRlcih7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBcIkJhbmRhZ2VkIEJEXCIsIGNoYW5nZWxvZ0J1dHRvbiksXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwiXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gcmVuZGVyZWRcclxuICAgIH1cclxufVxyXG5cclxubGV0IGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzID0gdGhpcy51cGRhdGVTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2lkZWJhciA9IG5ldyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckNvbXBvbmVudHMoKVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyQ29tcG9uZW50cygpe1xyXG4gICAgICAgIC8qKiBMaWdodGNvcmQgKi9cclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsaWdodGNvcmRcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmxpZ2h0Y29yZENvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJzdGF0dXNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLlByZXNlbmNlQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImFjY291bnRpbmZvXCIsIG1ha2VDb21wb25lbnQodGhpcy5BY2NvdW50SW5mb3NDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGNhcGlwcmV2aWV3XCIsIG1ha2VDb21wb25lbnQodGhpcy5BcGlQcmV2aWV3Q29tcG9uZW50LmJpbmQodGhpcykpKVxyXG5cclxuICAgICAgICAvKiBCYW5kYWdlZCBCRCAqL1xyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcIkJEQ2hhbmdlbG9nVGl0bGVcIiwgbWFrZUNvbXBvbmVudCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQkRTaWRlYmFySGVhZGVyKCkucmVuZGVyKClcclxuICAgICAgICB9KSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjb3JlXCIsIG1ha2VDb21wb25lbnQodGhpcy5jb3JlQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImN1c3RvbWNzc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuY3VzdG9tQ3NzQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInBsdWdpbnNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLnJlbmRlckFkZG9uUGFuZShcInBsdWdpbnNcIikpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInRoZW1lc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwidGhlbWVzXCIpKSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyLFxyXG4gICAgICAgICAgICBjbGFzc1NpZGViYXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIuc3BsaXQoXCIgXCIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgICAgIF1cclxuICAgICAgICBjb25zdCBzaWRlYmFyID0gRE9NLnF1ZXJ5KFwiLlwiK2NsYXNzTmFtZUxheWVyK1wiIC5cIitjbGFzc1NpZGViYXIuc3RhbmRhcmRTaWRlYmFyVmlldy5zcGxpdChcIiBcIilbMF0rXCIsIC5cIitjbGFzc05hbWVMYXllcitcIiAudWktc3RhbmRhcmQtc2lkZWJhci12aWV3XCIpO1xyXG4gICAgICAgIGlmICghc2lkZWJhcikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXNldHRpbmdzcGFuZS1jb250YWluZXJcIiBjbGFzcz1cIiR7Y2xhc3NTaWRlYmFyLmNvbnRlbnRSZWdpb259IGNvbnRlbnQtcmVnaW9uXCI+YCk7XHJcbiAgICAgICAgc2lkZWJhci5hcHBlbmQocm9vdCk7XHJcblxyXG4gICAgICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShyb290KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29yZVNldHRpbmdzKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaWdodGNvcmRTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwic3RhdHVzXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IE1zZ0xvZ1NldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwibXNnbG9nXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3MoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7fVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkLCBzaWRlYmFyKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCwgc2lkZWJhcik7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2V0dGluZ3MoaWQsIGVuYWJsZWQsIHNpZGViYXIpIHtcclxuICAgICAgICBpZighW1wibGlnaHRjb3JkLThcIiwgXCJub193aW5kb3dfYm91bmRcIiwgXCJlbmFibGVfZ2xhc3N0cm9uXCJdLmluY2x1ZGVzKGlkKSlzZXR0aW5nc0Nvb2tpZVtpZF0gPSBlbmFibGVkO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtM1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICAgICAgZWxzZSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLnJlbW92ZUJ1dHRvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2Ugdm9pY2VNb2RlLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy01XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZWQgJiYgaWQgPT0gXCJiZGEtZ3MtNlwiKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgY29sb3JlZFRleHQucmVtb3ZlQ29sb3JlZFRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSBDbGFzc05vcm1hbGl6ZXIuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy01XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIudW53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xyXG4gICAgICAgICAgICBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIG51bGwpO1xyXG4gICAgICAgICAgICBlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy04XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLWRtLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgZWxzZSBkTW9kZS5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmlmIChpZCA9PT0gXCJyZWFjdERldlRvb2xzXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHJlYWN0RGV2VG9vbHMuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSByZWFjdERldlRvb2xzLnN0b3AoKTtcclxuICAgICAgICB9Ki9cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgICAgICBlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIHNpZGViYXIuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTJcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlXHJcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5nc1N0b3JlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiB0eXBlb2YgZS5kZWZhdWx0ID09PSBcIm9iamVjdFwiICYmIFwic2hvd0N1cnJlbnRHYW1lXCIgaW4gZS5kZWZhdWx0KVswXVxyXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NTdG9yZSAmJiAhc2V0dGluZ3NTdG9yZS5kZWZhdWx0LnNob3dDdXJyZW50R2FtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQudXBkYXRlUmVtb3RlU2V0dGluZ3MpWzBdLmRlZmF1bHQudXBkYXRlUmVtb3RlU2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q3VycmVudEdhbWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgQ3VzdG9tUmljaFByZXNlbmNlLmRpc2FibGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcCh0cnVlKVxyXG4gICAgICAgICAgICBlbHNlIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AoZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTZcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgYmx1clByaXZhdGUuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC03XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHlwaW5nLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLThcIil7XHJcbiAgICAgICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHJlbW90ZS5nZXRHbG9iYWwoXCJhcHBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXQoXCJpc1RhYnNcIiwgZW5hYmxlZClcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLmV4aXQoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpe1xyXG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiTk9fV0lORE9XU19CT1VORFwiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIpe1xyXG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiR0xBU1NUUk9OXCIsIGVuYWJsZWQpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5leGl0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdGlhbGl6ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIC8vaWYgKHNldHRpbmdzQ29va2llLnJlYWN0RGV2VG9vbHMpIHJlYWN0RGV2VG9vbHMuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMlwiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtM1wiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy00XCJdKSB2b2ljZU1vZGUuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNVwiXSkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTRcIl0pIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTJcIl0pIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCJdKSBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtM1wiXSkgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcCh0cnVlKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC00XCJdKSBBbnRpQWRETS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC03XCJdKSBkaXNhYmxlVHlwaW5nLmVuYWJsZSgpXHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkge1xyXG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLThcIl0pIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIsIHNldHRpbmdzQ29va2llKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJTaWRlYmFyKHNpZGViYXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyLnJlbmRlcihzaWRlYmFyKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3JlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCwge2tleTogXCJjc3BhbmVsXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBzZWN0aW9uczogdGhpcy5jb3JlU2V0dGluZ3N9KVxyXG4gICAgfVxyXG5cclxuICAgIGxpZ2h0Y29yZENvbXBvbmVudChzaWRlYmFyLCBmb3JjZVVwZGF0ZSkge1xyXG4gICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHJlbW90ZS5nZXRHbG9iYWwoXCJhcHBTZXR0aW5nc1wiKVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRoaXMubGlnaHRjb3JkU2V0dGluZ3MubWFwKChzZWN0aW9uLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIChpID09PSAwID8gbnVsbCA6IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChNYXJnaW5Ub3ApKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHNlY3Rpb24udGl0bGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNDaGVja2VkID0gc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJsaWdodGNvcmQtOFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcImlzVGFic1wiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiTk9fV0lORE9XU19CT1VORFwiLCBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiR0xBU1NUUk9OXCIsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtpZDogc2V0dGluZy5pZCwga2V5OiBzZXR0aW5nLmlkLCBkYXRhOiBzZXR0aW5nLCBjaGVja2VkOiBpc0NoZWNrZWQsIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PSBcImxpZ2h0Y29yZC04XCIgJiYgaXNDaGVja2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rOiBcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJicmFuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmlwYy5zZW5kKFwiTkVXX1RBQlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJPcGVuIGEgbmV3IFRhYlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXHJcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxyXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlNob3VsZCByZWxhdW5jaFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiByZW1vdGUucHJvY2Vzcy5hcmd2LnNsaWNlKDEpLmNvbmNhdChbXCItLWRpc2FibGUtYmV0dGVyZGlzY29yZFwiXSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5hcHAucXVpdCgpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZVxyXG4gICAgICAgICAgICB9LCBcIlJlbGF1bmNoIHdpdGhvdXQgQmV0dGVyRGlzY29yZFwiKSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXHJcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxyXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihpc0NsZWFyaW5nQ2FjaGUpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNsZWFyaW5nIGNhY2hlLi4uXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmZvXCJcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkuc2Vzc2lvbi5jbGVhckNhY2hlKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNhY2hlIGlzIGNsZWFyZWQgIVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQuIENoZWNrIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0NsZWFyaW5nQ2FjaGVcclxuICAgICAgICAgICAgfSwgXCJDbGVhciBjYWNoZVwiKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBQcmVzZW5jZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XHJcbiAgICAgICAgICAgIGtleTogXCJscHBhbm5lbFwiLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiB0aGlzLlByZXNlbmNlU2V0dGluZ3NcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIEFjY291bnRJbmZvc0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19BY2NvdW50SW5mb3MsIHtcclxuICAgICAgICAgICAga2V5OiBcImxhcGFubmVsXCJcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIEFwaVByZXZpZXdDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBcGlQcmV2aWV3LCB7XHJcbiAgICAgICAgICAgIGtleTogXCJsYXBpcGFubmVsXCJcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGN1c3RvbUNzc0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge2tleTogXCJjc3NlZGl0b3JcIn0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcclxuICAgICAgICAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXHJcbiAgICAgICAgLy8gUmVhY3QgcmVmdXNlcyB0byBjaGFuZ2UgdGhlIGJ1dHRvbiB3aGVuIGdvaW5nXHJcbiAgICAgICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcclxuICAgICAgICAvLyB0byBkZWJ1ZyBsYXRlci5cclxuICAgICAgICBjbGFzcyBDb250ZW50TGlzdCBleHRlbmRzIEJEVjIucmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZml4ID0gdGhpcy5wcm9wcy50eXBlLnJlcGxhY2UoXCJzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlcigpIHtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ29udGVudExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGVudExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgICAgICAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudExpc3QsIHt0eXBlfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7dHlwZX0pKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsIG9uIHdpbmRvd1xyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIG1ha2VDb21wb25lbnQoY2hpbGRyZW4pe1xyXG4gICAgY2xhc3MgU2V0dGluZ0NvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihzaWRlYmFyLCAoKSA9PiB0aGlzLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNpZGViYXJcclxuICAgIHJldHVybiAocykgPT4ge1xyXG4gICAgICAgIHNpZGViYXIgPSBzXHJcbiAgICAgICAgcmV0dXJuIFNldHRpbmdDb21wb25lbnRcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMgPSB7fVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKHBhbmVsLCBjb21wb25lbnQpe1xyXG4gICAgICAgIHRoaXMucGFuZWxzW3BhbmVsXSA9IGNvbXBvbmVudFxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbXBvbmVudChwYW5lbCwgc2lkZWJhcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZWxzW3BhbmVsXShzaWRlYmFyKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gW3tcclxuICAgICAgICAgICAgdGV4dDogXCJCZXR0ZXJEaXNjb3JkIFNldHRpbmdzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjb3JlXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiUGx1Z2luc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwicGx1Z2luc1wiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlRoZW1lc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwidGhlbWVzXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiQ3VzdG9tIENTU1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwiY3VzdG9tY3NzXCJcclxuICAgICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTENpdGVtcygpe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJMaWdodGNvcmQgU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImxpZ2h0Y29yZFwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiUmljaFByZXNlbmNlXCIsIFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwic3RhdHVzXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJBY2NvdW50IEluZm9cIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImFjY291bnRpbmZvXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgICByZXR1cm4gaXRlbXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTENEZXZJdGVtcygpe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdXHJcbiAgICAgICAgaWYoIXdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSlyZXR1cm4gaXRlbXNcclxuICAgICAgICBpdGVtcy5wdXNoKC4uLltcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxpZ2h0Y29yZCBBcGlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkNvbXBvbmVudHMgUHJldmlld1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwibGNhcGlwcmV2aWV3XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKHNpZGViYXIpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTGlnaHRjb3JkXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4udGhpcy5MQ2l0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAuLi50aGlzLkxDRGV2SXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoZS5zZWN0aW9uKXJldHVybiBlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KFwiQkRDaGFuZ2Vsb2dUaXRsZVwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi50aGlzLml0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbFNpZGViYXIgb24gd2luZG93XHJcbiAqLyIsImltcG9ydCB7YmR0aGVtZUVycm9ycywgdGhlbWVDb29raWUsIHNldHRpbmdzQ29va2llLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNsYXNzIFRoZW1lTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlRoZW1lTW9kdWxlID0gdGhpc1xyXG4gICAgfVxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyO31cclxufVxyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxvYWRUaGVtZURhdGEoKTtcclxuICAgIGJkdGhlbWVFcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkVGhlbWVzKCkpKTtcclxuICAgIGNvbnN0IHRoZW1lcyA9IE9iamVjdC5rZXlzKGJkdGhlbWVzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbdGhlbWVzW2ldXTtcclxuICAgICAgICBpZiAoIXRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSB0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG5cclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHRoZW1lIGluIHRoZW1lQ29va2llKSB7XHJcbiAgICAgICAgaWYgKCFiZHRoZW1lc1t0aGVtZV0pIGRlbGV0ZSB0aGVtZUNvb2tpZVt0aGVtZV07XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBhcHBsaWVkLmApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gZGlzYWJsZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlVGhlbWUgPSBmdW5jdGlvbih0aGVtZSkge1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUpO1xyXG4gICAgZWxzZSB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC4gSXQgbWF5IG5vdCBoYXZlIGJlZW4gbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZSk7XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtbG9hZGVkXCIsIHRoZW1lLm5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnVubG9hZFRoZW1lID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWUubmFtZTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBkZWxldGUgYmR0aGVtZXNbdGhlbWVdO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXVubG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcclxuICAgIHRoaXMudW5sb2FkVGhlbWUoYmR0aGVtZS5maWxlbmFtZSk7XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCBiZHRoZW1lLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuIHRoaXMubG9hZFRoZW1lKGZpbGVuYW1lT3JOYW1lKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKSwgdGhpcy5lbmFibGVUaGVtZSh0aGVtZSwgdHJ1ZSk7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gdiR7YmR0aGVtZXNbdGhlbWVdLnZlcnNpb259IHdhcyByZWxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1yZWxvYWRlZFwiLCB0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVsb2FkVGhlbWUobmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudXBkYXRlVGhlbWVMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gQ29udGVudE1hbmFnZXIubG9hZE5ld0NvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVEYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIik7XHJcbiAgICBpZiAoc2F2ZWQpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoZW1lQ29va2llLCBzYXZlZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuc2F2ZVRoZW1lRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIiwgdGhlbWVDb29raWUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFRoZW1lTW9kdWxlKCk7IiwiaW1wb3J0IHtiYmRWZXJzaW9uLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzIHtcbiAgICAvKiogRG9jdW1lbnQvd2luZG93IHdpZHRoICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5XaWR0aCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7IH1cbiAgICAvKiogRG9jdW1lbnQvd2luZG93IGhlaWdodCAqL1xuICAgIHN0YXRpYyBnZXQgc2NyZWVuSGVpZ2h0KCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApOyB9XG5cbiAgICBzdGF0aWMgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChrZXkgPT09IFwiZnJhbWVcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3RyaXBCT00oY29udGVudCkge1xuICAgICAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUZXh0QXJlYSgpIHtcbiAgICAgICAgcmV0dXJuIERPTS5xdWVyeShcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGFubmVsVGV4dEFyZWEgJiYgZS50aXRsZVdyYXBwZXIpWzBdLmNoYW5uZWxUZXh0QXJlYS5zcGxpdChcIiBcIilbMF0rXCIgdGV4dGFyZWFcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGluc2VydFRleHQodGV4dGFyZWEsIHRleHQpIHtcbiAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTtcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgPSAwO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25FbmQgPSB0ZXh0YXJlYS52YWx1ZS5sZW5ndGg7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLCBmYWxzZSwgdGV4dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBsb2cobW9kdWxlTmFtZSwgbWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogIzNhNzFjMTsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogIzNhNzFjMTtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHdhcm4obW9kdWxlTmFtZSwgbWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6ICNFOEE0MDA7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6ICNFOEE0MDA7XCIsIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBlcnIobW9kdWxlTmFtZSwgbWVzc2FnZSwgZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogcmVkO1wiLCBcIlwiKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiJWNFcnJvcjogXCIgKyBlcnJvci5tZXNzYWdlLCBcImNvbG9yOiByZWQ7XCIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5zdGFjayk7XG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHRlc3RKU09OKGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBpc0VtcHR5KG9iaikge1xuICAgICAgICBpZiAob2JqID09IG51bGwgfHwgb2JqID09IHVuZGVmaW5lZCB8fCBvYmogPT0gXCJcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuICguLi5wYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiBtZXRob2QoLi4ucGFyYW1zKTtcdH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7IHRoaXMuZXJyKFwiU3VwcHJlc3NlZEVycm9yXCIsIFwiRXJyb3Igb2NjdXJyZWQgaW4gXCIgKyBtZXNzYWdlLCBlKTsgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBtb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHtiZWZvcmUsIGFmdGVyLCBpbnN0ZWFkLCBvbmNlID0gZmFsc2UsIHNpbGVudCA9IGZhbHNlLCBmb3JjZSA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gb3B0aW9ucy5kaXNwbGF5TmFtZSB8fCB3aGF0LmRpc3BsYXlOYW1lIHx8IHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJwYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXSkge1xuICAgICAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IobWV0aG9kTmFtZSwgXCJkb2VzIG5vdCBleGlzdCBmb3JcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcbiAgICAgICAgbGV0IGNhbmNlbGVkID0gZmFsc2VcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwidW5wYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAvL3doYXRbbWV0aG9kTmFtZV0gPSBvcmlnTWV0aG9kO1xuICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlIC8vIHRoaXMgYWxsb3cgdG8gbW9ua2V5cGF0Y2ggbW9yZSB0aGFuIG9uZSB0aW1lLlxuICAgICAgICB9O1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZihjYW5jZWxlZCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdNZXRob2QuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIHRoaXNPYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgbWV0aG9kQXJndW1lbnRzOiBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgY2FuY2VsUGF0Y2g6IGNhbmNlbCxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZDogb3JpZ01ldGhvZCxcbiAgICAgICAgICAgICAgICBjYWxsT3JpZ2luYWxNZXRob2Q6ICgpID0+IGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLm9yaWdpbmFsTWV0aG9kLmFwcGx5KGRhdGEudGhpc09iamVjdCwgZGF0YS5tZXRob2RBcmd1bWVudHMpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGluc3RlYWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wUmV0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoaW5zdGVhZCwgXCJgaW5zdGVhZGAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAodGVtcFJldCAhPT0gdW5kZWZpbmVkKSBkYXRhLnJldHVyblZhbHVlID0gdGVtcFJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRhdGEuY2FsbE9yaWdpbmFsTWV0aG9kKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyKSBVdGlscy5zdXBwcmVzc0Vycm9ycyhhZnRlciwgXCJgYWZ0ZXJgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25jZSkgY2FuY2VsKCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih3aGF0W21ldGhvZE5hbWVdLCBvcmlnTWV0aG9kKTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX21vbmtleVBhdGNoZWQgPSB0cnVlO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge3JldHVybiBvcmlnTWV0aG9kLnRvU3RyaW5nKCk7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsO1xuICAgIH1cblxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11dGF0aW9ucy5sZW5ndGg7IG0rKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW21dO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE5lc3RlZFByb3Aob2JqLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KC9cXHM/XFwuXFxzPy8pLnJlZHVjZShmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqW3Byb3BdO1xuICAgICAgICB9LCBvYmopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2hvd3MgYSB0b2FzdCBzaW1pbGFyIHRvIGFuZHJvaWQgdG93YXJkcyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvYXN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0LiBPcHRpb25hbCBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmljb24gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBpY29uIHNob3VsZCBzaG93IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUuIEEgdG9hc3Qgd2l0aG91dCB0eXBlIHdpbGwgYWx3YXlzIGhhdmUgbm8gaWNvbi4gRGVmYXVsdDogdHJ1ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnRpbWVvdXQgQWRqdXN0cyB0aGUgdGltZSAoaW4gbXMpIHRoZSB0b2FzdCBzaG91bGQgYmUgc2hvd24gZm9yIGJlZm9yZSBkaXNhcHBlYXJpbmcgYXV0b21hdGljYWxseS4gRGVmYXVsdDogMzAwMFxuICAgICAqL1xuICAgIHN0YXRpYyBzaG93VG9hc3QoY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhciAmJiBlLmhhc05vdGljZSlbMF0uc2lkZWJhci5zcGxpdChcIiBcIilbOV0rXCIgKyBkaXZcIikgfHwgbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlcmxpc3QgPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZW1iZXJzV3JhcClbMF0ubWVtYmVyc1dyYXApIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImZvcm1cIikgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMzEwO1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBtZW1iZXJsaXN0ID8gbWVtYmVybGlzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgPyByaWdodCAtIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogVXRpbHMuc2NyZWVuV2lkdGggLSBsZWZ0IC0gMjQwO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gZm9ybSA/IGZvcm0ub2Zmc2V0SGVpZ2h0IDogODA7XG4gICAgICAgICAgICBjb25zdCB0b2FzdFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdHNcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIGxlZnQgKyBcInB4XCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwid2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwiYm90dG9tXCIsIGJvdHRvbSArIFwicHhcIik7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmRDaGlsZCh0b2FzdFdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt0eXBlID0gXCJcIiwgaWNvbiA9IHRydWUsIHRpbWVvdXQgPSAzMDAwfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHRvYXN0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RcIik7XG4gICAgICAgIGlmICh0eXBlKSB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcInRvYXN0LVwiICsgdHlwZSk7XG4gICAgICAgIGlmICh0eXBlICYmIGljb24pIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiaWNvblwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLmFwcGVuZENoaWxkKHRvYXN0RWxlbSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9hc3RFbGVtLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5iZC10b2FzdHMgLmJkLXRvYXN0XCIpLmxlbmd0aCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYWxlcnQodGl0bGUsIGNvbnRlbnQpIHtcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHt0aXRsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIj5Pa2F5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xuICAgICAgICBjb25zdCBjbG9zaW5nTGlzdGVuZXJzID0gW11cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DbG9zZTogKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMgPSBbXSwgdGhlbWVzOiB0aGVtZUVycm9ycyA9IFtdfSkge1xuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycyB8fCAhdGhlbWVFcnJvcnMpIHJldHVybjtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMubGVuZ3RoICYmICF0aGVtZUVycm9ycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsIGJkLWNvbnRlbnQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+PGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGVudCBFcnJvcnM8L2Rpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyIFRPUFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+UGx1Z2luczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+VGhlbWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+TmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj5NZXNzYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj5FcnJvcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICBcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVUYWIoZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yc1wiPmApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+JHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtlcnIubWVzc2FnZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+PGEgY2xhc3M9XCJlcnJvci1saW5rXCIgaHJlZj1cIlwiPiR7ZXJyLmVycm9yID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBcIlwifTwvYT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYEVycm9yIGRldGFpbHMgZm9yICR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfS5gLCBlcnIuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XG4gICAgXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWJhci1pdGVtLnNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSBET00ucmVtb3ZlQ2xhc3Moc2VsZWN0ZWQsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MoZS50YXJnZXQsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuc2Nyb2xsZXJcIik7XG4gICAgICAgICAgICBzY3JvbGxlci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKHRhYnNbRE9NLmluZGV4KGUudGFyZ2V0KV0pO1xuICAgICAgICB9KSk7XG4gICAgXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgaWYgKHBsdWdpbkVycm9ycy5sZW5ndGgpIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWJhci1pdGVtXCIpLmNsaWNrKCk7XG4gICAgICAgIGVsc2UgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIilbMV0uY2xpY2soKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZml4ZWRcIiwgXCJpbXByb3ZlZFwiKTtcbiAgICAgICAgY29uc3QgVGV4dEVsZW1lbnQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRleHRcIik7XG4gICAgICAgIGNvbnN0IEZsZXhDaGlsZCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiQ2hpbGRcIik7XG4gICAgICAgIGNvbnN0IFRpdGxlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiVGFnc1wiLCBcImRlZmF1bHRcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5zZWxlY3RhYmxlID09IGZhbHNlKTtcbiAgICAgICAgY29uc3QgTWFya2Rvd25QYXJzZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImRlZmF1bHRSdWxlc1wiLCBcInBhcnNlXCIpO1xuICAgICAgICBpZiAoIUNoYW5nZWxvZyB8fCAhTW9kYWxTdGFjayB8fCAhQ2hhbmdlbG9nQ2xhc3NlcyB8fCAhVGV4dEVsZW1lbnQgfHwgIUZsZXhDaGlsZCB8fCAhVGl0bGVzIHx8ICFNYXJrZG93blBhcnNlcikgcmV0dXJuO1xuICAgIFxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpbWFnZSA9IFwiaHR0cHM6Ly9yZXBvc2l0b3J5LWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTA1NDczNTM3Lzk1N2I1NDgwLTdjMjYtMTFlOS04NDAxLTUwZmE4MjBjYmFlNVwiLCBcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIiwgXG4gICAgICAgICAgICBjaGFuZ2VzID0gW10sIFxuICAgICAgICAgICAgdGl0bGUgPSBcIkJhbmRhZ2VkQkRcIiwgXG4gICAgICAgICAgICBzdWJ0aXRsZSA9IGB2JHtiYmRWZXJzaW9ufWAsIFxuICAgICAgICAgICAgZm9vdGVyXG4gICAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBjZSA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nSXRlbXMgPSBbY2UoXCJpbWdcIiwge3NyYzogaW1hZ2V9KV07XG4gICAgICAgIGlmIChkZXNjcmlwdGlvbikgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcInBcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoZGVzY3JpcHRpb24pKSk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbmdlcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gPyBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdIDogQ2hhbmdlbG9nQ2xhc3Nlcy5hZGRlZDtcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IGMgPT0gMCA/IENoYW5nZWxvZ0NsYXNzZXMubWFyZ2luVG9wIDogXCJcIjtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7Y2xhc3NOYW1lOiBgJHt0eXBlfSAke21hcmdpbn1gLH0sIGVudHJ5LnRpdGxlKSk7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gY2UoXCJ1bFwiLCBudWxsLCBlbnRyeS5pdGVtcy5tYXAoaSA9PiBjZShcImxpXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGkpKSkpO1xuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChsaXN0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJIZWFkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LFxuICAgICAgICAgICAgICAgIGNlKFRpdGxlcy5kZWZhdWx0LCB7dGFnOiBUaXRsZXMuVGFncy5INH0sIHRpdGxlKSxcbiAgICAgICAgICAgICAgICBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkQsIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5kYXRlfSwgc3VidGl0bGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIFxuICAgICAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IEFuY2hvckNsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIikgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07XG4gICAgICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xuICAgICAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY2xpY2suc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBCRFYyLmpvaW5CRDIoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IEFuY2hvciA/IGNlKEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBjZShcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Rm9vdGVyID0gY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSwgZm9vdGVyID8gZm9vdGVyIDogZGVmYXVsdEZvb3Rlcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIGNlKENoYW5nZWxvZywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9uU2Nyb2xsOiBfID0+IF8sXG4gICAgICAgICAgICAgICAgb25DbG9zZTogXyA9PiBfLFxuICAgICAgICAgICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckZvb3RlcjogcmVuZGVyRm9vdGVyLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGFuZ2Vsb2dJdGVtc1xuICAgICAgICAgICAgfSwgcHJvcHMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeSBzdHJpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxuICAgICAqL1xuICAgIHN0YXRpYyBzaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBNb2RhbEFjdGlvbnMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIm9wZW5Nb2RhbFwiLCBcInVwZGF0ZU1vZGFsXCIpO1xuICAgICAgICBjb25zdCBNYXJrZG93biA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWFya2Rvd25cIik7XG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJDb25maXJtTW9kYWxcIik7XG4gICAgICAgIGlmICghTW9kYWxBY3Rpb25zIHx8ICFDb25maXJtYXRpb25Nb2RhbCB8fCAhTWFya2Rvd24pIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XG5cbiAgICAgICAgY29uc3QgZW1wdHlGdW5jdGlvbiA9ICgpID0+IHt9O1xuICAgICAgICBjb25zdCB7b25Db25maXJtID0gZW1wdHlGdW5jdGlvbiwgb25DYW5jZWwgPSBlbXB0eUZ1bmN0aW9uLCBjb25maXJtVGV4dCA9IFwiT2theVwiLCBjYW5jZWxUZXh0ID0gXCJDYW5jZWxcIiwgZGFuZ2VyID0gZmFsc2UsIGtleSA9IHVuZGVmaW5lZH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgY29udGVudCA9IFtjb250ZW50XTtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQubWFwKGMgPT4gdHlwZW9mKGMpID09PSBcInN0cmluZ1wiID8gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KE1hcmtkb3duLCBudWxsLCBjKSA6IGMpO1xuICAgICAgICByZXR1cm4gTW9kYWxBY3Rpb25zLm9wZW5Nb2RhbChwcm9wcyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KENvbmZpcm1hdGlvbk1vZGFsLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHRpdGxlLFxuICAgICAgICAgICAgICAgIHJlZDogZGFuZ2VyLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0LFxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtLFxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbFxuICAgICAgICAgICAgfSwgcHJvcHMpLCBjb250ZW50KTtcbiAgICAgICAgfSwge21vZGFsS2V5OiBrZXl9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtb3ZlRGEoY2xhc3NOYW1lKXtcbiAgICAgICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXG4gICAgICAgIHJldHVybiBjbGFzc05hbWUuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICFlLnN0YXJ0c1dpdGgoXCJkYS1cIikpLmpvaW4oXCIgXCIpXG4gICAgfVxufVxuXG5VdGlscy5zaG93VG9hc3QgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhVdGlscy5zaG93VG9hc3QsIFwiQ291bGQgbm90IHNob3cgdG9hc3QuXCIpO1xuXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVXRpbHMgPSBVdGlscyIsImltcG9ydCB7c2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuV2VicGFja01vZHVsZXMgPSAoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG4gICAgICAgICAgICBkZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xyXG4gICAgICAgICAgICBkZWxldGUgcmVxLmMuX19leHRyYV9pZF9fO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUHJvdGVjdCA9IHRoZU1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLnJlbW92ZSAmJiB0aGVNb2R1bGUuc2V0ICYmIHRoZU1vZHVsZS5jbGVhciAmJiB0aGVNb2R1bGUuZ2V0ICYmICF0aGVNb2R1bGUuc29ydCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLmdldFRva2VuIHx8IHRoZU1vZHVsZS5nZXRFbWFpbCB8fCB0aGVNb2R1bGUuc2hvd1Rva2VuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHByb3RlY3QgPSAodGhlTW9kdWxlLCBpc0RlZmF1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBtb2QgPSAhaXNEZWZhdWx0ID8gdGhlTW9kdWxlLmRlZmF1bHQgOiB0aGVNb2R1bGVcclxuICAgICAgICAgICAgICAgIGlmKCFtb2QpcmV0dXJuIHRoZU1vZHVsZVxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZC5yZW1vdmUgJiYgbW9kLnNldCAmJiBtb2QuY2xlYXIgJiYgbW9kLmdldCAmJiAhbW9kLnNvcnQpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtb2QuZ2V0VG9rZW4gJiYgIW1vZC5nZXRFbWFpbCAmJiAhbW9kLnNob3dUb2tlbilyZXR1cm4gdGhlTW9kdWxlXHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkobW9kLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiZ2V0VG9rZW5cIiB8fCBwcm9wID09PSBcImdldEVtYWlsXCIgfHwgcHJvcCA9PT0gXCJzaG93VG9rZW5cIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBmdW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0VG9rZW5cIiAmJiBvYmouZ2V0VG9rZW4pIHJldHVybiAoKSA9PiBcIm1mYS5YQ25iS3pvMENMSXFkSnpCbkwwRDhQZkRydXFrSk5IandIWHRyMzlVVTNGOGhIeDQzam9qSVN5aTVqZGpPNTJlOV9lOU1qbWFmWkZGcGMtc2VPTWFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRFbWFpbFwiICYmIG9iai5nZXRFbWFpbCkgcmV0dXJuICgpID0+IFwicHVwcGV0MTExMTJAZ21haWwuY29tXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIgJiYgb2JqLnNob3dUb2tlbikgcmV0dXJuICgpID0+IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiX19wcm90b19fXCIgJiYgb2JqLl9fcHJvdG9fXykgcmV0dXJuIHByb3h5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtmdW5jXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZighaXNEZWZhdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhlTW9kdWxlLCB7ZGVmYXVsdDogcHJveHl9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBwcm90ZWN0KG0uZGVmYXVsdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBwcm90ZWN0KG0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLmRlZmF1bHQsIHRydWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChwcm90ZWN0KG0sIGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZXM7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzID0gKHByb3BOYW1lcykgPT4gZmluZChtb2R1bGUgPT4gcHJvcE5hbWVzLmV2ZXJ5KHByb3AgPT4gbW9kdWxlW3Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9IChwcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeURpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IGRpc3BsYXlOYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7ZmluZCwgZmluZEFsbCwgZmluZEJ5VW5pcXVlUHJvcGVydGllcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSB7XHJcbiAgICAgICAgICAgIHJlYWN0OiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiQ29tcG9uZW50XCIsIFwiUHVyZUNvbXBvbmVudFwiLCBcIkNoaWxkcmVuXCIsIFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiXSksXHJcbiAgICAgICAgICAgIHJlYWN0RG9tOiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZmluZERPTU5vZGVcIl0pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmdldEludGVybmFsSW5zdGFuY2UgPSBlID0+IGVbT2JqZWN0LmtleXMoZSkuZmluZChrID0+IGsuc3RhcnRzV2l0aChcIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlXCIpKV07XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlYyID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGpvaW5CRDEoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIwVG1mbzVaYk9SQ1JxYkFkXCIpO31cclxuICAgIGxlYXZlQkQxKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI4NjAwNDc0NDk2NjkxNDA0OFwiKTt9XHJcblxyXG4gICAgam9pbkJEMigpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7fVxyXG4gICAgbGVhdmVCRDIoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjI4MDgwNjQ3MjkyODE5ODY1NlwiKTt9XHJcblxyXG4gICAgam9pbkxDKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiN2VGZmYyQVwiKTt9XHJcbiAgICBsZWF2ZUxDKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI3MDU5MDgzNTAyMTg2NjYxMTdcIik7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdERvbSgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdERvbTt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0LkNvbXBvbmVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3QuQ29tcG9uZW50O31cclxuXHJcbiAgICBnZXQgYW5jaG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIl0pIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O31cclxuICAgIGdldCBzbGF0ZUVkaXRvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzbGF0ZVRleHRBcmVhXCJdKTt9XHJcbiAgICBnZXQgbWVzc2FnZUNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJtZXNzYWdlXCIsIFwiY29udGFpbmVyQ296eVwiXSk7fVxyXG4gICAgZ2V0IGd1aWxkQ2xhc3NlcygpIHtcclxuXHRcdGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS53cmFwcGVyICYmIGUudW5yZWFkTWVudGlvbnNCYXIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmd1aWxkc0Vycm9yICYmIGUuc2VsZWN0ZWQpWzBdXHJcbiAgICAgICAgY29uc3QgcGlsbCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmJsb2JDb250YWluZXIpWzBdXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcblx0fVxyXG5cclxuICAgIGdldCBNZXNzYWdlQ29udGVudENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlQnV0dG9uc1wiKSk7fVxyXG4gICAgZ2V0IE1lc3NhZ2VDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTWVzc2FnZVwiKTt9XHJcbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImRhdGVGb3JtYXRcIl0pO31cclxuICAgIGdldCBUb29sdGlwV3JhcHBlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7fVxyXG4gICAgZ2V0IE5hdGl2ZU1vZHVsZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNldEJhZGdlXCJdKTt9XHJcbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7fVxyXG4gICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImxlYXZlR3VpbGRcIl0pO31cclxuICAgIGdldCBUb29sdGlwcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5oaWRlICYmIG0uc2hvdyAmJiAhbS5zZWFyY2ggJiYgIW0uc3VibWl0ICYmICFtLnNlYXJjaCAmJiAhbS5hY3RpdmF0ZVJhZ2luZ0RlbW9uICYmICFtLmRpc21pc3MpO31cclxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0udG9TdHJpbmcgJiYgL1wiYmluYXJ5XCIvLnRlc3QobS50b1N0cmluZygpKSk7fVxyXG4gICAgZ2V0IExheWVyU3RhY2soKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJwb3BMYXllclwiXSk7fVxyXG4gICAgZ2V0IFVzZXJTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEN1cnJlbnRVc2VyXCJdKTt9XHJcbiAgICBnZXQgQ2hhbm5lbFN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q2hhbm5lbFwiXSk7fVxyXG4gICAgZ2V0IENoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wib3BlblByaXZhdGVDaGFubmVsXCJdKTt9XHJcbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2VsZWN0UHJpdmF0ZUNoYW5uZWxcIl0pO31cclxuXHJcbiAgICBvcGVuRE0odXNlcklkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZklkID0gdGhpcy5Vc2VyU3RvcmUuZ2V0Q3VycmVudFVzZXIoKS5pZDtcclxuICAgICAgICBpZiAoc2VsZklkID09IHVzZXJJZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHByaXZhdGVDaGFubmVsSWQgPSB0aGlzLkNoYW5uZWxTdG9yZS5nZXRETUZyb21Vc2VySWQodXNlcklkKTtcclxuICAgICAgICBpZiAocHJpdmF0ZUNoYW5uZWxJZCkgcmV0dXJuIHRoaXMuUHJpdmF0ZUNoYW5uZWxBY3Rpb25zLnNlbGVjdFByaXZhdGVDaGFubmVsKHByaXZhdGVDaGFubmVsSWQpO1xyXG4gICAgICAgIHRoaXMuQ2hhbm5lbEFjdGlvbnMub3BlblByaXZhdGVDaGFubmVsKHNlbGZJZCwgdXNlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZVNldHRpbmdzKGNhdCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmcuY2F0ID09PSBjYXQgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9IHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jb25zdCBzdHlsZSA9IGBcclxuICAgIC5jb250YWluZXItMlJsMDF1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuY2hhdC0zYlJ4eHUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5zaWRlYmFyLTJLOHBGaCB7XHJcbiAgICAgICAgZmxleC1ncm93OiAxIWltcG9ydGFudDtcclxuICAgIH1cclxuYDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWb2ljZU1vZGUge1xyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiVm9pY2VNb2RlXCIsIHN0eWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcIlZvaWNlTW9kZVwiKTtcclxuICAgIH1cclxufTsiLCJjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG5kZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xyXG5kZWxldGUgcmVxLmMuX19leHRyYV9pZF9fO1xyXG5jb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gbS5kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gobS5kZWZhdWx0KTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kdWxlcztcclxufTtcclxuXHJcbmNvbnN0IGZpbmRCeVByb3BzID0gKC4uLnByb3BOYW1lcykgPT4gZmluZChtb2R1bGUgPT4gcHJvcE5hbWVzLmV2ZXJ5KHByb3AgPT4gbW9kdWxlW3Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9ICguLi5wcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeURpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IGRpc3BsYXlOYW1lKTtcclxuXHJcbmxldCBtb2QgPSAge2ZpbmQsIGZpbmRBbGwsIGZpbmRCeVByb3BzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XHJcbmV4cG9ydCBkZWZhdWx0IG1vZFxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLldlYnBhY2tNb2R1bGVzID0gbW9kIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5cclxubGV0IHByb2ZpbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lm9wZW4gJiYgZS5kZWZhdWx0LmZldGNoTXV0dWFsRnJpZW5kcylbMF1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0Y29yZFVzZXJCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuXHJcbiAgICAgICAgZGVsZXRlIHByb3BzLmhyZWYudGFyZ2V0XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKHByb3BzKVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8cHJvcHMuQW5jaG9yIGhyZWY9e1wiL3VzZXJzL1wiK3Byb3BzLnVzZXIuaWR9IHsuLi5wcm9wcy5ocmVmfSBvbkNsaWNrPXsoZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgICAgIGlmKCFwcm9maWxNb2R1bGUpcHJvZmlsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQub3BlbiAmJiBlLmRlZmF1bHQuZmV0Y2hNdXR1YWxGcmllbmRzKVswXVxyXG4gICAgICAgICAgICAgICAgcHJvZmlsTW9kdWxlLmRlZmF1bHQub3Blbihwcm9wcy51c2VyLmlkKVxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzMS4zIDI5LjVcIiB7Li4ucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi44IDFzMTIgOC4yIDcuNCAxOS43UzE2LjYgMjkgMjAgMjUuNnMtNC01LjYtOC43LTEwTDIyLjggMVwiIGZpbGw9XCJyZ2JhKDIyNyw2LDE5LC42KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi4xIDEyLjNjLTIuNSAzLjItNi4xIDQuOC04LjkgNC4zTDMuNiAyOC44Yy0uNy45LTEuOSAxLTIuOC4zLS45LS43LTEtMS45LS40LTIuOEwxMCAxNC4xYy0xLjMtMi41LS42LTYuNCAyLTkuNyAzLjItNCA4LTUuNSAxMC44LTMuNHMyLjQgNy4yLS43IDExLjN6XCIgZmlsbD1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvcHJvcHMuQW5jaG9yPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWdIdW50ZXJCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuOCAxczEyIDguMiA3LjQgMTkuN1MxNi42IDI5IDIwIDI1LjZzLTQtNS42LTguNy0xMEwyMi44IDFcIiBmaWxsPVwicmdiYSgyMjcsNiwxOSwuNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi4xIDEyLjNjLTIuNSAzLjItNi4xIDQuOC04LjkgNC4zTDMuNiAyOC44Yy0uNy45LTEuOSAxLTIuOC4zLS45LS43LTEtMS45LS40LTIuOEwxMCAxNC4xYy0xLjMtMi41LS42LTYuNCAyLTkuNyAzLjItNCA4LTUuNSAxMC44LTMuNHMyLjQgNy4yLS43IDExLjN6XCIgZmlsbD1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2lyY3VzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIHJldHVybiAoPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiICB7Li4udGhpcy5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNERDJFNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMzMgMzNhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0ybDEtMTJoMjhsMSAxMnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNFQTU5NkVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgMzVjLS43OTItMS44NzUtMS43NS0zLjI5MS0zLjQxNy00LjY2NiAxLjc1LTEuNDU5IDQuNTQyLTUuNSA1LjI1LTguMjkyczIuNzUgOC4xMjUgMi4wNDIgMTAuNjI1UzEzIDM1IDEzIDM1em0xMC4zMDMgMGMuNzkxLTEuODc1IDEuNzUtMy4yOTEgMy40MTYtNC42NjYtMS43NS0xLjQ1OS00LjU0MS01LjUtNS4yNS04LjI5Mi0uNzA3LTIuNzkyLTIuNzUgOC4xMjUtMi4wNCAxMC42MjUuNzA4IDIuNSAzLjg3NCAyLjMzMyAzLjg3NCAyLjMzM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNCRTE5MzFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43MjggMjQuMjYzQTIuNSAyLjUgMCAwMDggMjIuNWMwLS41NjUtLjE5NS0xLjA4MS0uNTExLTEuNUg0bC0uMjcyIDMuMjYzem0yOC41NDQgMEwzMiAyMWgtMy40ODlBMi40ODIgMi40ODIgMCAwMDI4IDIyLjVhMi41IDIuNSAwIDAwNC4yNzIgMS43NjN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTRcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjIyXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjZcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMyAzNUgxM3MyLTYgMi0xM2g2YzAgNyAyIDEzIDIgMTN6TTE3IDJoMnY3aC0yelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM1NUFDRUVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTguODM4LjIwNkMxNy42NjcuMDQyIDE3IC4zMTggMTcgMS40MTh2MWMwIDEuMS44NjUgMS43NTMgMS45MjMgMS40NTFsNS4xNTQtLjkwMWMxLjcxNS0uMzQzIDEuNTQ4LTEuNTkzLjA4NS0xLjg4NEwxOC44MzguMjA2elwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0NDRDZERFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOCA2bC0uMDgxLjEyM0MxMC45MzggMTYuOTgxIDMgMTUuMDE1IDMgMTl2Mi41YTIuNSAyLjUgMCAwMDQuOTUuNUgxMmEyIDIgMCAwMDQgMGg0YTIgMiAwIDAwNCAwaDQuMDVhMi41IDIuNSAwIDAwNC45NS0uNVYxOWMwLTQtOC0yLTE1LTEzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGcgZmlsbD1cIiNGNUY4RkFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk0OCA2LjA3OGwtLjAzLjA0NUMxNy4xMzIgMTEuNjE5IDEwLjgxMSAxNi4xMjYgOCAxOHY0YTIgMiAwIDAwNCAwdi00Yy45ODItLjk4MiA1LjgxMy02Ljc4NyA1Ljk4NC0xMS43MzItLjAxLS4wNjQtLjAyNy0uMTI2LS4wMzYtLjE5em0uMDguMzk4QzE4LjMyNCAxMS4zNzQgMjMuMDMxIDE3LjAzMSAyNCAxOHY0YTIgMiAwIDAwNCAwdi00Yy0yLjc1LTEuODMzLTguOTUzLTYuMTktOS45NzItMTEuNTI0elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk4NCA2LjI3QzE3LjkyMiA4LjM0NiAxNy42MDYgMTYuMzk0IDE2IDE4djRhMiAyIDAgMDA0IDB2LTRjLTEuNTY0LTEuNTY0LTEuOTA1LTkuMjQxLTEuOTc5LTExLjU1OS0uMDExLS4wNTctLjAyNy0uMTEzLS4wMzctLjE3MXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRMb2dvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNjggMTY4LjY5XCIgey4uLnByb3BzfSBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9e3Byb3BzLnNpemV9PlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19hXCIgeDE9ezY2Ljd9IHkxPXstNDg3Ljd9IHgyPXs2Ni43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19iXCIgeDE9ezEwMS43fSB5MT17LTQ4Ny43fSB4Mj17MTAxLjd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UyMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2NcIiB4MT17ODR9IHkxPXstNDA4fSB4Mj17ODR9IHkyPXstNTc2LjY5fSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjZmZmXCIgZD1cIk0xNC45IDM1LjNoMTM5LjJWMTMzSDE0Ljl6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNjYuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19hKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwMS43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2IpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwdjE2OGwxNjggLjY5VjB6bTExMS4zIDEyNC4xcy0zLjQtNC4xLTYuMy03LjdjMTIuNi0zLjUgMTcuNC0xMS4zIDE3LjQtMTEuM2E1Mi41MiA1Mi41MiAwIDAxLTExLjEgNS42IDY4LjYzIDY4LjYzIDAgMDEtMzguOSA0IDcwLjEyIDcwLjEyIDAgMDEtMTQuMS00LjEgNDguODggNDguODggMCAwMS03LjEtMy4zYy0uMy0uMi0uNi0uMy0uOS0uNWEuNzYuNzYgMCAwMC0uNC0uMmMtMS43LTEtMi42LTEuNi0yLjYtMS42czQuNiA3LjYgMTYuOCAxMS4yYy0yLjkgMy42LTYuNCA3LjktNi40IDcuOS0yMS4yLS42LTI5LjMtMTQuNS0yOS4zLTE0LjUgMC0zMC42IDEzLjgtNTUuNCAxMy44LTU1LjQgMTMuOC0xMC4zIDI2LjktMTAgMjYuOS0xMGwxIDEuMUM1Mi44IDUwLjMgNDUgNTcuOSA0NSA1Ny45YTU2LjIgNTYuMiAwIDAxNS43LTIuNyA3Mi4xOSA3Mi4xOSAwIDAxMjEuOC02IDguNzUgOC43NSAwIDAxMS42LS4yIDg5LjEgODkuMSAwIDAxMTkuNC0uMiA3OC40NSA3OC40NSAwIDAxMjguOSA5LjFzLTcuNS03LjItMjMuOS0xMi4xbDEuMy0xLjVzMTMuMS0uMyAyNi45IDEwYzAgMCAxMy44IDI0LjggMTMuOCA1NS40LjEtLjEtOCAxMy44LTI5LjIgMTQuNHpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2MpXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFYyQ19TZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0XCIpfVxyXG4gKi9cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxubGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbmxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbmxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG5sZXQgc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbmNvbnN0IEd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzKVswXS5kZWZhdWx0XHJcbmNvbnN0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFJlbGF0aW9uc2hpcHMpWzBdLmRlZmF1bHRcclxuY29uc3Qgc2Vzc2lvbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFNlc3Npb25zKVswXS5kZWZhdWx0XHJcbmNvbnN0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0FjY291bnRJbmZvcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZTIpbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxuICAgICAgICBpZighY29sb3JNb2R1bGUpY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG4gICAgICAgIGlmKCFzaXplTW9kdWxlKXNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJBY2NvdW50IEluZm9zXCIvPixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFByb2ZpbGVWYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBTdGF0aXN0aWNzXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U3RhdGlzdGljcygpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWQgU2Vzc2lvbnNcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTZXNzaW9uVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2Vzc2lvblZhbHVlKCl7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnNSYXcgPSBzZXNzaW9uTW9kdWxlLmdldFNlc3Npb25zKClcclxuICAgICAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSlcclxuXHJcbiAgICAgICAgaWYoc2Vzc2lvbnMubGVuZ3RoID09PSAwKXJldHVybiBcIi0gTm8gc2Vzc2lvbiBkZXRlY3RlZC4gUGxlYXNlIHRyeSBpbiBhIGZldyBzZWNvbmRzXCJcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gc2Vzc2lvbnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYCsgaWQ6ICR7ZS5zZXNzaW9uSWR9XHJcbisgb3M6ICR7ZS5jbGllbnRJbmZvLm9zWzBdLnRvVXBwZXJDYXNlKCkrZS5jbGllbnRJbmZvLm9zLnNsaWNlKDEpfVxyXG4rIGNsaWVudDogJHtlLmNsaWVudEluZm8uY2xpZW50fVxyXG4rIHN0YXR1czogJHtlLnN0YXR1c31cclxuKyBBY3Rpdml0aWVzOiAke2UuYWN0aXZpdGllcy5sZW5ndGh9YFxyXG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIitcIi1cIi5yZXBlYXQoMzgpK1wiXFxuXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZmlsZVZhbHVlKCl7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtEYXRlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHVzZXIuY3JlYXRlZEF0XHJcblxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihhdmF0YXJVUkwuc3RhcnRzV2l0aChcIi9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBcImh0dHBzOi8vZGlzY29yZC5jb21cIithdmF0YXJVUkxcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoYXZhdGFyVVJMLmVuZHNXaXRoKFwiP3NpemU9MTI4XCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gYXZhdGFyVVJMLnJlcGxhY2UoXCI/c2l6ZT0xMjhcIiwgXCI/c2l6ZT00MDk2XCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYCsgVXNlcm5hbWU6ICR7dXNlci51c2VybmFtZX1cclxuKyBEaXNjcmltaW5hdG9yOiAke3VzZXIuZGlzY3JpbWluYXRvcn1cclxuKyBUYWc6ICR7dXNlci50YWd9XHJcbisgSUQ6ICR7dXNlci5pZH1cclxuKyBBdmF0YXI6ICR7dXNlci5hdmF0YXJ9XHJcbisgQXZhdGFyIFVSTDogJHthdmF0YXJVUkx9XHJcbisgQ3JlYXRpb24gRGF0ZTogJHsoY3JlYXRlZEF0LmdldERhdGUoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9ICR7Y3JlYXRlZEF0LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9aCAke2NyZWF0ZWRBdC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9bWluICR7Y3JlYXRlZEF0LmdldFNlY29uZHMoKX1zXHJcbisgRmxhZ3M6ICR7dXNlci5mbGFnc31cclxuKyBIYXMgTml0cm86ICR7dXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBFbWFpbDogJHt1c2VyLmVtYWlsfVxyXG4tIDJGQTogJHt1c2VyLm1mYUVuYWJsZWQgPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEhhcyBCZWVuIE9uIE1vYmlsZTogJHt1c2VyLm1vYmlsZSA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gUGhvbmU6ICR7dXNlci5waG9uZSB8fCBcIk5vbmVcIn1cclxuLSBWZXJpZmllZDogJHt1c2VyLnZlcmlmaWVkfWBcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0aXN0aWNzKCl7XHJcblxyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IE9iamVjdC52YWx1ZXMoR3VpbGRNb2R1bGUuZ2V0R3VpbGRzKCkpXHJcbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LmtleXMocmVsYXRpb25TaGlwTW9kdWxlLmdldFJlbGF0aW9uc2hpcHMoKSlcclxuICAgICAgICBjb25zdCBmcmllbmRzID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0ZyaWVuZChlKSlcclxuICAgICAgICBjb25zdCBibG9ja2VkID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0Jsb2NrZWQoZSkpXHJcblxyXG4gICAgICAgIHJldHVybiBgKyBTZXJ2ZXIgQ291bnQ6ICR7Z3VpbGRzLmxlbmd0aH0gc2VydmVyc1xyXG4rIFJlbGF0aW9uczogJHtyZWxhdGlvbnMubGVuZ3RofSByZWxhdGlvbnNcclxuKyBGcmllbmRzIENvdW50OiAke2ZyaWVuZHMubGVuZ3RofSBmcmllbmRzXHJcbi0gQmxvY2tlZCBVc2VycyBDb3VudDogJHtibG9ja2VkLmxlbmd0aH0gYmxvY2tlZCB1c2Vyc2BcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmxldCBoaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbmxldCBtZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcblxyXG5jbGFzcyBDb2RlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTEpbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXHJcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUyKW1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcbiAgICAgICAgaWYoIXNjcm9sbGJhck1vZHVsZTEpc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbiAgICAgICAgaWYoIWhpZ2h0bGlnaHRKUyloaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHttZXNzYWdlTW9kdWxlMS5tYXJrdXB9ICR7bWVzc2FnZU1vZHVsZTIubWVzc2FnZUNvbnRlbnR9YH0+XHJcbiAgICAgICAgICAgIDxwcmU+XHJcbiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvY29kZT5cclxuICAgICAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn0iLCIvLyBHb29kIGx1Y2sgdG8gcmVhZCBteSBjb2RlLCBFdmVuIG1lIGNhbid0IHJlYWQgaXQgcHJvcGVybHkuXHJcblxyXG5pbXBvcnQgeyBzdGF0IH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4uL21vZHVsZXMvZGlzdGFudFwiXHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiXHJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCJcclxuXHJcbmNvbnN0IGtleXMgPSB7XHJcbiAgICBzZXR0aW5nVGl0bGU6IHV1aWR2NCgpXHJcbn1cclxubGV0IGZvcm1Nb2R1bGVcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpUHJldmlldyBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc3RhdGVzOiBbXVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighZm9ybU1vZHVsZSlmb3JtTW9kdWxlID0gd2VicGFja01vZHVsZXMuZmluZChlID0+IGUuRm9ybVNlY3Rpb24pXHJcbiAgICAgICAgLyoqIFxyXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGFsbENvbXBvbmVudHMgPSBbLi4ubmV3IFNldChPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzKS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdKS5tYXAoayA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2tdKVxyXG4gICAgICAgIH0pLmZsYXQoKSldXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGZvcm1Nb2R1bGUuRm9ybVNlY3Rpb24gdGFnPVwiaDJcIiB0aXRsZT1cIkxpZ2h0Y29yZCdzIEFwaSBBdmFpbGxhYmxlIGNvbXBvbmVudHNcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1UZXh0IHR5cGU9XCJkZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cIlwiIHNlbGVjdGFibGU9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBUaGVzZSBjb21wb25lbnRzIGFyZSBoZXJlIGZvciB0aGUgcGx1Z2luIGRldnMuIFRoZXkgY2FuIHF1aWNrbHkgZW1iZWQgYW55IGNvbXBvbmVudCBiZWxvdyB3aXRoIHRoaXMgcGFuZWwuXHJcbiAgICAgICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVRleHQ+XHJcbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wPjwvTWFyZ2luVG9wPlxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwib3V0bGluZWRcIiBzaXplPVwibWVkaXVtXCIgaG92ZXJDb2xvcj1cImdyZWVuXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkL2xpZ2h0Y29yZC93aWtpL0FwaXNcIilcclxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+LFxyXG4gICAgICAgICAgICBhbGxDb21wb25lbnRzLm1hcChjb21wID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZihjb21wLkFsbFByZXZpZXdzKUFsbFByZXZpZXdzID0gY29tcC5BbGxQcmV2aWV3c1xyXG4gICAgICAgICAgICAgICAgbGV0IG9uQ2hhbmdlID0gKHRhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBzZXRTdGF0ZSA9IChuZXdTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXM6IFtPYmplY3QuYXNzaWduKHN0YXRlLCBuZXdTdGF0ZSldLmNvbmNhdCh0aGlzLnN0YXRlLnN0YXRlcy5maWx0ZXIoZSA9PiBlLmVsZW0gIT09IGNvbXApKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlLnN0YXRlcy5maW5kKGUgPT4gZS5lbGVtID09PSBjb21wKVxyXG4gICAgICAgICAgICAgICAgaWYoIXN0YXRlKXtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiOiBcInByZXZpZXdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbTogY29tcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge31cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdGF0ZXMucHVzaChzdGF0ZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRQcm9wcyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWwgPSB7fVxyXG4gICAgICAgICAgICAgICAgICAgIEFsbFByZXZpZXdzLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFtPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1dID0gY2F0ZWdvcnlbMF1bT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUub3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFtrZXldID0gQWxsUHJldmlld3MuZmluZChlID0+IGUuZmluZChlID0+IGVba2V5XSkpW3N0YXRlLm9wdGlvbnNba2V5XV1ba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyUHJldmlldyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChjb21wLCBnZXRQcm9wcygpKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyQ29kZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianN4XCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwianN4XCIpfS8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianNcIiBjb250ZW50PXtnZW5lcmF0ZUNvZGUoXCJyZWFjdFwiKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRTdHJGb3JQcm9wID0gKHZhbHVlLCBjb21wUGF0aCwgbGFuZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbXBQYXRoID09PSBcIkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG4gICAgbWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxyXG59fSxcclxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLFxyXG4gICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsXHJcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICB9LCBjbGFzc05hbWU6IFwibGMtdGFiLWJveC1zaGFkb3dcIiB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGUsIG51bGwsIFwiUHJldmlldyB0YWJzXCIpXHJcbiAgICApXHJcbilgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgIG1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcclxuICAgIH19PlxyXG4gICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5QcmV2aWV3IHRhYnM8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdXIgY29tcG9uZW50cyBoZXJlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBcIiAgICBcIilcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGdlbmVyYXRlQ29kZSA9IGZ1bmN0aW9uKGxhbmcpeyAvLyBjb2RlIGZvcm1hdHRpbmcgaXMgaGFyZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maW5kKGUgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtjb21wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcFBhdGggPSBgTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLiR7Y29tcENhdGVnb3J5fS4ke2NvbXBOYW1lfWBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihrZXkgPT0gXCJjaGlsZHJlblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IGtleStcIj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xvc2VUYWcgPSBgPC8ke2NvbXBQYXRofT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0vPmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihsYW5nID09PSBcInJlYWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZHJlbiAmJiBjaGlsZHJlbi4kJHR5cGVvZiAmJiAoY2hpbGRyZW4uJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IGNoaWxkcmVuLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aXNpYmxlS2V5ID0gL1teXFx3XFxkX10vZy50ZXN0KGtleSkgPyBKU09OLnN0cmluZ2lmeShrZXkpIDoga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gdmlzaWJsZUtleStcIjogXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpID09PSAwKXJldHVybiBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiICAgIFwiICsgc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wT2JqZWN0ID0gXCJ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvcFN0cmluZ3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0xhc3QgPSBpID09PSBwcm9wU3RyaW5ncy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBpID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwiLFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IHN0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzTGFzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJlYWN0LmNyZWF0ZUVsZW1lbnQoJHtjb21wUGF0aH0sICR7cHJvcE9iamVjdH0sICR7Y2hpbGRyZW5EYXRhfSlgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGhlbHAgPSBjb21wLmhlbHAgfHwge31cclxuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gaGVscC5pbmZvID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtoZWxwLmluZm99XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgd2FybiA9IGhlbHAud2FybiA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cIndhcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC53YXJufVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IGRhbmdlciA9IGhlbHAuZGFuZ2VyID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuZGFuZ2VyfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gaGVscC5lcnJvciA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuZXJyb3J9XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgc3VjY2VzcyA9IGhlbHAuc3VjY2VzcyA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cInN1Y2Nlc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC5zdWNjZXNzfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdzVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAge2luZm99XHJcbiAgICAgICAgICAgICAgICAgICAge3N1Y2Nlc3N9XHJcbiAgICAgICAgICAgICAgICAgICAge3dhcm59XHJcbiAgICAgICAgICAgICAgICAgICAge2Vycm9yfVxyXG4gICAgICAgICAgICAgICAgICAgIHtkYW5nZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAge0FsbFByZXZpZXdzLm1hcChjYXRlZ29yeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0udGV4dClyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS5jaGlsZHJlbilyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtrZXl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIG9wdGlvbnM9e2NhdGVnb3J5Lm1hcCgoZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBKU09OLnN0cmluZ2lmeShlW09iamVjdC5rZXlzKGUpWzBdXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5vcHRpb25zLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5XTogKHZhbHVlLnZhbHVlIHx8IFwiMFwiKS5yZXBsYWNlKFwib3B0LVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBzZWFyY2hhYmxlPXt0cnVlfS8+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkJvdHRvbTogXCI4cHhcIn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzIHRhYnM9e1t7bGFiZWw6IFwiUHJldmlld1wiLCBpZDogXCJwcmV2aWV3XCJ9LCB7bGFiZWw6IFwiQ29kZVwiLCBpZDogXCJjb2RlXCJ9XX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZT17c3RhdGUudGFifSBjaGlsZHJlbj17c3RhdGUudGFiID09PSBcInByZXZpZXdcIiA/IHJlbmRlclByZXZpZXcoKSA6IHJlbmRlckNvZGUoKX0gb25DaGFuZ2U9e29uQ2hhbmdlfS8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW5kZXJzKCl7XHJcblxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCB7IHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxyXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDAsXHJcbiAgICAgICAgICAgIHRydXN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZUJvdHRvbSA9IGVUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlID0gdGhpcy5yZWZzLmNhcmROb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzTm9kZS5jbG9zZXN0KFwiZGl2W2NsYXNzKj1cXFwic2Nyb2xsZXItXFxcIl1cIilcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XHJcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaW5rcygpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBpZiAoYWRkb24ud2Vic2l0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiV2Vic2l0ZVwiLCBhZGRvbi53ZWJzaXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5pbnZpdGUpIHtcclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU3VwcG9ydCBTZXJ2ZXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBhZGRvbi5pbnZpdGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRvbi5kb25hdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIkRvbmF0ZVwiLCBhZGRvbi5kb25hdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24ucGF0cmVvbikgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiUGF0cmVvblwiLCBhZGRvbi5wYXRyZW9uKSk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmxpbmtzO1xyXG4gICAgICAgIHJldHVybiAobGlua3MubGVuZ3RoIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtZm9vdGVyIGJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAuLi4obGlua3MubWFwKChlbGVtZW50LCBpbmRleCkgPT4gaW5kZXggPCBsaW5rcy5sZW5ndGggLSAxID8gW2VsZW1lbnQsIFwiIHwgXCJdIDogZWxlbWVudCkuZmxhdCgpKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMudG9nZ2xlICYmIHRoaXMucHJvcHMudG9nZ2xlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxyXG4gICAgZGVsZXRlKCkge3RoaXMucHJvcHMucmVtb3ZlKHRoaXMubmFtZSk7fVxyXG4gICAgcmVsb2FkKCkge3RoaXMucHJvcHMucmVsb2FkKHRoaXMubmFtZSk7fVxyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IHRoaXMucHJvcHMuYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0IGF1dGhvcigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IHRoaXMucHJvcHMuYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldCB2ZXJzaW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IHRoaXMucHJvcHMuYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XHJcbiAgICAgICAgY29uc3Qge2F1dGhvcklkLCBhdXRob3JMaW5rfSA9IHRoaXMucHJvcHMuYWRkb247XHJcblxyXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge31cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocmVzb2x2ZSh0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSA/IGNvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7fSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IFwic3VzcGVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIiwgc3R5bGV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1oZWFkZXIgYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tY29udHJvbHMgYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVkaXQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRWRpdFwiLCA8RWRpdEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmVkaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVsb2FkICYmIHRoaXMubWFrZUJ1dHRvbihcIlJlbG9hZFwiLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMucmVsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyLXdyYXAgYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmZvb3RlclxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7IiwiaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVwiO1xyXG5pbXBvcnQgQ29udGVudENvbHVtbiBmcm9tIFwiLi9jb250ZW50Q29sdW1uXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcGRvd25cIjtcclxuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgcGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5cclxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhcmRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcclxuICAgICAgICB0aGlzLmlzUGx1Z2lucyA9IHRoaXMucHJvcHMudHlwZSA9PSBcInBsdWdpbnNcIjtcclxuICAgICAgICB0aGlzLmNvb2tpZSA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luQ29va2llIDogdGhlbWVDb29raWU7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gdGhpcy5pc1BsdWdpbnMgPyBwbHVnaW5Nb2R1bGUgOiB0aGVtZU1vZHVsZTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25BZGRvbkNoYW5nZXMgPSB0aGlzLm9uQWRkb25DaGFuZ2VzLmJpbmQodGhpcylcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXHJcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9dW5sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZvbGRlcigpIHtcclxuICAgICAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0odGhpcy5pc1BsdWdpbnMgPyBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KG5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhuYW1lKTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZWRpdChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUobmFtZSkge1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShuYW1lKTtcclxuICAgICAgICBpZiAoIXNob3VsZERlbGV0ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5kZWxldGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgWW91IFN1cmU/XCIsIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7bmFtZX0/YCwge1xyXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNvcnRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJOYW1lXCIsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBdXRob3JcIiwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiVmVyc2lvblwiLCB2YWx1ZTogXCJ2ZXJzaW9uXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiUmVjZW50bHkgQWRkZWRcIiwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJMYXN0IE1vZGlmaWVkXCIsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRmlsZSBTaXplXCIsIHZhbHVlOiBcInNpemVcIn0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXNjZW5kaW5nXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkRlc2NlbmRpbmdcIiwgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9wcyhhZGRvbikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleTogdGhpcy5nZXROYW1lKGFkZG9uKSxcclxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jb29raWVbdGhpcy5nZXROYW1lKGFkZG9uKV0sXHJcbiAgICAgICAgICAgIHRvZ2dsZTogdGhpcy5tYW5hZ2VyLnRvZ2dsZS5iaW5kKHRoaXMubWFuYWdlciksXHJcbiAgICAgICAgICAgIGVkaXQ6IHNldHRpbmdzQ29va2llW1wiZm9yay1wcy03XCJdID8gdGhpcy5lZGl0LmJpbmQodGhpcykgOiBudWxsLFxyXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGFkZG9uOiBhZGRvbixcclxuICAgICAgICAgICAgaGFzaDogYWRkb24uaGFzaFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaXN0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gdGhpcy5saXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gdGhpcy5zdGF0ZS5zb3J0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdGF0ZS5zb3J0LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IGFbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gYi5wbHVnaW4gJiYgYi5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYi5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpICA6IGJbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihmaXJzdCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0LnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzZWNvbmQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCA+IHNlY29uZCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBzb3J0ZWRBZGRvbnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYWRkb24gPSBzb3J0ZWRBZGRvbnNbYV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0QXV0aG9yKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSBtYXRjaGVzID0gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvcikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGRlc2NyaXB0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgdmVyc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoYWRkb24pO1xyXG4gICAgICAgICAgICByZW5kZXJlZC5wdXNoKDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgey4uLnByb3BzfSByZWxvYWQ9eyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiB0aGlzLm1hbmFnZXIucmVsb2FkLmJpbmQodGhpcy5tYW5hZ2VyKX0gLz48L0Vycm9yQm91bmRhcnk+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5hbWUoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IGFkZG9uLm5hbWUpO31cclxuICAgIGdldEF1dGhvcihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiBhZGRvbi5hdXRob3IpO31cclxuICAgIGdldERlc2NyaXB0aW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldFZlcnNpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IGFkZG9uLnZlcnNpb24pO31cclxuXHJcbiAgICByZW5kZXJDaGVja1VwZGF0ZXMoKXtcclxuICAgICAgICBpZighd2luZG93LlplcmVzUGx1Z2luTGlicmFyeSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKCF3aW5kb3cuUGx1Z2luVXBkYXRlcylyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCAhPT0gXCJmdW5jdGlvblwiKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYoIXRoaXMuaXNQbHVnaW5zKXJldHVybiBudWxsXHJcblxyXG4gICAgICAgIHJldHVybiA8VG9vbHRpcFdyYXAgdGV4dD1cIkNoZWNrcyBmb3IgdXBkYXRlcyBvZiBwbHVnaW5zIHRoYXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFJpZ2h0LWNsaWNrIGZvciBhIGxpc3QuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luTGVmdDogXCIxMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cImZpbGxlZFwiIHNpemU9XCJtaW5cIiBob3ZlckNvbG9yPVwiZGVmYXVsdFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIlBsdWdpbiB1cGRhdGUgY2hlY2sgaW4gcHJvZ3Jlc3MuXCIsIHt0eXBlOiBcImluZm9cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBjb21wbGV0ZS5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfX0gd3JhcHBlcj17ZmFsc2V9IGRpc2FibGVkPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIFVwZGF0ZXNcclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByZWZyZXNoSWNvbiA9IDxUb29sdGlwIGNvbG9yPVwiYmxhY2tcIiBwb3NpdGlvbj1cInRvcFwiIHRleHQ9XCJSZWxvYWQgTGlzdFwiPlxyXG4gICAgICAgICAgICB7KHByb3BzKSA9PiBcclxuICAgICAgICAgICAgPFJlbG9hZEljb24gey4uLnByb3BzfSBjbGFzc05hbWU9XCJiZC1pY29uIGJkLXJlbG9hZCBiZC1yZWxvYWQtaGVhZGVyXCIgc2l6ZT1cIjE4cHhcIiBvbkNsaWNrPXthc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BsdWdpbnMpIHBsdWdpbk1vZHVsZS51cGRhdGVQbHVnaW5MaXN0KCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoZW1lTW9kdWxlLnVwZGF0ZVRoZW1lTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICB9PC9Ub29sdGlwPjtcclxuICAgICAgICBjb25zdCBhZGRvbkNhcmRzID0gdGhpcy5nZXRBZGRvbnMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxDb250ZW50Q29sdW1uIHRpdGxlPXtgJHt0aGlzLnByb3BzLnR5cGUudG9VcHBlckNhc2UoKX3igJQke2FkZG9uQ2FyZHMubGVuZ3RofWB9PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjbGFzc05hbWU9XCJiZC1idXR0b24gYmQtcGZidG5cIiBvbkNsaWNrPXt0aGlzLm9wZW5Gb2xkZXIuYmluZCh0aGlzKX0+T3BlbiB7dGhpcy5pc1BsdWdpbnMgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwifSBGb2xkZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAge3RoaXMucmVuZGVyQ2hlY2tVcGRhdGVzKCl9XHJcbiAgICAgICAgICAgIHshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgcmVmcmVzaEljb259XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHMgYmQtYWRkb24tY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgIDxTZWFyY2ggb25DaGFuZ2U9e3RoaXMuc2VhcmNofSBwbGFjZWhvbGRlcj17YFNlYXJjaCAke3RoaXMucHJvcHMudHlwZX0uLi5gfSAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPlNvcnQgYnk6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuc29ydE9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnNvcnR9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+T3JkZXI6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuZGlyZWN0aW9uc30gb25DaGFuZ2U9e3RoaXMucmV2ZXJzZX0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmRhLXNsaXN0IGJkLWFkZG9uLWxpc3RcIj57YWRkb25DYXJkc308L2Rpdj5cclxuICAgICAgICA8L0NvbnRlbnRDb2x1bW4+XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ2FyZExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENhcmRMaXN0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCRExvZ28gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7aGVpZ2h0OiBcIjEwMCVcIiwgd2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ28gXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHtmaWxsUnVsZTogXCJldmVub2RkXCIsIGNsaXBSdWxlOiBcImV2ZW5vZGRcIiwgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLCBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwifSwgdmlld0JveDogXCIwIDAgMjAwMCAyMDAwXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtZXRhZGF0YVwiLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cxXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIyMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjE1XCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMjU1LDI1NSwyNTUsMC4xNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93M1wifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MylcIn0sIGQ6IFwiTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaXCIsIGZpbGw6IFwiIzE3MTcxN1wiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cyKVwifSwgZDogXCJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWlwiLCBmaWxsOiBcIiMzRTgyRTVcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MSlcIn0sIGQ6IFwiTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWlwiLCBmaWxsOiBcIiNGRkZGRkZcIiwgb3BhY2l0eTogXCIxXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ2hlY2tib3ggZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwibGlcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3ggXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveCwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtaW5uZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hJbm5lcilbMF0uY2hlY2tib3hJbm5lcn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveEVsZW1lbnQsIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZCwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcImNoZWNrYm94XCJ9KSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCAhdGhpcy5zdGF0ZS5jaGVja2VkKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgY2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IEFycm93IGZyb20gXCIuLi9pY29ucy9kb3duYXJyb3dcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtvcGVuOiBmYWxzZSwgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUgfHwgdGhpcy5wcm9wcy5vcHRpb25zWzBdLnZhbHVlfTtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dNZW51ID0gdGhpcy5zaG93TWVudS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGlkZU1lbnUgPSB0aGlzLmhpZGVNZW51LmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd01lbnUoZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IHRydWV9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTWVudSgpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiBmYWxzZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWV9KTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGVkKCkge3JldHVybiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT0gdGhpcy5zdGF0ZS52YWx1ZSk7fVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcHQgPT4gXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdC1vcHRpb24ke3NlbGVjdGVkLnZhbHVlID09IG9wdC52YWx1ZSA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWB9IG9uQ2xpY2s9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzLCBvcHQudmFsdWUpfT57b3B0LmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLnByb3BzLnN0eWxlID09IFwidHJhbnNwYXJlbnRcIiA/IFwiIGJkLXNlbGVjdC10cmFuc3BhcmVudFwiIDogXCJcIjtcclxuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLnN0YXRlLm9wZW4gPyBcIiBtZW51LW9wZW5cIiA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcFwiPlxyXG4vLyA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57dGhpcy5wcm9wcy5sYWJlbH08L2xhYmVsPlxyXG4vLyA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuLy8gICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWNvbnRyb2xzXCI+XHJcbi8vICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuLy8gICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuLy8gICAgIDwvZGl2PlxyXG4vLyA8L2Rpdj5cclxuLy8ge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbi8vIDwvZGl2PjsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwiLi4vaWNvbnMvc2VhcmNoXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlYXJjaC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfSBvbktleURvd249e3RoaXMucHJvcHMub25LZXlEb3dufSB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImJkLXNlYXJjaFwiIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfSBtYXhMZW5ndGg9XCI1MFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9O1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Td2l0Y2ggb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLmNoZWNrZWR9IC8+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NvbnRlbnRDb2x1bW4gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgZGlzcGxheU5hbWUoKSB7cmV0dXJuIFwiQ29udGVudENvbHVtblwiO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9sZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5wcm9wcy50aXRsZSA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSwgdGhpcy5wcm9wcy50aXRsZSkgOiBudWxsXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uICsgXCIgXCIrY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsIHN0eWxlOiB7cGFkZGluZzogXCI2MHB4IDQwcHggMHB4XCJ9fSxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcbmltcG9ydCBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZnJvbSBcIi4vY3NzRWRpdG9yRGV0YWNoZWRcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnByb3BzLmxpbmVzID0gMDtcclxuICAgICAgICBzZWxmLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHNlbGYuYXR0YWNoID0gc2VsZi5hdHRhY2guYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLmRldGFjaGVkRWRpdG9yID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCwge2F0dGFjaDogc2VsZi5hdHRhY2h9KTtcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2ggPSBzZWxmLmRldGFjaC5iaW5kKHNlbGYpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogdGhpcy5wcm9wcy5kZXRhY2hlZCB8fCBCRFYyLmVkaXRvckRldGFjaGVkXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL21vbm9rYWlcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5kZXRhY2hlZCAmJiAhc2VsZi5zdGF0ZS5kZXRhY2hlZCkge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5kZXRhY2hlZFJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb2RlTWlycm9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxyXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNzcygpIHtcclxuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcclxuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGNjc3MgPSBhdG9iKF9jY3NzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgY29uc3Qge2RldGFjaGVkfSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJlZGl0b3ItZGV0YWNoZWRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaDNcIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRWRpdG9yIERldGFjaGVkXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICFkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImRldGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImhlbHAtdGV4dFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlc3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIitcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiLFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGFyZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoYXJnKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZXRhY2hcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBidG9hKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkcm9vdCA9IHNlbGYuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIGlmICghZHJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gYXRvYihfY2Nzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjY3NzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJkLWRldGFjaGVkLWNzcy1lZGl0b3JcIiwgaWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1lZGl0b3JcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWlubmVycGFuZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiBzZWxmLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiYXR0YWNoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gYXR0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImF0dGFjaFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKERPTS5xdWVyeShcIiNlZGl0b3ItZGV0YWNoZWRcIikpIHNlbGYucHJvcHMuYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5yb290KTtcclxuICAgICAgICAgICAgICAgIHNlbGYucm9vdC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDc3MoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDc3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIGJ0b2EodGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRFcnJvckJvdW5kYXJ5IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSB7aGFzRXJyb3I6IGZhbHNlfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRDYXRjaCgpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7aGFzRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwicmVhY3QtZXJyb3JcIn0sIFwiQ29tcG9uZW50IEVycm9yXCIpOyAgXHJcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuOyBcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBCREVycm9yQm91bmRhcnkucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiLz48cGF0aCBkPVwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3duQXJyb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xMiA5LjI5TDEyIDEzLjE3bDMuODgtMy44OGMuMzktLjM5IDEuMDItLjM5IDEuNDEgMCAuMzkuMzkuMzkgMS4wMiAwIDEuNDFsLTQuNTkgNC41OWMtLjM5LjM5LTEuMDIuMzktMS40MSAwTDYuNyAxMC43Yy0uMzktLjM5LS4zOS0xLjAyIDAtMS40MS4zOS0uMzggMS4wMy0uMzkgMS40MiAwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJ7LyogPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ3aGl0ZVwiIHdpZHRoPVwiMThweFwiIGhlaWdodD1cIjE4cHhcIj5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbjwvc3ZnPiAqL31cclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaXN0b3J5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMThweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbiAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luVG9wNjApWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZSltYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiXHJcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi4vbW9kdWxlcy9kaXN0YW50XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5sZXQgVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QcmVzZW5jZVNldHRpbmdzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpIHx8IGRlZmF1bHRSUEMsXHJcbiAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlldyA9IG51bGxcclxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMgPSBuZXcgU2V0KClcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVXaGVuRmV0Y2hlZChjb21wKXtcclxuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5hZGQoY29tcClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlKHNldHRpbmcsIHZhbHVlKXtcclxuICAgICAgICBsZXQgZGVmYXVsdFNldHRpbmcgPSBSUENQcm9wcy5maW5kKGUgPT4gZS5pZCA9PT0gc2V0dGluZy5wcm9wcy5pZClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xyXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRTZXR0aW5nLmlkXTogISF2YWx1ZSA/IHZhbHVlIDogbnVsbFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLnN0YXRlLmFzc2V0c1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYoc2V0dGluZy5wcm9wcy5pZCA9PT0gXCJhcHBsaWNhdGlvbl9pZFwiKXtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcclxuICAgICAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5zZXQoc2V0dGluZ3NSUEMpXHJcbiAgICB9XHJcblxyXG4gICAgZmV0Y2hBc3NldHMoKXtcclxuICAgICAgICBpZih0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpe1xyXG4gICAgICAgICAgICBsZXQgYXBwID0gdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkICE9PSBhcHApe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gdHJ1ZVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5mZXRjaEFzc2V0cyh0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpXHJcbiAgICAgICAgLnRoZW4oYXNzZXRzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IE9iamVjdC5rZXlzKGFzc2V0cykubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NldCA9IGFzc2V0c1trXVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhc3NldC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXNzZXQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYXNzZXQudHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJldmlldyhkYXRhKXtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzIHx8IChWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzR3JvdXAgdGl0bGU9XCJSaWNoUHJlc2VuY2UgU2V0dGluZ3NcIiBzZXR0aW5ncz17dGhpcy5wcm9wcy5zZXR0aW5nc30gb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9Lz4sXHJcbiAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz4sXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUmljaFByZXNlbmNlXCIvPixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIHsvKiogb3B0aW9ucyAqL31cclxuICAgICAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb21wb25lbnRzfVxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wIC8+XHJcbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlByZXZpZXdcIi8+XHJcbiAgICAgICAgICAgICAgICB7LyoqIHByZXZpZXcgKi99XHJcbiAgICAgICAgICAgICAgICA8UnBjUHJldmlldyBzZXR0aW5ncz17dGhpc30vPlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXttYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PjwvZGl2PixcclxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbkNsaWNrPXt3aW5kb3cub2hnb2RvaGZ1Y2t9PlxyXG4gICAgICAgICAgICAgICAgT2ggZ29kIE9oIGZ1Y2tcclxuICAgICAgICAgICAgPC9idXR0b24+LFxyXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUxrWWE3cnBzX2c0XCIpXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgU2VlID8gSSBwdWxsZWQgYSBsaXRsZSBzbmVha3kgb24geWFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zQ29tcG9uZW50cygpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zQ29tcG9uZW50cyB8fCAodGhpcy5fb3B0aW9uc0NvbXBvbmVudHMgPSBSUENQcm9wcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGUudHlwZSA9PT0gXCJ0ZXh0XCIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dFRleHQgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5cclxuICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IFs8SW5wdXROdW1iZXIgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5dLypcclxuICAgICAgICAgICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheS51bnNoaWZ0KDxEaXNjb3JkQnV0dG9uIHRpdGxlPVwiQ29weSBDdXJyZW50IFRpbWVzdGFtcFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gLz4pXHJcbiAgICAgICAgICAgICAgICB9Ki9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVxyXG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwiY2hvaWNlXCIpe1xyXG4gICAgICAgICAgICAgICAgaWYoW1wiYXNzZXRzLnNtYWxsXCIsIFwiYXNzZXRzLmxhcmdlXCJdLmluY2x1ZGVzKGUuaWQpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0Q2hvaWNlIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfSBjaG9pY2VzPXtbe3ZhbHVlOiBcIm5vbmVcIiwgbGFiZWw6IFwiTm8gYXNzZXRzXCJ9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKX0vPlxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5rbm93biBjaG9pY2UuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG59XHJcbmNvbnN0IFJQQ1Byb3BzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkFwcGxpY2F0aW9uIElEXCIsXHJcbiAgICAgICAgaWQ6IFwiYXBwbGljYXRpb25faWRcIixcclxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIk5hbWVcIixcclxuICAgICAgICBpZDogXCJuYW1lXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiRGV0YWlsc1wiLFxyXG4gICAgICAgIGlkOiBcImRldGFpbHNcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJCcm93c2luZyBEaXNjb3JkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiU3RhdGVcIixcclxuICAgICAgICBpZDogXCJzdGF0ZVwiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkxpZ2h0Y29yZCBDbGllbnRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJUaW1lc3RhbXAgU3RhcnRcIixcclxuICAgICAgICBpZDogXCJ0aW1lc3RhbXBzLnN0YXJ0XCIsXHJcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICBnZXQgcGxhY2Vob2xkZXIoKXtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkxhcmdlQXNzZXRcIixcclxuICAgICAgICBpZDogXCJhc3NldHMubGFyZ2VcIixcclxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlNtYWxsQXNzZXRcIixcclxuICAgICAgICBpZDogXCJhc3NldHMuc21hbGxcIixcclxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXHJcbiAgICB9LFxyXG5dXHJcblxyXG5sZXQgaW5wdXRUZXh0TW9kdWxlc1xyXG5jbGFzcyBJbnB1dFRleHQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgaWYoaW5wdXRUZXh0TW9kdWxlcyAmJiBpbnB1dFRleHRNb2R1bGVzWzBdKXJldHVybiBpbnB1dFRleHRNb2R1bGVzXHJcbiAgICAgICAgcmV0dXJuIGlucHV0VGV4dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlucHV0ID0gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlRleHRJbnB1dCBwbGFjZWhvbGRlcj17c2V0dGluZy5wbGFjZWhvbGRlcn0gbmFtZT17c2V0dGluZy5pZH0gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH19IHR5cGU9XCJ0ZXh0XCIvPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICAgICAgaW5wdXRNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUyLFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IElucHV0TnVtYmVyTW9kdWxlc1xyXG5jbGFzcyBJbnB1dE51bWJlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gSW5wdXROdW1iZXJNb2R1bGVzIHx8IChJbnB1dE51bWJlck1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdLFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSB0eXBlPVwibnVtYmVyXCIgb25DaGFuZ2U9eyh2YWx1ZSwgbmFtZSwgaW5wdXQpID0+IHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZF0rL2csIFwiXCIpXHJcbiAgICAgICAgICAgIGlmKHZhbHVlID09IHRoaXMuc3RhdGUuZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRWYWx1ZSh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH19IHR5cGU9XCJ0ZXh0XCIvPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XHJcbiAgICAgICAgICAgICAgICB7c2V0dGluZy5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIgPyBcclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICB9fSBjb2xvcj1cImJyYW5kXCI+Q29weSBjdXJyZW50IHRpbWVzdGFtcDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+IDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBJbnB1dENob2ljZU1vZHVsZXNcclxuY2xhc3MgSW5wdXRDaG9pY2UgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdID8gXCJhc3NldC1cIit0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA6IFwibm9uZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci51cGRhdGVXaGVuRmV0Y2hlZCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGRhdGEpe1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGEudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlID09PSBcIm5vbmVcIiA/IG51bGwgOiB2YWx1ZS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxyXG4gICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhID09PSBcIm5vbmVcIiA/IG51bGwgOiB0aGlzLnN0YXRlLmRhdGEucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIElucHV0Q2hvaWNlTW9kdWxlcyB8fCAoSW5wdXRDaG9pY2VNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb3dNb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuYXNzZXRzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiK2UuaWQsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBvcHRpb25zLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICB2YWx1ZTogXCJub25lXCIsXHJcbiAgICAgICAgICAgIGxhYmVsOiBcIk5vIGFzc2V0c1wiXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvcHRpb25zPXtvcHRpb25zfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSAvPlxyXG4gICAgICAgICAgICAgICAgey8qPFNlbGVjdCB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSBvcHRpb25zPXtvcHRpb25zfS8+Ki99XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgRGl2aWRlck1vZHVsZXMgPSBbXVxyXG5jbGFzcyBEaXZpZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBEaXZpZGVyTW9kdWxlcyYmRGl2aWRlck1vZHVsZXNbMF0gPyBEaXZpZGVyTW9kdWxlcyA6IChEaXZpZGVyTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlciAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGRpdmlkZXIsXHJcbiAgICAgICAgICAgIGRpdmlkZXJEZWZhdWx0XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YCR7ZGl2aWRlci5kaXZpZGVyfSAke2RpdmlkZXJEZWZhdWx0LmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBEaXNjb3JkQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9IGNvbG9yPVwiYnJhbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgUnBjUHJldmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGFicyA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMucHJvcHMuc2V0dGluZ3MucHJldmlldyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VUYWIodGFiKXtcclxuICAgICAgICBsZXQgYW5jaWVudFRhYiA9IHRoaXMuc3RhdGUuYWN0aXZlXHJcbiAgICAgICAgaWYoYW5jaWVudFRhYiA9PT0gdGFiLnByb3BzLmlkKXJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0YWIuc2V0QWN0aXZlKHRydWUpXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogdGFiLnByb3BzLmlkXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiV3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYm5hdlwiIHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiRnVsbCBQcm9maWxlXCIgaWQ9XCJwcm9maWxlXCIvPlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIlVzZXIgUG9wb3V0XCIgaWQ9XCJwb3BvdXRcIi8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8UHJlc2VuY2VFcnJvckNhdGNoZXIgcHJldmlldz17dGhpcy5wcmV2aWV3fSBzdGF0ZT17dGhpcy5zdGF0ZS5ycGN9IHByb3BzPXt7cHJldmlldzogdGhpc319IGtleT17dGhpcy5zdGF0ZS5hY3RpdmV9IC8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfSAgIFxyXG5cclxuICAgIGlzQWN0aXZlKHRhYil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZlID09PSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJldmlldygpe1xyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlID09PSBcInByb2ZpbGVcIilyZXR1cm4gUHJvZmlsZVxyXG4gICAgICAgIHJldHVybiBQb3BvdXRcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgVGFiIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wcy5wcmV2aWV3LnRhYnMucHVzaCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogISFpc0FjdGl2ZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGBsYy1uYXZJdGVtYFxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlKXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUFjdGl2ZWBcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUluYWN0aXZlYFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMucHJldmlldy5jaGFuZ2VUYWIodGhpcylcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgZW1wdHlDbGFzc2VzXHJcbmNsYXNzIFByZXNlbmNlRXJyb3JDYXRjaGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbXBvbmVudERpZENhdGNoKGVyciwgZXJySW5mbyl7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyckluZm8pXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGVycm9yOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlKXtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmVycm9yKXtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IG5ldyB0aGlzLnByb3BzLnByZXZpZXcodGhpcy5wcm9wcy5wcm9wcylcclxuICAgICAgICAgICAgICAgIHByZXZpZXcuc2V0U3RhdGUodGhpcy5wcm9wcy5zdGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aWV3LnJlbmRlcigpXHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBlbXB0eUNsYXNzZXMgPSBlbXB0eUNsYXNzZXMgfHwgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5lbXB0eVN0YXRlSW1hZ2UpXHJcbiAgICAgICAgICAgIGlmKCFlbXB0eUNsYXNzZXMpe1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogXCIyMHB4XCJcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUltYWdlfSBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUhlYWRlcn0+QW4gZXJyb3Igb2NjdXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVTdWJ0ZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy4gSm9pbiBvdXIgwq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtgJHtCRFYyLmFuY2hvckNsYXNzZXMuYW5jaG9yfSAke0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWB9IHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD17MH0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5qb2luTEMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgc2VydmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgwq0gZm9yIGhlbHAuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxubGV0IHBvcG91dE1vZHVsZXNcclxubGV0IFVzZXJQb3BvdXRDb21wb25lbnRcclxubGV0IFBvcG91dFByb3BzXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwb3BvdXRNb2R1bGVzIHx8IChwb3BvdXRNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkZsdXhDb250YWluZXIoRm9yd2FyZFJlZihTdWJzY3JpYmVHdWlsZE1lbWJlcnNDb250YWluZXIoVXNlclBvcG91dCkpKVwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXtcclxuICAgICAgICAgICAgaWYoIVVzZXJQb3BvdXQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0IGNvbXBvbmVudC5gKVxyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQb3BvdXQuZGVmYXVsdCh7dXNlcklkOiB1c2VyLmlkLCBndWlsZElkOiBudWxsLCBjaGFubmVsSWQ6IG51bGwsIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWV9KS5yZW5kZXIoKVxyXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IHJlbmRlcjEudHlwZS5yZW5kZXIoUG9wb3V0UHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSBuZXcgcmVuZGVyMi50eXBlKHJlbmRlcjIucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXRDb21wb25lbnQgPSByZW5kZXIzLnR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIVVzZXJQb3BvdXRDb21wb25lbnQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0Q29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQb3BvdXRQcm9wcyA9IG5ldyBVc2VyUG9wb3V0LmRlZmF1bHQoe3VzZXJJZDogdXNlci5pZCwgZ3VpbGRJZDogbnVsbCwgY2hhbm5lbElkOiBudWxsLCBkaXNhYmxlVXNlclByb2ZpbGVMaW5rOiB0cnVlfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc3RvcCBwcm9wYWdhdGlvbiBzaGl0LlxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IDxkaXYgey4uLndpbmRvdy5MaWdodGNvcmQuQXBpLl8uZXhjbHVkZVByb3BlcnRpZXMocG9wb3V0LnByb3BzLCBbXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiXSl9IC8+XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXQgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAge2NvbnRhaW5lcn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHByb2ZpbGVNb2R1bGVzXHJcbmxldCBVc2VyUHJvZmlsZUNvbXBvbmVudFxyXG5sZXQgUHJvZmlsZVByb3BzXHJcbmxldCBjb25uZWN0ZWRQcm9maWxlU3RvcmVcclxuY2xhc3MgUHJvZmlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwcm9maWxlTW9kdWxlcyB8fCAocHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclByb2ZpbGVcIiksXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBVc2VyUHJvZmlsZSxcclxuICAgICAgICAgICAgdXNlck1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMSA9IG5ldyBVc2VyUHJvZmlsZS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJcclxuICAgICAgICAgICAgfSkucmVuZGVyKClcclxuICAgICAgICAgICAgY29ubmVjdGVkUHJvZmlsZVN0b3JlID0gcmVuZGVyMS50eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjIgPSBuZXcgcmVuZGVyMS50eXBlKHJlbmRlcjEucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSByZW5kZXIyLnR5cGUucmVuZGVyKHJlbmRlcjIucHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjQgPSBuZXcgcmVuZGVyMy50eXBlKHJlbmRlcjMucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQcm9maWxlQ29tcG9uZW50ID0gcmVuZGVyNC50eXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQcm9maWxlQ29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQcm9maWxlUHJvcHMgPSBuZXcgY29ubmVjdGVkUHJvZmlsZVN0b3JlKHtcclxuICAgICAgICAgICAgdXNlcjogdXNlcixcclxuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHt9XHJcbiAgICAgICAgfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwcm9maWxlID0gbmV3IFVzZXJQcm9maWxlQ29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFByb2ZpbGVQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIHByb2ZpbGUucHJvcHMuc3R5bGUgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcImF1dG9cIlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiIGxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIHtwcm9maWxlfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcbi8qXHJcbmxldCBwb3BvdXRNb2R1bGVcclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHsgLy8gVE9ETzogUHJvYmFibHkgdXNlIGludGVybmFsIENvbXBvbmVudHMgaW5zdGVhZCBvZiBtYWtpbmcgaXQgZnJvbSBzY3JhdGNoLlxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gcG9wb3V0TW9kdWxlIHx8IChwb3BvdXRNb2R1bGUgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ib3QpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hY3Rpdml0eVVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tdXRlZCAmJiBlLndyYXBwZXIgJiYgZS5iYXNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudGhlbWVHaG9zdEhhaXJsaW5lQ2hhbm5lbHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBybyAmJiBlLmlubGluZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcylbMF0uZGVmYXVsdC5NZXNzYWdlcyxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHByb3RpcE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlMSxcclxuICAgICAgICAgICAgTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIGF2YXRhck1vZHVsZTEsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGUxXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZTEuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VVc2VyUG9wb3V0fSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrVXNlclBvcG91dCA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVVzZXJQb3BvdXR9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdXNlclBvcG91dCBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VyUG9wb3V0fSByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyUGxheWluZ30+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS52ZXJ0aWNhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5Q2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5oZWFkZXJUb3B9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFyV3JhcHBlck5vcm1hbH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YXZhdGFyTW9kdWxlMX0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFySGludH0gdmlld0JveD1cIjAgMCA4MCA4MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBtYXNrPVwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTgwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJIaW50SW5uZXJ9PntNZXNzYWdlcy5WSUVXX1BST0ZJTEV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJUZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnTm9OaWNrbmFtZX0gJHtuYW1lVGFnTW9kdWxlMS5uYW1lVGFnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YCR7bmFtZVRhZ01vZHVsZTEudXNlcm5hbWV9ICR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnVXNlcm5hbWVOb05pY2tuYW1lfWB9Pnt1c2VyLnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+I3t1c2VyLmRpc2NyaW1pbmF0b3J9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVVzZXJQb3BvdXR9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmhlYWRlclRleHROb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTJ9YH0+e01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmJvZHlOb3JtYWx9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzVXNlclBvcG91dCA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5uYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eU5hbWV9PntkYXRhLm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLmRldGFpbHMpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnN0YXRlfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPXtkYXRhLnN0YXRlfT57ZGF0YS5zdGF0ZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZUNvbXBvbmVudCA9IHRpbWVzdGFtcFJlbmRlcihUaW1lc3RhbXAsIE1lc3NhZ2VzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Jvb3RNb2R1bGUxLmJvZHl9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9ICR7cm9vdE1vZHVsZTEuYm9keUlubmVyfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5VGl0bGV9PntNZXNzYWdlcy5OT1RFfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtub3RlTW9kdWxlMS5ub3RlfSAke3Jvb3RNb2R1bGUxLm5vdGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcGxhY2Vob2xkZXI9e01lc3NhZ2VzLk5PVEVfUExBQ0VIT0xERVJ9IG1heGxlbmd0aD1cIjI1NlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjM2cHhcIn19IGRpc2FibGVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5mb290ZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb3RpcH0gJHtwcm90aXBNb2R1bGUxLmlubGluZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHtwcm90aXBNb2R1bGUxLnByb30gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfSBzdHlsZT17e2NvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCJ9fT57TWVzc2FnZXMuUElOTkVEX01FU1NBR0VTX1BST19USVB9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Y29sb3JNb2R1bGUxLmNvbG9yU3RhbmRhcmR9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fSAke3Byb3RpcE1vZHVsZTEudGlwfWB9PntNZXNzYWdlcy5DT05URVhUX01FTlVfSElOVH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBTdGF0dXNNb2R1bGVzXHJcbmNsYXNzIFN0YXR1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBTdGF0dXNNb2R1bGVzIHx8IChTdGF0dXNNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRQcmVzZW5jZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGdldFByZXNlbmNlLFxyXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCBzdGF0dXMgPSBnZXRQcmVzZW5jZS5kZWZhdWx0LmdldFByZXNlbmNlKCkuc3RhdHVzXHJcbiAgICAgICAgaWYoc3RhdHVzID09PSBcImludmlzaWJsZVwiKXN0YXR1cyA9IFwib2ZmbGluZVwiXHJcbiAgICAgICAgcmV0dXJuIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHg9XCI2MFwiIHk9XCI2MFwiIGZpbGw9XCIjZmZmZmZmXCIgbWFzaz17YHVybCgjc3ZnLW1hc2stc3RhdHVzLSR7c3RhdHVzfSlgfSBjbGFzc05hbWU9e3BvaW50ZXJFdmVudHN9PjwvcmVjdD5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHRpbWVzdGFtcENsYXNzID0gXCJcIlxyXG5cclxubGV0IFByb2ZpbGVNb2R1bGVzXHJcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgeyAvLyBUT0RPOiBQcm9iYWJseSB1c2UgaW50ZXJuYWwgQ29tcG9uZW50cyBpbnN0ZWFkIG9mIG1ha2luZyBpdCBmcm9tIHNjcmF0Y2guXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBQcm9maWxlTW9kdWxlcyB8fCAoUHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXggJiYgZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmJvdClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmFjdGl2aXR5UHJvZmlsZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm11dGVkICYmIGUud3JhcHBlciAmJiBlLmJhc2UpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlckZhZGUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzKVswXS5kZWZhdWx0Lk1lc3NhZ2VzXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcclxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlfSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVByb2ZpbGV9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduU3RyZXRjaH0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEucm9vdH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnRvcFNlY3Rpb25QbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YH0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVySW5mb31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5uYW1lVGFnfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtyb290TW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS51c2VybmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtyb290TW9kdWxlMS5kaXNjcmltaW5hdG9yfT4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtmbGV4TW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnblN0cmV0Y2h9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZXN9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlcyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJGaWxsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVByb2ZpbGV9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzUHJvZmlsZSA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5fT5cclxuXHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcblx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9PlxyXG5cdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbkhlYWRlcn0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEubm90ZX0gJHtub3RlTW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjQwcHhcIn19IGRpc2FibGVkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0ICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25uZWN0ZWRBY2NvdW50cyAvPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnRzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBhY2NvdW50cyA9IFtdXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF1cclxuICAgICAgICBsZXQgQWNjb3VudE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRBY2NvdW50cylbMF0uZGVmYXVsdFxyXG5cclxuICAgICAgICBsZXQgYWNjcyA9IEFjY291bnRNb2R1bGUxLmdldEFjY291bnRzKCkuZmlsdGVyKGUgPT4gZS52aXNpYmlsaXR5ID09PSAxKVxyXG4gICAgICAgIGZvcihsZXQgYWNjIG9mIGFjY3Mpe1xyXG4gICAgICAgICAgICBhY2NvdW50cy5wdXNoKDxDb25uZWN0ZWRBY2NvdW50IGFjYz17YWNjfSAvPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGFjY291bnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbn0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50c30+XHJcbiAgICAgICAgICAgICAgICAgICAge2FjY291bnRzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBmbG93ZXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBhbmNob3JNb2R1bGUxLFxyXG4gICAgICAgICAgICBTb2NpYWxDb25zdGFudHNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hbmNob3IpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXQgJiYgZS5kZWZhdWx0Lm1hcClbMF0uZGVmYXVsdFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgYWNjID0gdGhpcy5wcm9wcy5hY2NcclxuICAgICAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSlcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YH0gc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgPGltZyBhbHQ9e2BMb2dvICR7Y29uc3RhbnRzU29jaWFsLm5hbWV9YH0gY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRJY29ufSBzcmM9e2NvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXl9IC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lSW5uZXJ9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWV9PnthY2MubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIHthY2MudmVyaWZpZWQgPyAoPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyQ29udGFpbmVyfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb259YH0gc3R5bGU9e3t3aWR0aDogXCIxNnB4XCIsIGhlaWdodDogXCIxNnB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNGY1NDVjXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17Zmxvd2VyTW9kdWxlMS5jaGlsZENvbnRhaW5lcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTUuMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwiIGZpbGw9XCIjZmZmZmZmXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9e2Ake2FuY2hvck1vZHVsZTEuYW5jaG9yfSAke2FuY2hvck1vZHVsZTEuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE9wZW5JY29ufSB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IFVzZXJGbGFncyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLlVzZXJGbGFncylbMF0uVXNlckZsYWdzXHJcbiAgICAgICAgbGV0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBbXVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIGluIFVzZXJGbGFncyl7XHJcbiAgICAgICAgICAgIGlmKHVzZXIuaGFzRmxhZyhVc2VyRmxhZ3NbZmxhZ05hbWVdKSlzZXJpYWxpemVkLnB1c2goZmxhZ05hbWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIG9mIHNlcmlhbGl6ZWQpe1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoYWJsZSA9IGBwcm9maWxlQmFkZ2Uke2ZsYWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIiBcIikuc3BsaXQoXCIgXCIpLm1hcChlID0+IGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWBcclxuICAgICAgICAgICAgc2VhcmNoYWJsZSA9IHNlYXJjaGFibGUucmVwbGFjZShcIkh5cGVzcXVhZE9ubGluZVwiLCBcIkh5cGVTcXVhZE9ubGluZVwiKVxyXG4gICAgICAgICAgICBpZighcm9vdE1vZHVsZVtzZWFyY2hhYmxlXSljb250aW51ZVxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT17c2VhcmNoYWJsZX0vPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbil7XHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKDxCYWRnZSBuYW1lPVwicHJvZmlsZUJhZGdlUHJlbWl1bVwiIC8+KVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlV3JhcHBlcn0+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZX0gJHtyb290TW9kdWxlMVt0aGlzLnByb3BzLm5hbWVdfWB9PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRpbWVzdGFtcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RpbWVzdGFtcENsYXNzfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSovIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0xheWVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5rZXl1cExpc3RlbmVyID0gdGhpcy5rZXl1cExpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAga2V5dXBMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLnJlZnMucm9vdC5wYXJlbnROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqIHByb2dyZXNzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMua2V5dXBMaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaXNOb2RlID0gRE9NLnF1ZXJ5KGAjJHt0aGlzLnByb3BzLmlkfWApO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MS4xIC0gMC4xICogKDEgLSBwcm9ncmVzcyl9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBET00ucXVlcnkoXCIucHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LnJlbW92ZShcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqIHByb2dyZXNzICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiW2NsYXNzKj1cXFwibGF5ZXItXFxcIl1cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LmFkZChcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqICgxIC0gcHJvZ3Jlc3MpICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gMSAtIHByb2dyZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwibGF5ZXIgYmQtbGF5ZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLCBpZDogdGhpcy5wcm9wcy5pZCwgcmVmOiBcInJvb3RcIiwgc3R5bGU6IHtvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IFwic2NhbGUoMS4xKSB0cmFuc2xhdGVaKDBweClcIn19LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uL3Rvb2xzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBUYWJCYXJTZXBhcmF0b3IgZnJvbSBcIi4uL3RhYkJhclNlcGFyYXRvclwiO1xyXG5pbXBvcnQgVGFiQmFySGVhZGVyIGZyb20gXCIuLi90YWJCYXJIZWFkZXJcIjtcclxuaW1wb3J0IFRhYkJhckl0ZW0gZnJvbSBcIi4uL3RhYkJhckl0ZW1cIjtcclxuXHJcbmltcG9ydCBTZXJ2ZXJDYXJkIGZyb20gXCIuL3NlcnZlckNhcmRcIjtcclxuaW1wb3J0IFNpZGViYXJWaWV3IGZyb20gXCIuL3NpZGViYXJWaWV3XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHVibGljU2VydmVycyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5jbG9zZSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5ID0gdGhpcy5jaGFuZ2VDYXRlZ29yeS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaEtleURvd24gPSB0aGlzLnNlYXJjaEtleURvd24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbiA9IHRoaXMuY2hlY2tDb25uZWN0aW9uLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5qb2luID0gdGhpcy5qb2luLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ID0gdGhpcy5jb25uZWN0LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRHdWlsZHNcIl0pO1xyXG4gICAgICAgIHRoaXMuQXZhdGFyRGVmYXVsdHMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiXSk7XHJcbiAgICAgICAgdGhpcy5JbnZpdGVBY3Rpb25zID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7XHJcbiAgICAgICAgdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFNvcnRlZEd1aWxkc1wiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxyXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogMCxcclxuICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucHJvcHMucm9vdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKHF1ZXJ5LCBjbGVhcikge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZldGNoKGAke3NlbGYuZW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcImdldFwiXHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgYXdhaXQgcmVzLnRleHQoKVxyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gZGF0YS5yZXN1bHRzLnJlZHVjZSgoYXJyLCBzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHNlcnZlci5qb2luZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAvLyBhcnIucHVzaCg8U2VydmVyQ2FyZCBzZXJ2ZXI9e3NlcnZlcn0gam9pbj17c2VsZi5qb2lufS8+KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgICAgIH0sIFtdKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIHNlcnZlcnMgPSBzZWxmLnN0YXRlLnNlcnZlcnMuY29uY2F0KHNlcnZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9zZXJ2ZXJzLnVuc2hpZnQoc2VsZi5iZFNlcnZlcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlbmQgPSBkYXRhLnNpemUgKyBkYXRhLmZyb207XHJcbiAgICAgICAgICAgIGRhdGEubmV4dCA9IGA/ZnJvbT0ke2VuZH1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSBkYXRhLm5leHQgKz0gYCZ0ZXJtPSR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkpIGRhdGEubmV4dCArPSBgJmNhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoZW5kID49IGRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEudG90YWw7XHJcbiAgICAgICAgICAgICAgICBkYXRhLm5leHQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBgU2hvd2luZyAxLSR7ZW5kfSBvZiAke2RhdGEudG90YWx9IHJlc3VsdHMgaW4gJHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIHRpdGxlICs9IGAgZm9yICR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgc2VydmVyczogc2VydmVycyxcclxuICAgICAgICAgICAgICAgIG5leHQ6IGRhdGEubmV4dFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhzZWxmKTtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVmcy5zYnYucmVmcy5jb250ZW50U2Nyb2xsZXIuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIGxvYWQgc2VydmVycy4gQ2hlY2sgY29uc29sZSBmb3IgZGV0YWlsc1wiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgam9pbihzZXJ2ZXJDYXJkKSB7XHJcbiAgICAgICAgaWYgKHNlcnZlckNhcmQucHJvcHMucGlubmVkKSByZXR1cm4gdGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShzZXJ2ZXJDYXJkLnByb3BzLmludml0ZV9jb2RlKTtcclxuXHJcbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7c2VydmVyQ2FyZC5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcn1gLHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2VydmVyQ2FyZC5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZi53aW5kb3dPcHRpb25zO1xyXG4gICAgICAgIG9wdGlvbnMueCA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblggKyB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBvcHRpb25zLndpZHRoIC8gMik7XHJcbiAgICAgICAgb3B0aW9ucy55ID0gTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWSArIHdpbmRvdy5pbm5lckhlaWdodCAvIDIgLSBvcHRpb25zLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cgPSBuZXcgKHdpbmRvdy5yZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3cpKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0P3Njb3Blcz1ndWlsZHMuam9pbiZwcmV2aW91c1VybD1odHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIjtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cud2ViQ29udGVudHMub24oXCJkaWQtbmF2aWdhdGVcIiwgKGV2ZW50LCB1cmwpID0+IHtcclxuICAgICAgICAgICAgaWYgKHVybCAhPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiKSByZXR1cm47XHJcbiAgICAgICAgICAgIHNlbGYuam9pbldpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgICAgICBzZWxmLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdy5sb2FkVVJMKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWluaW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xyXG4gICAgICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYmRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjc1MDArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiMjAwMDArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9pY29ucy84NjAwNDc0NDk2NjkxNDA0OC8yOTJlN2Y2YmZmZjJiNzFkZmQxM2U1MDhhODU5YWVkZC53ZWJwXCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXIyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBvbmxpbmU6IFwiMzArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiNTArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgTGlnaHRjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI4NjAwNDc0NDk2NjkxNDA0OFwiLFxyXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vYXZhdGFyczMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjU2OTAwNTg/cz0yMDAmdj00XCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjdlRmZmMkFcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHRoaXMuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtzZXJ2ZXI6IHNlcnZlciwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSlcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vc2VhcmNoLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2luRW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0RW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qb2luLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb2Ase1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogMCxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMixcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclZpZXcsIHtyZWY6IFwic2J2XCJ9LCB0aGlzLmNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzaWRlYmFyOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuc2lkZWJhclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuY29udGVudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b29sczoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwicHRcIiwgcmVmOiBcInRvb2xzXCIsIG9uQ2xpY2s6IHRoaXMuY2xvc2V9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lkZWJhcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJcIiwga2V5OiBcInBzXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyIFNJREVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCIsIHN0eWxlOiB7Zm9udFNpemU6IFwiMTZweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJQdWJsaWMgU2VydmVyc1wiXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySGVhZGVyLCB7dGV4dDogXCJDYXRlZ29yaWVzXCJ9KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJJdGVtLCB7aWQ6IGluZGV4LCBvbkNsaWNrOiB0aGlzLmNoYW5nZUNhdGVnb3J5LCBrZXk6IGluZGV4LCB0ZXh0OiB2YWx1ZSwgc2VsZWN0ZWQ6IHRoaXMuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gaW5kZXh9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlcixcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRleHQtaW5wdXQgZmxleC12ZXJ0aWNhbFwiLCBzdHlsZToge3dpZHRoOiBcIjE3MnB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7cmVmOiBcInNlYXJjaGlucHV0XCIsIG9uS2V5RG93bjogdGhpcy5zZWFyY2hLZXlEb3duLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwidGV4dFwiLCBjbGFzc05hbWU6IFwiaW5wdXQgZGVmYXVsdFwiLCBwbGFjZWhvbGRlcjogXCJTZWFyY2guLi5cIiwgbWF4TGVuZ3RoOiBcIjUwXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2hLZXlEb3duKGUpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nIHx8IGUud2hpY2ggIT09IDEzKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogZS50YXJnZXQudmFsdWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgcXVlcnkgPSBgP3Rlcm09JHtlLnRhcmdldC52YWx1ZX1gO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgIT09IDApIHtcclxuICAgICAgICAgICAgcXVlcnkgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5zZWFyY2gocXVlcnksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYXRlZ29yeUJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VDYXRlZ29yeShpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICBzZWxmLnJlZnMuc2VhcmNoaW5wdXQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBpZCxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGlkID09PSAwKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKGA/Y2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tpZF19YCwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5jb25uZWN0aW9uLnN0YXRlID09PSAxKSByZXR1cm4gc2VsZi5ub3RDb25uZWN0ZWQ7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7cmVmOiBcImNvbnRlbnRcIiwga2V5OiBcInBjXCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSksXHJcbiAgICAgICAgICAgIHNlbGYuYmRTZXJ2ZXIsXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5tYXAoKHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7a2V5OiBzZXJ2ZXIuaWRlbnRpZmllciwgc2VydmVyOiBzZXJ2ZXIsIGpvaW46IHNlbGYuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUubmV4dCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO3NlbGYuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTsgc2VsZi5zZWFyY2goc2VsZi5zdGF0ZS5uZXh0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLCBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5sb2FkaW5nID8gXCJMb2FkaW5nXCIgOiBcIkxvYWQgTW9yZVwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5sZW5ndGggPiAwICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pXHJcbiAgICAgICAgKV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vdENvbm5lY3RlZCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvL3JldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwgeyB0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlIH0pO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2tleTogXCJuY2NcIiwgcmVmOiBcImNvbnRlbnRcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXHJcbiAgICAgICAgICAgICAgICBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzZWxmLmNvbm5lY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IFwiMThweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSwgc2VsZi5iZFNlcnZlclxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJhXCIsXHJcbiAgICAgICAgICAgICAgICB7aHJlZjogXCJodHRwczovL2Rpc2NvcmRzZXJ2ZXJzLmNvbVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJEaXNjb3Jkc2VydmVycy5jb21cIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCB7Y29ubmVjdGlvbn0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIGlmIChjb25uZWN0aW9uLnN0YXRlICE9PSAyKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge2NvbG9yOiBcIiNiOWJiYmVcIiwgZm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgXCJDb25uZWN0ZWQgYXM6IFwiLFxyXG4gICAgICAgICAgICAgICAgYCR7Y29ubmVjdGlvbi51c2VyLnVzZXJuYW1lfSMke2Nvbm5lY3Rpb24udXNlci5kaXNjcmltaW5hdG9yfWBcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge3BhZGRpbmc6IFwiNXB4IDEwcHggMCAxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWluSGVpZ2h0OiBcIjIwcHhcIn0sIHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wiLCBvbkNsaWNrOiBzZWxmLmNvbm5lY3R9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlY29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxufVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXJ2ZXJDYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuc2VydmVyLmljb25VcmwpIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGltYWdlRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgICBqb2luZWQ6IHRoaXMucHJvcHMuZ3VpbGRMaXN0LmluY2x1ZGVzKHRoaXMucHJvcHMuc2VydmVyLmlkZW50aWZpZXIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NlcnZlcn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGxldCBjYXJkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2FyZCAmJiBlLmNhcmRQcmltYXJ5KVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxleENoaWxkICYmIGUuX2hvcml6b250YWxSZXZlcnNlKVswXVxyXG4gICAgICAgIGxldCB3cmFwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubm9XcmFwICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWQpWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIiwgLy8gY2FyZFByaW1hcnktMUh2LXRvXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGAke2NhcmRNb2R1bGUuY2FyZH0gJHtjYXJkTW9kdWxlLmNhcmRQcmltYXJ5fSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9IGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxyXG4gICAgICAgICAgICAvLyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAvLyBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgLy8geyBjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZmxleC0xTzFHS1kgZGlyZWN0aW9uUm93LTN2M3RmRyBqdXN0aWZ5U3RhcnQtMnlJWm8wIGFsaWduU3RyZXRjaC0xaHd4TWEgbm9XcmFwLTNqeW52NlwiIH0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge3JlZjogXCJpbWdcIiwgY2xhc3NOYW1lOiBcImJkLXNlcnZlci1pbWFnZVwiLCBzcmM6IHNlcnZlci5pY29uVXJsLCBvbkVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyksIGRyYWdnYWJsZTogZmFsc2V9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuZmxleENoaWxkK1wiIGJkLXNlcnZlci1jb250ZW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwK1wiIGJkLXNlcnZlci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1uYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5tZW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgTWVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5IGJkLXNlcnZlci1kZXNjcmlwdGlvbi1jb250YWluZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBzY3JvbGxlciBiZC1zZXJ2ZXItZGVzY3JpcHRpb25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2IGJkLXNlcnZlci1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXhDaGlsZC1mYW9WVzMgYmQtc2VydmVyLXRhZ3NcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGNvbG9yR3JlZW4tMjlpQUtZXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzNhYzE1Y1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5lcnJvciAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGRpc2FibGVkLTlhRjJ1Z1wiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiNjMTNhM2FcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk5cIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCJ9LCBvbkNsaWNrOiAoKSA9PiB7dGhpcy5qb2luKCk7fX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUVycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pbigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmpvaW4odGhpcyk7XHJcbiAgICAgICAgLy90aGlzLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2Nyb2xsZXIgZnJvbSBcIi4uL3Njcm9sbGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2lkZWJhclZpZXcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NpZGViYXIsIGNvbnRlbnQsIHRvb2xzfSA9IHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aSB1aS1zdGFuZGFyZC1zaWRlYmFyLXZpZXdcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJSZWdpb24tVkZUVWtOIHNpZGViYXItcmVnaW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7a2V5OiBcInNpZGViYXJTY3JvbGxlclwiLCByZWY6IFwic2lkZWJhclNjcm9sbGVyXCIsIHNpZGViYXI6IHRydWUsIGZhZGU6IHNpZGViYXIuZmFkZSB8fCB0cnVlLCBkYXJrOiBzaWRlYmFyLmRhcmsgfHwgdHJ1ZX0sIHNpZGViYXIuY29tcG9uZW50KVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50UmVnaW9uLTNuRHVZeSBjb250ZW50LXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRUcmFuc2l0aW9uV3JhcC0zaHFPRVcgY29udGVudC10cmFuc2l0aW9uLXdyYXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcC0zWVpYZG0gY29udGVudC1yZWdpb24tc2Nyb2xsZXItd3JhcCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdC0yOE1TbjAgc2Nyb2xsZXJUcmFjay0xWklwc3ZcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyLTI2bmMxZSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlciBzY3JvbGxlclwiLCByZWY6IFwiY29udGVudFNjcm9sbGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudENvbHVtbi0yaHJJWUggY29udGVudENvbHVtbkRlZmF1bHQtMVZRa0dNIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sIGNvbnRlbnQuY29tcG9uZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLmNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUmVsb2FkSWNvbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xyXG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIiNkY2RkZGVcIixcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1yZWxvYWQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMub25DbGljayxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7d2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCJ9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6IFwibm9uZVwiLCBkOiBcIk0wIDBoMjR2MjRIMHpcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2Nyb2xsZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9zY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXlcclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXJIb3Jpem9udGFsKVswXVxyXG4gICAgICAgIGxldCBzY3JvbGxlck1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyUmVnaW9uU2Nyb2xsZXIpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9JHt0aGlzLnByb3BzLmZhZGUgPyBcIiBcIitzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlIDogXCJcIn1gO1xyXG4gICAgICAgIGxldCBzY3JvbGxlckNsYXNzID0gc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyK1wiIHNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNpZGViYXIpIHNjcm9sbGVyQ2xhc3MgKz0gYCAke3Njcm9sbGVyTW9kdWxlMi5zaWRlYmFyUmVnaW9uU2Nyb2xsZXJ9IHNpZGViYXItcmVnaW9uLXNjcm9sbGVyYFxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNvbnRlbnRDb2x1bW4pIHtcclxuICAgICAgICAgICAgc2Nyb2xsZXJDbGFzcyArPSBcIiBcIitzY3JvbGxlck1vZHVsZTIuY29udGVudFJlZ2lvblNjcm9sbGVyK1wiIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdWNrICovXHJcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXB9IGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRyYWNrfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHtjaGlsZHJlbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJ3cmFwXCIsIGNsYXNzTmFtZTogd3JhcHBlckNsYXNzfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJcIiwgcmVmOiBcInNjcm9sbGVyXCIsIGNsYXNzTmFtZTogc2Nyb2xsZXJDbGFzc30sXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIGkgIT09IDAgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wLCB7fSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZX0pKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL3N3aXRjaFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NldHRpbmdzR3JvdXAgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3RpdGxlLCBzZXR0aW5ncywgYnV0dG9ufSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uQ29tcG9uZW50ID0gYnV0dG9uID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwidGl0bGUtYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiBidXR0b24ub25DbGlja30sIGJ1dHRvbi50aXRsZSkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZX0pLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF0sIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShpZCwgY2hlY2tlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgICAgICAgfSldO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc1RpdGxlIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuLy9oMi0yZ1dFLW8gdGl0bGUtM3NaV1lRIHNpemUxNi0xNGNHejUgaGVpZ2h0MjAtbU8yZUlOIHdlaWdodFNlbWlCb2xkLU5KZXh6aSBkYS1oMiBkYS10aXRsZSBkYS1zaXplMTYgZGEtaGVpZ2h0MjAgZGEtd2VpZ2h0U2VtaUJvbGQgZGVmYXVsdENvbG9yLTFfYWpYMCBkYS1kZWZhdWx0Q29sb3IgbWFyZ2luVG9wNjAtM1BHYnRLIGRhLW1hcmdpblRvcDYwIG1hcmdpbkJvdHRvbTIwLTMycUlENyBkYS1tYXJnaW5Cb3R0b20yMFxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5cclxubGV0IGNsYXNzbmFtZXMgPSBbXVxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XHJcbiAgICBsZXQgY2xhc3NOYW1lID0gY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKG5hbWUrXCItXCIpKVxyXG4gICAgaWYoY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm5hbWUpWzBdXHJcbiAgICBjbGFzc25hbWVzLnB1c2goY2xhc3NOYW1lKVxyXG4gICAgcmV0dXJuIGNsYXNzTmFtZVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2hJdGVtIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmNoZWNrZWQgPSAhdGhpcy5wcm9wcy5jaGVja2VkO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgdGhpcy5wcm9wcy5jaGVja2VkKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IHt0ZXh0LCBpbmZvfSA9IHRoaXMucHJvcHMuZGF0YTtcclxuICAgICAgICBpZighY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKFwiYmV0YS1cIikpKXtcclxuICAgICAgICAgICAgY2xhc3NuYW1lcy5wdXNoKEJETW9kdWxlcy5nZXQoZSA9PiBlLmJldGEgJiYgKCFlLmNvbnRhaW5lciAmJiAhZS51c2VyU2V0dGluZ3NWb2ljZSkpWzBdLmJldGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucHJvcHMuZGF0YS5leHBlcmltZW50YWwpe1xyXG4gICAgICAgICAgICBpbmZvID0gW1xyXG4gICAgICAgICAgICAgICAgaW5mbyxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdXBcIiwge2NsYXNzTmFtZTogZ2V0Q2xhc3NOYW1lKFwiYmV0YVwiKX0sIFwiKEVYUEVSSU1FTlRBTClcIilcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZmxleCBmbGV4LXZlcnRpY2FsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXAgdWktc3dpdGNoLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC1ob3Jpem9udGFsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXBcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDMgbWFyZ2luLXJlc2V0IG1hcmdpbi1yZXNldCB1aS1mbGV4LWNoaWxkXCJ9LCB0ZXh0KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10ZXh0IHN0eWxlLWRlc2NyaXB0aW9uIG1hcmdpbi10b3AtNFwiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LCBpbmZvKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckhlYWRlciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJ9LCB0aGlzLnByb3BzLnRleHQsIHRoaXMucHJvcHMuYnV0dG9uKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVGFiQmFySXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnByb3BzLnNlbGVjdGVkIHx8IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogYHVpLXRhYi1iYXItaXRlbSR7dGhpcy5wcm9wcy5zZWxlY3RlZCA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWAsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnByb3BzLmlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhclNlcGFyYXRvciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLXNlcGFyYXRvciBtYXJnaW4tdG9wLTggbWFyZ2luLWJvdHRvbS04XCJ9KTtcclxuICAgIH1cclxufSIsIlwidXNlIHN0cmljdFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdFxyXG5cclxuY29uc3QgaW50ZXJ2YWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuSW50ZXJ2YWwpWzBdXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcG9uZW50LCBNZXNzYWdlcykge1xyXG4gICAgY2xhc3MgVGltZVJlbmRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgIHRoaXMuX2ludGVydmFsID0gbmV3IGludGVydmFsTW9kdWxlMS5JbnRlcnZhbCgpXHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbC5zdGFydCgxZTMsIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldFN0YXRlKHNlbGYuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbC5zdG9wKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShhY3Rpdml0eSl7XHJcbiAgICAgICAgICAgIGlmKGFjdGl2aXR5LnRpbWVzdGFtcHMuZW5kID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuZW5kICYmIGFjdGl2aXR5LnRpbWVzdGFtcHMuc3RhcnQgPT09IHRoaXMucHJvcHMudGltZXN0YW1wcy5zdGFydClyZXR1cm5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXRVcGRhdGVkVGltZSgpe1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHRoaXMucHJvcHMudGltZXN0YW1wc1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKSAvIDFlMztcclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLmVuZCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREaWZmKG5vdywgY2hlY2tVbml4KHRpbWVzdGFtcHMuZW5kKSAvIDFlMylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihudWxsICE9IHRpbWVzdGFtcHMuc3RhcnQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihjaGVja1VuaXgodGltZXN0YW1wcy5zdGFydCkgLyAxZTMsIG5vdylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaG91cnM6IDAsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzOiAwLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kczogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJUaW1lKG51bWJlciwgcmVtb3ZlWmVybyl7XHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gPT09IHVuZGVmaW5lZClyZW1vdmVaZXJvID0gZmFsc2VcclxuICAgICAgICAgICAgaWYocmVtb3ZlWmVybyAmJiBudW1iZXIgPD0gMClyZXR1cm4gLTFcclxuICAgICAgICAgICAgaWYobnVtYmVyIDwgMTApcmV0dXJuIFwiMFwiK251bWJlclxyXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXREaWZmKHRpbWVzdGFtcCwgbm93KXtcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gTWF0aC5tYXgobm93IC0gdGltZXN0YW1wLCAwKVxyXG4gICAgICAgICAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3IoaG91cnMpICUgNjBcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKGhvdXJzIC8gNjApICUgNjBcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiBNYXRoLmZsb29yKGhvdXJzIC8gMzYwMCkgJSAyNCxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXMsXHJcbiAgICAgICAgICAgICAgICBzZWNvbmRzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgICAgIGxldCB0aW1lc3RhbXBzID0gcHJvcHMudGltZXN0YW1wc1xyXG5cclxuICAgICAgICAgICAgbGV0IHVzZWRQcm9wcyA9IGZ1bmN0aW9uKHByb3BzLCBpdGVtcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gcHJvcHMpIHJldHVybiB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHt9XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWl0ZW1zLmluZGV4T2Yoa2V5KSA+PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wc1trZXldID0gcHJvcHNba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGltZXN0YW1wc1xyXG4gICAgICAgICAgICB9KHByb3BzLCBbXCJ0aW1lc3RhbXBzXCJdKVxyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdGF0ZVxyXG4gICAgICAgICAgICBsZXQgaG91cnMgPSBzdGF0ZS5ob3Vyc1xyXG4gICAgICAgICAgICBsZXQgbWludXRlcyA9IHN0YXRlLm1pbnV0ZXNcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBzdGF0ZS5zZWNvbmRzXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgaG91cnM6IHRoaXMucmVuZGVyVGltZShob3VycywgITApLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogdGhpcy5yZW5kZXJUaW1lKG1pbnV0ZXMpLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kczogdGhpcy5yZW5kZXJUaW1lKHNlY29uZHMpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuZW5kICE9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgT2JqZWN0LmFzc2lnbih7fSwgdXNlZFByb3BzLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogTWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfRU5ELmZvcm1hdChkYXRhKVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGltZXN0YW1wcy5zdGFydCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX1NUQVJULmZvcm1hdChkYXRhKVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVGltZVJlbmRlclxyXG59O1xyXG5cclxuZnVuY3Rpb24gY2hlY2tVbml4KGUpIHtcclxuICAgIHJldHVybiAoXCJcIiArIGUpLmxlbmd0aCA8IDEzID8gMWUzICogZSA6IGVcclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVG9vbHMgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IHRvb2xzTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9vbHNDb250YWluZXIpWzBdXHJcbiAgICAgICAgbGV0IGNvbnRhaW5lck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRhaW5lciAmJiBlLmNsb3NlQnV0dG9uICYmIGUuY2xvc2VCdXR0b25Cb2xkKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ0b29scy1jb250YWluZXIgXCIrdG9vbHNNb2R1bGUudG9vbHNDb250YWluZXJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ0b29scyBcIit0b29sc01vZHVsZS50b29sc30sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY29udGFpbmVyTW9kdWxlLmNvbnRhaW5lcn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYnRuLWNsb3NlIFwiK2NvbnRhaW5lck1vZHVsZS5jbG9zZUJ1dHRvbiwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFhTdmcsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZXNjLXRleHQgXCIrY29udGFpbmVyTW9kdWxlLmtleWJpbmR9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkVTQ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2xpY2spIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jbG9zZUJ1dHRvbiAmJiBlLmtleWJpbmRCb2xkKVswXS5jbG9zZUJ1dHRvbi5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmIChjbG9zZUJ1dHRvbikgY2xvc2VCdXR0b24uY2xpY2soKTtcclxuICAgIH1cclxufSIsIi8qKlxyXG4gKiBUb29sdGlwIHRoYXQgYXV0b21hdGljYWxseSBzaG93IGFuZCBoaWRlIHRoZW1zZWx2ZXMgb24gbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBldmVudHMuXHJcbiAqIFdpbGwgYWxzbyByZW1vdmUgdGhlbXNlbHZlcyBpZiB0aGUgbm9kZSB0byB3YXRjaCBpcyByZW1vdmVkIGZyb20gRE9NIHRocm91Z2hcclxuICogYSBNdXRhdGlvbk9ic2VydmVyLlxyXG4gKlxyXG4gKiBOb3RlIHRoaXMgaXMgbm90IHVzaW5nIERpc2NvcmQncyBpbnRlcm5hbHMgYnV0IG5vcm1hbCBET00gbWFuaXB1bGF0aW9uIGFuZCBlbXVsYXRlc1xyXG4gKiBEaXNjb3JkJ3Mgb3duIHRvb2x0aXBzIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuXHJcbiAqXHJcbiAqIEBtb2R1bGUgRW11bGF0ZWRUb29sdGlwXHJcbiAqIEB2ZXJzaW9uIDAuMC4xXHJcbiAqL1xyXG5cclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljIGRpc2FibGVkUG9pbnRlckV2ZW50cy0xcHRnVEJcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMjM3cHg7IGJvdHRvbTogNTFweDtcIj5cclxuLy9cdDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyB0b29sdGlwVG9wLVhERFN4eCB0b29sdGlwQmxhY2stUFBHNDd6IHRvb2x0aXBEaXNhYmxlUG9pbnRlckV2ZW50cy0zZWFCR05cIiBzdHlsZT1cIm9wYWNpdHk6IDE7IHRyYW5zZm9ybTogbm9uZTtcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHQ8ZGl2IGNsYXNzPVwidG9vbHRpcENvbnRlbnQtYnFWTFdLXCI+VXNlciBTZXR0aW5nczwvZGl2PlxyXG4vL1x0PC9kaXY+XHJcbi8vPC9kaXY+XHJcblxyXG4vLzxkaXYgY2xhc3M9XCJsYXllci12OUh5WWNcIiBzdHlsZT1cInRvcDogODYwcHg7IGxlZnQ6IDYzMi41cHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwVG9wLVhERFN4eFwiPlxyXG4vL1x0XHQ8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLXCI+PC9kaXY+XHJcbi8vXHRcdENoYW5nZWxvZ1xyXG4vL1x0PC9kaXY+XHJcbi8vPC9kaXY+XHJcbmxldCBUb29sdGlwQ2xhc3Nlc1xyXG5mdW5jdGlvbiBnZXRUb29sdGlwQ2xhc3Nlcygpe1xyXG5cdGlmKFRvb2x0aXBDbGFzc2VzKXJldHVybiBUb29sdGlwQ2xhc3Nlc1xyXG5cdHJldHVybiBUb29sdGlwQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwidG9vbHRpcFwiLCBcInRvb2x0aXBCbGFja1wiKTtcclxufVxyXG5sZXQgVG9vbHRpcExheWVyc1xyXG5mdW5jdGlvbiBnZXRUb29sdGlwTGF5ZXJzKCl7XHJcblx0aWYoVG9vbHRpcExheWVycylyZXR1cm4gVG9vbHRpcExheWVyc1xyXG5cdHJldHVybiBUb29sdGlwTGF5ZXJzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJsYXllclwiLCBcImxheWVyQ29udGFpbmVyXCIpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDbGFzcyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XHJcbiAgICBjb25zdCB1cHBlckNhc2UgPSBzaWRlT3JDb2xvclswXS50b1VwcGVyQ2FzZSgpICsgc2lkZU9yQ29sb3Iuc2xpY2UoMSk7XHJcbiAgICBjb25zdCB0b29sdGlwQ2xhc3MgPSBnZXRUb29sdGlwQ2xhc3NlcygpW2B0b29sdGlwJHt1cHBlckNhc2V9YF07XHJcbiAgICBpZiAodG9vbHRpcENsYXNzKSByZXR1cm4gdG9vbHRpcENsYXNzO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBjbGFzc0V4aXN0cyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XHJcbiAgICByZXR1cm4gZ2V0Q2xhc3Moc2lkZU9yQ29sb3IpID8gdHJ1ZSA6IGZhbHNlO1xyXG59O1xyXG5cclxuY29uc3QgdG9QeCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9cHhgO1xyXG59O1xyXG5cclxuLyogPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkYS1sYXllclwiIHN0eWxlPVwibGVmdDogMjM0LjVweDsgYm90dG9tOiA1MXB4O1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIGRhLXRvb2x0aXAgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3elwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcksgZGEtdG9vbHRpcFBvaW50ZXJcIj48L2Rpdj5cclxuICAgICAgICBVc2VyIFNldHRpbmdzXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+ICovXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRlZFRvb2x0aXAge1xyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQGNvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8alF1ZXJ5KX0gbm9kZSAtIERPTSBub2RlIHRvIG1vbml0b3IgYW5kIHNob3cgdGhlIHRvb2x0aXAgb25cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlwIC0gc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9YmxhY2tdIC0gY29ycmVsYXRlcyB0byB0aGUgZGlzY29yZCBzdHlsaW5nL2NvbG9ycyAoYmxhY2ssIGJyYW5kLCBncmVlbiwgZ3JleSwgcmVkLCB5ZWxsb3cpXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNpZGU9dG9wXSAtIGNhbiBiZSBhbnkgb2YgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XHJcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmV2ZW50RmxpcD1mYWxzZV0gLSBwcmV2ZW50cyBtb3ZpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIG9wcG9zaXRlIHNpZGUgaWYgaXQgaXMgdG9vIGJpZyBvciBnb2VzIG9mZnNjcmVlblxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kaXNhYmxlZD1mYWxzZV0gLSB3aGV0aGVyIHRoZSB0b29sdGlwIHNob3VsZCBiZSBkaXNhYmxlZCBmcm9tIHNob3dpbmcgb24gaG92ZXJcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3Rvcihub2RlLCB0ZXh0LCBvcHRpb25zID0ge30pIHtcclxuXHRcdGNvbnN0IHtzdHlsZSA9IFwiYmxhY2tcIiwgc2lkZSA9IFwidG9wXCIsIHByZXZlbnRGbGlwID0gZmFsc2UsIGRpc2FibGVkID0gZmFsc2V9ID0gb3B0aW9ucztcclxuXHRcdHRoaXMubm9kZSA9IG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcclxuICAgICAgICB0aGlzLmxhYmVsID0gdGV4dDtcclxuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGUudG9Mb3dlckNhc2UoKTtcclxuXHRcdHRoaXMuc2lkZSA9IHNpZGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLnByZXZlbnRGbGlwID0gcHJldmVudEZsaXA7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG5cclxuICAgICAgICBpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc2lkZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFNpZGUgJHt0aGlzLnNpZGV9IGRvZXMgbm90IGV4aXN0LmApO1xyXG5cdFx0aWYgKCFjbGFzc0V4aXN0cyh0aGlzLnN0eWxlKSkgcmV0dXJuIFV0aWxzLmVycihcIkVtdWxhdGVkVG9vbHRpcFwiLCBgU3R5bGUgJHt0aGlzLnN0eWxlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdFxyXG5cdFx0dGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwTGF5ZXJzKCkubGF5ZXIgKyBcIiBcIiArIGdldFRvb2x0aXBMYXllcnMoKS5kaXNhYmxlZFBvaW50ZXJFdmVudHM7XHJcblxyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cclxuXHRcdHRoaXMubGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMubGFiZWxFbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcENvbnRlbnRcclxuXHJcblx0XHRjb25zdCBwb2ludGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHRwb2ludGVyRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBQb2ludGVyO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuYXBwZW5kKHBvaW50ZXJFbGVtZW50KTtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuYXBwZW5kKHRoaXMubGFiZWxFbGVtZW50KTtcclxuXHRcdHRoaXMuZWxlbWVudC5hcHBlbmQodGhpcy50b29sdGlwRWxlbWVudCk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zaG93KCk7XHJcblxyXG5cdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuXHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKHRoaXMubm9kZSkgPiAtMTtcclxuXHRcdFx0XHRcdGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKHRoaXMubm9kZSkpO1xyXG5cdFx0XHRcdFx0aWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaGlkZSgpO1xyXG5cdFx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb250YWluZXIgd2hlcmUgdGhlIHRvb2x0aXAgd2lsbCBiZSBhcHBlbmRlZC4gKi9cclxuICAgIGdldCBjb250YWluZXIoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLnBvcG91dHMpWzBdLnBvcG91dHMuc3BsaXQoXCIgXCIpWzBdK1wiIH4gLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyQ29udGFpbmVyKVswXS5sYXllckNvbnRhaW5lci5zcGxpdChcIiBcIilbMF0pOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIGFib3ZlIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0Fib3ZlKCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPj0gMDsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBiZWxvdyB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dCZWxvdygpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0ICsgdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA8PSBVdGlscy5zY3JlZW5IZWlnaHQ7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gdG8gdGhlIGxlZnQgb2YgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93TGVmdCgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbGVtZW50ICovXHJcblx0Z2V0IGNhblNob3dSaWdodCgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIDw9IFV0aWxzLnNjcmVlbldpZHRoOyB9XHJcblxyXG4gICAgLyoqIEhpZGVzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWxlYXZlLiAqL1xyXG5cdGhpZGUoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xyXG5cdH1cclxuXHJcbiAgICAvKiogU2hvd3MgdGhlIHRvb2x0aXAuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIG1vdXNlZW50ZXIuIFdpbGwgYXR0ZW1wdCB0byBmbGlwIGlmIHBvc2l0aW9uIHdhcyB3cm9uZy4gKi9cclxuXHRzaG93KCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMubGFiZWw7XHJcblx0XHR0aGlzLmNvbnRhaW5lci5hcHBlbmQodGhpcy5lbGVtZW50KTtcclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwidG9wXCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0Fib3ZlIHx8ICghdGhpcy5jYW5TaG93QWJvdmUgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93QmVsb3coKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwiYm90dG9tXCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0JlbG93IHx8ICghdGhpcy5jYW5TaG93QmVsb3cgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93QWJvdmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwibGVmdFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dMZWZ0IHx8ICghdGhpcy5jYW5TaG93TGVmdCAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93TGVmdCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd1JpZ2h0KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInJpZ2h0XCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd1JpZ2h0IHx8ICghdGhpcy5jYW5TaG93UmlnaHQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd1JpZ2h0KCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93TGVmdCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCBhYm92ZSB0aGUgbm9kZS4gKi9cclxuXHRzaG93QWJvdmUoKSB7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJ0b3BcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLSAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJIb3Jpem9udGFsbHkoKTtcclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYmVsb3cgdGhlIG5vZGUuICovXHJcblx0c2hvd0JlbG93KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwiYm90dG9tXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0ICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBsZWZ0IG9mIHRoZSBub2RlLiAqL1xyXG5cdHNob3dMZWZ0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwibGVmdFwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLSAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSByaWdodCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93UmlnaHQoKSB7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJyaWdodFwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB0aGlzLm5vZGUub2Zmc2V0V2lkdGggKyAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5KCk7XHJcblx0fVxyXG5cclxuXHRjZW50ZXJIb3Jpem9udGFsbHkoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZWNlbnRlciA9IHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgKHRoaXMubm9kZS5vZmZzZXRXaWR0aCAvIDIpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeChub2RlY2VudGVyIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpKSk7XHJcblx0fVxyXG5cclxuXHRjZW50ZXJWZXJ0aWNhbGx5KCkge1xyXG5cdFx0Y29uc3Qgbm9kZWNlbnRlciA9IHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyAodGhpcy5ub2RlLm9mZnNldEhlaWdodCAvIDIpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMikpKTtcclxuXHR9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi90b29sdGlwXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCB0ZXh0ID0gXCJcIn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IEJEVjIucmVhY3REb20uZmluZERPTU5vZGUodGhpcyk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAodGhpcy5ub2RlLCB0ZXh0LCB7c3R5bGUsIHNpZGV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnRvb2x0aXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19YU3ZnIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge3htbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDEyIDEyXCIsIHN0eWxlOiB7d2lkdGg6IFwiMThweFwiLCBoZWlnaHQ6IFwiMThweFwifX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZ1wiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiYWNrZ3JvdW5kXCIsIGZpbGw6IFwibm9uZVwiLCBmaWxsUnVsZTogXCJldmVub2RkXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMCAwaDEydjEySDBcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7Y2xhc3NOYW1lOiBcImZpbGxcIiwgZmlsbDogXCIjZGNkZGRlXCIsIGQ6IFwiTTkuNSAzLjIwNUw4Ljc5NSAyLjUgNiA1LjI5NSAzLjIwNSAyLjVsLS43MDUuNzA1TDUuMjk1IDYgMi41IDguNzk1bC43MDUuNzA1TDYgNi43MDUgOC43OTUgOS41bC43MDUtLjcwNUw2LjcwNSA2XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWtkaXJwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vZHVsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJub2RlLWZldGNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmltcmFmXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInlhdXpsXCIpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/BetterDiscordApp/js/main.min.js b/BetterDiscordApp/js/main.min.js index 1eee267..f3f67ca 100644 --- a/BetterDiscordApp/js/main.min.js +++ b/BetterDiscordApp/js/main.min.js @@ -1 +1 @@ -module.exports=function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("node-fetch")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("rimraf")},function(e,t){e.exports=require("yauzl")},function(e,t){e.exports=require("mkdirp")},function(e,t,n){"use strict";n.r(t);var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return ae})),n.d(s,"currentDiscordVersion",(function(){return le})),n.d(s,"minSupportedVersion",(function(){return ce})),n.d(s,"bbdVersion",(function(){return de})),n.d(s,"bbdChangelog",(function(){return ue})),n.d(s,"settings",(function(){return he})),n.d(s,"defaultCookie",(function(){return pe})),n.d(s,"settingsCookie",(function(){return me})),n.d(s,"settingsRPC",(function(){return ge})),n.d(s,"defaultRPC",(function(){return fe})),n.d(s,"bdpluginErrors",(function(){return be})),n.d(s,"bdthemeErrors",(function(){return ye})),n.d(s,"bdConfig",(function(){return ve})),n.d(s,"bdthemes",(function(){return we})),n.d(s,"bdplugins",(function(){return Ce})),n.d(s,"pluginCookie",(function(){return Ee})),n.d(s,"themeCookie",(function(){return xe}));var r=n(0);const o=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete o.m.__extra_id__,delete o.c.__extra_id__;const i=e=>{for(const t in o.c)if(o.c.hasOwnProperty(t)){const n=o.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};let a={find:i,findAll:e=>{const t=[];for(const n in o.c)if(o.c.hasOwnProperty(n)){const s=o.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},findByProps:(...e)=>i(t=>e.every(e=>void 0!==t[e])),findByPrototypes:(...e)=>i(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>i(t=>t.displayName===e)};var l=a;window.Lightcord.BetterDiscord.WebpackModules=a;class c{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(c.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(n=>{const s=document.createElement("script");s.id=e,s.src=t,s.type="text/javascript",s.onload=n,document.head.append(s)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:n}){const s=performance.now();requestAnimationFrame((function r(o){let i=(o-s)/n;i>1&&(i=1);const a=e(i);t(a),i<1&&requestAnimationFrame(r)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const n=document.createElement("template");n.innerHTML=e;const s=n.content.cloneNode(!0);return t?s:s.childNodes.length>1?s.childNodes:s.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),n=document.createElement("span");return n.append(t),t.nodeValue=e,n.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,n){return t=t.toString().split(" ").filter(e=>e),void 0!==n?t.forEach(t=>e.classList.toggle(t,n)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,n){return e.classList.replace(t,n),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const n=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)n.push(e=e.nextElementSibling);return n}static previous(e,t=""){const n=e.previousElementSibling;return t?n&&n.matches(t)?n:null:n}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const n=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)n.push(e=e.previousElementSibling);return n}static indexInParent(e){const t=e.parentNode.childNodes;let n=0;for(let s=0;s "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const n=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)n.push(e=e.parentElement.closest(t));else for(;e.parentElement;)n.push(e=e.parentElement);return n}static parentsUntil(e,t){const n=[];for(;e.parentElement&&!e.parentElement.matches(t);)n.push(e=e.parentElement);return n}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(n=>n!=e&&n.matches(t))}static css(e,t,n){return void 0===n?global.getComputedStyle(e)[t]:(e.style[t]=n,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static once(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,a))}:function(t){s(t),e.removeEventListener(r,a)};e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static __offAll(e,t){const[n,s]=e.split(".");let r=e=>e.event==n,o=e=>e;t&&(r=e=>e.event==n&&e.element==t,o=e=>e.element==t);const i=this.listeners[s]||[],a=n?i.filter(r):i.filter(o);for(let e=0;e{this.observer.unsubscribe(s),t()};return this.observer.subscribe(s,t=>{const s=Array.from(n?t.addedNodes:t.removedNodes),r=s.indexOf(e)>-1,o=s.some(t=>t.contains(e));return r||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let n=0;ne.channelTextArea&&e.titleWrapper)[0].channelTextArea.split(" ")[0]+" textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static log(e,t){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #3a71c1; font-weight: 700;","color: #3a71c1;","")}static warn(e,t){console.warn(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #E8A400; font-weight: 700;","color: #E8A400;","")}static err(e,t,n){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: red; font-weight: 700;","color: red;",""),n&&(console.groupCollapsed("%cError: "+n.message,"color: red;"),console.error(n.stack),console.groupEnd())}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static suppressErrors(e,t){return(...n)=>{try{return e(...n)}catch(e){this.err("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,n){const{before:s,after:r,instead:o,once:i=!1,silent:a=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const u=e[t];let h=!1;const p=()=>{a||console.log("unpatch",t,"of",c),h=!0};return e[t]=function(){if(h)return u.call(this,...arguments);const n={thisObject:this,methodArguments:arguments,cancelPatch:p,originalMethod:u,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=d.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&d.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&d.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return i&&p(),n.returnValue},Object.assign(e[t],u),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=u,e[t].toString=function(){return u.toString()}),p}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=i.some(t=>t.contains(e));(a||l)&&(n.disconnect(),t())}});n.observe(document.body,{subtree:!0,childList:!0})}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce((function(e,t){return e&&e[t]}),e)}static showToast(e,t={}){if(!document.querySelector(".bd-toasts")){const e=document.querySelector("."+BDModules.get(e=>e.sidebar&&e.hasNotice)[0].sidebar.split(" ")[9]+" + div")||null,t=e?e.querySelector("."+BDModules.get(e=>e.membersWrap)[0].membersWrap):null,n=e?e.querySelector("form"):null,s=e?e.getBoundingClientRect().left:310,r=t?t.getBoundingClientRect().left:0,o=r?r-e.getBoundingClientRect().left:d.screenWidth-s-240,i=n?n.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",s+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",i+"px"),document.querySelector("#app-mount").appendChild(a)}const{type:n="",icon:s=!0,timeout:r=3e3}=t,o=document.createElement("div");o.classList.add("bd-toast"),n&&o.classList.add("toast-"+n),n&&s&&o.classList.add("icon"),o.innerText=e,document.querySelector(".bd-toasts").appendChild(o),setTimeout(()=>{o.classList.add("closing"),setTimeout(()=>{o.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},r)}static alert(e,t){let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),c.query("#app-mount").append(o);const i=[];return{close:()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{i.push(e)}}}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
`);function i(e){const t=c.createElement('
');for(const n of e){const e=c.createElement(`
\n
${n.name?n.name:n.file}
\n
${n.message}
\n \n
`);t.append(e),n.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),d.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const a=[i(e),i(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&c.removeClass(t,"selected"),c.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(a[c.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),c.query("#app-mount").append(o),e.length?o.querySelector(".tab-bar-item").click():o.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=l.findByProps("push","update","pop","popWithKey"),n=l.findByProps("fixed","improved"),s=l.findByDisplayName("Text"),r=l.findByProps("Child"),o=l.findByProps("Tags","default"),i=l.find(e=>e.defaultProps&&0==e.defaultProps.selectable),a=l.findByProps("defaultRules","parse");if(!(i&&t&&n&&s&&r&&o&&a))return;const{image:c="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:d="",changes:u=[],title:h="BandagedBD",subtitle:p=`v${de}`,footer:m}=e,g=ie.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,a.parse(d)));for(let e=0;eg("li",null,a.parse(e))));f.push(o)}const b=function(){return g(r.Child,{grow:1,shrink:1},g(o.default,{tag:o.Tags.H4},h),g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},p))},y=()=>{const e=l.find(e=>"Anchor"==e.displayName),n=l.findByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),ie.joinBD2()},i=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),a=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return g(r.Child,{grow:1,shrink:1},m||a)};return t.push((function(e){return g(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:y,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=l.findByProps("openModal","updateModal"),r=l.findByDisplayName("Markdown"),o=l.findByDisplayName("ConfirmModal");if(!s||!o||!r)return d.alert(e,t);const i=()=>{},{onConfirm:a=i,onCancel:c=i,confirmText:u="Okay",cancelText:h="Cancel",danger:p=!1,key:m}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?ie.React.createElement(r,null,e):e),s.openModal(n=>ie.React.createElement(o,Object.assign({header:e,red:p,confirmText:u,cancelText:h,onConfirm:a,onCancel:c},n),t),{modalKey:m})}static removeDa(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}}d.showToast=d.suppressErrors(d.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=d;const u=window.require,h=n(2),p=n(1),m=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var g=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={},window.Lightcord.BetterDiscord.DataStore=this}initialize(){try{h.existsSync(this.BDFile)||h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary");const e=JSON.parse(h.readFileSync(this.BDFile,"binary"));if(e.hasOwnProperty("settings")&&(this.data=e),!h.existsSync(this.settingsFile))return;let t=u(this.settingsFile);h.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[m]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),d.alert("Corrupt Storage","The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.")}}get injectionPath(){return this._injectionPath=null}get configFile(){return this._configFile||(this._configFile=p.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=p.resolve(ve.dataPath,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=p.resolve(ve.dataPath,"bdsettings.json"))}getPluginFile(e){return p.resolve(se.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[m][e]||null}setSettingGroup(e,t){this.data.settings[m][e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:h.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(h.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]):void 0}setPluginData(e,t,n){void 0!==n&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=n,h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary"))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary")}};const f=n(5);var b=new class extends f{constructor(){super(),window.Lightcord.BetterDiscord.BDEvents=this}dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class y{constructor(){window.Lightcord.BetterDiscord.PluginModule=this}get folder(){return se.pluginsFolder}}y.prototype.loadPlugins=async function(){this.loadPluginData(),be.splice(0,0,...await se.loadPlugins());const e=Object.keys(Ce);for(let t=0;tsetTimeout(e,10))}this.savePluginData(),n(0).remote.getCurrentWebContents().on("did-navigate-in-page",this.channelSwitch.bind(this))},y.prototype.startPlugin=function(e,t=!1){try{Ce[e].plugin.start(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has started.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be started.`,{type:"error"}),Ee[e]=!1,this.savePluginData(),d.err("Plugins",e+" could not be started.",n)}},y.prototype.stopPlugin=function(e,t=!1){try{Ce[e].plugin.stop(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has stopped.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be stopped.`,{type:"error"}),d.err("Plugins",Ce[e].plugin.getName()+" could not be stopped.",n)}},y.prototype.enablePlugin=function(e,t=!1){Ee[e]||(Ee[e]=!0,this.savePluginData(),this.startPlugin(e,t))},y.prototype.enable=function(e,t=!1){return this.enablePlugin(e,t)},y.prototype.disablePlugin=function(e,t=!1){Ee[e]&&(Ee[e]=!1,this.savePluginData(),this.stopPlugin(e,t))},y.prototype.disable=function(e,t=!1){return this.disablePlugin(e,t)},y.prototype.togglePlugin=function(e){Ee[e]?this.disablePlugin(e):this.enablePlugin(e)},y.prototype.toggle=function(e,t=!1){return this.togglePlugin(e,t)},y.prototype.loadPlugin=async function(e){const t=await se.loadContent(e,"plugin");if(t)return me["fork-ps-1"]&&d.showContentErrors({plugins:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(Ce).find(t=>console.log(t.filename,e)||t.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){me["fork-ps-1"]&&d.showContentErrors({plugins:[e]})}d.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),b.dispatch("plugin-loaded",n.getName())},y.prototype.unloadPlugin=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const n=t.plugin.getName();Ee[n]&&this.disablePlugin(n,!0);const s=se.unloadContent(Ce[n].filename,"plugin");if(delete Ce[n],s)return me["fork-ps-1"]&&d.showContentErrors({plugins:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("plugin-unloaded",n)},y.prototype.delete=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(se.pluginsFolder,t.filename);n(2).unlinkSync(s)},y.prototype.reloadPlugin=async function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=Ee[n];s&&this.stopPlugin(n,!0);const r=await se.reloadContent(Ce[n].filename,"plugin");if(r)return me["fork-ps-1"]&&d.showContentErrors({plugins:[r]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,r);Ce[n].plugin.load&&"function"==typeof Ce[n].plugin.load&&Ce[n].plugin.load(),s&&this.startPlugin(n,!0),d.log("ContentManager",`${n} v${Ce[n].plugin.getVersion()} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${Ce[n].plugin.getVersion()} was reloaded.`,{type:"success"}),b.dispatch("plugin-reloaded",n)},y.prototype.reload=function(e){return this.reloadPlugin(e)},y.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const s=n(1).resolve(se.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(`${s}`)},y.prototype.updatePluginList=function(){const e=se.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},y.prototype.loadPluginData=function(){const e=g.getSettingGroup("plugins");e&&Object.assign(Ee,e)},y.prototype.savePluginData=function(){g.setSettingGroup("plugins",Ee)},y.prototype.newMessage=function(){const e=Object.keys(Ce);for(let t=0;t{if(this.disabled)return;this.show();const e=new MutationObserver(t=>{t.forEach(t=>{const n=Array.from(t.removedNodes),s=n.indexOf(this.node)>-1,r=n.some(e=>e.contains(this.node));(s||r)&&(this.hide(),e.disconnect())})});e.observe(document.body,{subtree:!0,childList:!0})}),this.node.addEventListener("mouseleave",()=>{this.hide()})}get container(){return document.querySelector("."+BDModules.get(e=>e.popouts)[0].popouts.split(" ")[0]+" ~ ."+BDModules.get(e=>e.layerContainer)[0].layerContainer.split(" ")[0])}get canShowAbove(){return this.node.getBoundingClientRect().top-this.element.offsetHeight>=0}get canShowBelow(){return this.node.getBoundingClientRect().top+this.node.offsetHeight+this.element.offsetHeight<=d.screenHeight}get canShowLeft(){return this.node.getBoundingClientRect().left-this.element.offsetWidth>=0}get canShowRight(){return this.node.getBoundingClientRect().left+this.node.offsetWidth+this.element.offsetWidth<=d.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${k().tooltip} ${M(this.style)}`,this.labelElement.textContent=this.label,this.container.append(this.element),"top"==this.side&&(this.canShowAbove||!this.canShowAbove&&this.preventFlip?this.showAbove():this.showBelow()),"bottom"==this.side&&(this.canShowBelow||!this.canShowBelow&&this.preventFlip?this.showBelow():this.showAbove()),"left"==this.side&&(this.canShowLeft||!this.canShowLeft&&this.preventFlip?this.showLeft():this.showRight()),"right"==this.side&&(this.canShowRight||!this.canShowRight&&this.preventFlip?this.showRight():this.showLeft())}showAbove(){this.tooltipElement.classList.add(M("top")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(M("bottom")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(M("left")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(M("right")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left+this.node.offsetWidth+10)),this.centerVertically()}centerHorizontally(){const e=this.node.getBoundingClientRect().left+this.node.offsetWidth/2;this.element.style.setProperty("left",N(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",N(e-this.element.offsetHeight/2))}}var P=class extends React.Component{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=ie.reactDom.findDOMNode(this),this.tooltip=new L(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}},A=n(2),T=n(1);const R={},$={};var j=new class{constructor(){window.Lightcord.BetterDiscord.PluginCertifier=this}patch(e,t){process.nextTick(()=>{!function(e,t){if(!document.getElementById(t))return;if(!e.url.startsWith("https://cdn.discordapp.com/"))return document.getElementById(t).remove();if(!e.filename.endsWith(".plugin.js")&&!e.filename.endsWith(".theme.css"))return document.getElementById(t).remove();E()(e.url,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(n=>{if(200!==n.status)throw new Error("File doesn't exist.");const s=w.createHash("sha256");let o=Buffer.alloc(0);n.body.on("data",e=>{o=Buffer.concat([o,e]),s.update(e)}),n.body.on("end",()=>{const n=s.digest("hex");$[e.url]=n,O[n]=e.url,_(n,o,e.filename,n=>{!function(e,t,n){const s=document.getElementById(e);if(!s||s.childNodes.length>0)return;F||(F=BDModules.get(e=>e.flowerStarContainer)[0]);W||(W=BDModules.get(e=>e.childContainer)[0]);if(t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let o of s.children)"A"===o.tagName?o.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),d.showConfirmationModal("Are you sure you want to download this ?","The "+t.type.toLowerCase()+" **"+n+"** might be dangerous **("+t.harm+")**. \n\n**We don't recommand to download it**. However, you can still do it below.",{confirmText:"Download Anyway",cancelText:"Don't !",danger:!0,onCancel:()=>{},onConfirm:()=>{r.remote.shell.openExternal(o.href)}})}):["div"].includes(o.tagName.toLowerCase())&&e(o)};e(s.parentNode)}catch(e){console.error(e)}ie.reactDom.render(ie.react.createElement(P,{text:t.type+" "+t.name+" is potentially dangerous."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"}},ie.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 40 32"},ie.react.createElement("rect",{x:"0",y:"0",width:"32",height:"32",mask:"url(#svg-mask-avatar-status-round-32)",fill:"#f04747",mask:"url(#svg-mask-status-dnd)",className:BDModules.get(e=>e.pointerEvents)[0].pointerEvents})))),s)}else if(t.official){s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},ie.react.createElement("path",{fill:"currentColor","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically download and load this "+t.type.toLowerCase()+". You must enable it in the settings.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}else{s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" is certified by Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#4f545c","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically install and launch this "+t.type.toLowerCase()+". You don't have anything to do.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];console.log(e),E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);console.log(s),Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}}(t,n,e.filename)},()=>{let e=document.getElementById(t);e&&e.remove()})})}).catch(()=>{})}(e,t)})}start(){}isTrusted(e){return R[e]&&!R[e].suspect}};const O={};function _(e,t,n,s,o){if(console.log(`File: ${n} hash: ${e}`),R[e]){const t=R[e];s(t)}else E()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+e,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(async r=>{if(200!==r.status)return n.endsWith(".theme.css")?o(e):void function(e,t,n,s,r){t=t.toString("utf8");let o=!1;for(let e of t.split(/[^\w\d]+/g)){for(let t of["token","email","phone","MFA","2fa","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())&&"domtokenlist"===!e.toLowerCase()){console.log(t,e),o="token stealer/virus";break}if(o)break}if(!o){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(o="obfuscation/hidden code"),!o){const t=[/_0x\w{4}\('0x[\dabcdef]+'\)/g,/_0x\w{4}\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g,/\w+\('0x[\dabcdef]+'\)/g,/\w+\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g];for(let n of t){if(o)break;n.test(e)&&(o="obfuscation/hidden code")}}}if(!o)return s(e);R[e]={suspect:!0,name:O[e].split("/").pop(),type:O[e].endsWith(".js")?"Plugin":"Theme",harm:o,hash:e,filename:r},console.log(`Found potentially dangerous ${R[e].type.toLowerCase()}: ${R[e].name}`),n(R[e])}(e,t,s,o,n);const i=await r.json();i.hash=e,i.filename=n,R[e]=i,s(i)}).catch(console.error)}function I(e,t,n=(e=>{}),s=!1){const r=w.createHash("sha256");let o=Buffer.alloc(0);Object(A.createReadStream)(e).on("data",e=>{o=Buffer.concat([o,e]),r.update(e)}).on("end",()=>{const i=r.digest("hex");if(O[i]=e,s&&te[i]){let e=te[i];if(!(e.timestampe.flowerStarContainer)[0],W=BDModules.get(e=>e.childContainer)[0];function z(e){let t=[];return Object.keys(e).forEach(n=>{t.push([n,e[n]])}),t}let H=null,U=null;function q(){H=[w.randomBytes(16).toString("base64"),w.randomBytes(32).toString("base64")]}function G(e){let t=[Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")],n=w.createCipheriv("aes-256-cbc",...t),s=n.update(Buffer.from(e,"utf8"));return s=Buffer.concat([s,n.final()]),s.toString("base64")}window.Lightcord.Api.ensureExported(e=>e.ObjectStorage).then(e=>{let t=e.impl;U=function(){t.set("PluginCertifierKeyEncryption__",btoa(JSON.stringify(H)))},setInterval(()=>{U()},1e5);try{let e=function(e){try{return JSON.parse(e)}catch(e){return e instanceof Error?new Error(e):e}}(atob(t.get("PluginCertifierKeyEncryption__")));if(e instanceof Error||!Array.isArray(e)||2!==e.length||e.find(e=>"string"!=typeof e)||16!==Buffer.from(e[0],"base64").length||32!==Buffer.from(e[1],"base64").length)return q(),void U();H=e}catch(e){q(),U()}});n(5);const V=n(1),J=n(2),Z=n(6).Module;Z.globalPaths.push(V.resolve(n(0).remote.app.getAppPath(),"node_modules"));class Y extends Error{constructor(e){super(e),this.name="MetaError"}}const K=Z._extensions[".js"],X=Z._extensions[".css"]?Z._extensions[".css"]:()=>null,Q=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,ee=/^\\@/;let te={},ne=!1;var se=new class{constructor(){this.timeCache={},this.watchers={}}patchExtensions(){ne||(ne=!0,Z._extensions[".js"]=this.getContentRequire("plugin"),Z._extensions[".css"]=this.getContentRequire("theme"))}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=J.realpathSync(V.resolve(ve.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=J.realpathSync(V.resolve(ve.dataPath+"themes/")))}loadAddonCertifierCache(){if("string"!=typeof g.getSettingGroup("PluginCertifierHashes"))g.setSettingGroup("PluginCertifierHashes",G("{}"));else try{te=JSON.parse(function(e){try{let t=w.createDecipheriv("aes-256-cbc",Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")),n=t.update(Buffer.from(e,"base64"));return n=Buffer.concat([n,t.final()]),n.toString("utf8")}catch(e){return"{}"}}(g.getSettingGroup("PluginCertifierHashes")))}catch(e){g.setSettingGroup("PluginCertifierHashes",G("{}")),te={}}Object.keys(te).forEach(e=>{let t=te[e];if(!t||"object"!=typeof t||Array.isArray(t))return delete te[e];let n=[{key:"timestamp",type:"number"},{key:"result",type:"object"},{key:"hash",type:"string"}];for(let s of n)if(!(s.key in t)||typeof t[s.key]!==s.type)return void delete te[e];t.hash===e?t.result.suspect&&delete te[e]:delete te[e]}),this.saveAddonCache()}saveAddonCache(){g.setSettingGroup("PluginCertifierHashes",G(JSON.stringify(te)))}watchContent(e){if(this.watchers[e])return;const t="plugin"===e,n=t?this.pluginsFolder:this.themesFolder,s=t?".plugin.js":".theme.css";this.watchers[e]=J.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{J.statSync(V.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?v.unloadPlugin(r):oe.unloadTheme(r)}if(!J.statSync(V.resolve(n,r)).isFile())return;const o=J.statSync(V.resolve(n,r));o&&o.mtime&&o.mtime.getTime()&&"number"==typeof o.mtime.getTime()&&this.timeCache[r]!=o.mtime.getTime()&&(this.timeCache[r]=o.mtime.getTime(),"rename"==e&&(t?await v.loadPlugin(r):await oe.loadTheme(r)),"change"==e&&(t?await v.reloadPlugin(r):await oe.reloadTheme(r)))})}unwatchContent(e){this.watchers[e]&&(this.watchers[e].close(),delete this.watchers[e])}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new Y("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],n=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//"));if(t.indexOf("META")<0)throw new Y("META was not found.");const s=d.testJSON(n);if(!s)throw new Y("META could not be parsed.");if(!s.name)throw new Y("META missing name data.");return s.format="json",s}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],n={};let s="",r="";for(const e of t.split(Q))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){n[s]=r;const t=e.indexOf(" ");s=e.substr(1,t-1),r=e.substr(t+1)}else r+=" "+e.replace("\\n","\n").replace(ee,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?K:X;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,i=V.resolve(o,V.basename(r));if(!J.existsSync(i)||r!==J.realpathSync(i))return Reflect.apply(s,this,arguments);let a=J.readFileSync(r,"utf8");a=d.stripBOM(a);const l=J.statSync(r),c=n.extractMeta(a);if(c.filename=V.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=a,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),a=`module.exports = ${JSON.stringify(c)};`),t){e._compile(a,e.filename),!d.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,a=""):a+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`}e._compile(a,r)}}makePlaceholderPlugin(e){return{plugin:{start:()=>{},getName:()=>e.name||e.filename,getAuthor:()=>"???",getDescription:()=>e.message?e.message:"This plugin was unable to be loaded. Check the author's page for updates.",getVersion:()=>"???"},name:e.name||e.filename,filename:e.filename,source:e.source?e.source:"",website:e.website?e.website:""}}async loadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t,s=n?this.pluginsFolder:this.themesFolder;if(me["fork-ps-6"]){let t=await new Promise(t=>{I(V.resolve(s,e),e=>{console.log(e),t(e)},n=>{t({suspect:!1,hash:n,filename:e,name:e})},!0)});if(t&&(te[t.hash]={timestamp:Date.now(),hash:t.hash,result:t},this.saveAddonCache(),t.suspect))return{name:e,file:e,message:"This plugin might be dangerous ("+t.harm+").",error:new Error("This plugin might be dangerous ("+t.harm+").")}}try{window.require(V.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=window.require(V.resolve(s,e));if(!r.name)return{name:e,file:e,message:"Cannot escape the ID.",error:{message:"Cannot read property 'replace' of undefined",stack:"Cannot read property 'replace' of undefined"}};if(r.id=d.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete Ce[r.plugin.getName()],Ce[r.plugin.getName()]=r}catch(t){return{name:e,file:e,message:"Could not be constructed.",error:{message:t.message,stack:t.stack}}}}else delete we[r.name],we[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(t){return{name:e,file:e,message:"Could not be unloaded.",error:{message:t.message,stack:t.stack}}}}isLoaded(e,t){const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(e){return!1}return!0}async reloadContent(e,t){const n=this.unloadContent(e,t);return n||await this.loadContent(e,t)}loadNewContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=J.readdirSync(s),o=Object.values(t?Ce:we),i=o.filter(e=>!r.includes(e.filename)).map(e=>t?e.plugin.getName():e.name);return{added:r.filter(e=>!o.find(t=>t.filename==e)&&e.endsWith(n)&&J.statSync(V.resolve(s,e)).isFile()),removed:i}}async loadAllContent(e){this.patchExtensions();const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=J.readdirSync(s);for(const t of o){if(!J.statSync(V.resolve(s,t)).isFile()||!t.endsWith(n))continue;const o=await this.loadContent(t,e);o&&r.push(o)}return r}loadPlugins(){return this.loadAllContent("plugin")}loadThemes(){return this.loadAllContent("theme")}};class re{constructor(){window.Lightcord.BetterDiscord.ThemeModule=this}get folder(){return se.themesFolder}}re.prototype.loadThemes=async function(){this.loadThemeData(),ye.splice(0,0,...await se.loadThemes());const e=Object.keys(we);for(let t=0;tsetTimeout(e,10))}for(const e in xe)we[e]||delete xe[e];this.saveThemeData()},re.prototype.enableTheme=function(e,t=!1){xe[e]=!0,this.saveThemeData();const n=we[e];c.addStyle(c.escapeID(n.id),unescape(n.css)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been applied.`)},re.prototype.enable=function(e,t=!1){return this.enableTheme(e,t)},re.prototype.disableTheme=function(e,t=!1){xe[e]=!1,this.saveThemeData();const n=we[e];c.removeStyle(c.escapeID(n.id)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been disabled.`)},re.prototype.disable=function(e,t=!1){return this.disableTheme(e,t)},re.prototype.toggleTheme=function(e){xe[e]?this.disableTheme(e):this.enableTheme(e)},re.prototype.toggle=function(e,t=!1){return this.toggleTheme(e,t)},re.prototype.loadTheme=async function(e){const t=await se.loadContent(e,"theme");if(t)return me["fork-ps-1"]&&d.showContentErrors({themes:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded. It may not have been loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(we).find(t=>t.filename==e);d.log("ContentManager",`${n.name} v${n.version} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),b.dispatch("theme-loaded",n.name)},re.prototype.unloadTheme=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const n=t.name;xe[n]&&this.disableTheme(n,!0);const s=se.unloadContent(we[n].filename,"theme");if(delete we[n],s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("theme-unloaded",n)},re.prototype.delete=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(se.themesFolder,t.filename);n(2).unlinkSync(s)},re.prototype.reloadTheme=async function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return this.loadTheme(e);const n=t.name,s=await se.reloadContent(we[n].filename,"theme");if(xe[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,s);d.log("ContentManager",`${n} v${we[n].version} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${we[n].version} was reloaded.`,{type:"success"}),b.dispatch("theme-reloaded",n)},re.prototype.reload=function(e){return this.reloadTheme(e)},re.prototype.edit=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const s=n(1).resolve(se.themesFolder,t.filename);n(0).shell.openItem(`${s}`)},re.prototype.updateThemeList=function(){const e=se.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},re.prototype.loadThemeData=function(){const e=g.getSettingGroup("themes");e&&Object.assign(xe,e)},re.prototype.saveThemeData=function(){g.setSettingGroup("themes",xe)};var oe=new re,ie=new class{constructor(){this.editorDetached=!1,this.WebpackModules=(()=>{const e=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete e.m.__extra_id__,delete e.c.__extra_id__;const t=(e,t)=>{let n=t?e:e.default;if(!n)return e;if(n.remove&&n.set&&n.clear&&n.get&&!n.sort)return null;if(!n.getToken&&!n.getEmail&&!n.showToken)return e;const s=new Proxy(n,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t&&e.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t&&e.getEmail?()=>"puppet11112@gmail.com":"showToken"==t&&e.showToken?()=>!0:"__proto__"==t&&e.__proto__?s:e[t]}});return t?s:Object.assign({},e,{default:s})},n=n=>{for(const s in e.c)if(e.c.hasOwnProperty(s)){const r=e.c[s].exports;if(r&&r.__esModule&&r.default&&n(r.default))return t(r.default,!0);if(r&&n(r))return t(r,!1)}return null};return{find:n,findAll:n=>{const s=[];for(const r in e.c)if(e.c.hasOwnProperty(r)){const o=e.c[r].exports;o&&o.__esModule&&o.default&&n(o.default)?s.push(t(o.default,!0)):o&&n(o)&&s.push(t(o,!1))}return s},findByUniqueProperties:e=>n(t=>e.every(e=>void 0!==t[e])),findByPrototypes:e=>n(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>n(t=>t.displayName===e)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),reactDom:this.WebpackModules.findByUniqueProperties(["findDOMNode"])},this.getInternalInstance=e=>e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))],window.Lightcord.BetterDiscord.V2=this}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}joinLC(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("7eFff2A")}leaveLC(){this.GuildActions.leaveGuild("705908350218666117")}get react(){return this.internal.react}get React(){return this.internal.react}get reactDom(){return this.internal.reactDom}get ReactDom(){return this.internal.reactDom}get reactComponent(){return this.internal.react.Component}get ReactComponent(){return this.internal.react.Component}get anchorClasses(){return this.WebpackModules.findByUniqueProperties(["anchorUnderlineOnHover"])||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"}}get slateEditorClasses(){return this.WebpackModules.findByUniqueProperties(["slateTextArea"])}get messageClasses(){return this.WebpackModules.findByUniqueProperties(["message","containerCozy"])}get guildClasses(){const e=BDModules.get(e=>e.wrapper&&e.unreadMentionsBar)[0],t=BDModules.get(e=>e.guildsError&&e.selected)[0],n=BDModules.get(e=>e.blobContainer)[0];return Object.assign({},e,t,n)}get MessageContentComponent(){return this.WebpackModules.find(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get MessageComponent(){return this.WebpackModules.find(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName)}get TimeFormatter(){return this.WebpackModules.findByUniqueProperties(["dateFormat"])}get TooltipWrapper(){return this.WebpackModules.findByDisplayName("Tooltip")}get NativeModule(){return this.WebpackModules.findByUniqueProperties(["setBadge"])}get InviteActions(){return this.WebpackModules.findByUniqueProperties(["acceptInvite"])}get GuildActions(){return this.WebpackModules.findByUniqueProperties(["leaveGuild"])}get Tooltips(){return this.WebpackModules.find(e=>e.hide&&e.show&&!e.search&&!e.submit&&!e.search&&!e.activateRagingDemon&&!e.dismiss)}get KeyGenerator(){return this.WebpackModules.find(e=>e.toString&&/"binary"/.test(e.toString()))}get LayerStack(){return this.WebpackModules.findByUniqueProperties(["popLayer"])}get UserStore(){return this.WebpackModules.findByUniqueProperties(["getCurrentUser"])}get ChannelStore(){return this.WebpackModules.findByUniqueProperties(["getChannel"])}get ChannelActions(){return this.WebpackModules.findByUniqueProperties(["openPrivateChannel"])}get PrivateChannelActions(){return this.WebpackModules.findByUniqueProperties(["selectPrivateChannel"])}openDM(e){const t=this.UserStore.getCurrentUser().id;if(t==e)return;const n=this.ChannelStore.getDMFromUserId(e);if(n)return this.PrivateChannelActions.selectPrivateChannel(n);this.ChannelActions.openPrivateChannel(t,e)}parseSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};const ae="0.0.306",le=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",ce="0.3.0",de="0.3.5",ue={description:"BBD's changelog.",changes:[{title:"What's New?",items:["**Lightcord** is now using BandagedBD. That means all plugins you were using can be used too !","**Window Transparency** changes were made to more compatible with external window managers and addons like Glasstron.","Initialization sequence has once again been changed slightly to hopefully improve loading times."]},{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`."]}]},he={"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core",category:"modules"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Colored Text":{id:"bda-gs-7",info:"Make text color the same as role color",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Content Error Modal":{id:"fork-ps-1",info:"Shows a modal with plugin/theme errors",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scan Plugins":{id:"fork-ps-6",info:"Scan plugins for any threat that can be hidden inside.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for important information",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Automatic Loading":{id:"fork-ps-5",info:"Automatically loads, reloads, and unloads plugins and themes",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Enable Edit Button":{id:"fork-ps-7",info:"Enable an Edit Button on the plugin and theme panel.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode Toggle",implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Copy Selector":{id:"fork-dm-1",info:'Adds a "Copy Selector" option to context menus when developer mode is active',implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"React DevTools":{id:"reactDevTools",info:"Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.",implemented:!0,hidden:!0,cat:"core",category:"developer settings"},"Disable BetterDiscord":{id:"bd-disable",info:"Disable Betterdiscord (plugins, themes, etc) (Not implemented).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personal Information":{id:"lightcord-6",info:"Blur sensitive informations like email, payment infos and more.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Calling Ring Beat":{id:"lightcord-2",info:"Enable Discord's special calling beat.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Developer Options":{id:"lightcord-1",info:'Enable Discord\'s & Lightcord\'s Internal Developer Options. This allow the "Experiments" tab, the "Developer Options" tab and the "Lightcord Api" section.',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dms you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Enable Lightcord's servers. Disabling this will disable custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Disable typing":{id:"lightcord-7",info:"Don't let other see you're typing.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Lightcord Tabs":{id:"lightcord-8",info:"Allows you to launch multiple instances of Lightcord in the same window.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord",experimental:!0},"Always-on-Top":{id:"lightcord-3",info:"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},"No Window Bounds":{id:"no_window_bound",info:"Disable Window Bounds. Can be useful if you use a window manager.",implemented:!0,hidden:"linux"!==process.platform,cat:"lightcord",category:"Window"},"Enable Glasstron":{id:"enable_glasstron",info:"Enable Glasstron. If you're not using transparent themes, this can reduce lag.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},pe={"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!0,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-4":!1,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-ps-5":!0,"fork-ps-6":!0,"fork-ps-7":!1,"fork-es-2":!1,"fork-es-3":!0,"fork-wp-1":!1,"fork-wp-2":!1,"fork-beta":!0,reactDevTools:!1,"lightcord-1":!1,"lightcord-2":!0,"lightcord-presence-1":!1,"lightcord-3":!1,"lightcord-4":!1,"lightcord-5":!0,"lightcord-6":!0,"lightcord-7":!1,"lightcord-8":!1,no_window_bound:!1},me={},ge={},fe={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},be=[],ye=[],ve=Object.create(BetterDiscordConfig),we={},Ce={},Ee={},xe={};class Se{constructor(){this.panels={}}register(e,t){this.panels[e]=t}getComponent(e,t){return this.panels[e](t)}get items(){return[{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"}]}get LCitems(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get LCDevItems(){let e=[];return window.Lightcord.Settings.devMode?(e.push({section:"DIVIDER"},{section:"HEADER",label:"Lightcord Api"},{text:"Components Preview",id:"lcapipreview"}),e):e}render(e){return[{section:"HEADER",label:"Lightcord"},...this.LCitems.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),...this.LCDevItems.map(t=>t.section?t:{section:t.id,label:t.text,element:this.getComponent(t.id,e)}),{section:"DIVIDER"},{section:"CUSTOM",element:this.getComponent("BDChangelogTitle")},...this.items.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),{section:"DIVIDER"}]}}var ke=new class{injectColoredText(){this.cancelColoredText||ie.MessageComponent&&(this.cancelColoredText=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{const t=e.methodArguments[0];if(!t||!t.childrenMessageContent)return;const n=t.childrenMessageContent;if(!n.type||!n.type.type||"MessageContent"!=n.type.type.displayName)return;const s=n.type.type;s.__originalMethod||(n.type.type=function(e){const t=s(e),n=me["bda-gs-7"]&&e.message.colorString||"";return t.props.style={color:n},t},n.type.type.__originalMethod=s,Object.assign(n.type.type,s))}}))}removeColoredText(){let e=BDModules.get(e=>e.markup)[0].markup;document.querySelectorAll("."+e.split(" ")[0]).forEach(e=>{e.style.setProperty("color","")})}},De=new class{inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{if(!me["bda-gs-6"])return;const n=t.returnValue.match(e);return n&&4===n.length?"AM"===n[3]?t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"00":n[1].padStart(2,"0")}:${n[2]}`):t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"12":parseInt(n[1])+12}:${n[2]}`):void 0},n=d.monkeyPatch(ie.TimeFormatter,"calendarFormat",{after:t}),s=d.monkeyPatch(ie.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};class Me extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},ie.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},ie.react.createElement("path",{d:"M0 0h12v12H0"}),ie.react.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Be extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this)}render(){let e=BDModules.get(e=>e.toolsContainer)[0],t=BDModules.get(e=>e.container&&e.closeButton&&e.closeButtonBold)[0];return ie.react.createElement("div",{className:"tools-container "+e.toolsContainer},ie.react.createElement("div",{className:"tools "+e.tools},ie.react.createElement("div",{className:t.container},ie.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},ie.react.createElement(Me,null)),ie.react.createElement("div",{className:"esc-text "+t.keybind},"ESC"))))}onClick(){this.props.onClick&&this.props.onClick();const e=document.querySelector("."+BDModules.get(e=>e.closeButton&&e.keybindBold)[0].closeButton.split(" ")[0]);e&&e.click()}}class Ne extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text)}}class Le extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Pe extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class Ae extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return ie.react.createElement("div",{className:`ui-tab-bar-item${this.props.selected?" selected":""}`,onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class Te extends ie.reactComponent{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;let t=BDModules.get(e=>e.card&&e.cardPrimary)[0],n=BDModules.get(e=>e.flexChild&&e._horizontalReverse)[0],s=BDModules.get(e=>e.noWrap&&!e.streamerModeEnabled)[0];return ie.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},ie.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this),draggable:!1}),ie.react.createElement("div",{className:n.flexChild+" bd-server-content"},ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},ie.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),ie.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},ie.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},ie.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},ie.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},ie.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class Re extends ie.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.scrollerHorizontal)[0],t=BDModules.get(e=>e.sidebarRegionScroller)[0],n=`${e.scrollerWrap} ${e.scrollerThemed} ${e.themeGhostHairline}${this.props.fade?" "+e.scrollerFade:""}`,s=e.scroller+" scroller";this.props.sidebar&&(s+=` ${t.sidebarRegionScroller} sidebar-region-scroller`),this.props.contentColumn&&(s+=" "+t.contentRegionScroller+" content-region-scroller",n=`${e.scrollerWrap} ${t.contentRegionScrollerWrap} content-region-scroller-wrap ${e.scrollerThemed} ${e.themeGhost} ${e.scrollerTrack}`);const{children:r}=this.props;return ie.react.createElement("div",{key:"scrollerwrap",className:n},ie.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}class $e extends ie.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return ie.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},ie.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},ie.react.createElement(Re,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),ie.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},ie.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},ie.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},ie.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class je extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=ie.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=ie.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=ie.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=ie.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){ie.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const n=this;fetch(`${n.endPoint}${e}${e?"&schema=new":"?schema=new"}`,{method:"get"}).then(async e=>{if(200!==e.status)throw await e.text();let s=await e.json(),r=s.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(r=n.state.servers.concat(r));let o=s.size+s.from;s.next=`?from=${o}`,n.state.term&&(s.next+=`&term=${n.state.term}`),n.state.selectedCategory&&(s.next+=`&category=${n.categoryButtons[n.state.selectedCategory]}`),o>=s.total&&(o=s.total,s.next=null);let i=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(i+=` for ${n.state.term}`),n.setState({loading:!1,title:i,servers:r,next:s.next}),t&&(n.refs.sbv.refs.contentScroller.scrollTop=0)}).catch(e=>(console.error(e),n.setState({loading:!1,title:"Failed to load servers. Check console for details"})))}async join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);await fetch(`${this.joinEndPoint}/${e.props.server.identifier}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),e.setState({joined:!0})}connect(){const e=this,t=e.windowOptions;t.x=Math.round(window.screenX+window.innerWidth/2-t.width/2),t.y=Math.round(window.screenY+window.innerHeight/2-t.height/2),e.joinWindow=new(window.require("electron").remote.BrowserWindow)(t);e.joinWindow.webContents.on("did-navigate",(t,n)=>{"https://auth.discordservers.com/info"==n&&(e.joinWindow.close(),e.checkConnection())}),e.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.getFlattenedGuildIds(),t=this.AvatarDefaults.DEFAULT_AVATARS;return[ie.react.createElement(Te,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://avatars3.githubusercontent.com/u/65690058?s=200&v=4",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),ie.react.createElement(Te,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})]}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}async checkConnection(){const e=this;try{const t=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),n=await t.json();e.setState({selectedCategory:0,connection:{state:2,user:n}}),e.search("",!0)}catch(t){console.error(t),e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return ie.react.createElement($e,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:ie.react.createElement(Be,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return ie.react.createElement("div",{className:"sidebar",key:"ps"},ie.react.createElement("div",{className:"ui-tab-bar SIDE"},ie.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),ie.react.createElement(Le,null),this.searchInput,ie.react.createElement(Le,null),ie.react.createElement(Pe,{text:"Categories"}),this.categoryButtons.map((e,t)=>ie.react.createElement(Ae,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),ie.react.createElement(Le,null),this.footer,this.connection))}get searchInput(){return ie.react.createElement("div",{className:"ui-form-item"},ie.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},ie.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let n=`?term=${e.target.value}`;0!==t.state.selectedCategory&&(n+=`&category=${t.categoryButtons[t.state.selectedCategory]}`),t.search(n,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search(`?category=${t.categoryButtons[e]}`,!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.getFlattenedGuildIds(),n=this.AvatarDefaults.DEFAULT_AVATARS;if(1===e.state.connection.state)return e.notConnected;let s=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},ie.react.createElement(Ne,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>ie.react.createElement(Te,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&ie.react.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},ie.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&ie.react.createElement(Ne,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",ie.react.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},ie.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},ie.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?ie.react.createElement("span",null):ie.react.createElement("span",null,ie.react.createElement(Le,null),ie.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),ie.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},ie.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},ie.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Oe extends ie.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&ie.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*t}) translateZ(0px)`,e.style.opacity=t,1==t&&setImmediate(()=>{e.style.transform="",e.style.opacity=""})}})}componentWillUnmount(){window.removeEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*(1-t)}) translateZ(0px)`,e.style.opacity=1-t,1==t&&setImmediate(()=>{e.remove()})}});const t=c.query(".publicServersOpen");t.classList.remove("publicServersOpen"),c.animate({duration:200,update:function(e){t.style.transform=`scale(${.07*e+.93}) translateZ(0px)`,t.style.opacity=e,1==e&&setImmediate(()=>{t.style.transform="",t.style.opacity=""})}})}componentWillMount(){const e=c.query('[class*="layer-"]');e.classList.add("publicServersOpen"),c.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return ie.react.createElement("div",{className:"layer bd-layer "+BDModules.get(e=>e.layer&&e.animating)[0].layer,id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var _e=new class{constructor(){this._appendButton=this._appendButton.bind(this),window.Lightcord.BetterDiscord.V2_PublicServers=this}get component(){return ie.react.createElement(Oe,{rootId:"pubslayerroot",id:"pubslayer"},ie.react.createElement(je,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e]=[BDModules.get(e=>e.layers&&e.layer)[0].layers.split(" ")[0]];const t=c.query(".layers, ."+e);return!!t&&(t.append(c.createElement("
")),!0)}render(){const e=this.root;e?ie.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=c.createElement(`
`);me["bda-gs-1"]||(e.style.display="none");const t=c.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[d.removeDa(BDModules.get(e=>e.downloadProgress&&e.tutorialContainer)[0].tutorialContainer)];if(c.query("#bd-pub-li"))return;const t=c.query(`div.${e} > div`);c.after(t,this.button)}addButton(){if(this.guildPatch)return;const e=l.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=l.findByDisplayName("Guilds");e||t||d.warn("PublicServer","Can't find GuildList component"),this.guildPatch=d.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch,c.query("#bd-pub-li").remove()}};var Ie=new class{start(){c.addStyle("VoiceMode","\n .container-2Rl01u {\n display: none!important;\n }\n\n .chat-3bRxxu {\n display: none!important;\n }\n\n .sidebar-2K8pFh {\n flex-grow: 1!important;\n }\n")}stop(){c.removeStyle("VoiceMode")}};const Fe=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var We=new class{constructor(){window.Lightcord.BetterDiscord.ClassNormalizer=this}stop(){this.hasPatched&&(this.unpatchClassModules(l.findAll(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(l.findAll(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const n=e[t];if("string"!=typeof n)return!1;if(!this.shouldIgnore(n)){if(1===n.split("-").length)return!1;if(!Fe.test(n.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;const r=s.split(" ");for(const s of r){const r=s.match(Fe);if(!r||!r.length||r.length<2)continue;const o=r[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[n]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;let r="";const o=s.split(" ");for(const t of o)t.startsWith(`${e}-`)||(r+=` ${t}`);t[n]=r.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let n=0,s=t.length;nt?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${s}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,n=[];for(let e=0;ee.layer&&"string"==typeof e.layer&&e.disabledPointerEvents)[0],BDModules.get(e=>e.menu)[0]];setTimeout((function(){if(!s||!n.layer)return console.log(s,n.layer);let r=c.query("."+d.removeDa(s.menu));if(!r){const t=c.query("#app-mount > ."+d.removeDa(n.layerContainer)),o=c.createElement(`
`);r=c.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.setAttribute("role","menu"),o.setAttribute("tabindex","-1"),o.id="bd-copy-selector-context",o.setAttribute("aria-label","Copy Selector Actions");const i=BDModules.get(e=>e.scrollerWrap)[0],a=c.createElement(`
`),l=c.createElement(`
`);a.append(l),r.append(a);const u=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",u),document.removeEventListener("contextmenu",u),document.removeEventListener("keyup",u))};document.addEventListener("click",u),document.addEventListener("contextmenu",u),document.addEventListener("keyup",u)}const o=r.parentElement,i=r.childNodes[0].childNodes[0],a=c.createElement('
'),l=c.createElement(``);if(l.append(c.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{ie.NativeModule.copy(t),o.style.display="none"}),l.addEventListener("mouseover",e=>{let t=c.queryAll("div[role=menuitem]."+d.removeDa(s.focused));t&&t.forEach(e=>e.classList.remove(s.focused)),l.classList.add(s.focused)}),l.addEventListener("mouseout",e=>{l.classList.remove(s.focused)}),a.append(l),i.childNodes.length){const e=c.createElement(``);i.append(e)}i.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+("string"==typeof e.className&&e.className||"").split(" ").filter(e=>!!e).map(e=>"."+e).join("")+":nth-child("+n+")")}e=e.parentNode}return t.join(" > ")}(e)}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}};const He=ie.React;class Ue extends He.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(e){this.props.disabled||(this.props.onChange(e),this.setState({checked:e}))}render(){return He.createElement(Lightcord.Api.Components.inputs.Switch,{onChange:this.onChange,value:this.state.checked})}}let qe=[];function Ge(e){let t=qe.find(t=>t.startsWith(e+"-"));return t||(t=BDModules.get(e=>e.name)[0],qe.push(t),t)}class Ve extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(){this.props.checked=!this.props.checked,this.props.onChange(this.props.id,this.props.checked)}render(){let{text:e,info:t}=this.props.data;return qe.find(e=>e.startsWith("beta-"))||qe.push(BDModules.get(e=>e.beta&&!e.container&&!e.userSettingsVoice)[0].beta),this.props.data.experimental&&(t=[t,React.createElement("sup",{className:Ge("beta")},"(EXPERIMENTAL)")]),ie.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},ie.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},ie.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),ie.react.createElement(Ue,{onChange:this.onChange,checked:this.props.checked})),ie.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Je extends ie.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?ie.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[ie.react.createElement(Ne,{text:e}),s,t.map(e=>ie.react.createElement(Ve,{id:e.id,key:e.id,data:e,checked:me[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}let Ze=BDModules.get(e=>e.marginTop60)[0];class Ye extends React.Component{render(){return Ze||(Ze=BDModules.get(e=>e.marginTop60)[0]),React.createElement("div",{className:Ze.marginTop60})}}class Ke extends ie.reactComponent{constructor(e){super(e)}render(){return this.props.sections.map((e,t)=>[0!==t?ie.react.createElement(Ye,{}):null,ie.react.createElement(Je,Object.assign({},e,{onChange:this.props.onChange}))])}}class Xe extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return ie.react.createElement("li",null,ie.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},ie.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},ie.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),ie.react.createElement("span",null)),ie.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class Qe extends ie.reactComponent{constructor(e){super(e);this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){c.addClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!0,this.editor=ace.edit("bd-customcss-editor-detached"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){c.removeClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!1,this.editor.destroy()}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}get root(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}render(){const e=this;return ie.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},ie.react.createElement("div",{id:"bd-customcss-innerpane"},ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Xe,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Gn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":c.query("#editor-detached")&&t.props.attach(),ie.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class et extends ie.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=ie.react.createElement(Qe,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||ie.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&ie.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return[t&&ie.react.createElement("div",{id:"editor-detached"},ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("h3",null,"Editor Detached"),ie.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&ie.react.createElement("div",null,ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Xe,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),ie.react.createElement("div",{className:"help-text"},"Press ",ie.react.createElement("code",{className:"inline"},"ctrl"),"+",ie.react.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings."))))]}onClick(e){const t=this;switch(e){case"update":t.updateCss();break;case"save":t.saveCss();break;case"detach":t.detach()}}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Gn.saveSettings()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?ie.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class tt extends ie.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?ie.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const nt=tt.prototype.render;Object.defineProperty(tt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>nt});class st extends ie.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=this.props.title?ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title):null;return[e,this.props.children]}}class rt extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"#dcddde",className:"bd-reload "+this.props.className,onClick:this.props.onClick,style:{width:this.props.size||"24px",height:this.props.size||"24px"}},ie.react.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),ie.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ot=ie.React;class it extends ot.Component{render(){const e=this.props.size||"24px";return ot.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"var(--text-normal)",style:{width:e,height:e},onClick:this.props.onClick},ot.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),ot.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const at=ie.React;class lt extends at.Component{render(){const e=this.props.size||"24px";return at.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},at.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),at.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),at.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ct=ie.React,dt=ie.anchorClasses;class ut extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.setInitialState(),this.hasSettings=this.props.addon.plugin&&"function"==typeof this.props.addon.plugin.getSettingsPanel,this.settingsPanel="",this.edit=this.edit.bind(this),this.delete=this.delete.bind(this),this.reload=this.reload.bind(this)}setInitialState(){this.state={checked:this.props.enabled,settings:!1,reloads:0,trusted:!1}}showSettings(){this.hasSettings&&this.setState({settings:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}componentDidUpdate(){this.state.settings&&("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),me["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest('div[class*="scroller-"]');if(!((e,t)=>{const n=e.scrollTop,s=n+e.clientHeight,r=t.offsetTop,o=r+t.clientHeight;return rs})(t,e))return;const n=c.offset(e),s=c.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;c.animate({duration:300,update:function(e){t.scrollTop=o>r?r+e*(o-r):r-e*(r-o)}})}))}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get settingsComponent(){try{this.settingsPanel=this.props.addon.plugin.getSettingsPanel()}catch(e){d.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return ie.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},ie.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},ie.react.createElement(Me,null)),"object"==typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:this.settingsPanel}}))}buildTitle(e,t,n){const s="{{name}} v{{version}} by {{author}}".split(/({{[A-Za-z]+}})/),r=s.findIndex(e=>"{{name}}"==e);r&&(s[r]=ct.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=ct.createElement("span",{className:"version bda-version"},t));const i=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${dt.anchor} ${dt.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{ie.LayerStack.popLayer(),ie.openDM(n.id)})),s[i]=ct.createElement(n.link||n.id?"a":"span",e,n.name)}return s.flat()}makeLink(e,t){const n={className:"bda-link bda-link-website",target:"_blank"};return"string"==typeof t&&(n.href=t),"function"==typeof t&&(n.onClick=e=>{e.preventDefault(),e.stopPropagation(),t()}),ie.react.createElement("a",n,e)}makeButton(e,t,n){return ct.createElement(P,{color:"black",side:"top",text:e},ct.createElement("div",{className:"bd-addon-button",onClick:n},t))}componentWillUnmount(){this.unmounted=!0}get links(){const e=[],t=this.props.addon;return t.website&&e.push(this.makeLink("Website",t.website)),t.source&&e.push(this.makeLink("Source",t.source)),t.invite&&e.push(this.makeLink("Support Server",()=>{const e=/\.gg\/(.*)$/;let n=t.invite;e.test(n)&&(n=n.match(e)[1]),ie.LayerStack.popLayer(),ie.InviteActions.acceptInviteAndTransitionToInviteChannel(n)})),t.donate&&e.push(this.makeLink("Donate",t.donate)),t.patreon&&e.push(this.makeLink("Patreon",t.patreon)),e}get footer(){const e=this.links;return(e.length||this.hasSettings)&&ie.react.createElement("div",{className:"bd-card-footer bda-footer"},ie.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>n{this.unmounted||this.setState({isTrusted:!e.suspect||"suspect"})},()=>{}))),ie.react.createElement("div",{className:"bd-card bd-addon-card settings-closed ui-switch-item",style:n},ie.react.createElement("div",{className:"bd-addon-header bda-header"},ie.react.createElement("div",{className:"bd-card-title bda-header-title"},this.buildTitle(this.name,this.version,{name:this.author,id:e,link:t})),ie.react.createElement("div",{className:"bd-addon-controls bda-controls"},this.props.edit&&this.makeButton("Edit",ct.createElement(it,{className:"bd-icon"}),this.edit),this.props.remove&&this.makeButton("Delete",ct.createElement(lt,{className:"bd-icon"}),this.delete),this.props.reload&&this.makeButton("Reload",ct.createElement(rt,{className:"bd-icon"}),this.reload),ct.createElement(Ue,{onChange:this.onChange,checked:this.state.checked}))),ie.react.createElement("div",{className:"bd-scroller-wrap bda-description-wrap scroller-wrap fade"},ie.react.createElement("div",{className:"bd-scroller bd-addon-description bda-description scroller"},this.description)),this.footer)}}const ht=ut.prototype.render;Object.defineProperty(ut.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>ht});const pt=ie.React;class mt extends pt.Component{render(){const e=this.props.size||"16px";return pt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},pt.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}const gt=ie.React;class ft extends gt.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=gt.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return gt.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>gt.createElement("div",{className:`bd-select-option${e.value==t.value?" selected":""}`,onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return gt.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},gt.createElement("div",{className:"bd-select-value"},this.selected.label),gt.createElement(mt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const bt=ie.React;class yt extends bt.Component{render(){const e=this.props.size||"16px";return bt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},bt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),bt.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}const vt=ie.React;class wt extends vt.Component{render(){return vt.createElement("div",{className:"bd-search-wrapper"},vt.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),vt.createElement(yt,null))}}function Ct(){return(Ct=Object.assign||function(e){for(var t=1;t{xs.showConfirmationModal("Are You Sure?",`Are you sure you want to delete ${e}?`,{danger:!0,confirmText:"Delete",onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}get sortOptions(){return[{label:"Name",value:"name"},{label:"Author",value:"author"},{label:"Version",value:"version"},{label:"Recently Added",value:"added"},{label:"Last Modified",value:"modified"},{label:"File Size",value:"size"}]}get directions(){return[{label:"Ascending",value:!0},{label:"Descending",value:!1}]}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}getProps(e){return{key:this.getName(e),enabled:this.cookie[this.getName(e)],toggle:this.manager.toggle.bind(this.manager),edit:me["fork-ps-7"]?this.edit.bind(this):null,remove:this.delete.bind(this),addon:e,hash:e.hash}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get list(){return"plugins"===this.props.type?Object.values(bdplugins):Object.values(bdthemes)}getAddons(){const e=this.list.sort((e,t)=>{const n=this.state.sort.charAt(0).toUpperCase()+this.state.sort.slice(1),s=e.plugin&&e.plugin[`get${n}`]?this.getString(e.plugin[`get${n}`]()):e[this.state.sort],r=t.plugin&&t.plugin[`get${n}`]?this.getString(t.plugin[`get${n}`]()):t[this.state.sort];return"string"==typeof s?s.toLocaleLowerCase().localeCompare(r.toLocaleLowerCase()):s>r?1:r>s?-1:0});this.state.ascending||e.reverse();const t=[];for(let n=0;n{try{d.showToast("Plugin update check in progress.",{type:"info"}),window.PluginUpdates.checkAll().then(()=>{d.showToast("Plugin update check complete.",{type:"success"})}).catch(e=>{console.error(e),d.showToast("An error occured while checking update.",{type:"error"})})}catch(e){console.error(e),d.showToast("An error occured while checking update.",{type:"error"})}},wrapper:!1,disabled:!1},"Check for Updates"))):null:null}render(){const e=xt.createElement(Et,{color:"black",position:"top",text:"Reload List"},e=>xt.createElement(rt,Ct({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?v.updatePluginList():oe.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return xt.createElement(st,{title:`${this.props.type.toUpperCase()}—${t.length}`},xt.createElement("button",{key:"folder-button",className:"bd-button bd-pfbtn",onClick:this.openFolder.bind(this)},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),this.renderCheckUpdates(),!me["fork-ps-5"]&&e,xt.createElement("div",{className:"bd-controls bd-addon-controls"},xt.createElement(wt,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),xt.createElement("div",{className:"bd-addon-dropdowns"},xt.createElement("div",{className:"bd-select-wrapper"},xt.createElement("label",{className:"bd-label"},"Sort by:"),xt.createElement(ft,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),xt.createElement("div",{className:"bd-select-wrapper"},xt.createElement("label",{className:"bd-label"},"Order:"),xt.createElement(ft,{options:this.directions,onChange:this.reverse,style:"transparent"})))),xt.createElement("div",{className:"bda-slist bd-addon-list"},t))}}const kt=St.prototype.render;Object.defineProperty(St.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>kt});const Dt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,Mt=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,Bt=process.pid;var Nt=new class{constructor(){this.enabled=!1,this.game=ge}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0}}sendGame(){Dt.dispatch({type:Mt.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:Bt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(ge||Object.create(fe)),this.sendGame())}disable(){this.enabled&&(this.enabled=!1,console.log("Disabling custom RichPresence"),this.sendGame())}async fetchAssets(e){let t=await BDModules.get(e=>e.getAssets)[0].getAssets(e);if(t.undefined&&"number"==typeof t.undefined)throw new Error("Unknown Application");return t}set(e){this.game=e,this.sendGame()}};ie.react,BDModules.get(e=>e.Interval)[0];function Lt(){return(Lt=Object.assign||function(e){for(var t=1;te.default&&e.default.open&&e.default.fetchMutualFriends)[0];React.Component;function At(){return(At=Object.assign||function(e){for(var t=1;tt=e);$t[e]=n;const s=[];for(let t of Ft.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{if(!me["lightcord-5"])return t([]);jt.push([e,t]),setTimeout(()=>{let e=jt;0!==e.length&&(jt=[],_t(Wt.badges,"POST",JSON.stringify(e.map(e=>e[0]))).then(async t=>{200!==t.status&&e.forEach(e=>{e[1]([])});const n=await t.json();for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{t instanceof It||console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)Ft.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(Ft.badges.find(t=>t.id===e)));return this.cache={badges:Object.assign(this.cache.badges,{[e]:s})},setTimeout(()=>{delete this.cache.badges[e]},6e5),t(s),delete $t[e],s}};const _t=function(e,t,n){return me["lightcord-5"]?E()(`${Ft.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}}):Promise.reject(new It("The current settings blocked the request."))};class It extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const Ft={SERVER_URL:"https://lightcord.deroku.xyz",badges:[{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:["696481194443014174","696003456611385396"],scopes:[],component:Pt,href:"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter"},{name:"Buffoon",id:"06904d31-65b4-41ec-a50c-8658bbd1af96",defaultUsers:["389016895543705602","664600134528663565","625350657829896224"],scopes:[],component:Tt,href:"https://youtu.be/EJtb6z-dlT8?t=145"}]},Wt={badges:"/users/badges"},zt=ie.React;let Ht;class Ut extends zt.Component{constructor(e){super(e),this.state={data:g.getSettingGroup("rpc")||fe,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets(),this.assetComponents=new Set}updateWhenFetched(e){this.assetComponents.add(e)}onChange(e,t){let n=qt.find(t=>t.id===e.props.id);this.setState({data:Object.assign(ge,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),g.setSettingGroup("rpc",ge),this.preview.forceUpdate(),Nt.set(ge)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}if(!this.state.data.application_id)return this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),void this.assetComponents.forEach(e=>e.forceUpdate());this.isfetching=!0,Nt.fetchAssets(this.state.data.application_id).then(e=>{this.isfetching=!1,this.setState({data:this.state.data,assets:Object.keys(e).map(t=>{let n=e[t];return{id:n.id,name:n.name,type:n.type}})}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())})}updatePreview(e){this.setState({data:e})}get modules(){return Ht||(Ht=[BDModules.get(e=>e.marginBottom20)[0]])}render(){let[e]=this.modules;return[zt.createElement(Je,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),zt.createElement(Ye,null),zt.createElement(Ne,{text:"RichPresence"}),zt.createElement("div",null,this.optionsComponents),zt.createElement("div",null,zt.createElement(Ye,null),zt.createElement(Ne,{text:"Preview"}),zt.createElement(cn,{settings:this})),zt.createElement("div",{className:e.marginBottom20}),zt.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),zt.createElement("button",{style:{opacity:.01},onClick:()=>{r.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4")}},"See ? I pulled a litle sneaky on ya")]}get optionsComponents(){return this._optionsComponents||(this._optionsComponents=qt.map(e=>{if("text"===e.type)return zt.createElement(Zt,{setting:e,manager:this,id:e.id});if("number"===e.type){return[zt.createElement(Yt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?zt.createElement(Kt,{setting:e,manager:this,id:e.id,choices:[{value:"none",label:"No assets"}].concat(this.state.assets.map(e=>({value:"asset-"+e.id,label:e.name})))}):"Unknown choice.":void 0}))}}const qt=[{title:"Application ID",id:"application_id",type:"number",placeholder:"711416957718757418"},{title:"Name",id:"name",type:"text",placeholder:"Lightcord"},{title:"Details",id:"details",type:"text",placeholder:"Browsing Discord"},{title:"State",id:"state",type:"text",placeholder:"Lightcord Client"},{title:"Timestamp Start",id:"timestamps.start",type:"number",get placeholder(){return Date.now()}},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];let Gt,Vt,Jt;class Zt extends zt.PureComponent{get modules(){return Gt&&Gt[0]?Gt:Gt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0]]}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=zt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,onChange:e=>{this.setState({data:e}),!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500))},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i,a,l]=this.modules;return zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input),zt.createElement(ln,null))}}class Yt extends zt.PureComponent{get modules(){return Vt||(Vt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0],BDModules.get(e=>e.colorTransparent)[0]])}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=zt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,type:"number",onChange:(e,t,n)=>{(e=e.replace(/[^\d]+/g,""))!=this.state.data?(!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:e})):n.setValue(e)},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules;return zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input,"timestamps.start"===e.id?zt.createElement(Lightcord.Api.Components.inputs.Button,{onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")},color:"brand"},"Copy current timestamp"):null),zt.createElement(ln,null))}}class Kt extends zt.PureComponent{constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]?"asset-"+this.props.manager.state.data[t.id]:"none"},this.props.manager.updateWhenFetched(this)}onChange(e){let t=e.value;!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,"none"===this.state.data?null:this.state.data.replace("asset-","")),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:t}),this.forceUpdate()}get modules(){return Jt||(Jt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0]])}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules,a=this.props.manager.state.assets.map(e=>({value:"asset-"+e.id,label:e.name}));return a.unshift({value:"none",label:"No assets"}),zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),zt.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{value:this.state.data,options:a,onChange:this.onChange.bind(this)})),zt.createElement(ln,null))}}let Xt,Qt,en,tn,nn,sn,rn,on,an=[];class ln extends zt.PureComponent{get modules(){return an&&an[0]?an:an=[BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0],BDModules.get(e=>e.dividerDefault)[0]]}render(){let[e,t]=this.modules;return zt.createElement("div",{class:`${e.divider} ${t.dividerDefault}`})}}zt.Component;class cn extends zt.Component{constructor(e={}){super(e),this.state={active:"profile"},this.tabs=[],this.props.settings.preview=this}changeTab(e){this.state.active!==e.props.id&&(this.tabs.forEach(e=>{e.setActive(!1)}),e.setActive(!0),this.setState({active:e.props.id}))}render(){return zt.createElement("div",{className:"lc-tabWrapper"},zt.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},zt.createElement(dn,{preview:this,title:"Full Profile",id:"profile"}),zt.createElement(dn,{preview:this,title:"User Popout",id:"popout"})),zt.createElement(un,{preview:this.preview,state:this.state.rpc,props:{preview:this},key:this.state.active}))}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?pn:hn}}class dn extends zt.Component{constructor(e){super(e),this.state={active:e.preview.isActive(e.id)},e.preview.tabs.push(this)}setActive(e){this.setState({active:!!e})}render(){let e="lc-navItem";return this.state.active?e+=" lc-navItemActive":e+=" lc-navItemInactive",zt.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class un extends zt.Component{componentDidCatch(e,t){console.error(e,t),this.setState({error:!0})}render(){if(this.state||(this.state={error:!1}),this.state.error)return Xt=Xt||ie.WebpackModules.find(e=>e.emptyStateImage),Xt?zt.createElement("div",{style:{margin:"20px"}},zt.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},zt.createElement("div",{className:Xt.emptyStateImage,style:{marginTop:"20px"}}),zt.createElement("div",{className:Xt.emptyStateHeader},"An error occured"),zt.createElement("p",{className:Xt.emptyStateSubtext},"Please check the console for more informations. Join our ­",zt.createElement("a",{className:`${ie.anchorClasses.anchor} ${ie.anchorClasses.anchorUnderlineOnHover}`,role:"button",tabindex:0,onClick:()=>{ie.joinLC()}},"support server"),"­ for help."))):(d.showToast("An error occured. Please check the console for more informations."),null);try{const e=new this.props.preview(this.props.props);return e.setState(this.props.state),e.render()}catch(e){return console.error(e),this.state.error=!0,this.render()}}}class hn extends zt.Component{get modules(){return Qt||(Qt=[ie.WebpackModules.find(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!en){if(!e)throw new Error("Couldn't find the UserPopout component.");const t=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render();tn=t.props;const s=t.type.render(tn,null),r=new s.type(s.props).render();en=r.type}if(!en)throw new Error("Couldn't find the UserPopoutComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});tn=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render().props;const o=new en(Object.assign({},tn,{activity:r})).render().props.children,i=zt.createElement("div",window.Lightcord.Api._.excludeProperties(o.props,["onClick","onContextMenu"]));return zt.createElement("div",{className:"lc-userPopout lc-tab-box-shadow"},i)}}class pn extends zt.Component{get modules(){return nn||(nn=[ie.WebpackModules.find(e=>e.default&&"UserProfile"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!sn){const t=new e.default({user:n}).render();on=t.type;const s=new t.type(t.props).render(),r=s.type.render(s.props,null),o=new r.type(r.props).render();sn=o.type}if(!sn)throw new Error("Couldn't find the UserProfileComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});rn=new on({user:n,close:()=>{}}).render().props;const o=new sn(Object.assign({},rn,{activity:r})).render().props.children;return o.props.style={width:"auto"},zt.createElement("div",{className:"lc-tab lc-tab-box-shadow"},o)}}const mn=ie.React;let gn=BDModules.get(e=>e.defaultMarginh5)[0],fn=BDModules.get(e=>e.colorStandard)[0],bn=BDModules.get(e=>e.size32)[0],yn=BDModules.get(e=>e.scrollbarGhostHairline)[0];const vn=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,wn=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,Cn=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,En=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class xn extends mn.Component{constructor(e){super(e)}render(){return gn||(gn=BDModules.get(e=>e.defaultMarginh5)[0]),fn||(fn=BDModules.get(e=>e.colorStandard)[0]),bn||(bn=BDModules.get(e=>e.size32)[0]),[mn.createElement(Ne,{text:"Account Infos"}),mn.createElement("div",null,mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Profile"),mn.createElement(Mn,{content:this.getProfileValue(),language:"diff"}),mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Statistics"),mn.createElement(Mn,{content:this.getStatistics(),language:"diff"}),mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Connected Sessions"),mn.createElement(Mn,{content:this.getSessionValue(),language:"diff"})),mn.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20})]}getSessionValue(){const e=Cn.getSessions(),t=Object.keys(e).filter(e=>"all"!==e).map(t=>e[t]);return 0===t.length?"- No session detected. Please try in a few seconds":t.map(e=>`+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=En.getCurrentUser(),t=e.createdAt;let n=e.avatarURL;return e.avatar&&e.avatar.startsWith("a_")&&(n=e.getAvatarURL("gif")),n.startsWith("/")&&(n="https://discord.com"+n),n.endsWith("?size=128")&&(n=n.replace("?size=128","?size=4096")),`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: ${n}\n+ Creation Date: ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear().toString().padStart(2,"0")} ${t.getHours().toString().padStart(2,"0")}h ${t.getMinutes().toString().padStart(2,"0")}min ${t.getSeconds()}s\n+ Flags: ${e.flags}\n+ Has Nitro: ${e.hasPremiumSubscription?"Yes":"No"}\n- Email: ${e.email}\n- 2FA: ${e.mfaEnabled?"Yes":"No"}\n- Has Been On Mobile: ${e.mobile?"Yes":"No"}\n- Phone: ${e.phone||"None"}\n- Verified: ${e.verified}`}getStatistics(){const e=Object.values(vn.getGuilds()),t=Object.keys(wn.getRelationships()),n=t.filter(e=>wn.isFriend(e)),s=t.filter(e=>wn.isBlocked(e));return`+ Server Count: ${e.length} servers\n+ Relations: ${t.length} relations\n+ Friends Count: ${n.length} friends\n- Blocked Users Count: ${s.length} blocked users`}}let Sn=BDModules.get(e=>e.highlight)[0],kn=BDModules.get(e=>e.markup)[0],Dn=BDModules.get(e=>e.messageContent)[0];class Mn extends mn.Component{render(){return kn||(kn=BDModules.get(e=>e.markup)[0]),Dn||(Dn=BDModules.get(e=>e.messageContent)[0]),yn||(yn=BDModules.get(e=>e.scrollbarGhostHairline)[0]),Sn||(Sn=BDModules.get(e=>e.highlight)[0]),mn.createElement("div",{class:`${kn.markup} ${Dn.messageContent}`},mn.createElement("pre",null,mn.createElement("code",{class:`${yn.scrollbarGhostHairline} hljs`,dangerouslySetInnerHTML:{__html:Sn.highlight(this.props.language,this.props.content).value}})),mn.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const Bn=window.Lightcord.DiscordModules.dispatcher,Nn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0],Pn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const An={};let Tn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var Rn=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,Bn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,Bn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(Tn?Tn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=Nn.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(An[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||$n(n,"discord.gg/")||$n(n,"discord.com/invite/")||$n(n,"discordapp.com/invite/"))&&(An[e.message.author.id]=!0,d.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),Ln||(Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),Ln.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),Pn||(Pn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),Pn.default.closePrivateChannel(t.id,!1)))))}};function $n(e,t){let n=e.embeds;return 0!==n.length&&n.map(e=>"rich"===e.type&&(!!(e.title||"").includes(t)||(!!(e.description||"").includes(t)||(!!((e.footer?e.footer.text:"")||"").includes(t)||!!e.fields.map(e=>e.value.includes(t)||e.name.includes(t)).includes(!0))))).includes(!0)}let jn;const On=d.removeDa;var _n=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,jn=jn||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=On(e.standardSidebarView),n=[],s=BDModules.get(e=>e.userSettingsAccount)[0];const r=BDModules.get(e=>"string"==typeof e.children)[0];return n.push(`#app-mount .${t} .payment-info .${On(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${On(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${On(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),s&&(n.push(`#app-mount .${t} .${On(s.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${On(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n.push(`.${On(s.userSettingsSecurity)} .${On(r.children)} > div:nth-child(2)`)),console.log(n),n}(),jn||console.error(new Error("Couldn't find selectors to blur personnal informations.")),c.addStyle("blurPrivate",`\n${jn.join(", ")} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${jn.map(e=>e+":hover").join(", ")} {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`))}disable(){this.enabled&&(this.enabled=!1,c.removeStyle("blurPrivate"))}},In=new class{constructor(){window.Lightcord.Api.ensureExported(e=>e.default&&e.default.startTyping).then(e=>{let t=this;const n=e.default.startTyping;e.default.startTyping=function(){if(t.disabled)return n.call(this,...arguments)};const s=e.default.stopTyping;e.default.stopTyping=function(){if(t.disabled)return s.call(this,...arguments)},this.disabled=!0}),window.Lightcord.BetterDiscord.DisableTyping=this}disable(){this.disabled=!0}enable(){this.disabled=!1}};Rt();let Fn;class Wn extends React.PureComponent{constructor(){super(...arguments),this.state={states:[]}}render(){Fn||(Fn=l.find(e=>e.FormSection));const e=[...new Set(Object.keys(window.Lightcord.Api.Components).map(e=>Object.keys(window.Lightcord.Api.Components[e]).map(t=>window.Lightcord.Api.Components[e][t])).flat())];return[React.createElement(Fn.FormSection,{tag:"h2",title:"Lightcord's Api Availlable components"},React.createElement(Fn.FormText,{type:"description",className:"",selectable:!1},"These components are here for the plugin devs. They can quickly embed any component below with this panel."),React.createElement(Ye,null),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"brand",look:"outlined",size:"medium",hoverColor:"green",onClick:()=>{r.remote.shell.openExternal("https://github.com/lightcord/lightcord/wiki/Apis")},wrapper:!1},"Documentation")),e.map(e=>{let t=[];e.AllPreviews&&(t=e.AllPreviews);let n=t=>{this.setState({states:[Object.assign(s,t)].concat(this.state.states.filter(t=>t.elem!==e))})},s=this.state.states.find(t=>t.elem===e);s||(s={tab:"preview",elem:e,options:{}},this.state.states.push(s));let r=()=>{let e={};return t.forEach(t=>{e[Object.keys(t[0])[0]]=t[0][Object.keys(t[0])[0]]}),Object.keys(s.options).forEach(n=>{e[n]=t.find(e=>e.find(e=>e[n]))[s.options[n]][n]}),e},o=(e,t,n)=>{if("string"==typeof e)return e;if("boolean"==typeof e)return String(e);if("function"==typeof e)return e.toString();if("object"==typeof e){if(e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)){if("Lightcord.Api.Components.general.Tabs"===t){if("react"===n)return'React.createElement("div", {style: {\n marginTop: "20px", marginBottom: "20px"\n}},\n React.createElement("div", {style: {\n backgroundColor: "var(--background-secondary)",\n padding: "30px 30px",\n borderRadius: "8px"\n }, className: "lc-tab-box-shadow" },\n React.createElement(Lightcord.Api.Components.general.Title, null, "Preview tabs")\n )\n)';if("jsx"===n)return'
\n
\n Preview tabs\n
\n
'}return"Your components here."}return JSON.stringify(e,null," ")}return String(e)},i=function(t){const n=e.displayName||e.name;const s=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][n])}.${n}`,i=r();if("jsx"===t){let e,n=[],r=null;if(Object.keys(i).forEach(e=>{if("children"==e)r=o(i[e],s,t);else{let r=e+"=";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=`{${o(i[e],s,t)}}`,n.push(r)}}),r){return e=`<${s} ${n.join(" ")}>`,`${e}\n ${r}\n${``}`}return e=`<${s} ${n.join(" ")}/>`,e}if("react"===t){let e=i.children||null;delete i.children,e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)&&(e=o(e,s,t));let n=[];Object.keys(i).forEach(e=>{let r=(/[^\w\d_]/g.test(e)?JSON.stringify(e):e)+": ";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=o(i[e],s,t).split("\n").map((e,t)=>0===t?e:" "+e).join("\n"),n.push(r)});let r="{";n.length?n.forEach((e,t)=>{let s=t===n.length-1;0===t||(r+=","),r+="\n ",r+=e,s&&(r+="\n}")}):r+="}";let a="string"==typeof e&&e.startsWith("React.createElement")?e:JSON.stringify(e);return`React.createElement(${s}, ${r}, ${a})`}},a=e.help||{},l=a.info?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"info"},a.info):null,c=a.warn?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"warn"},a.warn):null,d=a.danger?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"danger"},a.danger):null,u=a.error?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"error"},a.error):null,h=a.success?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"success"},a.success):null;return React.createElement("div",null,React.createElement(window.Lightcord.Api.Components.general.SettingsTitle,null,e.displayName||e.name),l,h,c,u,d,t.map(e=>{if(e[0].onClick)return null;if(e[0].text)return null;if(e[0].children)return null;if(1===e.length)return null;let t=Object.keys(e[0])[0];return[React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,t),React.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{options:e.map((e,t)=>({value:"opt-"+t,label:JSON.stringify(e[Object.keys(e)[0]])})),value:"opt-"+(s.options[t]||"0"),onChange:e=>{n({options:Object.assign({},s.options,{[t]:(e.value||"0").replace("opt-","")})})},searchable:!0}),React.createElement("div",{style:{marginBottom:"8px"}})]}),React.createElement(window.Lightcord.Api.Components.general.Tabs,{tabs:[{label:"Preview",id:"preview"},{label:"Code",id:"code"}],active:s.tab,children:"preview"===s.tab?React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(e,r()))):React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"JSX"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"jsx",content:i("jsx")}),React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"React"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"js",content:i("react")}))),onChange:e=>{n({tab:e})}}))})]}get renders(){}}const zn=ie.React;class Hn extends zn.Component{render(){const e=this.props.size||"18px";return zn.createElement("svg",{viewBox:"0 0 24 24",fill:"var(--text-normal)",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},zn.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),zn.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}class Un extends React.PureComponent{render(){let e=l.find(e=>e.Separator&&e.Header&&e.Item);const t=React.createElement(P,{color:"black",side:"top",text:"Changelog"},React.createElement("span",{style:{float:"right",cursor:"pointer"},className:"bd-changelog-button",onClick:()=>{d.showChangelogModal(bbdChangelog)}},React.createElement(Hn,{className:"bd-icon",size:"16px"})));return new e.Header({children:React.createElement("span",null,"Bandaged BD",t),className:"ui-tab-bar-header"})}}let qn=!1;var Gn=new class{constructor(){this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new Se,this.registerComponents()}registerComponents(){this.sidebar.register("lightcord",Vn(this.lightcordComponent.bind(this))),this.sidebar.register("status",Vn(this.PresenceComponent.bind(this))),this.sidebar.register("accountinfo",Vn(this.AccountInfosComponent.bind(this))),this.sidebar.register("lcapipreview",Vn(this.ApiPreviewComponent.bind(this))),this.sidebar.register("BDChangelogTitle",Vn(()=>(new Un).render())),this.sidebar.register("core",Vn(this.coreComponent.bind(this))),this.sidebar.register("customcss",Vn(this.customCssComponent.bind(this))),this.sidebar.register("plugins",Vn(this.renderAddonPane("plugins"))),this.sidebar.register("themes",Vn(this.renderAddonPane("themes")))}get root(){const e=c.query("#bd-settingspane-container");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e,t]=[BDModules.get(e=>e.layer&&e.animating)[0].layer.split(" ")[0],BDModules.get(e=>e.standardSidebarView)[0]];const n=c.query("."+e+" ."+t.standardSidebarView.split(" ")[0]+", ."+e+" .ui-standard-sidebar-view");if(!n)return!1;const s=c.createElement(`
`);return n.append(s),d.onRemoved(s,()=>{ie.reactDom.unmountComponentAtNode(s)}),!0}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get lightcordSettings(){const e=this.getSettings("lightcord");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get PresenceSettings(){return this.getSettings("status")}get MsgLogSettings(){return this.getSettings("msglog")}getSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}onClick(){}onChange(e,t,n){this.updateSettings(e,t,n)}updateSettings(e,t,n){if(["lightcord-8","no_window_bound","enable_glasstron"].includes(e)||(me[e]=t),"bda-gs-2"==e&&(t?c.addClass(document.body,"bd-minimal"):c.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?c.addClass(document.body,"bd-minimal-chan"):c.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?_e.addButton():_e.removeButton()),"bda-gs-4"==e&&(t?Ie.start():Ie.stop()),"bda-gs-5"==e&&(t?c.addClass(c.query("#app-mount"),"bda-dark"):c.removeClass(c.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&De.inject24Hour(),"bda-gs-7"==e&&(t?ke.injectColoredText():ke.removeColoredText()),"fork-ps-4"==e&&(t?We.start():We.stop()),"fork-ps-5"==e&&(t?(se.watchContent("plugin"),se.watchContent("theme")):(se.unwatchContent("plugin"),se.unwatchContent("theme"))),"fork-wp-1"==e&&(d.setWindowPreference("transparent",t),t?d.setWindowPreference("backgroundColor",null):d.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?ze.startDebugListener():ze.stopDebugListener()),"fork-dm-1"==e&&(t?ze.startCopySelector():ze.stopCopySelector()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t,n.forceUpdate()),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){Nt.enable();const e=BDModules.get(e=>e.default&&"object"==typeof e.default&&"showCurrentGame"in e.default)[0];e&&!e.default.showCurrentGame&&BDModules.get(e=>e.default&&e.default.updateRemoteSettings)[0].default.updateRemoteSettings({showCurrentGame:!0})}else Nt.disable();if("lightcord-3"===e&&(t?r.remote.getCurrentWindow().setAlwaysOnTop(!0):r.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?Rn.enable():Rn.disable()),"lightcord-6"===e&&(t?_n.enable():_n.disable()),"lightcord-7"===e&&(t?In.enable():In.disable()),"lightcord-8"===e){let e=r.remote.getGlobal("appSettings");e.set("isTabs",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("no_window_bound"===e){let e=r.remote.getGlobal("appSettings");e.set("NO_WINDOWS_BOUND",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("enable_glasstron"===e){let e=r.remote.getGlobal("appSettings");e.set("GLASSTRON",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}this.saveSettings()}async initializeSettings(){me["bda-gs-2"]&&c.addClass(document.body,"bd-minimal"),me["bda-gs-3"]&&c.addClass(document.body,"bd-minimal-chan"),me["bda-gs-1"]&&_e.addButton(),me["bda-gs-4"]&&Ie.start(),me["bda-gs-5"]&&c.addClass(c.query("#app-mount"),"bda-dark"),me["bda-gs-6"]&&De.inject24Hour(),me["bda-gs-7"]&&ke.injectColoredText(),me["fork-ps-4"]&&We.start(),me["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),me["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),me["lightcord-presence-1"]&&Nt.enable(),me["lightcord-3"]&&r.remote.getCurrentWindow().setAlwaysOnTop(!0),me["lightcord-4"]&&Rn.enable(),me["lightcord-6"]&&_n.enable(),me["lightcord-7"]&&In.enable(),me["fork-ps-5"]&&(se.watchContent("plugin"),se.watchContent("theme")),me["bda-gs-8"]&&ze.startDebugListener(),me["fork-dm-1"]&&ze.startCopySelector(),this.saveSettings()}saveSettings(){g.setSettingGroup("settings",me),g.setSettingGroup("rpc",ge)}loadSettings(){Object.assign(me,g.getSettingGroup("settings")),Object.assign(ge,g.getSettingGroup("rpc"))}renderSidebar(e){return this.sidebar.render(e)}coreComponent(){return ie.react.createElement(Ke,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings})}lightcordComponent(e,t){let n=r.remote.getGlobal("appSettings");return[this.lightcordSettings.map((t,s)=>[0===s?null:ie.react.createElement(Ye),ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},t.title),t.settings.map(t=>{let s=me[t.id];"lightcord-8"===t.id&&(s=n.get("isTabs",!1)),"no_window_bound"===t.id&&(s=n.get("NO_WINDOWS_BOUND",!1)),"enable_glasstron"===t.id&&(s=n.get("GLASSTRON",!0));let r=ie.react.createElement(Ve,{id:t.id,key:t.id,data:t,checked:s,onChange:(t,n)=>{this.onChange(t,n,e)}});return"lightcord-8"==t.id&&s?[r,React.createElement(Lightcord.Api.Components.inputs.Button,{color:"green",look:"outlined",size:"small",hoverColor:"brand",onClick:()=>{DiscordNative.ipc.send("NEW_TAB")},wrapper:!1,disabled:!1},"Open a new Tab")]:r})]),ie.react.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick(){console.log("Should relaunch"),r.remote.app.relaunch({args:r.remote.process.argv.slice(1).concat(["--disable-betterdiscord"])}),r.remote.app.quit()},wrapper:!0},"Relaunch without BetterDiscord"),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick:()=>{qn||(qn=!0,d.showToast("Clearing cache...",{type:"info"}),t(),r.remote.getCurrentWebContents().session.clearCache().then(()=>{d.showToast("Cache is cleared !",{type:"success"}),qn=!1,t()}).catch(e=>{console.error(e),d.showToast("An error occured. Check console for more informations.",{type:"error"}),qn=!1,t()}))},wrapper:!0,disabled:qn},"Clear cache")]}PresenceComponent(){return ie.react.createElement(Ut,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings})}AccountInfosComponent(){return ie.react.createElement(xn,{key:"lapannel"})}ApiPreviewComponent(){return ie.react.createElement(Wn,{key:"lapipannel"})}customCssComponent(){return ie.react.createElement(et,{key:"csseditor"})}renderAddonPane(e){class t extends ie.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s","")}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;return Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>n}),function(){return ie.react.createElement(t,{type:e},ie.react.createElement(St,{type:e}))}}};function Vn(e){class t extends React.Component{render(){return e(n,()=>this.forceUpdate())}}let n;return e=>(n=e,t)}class Jn extends ie.reactComponent{render(){return ie.react.createElement("svg",{height:"100%",width:this.props.size||"16px",className:"bd-logo "+this.props.className,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},viewBox:"0 0 2000 2000"},ie.react.createElement("metadata",null),ie.react.createElement("defs",null,ie.react.createElement("filter",{id:"shadow1"},ie.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),ie.react.createElement("filter",{id:"shadow2"},ie.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),ie.react.createElement("filter",{id:"shadow3"},ie.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),ie.react.createElement("g",null,ie.react.createElement("path",{style:{filter:"url(#shadow3)"},d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z",fill:"#171717",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow2)"},d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z",fill:"#3E82E5",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow1)"},d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z",fill:"#FFFFFF",opacity:"1"})))}}function Zn(){return(Zn=Object.assign||function(e){for(var t=1;t/g};let Xn=BDModules.get(e=>e.CustomEmoji)[0],Qn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],es=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],ts=BDModules.get(e=>e.getAutocompleteOptions)[0],ns=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],ss=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],rs=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],os=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);var is=new class{constructor(){this.init().catch(e=>d.err("EmojiModule","An error occured",e))}async init(){if(es||(es=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),ts||(ts=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),ns||(ns=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),ss||(ss=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),rs||(rs=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),os||(os=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),es&&ts&&ns&&ss&&rs&&os){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",ts);const e=ts.getAutocompleteOptions;ts.getAutocompleteOptions=function(t,n,s,r,o){const i=e.call(this,...arguments);return i.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return bs(n),n},queryResults:e=>ns.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>as(e,t,r.emojis,n,s,ss.default.Messages.EMOJI_MATCHING,ss.default.Messages.EMOJI,es.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?rs.default.getGuild(e.guildId):null}}),(function(e){return"."+e+"."})),getPlainText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"},getRawText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"}},i}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{if(!d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.content");if(!t||!t.length)return;let n=[];const s=[];for(let e of t){if("string"!=typeof e){s.push(e);continue}let r,o=!1;do{if(r=Kn.EmojiRegex.exec(e),r){o=!0,Qn||(Qn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=Qn.default.getCustomEmojiById(r[2]);e?n.push({animated:e.animated,name:e.name,id:e.id,raw:r[0]}):n.push({animated:r[0].startsWith("{if(!e)return"";const o=n.find(t=>t.raw==e);return o?(Xn||(Xn=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(Xn.CustomEmoji,{emoji:{name:`.${o.name}.`,emojiId:o.id,animated:o.animated,jumboable:1===r.length&&1===t.length}})):e}).reduce((e,t)=>0===e.length?[t]:"string"==typeof t?"string"==typeof e[e.length-1]?(e[e.length-1]+=` ${t}`,e):(e.push(" "+t),e):(e.push(" ",t),e),[]);s.push(...r)}else s.push(e)}for(;e.methodArguments[0].childrenMessageContent.props.content[0];)e.methodArguments[0].childrenMessageContent.props.content.shift();for(;s[0];)e.methodArguments[0].childrenMessageContent.props.content.push(s.shift())}}))}disable(){this.cancelEmoteRender&&(this.cancelEmoteRender(),this.cancelEmoteRender=null)}start(){}};function as(e,t,n,s,r,o,i,a,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(a,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[ls(o,i,e,c),d]}function ls(e,t,n,s){var r=n.length>0?e.format({prefix:s(n)}):t;return Array.isArray(r)?r.unshift(React.createElement("strong",{},"[Lightcord] ")):r="[LIGHTCORD] "+r,React.createElement(es.default.Title,{title:r},r)}ls.displayName="renderHeader";let cs,ds,us,hs,ps=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],ms=ps&&ps.default.isEmojiDisabled,gs=!1,fs=!1;function bs(e){gs=e,fs||(ps||(ps=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),ps&&(ms||(ms=ps.default.isEmojiDisabled),fs=!0,ps.default.isEmojiDisabled=function(e){return gs?!(!e.surrogates&&!e.diversity):ms.call(this,...arguments)}))}function ys(){}ys.prototype.setConfig=function(e){Object.assign(ve,e)},ys.prototype.setMethods=function(e){cs=e},ys.prototype.init=async function(){if(!Array.prototype.flat)return void d.alert("Not Supported","BetterDiscord v"+de+" does not support this old version ("+le+") of Discord. Please update your Discord installation before proceeding.");if(ve.version
Please download the latest version from GitHub");if(window.ED)return void d.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void d.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");d.suppressErrors(this.patchAttributes.bind(this),"LC Plugin Certifier Patch")(),d.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),ie.initialize(),d.log("Startup","Updating Settings"),Gn.initializeSettings(),d.log("Startup","Loading Addons Cache"),await se.loadAddonCertifierCache(),d.log("Startup","Loading Plugins"),await v.loadPlugins(),d.log("Startup","Loading Themes"),await oe.loadThemes(),c.addStyle("customcss",atob(g.getBDData("bdcustomcss"))),window.addEventListener("beforeunload",(function(){me["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),j.start(),d.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),d.log("Startup","Initializing Main Observer"),this.initObserver(),me["fork-ps-1"]&&(d.log("Startup","Collecting Startup Errors"),d.showContentErrors({plugins:be,themes:ye}));const e=g.getBDData("version");if(de>e&&(ue&&this.showChangelogModal(ue),g.setBDData("version",de)),is.start(),d.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),d.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),d.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),d.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),d.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),d.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),d.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),ve.haveInstalledDefault){let e=d.alert("First Installation","As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.");await new Promise(t=>{e.onClose(t)})}const t=document.querySelector("#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark");t&&(t.style.top="3px",t.innerHTML='\n \n \n \n')},ys.prototype.patchAttributes=async function(){let e=[];for(this.cancelPatchAttributes=function(){e.forEach(e=>e())};!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));const t=l.find(e=>"Anchor"==e.displayName);ensureExported(e=>e.default&&"DiscordTag"===e.default.displayName).then(e=>{let n=e.default;e.default=function(e){let s=n(e),r=Rt(),o=ie.React.createElement("div",{style:{display:"inline",marginTop:"5px"}},ie.React.createElement("span",{id:"badges-"+r,key:"badges-"+r,style:{display:"inherit"}})),i=[s];"249746236008169473"===e.user.id?i.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==e.user.id&&"696003456611385396"!==e.user.id||i.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"})))),i.push(o);let a=ie.React.createElement("div",{style:{display:"block"}},i);return vs(r,e.user,!1),a}}),e.push(d.monkeyPatch(ie.MessageComponent,"default",{after:e=>{e.methodArguments[0].childrenMessageContent.props.message&&(e.returnValue.props["data-message-id"]=e.methodArguments[0].childrenMessageContent.props.message.id)}}))},ys.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=ie.guildClasses.wrapper.split(" ")[0];document.querySelectorAll(`.${s}`).length>0&&e++;const r=ie.guildClasses.listItem.split(" ")[0],o=ie.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(ve.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},ys.prototype.injectExternals=async function(){await c.addScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"),window.require.original&&(window.require=window.require.original)},ys.prototype.initSettings=function(){if(g.initialize(),g.getSettingGroup("settings")||g.getSettingGroup("rpc")){Gn.loadSettings();for(const e in pe)null==me[e]&&(me[e]=pe[e],Gn.saveSettings())}else g.getSettingGroup("settings")||Object.assign(me,pe),g.getSettingGroup("rpc")||Object.assign(ge,fe),Gn.saveSettings();window.Lightcord.Api.ensureExported(e=>e.default&&e.default.prototype&&e.default.prototype.getPredicateSections).then(e=>{let t=e.default.prototype.getPredicateSections;e.default.prototype.getPredicateSections=function(){let e=t.call(this,...arguments);if("My Account"===e[1].section){let t=[];for(t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),e.push(...Gn.renderSidebar(this));t[0];)e.push(t.pop())}return e}})},ys.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer),us||(us=BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks),hs||(hs=BDModules.get(e=>e.modal&&"string"==typeof e.modal&&e.inner&&"string"==typeof e.inner&&!e.responsiveWidthMobile)[0].modal),s.classList.contains(ds)&&("GUILD_SETTINGS"===s.getAttribute("aria-label")&&(s.setAttribute("layer-id","server-settings"),s.setAttribute("id","server-settings")),s.getElementsByClassName(us).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"))),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},ys.prototype.showChangelogModal=function(e={}){return d.showChangelogModal(e)},ys.prototype.alert=function(e,t){return d.alert(e,t)},ys.prototype.patchSocial=function(){if(this.socialPatch)return;const e=l.find(e=>"TabBar"==e.displayName),t=l.find(e=>"Anchor"==e.displayName);e&&(this.socialPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{const n=e.returnValue.props.children;if(!n||!n.length||n.length<3)return;if("Separator"!==n[n.length-3].type.displayName)return;if(!n[n.length-2].type.toString().includes("socialLinks"))return;if(t){let e=BDModules.get(e=>e.socialLinks)[0];const s=n[n.length-2].type,r=function(){const n=s(...arguments);return n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,o,i]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const a=`(${ve.hash?ve.hash.substring(0,7):ve.branch})`,l=[ie.react.createElement("div",{className:`${s} ${o.size12}`},`Lightcord ${r.remote.getGlobal("BuildInfo").version} `,ie.react.createElement("span",{className:i+" da-versionHash"},`(${(r.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),ie.react.createElement("div",{className:`${s} ${o.size12}`},`BBD ${de} `,ie.react.createElement("span",{className:i+" da-versionHash"},a))],c=n[n.length-1].type;n[n.length-1].type=function(){const e=c(...arguments);return e.props.children.splice(1,0,l),e}}}))};function vs(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;if(s.childNodes.length)return;let r=document.createElement("div");r.style.display="none",s.appendChild(r);const o=l.find(e=>"Anchor"==e.displayName);Ot.getBadges(t.id).then(e=>{e.forEach(e=>{const r={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(r.user=t)}),e.href||(r.Anchor=o,r.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=ie.React.createElement(P,{color:"black",side:"top",text:e.name},e.href?ie.react.createElement(o,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},ie.React.createElement(e.component,r)):ie.React.createElement(e.component,r)),a=document.createElement("div");ie.reactDom.render(i,a),a.childNodes.forEach(e=>{s.appendChild(e)})})})})}ys.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=l.findByProps("wrapper","unreadMentionsBar"),t=l.findByProps("guildsError","selected"),n=l.findByProps("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=ie.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=d.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;let s=t.props.className;return s+=" bd-guild",n.unread&&(s+=" bd-unread"),n.selected&&(s+=" bd-selected"),n.audio&&(s+=" bd-audio"),n.video&&(s+=" bd-video"),n.badge&&(s+=" bd-badge"),n.animatable&&(s+=" bd-animatable"),t.props.className=s,t}}}))},ys.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=l.find(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=d.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0];return t.unread&&(e.returnValue.props.className+=" bd-unread"),t.selected&&(e.returnValue.props.className+=" bd-selected"),t.hovered&&(e.returnValue.props.className+=" bd-hovered"),e.returnValue}}))},ys.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=l.findByDisplayName("Guilds"),t=l.findByProps("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},ys.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];l.find(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=d.monkeyPatch(e,"default",{after:e=>{if(!me["fork-ps-6"])return;const t=e.methodArguments[0]||null,n=d.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=Rt();n.push(ie.react.createElement("span",{id:"certified-"+s})),j.patch(t,"certified-"+s)}}))},ys.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=l.findByProps("MessageTimestamp"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=d.monkeyPatch(e,"default",{after:e=>{const n=d.getNestedProp(e.methodArguments[0],"message.author"),s=d.getNestedProp(e.returnValue,"props.children.1.props.children.1.props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"}))));const r=Rt();s.push(ie.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),vs(r,n,!0)}}))},ys.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=l.findByDisplayName("MemberListItem"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=d.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=d.getNestedProp(e.thisObject,"props.user"),s=d.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"}))));const r=Rt();s.push(ie.React.createElement("div",{id:"badges-"+r})),vs(r,n,!1)}}))},ys.prototype.updateInjector=async function(){const e=g.injectionPath;if(!e)return!1;const t=n(2),s=n(1),r=n(7),o=n(8),i=n(9),a=s.resolve(e,".."),l=s.basename(e),c="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",u=s.resolve(a,"injector.zip"),h=s.resolve(a,"BetterDiscordApp-injector");d.log("InjectorUpdate","Downloading "+c);let p=await new Promise(e=>{null.get({url:c,encoding:null},async(n,s,r)=>{if(n||200!==s.statusCode)return e(!1);await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e)),d.log("InjectorUpdate","Writing "+u),t.writeFile(u,r,t=>e(!t))})});if(!p)return p;await new Promise(e=>t.exists(h,e))&&await new Promise(e=>t.rename(h,`${h}.bak${Math.round(performance.now())}`,e));const m=await new Promise(e=>o.open(u,{lazyEntries:!0},(t,n)=>e(n)));m.on("entry",(function(e){if(e.fileName.endsWith("/"))return m.readEntry();d.log("InjectorUpdate","Extracting "+e.fileName);const n=s.resolve(a,e.fileName);i.sync(s.dirname(n)),m.openReadStream(e,(function(e,s){if(e)return p=!1;s.on("end",(function(){m.readEntry()})),s.pipe(t.createWriteStream(n))}))})),m.readEntry(),await new Promise(e=>m.once("end",e));const f=s.resolve(a,`${l}.bak${Math.round(performance.now())}`);return await new Promise(n=>t.rename(e,f,n)),d.log("InjectorUpdate",`Renaming ${s.basename(h)} to ${l}`),p=await new Promise(n=>t.rename(h,e,e=>n(!e))),p?p?(await new Promise(e=>r(f,e)),await new Promise(e=>t.unlink(u,e)),d.log("InjectorUpdate","Injector Updated!"),p):(d.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>r(h,e)),await new Promise(n=>t.rename(f,e,n)),p):(d.err("InjectorUpdate","Failed to rename the final directory"),p)};var ws=new ys;const Cs={get React(){return ie.React},get ReactDOM(){return ie.ReactDom},get ReactComponent(){return ie.ReactComponent},get WindowConfigFile(){return d.WindowConfigFile},get settings(){return he},get emotes(){return{}},get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)},get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)},getAllWindowPreferences:function(){return d.getAllWindowPreferences()},getWindowPreference:function(e){return d.getWindowPreference(e)},setWindowPreference:function(e,t){return d.setWindowPreference(e,t)},injectCSS:function(e,t){c.addStyle(c.escapeID(e),t)},clearCSS:function(e){c.removeStyle(c.escapeID(e))},linkJS:function(e,t){c.addScript(c.escapeID(e),t)},unlinkJS:function(e){c.removeScript(c.escapeID(e))},getPlugin:function(e){return Ce.hasOwnProperty(e)?Ce[e].plugin:null},getCore:function(){return d.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),ws},alert:function(e,t){return d.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return d.showConfirmationModal(e,t,n)},showToast:function(e,t={}){d.showToast(e,t)},findModule:function(e){return ie.WebpackModules.find(e)},findAllModules:function(e){return ie.WebpackModules.findAll(e)},findModuleByProps:function(...e){return ie.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return ie.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return ie.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),ie.getInternalInstance(e)},loadData:function(e,t){return g.getPluginData(e,t)}};Cs.getData=Cs.loadData,Cs.saveData=function(e,t,n){return g.setPluginData(e,t,n)},Cs.setData=Cs.saveData,Cs.deleteData=function(e,t){return g.deletePluginData(e,t)},Cs.monkeyPatch=function(e,t,n){return d.monkeyPatch(e,t,n)},Cs.onRemoved=function(e,t){return d.onRemoved(e,t)},Cs.suppressErrors=function(e,t){return d.suppressErrors(e,t)},Cs.testJSON=function(e){return d.testJSON(e)},Cs.isPluginEnabled=function(e){return!!Ee[e]},Cs.isThemeEnabled=function(e){return!!xe[e]},Cs.isSettingEnabled=function(e){return!!me[e]},Cs.enableSetting=function(e){return Gn.onChange(e,!0)},Cs.disableSetting=function(e){return Gn.onChange(e,!1)},Cs.toggleSetting=function(e){return Gn.onChange(e,!me[e])},Cs.getBDData=function(e){return g.getBDData(e)},Cs.setBDData=function(e,t){return g.setBDData(e,t)};const Es=(e,t,n)=>new class{get folder(){return n.folder}isEnabled(t){return!!e[t]}enable(e){return n.enable(e)}disable(e){return n.disable(e)}toggle(t){e[t]?this.disable(t):this.enable(t)}reload(e){return n.reload(e)}get(e){return t.hasOwnProperty(e)?t[e].plugin?t[e].plugin:t[e]:null}getAll(){return Object.keys(t).map(e=>this.get(e)).filter(e=>e)}};Cs.Plugins=Es(Ee,Ce,v),Cs.Themes=Es(xe,we,oe);var xs=Cs;window.Lightcord.BetterDiscord.BdApi=Cs,n.d(t,"default",(function(){return Ds})),function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const n=e[t];return"function"==typeof n?n.bind(e):n}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}(),(()=>{const e=document.createElement("div");e.className="bd-loaderv2",e.title="BandagedBD is loading...",document.body.appendChild(e)})();const Ss=(e,t)=>{Object.defineProperty(window,e,{get:()=>(d.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},ks=Object.keys(s);for(const e of ks)Ss(e,s[e]);Ss("BDV2",ie),Ss("pluginModule",v),Ss("themeModule",oe),Ss("Utils",d),Ss("BDEvents",b),Ss("settingsPanel",Gn),Ss("DataStore",g),Ss("ContentManager",se),Ss("ClassNormalizer",We),window.BdApi=xs,Ss("mainCore",ws);class Ds{constructor(e,t){ws.setConfig(e),ws.setMethods(t)}init(){ws.init()}}}]); \ No newline at end of file +module.exports=function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("node-fetch")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("rimraf")},function(e,t){e.exports=require("yauzl")},function(e,t){e.exports=require("mkdirp")},function(e,t,n){"use strict";n.r(t);var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return ae})),n.d(s,"currentDiscordVersion",(function(){return le})),n.d(s,"minSupportedVersion",(function(){return ce})),n.d(s,"bbdVersion",(function(){return de})),n.d(s,"bbdChangelog",(function(){return ue})),n.d(s,"settings",(function(){return he})),n.d(s,"defaultCookie",(function(){return pe})),n.d(s,"settingsCookie",(function(){return me})),n.d(s,"settingsRPC",(function(){return ge})),n.d(s,"defaultRPC",(function(){return fe})),n.d(s,"bdpluginErrors",(function(){return be})),n.d(s,"bdthemeErrors",(function(){return ye})),n.d(s,"bdConfig",(function(){return ve})),n.d(s,"bdthemes",(function(){return we})),n.d(s,"bdplugins",(function(){return Ce})),n.d(s,"pluginCookie",(function(){return Ee})),n.d(s,"themeCookie",(function(){return Se}));var r=n(0);const o=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete o.m.__extra_id__,delete o.c.__extra_id__;const i=e=>{for(const t in o.c)if(o.c.hasOwnProperty(t)){const n=o.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};let a={find:i,findAll:e=>{const t=[];for(const n in o.c)if(o.c.hasOwnProperty(n)){const s=o.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},findByProps:(...e)=>i(t=>e.every(e=>void 0!==t[e])),findByPrototypes:(...e)=>i(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>i(t=>t.displayName===e)};var l=a;window.Lightcord.BetterDiscord.WebpackModules=a;class c{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(c.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(n=>{const s=document.createElement("script");s.id=e,s.src=t,s.type="text/javascript",s.onload=n,document.head.append(s)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:n}){const s=performance.now();requestAnimationFrame((function r(o){let i=(o-s)/n;i>1&&(i=1);const a=e(i);t(a),i<1&&requestAnimationFrame(r)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const n=document.createElement("template");n.innerHTML=e;const s=n.content.cloneNode(!0);return t?s:s.childNodes.length>1?s.childNodes:s.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),n=document.createElement("span");return n.append(t),t.nodeValue=e,n.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,n){return t=t.toString().split(" ").filter(e=>e),void 0!==n?t.forEach(t=>e.classList.toggle(t,n)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,n){return e.classList.replace(t,n),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const n=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)n.push(e=e.nextElementSibling);return n}static previous(e,t=""){const n=e.previousElementSibling;return t?n&&n.matches(t)?n:null:n}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const n=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)n.push(e=e.previousElementSibling);return n}static indexInParent(e){const t=e.parentNode.childNodes;let n=0;for(let s=0;s "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const n=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)n.push(e=e.parentElement.closest(t));else for(;e.parentElement;)n.push(e=e.parentElement);return n}static parentsUntil(e,t){const n=[];for(;e.parentElement&&!e.parentElement.matches(t);)n.push(e=e.parentElement);return n}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(n=>n!=e&&n.matches(t))}static css(e,t,n){return void 0===n?global.getComputedStyle(e)[t]:(e.style[t]=n,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static once(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,a))}:function(t){s(t),e.removeEventListener(r,a)};e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static __offAll(e,t){const[n,s]=e.split(".");let r=e=>e.event==n,o=e=>e;t&&(r=e=>e.event==n&&e.element==t,o=e=>e.element==t);const i=this.listeners[s]||[],a=n?i.filter(r):i.filter(o);for(let e=0;e{this.observer.unsubscribe(s),t()};return this.observer.subscribe(s,t=>{const s=Array.from(n?t.addedNodes:t.removedNodes),r=s.indexOf(e)>-1,o=s.some(t=>t.contains(e));return r||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let n=0;ne.channelTextArea&&e.titleWrapper)[0].channelTextArea.split(" ")[0]+" textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static log(e,t){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #3a71c1; font-weight: 700;","color: #3a71c1;","")}static warn(e,t){console.warn(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #E8A400; font-weight: 700;","color: #E8A400;","")}static err(e,t,n){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: red; font-weight: 700;","color: red;",""),n&&(console.groupCollapsed("%cError: "+n.message,"color: red;"),console.error(n.stack),console.groupEnd())}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static suppressErrors(e,t){return(...n)=>{try{return e(...n)}catch(e){this.err("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,n){const{before:s,after:r,instead:o,once:i=!1,silent:a=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const u=e[t];let h=!1;const p=()=>{a||console.log("unpatch",t,"of",c),h=!0};return e[t]=function(){if(h)return u.call(this,...arguments);const n={thisObject:this,methodArguments:arguments,cancelPatch:p,originalMethod:u,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=d.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&d.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&d.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return i&&p(),n.returnValue},Object.assign(e[t],u),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=u,e[t].toString=function(){return u.toString()}),p}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=i.some(t=>t.contains(e));(a||l)&&(n.disconnect(),t())}});n.observe(document.body,{subtree:!0,childList:!0})}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce((function(e,t){return e&&e[t]}),e)}static showToast(e,t={}){if(!document.querySelector(".bd-toasts")){const e=document.querySelector("."+BDModules.get(e=>e.sidebar&&e.hasNotice)[0].sidebar.split(" ")[9]+" + div")||null,t=e?e.querySelector("."+BDModules.get(e=>e.membersWrap)[0].membersWrap):null,n=e?e.querySelector("form"):null,s=e?e.getBoundingClientRect().left:310,r=t?t.getBoundingClientRect().left:0,o=r?r-e.getBoundingClientRect().left:d.screenWidth-s-240,i=n?n.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",s+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",i+"px"),document.querySelector("#app-mount").appendChild(a)}const{type:n="",icon:s=!0,timeout:r=3e3}=t,o=document.createElement("div");o.classList.add("bd-toast"),n&&o.classList.add("toast-"+n),n&&s&&o.classList.add("icon"),o.innerText=e,document.querySelector(".bd-toasts").appendChild(o),setTimeout(()=>{o.classList.add("closing"),setTimeout(()=>{o.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},r)}static alert(e,t){let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),c.query("#app-mount").append(o);const i=[];return{close:()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{i.push(e)}}}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
`);function i(e){const t=c.createElement('
');for(const n of e){const e=c.createElement(`
\n
${n.name?n.name:n.file}
\n
${n.message}
\n \n
`);t.append(e),n.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),d.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const a=[i(e),i(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&c.removeClass(t,"selected"),c.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(a[c.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),c.query("#app-mount").append(o),e.length?o.querySelector(".tab-bar-item").click():o.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=l.findByProps("push","update","pop","popWithKey"),n=l.findByProps("fixed","improved"),s=l.findByDisplayName("Text"),r=l.findByProps("Child"),o=l.findByProps("Tags","default"),i=l.find(e=>e.defaultProps&&0==e.defaultProps.selectable),a=l.findByProps("defaultRules","parse");if(!(i&&t&&n&&s&&r&&o&&a))return;const{image:c="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:d="",changes:u=[],title:h="BandagedBD",subtitle:p=`v${de}`,footer:m}=e,g=ie.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,a.parse(d)));for(let e=0;eg("li",null,a.parse(e))));f.push(o)}const b=function(){return g(r.Child,{grow:1,shrink:1},g(o.default,{tag:o.Tags.H4},h),g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},p))},y=()=>{const e=l.find(e=>"Anchor"==e.displayName),n=l.findByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),ie.joinBD2()},i=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),a=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return g(r.Child,{grow:1,shrink:1},m||a)};return t.push((function(e){return g(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:y,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=l.findByProps("openModal","updateModal"),r=l.findByDisplayName("Markdown"),o=l.findByDisplayName("ConfirmModal");if(!s||!o||!r)return d.alert(e,t);const i=()=>{},{onConfirm:a=i,onCancel:c=i,confirmText:u="Okay",cancelText:h="Cancel",danger:p=!1,key:m}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?ie.React.createElement(r,null,e):e),s.openModal(n=>ie.React.createElement(o,Object.assign({header:e,red:p,confirmText:u,cancelText:h,onConfirm:a,onCancel:c},n),t),{modalKey:m})}static removeDa(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}}d.showToast=d.suppressErrors(d.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=d;const u=window.require,h=n(2),p=n(1),m=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var g=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={},window.Lightcord.BetterDiscord.DataStore=this}initialize(){try{h.existsSync(this.BDFile)||h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary");const e=JSON.parse(h.readFileSync(this.BDFile,"binary"));if(e.hasOwnProperty("settings")&&(this.data=e),!h.existsSync(this.settingsFile))return;let t=u(this.settingsFile);h.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[m]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),d.alert("Corrupt Storage","The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.")}}get injectionPath(){return this._injectionPath=null}get configFile(){return this._configFile||(this._configFile=p.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=p.resolve(ve.dataPath,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=p.resolve(ve.dataPath,"bdsettings.json"))}getPluginFile(e){return p.resolve(se.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[m][e]||null}setSettingGroup(e,t){this.data.settings[m][e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:h.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(h.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]):void 0}setPluginData(e,t,n){void 0!==n&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=n,h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary"))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary")}};const f=n(5);var b=new class extends f{constructor(){super(),window.Lightcord.BetterDiscord.BDEvents=this}dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class y{constructor(){window.Lightcord.BetterDiscord.PluginModule=this}get folder(){return se.pluginsFolder}}y.prototype.loadPlugins=async function(){this.loadPluginData(),be.splice(0,0,...await se.loadPlugins());const e=Object.keys(Ce);for(let t=0;tsetTimeout(e,10))}this.savePluginData(),n(0).remote.getCurrentWebContents().on("did-navigate-in-page",this.channelSwitch.bind(this))},y.prototype.startPlugin=function(e,t=!1){try{Ce[e].plugin.start(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has started.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be started.`,{type:"error"}),Ee[e]=!1,this.savePluginData(),d.err("Plugins",e+" could not be started.",n)}},y.prototype.stopPlugin=function(e,t=!1){try{Ce[e].plugin.stop(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has stopped.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be stopped.`,{type:"error"}),d.err("Plugins",Ce[e].plugin.getName()+" could not be stopped.",n)}},y.prototype.enablePlugin=function(e,t=!1){Ee[e]||(Ee[e]=!0,this.savePluginData(),this.startPlugin(e,t))},y.prototype.enable=function(e,t=!1){return this.enablePlugin(e,t)},y.prototype.disablePlugin=function(e,t=!1){Ee[e]&&(Ee[e]=!1,this.savePluginData(),this.stopPlugin(e,t))},y.prototype.disable=function(e,t=!1){return this.disablePlugin(e,t)},y.prototype.togglePlugin=function(e){Ee[e]?this.disablePlugin(e):this.enablePlugin(e)},y.prototype.toggle=function(e,t=!1){return this.togglePlugin(e,t)},y.prototype.loadPlugin=async function(e){const t=await se.loadContent(e,"plugin");if(t)return me["fork-ps-1"]&&d.showContentErrors({plugins:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(Ce).find(t=>console.log(t.filename,e)||t.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){me["fork-ps-1"]&&d.showContentErrors({plugins:[e]})}d.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),b.dispatch("plugin-loaded",n.getName())},y.prototype.unloadPlugin=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const n=t.plugin.getName();Ee[n]&&this.disablePlugin(n,!0);const s=se.unloadContent(Ce[n].filename,"plugin");if(delete Ce[n],s)return me["fork-ps-1"]&&d.showContentErrors({plugins:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("plugin-unloaded",n)},y.prototype.delete=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(se.pluginsFolder,t.filename);n(2).unlinkSync(s)},y.prototype.reloadPlugin=async function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=Ee[n];s&&this.stopPlugin(n,!0);const r=await se.reloadContent(Ce[n].filename,"plugin");if(r)return me["fork-ps-1"]&&d.showContentErrors({plugins:[r]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,r);Ce[n].plugin.load&&"function"==typeof Ce[n].plugin.load&&Ce[n].plugin.load(),s&&this.startPlugin(n,!0),d.log("ContentManager",`${n} v${Ce[n].plugin.getVersion()} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${Ce[n].plugin.getVersion()} was reloaded.`,{type:"success"}),b.dispatch("plugin-reloaded",n)},y.prototype.reload=function(e){return this.reloadPlugin(e)},y.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const s=n(1).resolve(se.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(`${s}`)},y.prototype.updatePluginList=function(){const e=se.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},y.prototype.loadPluginData=function(){const e=g.getSettingGroup("plugins");e&&Object.assign(Ee,e)},y.prototype.savePluginData=function(){g.setSettingGroup("plugins",Ee)},y.prototype.newMessage=function(){const e=Object.keys(Ce);for(let t=0;t{if(this.disabled)return;this.show();const e=new MutationObserver(t=>{t.forEach(t=>{const n=Array.from(t.removedNodes),s=n.indexOf(this.node)>-1,r=n.some(e=>e.contains(this.node));(s||r)&&(this.hide(),e.disconnect())})});e.observe(document.body,{subtree:!0,childList:!0})}),this.node.addEventListener("mouseleave",()=>{this.hide()})}get container(){return document.querySelector("."+BDModules.get(e=>e.popouts)[0].popouts.split(" ")[0]+" ~ ."+BDModules.get(e=>e.layerContainer)[0].layerContainer.split(" ")[0])}get canShowAbove(){return this.node.getBoundingClientRect().top-this.element.offsetHeight>=0}get canShowBelow(){return this.node.getBoundingClientRect().top+this.node.offsetHeight+this.element.offsetHeight<=d.screenHeight}get canShowLeft(){return this.node.getBoundingClientRect().left-this.element.offsetWidth>=0}get canShowRight(){return this.node.getBoundingClientRect().left+this.node.offsetWidth+this.element.offsetWidth<=d.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${k().tooltip} ${M(this.style)}`,this.labelElement.textContent=this.label,this.container.append(this.element),"top"==this.side&&(this.canShowAbove||!this.canShowAbove&&this.preventFlip?this.showAbove():this.showBelow()),"bottom"==this.side&&(this.canShowBelow||!this.canShowBelow&&this.preventFlip?this.showBelow():this.showAbove()),"left"==this.side&&(this.canShowLeft||!this.canShowLeft&&this.preventFlip?this.showLeft():this.showRight()),"right"==this.side&&(this.canShowRight||!this.canShowRight&&this.preventFlip?this.showRight():this.showLeft())}showAbove(){this.tooltipElement.classList.add(M("top")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(M("bottom")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(M("left")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(M("right")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left+this.node.offsetWidth+10)),this.centerVertically()}centerHorizontally(){const e=this.node.getBoundingClientRect().left+this.node.offsetWidth/2;this.element.style.setProperty("left",N(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",N(e-this.element.offsetHeight/2))}}var P=class extends React.Component{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=ie.reactDom.findDOMNode(this),this.tooltip=new L(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}},A=n(2),T=n(1);const R={},$={};var j=new class{constructor(){window.Lightcord.BetterDiscord.PluginCertifier=this}patch(e,t){process.nextTick(()=>{!function(e,t){if(!document.getElementById(t))return;if(!e.url.startsWith("https://cdn.discordapp.com/"))return document.getElementById(t).remove();if(!e.filename.endsWith(".plugin.js")&&!e.filename.endsWith(".theme.css"))return document.getElementById(t).remove();E()(e.url,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(n=>{if(200!==n.status)throw new Error("File doesn't exist.");const s=w.createHash("sha256");let o=Buffer.alloc(0);n.body.on("data",e=>{o=Buffer.concat([o,e]),s.update(e)}),n.body.on("end",()=>{const n=s.digest("hex");$[e.url]=n,O[n]=e.url,_(n,o,e.filename,n=>{!function(e,t,n){const s=document.getElementById(e);if(!s||s.childNodes.length>0)return;F||(F=BDModules.get(e=>e.flowerStarContainer)[0]);W||(W=BDModules.get(e=>e.childContainer)[0]);if(t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let o of s.children)"A"===o.tagName?o.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),d.showConfirmationModal("Are you sure you want to download this ?","The "+t.type.toLowerCase()+" **"+n+"** might be dangerous **("+t.harm+")**. \n\n**We don't recommand to download it**. However, you can still do it below.",{confirmText:"Download Anyway",cancelText:"Don't !",danger:!0,onCancel:()=>{},onConfirm:()=>{r.remote.shell.openExternal(o.href)}})}):["div"].includes(o.tagName.toLowerCase())&&e(o)};e(s.parentNode)}catch(e){console.error(e)}ie.reactDom.render(ie.react.createElement(P,{text:t.type+" "+t.name+" is potentially dangerous."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"}},ie.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 40 32"},ie.react.createElement("rect",{x:"0",y:"0",width:"32",height:"32",mask:"url(#svg-mask-avatar-status-round-32)",fill:"#f04747",mask:"url(#svg-mask-status-dnd)",className:BDModules.get(e=>e.pointerEvents)[0].pointerEvents})))),s)}else if(t.official){s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},ie.react.createElement("path",{fill:"currentColor","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically download and load this "+t.type.toLowerCase()+". You must enable it in the settings.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}else{s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" is certified by Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#4f545c","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically install and launch this "+t.type.toLowerCase()+". You don't have anything to do.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];console.log(e),E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);console.log(s),Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}}(t,n,e.filename)},()=>{let e=document.getElementById(t);e&&e.remove()})})}).catch(()=>{})}(e,t)})}start(){}isTrusted(e){return R[e]&&!R[e].suspect}};const O={};function _(e,t,n,s,o){if(console.log(`File: ${n} hash: ${e}`),R[e]){const t=R[e];s(t)}else E()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+e,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(async r=>{if(200!==r.status)return n.endsWith(".theme.css")?o(e):void function(e,t,n,s,r){t=t.toString("utf8");let o=!1;for(let e of t.split(/[^\w\d]+/g)){for(let t of["token","email","phone","MFA","2fa","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())&&"domtokenlist"===!e.toLowerCase()){console.log(t,e),o="token stealer/virus";break}if(o)break}if(!o){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(o="obfuscation/hidden code"),!o){const t=[/_0x\w{4}\('0x[\dabcdef]+'\)/g,/_0x\w{4}\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g,/\w+\('0x[\dabcdef]+'\)/g,/\w+\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g];for(let n of t){if(o)break;n.test(e)&&(o="obfuscation/hidden code")}}}if(!o)return s(e);R[e]={suspect:!0,name:O[e].split("/").pop(),type:O[e].endsWith(".js")?"Plugin":"Theme",harm:o,hash:e,filename:r},console.log(`Found potentially dangerous ${R[e].type.toLowerCase()}: ${R[e].name}`),n(R[e])}(e,t,s,o,n);const i=await r.json();i.hash=e,i.filename=n,R[e]=i,s(i)}).catch(console.error)}function I(e,t,n=(e=>{}),s=!1){const r=w.createHash("sha256");let o=Buffer.alloc(0);Object(A.createReadStream)(e).on("data",e=>{o=Buffer.concat([o,e]),r.update(e)}).on("end",()=>{const i=r.digest("hex");if(O[i]=e,s&&te[i]){let e=te[i];if(!(e.timestampe.flowerStarContainer)[0],W=BDModules.get(e=>e.childContainer)[0];function z(e){let t=[];return Object.keys(e).forEach(n=>{t.push([n,e[n]])}),t}let H=null,U=null;function q(){H=[w.randomBytes(16).toString("base64"),w.randomBytes(32).toString("base64")]}function G(e){let t=[Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")],n=w.createCipheriv("aes-256-cbc",...t),s=n.update(Buffer.from(e,"utf8"));return s=Buffer.concat([s,n.final()]),s.toString("base64")}window.Lightcord.Api.ensureExported(e=>e.ObjectStorage).then(e=>{let t=e.impl;U=function(){t.set("PluginCertifierKeyEncryption__",btoa(JSON.stringify(H)))},setInterval(()=>{U()},1e5);try{let e=function(e){try{return JSON.parse(e)}catch(e){return e instanceof Error?new Error(e):e}}(atob(t.get("PluginCertifierKeyEncryption__")));if(e instanceof Error||!Array.isArray(e)||2!==e.length||e.find(e=>"string"!=typeof e)||16!==Buffer.from(e[0],"base64").length||32!==Buffer.from(e[1],"base64").length)return q(),void U();H=e}catch(e){q(),U()}});n(5);const V=n(1),J=n(2),Z=n(6).Module;Z.globalPaths.push(V.resolve(n(0).remote.app.getAppPath(),"node_modules"));class Y extends Error{constructor(e){super(e),this.name="MetaError"}}const K=Z._extensions[".js"],X=Z._extensions[".css"]?Z._extensions[".css"]:()=>null,Q=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,ee=/^\\@/;let te={},ne=!1;var se=new class{constructor(){this.timeCache={},this.watchers={}}patchExtensions(){ne||(ne=!0,Z._extensions[".js"]=this.getContentRequire("plugin"),Z._extensions[".css"]=this.getContentRequire("theme"))}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=J.realpathSync(V.resolve(ve.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=J.realpathSync(V.resolve(ve.dataPath+"themes/")))}loadAddonCertifierCache(){if("string"!=typeof g.getSettingGroup("PluginCertifierHashes"))g.setSettingGroup("PluginCertifierHashes",G("{}"));else try{te=JSON.parse(function(e){try{let t=w.createDecipheriv("aes-256-cbc",Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")),n=t.update(Buffer.from(e,"base64"));return n=Buffer.concat([n,t.final()]),n.toString("utf8")}catch(e){return"{}"}}(g.getSettingGroup("PluginCertifierHashes")))}catch(e){g.setSettingGroup("PluginCertifierHashes",G("{}")),te={}}Object.keys(te).forEach(e=>{let t=te[e];if(!t||"object"!=typeof t||Array.isArray(t))return delete te[e];let n=[{key:"timestamp",type:"number"},{key:"result",type:"object"},{key:"hash",type:"string"}];for(let s of n)if(!(s.key in t)||typeof t[s.key]!==s.type)return void delete te[e];t.hash===e?t.result.suspect&&delete te[e]:delete te[e]}),this.saveAddonCache()}saveAddonCache(){g.setSettingGroup("PluginCertifierHashes",G(JSON.stringify(te)))}watchContent(e){if(this.watchers[e])return;const t="plugin"===e,n=t?this.pluginsFolder:this.themesFolder,s=t?".plugin.js":".theme.css";this.watchers[e]=J.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{J.statSync(V.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?v.unloadPlugin(r):oe.unloadTheme(r)}if(!J.statSync(V.resolve(n,r)).isFile())return;const o=J.statSync(V.resolve(n,r));o&&o.mtime&&o.mtime.getTime()&&"number"==typeof o.mtime.getTime()&&this.timeCache[r]!=o.mtime.getTime()&&(this.timeCache[r]=o.mtime.getTime(),"rename"==e&&(t?await v.loadPlugin(r):await oe.loadTheme(r)),"change"==e&&(t?await v.reloadPlugin(r):await oe.reloadTheme(r)))})}unwatchContent(e){this.watchers[e]&&(this.watchers[e].close(),delete this.watchers[e])}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new Y("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],n=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//"));if(t.indexOf("META")<0)throw new Y("META was not found.");const s=d.testJSON(n);if(!s)throw new Y("META could not be parsed.");if(!s.name)throw new Y("META missing name data.");return s.format="json",s}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],n={};let s="",r="";for(const e of t.split(Q))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){n[s]=r;const t=e.indexOf(" ");s=e.substr(1,t-1),r=e.substr(t+1)}else r+=" "+e.replace("\\n","\n").replace(ee,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?K:X;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,i=V.resolve(o,V.basename(r));if(!J.existsSync(i)||r!==J.realpathSync(i))return Reflect.apply(s,this,arguments);let a=J.readFileSync(r,"utf8");a=d.stripBOM(a);const l=J.statSync(r),c=n.extractMeta(a);if(c.filename=V.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=a,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),a=`module.exports = ${JSON.stringify(c)};`),t){e._compile(a,e.filename),!d.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,a=""):a+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`}e._compile(a,r)}}makePlaceholderPlugin(e){return{plugin:{start:()=>{},getName:()=>e.name||e.filename,getAuthor:()=>"???",getDescription:()=>e.message?e.message:"This plugin was unable to be loaded. Check the author's page for updates.",getVersion:()=>"???"},name:e.name||e.filename,filename:e.filename,source:e.source?e.source:"",website:e.website?e.website:""}}async loadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t,s=n?this.pluginsFolder:this.themesFolder;if(me["fork-ps-6"]){let t=await new Promise(t=>{I(V.resolve(s,e),e=>{console.log(e),t(e)},n=>{t({suspect:!1,hash:n,filename:e,name:e})},!0)});if(t&&(te[t.hash]={timestamp:Date.now(),hash:t.hash,result:t},this.saveAddonCache(),t.suspect))return{name:e,file:e,message:"This plugin might be dangerous ("+t.harm+").",error:new Error("This plugin might be dangerous ("+t.harm+").")}}try{window.require(V.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=window.require(V.resolve(s,e));if(!r.name)return{name:e,file:e,message:"Cannot escape the ID.",error:{message:"Cannot read property 'replace' of undefined",stack:"Cannot read property 'replace' of undefined"}};if(r.id=d.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete Ce[r.plugin.getName()],Ce[r.plugin.getName()]=r}catch(t){return{name:e,file:e,message:"Could not be constructed.",error:{message:t.message,stack:t.stack}}}}else delete we[r.name],we[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(t){return{name:e,file:e,message:"Could not be unloaded.",error:{message:t.message,stack:t.stack}}}}isLoaded(e,t){const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(e){return!1}return!0}async reloadContent(e,t){const n=this.unloadContent(e,t);return n||await this.loadContent(e,t)}loadNewContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=J.readdirSync(s),o=Object.values(t?Ce:we),i=o.filter(e=>!r.includes(e.filename)).map(e=>t?e.plugin.getName():e.name);return{added:r.filter(e=>!o.find(t=>t.filename==e)&&e.endsWith(n)&&J.statSync(V.resolve(s,e)).isFile()),removed:i}}async loadAllContent(e){this.patchExtensions();const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=J.readdirSync(s);for(const t of o){if(!J.statSync(V.resolve(s,t)).isFile()||!t.endsWith(n))continue;const o=await this.loadContent(t,e);o&&r.push(o)}return r}loadPlugins(){return this.loadAllContent("plugin")}loadThemes(){return this.loadAllContent("theme")}};class re{constructor(){window.Lightcord.BetterDiscord.ThemeModule=this}get folder(){return se.themesFolder}}re.prototype.loadThemes=async function(){this.loadThemeData(),ye.splice(0,0,...await se.loadThemes());const e=Object.keys(we);for(let t=0;tsetTimeout(e,10))}for(const e in Se)we[e]||delete Se[e];this.saveThemeData()},re.prototype.enableTheme=function(e,t=!1){Se[e]=!0,this.saveThemeData();const n=we[e];c.addStyle(c.escapeID(n.id),unescape(n.css)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been applied.`)},re.prototype.enable=function(e,t=!1){return this.enableTheme(e,t)},re.prototype.disableTheme=function(e,t=!1){Se[e]=!1,this.saveThemeData();const n=we[e];c.removeStyle(c.escapeID(n.id)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been disabled.`)},re.prototype.disable=function(e,t=!1){return this.disableTheme(e,t)},re.prototype.toggleTheme=function(e){Se[e]?this.disableTheme(e):this.enableTheme(e)},re.prototype.toggle=function(e,t=!1){return this.toggleTheme(e,t)},re.prototype.loadTheme=async function(e){const t=await se.loadContent(e,"theme");if(t)return me["fork-ps-1"]&&d.showContentErrors({themes:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded. It may not have been loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(we).find(t=>t.filename==e);d.log("ContentManager",`${n.name} v${n.version} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),b.dispatch("theme-loaded",n.name)},re.prototype.unloadTheme=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const n=t.name;Se[n]&&this.disableTheme(n,!0);const s=se.unloadContent(we[n].filename,"theme");if(delete we[n],s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("theme-unloaded",n)},re.prototype.delete=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(se.themesFolder,t.filename);n(2).unlinkSync(s)},re.prototype.reloadTheme=async function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return this.loadTheme(e);const n=t.name,s=await se.reloadContent(we[n].filename,"theme");if(Se[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,s);d.log("ContentManager",`${n} v${we[n].version} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${we[n].version} was reloaded.`,{type:"success"}),b.dispatch("theme-reloaded",n)},re.prototype.reload=function(e){return this.reloadTheme(e)},re.prototype.edit=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const s=n(1).resolve(se.themesFolder,t.filename);n(0).shell.openItem(`${s}`)},re.prototype.updateThemeList=function(){const e=se.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},re.prototype.loadThemeData=function(){const e=g.getSettingGroup("themes");e&&Object.assign(Se,e)},re.prototype.saveThemeData=function(){g.setSettingGroup("themes",Se)};var oe=new re,ie=new class{constructor(){this.editorDetached=!1,this.WebpackModules=(()=>{const e=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete e.m.__extra_id__,delete e.c.__extra_id__;const t=(e,t)=>{let n=t?e:e.default;if(!n)return e;if(n.remove&&n.set&&n.clear&&n.get&&!n.sort)return null;if(!n.getToken&&!n.getEmail&&!n.showToken)return e;const s=new Proxy(n,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t&&e.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t&&e.getEmail?()=>"puppet11112@gmail.com":"showToken"==t&&e.showToken?()=>!0:"__proto__"==t&&e.__proto__?s:e[t]}});return t?s:Object.assign({},e,{default:s})},n=n=>{for(const s in e.c)if(e.c.hasOwnProperty(s)){const r=e.c[s].exports;if(r&&r.__esModule&&r.default&&n(r.default))return t(r.default,!0);if(r&&n(r))return t(r,!1)}return null};return{find:n,findAll:n=>{const s=[];for(const r in e.c)if(e.c.hasOwnProperty(r)){const o=e.c[r].exports;o&&o.__esModule&&o.default&&n(o.default)?s.push(t(o.default,!0)):o&&n(o)&&s.push(t(o,!1))}return s},findByUniqueProperties:e=>n(t=>e.every(e=>void 0!==t[e])),findByPrototypes:e=>n(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>n(t=>t.displayName===e)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),reactDom:this.WebpackModules.findByUniqueProperties(["findDOMNode"])},this.getInternalInstance=e=>e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))],window.Lightcord.BetterDiscord.V2=this}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}joinLC(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("7eFff2A")}leaveLC(){this.GuildActions.leaveGuild("705908350218666117")}get react(){return this.internal.react}get React(){return this.internal.react}get reactDom(){return this.internal.reactDom}get ReactDom(){return this.internal.reactDom}get reactComponent(){return this.internal.react.Component}get ReactComponent(){return this.internal.react.Component}get anchorClasses(){return this.WebpackModules.findByUniqueProperties(["anchorUnderlineOnHover"])||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"}}get slateEditorClasses(){return this.WebpackModules.findByUniqueProperties(["slateTextArea"])}get messageClasses(){return this.WebpackModules.findByUniqueProperties(["message","containerCozy"])}get guildClasses(){const e=BDModules.get(e=>e.wrapper&&e.unreadMentionsBar)[0],t=BDModules.get(e=>e.guildsError&&e.selected)[0],n=BDModules.get(e=>e.blobContainer)[0];return Object.assign({},e,t,n)}get MessageContentComponent(){return this.WebpackModules.find(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get MessageComponent(){return this.WebpackModules.find(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName)}get TimeFormatter(){return this.WebpackModules.findByUniqueProperties(["dateFormat"])}get TooltipWrapper(){return this.WebpackModules.findByDisplayName("Tooltip")}get NativeModule(){return this.WebpackModules.findByUniqueProperties(["setBadge"])}get InviteActions(){return this.WebpackModules.findByUniqueProperties(["acceptInvite"])}get GuildActions(){return this.WebpackModules.findByUniqueProperties(["leaveGuild"])}get Tooltips(){return this.WebpackModules.find(e=>e.hide&&e.show&&!e.search&&!e.submit&&!e.search&&!e.activateRagingDemon&&!e.dismiss)}get KeyGenerator(){return this.WebpackModules.find(e=>e.toString&&/"binary"/.test(e.toString()))}get LayerStack(){return this.WebpackModules.findByUniqueProperties(["popLayer"])}get UserStore(){return this.WebpackModules.findByUniqueProperties(["getCurrentUser"])}get ChannelStore(){return this.WebpackModules.findByUniqueProperties(["getChannel"])}get ChannelActions(){return this.WebpackModules.findByUniqueProperties(["openPrivateChannel"])}get PrivateChannelActions(){return this.WebpackModules.findByUniqueProperties(["selectPrivateChannel"])}openDM(e){const t=this.UserStore.getCurrentUser().id;if(t==e)return;const n=this.ChannelStore.getDMFromUserId(e);if(n)return this.PrivateChannelActions.selectPrivateChannel(n);this.ChannelActions.openPrivateChannel(t,e)}parseSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};const ae="0.0.306",le=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",ce="0.3.0",de="0.3.5",ue={description:"BBD's changelog.",changes:[{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`.","Fixed the open folder buttons for plugins and themes"]}]},he={"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core",category:"modules"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Colored Text":{id:"bda-gs-7",info:"Make text color the same as role color",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Content Error Modal":{id:"fork-ps-1",info:"Shows a modal with plugin/theme errors",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scan Plugins":{id:"fork-ps-6",info:"Scan plugins for any threat that can be hidden inside.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for important information",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Automatic Loading":{id:"fork-ps-5",info:"Automatically loads, reloads, and unloads plugins and themes",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Enable Edit Button":{id:"fork-ps-7",info:"Enable an Edit Button on the plugin and theme panel.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode Toggle",implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Copy Selector":{id:"fork-dm-1",info:'Adds a "Copy Selector" option to context menus when developer mode is active',implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"React DevTools":{id:"reactDevTools",info:"Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.",implemented:!0,hidden:!0,cat:"core",category:"developer settings"},"Disable BetterDiscord":{id:"bd-disable",info:"Disable Betterdiscord (plugins, themes, etc) (Not implemented).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personal Information":{id:"lightcord-6",info:"Blur sensitive informations like email, payment infos and more.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Calling Ring Beat":{id:"lightcord-2",info:"Enable Discord's special calling beat.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Developer Options":{id:"lightcord-1",info:'Enable Discord\'s & Lightcord\'s Internal Developer Options. This allow the "Experiments" tab, the "Developer Options" tab and the "Lightcord Api" section.',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dms you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Enable Lightcord's servers. Disabling this will disable custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Disable typing":{id:"lightcord-7",info:"Don't let other see you're typing.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Lightcord Tabs":{id:"lightcord-8",info:"Allows you to launch multiple instances of Lightcord in the same window.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord",experimental:!0},"Always-on-Top":{id:"lightcord-3",info:"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},"No Window Bounds":{id:"no_window_bound",info:"Disable Window Bounds. Can be useful if you use a window manager.",implemented:!0,hidden:"linux"!==process.platform,cat:"lightcord",category:"Window"},"Enable Glasstron":{id:"enable_glasstron",info:"Enable Glasstron. If you're not using transparent themes, this can reduce lag.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},pe={"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!0,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-4":!1,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-ps-5":!0,"fork-ps-6":!0,"fork-ps-7":!1,"fork-es-2":!1,"fork-es-3":!0,"fork-wp-1":!1,"fork-wp-2":!1,"fork-beta":!0,reactDevTools:!1,"lightcord-1":!1,"lightcord-2":!0,"lightcord-presence-1":!1,"lightcord-3":!1,"lightcord-4":!1,"lightcord-5":!0,"lightcord-6":!0,"lightcord-7":!1,"lightcord-8":!1,no_window_bound:!1},me={},ge={},fe={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},be=[],ye=[],ve=Object.create(BetterDiscordConfig),we={},Ce={},Ee={},Se={};class xe{constructor(){this.panels={}}register(e,t){this.panels[e]=t}getComponent(e,t){return this.panels[e](t)}get items(){return[{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"}]}get LCitems(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get LCDevItems(){let e=[];return window.Lightcord.Settings.devMode?(e.push({section:"DIVIDER"},{section:"HEADER",label:"Lightcord Api"},{text:"Components Preview",id:"lcapipreview"}),e):e}render(e){return[{section:"HEADER",label:"Lightcord"},...this.LCitems.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),...this.LCDevItems.map(t=>t.section?t:{section:t.id,label:t.text,element:this.getComponent(t.id,e)}),{section:"DIVIDER"},{section:"CUSTOM",element:this.getComponent("BDChangelogTitle")},...this.items.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),{section:"DIVIDER"}]}}var ke=new class{injectColoredText(){this.cancelColoredText||ie.MessageComponent&&(this.cancelColoredText=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{const t=e.methodArguments[0];if(!t||!t.childrenMessageContent)return;const n=t.childrenMessageContent;if(!n.type||!n.type.type||"MessageContent"!=n.type.type.displayName)return;const s=n.type.type;s.__originalMethod||(n.type.type=function(e){const t=s(e),n=me["bda-gs-7"]&&e.message.colorString||"";return t.props.style={color:n},t},n.type.type.__originalMethod=s,Object.assign(n.type.type,s))}}))}removeColoredText(){let e=BDModules.get(e=>e.markup)[0].markup;document.querySelectorAll("."+e.split(" ")[0]).forEach(e=>{e.style.setProperty("color","")})}},De=new class{inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{if(!me["bda-gs-6"])return;const n=t.returnValue.match(e);return n&&4===n.length?"AM"===n[3]?t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"00":n[1].padStart(2,"0")}:${n[2]}`):t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"12":parseInt(n[1])+12}:${n[2]}`):void 0},n=d.monkeyPatch(ie.TimeFormatter,"calendarFormat",{after:t}),s=d.monkeyPatch(ie.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};class Me extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},ie.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},ie.react.createElement("path",{d:"M0 0h12v12H0"}),ie.react.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Be extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this)}render(){let e=BDModules.get(e=>e.toolsContainer)[0],t=BDModules.get(e=>e.container&&e.closeButton&&e.closeButtonBold)[0];return ie.react.createElement("div",{className:"tools-container "+e.toolsContainer},ie.react.createElement("div",{className:"tools "+e.tools},ie.react.createElement("div",{className:t.container},ie.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},ie.react.createElement(Me,null)),ie.react.createElement("div",{className:"esc-text "+t.keybind},"ESC"))))}onClick(){this.props.onClick&&this.props.onClick();const e=document.querySelector("."+BDModules.get(e=>e.closeButton&&e.keybindBold)[0].closeButton.split(" ")[0]);e&&e.click()}}class Ne extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text)}}class Le extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Pe extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class Ae extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return ie.react.createElement("div",{className:`ui-tab-bar-item${this.props.selected?" selected":""}`,onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class Te extends ie.reactComponent{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;let t=BDModules.get(e=>e.card&&e.cardPrimary)[0],n=BDModules.get(e=>e.flexChild&&e._horizontalReverse)[0],s=BDModules.get(e=>e.noWrap&&!e.streamerModeEnabled)[0];return ie.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},ie.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this),draggable:!1}),ie.react.createElement("div",{className:n.flexChild+" bd-server-content"},ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},ie.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),ie.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},ie.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},ie.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},ie.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},ie.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class Re extends ie.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.scrollerHorizontal)[0],t=BDModules.get(e=>e.sidebarRegionScroller)[0],n=`${e.scrollerWrap} ${e.scrollerThemed} ${e.themeGhostHairline}${this.props.fade?" "+e.scrollerFade:""}`,s=e.scroller+" scroller";this.props.sidebar&&(s+=` ${t.sidebarRegionScroller} sidebar-region-scroller`),this.props.contentColumn&&(s+=" "+t.contentRegionScroller+" content-region-scroller",n=`${e.scrollerWrap} ${t.contentRegionScrollerWrap} content-region-scroller-wrap ${e.scrollerThemed} ${e.themeGhost} ${e.scrollerTrack}`);const{children:r}=this.props;return ie.react.createElement("div",{key:"scrollerwrap",className:n},ie.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}class $e extends ie.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return ie.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},ie.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},ie.react.createElement(Re,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),ie.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},ie.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},ie.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},ie.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class je extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=ie.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=ie.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=ie.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=ie.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){ie.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const n=this;fetch(`${n.endPoint}${e}${e?"&schema=new":"?schema=new"}`,{method:"get"}).then(async e=>{if(200!==e.status)throw await e.text();let s=await e.json(),r=s.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(r=n.state.servers.concat(r));let o=s.size+s.from;s.next=`?from=${o}`,n.state.term&&(s.next+=`&term=${n.state.term}`),n.state.selectedCategory&&(s.next+=`&category=${n.categoryButtons[n.state.selectedCategory]}`),o>=s.total&&(o=s.total,s.next=null);let i=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(i+=` for ${n.state.term}`),n.setState({loading:!1,title:i,servers:r,next:s.next}),t&&(n.refs.sbv.refs.contentScroller.scrollTop=0)}).catch(e=>(console.error(e),n.setState({loading:!1,title:"Failed to load servers. Check console for details"})))}async join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);await fetch(`${this.joinEndPoint}/${e.props.server.identifier}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),e.setState({joined:!0})}connect(){const e=this,t=e.windowOptions;t.x=Math.round(window.screenX+window.innerWidth/2-t.width/2),t.y=Math.round(window.screenY+window.innerHeight/2-t.height/2),e.joinWindow=new(window.require("electron").remote.BrowserWindow)(t);e.joinWindow.webContents.on("did-navigate",(t,n)=>{"https://auth.discordservers.com/info"==n&&(e.joinWindow.close(),e.checkConnection())}),e.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.getFlattenedGuildIds(),t=this.AvatarDefaults.DEFAULT_AVATARS;return[ie.react.createElement(Te,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://avatars3.githubusercontent.com/u/65690058?s=200&v=4",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),ie.react.createElement(Te,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})]}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}async checkConnection(){const e=this;try{const t=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),n=await t.json();e.setState({selectedCategory:0,connection:{state:2,user:n}}),e.search("",!0)}catch(t){console.error(t),e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return ie.react.createElement($e,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:ie.react.createElement(Be,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return ie.react.createElement("div",{className:"sidebar",key:"ps"},ie.react.createElement("div",{className:"ui-tab-bar SIDE"},ie.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),ie.react.createElement(Le,null),this.searchInput,ie.react.createElement(Le,null),ie.react.createElement(Pe,{text:"Categories"}),this.categoryButtons.map((e,t)=>ie.react.createElement(Ae,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),ie.react.createElement(Le,null),this.footer,this.connection))}get searchInput(){return ie.react.createElement("div",{className:"ui-form-item"},ie.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},ie.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let n=`?term=${e.target.value}`;0!==t.state.selectedCategory&&(n+=`&category=${t.categoryButtons[t.state.selectedCategory]}`),t.search(n,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search(`?category=${t.categoryButtons[e]}`,!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.getFlattenedGuildIds(),n=this.AvatarDefaults.DEFAULT_AVATARS;if(1===e.state.connection.state)return e.notConnected;let s=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},ie.react.createElement(Ne,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>ie.react.createElement(Te,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&ie.react.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},ie.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&ie.react.createElement(Ne,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",ie.react.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},ie.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},ie.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?ie.react.createElement("span",null):ie.react.createElement("span",null,ie.react.createElement(Le,null),ie.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),ie.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},ie.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},ie.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Oe extends ie.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&ie.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*t}) translateZ(0px)`,e.style.opacity=t,1==t&&setImmediate(()=>{e.style.transform="",e.style.opacity=""})}})}componentWillUnmount(){window.removeEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*(1-t)}) translateZ(0px)`,e.style.opacity=1-t,1==t&&setImmediate(()=>{e.remove()})}});const t=c.query(".publicServersOpen");t.classList.remove("publicServersOpen"),c.animate({duration:200,update:function(e){t.style.transform=`scale(${.07*e+.93}) translateZ(0px)`,t.style.opacity=e,1==e&&setImmediate(()=>{t.style.transform="",t.style.opacity=""})}})}componentWillMount(){const e=c.query('[class*="layer-"]');e.classList.add("publicServersOpen"),c.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return ie.react.createElement("div",{className:"layer bd-layer "+BDModules.get(e=>e.layer&&e.animating)[0].layer,id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var _e=new class{constructor(){this._appendButton=this._appendButton.bind(this),window.Lightcord.BetterDiscord.V2_PublicServers=this}get component(){return ie.react.createElement(Oe,{rootId:"pubslayerroot",id:"pubslayer"},ie.react.createElement(je,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e]=[BDModules.get(e=>e.layers&&e.layer)[0].layers.split(" ")[0]];const t=c.query(".layers, ."+e);return!!t&&(t.append(c.createElement("
")),!0)}render(){const e=this.root;e?ie.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=c.createElement(`
`);me["bda-gs-1"]||(e.style.display="none");const t=c.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[d.removeDa(BDModules.get(e=>e.downloadProgress&&e.tutorialContainer)[0].tutorialContainer)];if(c.query("#bd-pub-li"))return;const t=c.query(`div.${e} > div`);c.after(t,this.button)}addButton(){if(this.guildPatch)return;const e=l.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=l.findByDisplayName("Guilds");e||t||d.warn("PublicServer","Can't find GuildList component"),this.guildPatch=d.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch,c.query("#bd-pub-li").remove()}};var Ie=new class{start(){c.addStyle("VoiceMode","\n .container-2Rl01u {\n display: none!important;\n }\n\n .chat-3bRxxu {\n display: none!important;\n }\n\n .sidebar-2K8pFh {\n flex-grow: 1!important;\n }\n")}stop(){c.removeStyle("VoiceMode")}};const Fe=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var We=new class{constructor(){window.Lightcord.BetterDiscord.ClassNormalizer=this}stop(){this.hasPatched&&(this.unpatchClassModules(l.findAll(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(l.findAll(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const n=e[t];if("string"!=typeof n)return!1;if(!this.shouldIgnore(n)){if(1===n.split("-").length)return!1;if(!Fe.test(n.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;const r=s.split(" ");for(const s of r){const r=s.match(Fe);if(!r||!r.length||r.length<2)continue;const o=r[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[n]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;let r="";const o=s.split(" ");for(const t of o)t.startsWith(`${e}-`)||(r+=` ${t}`);t[n]=r.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let n=0,s=t.length;nt?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${s}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,n=[];for(let e=0;ee.layer&&"string"==typeof e.layer&&e.disabledPointerEvents)[0],BDModules.get(e=>e.menu)[0]];setTimeout((function(){if(!s||!n.layer)return console.log(s,n.layer);let r=c.query("."+d.removeDa(s.menu));if(!r){const t=c.query("#app-mount > ."+d.removeDa(n.layerContainer)),o=c.createElement(`
`);r=c.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.setAttribute("role","menu"),o.setAttribute("tabindex","-1"),o.id="bd-copy-selector-context",o.setAttribute("aria-label","Copy Selector Actions");const i=BDModules.get(e=>e.scrollerWrap)[0],a=c.createElement(`
`),l=c.createElement(`
`);a.append(l),r.append(a);const u=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",u),document.removeEventListener("contextmenu",u),document.removeEventListener("keyup",u))};document.addEventListener("click",u),document.addEventListener("contextmenu",u),document.addEventListener("keyup",u)}const o=r.parentElement,i=r.childNodes[0].childNodes[0],a=c.createElement('
'),l=c.createElement(``);if(l.append(c.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{ie.NativeModule.copy(t),o.style.display="none"}),l.addEventListener("mouseover",e=>{let t=c.queryAll("div[role=menuitem]."+d.removeDa(s.focused));t&&t.forEach(e=>e.classList.remove(s.focused)),l.classList.add(s.focused)}),l.addEventListener("mouseout",e=>{l.classList.remove(s.focused)}),a.append(l),i.childNodes.length){const e=c.createElement(``);i.append(e)}i.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+("string"==typeof e.className&&e.className||"").split(" ").filter(e=>!!e).map(e=>"."+e).join("")+":nth-child("+n+")")}e=e.parentNode}return t.join(" > ")}(e)}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}};const He=ie.React;class Ue extends He.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(e){this.props.disabled||(this.props.onChange(e),this.setState({checked:e}))}render(){return He.createElement(Lightcord.Api.Components.inputs.Switch,{onChange:this.onChange,value:this.state.checked})}}let qe=[];function Ge(e){let t=qe.find(t=>t.startsWith(e+"-"));return t||(t=BDModules.get(e=>e.name)[0],qe.push(t),t)}class Ve extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(){this.props.checked=!this.props.checked,this.props.onChange(this.props.id,this.props.checked)}render(){let{text:e,info:t}=this.props.data;return qe.find(e=>e.startsWith("beta-"))||qe.push(BDModules.get(e=>e.beta&&!e.container&&!e.userSettingsVoice)[0].beta),this.props.data.experimental&&(t=[t,React.createElement("sup",{className:Ge("beta")},"(EXPERIMENTAL)")]),ie.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},ie.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},ie.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),ie.react.createElement(Ue,{onChange:this.onChange,checked:this.props.checked})),ie.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Je extends ie.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?ie.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[ie.react.createElement(Ne,{text:e}),s,t.map(e=>ie.react.createElement(Ve,{id:e.id,key:e.id,data:e,checked:me[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}let Ze=BDModules.get(e=>e.marginTop60)[0];class Ye extends React.Component{render(){return Ze||(Ze=BDModules.get(e=>e.marginTop60)[0]),React.createElement("div",{className:Ze.marginTop60})}}class Ke extends ie.reactComponent{constructor(e){super(e)}render(){return this.props.sections.map((e,t)=>[0!==t?ie.react.createElement(Ye,{}):null,ie.react.createElement(Je,Object.assign({},e,{onChange:this.props.onChange}))])}}class Xe extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return ie.react.createElement("li",null,ie.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},ie.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},ie.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),ie.react.createElement("span",null)),ie.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class Qe extends ie.reactComponent{constructor(e){super(e);this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){c.addClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!0,this.editor=ace.edit("bd-customcss-editor-detached"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){c.removeClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!1,this.editor.destroy()}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}get root(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}render(){const e=this;return ie.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},ie.react.createElement("div",{id:"bd-customcss-innerpane"},ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Xe,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Gn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":c.query("#editor-detached")&&t.props.attach(),ie.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class et extends ie.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=ie.react.createElement(Qe,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||ie.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&ie.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return[t&&ie.react.createElement("div",{id:"editor-detached"},ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("h3",null,"Editor Detached"),ie.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&ie.react.createElement("div",null,ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Xe,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),ie.react.createElement("div",{className:"help-text"},"Press ",ie.react.createElement("code",{className:"inline"},"ctrl"),"+",ie.react.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings."))))]}onClick(e){const t=this;switch(e){case"update":t.updateCss();break;case"save":t.saveCss();break;case"detach":t.detach()}}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Gn.saveSettings()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?ie.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class tt extends ie.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?ie.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const nt=tt.prototype.render;Object.defineProperty(tt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>nt});class st extends ie.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=this.props.title?ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title):null;return[e,this.props.children]}}class rt extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"#dcddde",className:"bd-reload "+this.props.className,onClick:this.props.onClick,style:{width:this.props.size||"24px",height:this.props.size||"24px"}},ie.react.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),ie.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ot=ie.React;class it extends ot.Component{render(){const e=this.props.size||"24px";return ot.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"var(--text-normal)",style:{width:e,height:e},onClick:this.props.onClick},ot.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),ot.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const at=ie.React;class lt extends at.Component{render(){const e=this.props.size||"24px";return at.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},at.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),at.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),at.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ct=ie.React,dt=ie.anchorClasses;class ut extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.setInitialState(),this.hasSettings=this.props.addon.plugin&&"function"==typeof this.props.addon.plugin.getSettingsPanel,this.settingsPanel="",this.edit=this.edit.bind(this),this.delete=this.delete.bind(this),this.reload=this.reload.bind(this)}setInitialState(){this.state={checked:this.props.enabled,settings:!1,reloads:0,trusted:!1}}showSettings(){this.hasSettings&&this.setState({settings:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}componentDidUpdate(){this.state.settings&&("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),me["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest('div[class*="scroller-"]');if(!((e,t)=>{const n=e.scrollTop,s=n+e.clientHeight,r=t.offsetTop,o=r+t.clientHeight;return rs})(t,e))return;const n=c.offset(e),s=c.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;c.animate({duration:300,update:function(e){t.scrollTop=o>r?r+e*(o-r):r-e*(r-o)}})}))}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get settingsComponent(){try{this.settingsPanel=this.props.addon.plugin.getSettingsPanel()}catch(e){d.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return ie.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},ie.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},ie.react.createElement(Me,null)),"object"==typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:this.settingsPanel}}))}buildTitle(e,t,n){const s="{{name}} v{{version}} by {{author}}".split(/({{[A-Za-z]+}})/),r=s.findIndex(e=>"{{name}}"==e);r&&(s[r]=ct.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=ct.createElement("span",{className:"version bda-version"},t));const i=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${dt.anchor} ${dt.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{ie.LayerStack.popLayer(),ie.openDM(n.id)})),s[i]=ct.createElement(n.link||n.id?"a":"span",e,n.name)}return s.flat()}makeLink(e,t){const n={className:"bda-link bda-link-website",target:"_blank"};return"string"==typeof t&&(n.href=t),"function"==typeof t&&(n.onClick=e=>{e.preventDefault(),e.stopPropagation(),t()}),ie.react.createElement("a",n,e)}makeButton(e,t,n){return ct.createElement(P,{color:"black",side:"top",text:e},ct.createElement("div",{className:"bd-addon-button",onClick:n},t))}componentWillUnmount(){this.unmounted=!0}get links(){const e=[],t=this.props.addon;return t.website&&e.push(this.makeLink("Website",t.website)),t.source&&e.push(this.makeLink("Source",t.source)),t.invite&&e.push(this.makeLink("Support Server",()=>{const e=/\.gg\/(.*)$/;let n=t.invite;e.test(n)&&(n=n.match(e)[1]),ie.LayerStack.popLayer(),ie.InviteActions.acceptInviteAndTransitionToInviteChannel(n)})),t.donate&&e.push(this.makeLink("Donate",t.donate)),t.patreon&&e.push(this.makeLink("Patreon",t.patreon)),e}get footer(){const e=this.links;return(e.length||this.hasSettings)&&ie.react.createElement("div",{className:"bd-card-footer bda-footer"},ie.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>n{this.unmounted||this.setState({isTrusted:!e.suspect||"suspect"})},()=>{}))),ie.react.createElement("div",{className:"bd-card bd-addon-card settings-closed ui-switch-item",style:n},ie.react.createElement("div",{className:"bd-addon-header bda-header"},ie.react.createElement("div",{className:"bd-card-title bda-header-title"},this.buildTitle(this.name,this.version,{name:this.author,id:e,link:t})),ie.react.createElement("div",{className:"bd-addon-controls bda-controls"},this.props.edit&&this.makeButton("Edit",ct.createElement(it,{className:"bd-icon"}),this.edit),this.props.remove&&this.makeButton("Delete",ct.createElement(lt,{className:"bd-icon"}),this.delete),this.props.reload&&this.makeButton("Reload",ct.createElement(rt,{className:"bd-icon"}),this.reload),ct.createElement(Ue,{onChange:this.onChange,checked:this.state.checked}))),ie.react.createElement("div",{className:"bd-scroller-wrap bda-description-wrap scroller-wrap fade"},ie.react.createElement("div",{className:"bd-scroller bd-addon-description bda-description scroller"},this.description)),this.footer)}}const ht=ut.prototype.render;Object.defineProperty(ut.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>ht});const pt=ie.React;class mt extends pt.Component{render(){const e=this.props.size||"16px";return pt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},pt.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}const gt=ie.React;class ft extends gt.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=gt.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return gt.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>gt.createElement("div",{className:`bd-select-option${e.value==t.value?" selected":""}`,onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return gt.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},gt.createElement("div",{className:"bd-select-value"},this.selected.label),gt.createElement(mt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const bt=ie.React;class yt extends bt.Component{render(){const e=this.props.size||"16px";return bt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},bt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),bt.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}const vt=ie.React;class wt extends vt.Component{render(){return vt.createElement("div",{className:"bd-search-wrapper"},vt.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),vt.createElement(yt,null))}}function Ct(){return(Ct=Object.assign||function(e){for(var t=1;t{xs.showConfirmationModal("Are You Sure?",`Are you sure you want to delete ${e}?`,{danger:!0,confirmText:"Delete",onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}get sortOptions(){return[{label:"Name",value:"name"},{label:"Author",value:"author"},{label:"Version",value:"version"},{label:"Recently Added",value:"added"},{label:"Last Modified",value:"modified"},{label:"File Size",value:"size"}]}get directions(){return[{label:"Ascending",value:!0},{label:"Descending",value:!1}]}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}getProps(e){return{key:this.getName(e),enabled:this.cookie[this.getName(e)],toggle:this.manager.toggle.bind(this.manager),edit:me["fork-ps-7"]?this.edit.bind(this):null,remove:this.delete.bind(this),addon:e,hash:e.hash}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get list(){return"plugins"===this.props.type?Object.values(bdplugins):Object.values(bdthemes)}getAddons(){const e=this.list.sort((e,t)=>{const n=this.state.sort.charAt(0).toUpperCase()+this.state.sort.slice(1),s=e.plugin&&e.plugin[`get${n}`]?this.getString(e.plugin[`get${n}`]()):e[this.state.sort],r=t.plugin&&t.plugin[`get${n}`]?this.getString(t.plugin[`get${n}`]()):t[this.state.sort];return"string"==typeof s?s.toLocaleLowerCase().localeCompare(r.toLocaleLowerCase()):s>r?1:r>s?-1:0});this.state.ascending||e.reverse();const t=[];for(let n=0;n{try{d.showToast("Plugin update check in progress.",{type:"info"}),window.PluginUpdates.checkAll().then(()=>{d.showToast("Plugin update check complete.",{type:"success"})}).catch(e=>{console.error(e),d.showToast("An error occured while checking update.",{type:"error"})})}catch(e){console.error(e),d.showToast("An error occured while checking update.",{type:"error"})}},wrapper:!1,disabled:!1},"Check for Updates"))):null:null}render(){const e=St.createElement(Et,{color:"black",position:"top",text:"Reload List"},e=>St.createElement(rt,Ct({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?v.updatePluginList():oe.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return St.createElement(st,{title:`${this.props.type.toUpperCase()}—${t.length}`},St.createElement("button",{key:"folder-button",className:"bd-button bd-pfbtn",onClick:this.openFolder.bind(this)},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),this.renderCheckUpdates(),!me["fork-ps-5"]&&e,St.createElement("div",{className:"bd-controls bd-addon-controls"},St.createElement(wt,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),St.createElement("div",{className:"bd-addon-dropdowns"},St.createElement("div",{className:"bd-select-wrapper"},St.createElement("label",{className:"bd-label"},"Sort by:"),St.createElement(ft,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),St.createElement("div",{className:"bd-select-wrapper"},St.createElement("label",{className:"bd-label"},"Order:"),St.createElement(ft,{options:this.directions,onChange:this.reverse,style:"transparent"})))),St.createElement("div",{className:"bda-slist bd-addon-list"},t))}}const kt=xt.prototype.render;Object.defineProperty(xt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>kt});const Dt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,Mt=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,Bt=process.pid;var Nt=new class{constructor(){this.enabled=!1,this.game=ge}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0}}sendGame(){Dt.dispatch({type:Mt.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:Bt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(ge||Object.create(fe)),this.sendGame())}disable(){this.enabled&&(this.enabled=!1,console.log("Disabling custom RichPresence"),this.sendGame())}async fetchAssets(e){let t=await BDModules.get(e=>e.getAssets)[0].getAssets(e);if(t.undefined&&"number"==typeof t.undefined)throw new Error("Unknown Application");return t}set(e){this.game=e,this.sendGame()}};ie.react,BDModules.get(e=>e.Interval)[0];function Lt(){return(Lt=Object.assign||function(e){for(var t=1;te.default&&e.default.open&&e.default.fetchMutualFriends)[0];React.Component;function At(){return(At=Object.assign||function(e){for(var t=1;tt=e);$t[e]=n;const s=[];for(let t of Ft.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{if(!me["lightcord-5"])return t([]);jt.push([e,t]),setTimeout(()=>{let e=jt;0!==e.length&&(jt=[],_t(Wt.badges,"POST",JSON.stringify(e.map(e=>e[0]))).then(async t=>{200!==t.status&&e.forEach(e=>{e[1]([])});const n=await t.json();for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{t instanceof It||console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)Ft.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(Ft.badges.find(t=>t.id===e)));return this.cache={badges:Object.assign(this.cache.badges,{[e]:s})},setTimeout(()=>{delete this.cache.badges[e]},6e5),t(s),delete $t[e],s}};const _t=function(e,t,n){return me["lightcord-5"]?E()(`${Ft.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}}):Promise.reject(new It("The current settings blocked the request."))};class It extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const Ft={SERVER_URL:"https://lightcord.deroku.xyz",badges:[{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:["696481194443014174","696003456611385396"],scopes:[],component:Pt,href:"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter"},{name:"Buffoon",id:"06904d31-65b4-41ec-a50c-8658bbd1af96",defaultUsers:["389016895543705602","664600134528663565","625350657829896224"],scopes:[],component:Tt,href:"https://youtu.be/EJtb6z-dlT8?t=145"}]},Wt={badges:"/users/badges"},zt=ie.React;let Ht;class Ut extends zt.Component{constructor(e){super(e),this.state={data:g.getSettingGroup("rpc")||fe,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets(),this.assetComponents=new Set}updateWhenFetched(e){this.assetComponents.add(e)}onChange(e,t){let n=qt.find(t=>t.id===e.props.id);this.setState({data:Object.assign(ge,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),g.setSettingGroup("rpc",ge),this.preview.forceUpdate(),Nt.set(ge)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}if(!this.state.data.application_id)return this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),void this.assetComponents.forEach(e=>e.forceUpdate());this.isfetching=!0,Nt.fetchAssets(this.state.data.application_id).then(e=>{this.isfetching=!1,this.setState({data:this.state.data,assets:Object.keys(e).map(t=>{let n=e[t];return{id:n.id,name:n.name,type:n.type}})}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())})}updatePreview(e){this.setState({data:e})}get modules(){return Ht||(Ht=[BDModules.get(e=>e.marginBottom20)[0]])}render(){let[e]=this.modules;return[zt.createElement(Je,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),zt.createElement(Ye,null),zt.createElement(Ne,{text:"RichPresence"}),zt.createElement("div",null,this.optionsComponents),zt.createElement("div",null,zt.createElement(Ye,null),zt.createElement(Ne,{text:"Preview"}),zt.createElement(cn,{settings:this})),zt.createElement("div",{className:e.marginBottom20}),zt.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),zt.createElement("button",{style:{opacity:.01},onClick:()=>{r.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4")}},"See ? I pulled a litle sneaky on ya")]}get optionsComponents(){return this._optionsComponents||(this._optionsComponents=qt.map(e=>{if("text"===e.type)return zt.createElement(Zt,{setting:e,manager:this,id:e.id});if("number"===e.type){return[zt.createElement(Yt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?zt.createElement(Kt,{setting:e,manager:this,id:e.id,choices:[{value:"none",label:"No assets"}].concat(this.state.assets.map(e=>({value:"asset-"+e.id,label:e.name})))}):"Unknown choice.":void 0}))}}const qt=[{title:"Application ID",id:"application_id",type:"number",placeholder:"711416957718757418"},{title:"Name",id:"name",type:"text",placeholder:"Lightcord"},{title:"Details",id:"details",type:"text",placeholder:"Browsing Discord"},{title:"State",id:"state",type:"text",placeholder:"Lightcord Client"},{title:"Timestamp Start",id:"timestamps.start",type:"number",get placeholder(){return Date.now()}},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];let Gt,Vt,Jt;class Zt extends zt.PureComponent{get modules(){return Gt&&Gt[0]?Gt:Gt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0]]}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=zt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,onChange:e=>{this.setState({data:e}),!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500))},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i,a,l]=this.modules;return zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input),zt.createElement(ln,null))}}class Yt extends zt.PureComponent{get modules(){return Vt||(Vt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0],BDModules.get(e=>e.colorTransparent)[0]])}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=zt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,type:"number",onChange:(e,t,n)=>{(e=e.replace(/[^\d]+/g,""))!=this.state.data?(!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:e})):n.setValue(e)},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules;return zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input,"timestamps.start"===e.id?zt.createElement(Lightcord.Api.Components.inputs.Button,{onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")},color:"brand"},"Copy current timestamp"):null),zt.createElement(ln,null))}}class Kt extends zt.PureComponent{constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]?"asset-"+this.props.manager.state.data[t.id]:"none"},this.props.manager.updateWhenFetched(this)}onChange(e){let t=e.value;!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,"none"===this.state.data?null:this.state.data.replace("asset-","")),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:t}),this.forceUpdate()}get modules(){return Jt||(Jt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0]])}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules,a=this.props.manager.state.assets.map(e=>({value:"asset-"+e.id,label:e.name}));return a.unshift({value:"none",label:"No assets"}),zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),zt.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{value:this.state.data,options:a,onChange:this.onChange.bind(this)})),zt.createElement(ln,null))}}let Xt,Qt,en,tn,nn,sn,rn,on,an=[];class ln extends zt.PureComponent{get modules(){return an&&an[0]?an:an=[BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0],BDModules.get(e=>e.dividerDefault)[0]]}render(){let[e,t]=this.modules;return zt.createElement("div",{class:`${e.divider} ${t.dividerDefault}`})}}zt.Component;class cn extends zt.Component{constructor(e={}){super(e),this.state={active:"profile"},this.tabs=[],this.props.settings.preview=this}changeTab(e){this.state.active!==e.props.id&&(this.tabs.forEach(e=>{e.setActive(!1)}),e.setActive(!0),this.setState({active:e.props.id}))}render(){return zt.createElement("div",{className:"lc-tabWrapper"},zt.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},zt.createElement(dn,{preview:this,title:"Full Profile",id:"profile"}),zt.createElement(dn,{preview:this,title:"User Popout",id:"popout"})),zt.createElement(un,{preview:this.preview,state:this.state.rpc,props:{preview:this},key:this.state.active}))}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?pn:hn}}class dn extends zt.Component{constructor(e){super(e),this.state={active:e.preview.isActive(e.id)},e.preview.tabs.push(this)}setActive(e){this.setState({active:!!e})}render(){let e="lc-navItem";return this.state.active?e+=" lc-navItemActive":e+=" lc-navItemInactive",zt.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class un extends zt.Component{componentDidCatch(e,t){console.error(e,t),this.setState({error:!0})}render(){if(this.state||(this.state={error:!1}),this.state.error)return Xt=Xt||ie.WebpackModules.find(e=>e.emptyStateImage),Xt?zt.createElement("div",{style:{margin:"20px"}},zt.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},zt.createElement("div",{className:Xt.emptyStateImage,style:{marginTop:"20px"}}),zt.createElement("div",{className:Xt.emptyStateHeader},"An error occured"),zt.createElement("p",{className:Xt.emptyStateSubtext},"Please check the console for more informations. Join our ­",zt.createElement("a",{className:`${ie.anchorClasses.anchor} ${ie.anchorClasses.anchorUnderlineOnHover}`,role:"button",tabindex:0,onClick:()=>{ie.joinLC()}},"support server"),"­ for help."))):(d.showToast("An error occured. Please check the console for more informations."),null);try{const e=new this.props.preview(this.props.props);return e.setState(this.props.state),e.render()}catch(e){return console.error(e),this.state.error=!0,this.render()}}}class hn extends zt.Component{get modules(){return Qt||(Qt=[ie.WebpackModules.find(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!en){if(!e)throw new Error("Couldn't find the UserPopout component.");const t=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render();tn=t.props;const s=t.type.render(tn,null),r=new s.type(s.props).render();en=r.type}if(!en)throw new Error("Couldn't find the UserPopoutComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});tn=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render().props;const o=new en(Object.assign({},tn,{activity:r})).render().props.children,i=zt.createElement("div",window.Lightcord.Api._.excludeProperties(o.props,["onClick","onContextMenu"]));return zt.createElement("div",{className:"lc-userPopout lc-tab-box-shadow"},i)}}class pn extends zt.Component{get modules(){return nn||(nn=[ie.WebpackModules.find(e=>e.default&&"UserProfile"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!sn){const t=new e.default({user:n}).render();on=t.type;const s=new t.type(t.props).render(),r=s.type.render(s.props,null),o=new r.type(r.props).render();sn=o.type}if(!sn)throw new Error("Couldn't find the UserProfileComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});rn=new on({user:n,close:()=>{}}).render().props;const o=new sn(Object.assign({},rn,{activity:r})).render().props.children;return o.props.style={width:"auto"},zt.createElement("div",{className:"lc-tab lc-tab-box-shadow"},o)}}const mn=ie.React;let gn=BDModules.get(e=>e.defaultMarginh5)[0],fn=BDModules.get(e=>e.colorStandard)[0],bn=BDModules.get(e=>e.size32)[0],yn=BDModules.get(e=>e.scrollbarGhostHairline)[0];const vn=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,wn=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,Cn=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,En=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class Sn extends mn.Component{constructor(e){super(e)}render(){return gn||(gn=BDModules.get(e=>e.defaultMarginh5)[0]),fn||(fn=BDModules.get(e=>e.colorStandard)[0]),bn||(bn=BDModules.get(e=>e.size32)[0]),[mn.createElement(Ne,{text:"Account Infos"}),mn.createElement("div",null,mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Profile"),mn.createElement(Mn,{content:this.getProfileValue(),language:"diff"}),mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Statistics"),mn.createElement(Mn,{content:this.getStatistics(),language:"diff"}),mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Connected Sessions"),mn.createElement(Mn,{content:this.getSessionValue(),language:"diff"})),mn.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20})]}getSessionValue(){const e=Cn.getSessions(),t=Object.keys(e).filter(e=>"all"!==e).map(t=>e[t]);return 0===t.length?"- No session detected. Please try in a few seconds":t.map(e=>`+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=En.getCurrentUser(),t=e.createdAt;let n=e.avatarURL;return e.avatar&&e.avatar.startsWith("a_")&&(n=e.getAvatarURL("gif")),n.startsWith("/")&&(n="https://discord.com"+n),n.endsWith("?size=128")&&(n=n.replace("?size=128","?size=4096")),`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: ${n}\n+ Creation Date: ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear().toString().padStart(2,"0")} ${t.getHours().toString().padStart(2,"0")}h ${t.getMinutes().toString().padStart(2,"0")}min ${t.getSeconds()}s\n+ Flags: ${e.flags}\n+ Has Nitro: ${e.hasPremiumSubscription?"Yes":"No"}\n- Email: ${e.email}\n- 2FA: ${e.mfaEnabled?"Yes":"No"}\n- Has Been On Mobile: ${e.mobile?"Yes":"No"}\n- Phone: ${e.phone||"None"}\n- Verified: ${e.verified}`}getStatistics(){const e=Object.values(vn.getGuilds()),t=Object.keys(wn.getRelationships()),n=t.filter(e=>wn.isFriend(e)),s=t.filter(e=>wn.isBlocked(e));return`+ Server Count: ${e.length} servers\n+ Relations: ${t.length} relations\n+ Friends Count: ${n.length} friends\n- Blocked Users Count: ${s.length} blocked users`}}let xn=BDModules.get(e=>e.highlight)[0],kn=BDModules.get(e=>e.markup)[0],Dn=BDModules.get(e=>e.messageContent)[0];class Mn extends mn.Component{render(){return kn||(kn=BDModules.get(e=>e.markup)[0]),Dn||(Dn=BDModules.get(e=>e.messageContent)[0]),yn||(yn=BDModules.get(e=>e.scrollbarGhostHairline)[0]),xn||(xn=BDModules.get(e=>e.highlight)[0]),mn.createElement("div",{class:`${kn.markup} ${Dn.messageContent}`},mn.createElement("pre",null,mn.createElement("code",{class:`${yn.scrollbarGhostHairline} hljs`,dangerouslySetInnerHTML:{__html:xn.highlight(this.props.language,this.props.content).value}})),mn.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const Bn=window.Lightcord.DiscordModules.dispatcher,Nn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0],Pn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const An={};let Tn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var Rn=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,Bn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,Bn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(Tn?Tn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=Nn.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(An[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||$n(n,"discord.gg/")||$n(n,"discord.com/invite/")||$n(n,"discordapp.com/invite/"))&&(An[e.message.author.id]=!0,d.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),Ln||(Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),Ln.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),Pn||(Pn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),Pn.default.closePrivateChannel(t.id,!1)))))}};function $n(e,t){let n=e.embeds;return 0!==n.length&&n.map(e=>"rich"===e.type&&(!!(e.title||"").includes(t)||(!!(e.description||"").includes(t)||(!!((e.footer?e.footer.text:"")||"").includes(t)||!!e.fields.map(e=>e.value.includes(t)||e.name.includes(t)).includes(!0))))).includes(!0)}let jn;const On=d.removeDa;var _n=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,jn=jn||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=On(e.standardSidebarView),n=[],s=BDModules.get(e=>e.userSettingsAccount)[0];const r=BDModules.get(e=>"string"==typeof e.children)[0];return n.push(`#app-mount .${t} .payment-info .${On(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${On(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${On(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),s&&(n.push(`#app-mount .${t} .${On(s.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${On(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n.push(`.${On(s.userSettingsSecurity)} .${On(r.children)} > div:nth-child(2)`)),console.log(n),n}(),jn||console.error(new Error("Couldn't find selectors to blur personnal informations.")),c.addStyle("blurPrivate",`\n${jn.join(", ")} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${jn.map(e=>e+":hover").join(", ")} {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`))}disable(){this.enabled&&(this.enabled=!1,c.removeStyle("blurPrivate"))}},In=new class{constructor(){window.Lightcord.Api.ensureExported(e=>e.default&&e.default.startTyping).then(e=>{let t=this;const n=e.default.startTyping;e.default.startTyping=function(){if(t.disabled)return n.call(this,...arguments)};const s=e.default.stopTyping;e.default.stopTyping=function(){if(t.disabled)return s.call(this,...arguments)},this.disabled=!0}),window.Lightcord.BetterDiscord.DisableTyping=this}disable(){this.disabled=!0}enable(){this.disabled=!1}};Rt();let Fn;class Wn extends React.PureComponent{constructor(){super(...arguments),this.state={states:[]}}render(){Fn||(Fn=l.find(e=>e.FormSection));const e=[...new Set(Object.keys(window.Lightcord.Api.Components).map(e=>Object.keys(window.Lightcord.Api.Components[e]).map(t=>window.Lightcord.Api.Components[e][t])).flat())];return[React.createElement(Fn.FormSection,{tag:"h2",title:"Lightcord's Api Availlable components"},React.createElement(Fn.FormText,{type:"description",className:"",selectable:!1},"These components are here for the plugin devs. They can quickly embed any component below with this panel."),React.createElement(Ye,null),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"brand",look:"outlined",size:"medium",hoverColor:"green",onClick:()=>{r.remote.shell.openExternal("https://github.com/lightcord/lightcord/wiki/Apis")},wrapper:!1},"Documentation")),e.map(e=>{let t=[];e.AllPreviews&&(t=e.AllPreviews);let n=t=>{this.setState({states:[Object.assign(s,t)].concat(this.state.states.filter(t=>t.elem!==e))})},s=this.state.states.find(t=>t.elem===e);s||(s={tab:"preview",elem:e,options:{}},this.state.states.push(s));let r=()=>{let e={};return t.forEach(t=>{e[Object.keys(t[0])[0]]=t[0][Object.keys(t[0])[0]]}),Object.keys(s.options).forEach(n=>{e[n]=t.find(e=>e.find(e=>e[n]))[s.options[n]][n]}),e},o=(e,t,n)=>{if("string"==typeof e)return e;if("boolean"==typeof e)return String(e);if("function"==typeof e)return e.toString();if("object"==typeof e){if(e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)){if("Lightcord.Api.Components.general.Tabs"===t){if("react"===n)return'React.createElement("div", {style: {\n marginTop: "20px", marginBottom: "20px"\n}},\n React.createElement("div", {style: {\n backgroundColor: "var(--background-secondary)",\n padding: "30px 30px",\n borderRadius: "8px"\n }, className: "lc-tab-box-shadow" },\n React.createElement(Lightcord.Api.Components.general.Title, null, "Preview tabs")\n )\n)';if("jsx"===n)return'
\n
\n Preview tabs\n
\n
'}return"Your components here."}return JSON.stringify(e,null," ")}return String(e)},i=function(t){const n=e.displayName||e.name;const s=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][n])}.${n}`,i=r();if("jsx"===t){let e,n=[],r=null;if(Object.keys(i).forEach(e=>{if("children"==e)r=o(i[e],s,t);else{let r=e+"=";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=`{${o(i[e],s,t)}}`,n.push(r)}}),r){return e=`<${s} ${n.join(" ")}>`,`${e}\n ${r}\n${``}`}return e=`<${s} ${n.join(" ")}/>`,e}if("react"===t){let e=i.children||null;delete i.children,e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)&&(e=o(e,s,t));let n=[];Object.keys(i).forEach(e=>{let r=(/[^\w\d_]/g.test(e)?JSON.stringify(e):e)+": ";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=o(i[e],s,t).split("\n").map((e,t)=>0===t?e:" "+e).join("\n"),n.push(r)});let r="{";n.length?n.forEach((e,t)=>{let s=t===n.length-1;0===t||(r+=","),r+="\n ",r+=e,s&&(r+="\n}")}):r+="}";let a="string"==typeof e&&e.startsWith("React.createElement")?e:JSON.stringify(e);return`React.createElement(${s}, ${r}, ${a})`}},a=e.help||{},l=a.info?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"info"},a.info):null,c=a.warn?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"warn"},a.warn):null,d=a.danger?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"danger"},a.danger):null,u=a.error?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"error"},a.error):null,h=a.success?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"success"},a.success):null;return React.createElement("div",null,React.createElement(window.Lightcord.Api.Components.general.SettingsTitle,null,e.displayName||e.name),l,h,c,u,d,t.map(e=>{if(e[0].onClick)return null;if(e[0].text)return null;if(e[0].children)return null;if(1===e.length)return null;let t=Object.keys(e[0])[0];return[React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,t),React.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{options:e.map((e,t)=>({value:"opt-"+t,label:JSON.stringify(e[Object.keys(e)[0]])})),value:"opt-"+(s.options[t]||"0"),onChange:e=>{n({options:Object.assign({},s.options,{[t]:(e.value||"0").replace("opt-","")})})},searchable:!0}),React.createElement("div",{style:{marginBottom:"8px"}})]}),React.createElement(window.Lightcord.Api.Components.general.Tabs,{tabs:[{label:"Preview",id:"preview"},{label:"Code",id:"code"}],active:s.tab,children:"preview"===s.tab?React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(e,r()))):React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"JSX"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"jsx",content:i("jsx")}),React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"React"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"js",content:i("react")}))),onChange:e=>{n({tab:e})}}))})]}get renders(){}}const zn=ie.React;class Hn extends zn.Component{render(){const e=this.props.size||"18px";return zn.createElement("svg",{viewBox:"0 0 24 24",fill:"var(--text-normal)",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},zn.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),zn.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}class Un extends React.PureComponent{render(){let e=l.find(e=>e.Separator&&e.Header&&e.Item);const t=React.createElement(P,{color:"black",side:"top",text:"Changelog"},React.createElement("span",{style:{float:"right",cursor:"pointer"},className:"bd-changelog-button",onClick:()=>{d.showChangelogModal(bbdChangelog)}},React.createElement(Hn,{className:"bd-icon",size:"16px"})));return new e.Header({children:React.createElement("span",null,"Bandaged BD",t),className:"ui-tab-bar-header"})}}let qn=!1;var Gn=new class{constructor(){this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new xe,this.registerComponents()}registerComponents(){this.sidebar.register("lightcord",Vn(this.lightcordComponent.bind(this))),this.sidebar.register("status",Vn(this.PresenceComponent.bind(this))),this.sidebar.register("accountinfo",Vn(this.AccountInfosComponent.bind(this))),this.sidebar.register("lcapipreview",Vn(this.ApiPreviewComponent.bind(this))),this.sidebar.register("BDChangelogTitle",Vn(()=>(new Un).render())),this.sidebar.register("core",Vn(this.coreComponent.bind(this))),this.sidebar.register("customcss",Vn(this.customCssComponent.bind(this))),this.sidebar.register("plugins",Vn(this.renderAddonPane("plugins"))),this.sidebar.register("themes",Vn(this.renderAddonPane("themes")))}get root(){const e=c.query("#bd-settingspane-container");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e,t]=[BDModules.get(e=>e.layer&&e.animating)[0].layer.split(" ")[0],BDModules.get(e=>e.standardSidebarView)[0]];const n=c.query("."+e+" ."+t.standardSidebarView.split(" ")[0]+", ."+e+" .ui-standard-sidebar-view");if(!n)return!1;const s=c.createElement(`
`);return n.append(s),d.onRemoved(s,()=>{ie.reactDom.unmountComponentAtNode(s)}),!0}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get lightcordSettings(){const e=this.getSettings("lightcord");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get PresenceSettings(){return this.getSettings("status")}get MsgLogSettings(){return this.getSettings("msglog")}getSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}onClick(){}onChange(e,t,n){this.updateSettings(e,t,n)}updateSettings(e,t,n){if(["lightcord-8","no_window_bound","enable_glasstron"].includes(e)||(me[e]=t),"bda-gs-2"==e&&(t?c.addClass(document.body,"bd-minimal"):c.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?c.addClass(document.body,"bd-minimal-chan"):c.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?_e.addButton():_e.removeButton()),"bda-gs-4"==e&&(t?Ie.start():Ie.stop()),"bda-gs-5"==e&&(t?c.addClass(c.query("#app-mount"),"bda-dark"):c.removeClass(c.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&De.inject24Hour(),"bda-gs-7"==e&&(t?ke.injectColoredText():ke.removeColoredText()),"fork-ps-4"==e&&(t?We.start():We.stop()),"fork-ps-5"==e&&(t?(se.watchContent("plugin"),se.watchContent("theme")):(se.unwatchContent("plugin"),se.unwatchContent("theme"))),"fork-wp-1"==e&&(d.setWindowPreference("transparent",t),t?d.setWindowPreference("backgroundColor",null):d.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?ze.startDebugListener():ze.stopDebugListener()),"fork-dm-1"==e&&(t?ze.startCopySelector():ze.stopCopySelector()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t,n.forceUpdate()),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){Nt.enable();const e=BDModules.get(e=>e.default&&"object"==typeof e.default&&"showCurrentGame"in e.default)[0];e&&!e.default.showCurrentGame&&BDModules.get(e=>e.default&&e.default.updateRemoteSettings)[0].default.updateRemoteSettings({showCurrentGame:!0})}else Nt.disable();if("lightcord-3"===e&&(t?r.remote.getCurrentWindow().setAlwaysOnTop(!0):r.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?Rn.enable():Rn.disable()),"lightcord-6"===e&&(t?_n.enable():_n.disable()),"lightcord-7"===e&&(t?In.enable():In.disable()),"lightcord-8"===e){let e=r.remote.getGlobal("appSettings");e.set("isTabs",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("no_window_bound"===e){let e=r.remote.getGlobal("appSettings");e.set("NO_WINDOWS_BOUND",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("enable_glasstron"===e){let e=r.remote.getGlobal("appSettings");e.set("GLASSTRON",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}this.saveSettings()}async initializeSettings(){me["bda-gs-2"]&&c.addClass(document.body,"bd-minimal"),me["bda-gs-3"]&&c.addClass(document.body,"bd-minimal-chan"),me["bda-gs-1"]&&_e.addButton(),me["bda-gs-4"]&&Ie.start(),me["bda-gs-5"]&&c.addClass(c.query("#app-mount"),"bda-dark"),me["bda-gs-6"]&&De.inject24Hour(),me["bda-gs-7"]&&ke.injectColoredText(),me["fork-ps-4"]&&We.start(),me["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),me["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),me["lightcord-presence-1"]&&Nt.enable(),me["lightcord-3"]&&r.remote.getCurrentWindow().setAlwaysOnTop(!0),me["lightcord-4"]&&Rn.enable(),me["lightcord-6"]&&_n.enable(),me["lightcord-7"]&&In.enable(),me["fork-ps-5"]&&(se.watchContent("plugin"),se.watchContent("theme")),me["bda-gs-8"]&&ze.startDebugListener(),me["fork-dm-1"]&&ze.startCopySelector(),this.saveSettings()}saveSettings(){g.setSettingGroup("settings",me),g.setSettingGroup("rpc",ge)}loadSettings(){Object.assign(me,g.getSettingGroup("settings")),Object.assign(ge,g.getSettingGroup("rpc"))}renderSidebar(e){return this.sidebar.render(e)}coreComponent(){return ie.react.createElement(Ke,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings})}lightcordComponent(e,t){let n=r.remote.getGlobal("appSettings");return[this.lightcordSettings.map((t,s)=>[0===s?null:ie.react.createElement(Ye),ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},t.title),t.settings.map(t=>{let s=me[t.id];"lightcord-8"===t.id&&(s=n.get("isTabs",!1)),"no_window_bound"===t.id&&(s=n.get("NO_WINDOWS_BOUND",!1)),"enable_glasstron"===t.id&&(s=n.get("GLASSTRON",!0));let r=ie.react.createElement(Ve,{id:t.id,key:t.id,data:t,checked:s,onChange:(t,n)=>{this.onChange(t,n,e)}});return"lightcord-8"==t.id&&s?[r,React.createElement(Lightcord.Api.Components.inputs.Button,{color:"green",look:"outlined",size:"small",hoverColor:"brand",onClick:()=>{DiscordNative.ipc.send("NEW_TAB")},wrapper:!1,disabled:!1},"Open a new Tab")]:r})]),ie.react.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick(){console.log("Should relaunch"),r.remote.app.relaunch({args:r.remote.process.argv.slice(1).concat(["--disable-betterdiscord"])}),r.remote.app.quit()},wrapper:!0},"Relaunch without BetterDiscord"),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick:()=>{qn||(qn=!0,d.showToast("Clearing cache...",{type:"info"}),t(),r.remote.getCurrentWebContents().session.clearCache().then(()=>{d.showToast("Cache is cleared !",{type:"success"}),qn=!1,t()}).catch(e=>{console.error(e),d.showToast("An error occured. Check console for more informations.",{type:"error"}),qn=!1,t()}))},wrapper:!0,disabled:qn},"Clear cache")]}PresenceComponent(){return ie.react.createElement(Ut,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings})}AccountInfosComponent(){return ie.react.createElement(Sn,{key:"lapannel"})}ApiPreviewComponent(){return ie.react.createElement(Wn,{key:"lapipannel"})}customCssComponent(){return ie.react.createElement(et,{key:"csseditor"})}renderAddonPane(e){class t extends ie.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s","")}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;return Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>n}),function(){return ie.react.createElement(t,{type:e},ie.react.createElement(xt,{type:e}))}}};function Vn(e){class t extends React.Component{render(){return e(n,()=>this.forceUpdate())}}let n;return e=>(n=e,t)}class Jn extends ie.reactComponent{render(){return ie.react.createElement("svg",{height:"100%",width:this.props.size||"16px",className:"bd-logo "+this.props.className,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},viewBox:"0 0 2000 2000"},ie.react.createElement("metadata",null),ie.react.createElement("defs",null,ie.react.createElement("filter",{id:"shadow1"},ie.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),ie.react.createElement("filter",{id:"shadow2"},ie.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),ie.react.createElement("filter",{id:"shadow3"},ie.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),ie.react.createElement("g",null,ie.react.createElement("path",{style:{filter:"url(#shadow3)"},d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z",fill:"#171717",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow2)"},d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z",fill:"#3E82E5",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow1)"},d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z",fill:"#FFFFFF",opacity:"1"})))}}function Zn(){return(Zn=Object.assign||function(e){for(var t=1;t/g};let Xn=BDModules.get(e=>e.CustomEmoji)[0],Qn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],es=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],ts=BDModules.get(e=>e.getAutocompleteOptions)[0],ns=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],ss=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],rs=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],os=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);var is=new class{constructor(){this.init().catch(e=>d.err("EmojiModule","An error occured",e))}async init(){if(es||(es=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),ts||(ts=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),ns||(ns=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),ss||(ss=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),rs||(rs=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),os||(os=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),es&&ts&&ns&&ss&&rs&&os){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",ts);const e=ts.getAutocompleteOptions;ts.getAutocompleteOptions=function(t,n,s,r,o){const i=e.call(this,...arguments);return i.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return ps(n),n},queryResults:e=>ns.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>as(e,t,r.emojis,n,s,ss.default.Messages.EMOJI_MATCHING,ss.default.Messages.EMOJI,es.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?rs.default.getGuild(e.guildId):null}}),(function(e){return"."+e+"."})),getPlainText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"},getRawText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"}},i}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{if(!d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.content");if(!t||!t.length)return;let n=[];const s=[];for(let e of t){if("string"!=typeof e){s.push(e);continue}let r,o=!1;do{if(r=Kn.EmojiRegex.exec(e),r){o=!0,Qn||(Qn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=Qn.default.getCustomEmojiById(r[2]);e?n.push({animated:e.animated,name:e.name,id:e.id,raw:r[0]}):n.push({animated:r[0].startsWith("{if(!e)return"";const o=n.find(t=>t.raw==e);return o?(Xn||(Xn=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(Xn.CustomEmoji,{emoji:{name:`.${o.name}.`,emojiId:o.id,animated:o.animated,jumboable:1===r.length&&1===t.length}})):e}).reduce((e,t)=>0===e.length?[t]:"string"==typeof t?"string"==typeof e[e.length-1]?(e[e.length-1]+=` ${t}`,e):(e.push(" "+t),e):(e.push(" ",t),e),[]);s.push(...r)}else s.push(e)}for(;e.methodArguments[0].childrenMessageContent.props.content[0];)e.methodArguments[0].childrenMessageContent.props.content.shift();for(;s[0];)e.methodArguments[0].childrenMessageContent.props.content.push(s.shift())}}))}disable(){this.cancelEmoteRender&&(this.cancelEmoteRender(),this.cancelEmoteRender=null)}start(){}};function as(e,t,n,s,r,o,i,a,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(a,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[ls(o,i,e,c),d]}function ls(e,t,n,s){var r=n.length>0?e.format({prefix:s(n)}):t;return Array.isArray(r)?r.unshift(React.createElement("strong",{},"[Lightcord] ")):r="[LIGHTCORD] "+r,React.createElement(es.default.Title,{title:r},r)}ls.displayName="renderHeader";let cs=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],ds=cs&&cs.default.isEmojiDisabled,us=!1,hs=!1;function ps(e){us=e,hs||(cs||(cs=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),cs&&(ds||(ds=cs.default.isEmojiDisabled),hs=!0,cs.default.isEmojiDisabled=function(e){return us?!(!e.surrogates&&!e.diversity):ds.call(this,...arguments)}))}const{ipcRenderer:ms}=n(0);function gs(){}let fs,bs,ys,vs;gs.prototype.setConfig=function(e){this.hasStarted||Object.assign(ve,e)},gs.prototype.setMethods=function(e){this.hasStarted||(fs=e)},gs.prototype.init=async function(){if(this.hasStarted)return;if(this.hasStarted=!0,!Array.prototype.flat)return void d.alert("Not Supported","BetterDiscord v"+de+" does not support this old version ("+le+") of Discord. Please update your Discord installation before proceeding.");if(ve.version
Please download the latest version from GitHub");if(window.ED)return void d.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void d.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");d.suppressErrors(this.patchAttributes.bind(this),"LC Plugin Certifier Patch")(),d.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),ie.initialize(),d.log("Startup","Updating Settings"),Gn.initializeSettings(),d.log("Startup","Loading Addons Cache"),await se.loadAddonCertifierCache(),d.log("Startup","Loading Plugins"),await v.loadPlugins(),d.log("Startup","Loading Themes"),await oe.loadThemes(),c.addStyle("customcss",atob(g.getBDData("bdcustomcss"))),window.addEventListener("beforeunload",(function(){me["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),j.start(),d.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),d.log("Startup","Initializing Main Observer"),this.initObserver(),me["fork-ps-1"]&&(d.log("Startup","Collecting Startup Errors"),d.showContentErrors({plugins:be,themes:ye}));const e=g.getBDData("version");if(de>e&&(ue&&this.showChangelogModal(ue),g.setBDData("version",de)),is.start(),d.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),d.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),d.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),d.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),d.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),d.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),d.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),ve.haveInstalledDefault){let e=d.alert("First Installation","As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.");await new Promise(t=>{e.onClose(t)})}const t=document.querySelector("#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark");t&&(t.style.top="3px",t.innerHTML='\n \n \n \n')},gs.prototype.patchAttributes=async function(){let e=[];for(this.cancelPatchAttributes=function(){e.forEach(e=>e())};!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));const t=l.find(e=>"Anchor"==e.displayName);ensureExported(e=>e.default&&"DiscordTag"===e.default.displayName).then(e=>{let n=e.default;e.default=function(e){let s=n(e),r=Rt(),o=ie.React.createElement("div",{style:{display:"inline",marginTop:"5px"}},ie.React.createElement("span",{id:"badges-"+r,key:"badges-"+r,style:{display:"inherit"}})),i=[s];"249746236008169473"===e.user.id?i.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==e.user.id&&"696003456611385396"!==e.user.id||i.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"})))),i.push(o);let a=ie.React.createElement("div",{style:{display:"block"}},i);return ws(r,e.user,!1),a}}),e.push(d.monkeyPatch(ie.MessageComponent,"default",{after:e=>{e.methodArguments[0].childrenMessageContent.props.message&&(e.returnValue.props["data-message-id"]=e.methodArguments[0].childrenMessageContent.props.message.id)}}))},gs.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=ie.guildClasses.wrapper.split(" ")[0];document.querySelectorAll(`.${s}`).length>0&&e++;const r=ie.guildClasses.listItem.split(" ")[0],o=ie.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(ve.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},gs.prototype.injectExternals=async function(){await c.addScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"),window.require.original&&(window.require=window.require.original)},gs.prototype.initSettings=function(){if(g.initialize(),g.getSettingGroup("settings")||g.getSettingGroup("rpc")){Gn.loadSettings();for(const e in pe)null==me[e]&&(me[e]=pe[e],Gn.saveSettings())}else g.getSettingGroup("settings")||Object.assign(me,pe),g.getSettingGroup("rpc")||Object.assign(ge,fe),Gn.saveSettings();window.Lightcord.Api.ensureExported(e=>e.default&&e.default.prototype&&e.default.prototype.getPredicateSections).then(e=>{let t=e.default.prototype.getPredicateSections;e.default.prototype.getPredicateSections=function(){let e=t.call(this,...arguments);if("My Account"===e[1].section){let t=[];for(t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),e.push(...Gn.renderSidebar(this));t[0];)e.push(t.pop())}return e}})},gs.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer),ys||(ys=BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks),vs||(vs=BDModules.get(e=>e.modal&&"string"==typeof e.modal&&e.inner&&"string"==typeof e.inner&&!e.responsiveWidthMobile)[0].modal),s.classList.contains(bs)&&("GUILD_SETTINGS"===s.getAttribute("aria-label")&&(s.setAttribute("layer-id","server-settings"),s.setAttribute("id","server-settings")),s.getElementsByClassName(ys).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"))),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},gs.prototype.showChangelogModal=function(e={}){return d.showChangelogModal(e)},gs.prototype.alert=function(e,t){return d.alert(e,t)},gs.prototype.patchSocial=function(){if(this.socialPatch)return;const e=l.find(e=>"TabBar"==e.displayName),t=l.find(e=>"Anchor"==e.displayName);e&&(this.socialPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{const n=e.returnValue.props.children;if(!n||!n.length||n.length<3)return;if("Separator"!==n[n.length-3].type.displayName)return;if(!n[n.length-2].type.toString().includes("socialLinks"))return;if(t){let e=BDModules.get(e=>e.socialLinks)[0];const s=n[n.length-2].type,r=function(){const n=s(...arguments);return n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,o,i]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const a=`(${ve.hash?ve.hash.substring(0,7):ve.branch})`,l=[ie.react.createElement("div",{className:`${s} ${o.size12}`},`Lightcord ${r.remote.getGlobal("BuildInfo").version} `,ie.react.createElement("span",{className:i+" da-versionHash"},`(${(r.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),ie.react.createElement("div",{className:`${s} ${o.size12}`},`BBD ${de} `,ie.react.createElement("span",{className:i+" da-versionHash"},a))],c=n[n.length-1].type;n[n.length-1].type=function(){const e=c(...arguments);return e.props.children.splice(1,0,l),e}}}))};function ws(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;if(s.childNodes.length)return;let r=document.createElement("div");r.style.display="none",s.appendChild(r);const o=l.find(e=>"Anchor"==e.displayName);Ot.getBadges(t.id).then(e=>{e.forEach(e=>{const r={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(r.user=t)}),e.href||(r.Anchor=o,r.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=ie.React.createElement(P,{color:"black",side:"top",text:e.name},e.href?ie.react.createElement(o,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},ie.React.createElement(e.component,r)):ie.React.createElement(e.component,r)),a=document.createElement("div");ie.reactDom.render(i,a),a.childNodes.forEach(e=>{s.appendChild(e)})})})})}gs.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=l.findByProps("wrapper","unreadMentionsBar"),t=l.findByProps("guildsError","selected"),n=l.findByProps("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=ie.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=d.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;let s=t.props.className;return s+=" bd-guild",n.unread&&(s+=" bd-unread"),n.selected&&(s+=" bd-selected"),n.audio&&(s+=" bd-audio"),n.video&&(s+=" bd-video"),n.badge&&(s+=" bd-badge"),n.animatable&&(s+=" bd-animatable"),t.props.className=s,t}}}))},gs.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=l.find(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=d.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0];return t.unread&&(e.returnValue.props.className+=" bd-unread"),t.selected&&(e.returnValue.props.className+=" bd-selected"),t.hovered&&(e.returnValue.props.className+=" bd-hovered"),e.returnValue}}))},gs.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=l.findByDisplayName("Guilds"),t=l.findByProps("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},gs.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];l.find(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=d.monkeyPatch(e,"default",{after:e=>{if(!me["fork-ps-6"])return;const t=e.methodArguments[0]||null,n=d.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=Rt();n.push(ie.react.createElement("span",{id:"certified-"+s})),j.patch(t,"certified-"+s)}}))},gs.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=l.findByProps("MessageTimestamp"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=d.monkeyPatch(e,"default",{after:e=>{const n=d.getNestedProp(e.methodArguments[0],"message.author"),s=d.getNestedProp(e.returnValue,"props.children.1.props.children.1.props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"}))));const r=Rt();s.push(ie.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),ws(r,n,!0)}}))},gs.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=l.findByDisplayName("MemberListItem"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=d.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=d.getNestedProp(e.thisObject,"props.user"),s=d.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"}))));const r=Rt();s.push(ie.React.createElement("div",{id:"badges-"+r})),ws(r,n,!1)}}))},gs.prototype.updateInjector=async function(){const e=g.injectionPath;if(!e)return!1;const t=n(2),s=n(1),r=n(7),o=n(8),i=n(9),a=s.resolve(e,".."),l=s.basename(e),c="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",u=s.resolve(a,"injector.zip"),h=s.resolve(a,"BetterDiscordApp-injector");d.log("InjectorUpdate","Downloading "+c);let p=await new Promise(e=>{null.get({url:c,encoding:null},async(n,s,r)=>{if(n||200!==s.statusCode)return e(!1);await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e)),d.log("InjectorUpdate","Writing "+u),t.writeFile(u,r,t=>e(!t))})});if(!p)return p;await new Promise(e=>t.exists(h,e))&&await new Promise(e=>t.rename(h,`${h}.bak${Math.round(performance.now())}`,e));const m=await new Promise(e=>o.open(u,{lazyEntries:!0},(t,n)=>e(n)));m.on("entry",(function(e){if(e.fileName.endsWith("/"))return m.readEntry();d.log("InjectorUpdate","Extracting "+e.fileName);const n=s.resolve(a,e.fileName);i.sync(s.dirname(n)),m.openReadStream(e,(function(e,s){if(e)return p=!1;s.on("end",(function(){m.readEntry()})),s.pipe(t.createWriteStream(n))}))})),m.readEntry(),await new Promise(e=>m.once("end",e));const f=s.resolve(a,`${l}.bak${Math.round(performance.now())}`);return await new Promise(n=>t.rename(e,f,n)),d.log("InjectorUpdate",`Renaming ${s.basename(h)} to ${l}`),p=await new Promise(n=>t.rename(h,e,e=>n(!e))),p?p?(await new Promise(e=>r(f,e)),await new Promise(e=>t.unlink(u,e)),d.log("InjectorUpdate","Injector Updated!"),p):(d.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>r(h,e)),await new Promise(n=>t.rename(f,e,n)),p):(d.err("InjectorUpdate","Failed to rename the final directory"),p)};var Cs=new gs;const Es={get React(){return ie.React},get ReactDOM(){return ie.ReactDom},get ReactComponent(){return ie.ReactComponent},get WindowConfigFile(){return d.WindowConfigFile},get settings(){return he},get emotes(){return{}},get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)},get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)},getAllWindowPreferences:function(){return d.getAllWindowPreferences()},getWindowPreference:function(e){return d.getWindowPreference(e)},setWindowPreference:function(e,t){return d.setWindowPreference(e,t)},injectCSS:function(e,t){c.addStyle(c.escapeID(e),t)},clearCSS:function(e){c.removeStyle(c.escapeID(e))},linkJS:function(e,t){c.addScript(c.escapeID(e),t)},unlinkJS:function(e){c.removeScript(c.escapeID(e))},getPlugin:function(e){return Ce.hasOwnProperty(e)?Ce[e].plugin:null},getCore:function(){return d.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),Cs},alert:function(e,t){return d.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return d.showConfirmationModal(e,t,n)},showToast:function(e,t={}){d.showToast(e,t)},findModule:function(e){return ie.WebpackModules.find(e)},findAllModules:function(e){return ie.WebpackModules.findAll(e)},findModuleByProps:function(...e){return ie.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return ie.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return ie.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),ie.getInternalInstance(e)},loadData:function(e,t){return g.getPluginData(e,t)}};Es.getData=Es.loadData,Es.saveData=function(e,t,n){return g.setPluginData(e,t,n)},Es.setData=Es.saveData,Es.deleteData=function(e,t){return g.deletePluginData(e,t)},Es.monkeyPatch=function(e,t,n){return d.monkeyPatch(e,t,n)},Es.onRemoved=function(e,t){return d.onRemoved(e,t)},Es.suppressErrors=function(e,t){return d.suppressErrors(e,t)},Es.testJSON=function(e){return d.testJSON(e)},Es.isPluginEnabled=function(e){return!!Ee[e]},Es.isThemeEnabled=function(e){return!!Se[e]},Es.isSettingEnabled=function(e){return!!me[e]},Es.enableSetting=function(e){return Gn.onChange(e,!0)},Es.disableSetting=function(e){return Gn.onChange(e,!1)},Es.toggleSetting=function(e){return Gn.onChange(e,!me[e])},Es.getBDData=function(e){return g.getBDData(e)},Es.setBDData=function(e,t){return g.setBDData(e,t)};const Ss=(e,t,n)=>new class{get folder(){return n.folder}isEnabled(t){return!!e[t]}enable(e){return n.enable(e)}disable(e){return n.disable(e)}toggle(t){e[t]?this.disable(t):this.enable(t)}reload(e){return n.reload(e)}get(e){return t.hasOwnProperty(e)?t[e].plugin?t[e].plugin:t[e]:null}getAll(){return Object.keys(t).map(e=>this.get(e)).filter(e=>e)}};Es.Plugins=Ss(Ee,Ce,v),Es.Themes=Ss(Se,we,oe);var xs=Es;window.Lightcord.BetterDiscord.BdApi=Es,n.d(t,"default",(function(){return Ms})),function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const n=e[t];return"function"==typeof n?n.bind(e):n}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}(),(()=>{const e=document.createElement("div");e.className="bd-loaderv2",e.title="BandagedBD is loading...",document.body.appendChild(e)})();const ks=(e,t)=>{Object.defineProperty(window,e,{get:()=>(d.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},Ds=Object.keys(s);for(const e of Ds)ks(e,s[e]);ks("BDV2",ie),ks("pluginModule",v),ks("themeModule",oe),ks("Utils",d),ks("BDEvents",b),ks("settingsPanel",Gn),ks("DataStore",g),ks("ContentManager",se),ks("ClassNormalizer",We),window.BdApi=xs,ks("mainCore",Cs);class Ms{constructor(e,t){Cs.setConfig(e),Cs.setMethods(t)}init(){Cs.init()}}}]); \ No newline at end of file diff --git a/BetterDiscordApp/src/0globals.js b/BetterDiscordApp/src/0globals.js index 4ab1a0a..eddbd10 100644 --- a/BetterDiscordApp/src/0globals.js +++ b/BetterDiscordApp/src/0globals.js @@ -41,19 +41,12 @@ export const LCChanelog = { export const bbdChangelog = { description: "BBD's changelog.", changes: [ - { - title: "What's New?", - items: [ - "**Lightcord** is now using BandagedBD. That means all plugins you were using can be used too !", - "**Window Transparency** changes were made to more compatible with external window managers and addons like Glasstron.", - "Initialization sequence has once again been changed slightly to hopefully improve loading times." - ] - }, { title: "Bug Fixes", type: "fixed", items: [ - "Some fixes related to showing modals in the `BdApi`." + "Some fixes related to showing modals in the `BdApi`.", + "Fixed the open folder buttons for plugins and themes" ] } ] diff --git a/BetterDiscordApp/src/modules/core.js b/BetterDiscordApp/src/modules/core.js index a73d6af..2c4270d 100644 --- a/BetterDiscordApp/src/modules/core.js +++ b/BetterDiscordApp/src/modules/core.js @@ -17,9 +17,10 @@ import distant, { uuidv4 } from "./distant"; import EmojiModule from "./emojiModule" import {remote as electron} from "electron" import v2 from "./v2"; -import webpackModules from "./webpackModules"; import contentManager from "./contentManager"; +const {ipcRenderer} = require("electron"); + function Core() { // Object.assign(bdConfig, __non_webpack_require__(DataStore.configFile)); // this.init(); @@ -28,14 +29,19 @@ function Core() { let methods Core.prototype.setConfig = function(config) { + if (this.hasStarted) return; Object.assign(bdConfig, config); }; Core.prototype.setMethods = function(m) { + if (this.hasStarted) return; methods = m }; Core.prototype.init = async function() { + if (this.hasStarted) return; + this.hasStarted = true; + if (!Array.prototype.flat) { Utils.alert("Not Supported", "BetterDiscord v" + bbdVersion + " does not support this old version (" + currentDiscordVersion + ") of Discord. Please update your Discord installation before proceeding."); return;