@vue/devtools 6.0.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/backend.js +3 -3
- package/build/devtools.js +1 -1
- package/build/hook.js +1 -1
- package/package.json +1 -1
package/build/backend.js
CHANGED
|
@@ -107,7 +107,7 @@ Object.defineProperty(exports, "__esModule", ({
|
|
|
107
107
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
108
108
|
|
|
109
109
|
"use strict";
|
|
110
|
-
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports._legacy_getAndRegisterApps = exports.removeApp = exports.sendApps = exports.waitForAppsRegistration = exports.getAppRecord = exports.getAppRecordId = exports.mapAppRecord = exports.selectApp = exports.registerApp = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst speakingurl_1 = __importDefault(__webpack_require__(97500));\n\nconst queue_1 = __webpack_require__(49107);\n\nconst scan_1 = __webpack_require__(18426);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst backend_1 = __webpack_require__(36873);\n\nconst jobs = new queue_1.JobQueue();\nlet recordId = 0;\nconst appRecordPromises = new Map();\n\nasync function registerApp(options, ctx) {\n return jobs.queue(() => registerAppJob(options, ctx));\n}\n\nexports.registerApp = registerApp;\n\nasync function registerAppJob(options, ctx) {\n // Dedupe\n if (ctx.appRecords.find(a => a.options.app === options.app)) {\n return;\n } // Find correct backend\n\n\n const baseFrameworkVersion = parseInt(options.version.substr(0, options.version.indexOf('.')));\n\n for (let i = 0; i < backend_1.availableBackends.length; i++) {\n const backendOptions = backend_1.availableBackends[i];\n\n if (backendOptions.frameworkVersion === baseFrameworkVersion) {\n // Enable backend if it's not enabled\n const backend = (0, backend_1.getBackend)(backendOptions, ctx);\n await createAppRecord(options, backend, ctx);\n break;\n }\n }\n}\n\nasync function createAppRecord(options, backend, ctx) {\n var _a;\n\n const rootInstance = await backend.api.getAppRootInstance(options.app);\n\n if (rootInstance) {\n if ((await backend.api.getComponentDevtoolsOptions(rootInstance)).hide) {\n return;\n }\n\n recordId++;\n const name = await backend.api.getAppRecordName(options.app, recordId.toString());\n const id = getAppRecordId(options.app, (0, speakingurl_1.default)(name));\n const [el] = await backend.api.getComponentRootElements(rootInstance);\n const record = {\n id,\n name,\n options,\n backend,\n lastInspectedComponentId: null,\n instanceMap: new Map(),\n rootInstance,\n perfGroupIds: new Map(),\n iframe: document !== el.ownerDocument ? el.ownerDocument.location.pathname : null,\n meta: (_a = options.meta) !== null && _a !== void 0 ? _a : {}\n };\n options.app.__VUE_DEVTOOLS_APP_RECORD__ = record;\n const rootId = `${record.id}:root`;\n record.instanceMap.set(rootId, record.rootInstance);\n record.rootInstance.__VUE_DEVTOOLS_UID__ = rootId; // Timeline\n\n (0, timeline_1.addBuiltinLayers)(record, ctx);\n ctx.appRecords.push(record);\n\n if (backend.options.setupApp) {\n backend.options.setupApp(backend.api, record);\n }\n\n await backend.api.registerApplication(options.app);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_ADD, {\n appRecord: mapAppRecord(record)\n });\n\n if (appRecordPromises.has(options.app)) {\n for (const r of appRecordPromises.get(options.app)) {\n await r(record);\n }\n } // Auto select first app\n\n\n if (ctx.currentAppRecord == null) {\n await selectApp(record, ctx);\n }\n } else {\n console.warn('[Vue devtools] No root instance found for app, it might have been unmounted', options.app);\n }\n}\n\nasync function selectApp(record, ctx) {\n ctx.currentAppRecord = record;\n ctx.currentInspectedComponentId = record.lastInspectedComponentId;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_SELECTED, {\n id: record.id,\n lastInspectedComponentId: record.lastInspectedComponentId\n });\n}\n\nexports.selectApp = selectApp;\n\nfunction mapAppRecord(record) {\n return {\n id: record.id,\n name: record.name,\n version: record.options.version,\n iframe: record.iframe\n };\n}\n\nexports.mapAppRecord = mapAppRecord;\nconst appIds = new Set();\n\nfunction getAppRecordId(app, defaultId) {\n if (app.__VUE_DEVTOOLS_APP_RECORD_ID__ != null) {\n return app.__VUE_DEVTOOLS_APP_RECORD_ID__;\n }\n\n let id = defaultId !== null && defaultId !== void 0 ? defaultId : (recordId++).toString();\n\n if (defaultId && appIds.has(id)) {\n let count = 1;\n\n while (appIds.has(`${defaultId}:${count}`)) {\n count++;\n }\n\n id = `${defaultId}_${count}`;\n }\n\n appIds.add(id);\n app.__VUE_DEVTOOLS_APP_RECORD_ID__ = id;\n return id;\n}\n\nexports.getAppRecordId = getAppRecordId;\n\nasync function getAppRecord(app, ctx) {\n const record = ctx.appRecords.find(ar => ar.options.app === app);\n\n if (record) {\n return record;\n }\n\n return new Promise((resolve, reject) => {\n let resolvers = appRecordPromises.get(app);\n let timedOut = false;\n\n if (!resolvers) {\n resolvers = [];\n appRecordPromises.set(app, resolvers);\n }\n\n const fn = record => {\n if (!timedOut) {\n clearTimeout(timer);\n resolve(record);\n }\n };\n\n resolvers.push(fn);\n const timer = setTimeout(() => {\n timedOut = true;\n const index = resolvers.indexOf(fn);\n if (index !== -1) resolvers.splice(index, 1);\n\n if (shared_utils_1.SharedData.debugInfo) {\n // eslint-disable-next-line no-console\n console.log('Timed out waiting for app record', app);\n }\n\n reject(new Error(`Timed out getting app record for app`));\n }, 60000);\n });\n}\n\nexports.getAppRecord = getAppRecord;\n\nfunction waitForAppsRegistration() {\n return jobs.queue(async () => {});\n}\n\nexports.waitForAppsRegistration = waitForAppsRegistration;\n\nasync function sendApps(ctx) {\n const appRecords = [];\n\n for (const appRecord of ctx.appRecords) {\n appRecords.push(appRecord);\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_LIST, {\n apps: appRecords.map(mapAppRecord)\n });\n}\n\nexports.sendApps = sendApps;\n\nfunction removeAppRecord(appRecord, ctx) {\n try {\n appIds.delete(appRecord.id);\n const index = ctx.appRecords.indexOf(appRecord);\n if (index !== -1) ctx.appRecords.splice(index, 1);\n (0, timeline_1.removeLayersForApp)(appRecord.options.app, ctx);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_REMOVE, {\n id: appRecord.id\n });\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nasync function removeApp(app, ctx) {\n try {\n const appRecord = await getAppRecord(app, ctx);\n\n if (appRecord) {\n removeAppRecord(appRecord, ctx);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nexports.removeApp = removeApp; // eslint-disable-next-line camelcase\n\nasync function _legacy_getAndRegisterApps(ctx) {\n // Remove apps that are legacy\n ctx.appRecords.forEach(appRecord => {\n if (appRecord.meta.Vue) {\n removeAppRecord(appRecord, ctx);\n }\n });\n const apps = (0, scan_1.scan)();\n apps.forEach(app => {\n const Vue = app.constructor;\n registerApp({\n app,\n types: {},\n version: Vue.version,\n meta: {\n Vue\n }\n }, ctx);\n });\n}\n\nexports._legacy_getAndRegisterApps = _legacy_getAndRegisterApps;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZjcxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBleHBvcnRzLnJlbW92ZUFwcCA9IGV4cG9ydHMuc2VuZEFwcHMgPSBleHBvcnRzLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uID0gZXhwb3J0cy5nZXRBcHBSZWNvcmQgPSBleHBvcnRzLmdldEFwcFJlY29yZElkID0gZXhwb3J0cy5tYXBBcHBSZWNvcmQgPSBleHBvcnRzLnNlbGVjdEFwcCA9IGV4cG9ydHMucmVnaXN0ZXJBcHAgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IHNwZWFraW5ndXJsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInNwZWFraW5ndXJsXCIpKTtcbmNvbnN0IHF1ZXVlXzEgPSByZXF1aXJlKFwiLi91dGlsL3F1ZXVlXCIpO1xuY29uc3Qgc2Nhbl8xID0gcmVxdWlyZShcIi4vbGVnYWN5L3NjYW5cIik7XG5jb25zdCB0aW1lbGluZV8xID0gcmVxdWlyZShcIi4vdGltZWxpbmVcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3Qgam9icyA9IG5ldyBxdWV1ZV8xLkpvYlF1ZXVlKCk7XG5sZXQgcmVjb3JkSWQgPSAwO1xuY29uc3QgYXBwUmVjb3JkUHJvbWlzZXMgPSBuZXcgTWFwKCk7XG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcChvcHRpb25zLCBjdHgpIHtcbiAgICByZXR1cm4gam9icy5xdWV1ZSgoKSA9PiByZWdpc3RlckFwcEpvYihvcHRpb25zLCBjdHgpKTtcbn1cbmV4cG9ydHMucmVnaXN0ZXJBcHAgPSByZWdpc3RlckFwcDtcbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQXBwSm9iKG9wdGlvbnMsIGN0eCkge1xuICAgIC8vIERlZHVwZVxuICAgIGlmIChjdHguYXBwUmVjb3Jkcy5maW5kKGEgPT4gYS5vcHRpb25zLmFwcCA9PT0gb3B0aW9ucy5hcHApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmluZCBjb3JyZWN0IGJhY2tlbmRcbiAgICBjb25zdCBiYXNlRnJhbWV3b3JrVmVyc2lvbiA9IHBhcnNlSW50KG9wdGlvbnMudmVyc2lvbi5zdWJzdHIoMCwgb3B0aW9ucy52ZXJzaW9uLmluZGV4T2YoJy4nKSkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmRPcHRpb25zID0gYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzW2ldO1xuICAgICAgICBpZiAoYmFja2VuZE9wdGlvbnMuZnJhbWV3b3JrVmVyc2lvbiA9PT0gYmFzZUZyYW1ld29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIC8vIEVuYWJsZSBiYWNrZW5kIGlmIGl0J3Mgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGNvbnN0IGJhY2tlbmQgPSAoMCwgYmFja2VuZF8xLmdldEJhY2tlbmQpKGJhY2tlbmRPcHRpb25zLCBjdHgpO1xuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQXBwUmVjb3JkKG9wdGlvbnMsIGJhY2tlbmQsIGN0eCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcFJlY29yZChvcHRpb25zLCBiYWNrZW5kLCBjdHgpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgcm9vdEluc3RhbmNlID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUm9vdEluc3RhbmNlKG9wdGlvbnMuYXBwKTtcbiAgICBpZiAocm9vdEluc3RhbmNlKSB7XG4gICAgICAgIGlmICgoYXdhaXQgYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKHJvb3RJbnN0YW5jZSkpLmhpZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmRJZCsrO1xuICAgICAgICBjb25zdCBuYW1lID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUmVjb3JkTmFtZShvcHRpb25zLmFwcCwgcmVjb3JkSWQudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IGlkID0gZ2V0QXBwUmVjb3JkSWQob3B0aW9ucy5hcHAsICgwLCBzcGVha2luZ3VybF8xLmRlZmF1bHQpKG5hbWUpKTtcbiAgICAgICAgY29uc3QgW2VsXSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhyb290SW5zdGFuY2UpO1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgYmFja2VuZCxcbiAgICAgICAgICAgIGxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDogbnVsbCxcbiAgICAgICAgICAgIGluc3RhbmNlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgICByb290SW5zdGFuY2UsXG4gICAgICAgICAgICBwZXJmR3JvdXBJZHM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGlmcmFtZTogZG9jdW1lbnQgIT09IGVsLm93bmVyRG9jdW1lbnQgPyBlbC5vd25lckRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lIDogbnVsbCxcbiAgICAgICAgICAgIG1ldGE6IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMuYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfXyA9IHJlY29yZDtcbiAgICAgICAgY29uc3Qgcm9vdElkID0gYCR7cmVjb3JkLmlkfTpyb290YDtcbiAgICAgICAgcmVjb3JkLmluc3RhbmNlTWFwLnNldChyb290SWQsIHJlY29yZC5yb290SW5zdGFuY2UpO1xuICAgICAgICByZWNvcmQucm9vdEluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gcm9vdElkO1xuICAgICAgICAvLyBUaW1lbGluZVxuICAgICAgICAoMCwgdGltZWxpbmVfMS5hZGRCdWlsdGluTGF5ZXJzKShyZWNvcmQsIGN0eCk7XG4gICAgICAgIGN0eC5hcHBSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgaWYgKGJhY2tlbmQub3B0aW9ucy5zZXR1cEFwcCkge1xuICAgICAgICAgICAgYmFja2VuZC5vcHRpb25zLnNldHVwQXBwKGJhY2tlbmQuYXBpLCByZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJhY2tlbmQuYXBpLnJlZ2lzdGVyQXBwbGljYXRpb24ob3B0aW9ucy5hcHApO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9BREQsIHtcbiAgICAgICAgICAgIGFwcFJlY29yZDogbWFwQXBwUmVjb3JkKHJlY29yZCksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYXBwUmVjb3JkUHJvbWlzZXMuaGFzKG9wdGlvbnMuYXBwKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGFwcFJlY29yZFByb21pc2VzLmdldChvcHRpb25zLmFwcCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByKHJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXV0byBzZWxlY3QgZmlyc3QgYXBwXG4gICAgICAgIGlmIChjdHguY3VycmVudEFwcFJlY29yZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBhd2FpdCBzZWxlY3RBcHAocmVjb3JkLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tWdWUgZGV2dG9vbHNdIE5vIHJvb3QgaW5zdGFuY2UgZm91bmQgZm9yIGFwcCwgaXQgbWlnaHQgaGF2ZSBiZWVuIHVubW91bnRlZCcsIG9wdGlvbnMuYXBwKTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBzZWxlY3RBcHAocmVjb3JkLCBjdHgpIHtcbiAgICBjdHguY3VycmVudEFwcFJlY29yZCA9IHJlY29yZDtcbiAgICBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkID0gcmVjb3JkLmxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9TRUxFQ1RFRCwge1xuICAgICAgICBpZDogcmVjb3JkLmlkLFxuICAgICAgICBsYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQ6IHJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQsXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbGVjdEFwcCA9IHNlbGVjdEFwcDtcbmZ1bmN0aW9uIG1hcEFwcFJlY29yZChyZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcmVjb3JkLmlkLFxuICAgICAgICBuYW1lOiByZWNvcmQubmFtZSxcbiAgICAgICAgdmVyc2lvbjogcmVjb3JkLm9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgaWZyYW1lOiByZWNvcmQuaWZyYW1lLFxuICAgIH07XG59XG5leHBvcnRzLm1hcEFwcFJlY29yZCA9IG1hcEFwcFJlY29yZDtcbmNvbnN0IGFwcElkcyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIGdldEFwcFJlY29yZElkKGFwcCwgZGVmYXVsdElkKSB7XG4gICAgaWYgKGFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX0lEX18gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXztcbiAgICB9XG4gICAgbGV0IGlkID0gZGVmYXVsdElkICE9PSBudWxsICYmIGRlZmF1bHRJZCAhPT0gdm9pZCAwID8gZGVmYXVsdElkIDogKHJlY29yZElkKyspLnRvU3RyaW5nKCk7XG4gICAgaWYgKGRlZmF1bHRJZCAmJiBhcHBJZHMuaGFzKGlkKSkge1xuICAgICAgICBsZXQgY291bnQgPSAxO1xuICAgICAgICB3aGlsZSAoYXBwSWRzLmhhcyhgJHtkZWZhdWx0SWR9OiR7Y291bnR9YCkpIHtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWQgPSBgJHtkZWZhdWx0SWR9XyR7Y291bnR9YDtcbiAgICB9XG4gICAgYXBwSWRzLmFkZChpZCk7XG4gICAgYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXyA9IGlkO1xuICAgIHJldHVybiBpZDtcbn1cbmV4cG9ydHMuZ2V0QXBwUmVjb3JkSWQgPSBnZXRBcHBSZWNvcmRJZDtcbmFzeW5jIGZ1bmN0aW9uIGdldEFwcFJlY29yZChhcHAsIGN0eCkge1xuICAgIGNvbnN0IHJlY29yZCA9IGN0eC5hcHBSZWNvcmRzLmZpbmQoYXIgPT4gYXIub3B0aW9ucy5hcHAgPT09IGFwcCk7XG4gICAgaWYgKHJlY29yZCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzb2x2ZXJzID0gYXBwUmVjb3JkUHJvbWlzZXMuZ2V0KGFwcCk7XG4gICAgICAgIGxldCB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXJlc29sdmVycykge1xuICAgICAgICAgICAgcmVzb2x2ZXJzID0gW107XG4gICAgICAgICAgICBhcHBSZWNvcmRQcm9taXNlcy5zZXQoYXBwLCByZXNvbHZlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZuID0gKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aW1lZE91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXNvbHZlcnMucHVzaChmbik7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlc29sdmVycy5pbmRleE9mKGZuKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXBwIHJlY29yZCcsIGFwcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lZCBvdXQgZ2V0dGluZyBhcHAgcmVjb3JkIGZvciBhcHBgKSk7XG4gICAgICAgIH0sIDYwMDAwKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0QXBwUmVjb3JkID0gZ2V0QXBwUmVjb3JkO1xuZnVuY3Rpb24gd2FpdEZvckFwcHNSZWdpc3RyYXRpb24oKSB7XG4gICAgcmV0dXJuIGpvYnMucXVldWUoYXN5bmMgKCkgPT4geyB9KTtcbn1cbmV4cG9ydHMud2FpdEZvckFwcHNSZWdpc3RyYXRpb24gPSB3YWl0Rm9yQXBwc1JlZ2lzdHJhdGlvbjtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRBcHBzKGN0eCkge1xuICAgIGNvbnN0IGFwcFJlY29yZHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGFwcFJlY29yZCBvZiBjdHguYXBwUmVjb3Jkcykge1xuICAgICAgICBhcHBSZWNvcmRzLnB1c2goYXBwUmVjb3JkKTtcbiAgICB9XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfTElTVCwge1xuICAgICAgICBhcHBzOiBhcHBSZWNvcmRzLm1hcChtYXBBcHBSZWNvcmQpLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kQXBwcyA9IHNlbmRBcHBzO1xuZnVuY3Rpb24gcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYXBwSWRzLmRlbGV0ZShhcHBSZWNvcmQuaWQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGN0eC5hcHBSZWNvcmRzLmluZGV4T2YoYXBwUmVjb3JkKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIGN0eC5hcHBSZWNvcmRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICgwLCB0aW1lbGluZV8xLnJlbW92ZUxheWVyc0ZvckFwcCkoYXBwUmVjb3JkLm9wdGlvbnMuYXBwLCBjdHgpO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9SRU1PVkUsIHsgaWQ6IGFwcFJlY29yZC5pZCB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQXBwKGFwcCwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgZ2V0QXBwUmVjb3JkKGFwcCwgY3R4KTtcbiAgICAgICAgaWYgKGFwcFJlY29yZCkge1xuICAgICAgICAgICAgcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnJlbW92ZUFwcCA9IHJlbW92ZUFwcDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbmFzeW5jIGZ1bmN0aW9uIF9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKGN0eCkge1xuICAgIC8vIFJlbW92ZSBhcHBzIHRoYXQgYXJlIGxlZ2FjeVxuICAgIGN0eC5hcHBSZWNvcmRzLmZvckVhY2goYXBwUmVjb3JkID0+IHtcbiAgICAgICAgaWYgKGFwcFJlY29yZC5tZXRhLlZ1ZSkge1xuICAgICAgICAgICAgcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFwcHMgPSAoMCwgc2Nhbl8xLnNjYW4pKCk7XG4gICAgYXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgIGNvbnN0IFZ1ZSA9IGFwcC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmVnaXN0ZXJBcHAoe1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgdHlwZXM6IHt9LFxuICAgICAgICAgICAgdmVyc2lvbjogVnVlLnZlcnNpb24sXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgICAgVnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgY3R4KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBfbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79132\n");
|
|
110
|
+
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports._legacy_getAndRegisterApps = exports.removeApp = exports.sendApps = exports.waitForAppsRegistration = exports.getAppRecord = exports.getAppRecordId = exports.mapAppRecord = exports.selectApp = exports.registerApp = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst speakingurl_1 = __importDefault(__webpack_require__(97500));\n\nconst queue_1 = __webpack_require__(49107);\n\nconst scan_1 = __webpack_require__(18426);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst backend_1 = __webpack_require__(36873);\n\nconst jobs = new queue_1.JobQueue();\nlet recordId = 0;\nconst appRecordPromises = new Map();\n\nasync function registerApp(options, ctx) {\n return jobs.queue(() => registerAppJob(options, ctx));\n}\n\nexports.registerApp = registerApp;\n\nasync function registerAppJob(options, ctx) {\n // Dedupe\n if (ctx.appRecords.find(a => a.options.app === options.app)) {\n return;\n } // Find correct backend\n\n\n const baseFrameworkVersion = parseInt(options.version.substring(0, options.version.indexOf('.')));\n\n for (let i = 0; i < backend_1.availableBackends.length; i++) {\n const backendOptions = backend_1.availableBackends[i];\n\n if (backendOptions.frameworkVersion === baseFrameworkVersion) {\n // Enable backend if it's not enabled\n const backend = (0, backend_1.getBackend)(backendOptions, ctx);\n await createAppRecord(options, backend, ctx);\n break;\n }\n }\n}\n\nasync function createAppRecord(options, backend, ctx) {\n var _a;\n\n const rootInstance = await backend.api.getAppRootInstance(options.app);\n\n if (rootInstance) {\n if ((await backend.api.getComponentDevtoolsOptions(rootInstance)).hide) {\n return;\n }\n\n recordId++;\n const name = await backend.api.getAppRecordName(options.app, recordId.toString());\n const id = getAppRecordId(options.app, (0, speakingurl_1.default)(name));\n const [el] = await backend.api.getComponentRootElements(rootInstance);\n const record = {\n id,\n name,\n options,\n backend,\n lastInspectedComponentId: null,\n instanceMap: new Map(),\n rootInstance,\n perfGroupIds: new Map(),\n iframe: document !== el.ownerDocument ? el.ownerDocument.location.pathname : null,\n meta: (_a = options.meta) !== null && _a !== void 0 ? _a : {}\n };\n options.app.__VUE_DEVTOOLS_APP_RECORD__ = record;\n const rootId = `${record.id}:root`;\n record.instanceMap.set(rootId, record.rootInstance);\n record.rootInstance.__VUE_DEVTOOLS_UID__ = rootId; // Timeline\n\n (0, timeline_1.addBuiltinLayers)(record, ctx);\n ctx.appRecords.push(record);\n\n if (backend.options.setupApp) {\n backend.options.setupApp(backend.api, record);\n }\n\n await backend.api.registerApplication(options.app);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_ADD, {\n appRecord: mapAppRecord(record)\n });\n\n if (appRecordPromises.has(options.app)) {\n for (const r of appRecordPromises.get(options.app)) {\n await r(record);\n }\n } // Auto select first app\n\n\n if (ctx.currentAppRecord == null) {\n await selectApp(record, ctx);\n }\n } else {\n console.warn('[Vue devtools] No root instance found for app, it might have been unmounted', options.app);\n }\n}\n\nasync function selectApp(record, ctx) {\n ctx.currentAppRecord = record;\n ctx.currentInspectedComponentId = record.lastInspectedComponentId;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_SELECTED, {\n id: record.id,\n lastInspectedComponentId: record.lastInspectedComponentId\n });\n}\n\nexports.selectApp = selectApp;\n\nfunction mapAppRecord(record) {\n return {\n id: record.id,\n name: record.name,\n version: record.options.version,\n iframe: record.iframe\n };\n}\n\nexports.mapAppRecord = mapAppRecord;\nconst appIds = new Set();\n\nfunction getAppRecordId(app, defaultId) {\n if (app.__VUE_DEVTOOLS_APP_RECORD_ID__ != null) {\n return app.__VUE_DEVTOOLS_APP_RECORD_ID__;\n }\n\n let id = defaultId !== null && defaultId !== void 0 ? defaultId : (recordId++).toString();\n\n if (defaultId && appIds.has(id)) {\n let count = 1;\n\n while (appIds.has(`${defaultId}:${count}`)) {\n count++;\n }\n\n id = `${defaultId}_${count}`;\n }\n\n appIds.add(id);\n app.__VUE_DEVTOOLS_APP_RECORD_ID__ = id;\n return id;\n}\n\nexports.getAppRecordId = getAppRecordId;\n\nasync function getAppRecord(app, ctx) {\n const record = ctx.appRecords.find(ar => ar.options.app === app);\n\n if (record) {\n return record;\n }\n\n return new Promise((resolve, reject) => {\n let resolvers = appRecordPromises.get(app);\n let timedOut = false;\n\n if (!resolvers) {\n resolvers = [];\n appRecordPromises.set(app, resolvers);\n }\n\n const fn = record => {\n if (!timedOut) {\n clearTimeout(timer);\n resolve(record);\n }\n };\n\n resolvers.push(fn);\n const timer = setTimeout(() => {\n timedOut = true;\n const index = resolvers.indexOf(fn);\n if (index !== -1) resolvers.splice(index, 1);\n\n if (shared_utils_1.SharedData.debugInfo) {\n // eslint-disable-next-line no-console\n console.log('Timed out waiting for app record', app);\n }\n\n reject(new Error(`Timed out getting app record for app`));\n }, 60000);\n });\n}\n\nexports.getAppRecord = getAppRecord;\n\nfunction waitForAppsRegistration() {\n return jobs.queue(async () => {});\n}\n\nexports.waitForAppsRegistration = waitForAppsRegistration;\n\nasync function sendApps(ctx) {\n const appRecords = [];\n\n for (const appRecord of ctx.appRecords) {\n appRecords.push(appRecord);\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_LIST, {\n apps: appRecords.map(mapAppRecord)\n });\n}\n\nexports.sendApps = sendApps;\n\nfunction removeAppRecord(appRecord, ctx) {\n try {\n appIds.delete(appRecord.id);\n const index = ctx.appRecords.indexOf(appRecord);\n if (index !== -1) ctx.appRecords.splice(index, 1);\n (0, timeline_1.removeLayersForApp)(appRecord.options.app, ctx);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_REMOVE, {\n id: appRecord.id\n });\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nasync function removeApp(app, ctx) {\n try {\n const appRecord = await getAppRecord(app, ctx);\n\n if (appRecord) {\n removeAppRecord(appRecord, ctx);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nexports.removeApp = removeApp; // eslint-disable-next-line camelcase\n\nasync function _legacy_getAndRegisterApps(ctx) {\n // Remove apps that are legacy\n ctx.appRecords.forEach(appRecord => {\n if (appRecord.meta.Vue) {\n removeAppRecord(appRecord, ctx);\n }\n });\n const apps = (0, scan_1.scan)();\n apps.forEach(app => {\n const Vue = app.constructor;\n registerApp({\n app,\n types: {},\n version: Vue.version,\n meta: {\n Vue\n }\n }, ctx);\n });\n}\n\nexports._legacy_getAndRegisterApps = _legacy_getAndRegisterApps;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZjcxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBleHBvcnRzLnJlbW92ZUFwcCA9IGV4cG9ydHMuc2VuZEFwcHMgPSBleHBvcnRzLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uID0gZXhwb3J0cy5nZXRBcHBSZWNvcmQgPSBleHBvcnRzLmdldEFwcFJlY29yZElkID0gZXhwb3J0cy5tYXBBcHBSZWNvcmQgPSBleHBvcnRzLnNlbGVjdEFwcCA9IGV4cG9ydHMucmVnaXN0ZXJBcHAgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IHNwZWFraW5ndXJsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInNwZWFraW5ndXJsXCIpKTtcbmNvbnN0IHF1ZXVlXzEgPSByZXF1aXJlKFwiLi91dGlsL3F1ZXVlXCIpO1xuY29uc3Qgc2Nhbl8xID0gcmVxdWlyZShcIi4vbGVnYWN5L3NjYW5cIik7XG5jb25zdCB0aW1lbGluZV8xID0gcmVxdWlyZShcIi4vdGltZWxpbmVcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3Qgam9icyA9IG5ldyBxdWV1ZV8xLkpvYlF1ZXVlKCk7XG5sZXQgcmVjb3JkSWQgPSAwO1xuY29uc3QgYXBwUmVjb3JkUHJvbWlzZXMgPSBuZXcgTWFwKCk7XG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcChvcHRpb25zLCBjdHgpIHtcbiAgICByZXR1cm4gam9icy5xdWV1ZSgoKSA9PiByZWdpc3RlckFwcEpvYihvcHRpb25zLCBjdHgpKTtcbn1cbmV4cG9ydHMucmVnaXN0ZXJBcHAgPSByZWdpc3RlckFwcDtcbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQXBwSm9iKG9wdGlvbnMsIGN0eCkge1xuICAgIC8vIERlZHVwZVxuICAgIGlmIChjdHguYXBwUmVjb3Jkcy5maW5kKGEgPT4gYS5vcHRpb25zLmFwcCA9PT0gb3B0aW9ucy5hcHApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmluZCBjb3JyZWN0IGJhY2tlbmRcbiAgICBjb25zdCBiYXNlRnJhbWV3b3JrVmVyc2lvbiA9IHBhcnNlSW50KG9wdGlvbnMudmVyc2lvbi5zdWJzdHJpbmcoMCwgb3B0aW9ucy52ZXJzaW9uLmluZGV4T2YoJy4nKSkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmRPcHRpb25zID0gYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzW2ldO1xuICAgICAgICBpZiAoYmFja2VuZE9wdGlvbnMuZnJhbWV3b3JrVmVyc2lvbiA9PT0gYmFzZUZyYW1ld29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIC8vIEVuYWJsZSBiYWNrZW5kIGlmIGl0J3Mgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGNvbnN0IGJhY2tlbmQgPSAoMCwgYmFja2VuZF8xLmdldEJhY2tlbmQpKGJhY2tlbmRPcHRpb25zLCBjdHgpO1xuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQXBwUmVjb3JkKG9wdGlvbnMsIGJhY2tlbmQsIGN0eCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcFJlY29yZChvcHRpb25zLCBiYWNrZW5kLCBjdHgpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgcm9vdEluc3RhbmNlID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUm9vdEluc3RhbmNlKG9wdGlvbnMuYXBwKTtcbiAgICBpZiAocm9vdEluc3RhbmNlKSB7XG4gICAgICAgIGlmICgoYXdhaXQgYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKHJvb3RJbnN0YW5jZSkpLmhpZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmRJZCsrO1xuICAgICAgICBjb25zdCBuYW1lID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUmVjb3JkTmFtZShvcHRpb25zLmFwcCwgcmVjb3JkSWQudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IGlkID0gZ2V0QXBwUmVjb3JkSWQob3B0aW9ucy5hcHAsICgwLCBzcGVha2luZ3VybF8xLmRlZmF1bHQpKG5hbWUpKTtcbiAgICAgICAgY29uc3QgW2VsXSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhyb290SW5zdGFuY2UpO1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgYmFja2VuZCxcbiAgICAgICAgICAgIGxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDogbnVsbCxcbiAgICAgICAgICAgIGluc3RhbmNlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgICByb290SW5zdGFuY2UsXG4gICAgICAgICAgICBwZXJmR3JvdXBJZHM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGlmcmFtZTogZG9jdW1lbnQgIT09IGVsLm93bmVyRG9jdW1lbnQgPyBlbC5vd25lckRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lIDogbnVsbCxcbiAgICAgICAgICAgIG1ldGE6IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMuYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfXyA9IHJlY29yZDtcbiAgICAgICAgY29uc3Qgcm9vdElkID0gYCR7cmVjb3JkLmlkfTpyb290YDtcbiAgICAgICAgcmVjb3JkLmluc3RhbmNlTWFwLnNldChyb290SWQsIHJlY29yZC5yb290SW5zdGFuY2UpO1xuICAgICAgICByZWNvcmQucm9vdEluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gcm9vdElkO1xuICAgICAgICAvLyBUaW1lbGluZVxuICAgICAgICAoMCwgdGltZWxpbmVfMS5hZGRCdWlsdGluTGF5ZXJzKShyZWNvcmQsIGN0eCk7XG4gICAgICAgIGN0eC5hcHBSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgaWYgKGJhY2tlbmQub3B0aW9ucy5zZXR1cEFwcCkge1xuICAgICAgICAgICAgYmFja2VuZC5vcHRpb25zLnNldHVwQXBwKGJhY2tlbmQuYXBpLCByZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJhY2tlbmQuYXBpLnJlZ2lzdGVyQXBwbGljYXRpb24ob3B0aW9ucy5hcHApO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9BREQsIHtcbiAgICAgICAgICAgIGFwcFJlY29yZDogbWFwQXBwUmVjb3JkKHJlY29yZCksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYXBwUmVjb3JkUHJvbWlzZXMuaGFzKG9wdGlvbnMuYXBwKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGFwcFJlY29yZFByb21pc2VzLmdldChvcHRpb25zLmFwcCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByKHJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXV0byBzZWxlY3QgZmlyc3QgYXBwXG4gICAgICAgIGlmIChjdHguY3VycmVudEFwcFJlY29yZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBhd2FpdCBzZWxlY3RBcHAocmVjb3JkLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tWdWUgZGV2dG9vbHNdIE5vIHJvb3QgaW5zdGFuY2UgZm91bmQgZm9yIGFwcCwgaXQgbWlnaHQgaGF2ZSBiZWVuIHVubW91bnRlZCcsIG9wdGlvbnMuYXBwKTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBzZWxlY3RBcHAocmVjb3JkLCBjdHgpIHtcbiAgICBjdHguY3VycmVudEFwcFJlY29yZCA9IHJlY29yZDtcbiAgICBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkID0gcmVjb3JkLmxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9TRUxFQ1RFRCwge1xuICAgICAgICBpZDogcmVjb3JkLmlkLFxuICAgICAgICBsYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQ6IHJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQsXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbGVjdEFwcCA9IHNlbGVjdEFwcDtcbmZ1bmN0aW9uIG1hcEFwcFJlY29yZChyZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcmVjb3JkLmlkLFxuICAgICAgICBuYW1lOiByZWNvcmQubmFtZSxcbiAgICAgICAgdmVyc2lvbjogcmVjb3JkLm9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgaWZyYW1lOiByZWNvcmQuaWZyYW1lLFxuICAgIH07XG59XG5leHBvcnRzLm1hcEFwcFJlY29yZCA9IG1hcEFwcFJlY29yZDtcbmNvbnN0IGFwcElkcyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIGdldEFwcFJlY29yZElkKGFwcCwgZGVmYXVsdElkKSB7XG4gICAgaWYgKGFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX0lEX18gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXztcbiAgICB9XG4gICAgbGV0IGlkID0gZGVmYXVsdElkICE9PSBudWxsICYmIGRlZmF1bHRJZCAhPT0gdm9pZCAwID8gZGVmYXVsdElkIDogKHJlY29yZElkKyspLnRvU3RyaW5nKCk7XG4gICAgaWYgKGRlZmF1bHRJZCAmJiBhcHBJZHMuaGFzKGlkKSkge1xuICAgICAgICBsZXQgY291bnQgPSAxO1xuICAgICAgICB3aGlsZSAoYXBwSWRzLmhhcyhgJHtkZWZhdWx0SWR9OiR7Y291bnR9YCkpIHtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWQgPSBgJHtkZWZhdWx0SWR9XyR7Y291bnR9YDtcbiAgICB9XG4gICAgYXBwSWRzLmFkZChpZCk7XG4gICAgYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXyA9IGlkO1xuICAgIHJldHVybiBpZDtcbn1cbmV4cG9ydHMuZ2V0QXBwUmVjb3JkSWQgPSBnZXRBcHBSZWNvcmRJZDtcbmFzeW5jIGZ1bmN0aW9uIGdldEFwcFJlY29yZChhcHAsIGN0eCkge1xuICAgIGNvbnN0IHJlY29yZCA9IGN0eC5hcHBSZWNvcmRzLmZpbmQoYXIgPT4gYXIub3B0aW9ucy5hcHAgPT09IGFwcCk7XG4gICAgaWYgKHJlY29yZCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzb2x2ZXJzID0gYXBwUmVjb3JkUHJvbWlzZXMuZ2V0KGFwcCk7XG4gICAgICAgIGxldCB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXJlc29sdmVycykge1xuICAgICAgICAgICAgcmVzb2x2ZXJzID0gW107XG4gICAgICAgICAgICBhcHBSZWNvcmRQcm9taXNlcy5zZXQoYXBwLCByZXNvbHZlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZuID0gKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aW1lZE91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXNvbHZlcnMucHVzaChmbik7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlc29sdmVycy5pbmRleE9mKGZuKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXBwIHJlY29yZCcsIGFwcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lZCBvdXQgZ2V0dGluZyBhcHAgcmVjb3JkIGZvciBhcHBgKSk7XG4gICAgICAgIH0sIDYwMDAwKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0QXBwUmVjb3JkID0gZ2V0QXBwUmVjb3JkO1xuZnVuY3Rpb24gd2FpdEZvckFwcHNSZWdpc3RyYXRpb24oKSB7XG4gICAgcmV0dXJuIGpvYnMucXVldWUoYXN5bmMgKCkgPT4geyB9KTtcbn1cbmV4cG9ydHMud2FpdEZvckFwcHNSZWdpc3RyYXRpb24gPSB3YWl0Rm9yQXBwc1JlZ2lzdHJhdGlvbjtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRBcHBzKGN0eCkge1xuICAgIGNvbnN0IGFwcFJlY29yZHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGFwcFJlY29yZCBvZiBjdHguYXBwUmVjb3Jkcykge1xuICAgICAgICBhcHBSZWNvcmRzLnB1c2goYXBwUmVjb3JkKTtcbiAgICB9XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfTElTVCwge1xuICAgICAgICBhcHBzOiBhcHBSZWNvcmRzLm1hcChtYXBBcHBSZWNvcmQpLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kQXBwcyA9IHNlbmRBcHBzO1xuZnVuY3Rpb24gcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYXBwSWRzLmRlbGV0ZShhcHBSZWNvcmQuaWQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGN0eC5hcHBSZWNvcmRzLmluZGV4T2YoYXBwUmVjb3JkKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIGN0eC5hcHBSZWNvcmRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICgwLCB0aW1lbGluZV8xLnJlbW92ZUxheWVyc0ZvckFwcCkoYXBwUmVjb3JkLm9wdGlvbnMuYXBwLCBjdHgpO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9SRU1PVkUsIHsgaWQ6IGFwcFJlY29yZC5pZCB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQXBwKGFwcCwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgZ2V0QXBwUmVjb3JkKGFwcCwgY3R4KTtcbiAgICAgICAgaWYgKGFwcFJlY29yZCkge1xuICAgICAgICAgICAgcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnJlbW92ZUFwcCA9IHJlbW92ZUFwcDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbmFzeW5jIGZ1bmN0aW9uIF9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKGN0eCkge1xuICAgIC8vIFJlbW92ZSBhcHBzIHRoYXQgYXJlIGxlZ2FjeVxuICAgIGN0eC5hcHBSZWNvcmRzLmZvckVhY2goYXBwUmVjb3JkID0+IHtcbiAgICAgICAgaWYgKGFwcFJlY29yZC5tZXRhLlZ1ZSkge1xuICAgICAgICAgICAgcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFwcHMgPSAoMCwgc2Nhbl8xLnNjYW4pKCk7XG4gICAgYXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgIGNvbnN0IFZ1ZSA9IGFwcC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmVnaXN0ZXJBcHAoe1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgdHlwZXM6IHt9LFxuICAgICAgICAgICAgdmVyc2lvbjogVnVlLnZlcnNpb24sXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgICAgVnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgY3R4KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBfbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79132\n");
|
|
111
111
|
|
|
112
112
|
/***/ }),
|
|
113
113
|
|
|
@@ -315,7 +315,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
315
315
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
316
316
|
|
|
317
317
|
"use strict";
|
|
318
|
-
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setupPlugin = void 0;\n\nconst devtools_api_1 = __webpack_require__(72039);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst clone_deep_1 = __importDefault(__webpack_require__(96206));\n\nlet actionId = 0;\n\nfunction setupPlugin(api, app, Vue) {\n const ROUTER_INSPECTOR_ID = 'vue2-router-inspector';\n const ROUTER_CHANGES_LAYER_ID = 'vue2-router-changes';\n const VUEX_INSPECTOR_ID = 'vue2-vuex-inspector';\n const VUEX_MUTATIONS_ID = 'vue2-vuex-mutations';\n const VUEX_ACTIONS_ID = 'vue2-vuex-actions';\n (0, devtools_api_1.setupDevtoolsPlugin)({\n app,\n id: 'org.vuejs.vue2-internal',\n label: 'Vue 2',\n homepage: 'https://vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png'\n }, api => {\n const hook = shared_utils_1.target.__VUE_DEVTOOLS_GLOBAL_HOOK__; // Vue Router\n\n if (app.$router) {\n const router = app.$router; // Inspector\n\n api.addInspector({\n id: ROUTER_INSPECTOR_ID,\n label: 'Routes',\n icon: 'book',\n treeFilterPlaceholder: 'Search routes'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n payload.rootNodes = router.options.routes.map(route => formatRouteNode(router, route, '', payload.filter)).filter(Boolean);\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n const route = router.matcher.getRoutes().find(r => getPathId(r) === payload.nodeId);\n\n if (route) {\n payload.state = {\n options: formatRouteData(route)\n };\n }\n }\n }); // Timeline\n\n api.addTimelineLayer({\n id: ROUTER_CHANGES_LAYER_ID,\n label: 'Router Navigations',\n color: 0x40a8c4\n });\n router.afterEach((to, from) => {\n api.addTimelineEvent({\n layerId: ROUTER_CHANGES_LAYER_ID,\n event: {\n time: Date.now(),\n title: to.path,\n data: {\n from,\n to\n }\n }\n });\n api.sendInspectorTree(ROUTER_INSPECTOR_ID);\n });\n } // Vuex\n\n\n if (app.$store) {\n const store = app.$store;\n api.addInspector({\n id: VUEX_INSPECTOR_ID,\n label: 'Vuex',\n icon: 'storage',\n treeFilterPlaceholder: 'Filter stores...'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n if (payload.filter) {\n const nodes = [];\n flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');\n payload.rootNodes = nodes;\n } else {\n payload.rootNodes = [formatStoreForInspectorTree(store._modules.root, '')];\n }\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n const modulePath = payload.nodeId;\n const module = getStoreModule(store._modules, modulePath); // Access the getters prop to init getters cache (which is lazy)\n // eslint-disable-next-line no-unused-expressions\n\n module.context.getters;\n payload.state = formatStoreForInspectorState(module, store._makeLocalGettersCache, modulePath);\n }\n });\n api.addTimelineLayer({\n id: VUEX_MUTATIONS_ID,\n label: 'Vuex Mutations',\n color: LIME_500\n });\n api.addTimelineLayer({\n id: VUEX_ACTIONS_ID,\n label: 'Vuex Actions',\n color: LIME_500\n });\n hook.on('vuex:mutation', (mutation, state) => {\n api.sendInspectorState(VUEX_INSPECTOR_ID);\n const data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = (0, clone_deep_1.default)(state);\n api.addTimelineEvent({\n layerId: VUEX_MUTATIONS_ID,\n event: {\n time: Date.now(),\n title: mutation.type,\n data\n }\n });\n });\n store.subscribeAction({\n before: (action, state) => {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n action._id = actionId++;\n action._time = Date.now();\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data\n }\n });\n },\n after: (action, state) => {\n const data = {};\n\n const duration = Date.now() - action._time;\n\n data.duration = {\n _custom: {\n type: 'duration',\n display: `${duration}ms`,\n tooltip: 'Action duration',\n value: duration\n }\n };\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: Date.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data\n }\n });\n }\n }, {\n prepend: true\n }); // Inspect getters on mutations\n\n api.on.inspectTimelineEvent(payload => {\n if (payload.layerId === VUEX_MUTATIONS_ID) {\n const getterKeys = Object.keys(store.getters);\n\n if (getterKeys.length) {\n const vm = new Vue({\n data: {\n $$state: payload.data.state\n },\n computed: store._vm.$options.computed\n });\n const originalVm = store._vm;\n store._vm = vm;\n const tree = transformPathsToObjectTree(store.getters);\n payload.data.getters = (0, clone_deep_1.default)(tree);\n store._vm = originalVm;\n vm.$destroy();\n }\n }\n });\n }\n });\n}\n\nexports.setupPlugin = setupPlugin;\n/**\n * Extracted from tailwind palette\n */\n\nconst BLUE_600 = 0x2563eb;\nconst LIME_500 = 0x84cc16;\nconst CYAN_400 = 0x22d3ee;\nconst ORANGE_400 = 0xfb923c;\nconst WHITE = 0xffffff;\nconst DARK = 0x666666;\n\nfunction formatRouteNode(router, route, parentPath, filter) {\n var _a, _b;\n\n const node = {\n id: parentPath + route.path,\n label: route.path,\n children: (_a = route.children) === null || _a === void 0 ? void 0 : _a.map(child => formatRouteNode(router, child, route.path, filter)).filter(Boolean),\n tags: []\n };\n if (filter && !node.id.includes(filter) && !((_b = node.children) === null || _b === void 0 ? void 0 : _b.length)) return null;\n\n if (route.name != null) {\n node.tags.push({\n label: String(route.name),\n textColor: 0,\n backgroundColor: CYAN_400\n });\n }\n\n if (route.alias != null) {\n node.tags.push({\n label: 'alias',\n textColor: 0,\n backgroundColor: ORANGE_400\n });\n }\n\n const currentPath = router.currentRoute.matched.reduce((p, m) => p + m.path, '');\n\n if (node.id === currentPath) {\n node.tags.push({\n label: 'active',\n textColor: WHITE,\n backgroundColor: BLUE_600\n });\n }\n\n if (route.redirect) {\n node.tags.push({\n label: 'redirect: ' + (typeof route.redirect === 'string' ? route.redirect : 'Object'),\n textColor: WHITE,\n backgroundColor: DARK\n });\n }\n\n return node;\n}\n\nfunction formatRouteData(route) {\n const data = [];\n data.push({\n key: 'path',\n value: route.path\n });\n\n if (route.redirect) {\n data.push({\n key: 'redirect',\n value: route.redirect\n });\n }\n\n if (route.alias) {\n data.push({\n key: 'alias',\n value: route.alias\n });\n }\n\n if (route.props) {\n data.push({\n key: 'props',\n value: route.props\n });\n }\n\n if (route.name && route.name != null) {\n data.push({\n key: 'name',\n value: route.name\n });\n }\n\n if (route.component) {\n const component = {}; // if (route.component.__file) {\n // component.file = route.component.__file\n // }\n\n if (route.component.template) {\n component.template = route.component.template;\n }\n\n if (route.component.props) {\n component.props = route.component.props;\n }\n\n if (!(0, shared_utils_1.isEmptyObject)(component)) {\n data.push({\n key: 'component',\n value: component\n });\n }\n }\n\n return data;\n}\n\nfunction getPathId(routeMatcher) {\n let path = routeMatcher.path;\n\n if (routeMatcher.parent) {\n path = getPathId(routeMatcher.parent) + path;\n }\n\n return path;\n}\n\nconst TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: WHITE,\n backgroundColor: DARK\n};\n\nfunction formatStoreForInspectorTree(module, path) {\n return {\n id: path || 'root',\n // all modules end with a `/`, we want the last segment only\n // cart/ -> cart\n // nested/cart/ -> cart\n label: extractNameFromPath(path),\n tags: module.namespaced ? [TAG_NAMESPACED] : [],\n children: Object.keys(module._children).map(moduleName => formatStoreForInspectorTree(module._children[moduleName], path + moduleName + '/'))\n };\n}\n\nfunction flattenStoreForInspectorTree(result, module, filter, path) {\n if (path.includes(filter)) {\n result.push({\n id: path || 'root',\n label: path.endsWith('/') ? path.slice(0, path.length - 1) : path || 'Root',\n tags: module.namespaced ? [TAG_NAMESPACED] : []\n });\n }\n\n Object.keys(module._children).forEach(moduleName => {\n flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + '/');\n });\n}\n\nfunction extractNameFromPath(path) {\n return path && path !== 'root' ? path.split('/').slice(-2, -1)[0] : 'Root';\n}\n\nfunction formatStoreForInspectorState(module, getters, path) {\n getters = !module.namespaced || path === 'root' ? module.context.getters : getters[path];\n const gettersKeys = Object.keys(getters);\n const storeState = {\n state: Object.keys(module.state).map(key => ({\n key,\n editable: true,\n value: module.state[key]\n }))\n };\n\n if (gettersKeys.length) {\n const tree = transformPathsToObjectTree(getters);\n storeState.getters = Object.keys(tree).map(key => ({\n key: key.endsWith('/') ? extractNameFromPath(key) : key,\n editable: false,\n value: canThrow(() => tree[key])\n }));\n }\n\n return storeState;\n}\n\nfunction transformPathsToObjectTree(getters) {\n const result = {};\n Object.keys(getters).forEach(key => {\n const path = key.split('/');\n\n if (path.length > 1) {\n let target = result;\n const leafKey = path.pop();\n\n for (const p of path) {\n if (!target[p]) {\n target[p] = {\n _custom: {\n value: {},\n display: p,\n tooltip: 'Module',\n abstract: true\n }\n };\n }\n\n target = target[p]._custom.value;\n }\n\n target[leafKey] = canThrow(() => getters[key]);\n } else {\n result[key] = canThrow(() => getters[key]);\n }\n });\n return result;\n}\n\nfunction getStoreModule(moduleMap, path) {\n const names = path.split('/').filter(n => n);\n return names.reduce((module, moduleName, i) => {\n const child = module[moduleName];\n\n if (!child) {\n throw new Error(`Missing module \"${moduleName}\" for path \"${path}\".`);\n }\n\n return i === names.length - 1 ? child : child._children;\n }, path === 'root' ? moduleMap : moduleMap.root._children);\n}\n\nfunction canThrow(cb) {\n try {\n return cb();\n } catch (e) {\n return e;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyNS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSSxRQUFRLEdBQUcsQ0FBZjs7QUFFQSxTQUFnQixXQUFoQixDQUE2QixHQUE3QixFQUErQyxHQUEvQyxFQUF5RCxHQUF6RCxFQUE0RDtBQUMxRCxRQUFNLG1CQUFtQixHQUFHLHVCQUE1QjtBQUNBLFFBQU0sdUJBQXVCLEdBQUcscUJBQWhDO0FBRUEsUUFBTSxpQkFBaUIsR0FBRyxxQkFBMUI7QUFDQSxRQUFNLGlCQUFpQixHQUFHLHFCQUExQjtBQUNBLFFBQU0sZUFBZSxHQUFHLG1CQUF4QjtBQUVBLDBDQUFvQjtBQUNsQixPQURrQjtBQUVsQixNQUFFLEVBQUUseUJBRmM7QUFHbEIsU0FBSyxFQUFFLE9BSFc7QUFJbEIsWUFBUSxFQUFFLG9CQUpRO0FBS2xCLFFBQUksRUFBRTtBQUxZLEdBQXBCLEVBTUcsR0FBRyxJQUFHO0FBQ1AsVUFBTSxJQUFJLEdBQUcsc0JBQU8sNEJBQXBCLENBRE8sQ0FHUDs7QUFDQSxRQUFJLEdBQUcsQ0FBQyxPQUFSLEVBQWlCO0FBQ2YsWUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQW5CLENBRGUsQ0FHZjs7QUFFQSxTQUFHLENBQUMsWUFBSixDQUFpQjtBQUNmLFVBQUUsRUFBRSxtQkFEVztBQUVmLGFBQUssRUFBRSxRQUZRO0FBR2YsWUFBSSxFQUFFLE1BSFM7QUFJZiw2QkFBcUIsRUFBRTtBQUpSLE9BQWpCO0FBT0EsU0FBRyxDQUFDLEVBQUosQ0FBTyxnQkFBUCxDQUF3QixPQUFPLElBQUc7QUFDaEMsWUFBSSxPQUFPLENBQUMsV0FBUixLQUF3QixtQkFBNUIsRUFBaUQ7QUFDL0MsaUJBQU8sQ0FBQyxTQUFSLEdBQW9CLE1BQU0sQ0FBQyxPQUFQLENBQWUsTUFBZixDQUFzQixHQUF0QixDQUEwQixLQUFLLElBQUksZUFBZSxDQUFDLE1BQUQsRUFBUyxLQUFULEVBQWdCLEVBQWhCLEVBQW9CLE9BQU8sQ0FBQyxNQUE1QixDQUFsRCxFQUF1RixNQUF2RixDQUE4RixPQUE5RixDQUFwQjtBQUNEO0FBQ0YsT0FKRDtBQU1BLFNBQUcsQ0FBQyxFQUFKLENBQU8saUJBQVAsQ0FBeUIsT0FBTyxJQUFHO0FBQ2pDLFlBQUksT0FBTyxDQUFDLFdBQVIsS0FBd0IsbUJBQTVCLEVBQWlEO0FBQy9DLGdCQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBUCxDQUFlLFNBQWYsR0FBMkIsSUFBM0IsQ0FBZ0MsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIsT0FBTyxDQUFDLE1BQTlELENBQWQ7O0FBQ0EsY0FBSSxLQUFKLEVBQVc7QUFDVCxtQkFBTyxDQUFDLEtBQVIsR0FBZ0I7QUFDZCxxQkFBTyxFQUFFLGVBQWUsQ0FBQyxLQUFEO0FBRFYsYUFBaEI7QUFHRDtBQUNGO0FBQ0YsT0FURCxFQWxCZSxDQTZCZjs7QUFFQSxTQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsVUFBRSxFQUFFLHVCQURlO0FBRW5CLGFBQUssRUFBRSxvQkFGWTtBQUduQixhQUFLLEVBQUU7QUFIWSxPQUFyQjtBQU1BLFlBQU0sQ0FBQyxTQUFQLENBQWlCLENBQUMsRUFBRCxFQUFLLElBQUwsS0FBYTtBQUM1QixXQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsaUJBQU8sRUFBRSx1QkFEVTtBQUVuQixlQUFLLEVBQUU7QUFDTCxnQkFBSSxFQUFFLElBQUksQ0FBQyxHQUFMLEVBREQ7QUFFTCxpQkFBSyxFQUFFLEVBQUUsQ0FBQyxJQUZMO0FBR0wsZ0JBQUksRUFBRTtBQUNKLGtCQURJO0FBRUo7QUFGSTtBQUhEO0FBRlksU0FBckI7QUFXQSxXQUFHLENBQUMsaUJBQUosQ0FBc0IsbUJBQXRCO0FBQ0QsT0FiRDtBQWNELEtBdkRNLENBeURQOzs7QUFDQSxRQUFJLEdBQUcsQ0FBQyxNQUFSLEVBQWdCO0FBQ2QsWUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQWxCO0FBRUEsU0FBRyxDQUFDLFlBQUosQ0FBaUI7QUFDZixVQUFFLEVBQUUsaUJBRFc7QUFFZixhQUFLLEVBQUUsTUFGUTtBQUdmLFlBQUksRUFBRSxTQUhTO0FBSWYsNkJBQXFCLEVBQUU7QUFKUixPQUFqQjtBQU9BLFNBQUcsQ0FBQyxFQUFKLENBQU8sZ0JBQVAsQ0FBeUIsT0FBRCxJQUFZO0FBQ2xDLFlBQUksT0FBTyxDQUFDLFdBQVIsS0FBd0IsaUJBQTVCLEVBQStDO0FBQzdDLGNBQUksT0FBTyxDQUFDLE1BQVosRUFBb0I7QUFDbEIsa0JBQU0sS0FBSyxHQUFHLEVBQWQ7QUFDQSx3Q0FBNEIsQ0FBQyxLQUFELEVBQVEsS0FBSyxDQUFDLFFBQU4sQ0FBZSxJQUF2QixFQUE2QixPQUFPLENBQUMsTUFBckMsRUFBNkMsRUFBN0MsQ0FBNUI7QUFDQSxtQkFBTyxDQUFDLFNBQVIsR0FBb0IsS0FBcEI7QUFDRCxXQUpELE1BSU87QUFDTCxtQkFBTyxDQUFDLFNBQVIsR0FBb0IsQ0FDbEIsMkJBQTJCLENBQUMsS0FBSyxDQUFDLFFBQU4sQ0FBZSxJQUFoQixFQUFzQixFQUF0QixDQURULENBQXBCO0FBR0Q7QUFDRjtBQUNGLE9BWkQ7QUFjQSxTQUFHLENBQUMsRUFBSixDQUFPLGlCQUFQLENBQTBCLE9BQUQsSUFBWTtBQUNuQyxZQUFJLE9BQU8sQ0FBQyxXQUFSLEtBQXdCLGlCQUE1QixFQUErQztBQUM3QyxnQkFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQTNCO0FBQ0EsZ0JBQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUCxFQUFpQixVQUFqQixDQUE3QixDQUY2QyxDQUc3QztBQUNBOztBQUNBLGdCQUFNLENBQUMsT0FBUCxDQUFlLE9BQWY7QUFDQSxpQkFBTyxDQUFDLEtBQVIsR0FBZ0IsNEJBQTRCLENBQzFDLE1BRDBDLEVBRTFDLEtBQUssQ0FBQyxzQkFGb0MsRUFHMUMsVUFIMEMsQ0FBNUM7QUFLRDtBQUNGLE9BYkQ7QUFlQSxTQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsVUFBRSxFQUFFLGlCQURlO0FBRW5CLGFBQUssRUFBRSxnQkFGWTtBQUduQixhQUFLLEVBQUU7QUFIWSxPQUFyQjtBQU1BLFNBQUcsQ0FBQyxnQkFBSixDQUFxQjtBQUNuQixVQUFFLEVBQUUsZUFEZTtBQUVuQixhQUFLLEVBQUUsY0FGWTtBQUduQixhQUFLLEVBQUU7QUFIWSxPQUFyQjtBQU1BLFVBQUksQ0FBQyxFQUFMLENBQVEsZUFBUixFQUF5QixDQUFDLFFBQUQsRUFBVyxLQUFYLEtBQW9CO0FBQzNDLFdBQUcsQ0FBQyxrQkFBSixDQUF1QixpQkFBdkI7QUFFQSxjQUFNLElBQUksR0FBUSxFQUFsQjs7QUFFQSxZQUFJLFFBQVEsQ0FBQyxPQUFiLEVBQXNCO0FBQ3BCLGNBQUksQ0FBQyxPQUFMLEdBQWUsUUFBUSxDQUFDLE9BQXhCO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDLEtBQUwsR0FBYSwwQkFBSyxLQUFMLENBQWI7QUFFQSxXQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsaUJBQU8sRUFBRSxpQkFEVTtBQUVuQixlQUFLLEVBQUU7QUFDTCxnQkFBSSxFQUFFLElBQUksQ0FBQyxHQUFMLEVBREQ7QUFFTCxpQkFBSyxFQUFFLFFBQVEsQ0FBQyxJQUZYO0FBR0w7QUFISztBQUZZLFNBQXJCO0FBUUQsT0FuQkQ7QUFxQkEsV0FBSyxDQUFDLGVBQU4sQ0FBc0I7QUFDcEIsY0FBTSxFQUFFLENBQUMsTUFBRCxFQUFTLEtBQVQsS0FBa0I7QUFDeEIsZ0JBQU0sSUFBSSxHQUFRLEVBQWxCOztBQUNBLGNBQUksTUFBTSxDQUFDLE9BQVgsRUFBb0I7QUFDbEIsZ0JBQUksQ0FBQyxPQUFMLEdBQWUsTUFBTSxDQUFDLE9BQXRCO0FBQ0Q7O0FBQ0QsZ0JBQU0sQ0FBQyxHQUFQLEdBQWEsUUFBUSxFQUFyQjtBQUNBLGdCQUFNLENBQUMsS0FBUCxHQUFlLElBQUksQ0FBQyxHQUFMLEVBQWY7QUFDQSxjQUFJLENBQUMsS0FBTCxHQUFhLEtBQWI7QUFFQSxhQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsbUJBQU8sRUFBRSxlQURVO0FBRW5CLGlCQUFLLEVBQUU7QUFDTCxrQkFBSSxFQUFFLE1BQU0sQ0FBQyxLQURSO0FBRUwsbUJBQUssRUFBRSxNQUFNLENBQUMsSUFGVDtBQUdMLHFCQUFPLEVBQUUsTUFBTSxDQUFDLEdBSFg7QUFJTCxzQkFBUSxFQUFFLE9BSkw7QUFLTDtBQUxLO0FBRlksV0FBckI7QUFVRCxTQXBCbUI7QUFxQnBCLGFBQUssRUFBRSxDQUFDLE1BQUQsRUFBUyxLQUFULEtBQWtCO0FBQ3ZCLGdCQUFNLElBQUksR0FBUSxFQUFsQjs7QUFDQSxnQkFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUwsS0FBYSxNQUFNLENBQUMsS0FBckM7O0FBQ0EsY0FBSSxDQUFDLFFBQUwsR0FBZ0I7QUFDZCxtQkFBTyxFQUFFO0FBQ1Asa0JBQUksRUFBRSxVQURDO0FBRVAscUJBQU8sRUFBRSxHQUFHLFFBQVEsSUFGYjtBQUdQLHFCQUFPLEVBQUUsaUJBSEY7QUFJUCxtQkFBSyxFQUFFO0FBSkE7QUFESyxXQUFoQjs7QUFRQSxjQUFJLE1BQU0sQ0FBQyxPQUFYLEVBQW9CO0FBQ2xCLGdCQUFJLENBQUMsT0FBTCxHQUFlLE1BQU0sQ0FBQyxPQUF0QjtBQUNEOztBQUNELGNBQUksQ0FBQyxLQUFMLEdBQWEsS0FBYjtBQUVBLGFBQUcsQ0FBQyxnQkFBSixDQUFxQjtBQUNuQixtQkFBTyxFQUFFLGVBRFU7QUFFbkIsaUJBQUssRUFBRTtBQUNMLGtCQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUwsRUFERDtBQUVMLG1CQUFLLEVBQUUsTUFBTSxDQUFDLElBRlQ7QUFHTCxxQkFBTyxFQUFFLE1BQU0sQ0FBQyxHQUhYO0FBSUwsc0JBQVEsRUFBRSxLQUpMO0FBS0w7QUFMSztBQUZZLFdBQXJCO0FBVUQ7QUEvQ21CLE9BQXRCLEVBZ0RHO0FBQUUsZUFBTyxFQUFFO0FBQVgsT0FoREgsRUF4RWMsQ0EwSGQ7O0FBQ0EsU0FBRyxDQUFDLEVBQUosQ0FBTyxvQkFBUCxDQUE0QixPQUFPLElBQUc7QUFDcEMsWUFBSSxPQUFPLENBQUMsT0FBUixLQUFvQixpQkFBeEIsRUFBMkM7QUFDekMsZ0JBQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFQLENBQVksS0FBSyxDQUFDLE9BQWxCLENBQW5COztBQUNBLGNBQUksVUFBVSxDQUFDLE1BQWYsRUFBdUI7QUFDckIsa0JBQU0sRUFBRSxHQUFHLElBQUksR0FBSixDQUFRO0FBQ2pCLGtCQUFJLEVBQUU7QUFDSix1QkFBTyxFQUFFLE9BQU8sQ0FBQyxJQUFSLENBQWE7QUFEbEIsZUFEVztBQUlqQixzQkFBUSxFQUFFLEtBQUssQ0FBQyxHQUFOLENBQVUsUUFBVixDQUFtQjtBQUpaLGFBQVIsQ0FBWDtBQU1BLGtCQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBekI7QUFDQSxpQkFBSyxDQUFDLEdBQU4sR0FBWSxFQUFaO0FBRUEsa0JBQU0sSUFBSSxHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxPQUFQLENBQXZDO0FBQ0EsbUJBQU8sQ0FBQyxJQUFSLENBQWEsT0FBYixHQUF1QiwwQkFBSyxJQUFMLENBQXZCO0FBRUEsaUJBQUssQ0FBQyxHQUFOLEdBQVksVUFBWjtBQUNBLGNBQUUsQ0FBQyxRQUFIO0FBQ0Q7QUFDRjtBQUNGLE9BcEJEO0FBcUJEO0FBQ0YsR0FqTkQ7QUFrTkQ7O0FBMU5EO0FBNE5BOztBQUVHOztBQUNILE1BQU0sUUFBUSxHQUFHLFFBQWpCO0FBQ0EsTUFBTSxRQUFRLEdBQUcsUUFBakI7QUFDQSxNQUFNLFFBQVEsR0FBRyxRQUFqQjtBQUNBLE1BQU0sVUFBVSxHQUFHLFFBQW5CO0FBQ0EsTUFBTSxLQUFLLEdBQUcsUUFBZDtBQUNBLE1BQU0sSUFBSSxHQUFHLFFBQWI7O0FBRUEsU0FBUyxlQUFULENBQTBCLE1BQTFCLEVBQWtDLEtBQWxDLEVBQXlDLFVBQXpDLEVBQTZELE1BQTdELEVBQTJFOzs7QUFDekUsUUFBTSxJQUFJLEdBQXdCO0FBQ2hDLE1BQUUsRUFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBRFM7QUFFaEMsU0FBSyxFQUFFLEtBQUssQ0FBQyxJQUZtQjtBQUdoQyxZQUFRLEVBQUUsV0FBSyxDQUFDLFFBQU4sTUFBYyxJQUFkLElBQWMsYUFBZCxHQUFjLE1BQWQsR0FBYyxHQUFFLEdBQUYsQ0FBTSxLQUFLLElBQUksZUFBZSxDQUFDLE1BQUQsRUFBUyxLQUFULEVBQWdCLEtBQUssQ0FBQyxJQUF0QixFQUE0QixNQUE1QixDQUE5QixFQUFtRSxNQUFuRSxDQUEwRSxPQUExRSxDQUhRO0FBSWhDLFFBQUksRUFBRTtBQUowQixHQUFsQztBQU9BLE1BQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUwsQ0FBUSxRQUFSLENBQWlCLE1BQWpCLENBQVgsSUFBdUMsRUFBQyxVQUFJLENBQUMsUUFBTCxNQUFhLElBQWIsSUFBYSxhQUFiLEdBQWEsTUFBYixHQUFhLEdBQUUsTUFBaEIsQ0FBM0MsRUFBbUUsT0FBTyxJQUFQOztBQUVuRSxNQUFJLEtBQUssQ0FBQyxJQUFOLElBQWMsSUFBbEIsRUFBd0I7QUFDdEIsUUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFWLENBQWU7QUFDYixXQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFQLENBREE7QUFFYixlQUFTLEVBQUUsQ0FGRTtBQUdiLHFCQUFlLEVBQUU7QUFISixLQUFmO0FBS0Q7O0FBRUQsTUFBSSxLQUFLLENBQUMsS0FBTixJQUFlLElBQW5CLEVBQXlCO0FBQ3ZCLFFBQUksQ0FBQyxJQUFMLENBQVUsSUFBVixDQUFlO0FBQ2IsV0FBSyxFQUFFLE9BRE07QUFFYixlQUFTLEVBQUUsQ0FGRTtBQUdiLHFCQUFlLEVBQUU7QUFISixLQUFmO0FBS0Q7O0FBRUQsUUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFlBQVAsQ0FBb0IsT0FBcEIsQ0FBNEIsTUFBNUIsQ0FBbUMsQ0FBQyxDQUFELEVBQUksQ0FBSixLQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBbkQsRUFBeUQsRUFBekQsQ0FBcEI7O0FBQ0EsTUFBSSxJQUFJLENBQUMsRUFBTCxLQUFZLFdBQWhCLEVBQTZCO0FBQzNCLFFBQUksQ0FBQyxJQUFMLENBQVUsSUFBVixDQUFlO0FBQ2IsV0FBSyxFQUFFLFFBRE07QUFFYixlQUFTLEVBQUUsS0FGRTtBQUdiLHFCQUFlLEVBQUU7QUFISixLQUFmO0FBS0Q7O0FBRUQsTUFBSSxLQUFLLENBQUMsUUFBVixFQUFvQjtBQUNsQixRQUFJLENBQUMsSUFBTCxDQUFVLElBQVYsQ0FBZTtBQUNiLFdBQUssRUFDSCxnQkFDQyxPQUFPLEtBQUssQ0FBQyxRQUFiLEtBQTBCLFFBQTFCLEdBQXFDLEtBQUssQ0FBQyxRQUEzQyxHQUFzRCxRQUR2RCxDQUZXO0FBSWIsZUFBUyxFQUFFLEtBSkU7QUFLYixxQkFBZSxFQUFFO0FBTEosS0FBZjtBQU9EOztBQUVELFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVMsZUFBVCxDQUEwQixLQUExQixFQUErQjtBQUM3QixRQUFNLElBQUksR0FBbUMsRUFBN0M7QUFFQSxNQUFJLENBQUMsSUFBTCxDQUFVO0FBQUUsT0FBRyxFQUFFLE1BQVA7QUFBZSxTQUFLLEVBQUUsS0FBSyxDQUFDO0FBQTVCLEdBQVY7O0FBRUEsTUFBSSxLQUFLLENBQUMsUUFBVixFQUFvQjtBQUNsQixRQUFJLENBQUMsSUFBTCxDQUFVO0FBQUUsU0FBRyxFQUFFLFVBQVA7QUFBbUIsV0FBSyxFQUFFLEtBQUssQ0FBQztBQUFoQyxLQUFWO0FBQ0Q7O0FBRUQsTUFBSSxLQUFLLENBQUMsS0FBVixFQUFpQjtBQUNmLFFBQUksQ0FBQyxJQUFMLENBQVU7QUFBRSxTQUFHLEVBQUUsT0FBUDtBQUFnQixXQUFLLEVBQUUsS0FBSyxDQUFDO0FBQTdCLEtBQVY7QUFDRDs7QUFFRCxNQUFJLEtBQUssQ0FBQyxLQUFWLEVBQWlCO0FBQ2YsUUFBSSxDQUFDLElBQUwsQ0FBVTtBQUFFLFNBQUcsRUFBRSxPQUFQO0FBQWdCLFdBQUssRUFBRSxLQUFLLENBQUM7QUFBN0IsS0FBVjtBQUNEOztBQUVELE1BQUksS0FBSyxDQUFDLElBQU4sSUFBYyxLQUFLLENBQUMsSUFBTixJQUFjLElBQWhDLEVBQXNDO0FBQ3BDLFFBQUksQ0FBQyxJQUFMLENBQVU7QUFBRSxTQUFHLEVBQUUsTUFBUDtBQUFlLFdBQUssRUFBRSxLQUFLLENBQUM7QUFBNUIsS0FBVjtBQUNEOztBQUVELE1BQUksS0FBSyxDQUFDLFNBQVYsRUFBcUI7QUFDbkIsVUFBTSxTQUFTLEdBQVEsRUFBdkIsQ0FEbUIsQ0FFbkI7QUFDQTtBQUNBOztBQUNBLFFBQUksS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsUUFBcEIsRUFBOEI7QUFDNUIsZUFBUyxDQUFDLFFBQVYsR0FBcUIsS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsUUFBckM7QUFDRDs7QUFDRCxRQUFJLEtBQUssQ0FBQyxTQUFOLENBQWdCLEtBQXBCLEVBQTJCO0FBQ3pCLGVBQVMsQ0FBQyxLQUFWLEdBQWtCLEtBQUssQ0FBQyxTQUFOLENBQWdCLEtBQWxDO0FBQ0Q7O0FBQ0QsUUFBSSxDQUFDLGtDQUFjLFNBQWQsQ0FBTCxFQUErQjtBQUM3QixVQUFJLENBQUMsSUFBTCxDQUFVO0FBQUUsV0FBRyxFQUFFLFdBQVA7QUFBb0IsYUFBSyxFQUFFO0FBQTNCLE9BQVY7QUFDRDtBQUNGOztBQUVELFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVMsU0FBVCxDQUFvQixZQUFwQixFQUFnQztBQUM5QixNQUFJLElBQUksR0FBRyxZQUFZLENBQUMsSUFBeEI7O0FBQ0EsTUFBSSxZQUFZLENBQUMsTUFBakIsRUFBeUI7QUFDdkIsUUFBSSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBZCxDQUFULEdBQWlDLElBQXhDO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsTUFBTSxjQUFjLEdBQUc7QUFDckIsT0FBSyxFQUFFLFlBRGM7QUFFckIsV0FBUyxFQUFFLEtBRlU7QUFHckIsaUJBQWUsRUFBRTtBQUhJLENBQXZCOztBQU1BLFNBQVMsMkJBQVQsQ0FBc0MsTUFBdEMsRUFBOEMsSUFBOUMsRUFBa0Q7QUFDaEQsU0FBTztBQUNMLE1BQUUsRUFBRSxJQUFJLElBQUksTUFEUDtBQUVMO0FBQ0E7QUFDQTtBQUNBLFNBQUssRUFBRSxtQkFBbUIsQ0FBQyxJQUFELENBTHJCO0FBTUwsUUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFQLEdBQW9CLENBQUMsY0FBRCxDQUFwQixHQUF1QyxFQU54QztBQU9MLFlBQVEsRUFBRSxNQUFNLENBQUMsSUFBUCxDQUFZLE1BQU0sQ0FBQyxTQUFuQixFQUE4QixHQUE5QixDQUFtQyxVQUFELElBQzFDLDJCQUEyQixDQUN6QixNQUFNLENBQUMsU0FBUCxDQUFpQixVQUFqQixDQUR5QixFQUV6QixJQUFJLEdBQUcsVUFBUCxHQUFvQixHQUZLLENBRG5CO0FBUEwsR0FBUDtBQWNEOztBQUVELFNBQVMsNEJBQVQsQ0FBdUMsTUFBdkMsRUFBc0UsTUFBdEUsRUFBOEUsTUFBOUUsRUFBOEYsSUFBOUYsRUFBMEc7QUFDeEcsTUFBSSxJQUFJLENBQUMsUUFBTCxDQUFjLE1BQWQsQ0FBSixFQUEyQjtBQUN6QixVQUFNLENBQUMsSUFBUCxDQUFZO0FBQ1YsUUFBRSxFQUFFLElBQUksSUFBSSxNQURGO0FBRVYsV0FBSyxFQUFFLElBQUksQ0FBQyxRQUFMLENBQWMsR0FBZCxJQUFxQixJQUFJLENBQUMsS0FBTCxDQUFXLENBQVgsRUFBYyxJQUFJLENBQUMsTUFBTCxHQUFjLENBQTVCLENBQXJCLEdBQXNELElBQUksSUFBSSxNQUYzRDtBQUdWLFVBQUksRUFBRSxNQUFNLENBQUMsVUFBUCxHQUFvQixDQUFDLGNBQUQsQ0FBcEIsR0FBdUM7QUFIbkMsS0FBWjtBQUtEOztBQUNELFFBQU0sQ0FBQyxJQUFQLENBQVksTUFBTSxDQUFDLFNBQW5CLEVBQThCLE9BQTlCLENBQXNDLFVBQVUsSUFBRztBQUNqRCxnQ0FBNEIsQ0FBQyxNQUFELEVBQVMsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsVUFBakIsQ0FBVCxFQUF1QyxNQUF2QyxFQUErQyxJQUFJLEdBQUcsVUFBUCxHQUFvQixHQUFuRSxDQUE1QjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTLG1CQUFULENBQThCLElBQTlCLEVBQTBDO0FBQ3hDLFNBQU8sSUFBSSxJQUFJLElBQUksS0FBSyxNQUFqQixHQUEwQixJQUFJLENBQUMsS0FBTCxDQUFXLEdBQVgsRUFBZ0IsS0FBaEIsQ0FBc0IsQ0FBQyxDQUF2QixFQUEwQixDQUFDLENBQTNCLEVBQThCLENBQTlCLENBQTFCLEdBQTZELE1BQXBFO0FBQ0Q7O0FBRUQsU0FBUyw0QkFBVCxDQUF1QyxNQUF2QyxFQUErQyxPQUEvQyxFQUF3RCxJQUF4RCxFQUE0RDtBQUMxRCxTQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBUixJQUFzQixJQUFJLEtBQUssTUFBL0IsR0FBd0MsTUFBTSxDQUFDLE9BQVAsQ0FBZSxPQUF2RCxHQUFpRSxPQUFPLENBQUMsSUFBRCxDQUFsRjtBQUNBLFFBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFQLENBQVksT0FBWixDQUFwQjtBQUNBLFFBQU0sVUFBVSxHQUF5QjtBQUN2QyxTQUFLLEVBQUUsTUFBTSxDQUFDLElBQVAsQ0FBWSxNQUFNLENBQUMsS0FBbkIsRUFBMEIsR0FBMUIsQ0FBK0IsR0FBRCxLQUFVO0FBQzdDLFNBRDZDO0FBRTdDLGNBQVEsRUFBRSxJQUZtQztBQUc3QyxXQUFLLEVBQUUsTUFBTSxDQUFDLEtBQVAsQ0FBYSxHQUFiO0FBSHNDLEtBQVYsQ0FBOUI7QUFEZ0MsR0FBekM7O0FBUUEsTUFBSSxXQUFXLENBQUMsTUFBaEIsRUFBd0I7QUFDdEIsVUFBTSxJQUFJLEdBQUcsMEJBQTBCLENBQUMsT0FBRCxDQUF2QztBQUNBLGNBQVUsQ0FBQyxPQUFYLEdBQXFCLE1BQU0sQ0FBQyxJQUFQLENBQVksSUFBWixFQUFrQixHQUFsQixDQUF1QixHQUFELEtBQVU7QUFDbkQsU0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFKLENBQWEsR0FBYixJQUFvQixtQkFBbUIsQ0FBQyxHQUFELENBQXZDLEdBQStDLEdBREQ7QUFFbkQsY0FBUSxFQUFFLEtBRnlDO0FBR25ELFdBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRCxDQUFYO0FBSG9DLEtBQVYsQ0FBdEIsQ0FBckI7QUFLRDs7QUFFRCxTQUFPLFVBQVA7QUFDRDs7QUFFRCxTQUFTLDBCQUFULENBQXFDLE9BQXJDLEVBQTRDO0FBQzFDLFFBQU0sTUFBTSxHQUFHLEVBQWY7QUFDQSxRQUFNLENBQUMsSUFBUCxDQUFZLE9BQVosRUFBcUIsT0FBckIsQ0FBNkIsR0FBRyxJQUFHO0FBQ2pDLFVBQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFKLENBQVUsR0FBVixDQUFiOztBQUNBLFFBQUksSUFBSSxDQUFDLE1BQUwsR0FBYyxDQUFsQixFQUFxQjtBQUNuQixVQUFJLE1BQU0sR0FBRyxNQUFiO0FBQ0EsWUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUwsRUFBaEI7O0FBQ0EsV0FBSyxNQUFNLENBQVgsSUFBZ0IsSUFBaEIsRUFBc0I7QUFDcEIsWUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFELENBQVgsRUFBZ0I7QUFDZCxnQkFBTSxDQUFDLENBQUQsQ0FBTixHQUFZO0FBQ1YsbUJBQU8sRUFBRTtBQUNQLG1CQUFLLEVBQUUsRUFEQTtBQUVQLHFCQUFPLEVBQUUsQ0FGRjtBQUdQLHFCQUFPLEVBQUUsUUFIRjtBQUlQLHNCQUFRLEVBQUU7QUFKSDtBQURDLFdBQVo7QUFRRDs7QUFDRCxjQUFNLEdBQUcsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLE9BQVYsQ0FBa0IsS0FBM0I7QUFDRDs7QUFDRCxZQUFNLENBQUMsT0FBRCxDQUFOLEdBQWtCLFFBQVEsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxHQUFELENBQWQsQ0FBMUI7QUFDRCxLQWpCRCxNQWlCTztBQUNMLFlBQU0sQ0FBQyxHQUFELENBQU4sR0FBYyxRQUFRLENBQUMsTUFBTSxPQUFPLENBQUMsR0FBRCxDQUFkLENBQXRCO0FBQ0Q7QUFDRixHQXRCRDtBQXVCQSxTQUFPLE1BQVA7QUFDRDs7QUFFRCxTQUFTLGNBQVQsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsRUFBd0M7QUFDdEMsUUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUwsQ0FBVyxHQUFYLEVBQWdCLE1BQWhCLENBQXdCLENBQUQsSUFBTyxDQUE5QixDQUFkO0FBQ0EsU0FBTyxLQUFLLENBQUMsTUFBTixDQUNMLENBQUMsTUFBRCxFQUFTLFVBQVQsRUFBcUIsQ0FBckIsS0FBMEI7QUFDeEIsVUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQUQsQ0FBcEI7O0FBQ0EsUUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLFlBQU0sSUFBSSxLQUFKLENBQVUsbUJBQW1CLFVBQVUsZUFBZSxJQUFJLElBQTFELENBQU47QUFDRDs7QUFDRCxXQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTixHQUFlLENBQXJCLEdBQXlCLEtBQXpCLEdBQWlDLEtBQUssQ0FBQyxTQUE5QztBQUNELEdBUEksRUFRTCxJQUFJLEtBQUssTUFBVCxHQUFrQixTQUFsQixHQUE4QixTQUFTLENBQUMsSUFBVixDQUFlLFNBUnhDLENBQVA7QUFVRDs7QUFFRCxTQUFTLFFBQVQsQ0FBbUIsRUFBbkIsRUFBZ0M7QUFDOUIsTUFBSTtBQUNGLFdBQU8sRUFBRSxFQUFUO0FBQ0QsR0FGRCxDQUVFLE9BQU8sQ0FBUCxFQUFVO0FBQ1YsV0FBTyxDQUFQO0FBQ0Q7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BsdWdpbi50cz8wY2NhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHZvaWQgMDtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBjbG9uZV9kZWVwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsb25lLWRlZXBcIikpO1xubGV0IGFjdGlvbklkID0gMDtcbmZ1bmN0aW9uIHNldHVwUGx1Z2luKGFwaSwgYXBwLCBWdWUpIHtcbiAgICBjb25zdCBST1VURVJfSU5TUEVDVE9SX0lEID0gJ3Z1ZTItcm91dGVyLWluc3BlY3Rvcic7XG4gICAgY29uc3QgUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQgPSAndnVlMi1yb3V0ZXItY2hhbmdlcyc7XG4gICAgY29uc3QgVlVFWF9JTlNQRUNUT1JfSUQgPSAndnVlMi12dWV4LWluc3BlY3Rvcic7XG4gICAgY29uc3QgVlVFWF9NVVRBVElPTlNfSUQgPSAndnVlMi12dWV4LW11dGF0aW9ucyc7XG4gICAgY29uc3QgVlVFWF9BQ1RJT05TX0lEID0gJ3Z1ZTItdnVleC1hY3Rpb25zJztcbiAgICAoMCwgZGV2dG9vbHNfYXBpXzEuc2V0dXBEZXZ0b29sc1BsdWdpbikoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGlkOiAnb3JnLnZ1ZWpzLnZ1ZTItaW50ZXJuYWwnLFxuICAgICAgICBsYWJlbDogJ1Z1ZSAyJyxcbiAgICAgICAgaG9tZXBhZ2U6ICdodHRwczovL3Z1ZWpzLm9yZy8nLFxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly92dWVqcy5vcmcvaW1hZ2VzL2ljb25zL2Zhdmljb24tOTZ4OTYucG5nJyxcbiAgICB9LCBhcGkgPT4ge1xuICAgICAgICBjb25zdCBob29rID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gICAgICAgIC8vIFZ1ZSBSb3V0ZXJcbiAgICAgICAgaWYgKGFwcC4kcm91dGVyKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBhcHAuJHJvdXRlcjtcbiAgICAgICAgICAgIC8vIEluc3BlY3RvclxuICAgICAgICAgICAgYXBpLmFkZEluc3BlY3Rvcih7XG4gICAgICAgICAgICAgICAgaWQ6IFJPVVRFUl9JTlNQRUNUT1JfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXMnLFxuICAgICAgICAgICAgICAgIGljb246ICdib29rJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdTZWFyY2ggcm91dGVzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5yb290Tm9kZXMgPSByb3V0ZXIub3B0aW9ucy5yb3V0ZXMubWFwKHJvdXRlID0+IGZvcm1hdFJvdXRlTm9kZShyb3V0ZXIsIHJvdXRlLCAnJywgcGF5bG9hZC5maWx0ZXIpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSByb3V0ZXIubWF0Y2hlci5nZXRSb3V0ZXMoKS5maW5kKHIgPT4gZ2V0UGF0aElkKHIpID09PSBwYXlsb2FkLm5vZGVJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmb3JtYXRSb3V0ZURhdGEocm91dGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGltZWxpbmVcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXIgTmF2aWdhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAweDQwYThjNCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm91dGVyLmFmdGVyRWFjaCgodG8sIGZyb20pID0+IHtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0by5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShST1VURVJfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZ1ZXhcbiAgICAgICAgaWYgKGFwcC4kc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gYXBwLiRzdG9yZTtcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFZVRVhfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSBwYXlsb2FkLm5vZGVJZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gZ2V0U3RvcmVNb2R1bGUoc3RvcmUuX21vZHVsZXMsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgdGhlIGdldHRlcnMgcHJvcCB0byBpbml0IGdldHRlcnMgY2FjaGUgKHdoaWNoIGlzIGxhenkpXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRleHQuZ2V0dGVycztcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBzdG9yZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9NVVRBVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdWdWV4IE11dGF0aW9ucycsXG4gICAgICAgICAgICAgICAgY29sb3I6IExJTUVfNTAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVMYXllcih7XG4gICAgICAgICAgICAgICAgaWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXggQWN0aW9ucycsXG4gICAgICAgICAgICAgICAgY29sb3I6IExJTUVfNTAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBob29rLm9uKCd2dWV4Om11dGF0aW9uJywgKG11dGF0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoVlVFWF9JTlNQRUNUT1JfSUQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24ucGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBtdXRhdGlvbi5wYXlsb2FkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhLnN0YXRlID0gKDAsIGNsb25lX2RlZXBfMS5kZWZhdWx0KShzdGF0ZSk7XG4gICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX01VVEFUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbXV0YXRpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0b3JlLnN1YnNjcmliZUFjdGlvbih7XG4gICAgICAgICAgICAgICAgYmVmb3JlOiAoYWN0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLl9pZCA9IGFjdGlvbklkKys7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5fdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBhY3Rpb24uX3RpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFjdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWZ0ZXI6IChhY3Rpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gYWN0aW9uLl90aW1lO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkdXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYCR7ZHVyYXRpb259bXNgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFjdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6ICdlbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgeyBwcmVwZW5kOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSW5zcGVjdCBnZXR0ZXJzIG9uIG11dGF0aW9uc1xuICAgICAgICAgICAgYXBpLm9uLmluc3BlY3RUaW1lbGluZUV2ZW50KHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmxheWVySWQgPT09IFZVRVhfTVVUQVRJT05TX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlcktleXMgPSBPYmplY3Qua2V5cyhzdG9yZS5nZXR0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldHRlcktleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2bSA9IG5ldyBWdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRzdGF0ZTogcGF5bG9hZC5kYXRhLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHN0b3JlLl92bS4kb3B0aW9ucy5jb21wdXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWbSA9IHN0b3JlLl92bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLl92bSA9IHZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKHN0b3JlLmdldHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5kYXRhLmdldHRlcnMgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHRyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuX3ZtID0gb3JpZ2luYWxWbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZtLiRkZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHNldHVwUGx1Z2luO1xuLyoqXG4gKiBFeHRyYWN0ZWQgZnJvbSB0YWlsd2luZCBwYWxldHRlXG4gKi9cbmNvbnN0IEJMVUVfNjAwID0gMHgyNTYzZWI7XG5jb25zdCBMSU1FXzUwMCA9IDB4ODRjYzE2O1xuY29uc3QgQ1lBTl80MDAgPSAweDIyZDNlZTtcbmNvbnN0IE9SQU5HRV80MDAgPSAweGZiOTIzYztcbmNvbnN0IFdISVRFID0gMHhmZmZmZmY7XG5jb25zdCBEQVJLID0gMHg2NjY2NjY7XG5mdW5jdGlvbiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCByb3V0ZSwgcGFyZW50UGF0aCwgZmlsdGVyKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgICBpZDogcGFyZW50UGF0aCArIHJvdXRlLnBhdGgsXG4gICAgICAgIGxhYmVsOiByb3V0ZS5wYXRoLFxuICAgICAgICBjaGlsZHJlbjogKF9hID0gcm91dGUuY2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoY2hpbGQgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgY2hpbGQsIHJvdXRlLnBhdGgsIGZpbHRlcikpLmZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgdGFnczogW10sXG4gICAgfTtcbiAgICBpZiAoZmlsdGVyICYmICFub2RlLmlkLmluY2x1ZGVzKGZpbHRlcikgJiYgISgoX2IgPSBub2RlLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubGVuZ3RoKSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKHJvdXRlLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogU3RyaW5nKHJvdXRlLm5hbWUpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDWUFOXzQwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcyAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYWxpYXMnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBPUkFOR0VfNDAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudFBhdGggPSByb3V0ZXIuY3VycmVudFJvdXRlLm1hdGNoZWQucmVkdWNlKChwLCBtKSA9PiBwICsgbS5wYXRoLCAnJyk7XG4gICAgaWYgKG5vZGUuaWQgPT09IGN1cnJlbnRQYXRoKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0aXZlJyxcbiAgICAgICAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IEJMVUVfNjAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnJlZGlyZWN0KSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVkaXJlY3Q6ICcgK1xuICAgICAgICAgICAgICAgICh0eXBlb2Ygcm91dGUucmVkaXJlY3QgPT09ICdzdHJpbmcnID8gcm91dGUucmVkaXJlY3QgOiAnT2JqZWN0JyksXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBEQVJLLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBmb3JtYXRSb3V0ZURhdGEocm91dGUpIHtcbiAgICBjb25zdCBkYXRhID0gW107XG4gICAgZGF0YS5wdXNoKHsga2V5OiAncGF0aCcsIHZhbHVlOiByb3V0ZS5wYXRoIH0pO1xuICAgIGlmIChyb3V0ZS5yZWRpcmVjdCkge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdyZWRpcmVjdCcsIHZhbHVlOiByb3V0ZS5yZWRpcmVjdCB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmFsaWFzKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ2FsaWFzJywgdmFsdWU6IHJvdXRlLmFsaWFzIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUucHJvcHMpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAncHJvcHMnLCB2YWx1ZTogcm91dGUucHJvcHMgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5uYW1lICYmIHJvdXRlLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICduYW1lJywgdmFsdWU6IHJvdXRlLm5hbWUgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5jb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0ge307XG4gICAgICAgIC8vIGlmIChyb3V0ZS5jb21wb25lbnQuX19maWxlKSB7XG4gICAgICAgIC8vICAgY29tcG9uZW50LmZpbGUgPSByb3V0ZS5jb21wb25lbnQuX19maWxlXG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKHJvdXRlLmNvbXBvbmVudC50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgY29tcG9uZW50LnRlbXBsYXRlID0gcm91dGUuY29tcG9uZW50LnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZS5jb21wb25lbnQucHJvcHMpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyA9IHJvdXRlLmNvbXBvbmVudC5wcm9wcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBzaGFyZWRfdXRpbHNfMS5pc0VtcHR5T2JqZWN0KShjb21wb25lbnQpKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdjb21wb25lbnQnLCB2YWx1ZTogY29tcG9uZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gZ2V0UGF0aElkKHJvdXRlTWF0Y2hlcikge1xuICAgIGxldCBwYXRoID0gcm91dGVNYXRjaGVyLnBhdGg7XG4gICAgaWYgKHJvdXRlTWF0Y2hlci5wYXJlbnQpIHtcbiAgICAgICAgcGF0aCA9IGdldFBhdGhJZChyb3V0ZU1hdGNoZXIucGFyZW50KSArIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufVxuY29uc3QgVEFHX05BTUVTUEFDRUQgPSB7XG4gICAgbGFiZWw6ICduYW1lc3BhY2VkJyxcbiAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgIGJhY2tncm91bmRDb2xvcjogREFSSyxcbn07XG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUobW9kdWxlLCBwYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHBhdGggfHwgJ3Jvb3QnLFxuICAgICAgICAvLyBhbGwgbW9kdWxlcyBlbmQgd2l0aCBhIGAvYCwgd2Ugd2FudCB0aGUgbGFzdCBzZWdtZW50IG9ubHlcbiAgICAgICAgLy8gY2FydC8gLT4gY2FydFxuICAgICAgICAvLyBuZXN0ZWQvY2FydC8gLT4gY2FydFxuICAgICAgICBsYWJlbDogZXh0cmFjdE5hbWVGcm9tUGF0aChwYXRoKSxcbiAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhtb2R1bGUuX2NoaWxkcmVuKS5tYXAoKG1vZHVsZU5hbWUpID0+IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShtb2R1bGUuX2NoaWxkcmVuW21vZHVsZU5hbWVdLCBwYXRoICsgbW9kdWxlTmFtZSArICcvJykpLFxuICAgIH07XG59XG5mdW5jdGlvbiBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKHJlc3VsdCwgbW9kdWxlLCBmaWx0ZXIsIHBhdGgpIHtcbiAgICBpZiAocGF0aC5pbmNsdWRlcyhmaWx0ZXIpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBwYXRoIHx8ICdyb290JyxcbiAgICAgICAgICAgIGxhYmVsOiBwYXRoLmVuZHNXaXRoKCcvJykgPyBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSkgOiBwYXRoIHx8ICdSb290JyxcbiAgICAgICAgICAgIHRhZ3M6IG1vZHVsZS5uYW1lc3BhY2VkID8gW1RBR19OQU1FU1BBQ0VEXSA6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMobW9kdWxlLl9jaGlsZHJlbikuZm9yRWFjaChtb2R1bGVOYW1lID0+IHtcbiAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShyZXN1bHQsIG1vZHVsZS5fY2hpbGRyZW5bbW9kdWxlTmFtZV0sIGZpbHRlciwgcGF0aCArIG1vZHVsZU5hbWUgKyAnLycpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZXh0cmFjdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGggJiYgcGF0aCAhPT0gJ3Jvb3QnID8gcGF0aC5zcGxpdCgnLycpLnNsaWNlKC0yLCAtMSlbMF0gOiAnUm9vdCc7XG59XG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclN0YXRlKG1vZHVsZSwgZ2V0dGVycywgcGF0aCkge1xuICAgIGdldHRlcnMgPSAhbW9kdWxlLm5hbWVzcGFjZWQgfHwgcGF0aCA9PT0gJ3Jvb3QnID8gbW9kdWxlLmNvbnRleHQuZ2V0dGVycyA6IGdldHRlcnNbcGF0aF07XG4gICAgY29uc3QgZ2V0dGVyc0tleXMgPSBPYmplY3Qua2V5cyhnZXR0ZXJzKTtcbiAgICBjb25zdCBzdG9yZVN0YXRlID0ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmtleXMobW9kdWxlLnN0YXRlKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG1vZHVsZS5zdGF0ZVtrZXldLFxuICAgICAgICB9KSksXG4gICAgfTtcbiAgICBpZiAoZ2V0dGVyc0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShnZXR0ZXJzKTtcbiAgICAgICAgc3RvcmVTdGF0ZS5nZXR0ZXJzID0gT2JqZWN0LmtleXModHJlZSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXk6IGtleS5lbmRzV2l0aCgnLycpID8gZXh0cmFjdE5hbWVGcm9tUGF0aChrZXkpIDoga2V5LFxuICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IGNhblRocm93KCgpID0+IHRyZWVba2V5XSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JlU3RhdGU7XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShnZXR0ZXJzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmtleXMoZ2V0dGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KCcvJyk7XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBsZWFmS2V5ID0gcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3BdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdNb2R1bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BdLl9jdXN0b20udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRbbGVhZktleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFN0b3JlTW9kdWxlKG1vZHVsZU1hcCwgcGF0aCkge1xuICAgIGNvbnN0IG5hbWVzID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcigobikgPT4gbik7XG4gICAgcmV0dXJuIG5hbWVzLnJlZHVjZSgobW9kdWxlLCBtb2R1bGVOYW1lLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbW9kdWxlW21vZHVsZU5hbWVdO1xuICAgICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgbW9kdWxlIFwiJHttb2R1bGVOYW1lfVwiIGZvciBwYXRoIFwiJHtwYXRofVwiLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpID09PSBuYW1lcy5sZW5ndGggLSAxID8gY2hpbGQgOiBjaGlsZC5fY2hpbGRyZW47XG4gICAgfSwgcGF0aCA9PT0gJ3Jvb3QnID8gbW9kdWxlTWFwIDogbW9kdWxlTWFwLnJvb3QuX2NoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIGNhblRocm93KGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWdpbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7725\n");
|
|
318
|
+
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setupPlugin = void 0;\n\nconst devtools_api_1 = __webpack_require__(72039);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst clone_deep_1 = __importDefault(__webpack_require__(96206));\n\nlet actionId = 0;\n\nfunction setupPlugin(api, app, Vue) {\n const ROUTER_INSPECTOR_ID = 'vue2-router-inspector';\n const ROUTER_CHANGES_LAYER_ID = 'vue2-router-changes';\n const VUEX_INSPECTOR_ID = 'vue2-vuex-inspector';\n const VUEX_MUTATIONS_ID = 'vue2-vuex-mutations';\n const VUEX_ACTIONS_ID = 'vue2-vuex-actions';\n (0, devtools_api_1.setupDevtoolsPlugin)({\n app,\n id: 'org.vuejs.vue2-internal',\n label: 'Vue 2',\n homepage: 'https://vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png'\n }, api => {\n const hook = shared_utils_1.target.__VUE_DEVTOOLS_GLOBAL_HOOK__; // Vue Router\n\n if (app.$router) {\n const router = app.$router; // Inspector\n\n api.addInspector({\n id: ROUTER_INSPECTOR_ID,\n label: 'Routes',\n icon: 'book',\n treeFilterPlaceholder: 'Search routes'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n payload.rootNodes = router.options.routes.map(route => formatRouteNode(router, route, '', payload.filter)).filter(Boolean);\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n const route = router.matcher.getRoutes().find(r => getPathId(r) === payload.nodeId);\n\n if (route) {\n payload.state = {\n options: formatRouteData(route)\n };\n }\n }\n }); // Timeline\n\n api.addTimelineLayer({\n id: ROUTER_CHANGES_LAYER_ID,\n label: 'Router Navigations',\n color: 0x40a8c4\n });\n router.afterEach((to, from) => {\n api.addTimelineEvent({\n layerId: ROUTER_CHANGES_LAYER_ID,\n event: {\n time: Date.now(),\n title: to.path,\n data: {\n from,\n to\n }\n }\n });\n api.sendInspectorTree(ROUTER_INSPECTOR_ID);\n });\n } // Vuex\n\n\n if (app.$store) {\n const store = app.$store;\n api.addInspector({\n id: VUEX_INSPECTOR_ID,\n label: 'Vuex',\n icon: 'storage',\n treeFilterPlaceholder: 'Filter stores...'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n if (payload.filter) {\n const nodes = [];\n flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');\n payload.rootNodes = nodes;\n } else {\n payload.rootNodes = [formatStoreForInspectorTree(store._modules.root, '')];\n }\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n const modulePath = payload.nodeId;\n const module = getStoreModule(store._modules, modulePath); // Access the getters prop to init getters cache (which is lazy)\n // eslint-disable-next-line no-unused-expressions\n\n module.context.getters;\n payload.state = formatStoreForInspectorState(module, store._makeLocalGettersCache, modulePath);\n }\n });\n api.on.editInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n let path = payload.path;\n\n if (payload.nodeId !== 'root') {\n path = [...payload.nodeId.substring(0, payload.nodeId.length - 1).split('/'), ...path];\n }\n\n store._committing = true;\n payload.set(store._vm.$data.$$state, path);\n store._committing = false;\n }\n });\n api.addTimelineLayer({\n id: VUEX_MUTATIONS_ID,\n label: 'Vuex Mutations',\n color: LIME_500\n });\n api.addTimelineLayer({\n id: VUEX_ACTIONS_ID,\n label: 'Vuex Actions',\n color: LIME_500\n });\n hook.on('vuex:mutation', (mutation, state) => {\n api.sendInspectorState(VUEX_INSPECTOR_ID);\n const data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = (0, clone_deep_1.default)(state);\n api.addTimelineEvent({\n layerId: VUEX_MUTATIONS_ID,\n event: {\n time: Date.now(),\n title: mutation.type,\n data\n }\n });\n });\n store.subscribeAction({\n before: (action, state) => {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n action._id = actionId++;\n action._time = Date.now();\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data\n }\n });\n },\n after: (action, state) => {\n const data = {};\n\n const duration = Date.now() - action._time;\n\n data.duration = {\n _custom: {\n type: 'duration',\n display: `${duration}ms`,\n tooltip: 'Action duration',\n value: duration\n }\n };\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: Date.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data\n }\n });\n }\n }, {\n prepend: true\n }); // Inspect getters on mutations\n\n api.on.inspectTimelineEvent(payload => {\n if (payload.layerId === VUEX_MUTATIONS_ID) {\n const getterKeys = Object.keys(store.getters);\n\n if (getterKeys.length) {\n const vm = new Vue({\n data: {\n $$state: payload.data.state\n },\n computed: store._vm.$options.computed\n });\n const originalVm = store._vm;\n store._vm = vm;\n const tree = transformPathsToObjectTree(store.getters);\n payload.data.getters = (0, clone_deep_1.default)(tree);\n store._vm = originalVm;\n vm.$destroy();\n }\n }\n });\n }\n });\n}\n\nexports.setupPlugin = setupPlugin;\n/**\n * Extracted from tailwind palette\n */\n\nconst BLUE_600 = 0x2563eb;\nconst LIME_500 = 0x84cc16;\nconst CYAN_400 = 0x22d3ee;\nconst ORANGE_400 = 0xfb923c;\nconst WHITE = 0xffffff;\nconst DARK = 0x666666;\n\nfunction formatRouteNode(router, route, parentPath, filter) {\n var _a, _b;\n\n const node = {\n id: parentPath + route.path,\n label: route.path,\n children: (_a = route.children) === null || _a === void 0 ? void 0 : _a.map(child => formatRouteNode(router, child, route.path, filter)).filter(Boolean),\n tags: []\n };\n if (filter && !node.id.includes(filter) && !((_b = node.children) === null || _b === void 0 ? void 0 : _b.length)) return null;\n\n if (route.name != null) {\n node.tags.push({\n label: String(route.name),\n textColor: 0,\n backgroundColor: CYAN_400\n });\n }\n\n if (route.alias != null) {\n node.tags.push({\n label: 'alias',\n textColor: 0,\n backgroundColor: ORANGE_400\n });\n }\n\n const currentPath = router.currentRoute.matched.reduce((p, m) => p + m.path, '');\n\n if (node.id === currentPath) {\n node.tags.push({\n label: 'active',\n textColor: WHITE,\n backgroundColor: BLUE_600\n });\n }\n\n if (route.redirect) {\n node.tags.push({\n label: 'redirect: ' + (typeof route.redirect === 'string' ? route.redirect : 'Object'),\n textColor: WHITE,\n backgroundColor: DARK\n });\n }\n\n return node;\n}\n\nfunction formatRouteData(route) {\n const data = [];\n data.push({\n key: 'path',\n value: route.path\n });\n\n if (route.redirect) {\n data.push({\n key: 'redirect',\n value: route.redirect\n });\n }\n\n if (route.alias) {\n data.push({\n key: 'alias',\n value: route.alias\n });\n }\n\n if (route.props) {\n data.push({\n key: 'props',\n value: route.props\n });\n }\n\n if (route.name && route.name != null) {\n data.push({\n key: 'name',\n value: route.name\n });\n }\n\n if (route.component) {\n const component = {}; // if (route.component.__file) {\n // component.file = route.component.__file\n // }\n\n if (route.component.template) {\n component.template = route.component.template;\n }\n\n if (route.component.props) {\n component.props = route.component.props;\n }\n\n if (!(0, shared_utils_1.isEmptyObject)(component)) {\n data.push({\n key: 'component',\n value: component\n });\n }\n }\n\n return data;\n}\n\nfunction getPathId(routeMatcher) {\n let path = routeMatcher.path;\n\n if (routeMatcher.parent) {\n path = getPathId(routeMatcher.parent) + path;\n }\n\n return path;\n}\n\nconst TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: WHITE,\n backgroundColor: DARK\n};\n\nfunction formatStoreForInspectorTree(module, path) {\n return {\n id: path || 'root',\n // all modules end with a `/`, we want the last segment only\n // cart/ -> cart\n // nested/cart/ -> cart\n label: extractNameFromPath(path),\n tags: module.namespaced ? [TAG_NAMESPACED] : [],\n children: Object.keys(module._children).map(moduleName => formatStoreForInspectorTree(module._children[moduleName], path + moduleName + '/'))\n };\n}\n\nfunction flattenStoreForInspectorTree(result, module, filter, path) {\n if (path.includes(filter)) {\n result.push({\n id: path || 'root',\n label: path.endsWith('/') ? path.slice(0, path.length - 1) : path || 'Root',\n tags: module.namespaced ? [TAG_NAMESPACED] : []\n });\n }\n\n Object.keys(module._children).forEach(moduleName => {\n flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + '/');\n });\n}\n\nfunction extractNameFromPath(path) {\n return path && path !== 'root' ? path.split('/').slice(-2, -1)[0] : 'Root';\n}\n\nfunction formatStoreForInspectorState(module, getters, path) {\n getters = !module.namespaced || path === 'root' ? module.context.getters : getters[path];\n const gettersKeys = Object.keys(getters);\n const storeState = {\n state: Object.keys(module.state).map(key => ({\n key,\n editable: true,\n value: module.state[key]\n }))\n };\n\n if (gettersKeys.length) {\n const tree = transformPathsToObjectTree(getters);\n storeState.getters = Object.keys(tree).map(key => ({\n key: key.endsWith('/') ? extractNameFromPath(key) : key,\n editable: false,\n value: canThrow(() => tree[key])\n }));\n }\n\n return storeState;\n}\n\nfunction transformPathsToObjectTree(getters) {\n const result = {};\n Object.keys(getters).forEach(key => {\n const path = key.split('/');\n\n if (path.length > 1) {\n let target = result;\n const leafKey = path.pop();\n\n for (const p of path) {\n if (!target[p]) {\n target[p] = {\n _custom: {\n value: {},\n display: p,\n tooltip: 'Module',\n abstract: true\n }\n };\n }\n\n target = target[p]._custom.value;\n }\n\n target[leafKey] = canThrow(() => getters[key]);\n } else {\n result[key] = canThrow(() => getters[key]);\n }\n });\n return result;\n}\n\nfunction getStoreModule(moduleMap, path) {\n const names = path.split('/').filter(n => n);\n return names.reduce((module, moduleName, i) => {\n const child = module[moduleName];\n\n if (!child) {\n throw new Error(`Missing module \"${moduleName}\" for path \"${path}\".`);\n }\n\n return i === names.length - 1 ? child : child._children;\n }, path === 'root' ? moduleMap : moduleMap.root._children);\n}\n\nfunction canThrow(cb) {\n try {\n return cb();\n } catch (e) {\n return e;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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UCxFQUFVO0FBQ1YsV0FBTyxDQUFQO0FBQ0Q7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BsdWdpbi50cz8wY2NhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHZvaWQgMDtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBjbG9uZV9kZWVwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsb25lLWRlZXBcIikpO1xubGV0IGFjdGlvbklkID0gMDtcbmZ1bmN0aW9uIHNldHVwUGx1Z2luKGFwaSwgYXBwLCBWdWUpIHtcbiAgICBjb25zdCBST1VURVJfSU5TUEVDVE9SX0lEID0gJ3Z1ZTItcm91dGVyLWluc3BlY3Rvcic7XG4gICAgY29uc3QgUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQgPSAndnVlMi1yb3V0ZXItY2hhbmdlcyc7XG4gICAgY29uc3QgVlVFWF9JTlNQRUNUT1JfSUQgPSAndnVlMi12dWV4LWluc3BlY3Rvcic7XG4gICAgY29uc3QgVlVFWF9NVVRBVElPTlNfSUQgPSAndnVlMi12dWV4LW11dGF0aW9ucyc7XG4gICAgY29uc3QgVlVFWF9BQ1RJT05TX0lEID0gJ3Z1ZTItdnVleC1hY3Rpb25zJztcbiAgICAoMCwgZGV2dG9vbHNfYXBpXzEuc2V0dXBEZXZ0b29sc1BsdWdpbikoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGlkOiAnb3JnLnZ1ZWpzLnZ1ZTItaW50ZXJuYWwnLFxuICAgICAgICBsYWJlbDogJ1Z1ZSAyJyxcbiAgICAgICAgaG9tZXBhZ2U6ICdodHRwczovL3Z1ZWpzLm9yZy8nLFxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly92dWVqcy5vcmcvaW1hZ2VzL2ljb25zL2Zhdmljb24tOTZ4OTYucG5nJyxcbiAgICB9LCBhcGkgPT4ge1xuICAgICAgICBjb25zdCBob29rID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gICAgICAgIC8vIFZ1ZSBSb3V0ZXJcbiAgICAgICAgaWYgKGFwcC4kcm91dGVyKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBhcHAuJHJvdXRlcjtcbiAgICAgICAgICAgIC8vIEluc3BlY3RvclxuICAgICAgICAgICAgYXBpLmFkZEluc3BlY3Rvcih7XG4gICAgICAgICAgICAgICAgaWQ6IFJPVVRFUl9JTlNQRUNUT1JfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXMnLFxuICAgICAgICAgICAgICAgIGljb246ICdib29rJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdTZWFyY2ggcm91dGVzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5yb290Tm9kZXMgPSByb3V0ZXIub3B0aW9ucy5yb3V0ZXMubWFwKHJvdXRlID0+IGZvcm1hdFJvdXRlTm9kZShyb3V0ZXIsIHJvdXRlLCAnJywgcGF5bG9hZC5maWx0ZXIpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSByb3V0ZXIubWF0Y2hlci5nZXRSb3V0ZXMoKS5maW5kKHIgPT4gZ2V0UGF0aElkKHIpID09PSBwYXlsb2FkLm5vZGVJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmb3JtYXRSb3V0ZURhdGEocm91dGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGltZWxpbmVcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXIgTmF2aWdhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAweDQwYThjNCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm91dGVyLmFmdGVyRWFjaCgodG8sIGZyb20pID0+IHtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0by5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShST1VURVJfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZ1ZXhcbiAgICAgICAgaWYgKGFwcC4kc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gYXBwLiRzdG9yZTtcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFZVRVhfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSBwYXlsb2FkLm5vZGVJZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gZ2V0U3RvcmVNb2R1bGUoc3RvcmUuX21vZHVsZXMsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgdGhlIGdldHRlcnMgcHJvcCB0byBpbml0IGdldHRlcnMgY2FjaGUgKHdoaWNoIGlzIGxhenkpXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRleHQuZ2V0dGVycztcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBzdG9yZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5vbi5lZGl0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBwYXlsb2FkLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLm5vZGVJZCAhPT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBheWxvYWQubm9kZUlkLnN1YnN0cmluZygwLCBwYXlsb2FkLm5vZGVJZC5sZW5ndGggLSAxKS5zcGxpdCgnLycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLl9jb21taXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zZXQoc3RvcmUuX3ZtLiRkYXRhLiQkc3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5fY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX01VVEFUSU9OU19JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXggTXV0YXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVnVleCBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhvb2sub24oJ3Z1ZXg6bXV0YXRpb24nLCAobXV0YXRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShWVUVYX0lOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IG11dGF0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfTVVUQVRJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtdXRhdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RvcmUuc3Vic2NyaWJlQWN0aW9uKHtcbiAgICAgICAgICAgICAgICBiZWZvcmU6IChhY3Rpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uX2lkID0gYWN0aW9uSWQrKztcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLl90aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFjdGlvbi5fdGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogYWN0aW9uLl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhZnRlcjogKGFjdGlvbiwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBhY3Rpb24uX3RpbWU7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2R1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBgJHtkdXJhdGlvbn1tc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ0FjdGlvbiBkdXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogYWN0aW9uLl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCB7IHByZXBlbmQ6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBJbnNwZWN0IGdldHRlcnMgb24gbXV0YXRpb25zXG4gICAgICAgICAgICBhcGkub24uaW5zcGVjdFRpbWVsaW5lRXZlbnQocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubGF5ZXJJZCA9PT0gVlVFWF9NVVRBVElPTlNfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0dGVyS2V5cyA9IE9iamVjdC5rZXlzKHN0b3JlLmdldHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtID0gbmV3IFZ1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJHN0YXRlOiBwYXlsb2FkLmRhdGEuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZDogc3RvcmUuX3ZtLiRvcHRpb25zLmNvbXB1dGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZtID0gc3RvcmUuX3ZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuX3ZtID0gdm07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmVlID0gdHJhbnNmb3JtUGF0aHNUb09iamVjdFRyZWUoc3RvcmUuZ2V0dGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmRhdGEuZ2V0dGVycyA9ICgwLCBjbG9uZV9kZWVwXzEuZGVmYXVsdCkodHJlZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5fdm0gPSBvcmlnaW5hbFZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdm0uJGRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLnNldHVwUGx1Z2luID0gc2V0dXBQbHVnaW47XG4vKipcbiAqIEV4dHJhY3RlZCBmcm9tIHRhaWx3aW5kIHBhbGV0dGVcbiAqL1xuY29uc3QgQkxVRV82MDAgPSAweDI1NjNlYjtcbmNvbnN0IExJTUVfNTAwID0gMHg4NGNjMTY7XG5jb25zdCBDWUFOXzQwMCA9IDB4MjJkM2VlO1xuY29uc3QgT1JBTkdFXzQwMCA9IDB4ZmI5MjNjO1xuY29uc3QgV0hJVEUgPSAweGZmZmZmZjtcbmNvbnN0IERBUksgPSAweDY2NjY2NjtcbmZ1bmN0aW9uIGZvcm1hdFJvdXRlTm9kZShyb3V0ZXIsIHJvdXRlLCBwYXJlbnRQYXRoLCBmaWx0ZXIpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgIGlkOiBwYXJlbnRQYXRoICsgcm91dGUucGF0aCxcbiAgICAgICAgbGFiZWw6IHJvdXRlLnBhdGgsXG4gICAgICAgIGNoaWxkcmVuOiAoX2EgPSByb3V0ZS5jaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcChjaGlsZCA9PiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCBjaGlsZCwgcm91dGUucGF0aCwgZmlsdGVyKSkuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICB9O1xuICAgIGlmIChmaWx0ZXIgJiYgIW5vZGUuaWQuaW5jbHVkZXMoZmlsdGVyKSAmJiAhKChfYiA9IG5vZGUuY2hpbGRyZW4pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAocm91dGUubmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBTdHJpbmcocm91dGUubmFtZSksXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IENZQU5fNDAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmFsaWFzICE9IG51bGwpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdhbGlhcycsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IE9SQU5HRV80MDAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHJvdXRlci5jdXJyZW50Um91dGUubWF0Y2hlZC5yZWR1Y2UoKHAsIG0pID0+IHAgKyBtLnBhdGgsICcnKTtcbiAgICBpZiAobm9kZS5pZCA9PT0gY3VycmVudFBhdGgpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdhY3RpdmUnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQkxVRV82MDAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUucmVkaXJlY3QpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdyZWRpcmVjdDogJyArXG4gICAgICAgICAgICAgICAgKHR5cGVvZiByb3V0ZS5yZWRpcmVjdCA9PT0gJ3N0cmluZycgPyByb3V0ZS5yZWRpcmVjdCA6ICdPYmplY3QnKSxcbiAgICAgICAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IERBUkssXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFJvdXRlRGF0YShyb3V0ZSkge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICBkYXRhLnB1c2goeyBrZXk6ICdwYXRoJywgdmFsdWU6IHJvdXRlLnBhdGggfSk7XG4gICAgaWYgKHJvdXRlLnJlZGlyZWN0KSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ3JlZGlyZWN0JywgdmFsdWU6IHJvdXRlLnJlZGlyZWN0IH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUuYWxpYXMpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnYWxpYXMnLCB2YWx1ZTogcm91dGUuYWxpYXMgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5wcm9wcykge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdwcm9wcycsIHZhbHVlOiByb3V0ZS5wcm9wcyB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLm5hbWUgJiYgcm91dGUubmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ25hbWUnLCB2YWx1ZTogcm91dGUubmFtZSB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB7fTtcbiAgICAgICAgLy8gaWYgKHJvdXRlLmNvbXBvbmVudC5fX2ZpbGUpIHtcbiAgICAgICAgLy8gICBjb21wb25lbnQuZmlsZSA9IHJvdXRlLmNvbXBvbmVudC5fX2ZpbGVcbiAgICAgICAgLy8gfVxuICAgICAgICBpZiAocm91dGUuY29tcG9uZW50LnRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb21wb25lbnQudGVtcGxhdGUgPSByb3V0ZS5jb21wb25lbnQudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLmNvbXBvbmVudC5wcm9wcykge1xuICAgICAgICAgICAgY29tcG9uZW50LnByb3BzID0gcm91dGUuY29tcG9uZW50LnByb3BzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIHNoYXJlZF91dGlsc18xLmlzRW1wdHlPYmplY3QpKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7IGtleTogJ2NvbXBvbmVudCcsIHZhbHVlOiBjb21wb25lbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBnZXRQYXRoSWQocm91dGVNYXRjaGVyKSB7XG4gICAgbGV0IHBhdGggPSByb3V0ZU1hdGNoZXIucGF0aDtcbiAgICBpZiAocm91dGVNYXRjaGVyLnBhcmVudCkge1xuICAgICAgICBwYXRoID0gZ2V0UGF0aElkKHJvdXRlTWF0Y2hlci5wYXJlbnQpICsgcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG59XG5jb25zdCBUQUdfTkFNRVNQQUNFRCA9IHtcbiAgICBsYWJlbDogJ25hbWVzcGFjZWQnLFxuICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgYmFja2dyb3VuZENvbG9yOiBEQVJLLFxufTtcbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShtb2R1bGUsIHBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGF0aCB8fCAncm9vdCcsXG4gICAgICAgIC8vIGFsbCBtb2R1bGVzIGVuZCB3aXRoIGEgYC9gLCB3ZSB3YW50IHRoZSBsYXN0IHNlZ21lbnQgb25seVxuICAgICAgICAvLyBjYXJ0LyAtPiBjYXJ0XG4gICAgICAgIC8vIG5lc3RlZC9jYXJ0LyAtPiBjYXJ0XG4gICAgICAgIGxhYmVsOiBleHRyYWN0TmFtZUZyb21QYXRoKHBhdGgpLFxuICAgICAgICB0YWdzOiBtb2R1bGUubmFtZXNwYWNlZCA/IFtUQUdfTkFNRVNQQUNFRF0gOiBbXSxcbiAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKG1vZHVsZS5fY2hpbGRyZW4pLm1hcCgobW9kdWxlTmFtZSkgPT4gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JUcmVlKG1vZHVsZS5fY2hpbGRyZW5bbW9kdWxlTmFtZV0sIHBhdGggKyBtb2R1bGVOYW1lICsgJy8nKSksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5TdG9yZUZvckluc3BlY3RvclRyZWUocmVzdWx0LCBtb2R1bGUsIGZpbHRlciwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKGZpbHRlcikpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgaWQ6IHBhdGggfHwgJ3Jvb3QnLFxuICAgICAgICAgICAgbGFiZWw6IHBhdGguZW5kc1dpdGgoJy8nKSA/IHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSA6IHBhdGggfHwgJ1Jvb3QnLFxuICAgICAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhtb2R1bGUuX2NoaWxkcmVuKS5mb3JFYWNoKG1vZHVsZU5hbWUgPT4ge1xuICAgICAgICBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKHJlc3VsdCwgbW9kdWxlLl9jaGlsZHJlblttb2R1bGVOYW1lXSwgZmlsdGVyLCBwYXRoICsgbW9kdWxlTmFtZSArICcvJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleHRyYWN0TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aCAmJiBwYXRoICE9PSAncm9vdCcgPyBwYXRoLnNwbGl0KCcvJykuc2xpY2UoLTIsIC0xKVswXSA6ICdSb290Jztcbn1cbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBnZXR0ZXJzLCBwYXRoKSB7XG4gICAgZ2V0dGVycyA9ICFtb2R1bGUubmFtZXNwYWNlZCB8fCBwYXRoID09PSAncm9vdCcgPyBtb2R1bGUuY29udGV4dC5nZXR0ZXJzIDogZ2V0dGVyc1twYXRoXTtcbiAgICBjb25zdCBnZXR0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKGdldHRlcnMpO1xuICAgIGNvbnN0IHN0b3JlU3RhdGUgPSB7XG4gICAgICAgIHN0YXRlOiBPYmplY3Qua2V5cyhtb2R1bGUuc3RhdGUpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbW9kdWxlLnN0YXRlW2tleV0sXG4gICAgICAgIH0pKSxcbiAgICB9O1xuICAgIGlmIChnZXR0ZXJzS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdHJlZSA9IHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKGdldHRlcnMpO1xuICAgICAgICBzdG9yZVN0YXRlLmdldHRlcnMgPSBPYmplY3Qua2V5cyh0cmVlKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleToga2V5LmVuZHNXaXRoKCcvJykgPyBleHRyYWN0TmFtZUZyb21QYXRoKGtleSkgOiBrZXksXG4gICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogY2FuVGhyb3coKCkgPT4gdHJlZVtrZXldKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmVTdGF0ZTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKGdldHRlcnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhnZXR0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBrZXkuc3BsaXQoJy8nKTtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IHJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IGxlYWZLZXkgPSBwYXRoLnBvcCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldFtwXSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ01vZHVsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbcF0uX2N1c3RvbS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldFtsZWFmS2V5XSA9IGNhblRocm93KCgpID0+IGdldHRlcnNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IGNhblRocm93KCgpID0+IGdldHRlcnNba2V5XSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0U3RvcmVNb2R1bGUobW9kdWxlTWFwLCBwYXRoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKChuKSA9PiBuKTtcbiAgICByZXR1cm4gbmFtZXMucmVkdWNlKChtb2R1bGUsIG1vZHVsZU5hbWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtb2R1bGVbbW9kdWxlTmFtZV07XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtb2R1bGUgXCIke21vZHVsZU5hbWV9XCIgZm9yIHBhdGggXCIke3BhdGh9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkgPT09IG5hbWVzLmxlbmd0aCAtIDEgPyBjaGlsZCA6IGNoaWxkLl9jaGlsZHJlbjtcbiAgICB9LCBwYXRoID09PSAncm9vdCcgPyBtb2R1bGVNYXAgOiBtb2R1bGVNYXAucm9vdC5fY2hpbGRyZW4pO1xufVxuZnVuY3Rpb24gY2FuVGhyb3coY2IpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2IoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx1Z2luLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7725\n");
|
|
319
319
|
|
|
320
320
|
/***/ }),
|
|
321
321
|
|
|
@@ -479,7 +479,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
479
479
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
480
480
|
|
|
481
481
|
"use strict";
|
|
482
|
-
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.isEmptyObject = exports.copyToClipboard = exports.escape = exports.openInEditor = exports.focusInput = exports.simpleGet = exports.sortByKey = exports.searchDeepInObject = exports.isPlainObject = exports.revive = exports.parse = exports.getCustomRefDetails = exports.getCustomHTMLElementDetails = exports.getCustomFunctionDetails = exports.getCustomComponentDefinitionDetails = exports.getComponentName = exports.reviveSet = exports.getCustomSetDetails = exports.reviveMap = exports.getCustomMapDetails = exports.stringify = exports.specialTokenToString = exports.MAX_ARRAY_SIZE = exports.MAX_STRING_SIZE = exports.SPECIAL_TOKENS = exports.NAN = exports.NEGATIVE_INFINITY = exports.INFINITY = exports.UNDEFINED = exports.inDoc = exports.getComponentDisplayName = exports.kebabize = exports.camelize = exports.classify = void 0;\n\nconst path_1 = __importDefault(__webpack_require__(21023));\n\nconst transfer_1 = __webpack_require__(34723);\n\nconst backend_1 = __webpack_require__(79310);\n\nconst shared_data_1 = __webpack_require__(29556);\n\nconst env_1 = __webpack_require__(66210);\n\nfunction cached(fn) {\n const cache = Object.create(null);\n return function cachedFn(str) {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n\nconst classifyRE = /(?:^|[-_/])(\\w)/g;\nexports.classify = cached(str => {\n // fix: str.replace may causes '\"replace\" is not a function' exception.\n // This bug may causes the UI 'Component Filter' to not work properly\n // e.g. The type of 'str' is Number.\n // So need cover 'str' to String.\n return str && ('' + str).replace(classifyRE, toUpper);\n});\nconst camelizeRE = /-(\\w)/g;\nexports.camelize = cached(str => {\n return str && str.replace(camelizeRE, toUpper);\n});\nconst kebabizeRE = /([a-z0-9])([A-Z])/g;\nexports.kebabize = cached(str => {\n return str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n return `${lowerCaseCharacter}-${upperCaseLetter}`;\n }).toLowerCase();\n});\n\nfunction toUpper(_, c) {\n return c ? c.toUpperCase() : '';\n}\n\nfunction getComponentDisplayName(originalName, style = 'class') {\n switch (style) {\n case 'class':\n return (0, exports.classify)(originalName);\n\n case 'kebab':\n return (0, exports.kebabize)(originalName);\n\n case 'original':\n default:\n return originalName;\n }\n}\n\nexports.getComponentDisplayName = getComponentDisplayName;\n\nfunction inDoc(node) {\n if (!node) return false;\n const doc = node.ownerDocument.documentElement;\n const parent = node.parentNode;\n return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n}\n\nexports.inDoc = inDoc;\n/**\n * Stringify/parse data using CircularJSON.\n */\n\nexports.UNDEFINED = '__vue_devtool_undefined__';\nexports.INFINITY = '__vue_devtool_infinity__';\nexports.NEGATIVE_INFINITY = '__vue_devtool_negative_infinity__';\nexports.NAN = '__vue_devtool_nan__';\nexports.SPECIAL_TOKENS = {\n true: true,\n false: false,\n undefined: exports.UNDEFINED,\n null: null,\n '-Infinity': exports.NEGATIVE_INFINITY,\n Infinity: exports.INFINITY,\n NaN: exports.NAN\n};\nexports.MAX_STRING_SIZE = 10000;\nexports.MAX_ARRAY_SIZE = 5000;\n\nfunction specialTokenToString(value) {\n if (value === null) {\n return 'null';\n } else if (value === exports.UNDEFINED) {\n return 'undefined';\n } else if (value === exports.NAN) {\n return 'NaN';\n } else if (value === exports.INFINITY) {\n return 'Infinity';\n } else if (value === exports.NEGATIVE_INFINITY) {\n return '-Infinity';\n }\n\n return false;\n}\n\nexports.specialTokenToString = specialTokenToString;\n/**\n * Needed to prevent stack overflow\n * while replacing complex objects\n * like components because we create\n * new objects with the CustomValue API\n * (.i.e `{ _custom: { ... } }`)\n */\n\nclass EncodeCache {\n constructor() {\n this.map = new Map();\n }\n /**\n * Returns a result unique to each input data\n * @param {*} data Input data\n * @param {*} factory Function used to create the unique result\n */\n\n\n cache(data, factory) {\n const cached = this.map.get(data);\n\n if (cached) {\n return cached;\n } else {\n const result = factory(data);\n this.map.set(data, result);\n return result;\n }\n }\n\n clear() {\n this.map.clear();\n }\n\n}\n\nconst encodeCache = new EncodeCache();\n\nclass ReviveCache {\n constructor(maxSize) {\n this.maxSize = maxSize;\n this.map = new Map();\n this.index = 0;\n this.size = 0;\n }\n\n cache(value) {\n const currentIndex = this.index;\n this.map.set(currentIndex, value);\n this.size++;\n\n if (this.size > this.maxSize) {\n this.map.delete(currentIndex - this.size);\n this.size--;\n }\n\n this.index++;\n return currentIndex;\n }\n\n read(id) {\n return this.map.get(id);\n }\n\n}\n\nconst reviveCache = new ReviveCache(1000);\n\nfunction stringify(data) {\n // Create a fresh cache for each serialization\n encodeCache.clear();\n return (0, transfer_1.stringifyCircularAutoChunks)(data, replacer);\n}\n\nexports.stringify = stringify;\n\nfunction replacer(key) {\n // @ts-ignore\n const val = this[key];\n const type = typeof val;\n\n if (Array.isArray(val)) {\n const l = val.length;\n\n if (l > exports.MAX_ARRAY_SIZE) {\n return {\n _isArray: true,\n length: l,\n items: val.slice(0, exports.MAX_ARRAY_SIZE)\n };\n }\n\n return val;\n } else if (typeof val === 'string') {\n if (val.length > exports.MAX_STRING_SIZE) {\n return val.substr(0, exports.MAX_STRING_SIZE) + `... (${val.length} total length)`;\n } else {\n return val;\n }\n } else if (type === 'undefined') {\n return exports.UNDEFINED;\n } else if (val === Infinity) {\n return exports.INFINITY;\n } else if (val === -Infinity) {\n return exports.NEGATIVE_INFINITY;\n } else if (type === 'function') {\n return getCustomFunctionDetails(val);\n } else if (type === 'symbol') {\n return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n } else if (val !== null && type === 'object') {\n const proto = Object.prototype.toString.call(val);\n\n if (proto === '[object Map]') {\n return encodeCache.cache(val, () => getCustomMapDetails(val));\n } else if (proto === '[object Set]') {\n return encodeCache.cache(val, () => getCustomSetDetails(val));\n } else if (proto === '[object RegExp]') {\n // special handling of native type\n return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n } else if (proto === '[object Date]') {\n return `[native Date ${Date.prototype.toString.call(val)}]`;\n } else if (proto === '[object Error]') {\n return `[native Error ${val.message}<>${val.stack}]`;\n } else if (val.state && val._vm) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomStoreDetails)(val));\n } else if (val.constructor && val.constructor.name === 'VueRouter') {\n return encodeCache.cache(val, () => (0, backend_1.getCustomRouterDetails)(val));\n } else if ((0, backend_1.isVueInstance)(val)) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomInstanceDetails)(val));\n } else if (typeof val.render === 'function') {\n return encodeCache.cache(val, () => getCustomComponentDefinitionDetails(val));\n } else if (val.constructor && val.constructor.name === 'VNode') {\n return `[native VNode <${val.tag}>]`;\n } else if (val instanceof HTMLElement) {\n return encodeCache.cache(val, () => getCustomHTMLElementDetails(val));\n }\n } else if (Number.isNaN(val)) {\n return exports.NAN;\n }\n\n return sanitize(val);\n}\n\nfunction getCustomMapDetails(val) {\n const list = [];\n val.forEach((value, key) => list.push({\n key,\n value\n }));\n return {\n _custom: {\n type: 'map',\n display: 'Map',\n value: list,\n readOnly: true,\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomMapDetails = getCustomMapDetails;\n\nfunction reviveMap(val) {\n const result = new Map();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const {\n key,\n value\n } = list[i];\n result.set(key, revive(value));\n }\n\n return result;\n}\n\nexports.reviveMap = reviveMap;\n\nfunction getCustomSetDetails(val) {\n const list = Array.from(val);\n return {\n _custom: {\n type: 'set',\n display: `Set[${list.length}]`,\n value: list,\n readOnly: true\n }\n };\n}\n\nexports.getCustomSetDetails = getCustomSetDetails;\n\nfunction reviveSet(val) {\n const result = new Set();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const value = list[i];\n result.add(revive(value));\n }\n\n return result;\n}\n\nexports.reviveSet = reviveSet; // Use a custom basename functions instead of the shimed version\n// because it doesn't work on Windows\n\nfunction basename(filename, ext) {\n return path_1.default.basename(filename.replace(/^[a-zA-Z]:/, '').replace(/\\\\/g, '/'), ext);\n}\n\nfunction getComponentName(options) {\n const name = options.displayName || options.name || options._componentTag;\n\n if (name) {\n return name;\n }\n\n const file = options.__file; // injected by vue-loader\n\n if (file) {\n return (0, exports.classify)(basename(file, '.vue'));\n }\n}\n\nexports.getComponentName = getComponentName;\n\nfunction getCustomComponentDefinitionDetails(def) {\n let display = getComponentName(def);\n\n if (display) {\n if (def.name && def.__file) {\n display += ` <span>(${def.__file})</span>`;\n }\n } else {\n display = '<i>Unknown Component</i>';\n }\n\n return {\n _custom: {\n type: 'component-definition',\n display,\n tooltip: 'Component definition',\n ...(def.__file ? {\n file: def.__file\n } : {})\n }\n };\n}\n\nexports.getCustomComponentDefinitionDetails = getCustomComponentDefinitionDetails; // eslint-disable-next-line @typescript-eslint/ban-types\n\nfunction getCustomFunctionDetails(func) {\n let string = '';\n let matches = null;\n\n try {\n string = Function.prototype.toString.call(func);\n matches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n } catch (e) {// Func is probably a Proxy, which can break Function.prototype.toString()\n } // Trim any excess whitespace from the argument string\n\n\n const match = matches && matches[0];\n const args = typeof match === 'string' ? `(${match.substr(1, match.length - 2).split(',').map(a => a.trim()).join(', ')})` : '(?)';\n const name = typeof func.name === 'string' ? func.name : '';\n return {\n _custom: {\n type: 'function',\n display: `<span>f</span> ${escape(name)}${args}`,\n _reviveId: reviveCache.cache(func)\n }\n };\n}\n\nexports.getCustomFunctionDetails = getCustomFunctionDetails;\n\nfunction getCustomHTMLElementDetails(value) {\n try {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"opacity-30\"><</span><span class=\"text-blue-500\">${value.tagName.toLowerCase()}</span><span class=\"opacity-30\">></span>`,\n value: namedNodeMapToObject(value.attributes),\n actions: [{\n icon: 'input',\n tooltip: 'Log element to console',\n action: () => {\n // eslint-disable-next-line no-console\n console.log(value);\n }\n }]\n }\n };\n } catch (e) {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"text-blue-500\">${String(value)}</span>`\n }\n };\n }\n}\n\nexports.getCustomHTMLElementDetails = getCustomHTMLElementDetails;\n\nfunction namedNodeMapToObject(map) {\n const result = {};\n const l = map.length;\n\n for (let i = 0; i < l; i++) {\n const node = map.item(i);\n result[node.name] = node.value;\n }\n\n return result;\n}\n\nfunction getCustomRefDetails(instance, key, ref) {\n let value;\n\n if (Array.isArray(ref)) {\n value = ref.map(r => getCustomRefDetails(instance, key, r)).map(data => data.value);\n } else {\n let name;\n\n if (ref._isVue) {\n name = getComponentName(ref.$options);\n } else {\n name = ref.tagName.toLowerCase();\n }\n\n value = {\n _custom: {\n display: `<${name}` + (ref.id ? ` <span class=\"attr-title\">id</span>=\"${ref.id}\"` : '') + (ref.className ? ` <span class=\"attr-title\">class</span>=\"${ref.className}\"` : '') + '>',\n uid: instance.__VUE_DEVTOOLS_UID__,\n type: 'reference'\n }\n };\n }\n\n return {\n type: '$refs',\n key: key,\n value,\n editable: false\n };\n}\n\nexports.getCustomRefDetails = getCustomRefDetails;\n\nfunction parse(data, revive = false) {\n return revive ? (0, transfer_1.parseCircularAutoChunks)(data, reviver) : (0, transfer_1.parseCircularAutoChunks)(data);\n}\n\nexports.parse = parse;\nconst specialTypeRE = /^\\[native (\\w+) (.*?)(<>((.|\\s)*))?\\]$/;\nconst symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\n\nfunction reviver(key, val) {\n return revive(val);\n}\n\nfunction revive(val) {\n if (val === exports.UNDEFINED) {\n return undefined;\n } else if (val === exports.INFINITY) {\n return Infinity;\n } else if (val === exports.NEGATIVE_INFINITY) {\n return -Infinity;\n } else if (val === exports.NAN) {\n return NaN;\n } else if (val && val._custom) {\n const {\n _custom: custom\n } = val;\n\n if (custom.type === 'component') {\n return (0, backend_1.getInstanceMap)().get(custom.id);\n } else if (custom.type === 'map') {\n return reviveMap(val);\n } else if (custom.type === 'set') {\n return reviveSet(val);\n } else if (custom._reviveId) {\n return reviveCache.read(custom._reviveId);\n } else {\n return revive(custom.value);\n }\n } else if (symbolRE.test(val)) {\n const [, string] = symbolRE.exec(val);\n return Symbol.for(string);\n } else if (specialTypeRE.test(val)) {\n const [, type, string,, details] = specialTypeRE.exec(val);\n const result = new window[type](string);\n\n if (type === 'Error' && details) {\n result.stack = details;\n }\n\n return result;\n } else {\n return val;\n }\n}\n\nexports.revive = revive;\n/**\n * Sanitize data to be posted to the other side.\n * Since the message posted is sent with structured clone,\n * we need to filter out any types that might cause an error.\n *\n * @param {*} data\n * @return {*}\n */\n\nfunction sanitize(data) {\n if (!isPrimitive(data) && !Array.isArray(data) && !isPlainObject(data)) {\n // handle types that will probably cause issues in\n // the structured clone\n return Object.prototype.toString.call(data);\n } else {\n return data;\n }\n}\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexports.isPlainObject = isPlainObject;\n\nfunction isPrimitive(data) {\n if (data == null) {\n return true;\n }\n\n const type = typeof data;\n return type === 'string' || type === 'number' || type === 'boolean';\n}\n/**\n * Searches a key or value in the object, with a maximum deepness\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction searchDeepInObject(obj, searchTerm) {\n const seen = new Map();\n const result = internalSearchObject(obj, searchTerm.toLowerCase(), seen, 0);\n seen.clear();\n return result;\n}\n\nexports.searchDeepInObject = searchDeepInObject;\nconst SEARCH_MAX_DEPTH = 10;\n/**\n * Executes a search on each field of the provided object\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\nfunction internalSearchObject(obj, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n const keys = Object.keys(obj);\n let key, value;\n\n for (let i = 0; i < keys.length; i++) {\n key = keys[i];\n value = obj[key];\n match = internalSearchCheck(searchTerm, key, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Executes a search on each value of the provided array\n * @param {*} array Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchArray(array, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n let value;\n\n for (let i = 0; i < array.length; i++) {\n value = array[i];\n match = internalSearchCheck(searchTerm, null, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Checks if the provided field matches the search terms\n * @param {string} searchTerm Search string\n * @param {string} key Field key (null if from array)\n * @param {*} value Field value\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchCheck(searchTerm, key, value, seen, depth) {\n let match = false;\n let result;\n\n if (key === '_custom') {\n key = value.display;\n value = value.value;\n }\n\n (result = specialTokenToString(value)) && (value = result);\n\n if (key && compare(key, searchTerm)) {\n match = true;\n seen.set(value, true);\n } else if (seen.has(value)) {\n match = seen.get(value);\n } else if (Array.isArray(value)) {\n seen.set(value, null);\n match = internalSearchArray(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (isPlainObject(value)) {\n seen.set(value, null);\n match = internalSearchObject(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (compare(value, searchTerm)) {\n match = true;\n seen.set(value, true);\n }\n\n return match;\n}\n/**\n * Compares two values\n * @param {*} value Mixed type value that will be cast to string\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction compare(value, searchTerm) {\n return ('' + value).toLowerCase().indexOf(searchTerm) !== -1;\n}\n\nfunction sortByKey(state) {\n return state && state.slice().sort((a, b) => {\n if (a.key < b.key) return -1;\n if (a.key > b.key) return 1;\n return 0;\n });\n}\n\nexports.sortByKey = sortByKey;\n\nfunction simpleGet(object, path) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n for (let i = 0; i < sections.length; i++) {\n object = object[sections[i]];\n\n if (!object) {\n return undefined;\n }\n }\n\n return object;\n}\n\nexports.simpleGet = simpleGet;\n\nfunction focusInput(el) {\n el.focus();\n el.setSelectionRange(0, el.value.length);\n}\n\nexports.focusInput = focusInput;\n\nfunction openInEditor(file) {\n // Console display\n const fileName = file.replace(/\\\\/g, '\\\\\\\\');\n const src = `fetch('${shared_data_1.SharedData.openInEditorHost}__open-in-editor?file=${encodeURI(file)}').then(response => {\n if (response.ok) {\n console.log('File ${fileName} opened in editor')\n } else {\n const msg = 'Opening component ${fileName} failed'\n const target = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}\n if (target.__VUE_DEVTOOLS_TOAST__) {\n target.__VUE_DEVTOOLS_TOAST__(msg, 'error')\n } else {\n console.log('%c' + msg, 'color:red')\n }\n console.log('Check the setup of your project, see https://devtools.vuejs.org/guide/open-in-editor.html')\n }\n })`;\n\n if (env_1.isChrome) {\n env_1.target.chrome.devtools.inspectedWindow.eval(src);\n } else {\n // eslint-disable-next-line no-eval\n eval(src);\n }\n}\n\nexports.openInEditor = openInEditor;\nconst ESC = {\n '<': '<',\n '>': '>',\n '\"': '"',\n '&': '&'\n};\n\nfunction escape(s) {\n return s.replace(/[<>\"&]/g, escapeChar);\n}\n\nexports.escape = escape;\n\nfunction escapeChar(a) {\n return ESC[a] || a;\n}\n\nfunction copyToClipboard(state) {\n if (typeof document === 'undefined') return;\n const dummyTextArea = document.createElement('textarea');\n dummyTextArea.textContent = stringify(state);\n document.body.appendChild(dummyTextArea);\n dummyTextArea.select();\n document.execCommand('copy');\n document.body.removeChild(dummyTextArea);\n}\n\nexports.copyToClipboard = copyToClipboard;\n\nfunction isEmptyObject(obj) {\n return obj === exports.UNDEFINED || !obj || Object.keys(obj).length === 0;\n}\n\nexports.isEmptyObject = isEmptyObject;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0Q7QUFDRjs7QUF2QkQ7QUF5QkEsTUFBTSxHQUFHLEdBQUc7QUFDVixPQUFLLE1BREs7QUFFVixPQUFLLE1BRks7QUFHVixPQUFLLFFBSEs7QUFJVixPQUFLO0FBSkssQ0FBWjs7QUFPQSxTQUFnQixNQUFoQixDQUF3QixDQUF4QixFQUF5QjtBQUN2QixTQUFPLENBQUMsQ0FBQyxPQUFGLENBQVUsU0FBVixFQUFxQixVQUFyQixDQUFQO0FBQ0Q7O0FBRkQ7O0FBSUEsU0FBUyxVQUFULENBQXFCLENBQXJCLEVBQXNCO0FBQ3BCLFNBQU8sR0FBRyxDQUFDLENBQUQsQ0FBSCxJQUFVLENBQWpCO0FBQ0Q7O0FBRUQsU0FBZ0IsZUFBaEIsQ0FBaUMsS0FBakMsRUFBc0M7QUFDcEMsTUFBSSxPQUFPLFFBQVAsS0FBb0IsV0FBeEIsRUFBcUM7QUFDckMsUUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQVQsQ0FBdUIsVUFBdkIsQ0FBdEI7QUFDQSxlQUFhLENBQUMsV0FBZCxHQUE0QixTQUFTLENBQUMsS0FBRCxDQUFyQztBQUNBLFVBQVEsQ0FBQyxJQUFULENBQWMsV0FBZCxDQUEwQixhQUExQjtBQUNBLGVBQWEsQ0FBQyxNQUFkO0FBQ0EsVUFBUSxDQUFDLFdBQVQsQ0FBcUIsTUFBckI7QUFDQSxVQUFRLENBQUMsSUFBVCxDQUFjLFdBQWQsQ0FBMEIsYUFBMUI7QUFDRDs7QUFSRDs7QUFVQSxTQUFnQixhQUFoQixDQUErQixHQUEvQixFQUFrQztBQUNoQyxTQUFPLEdBQUcsS0FBSyxpQkFBUixJQUFxQixDQUFDLEdBQXRCLElBQTZCLE1BQU0sQ0FBQyxJQUFQLENBQVksR0FBWixFQUFpQixNQUFqQixLQUE0QixDQUFoRTtBQUNEOztBQUZEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvdXRpbC50cz9hNjQzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZXhwb3J0cy5jb3B5VG9DbGlwYm9hcmQgPSBleHBvcnRzLmVzY2FwZSA9IGV4cG9ydHMub3BlbkluRWRpdG9yID0gZXhwb3J0cy5mb2N1c0lucHV0ID0gZXhwb3J0cy5zaW1wbGVHZXQgPSBleHBvcnRzLnNvcnRCeUtleSA9IGV4cG9ydHMuc2VhcmNoRGVlcEluT2JqZWN0ID0gZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gZXhwb3J0cy5yZXZpdmUgPSBleHBvcnRzLnBhcnNlID0gZXhwb3J0cy5nZXRDdXN0b21SZWZEZXRhaWxzID0gZXhwb3J0cy5nZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHMgPSBleHBvcnRzLmdldEN1c3RvbUZ1bmN0aW9uRGV0YWlscyA9IGV4cG9ydHMuZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHMgPSBleHBvcnRzLmdldENvbXBvbmVudE5hbWUgPSBleHBvcnRzLnJldml2ZVNldCA9IGV4cG9ydHMuZ2V0Q3VzdG9tU2V0RGV0YWlscyA9IGV4cG9ydHMucmV2aXZlTWFwID0gZXhwb3J0cy5nZXRDdXN0b21NYXBEZXRhaWxzID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnNwZWNpYWxUb2tlblRvU3RyaW5nID0gZXhwb3J0cy5NQVhfQVJSQVlfU0laRSA9IGV4cG9ydHMuTUFYX1NUUklOR19TSVpFID0gZXhwb3J0cy5TUEVDSUFMX1RPS0VOUyA9IGV4cG9ydHMuTkFOID0gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSA9IGV4cG9ydHMuSU5GSU5JVFkgPSBleHBvcnRzLlVOREVGSU5FRCA9IGV4cG9ydHMuaW5Eb2MgPSBleHBvcnRzLmdldENvbXBvbmVudERpc3BsYXlOYW1lID0gZXhwb3J0cy5rZWJhYml6ZSA9IGV4cG9ydHMuY2FtZWxpemUgPSBleHBvcnRzLmNsYXNzaWZ5ID0gdm9pZCAwO1xuY29uc3QgcGF0aF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwYXRoXCIpKTtcbmNvbnN0IHRyYW5zZmVyXzEgPSByZXF1aXJlKFwiLi90cmFuc2ZlclwiKTtcbmNvbnN0IGJhY2tlbmRfMSA9IHJlcXVpcmUoXCIuL2JhY2tlbmRcIik7XG5jb25zdCBzaGFyZWRfZGF0YV8xID0gcmVxdWlyZShcIi4vc2hhcmVkLWRhdGFcIik7XG5jb25zdCBlbnZfMSA9IHJlcXVpcmUoXCIuL2VudlwiKTtcbmZ1bmN0aW9uIGNhY2hlZChmbikge1xuICAgIGNvbnN0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2FjaGVkRm4oc3RyKSB7XG4gICAgICAgIGNvbnN0IGhpdCA9IGNhY2hlW3N0cl07XG4gICAgICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKTtcbiAgICB9O1xufVxuY29uc3QgY2xhc3NpZnlSRSA9IC8oPzpefFstXy9dKShcXHcpL2c7XG5leHBvcnRzLmNsYXNzaWZ5ID0gY2FjaGVkKChzdHIpID0+IHtcbiAgICAvLyBmaXg6IHN0ci5yZXBsYWNlIG1heSBjYXVzZXMgJ1wicmVwbGFjZVwiIGlzIG5vdCBhIGZ1bmN0aW9uJyBleGNlcHRpb24uXG4gICAgLy8gVGhpcyBidWcgbWF5IGNhdXNlcyB0aGUgVUkgJ0NvbXBvbmVudCBGaWx0ZXInIHRvIG5vdCB3b3JrIHByb3Blcmx5XG4gICAgLy8gZS5nLiBUaGUgdHlwZSBvZiAnc3RyJyBpcyBOdW1iZXIuXG4gICAgLy8gU28gbmVlZCBjb3ZlciAnc3RyJyB0byBTdHJpbmcuXG4gICAgcmV0dXJuIHN0ciAmJiAoJycgKyBzdHIpLnJlcGxhY2UoY2xhc3NpZnlSRSwgdG9VcHBlcik7XG59KTtcbmNvbnN0IGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG5leHBvcnRzLmNhbWVsaXplID0gY2FjaGVkKChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyICYmIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIHRvVXBwZXIpO1xufSk7XG5jb25zdCBrZWJhYml6ZVJFID0gLyhbYS16MC05XSkoW0EtWl0pL2c7XG5leHBvcnRzLmtlYmFiaXplID0gY2FjaGVkKChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyICYmIHN0clxuICAgICAgICAucmVwbGFjZShrZWJhYml6ZVJFLCAoXywgbG93ZXJDYXNlQ2hhcmFjdGVyLCB1cHBlckNhc2VMZXR0ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGAke2xvd2VyQ2FzZUNoYXJhY3Rlcn0tJHt1cHBlckNhc2VMZXR0ZXJ9YDtcbiAgICB9KVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbn0pO1xuZnVuY3Rpb24gdG9VcHBlcihfLCBjKSB7XG4gICAgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJztcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudERpc3BsYXlOYW1lKG9yaWdpbmFsTmFtZSwgc3R5bGUgPSAnY2xhc3MnKSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuY2xhc3NpZnkpKG9yaWdpbmFsTmFtZSk7XG4gICAgICAgIGNhc2UgJ2tlYmFiJzpcbiAgICAgICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5rZWJhYml6ZSkob3JpZ2luYWxOYW1lKTtcbiAgICAgICAgY2FzZSAnb3JpZ2luYWwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZTtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbXBvbmVudERpc3BsYXlOYW1lID0gZ2V0Q29tcG9uZW50RGlzcGxheU5hbWU7XG5mdW5jdGlvbiBpbkRvYyhub2RlKSB7XG4gICAgaWYgKCFub2RlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZG9jID0gbm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgcmV0dXJuIGRvYyA9PT0gbm9kZSB8fFxuICAgICAgICBkb2MgPT09IHBhcmVudCB8fFxuICAgICAgICAhIShwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxICYmIChkb2MuY29udGFpbnMocGFyZW50KSkpO1xufVxuZXhwb3J0cy5pbkRvYyA9IGluRG9jO1xuLyoqXG4gKiBTdHJpbmdpZnkvcGFyc2UgZGF0YSB1c2luZyBDaXJjdWxhckpTT04uXG4gKi9cbmV4cG9ydHMuVU5ERUZJTkVEID0gJ19fdnVlX2RldnRvb2xfdW5kZWZpbmVkX18nO1xuZXhwb3J0cy5JTkZJTklUWSA9ICdfX3Z1ZV9kZXZ0b29sX2luZmluaXR5X18nO1xuZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSA9ICdfX3Z1ZV9kZXZ0b29sX25lZ2F0aXZlX2luZmluaXR5X18nO1xuZXhwb3J0cy5OQU4gPSAnX192dWVfZGV2dG9vbF9uYW5fXyc7XG5leHBvcnRzLlNQRUNJQUxfVE9LRU5TID0ge1xuICAgIHRydWU6IHRydWUsXG4gICAgZmFsc2U6IGZhbHNlLFxuICAgIHVuZGVmaW5lZDogZXhwb3J0cy5VTkRFRklORUQsXG4gICAgbnVsbDogbnVsbCxcbiAgICAnLUluZmluaXR5JzogZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSxcbiAgICBJbmZpbml0eTogZXhwb3J0cy5JTkZJTklUWSxcbiAgICBOYU46IGV4cG9ydHMuTkFOLFxufTtcbmV4cG9ydHMuTUFYX1NUUklOR19TSVpFID0gMTAwMDA7XG5leHBvcnRzLk1BWF9BUlJBWV9TSVpFID0gNTAwMDtcbmZ1bmN0aW9uIHNwZWNpYWxUb2tlblRvU3RyaW5nKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlID09PSBleHBvcnRzLlVOREVGSU5FRCkge1xuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlID09PSBleHBvcnRzLk5BTikge1xuICAgICAgICByZXR1cm4gJ05hTic7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlID09PSBleHBvcnRzLklORklOSVRZKSB7XG4gICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc3BlY2lhbFRva2VuVG9TdHJpbmcgPSBzcGVjaWFsVG9rZW5Ub1N0cmluZztcbi8qKlxuICogTmVlZGVkIHRvIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3dcbiAqIHdoaWxlIHJlcGxhY2luZyBjb21wbGV4IG9iamVjdHNcbiAqIGxpa2UgY29tcG9uZW50cyBiZWNhdXNlIHdlIGNyZWF0ZVxuICogbmV3IG9iamVjdHMgd2l0aCB0aGUgQ3VzdG9tVmFsdWUgQVBJXG4gKiAoLmkuZSBgeyBfY3VzdG9tOiB7IC4uLiB9IH1gKVxuICovXG5jbGFzcyBFbmNvZGVDYWNoZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVzdWx0IHVuaXF1ZSB0byBlYWNoIGlucHV0IGRhdGFcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgSW5wdXQgZGF0YVxuICAgICAqIEBwYXJhbSB7Kn0gZmFjdG9yeSBGdW5jdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdW5pcXVlIHJlc3VsdFxuICAgICAqL1xuICAgIGNhY2hlKGRhdGEsIGZhY3RvcnkpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5tYXAuZ2V0KGRhdGEpO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZmFjdG9yeShkYXRhKTtcbiAgICAgICAgICAgIHRoaXMubWFwLnNldChkYXRhLCByZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5tYXAuY2xlYXIoKTtcbiAgICB9XG59XG5jb25zdCBlbmNvZGVDYWNoZSA9IG5ldyBFbmNvZGVDYWNoZSgpO1xuY2xhc3MgUmV2aXZlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKG1heFNpemUpIHtcbiAgICAgICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5tYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cbiAgICBjYWNoZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICB0aGlzLm1hcC5zZXQoY3VycmVudEluZGV4LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2l6ZSsrO1xuICAgICAgICBpZiAodGhpcy5zaXplID4gdGhpcy5tYXhTaXplKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5kZWxldGUoY3VycmVudEluZGV4IC0gdGhpcy5zaXplKTtcbiAgICAgICAgICAgIHRoaXMuc2l6ZS0tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICB9XG4gICAgcmVhZChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KGlkKTtcbiAgICB9XG59XG5jb25zdCByZXZpdmVDYWNoZSA9IG5ldyBSZXZpdmVDYWNoZSgxMDAwKTtcbmZ1bmN0aW9uIHN0cmluZ2lmeShkYXRhKSB7XG4gICAgLy8gQ3JlYXRlIGEgZnJlc2ggY2FjaGUgZm9yIGVhY2ggc2VyaWFsaXphdGlvblxuICAgIGVuY29kZUNhY2hlLmNsZWFyKCk7XG4gICAgcmV0dXJuICgwLCB0cmFuc2Zlcl8xLnN0cmluZ2lmeUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSwgcmVwbGFjZXIpO1xufVxuZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG5mdW5jdGlvbiByZXBsYWNlcihrZXkpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgdmFsID0gdGhpc1trZXldO1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgY29uc3QgbCA9IHZhbC5sZW5ndGg7XG4gICAgICAgIGlmIChsID4gZXhwb3J0cy5NQVhfQVJSQVlfU0laRSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBfaXNBcnJheTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsZW5ndGg6IGwsXG4gICAgICAgICAgICAgICAgaXRlbXM6IHZhbC5zbGljZSgwLCBleHBvcnRzLk1BWF9BUlJBWV9TSVpFKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHZhbC5sZW5ndGggPiBleHBvcnRzLk1BWF9TVFJJTkdfU0laRSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zdWJzdHIoMCwgZXhwb3J0cy5NQVhfU1RSSU5HX1NJWkUpICsgYC4uLiAoJHsodmFsLmxlbmd0aCl9IHRvdGFsIGxlbmd0aClgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5VTkRFRklORUQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuSU5GSU5JVFk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk5FR0FUSVZFX0lORklOSVRZO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBnZXRDdXN0b21GdW5jdGlvbkRldGFpbHModmFsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIGBbbmF0aXZlIFN5bWJvbCAke1N5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgIT09IG51bGwgJiYgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgcHJvdG8gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKTtcbiAgICAgICAgaWYgKHByb3RvID09PSAnW29iamVjdCBNYXBdJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gZ2V0Q3VzdG9tTWFwRGV0YWlscyh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm90byA9PT0gJ1tvYmplY3QgU2V0XScpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbVNldERldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgICAgICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIG9mIG5hdGl2ZSB0eXBlXG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgUmVnRXhwICR7UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgICAgcmV0dXJuIGBbbmF0aXZlIERhdGUgJHtEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IEVycm9yXScpIHtcbiAgICAgICAgICAgIHJldHVybiBgW25hdGl2ZSBFcnJvciAke3ZhbC5tZXNzYWdlfTw+JHt2YWwuc3RhY2t9XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLnN0YXRlICYmIHZhbC5fdm0pIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+ICgwLCBiYWNrZW5kXzEuZ2V0Q3VzdG9tU3RvcmVEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwuY29uc3RydWN0b3IgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdWdWVSb3V0ZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiAoMCwgYmFja2VuZF8xLmdldEN1c3RvbVJvdXRlckRldGFpbHMpKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgwLCBiYWNrZW5kXzEuaXNWdWVJbnN0YW5jZSkodmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gKDAsIGJhY2tlbmRfMS5nZXRDdXN0b21JbnN0YW5jZURldGFpbHMpKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiBnZXRDdXN0b21Db21wb25lbnREZWZpbml0aW9uRGV0YWlscyh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwuY29uc3RydWN0b3IgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdWTm9kZScpIHtcbiAgICAgICAgICAgIHJldHVybiBgW25hdGl2ZSBWTm9kZSA8JHt2YWwudGFnfT5dYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gZ2V0Q3VzdG9tSFRNTEVsZW1lbnREZXRhaWxzKHZhbCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKE51bWJlci5pc05hTih2YWwpKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk5BTjtcbiAgICB9XG4gICAgcmV0dXJuIHNhbml0aXplKHZhbCk7XG59XG5mdW5jdGlvbiBnZXRDdXN0b21NYXBEZXRhaWxzKHZhbCkge1xuICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICB2YWwuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gbGlzdC5wdXNoKHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ21hcCcsXG4gICAgICAgICAgICBkaXNwbGF5OiAnTWFwJyxcbiAgICAgICAgICAgIHZhbHVlOiBsaXN0LFxuICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tTWFwRGV0YWlscyA9IGdldEN1c3RvbU1hcERldGFpbHM7XG5mdW5jdGlvbiByZXZpdmVNYXAodmFsKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGxpc3QgPSB2YWwuX2N1c3RvbS52YWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBsaXN0W2ldO1xuICAgICAgICByZXN1bHQuc2V0KGtleSwgcmV2aXZlKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnJldml2ZU1hcCA9IHJldml2ZU1hcDtcbmZ1bmN0aW9uIGdldEN1c3RvbVNldERldGFpbHModmFsKSB7XG4gICAgY29uc3QgbGlzdCA9IEFycmF5LmZyb20odmFsKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAnc2V0JyxcbiAgICAgICAgICAgIGRpc3BsYXk6IGBTZXRbJHtsaXN0Lmxlbmd0aH1dYCxcbiAgICAgICAgICAgIHZhbHVlOiBsaXN0LFxuICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tU2V0RGV0YWlscyA9IGdldEN1c3RvbVNldERldGFpbHM7XG5mdW5jdGlvbiByZXZpdmVTZXQodmFsKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IGxpc3QgPSB2YWwuX2N1c3RvbS52YWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBsaXN0W2ldO1xuICAgICAgICByZXN1bHQuYWRkKHJldml2ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5yZXZpdmVTZXQgPSByZXZpdmVTZXQ7XG4vLyBVc2UgYSBjdXN0b20gYmFzZW5hbWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlIHNoaW1lZCB2ZXJzaW9uXG4vLyBiZWNhdXNlIGl0IGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzXG5mdW5jdGlvbiBiYXNlbmFtZShmaWxlbmFtZSwgZXh0KSB7XG4gICAgcmV0dXJuIHBhdGhfMS5kZWZhdWx0LmJhc2VuYW1lKGZpbGVuYW1lLnJlcGxhY2UoL15bYS16QS1aXTovLCAnJykucmVwbGFjZSgvXFxcXC9nLCAnLycpLCBleHQpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShvcHRpb25zKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgfHwgb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IG9wdGlvbnMuX19maWxlOyAvLyBpbmplY3RlZCBieSB2dWUtbG9hZGVyXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmNsYXNzaWZ5KShiYXNlbmFtZShmaWxlLCAnLnZ1ZScpKTtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lO1xuZnVuY3Rpb24gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHMoZGVmKSB7XG4gICAgbGV0IGRpc3BsYXkgPSBnZXRDb21wb25lbnROYW1lKGRlZik7XG4gICAgaWYgKGRpc3BsYXkpIHtcbiAgICAgICAgaWYgKGRlZi5uYW1lICYmIGRlZi5fX2ZpbGUpIHtcbiAgICAgICAgICAgIGRpc3BsYXkgKz0gYCA8c3Bhbj4oJHtkZWYuX19maWxlfSk8L3NwYW4+YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGlzcGxheSA9ICc8aT5Vbmtub3duIENvbXBvbmVudDwvaT4nO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAnY29tcG9uZW50LWRlZmluaXRpb24nLFxuICAgICAgICAgICAgZGlzcGxheSxcbiAgICAgICAgICAgIHRvb2x0aXA6ICdDb21wb25lbnQgZGVmaW5pdGlvbicsXG4gICAgICAgICAgICAuLi5kZWYuX19maWxlXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGU6IGRlZi5fX2ZpbGUsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHMgPSBnZXRDdXN0b21Db21wb25lbnREZWZpbml0aW9uRGV0YWlscztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5mdW5jdGlvbiBnZXRDdXN0b21GdW5jdGlvbkRldGFpbHMoZnVuYykge1xuICAgIGxldCBzdHJpbmcgPSAnJztcbiAgICBsZXQgbWF0Y2hlcyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgICAgc3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgICAgIG1hdGNoZXMgPSBTdHJpbmcucHJvdG90eXBlLm1hdGNoLmNhbGwoc3RyaW5nLCAvXFwoW1xcc1xcU10qP1xcKS8pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICAvLyBGdW5jIGlzIHByb2JhYmx5IGEgUHJveHksIHdoaWNoIGNhbiBicmVhayBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcoKVxuICAgIH1cbiAgICAvLyBUcmltIGFueSBleGNlc3Mgd2hpdGVzcGFjZSBmcm9tIHRoZSBhcmd1bWVudCBzdHJpbmdcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoZXMgJiYgbWF0Y2hlc1swXTtcbiAgICBjb25zdCBhcmdzID0gdHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGAoJHttYXRjaC5zdWJzdHIoMSwgbWF0Y2gubGVuZ3RoIC0gMikuc3BsaXQoJywnKS5tYXAoYSA9PiBhLnRyaW0oKSkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcoPyknO1xuICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgZnVuYy5uYW1lID09PSAnc3RyaW5nJyA/IGZ1bmMubmFtZSA6ICcnO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgICAgICBkaXNwbGF5OiBgPHNwYW4+Zjwvc3Bhbj4gJHtlc2NhcGUobmFtZSl9JHthcmdzfWAsXG4gICAgICAgICAgICBfcmV2aXZlSWQ6IHJldml2ZUNhY2hlLmNhY2hlKGZ1bmMpLFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbUZ1bmN0aW9uRGV0YWlscyA9IGdldEN1c3RvbUZ1bmN0aW9uRGV0YWlscztcbmZ1bmN0aW9uIGdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscyh2YWx1ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0hUTUxFbGVtZW50JyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBgPHNwYW4gY2xhc3M9XCJvcGFjaXR5LTMwXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cInRleHQtYmx1ZS01MDBcIj4ke3ZhbHVlLnRhZ05hbWUudG9Mb3dlckNhc2UoKX08L3NwYW4+PHNwYW4gY2xhc3M9XCJvcGFjaXR5LTMwXCI+Jmd0Ozwvc3Bhbj5gLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lZE5vZGVNYXBUb09iamVjdCh2YWx1ZS5hdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnTG9nIGVsZW1lbnQgdG8gY29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0hUTUxFbGVtZW50JyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsdWUtNTAwXCI+JHtTdHJpbmcodmFsdWUpfTwvc3Bhbj5gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLmdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscyA9IGdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscztcbmZ1bmN0aW9uIG5hbWVkTm9kZU1hcFRvT2JqZWN0KG1hcCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IGwgPSBtYXAubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBtYXAuaXRlbShpKTtcbiAgICAgICAgcmVzdWx0W25vZGUubmFtZV0gPSBub2RlLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tUmVmRGV0YWlscyhpbnN0YW5jZSwga2V5LCByZWYpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVmKSkge1xuICAgICAgICB2YWx1ZSA9IHJlZi5tYXAoKHIpID0+IGdldEN1c3RvbVJlZkRldGFpbHMoaW5zdGFuY2UsIGtleSwgcikpLm1hcChkYXRhID0+IGRhdGEudmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IG5hbWU7XG4gICAgICAgIGlmIChyZWYuX2lzVnVlKSB7XG4gICAgICAgICAgICBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZWYuJG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmFtZSA9IHJlZi50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYCZsdDske25hbWV9YCArXG4gICAgICAgICAgICAgICAgICAgIChyZWYuaWQgPyBgIDxzcGFuIGNsYXNzPVwiYXR0ci10aXRsZVwiPmlkPC9zcGFuPj1cIiR7cmVmLmlkfVwiYCA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZWYuY2xhc3NOYW1lID8gYCA8c3BhbiBjbGFzcz1cImF0dHItdGl0bGVcIj5jbGFzczwvc3Bhbj49XCIke3JlZi5jbGFzc05hbWV9XCJgIDogJycpICsgJyZndDsnLFxuICAgICAgICAgICAgICAgIHVpZDogaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sXG4gICAgICAgICAgICAgICAgdHlwZTogJ3JlZmVyZW5jZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnJHJlZnMnLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRDdXN0b21SZWZEZXRhaWxzID0gZ2V0Q3VzdG9tUmVmRGV0YWlscztcbmZ1bmN0aW9uIHBhcnNlKGRhdGEsIHJldml2ZSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHJldml2ZVxuICAgICAgICA/ICgwLCB0cmFuc2Zlcl8xLnBhcnNlQ2lyY3VsYXJBdXRvQ2h1bmtzKShkYXRhLCByZXZpdmVyKVxuICAgICAgICA6ICgwLCB0cmFuc2Zlcl8xLnBhcnNlQ2lyY3VsYXJBdXRvQ2h1bmtzKShkYXRhKTtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmNvbnN0IHNwZWNpYWxUeXBlUkUgPSAvXlxcW25hdGl2ZSAoXFx3KykgKC4qPykoPD4oKC58XFxzKSopKT9cXF0kLztcbmNvbnN0IHN5bWJvbFJFID0gL15cXFtuYXRpdmUgU3ltYm9sIFN5bWJvbFxcKCguKilcXClcXF0kLztcbmZ1bmN0aW9uIHJldml2ZXIoa2V5LCB2YWwpIHtcbiAgICByZXR1cm4gcmV2aXZlKHZhbCk7XG59XG5mdW5jdGlvbiByZXZpdmUodmFsKSB7XG4gICAgaWYgKHZhbCA9PT0gZXhwb3J0cy5VTkRFRklORUQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsID09PSBleHBvcnRzLklORklOSVRZKSB7XG4gICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsID09PSBleHBvcnRzLk5FR0FUSVZFX0lORklOSVRZKSB7XG4gICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5OQU4pIHtcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsICYmIHZhbC5fY3VzdG9tKSB7XG4gICAgICAgIGNvbnN0IHsgX2N1c3RvbTogY3VzdG9tIH0gPSB2YWw7XG4gICAgICAgIGlmIChjdXN0b20udHlwZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgYmFja2VuZF8xLmdldEluc3RhbmNlTWFwKSgpLmdldChjdXN0b20uaWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1c3RvbS50eXBlID09PSAnbWFwJykge1xuICAgICAgICAgICAgcmV0dXJuIHJldml2ZU1hcCh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1c3RvbS50eXBlID09PSAnc2V0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHJldml2ZVNldCh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1c3RvbS5fcmV2aXZlSWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVDYWNoZS5yZWFkKGN1c3RvbS5fcmV2aXZlSWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJldml2ZShjdXN0b20udmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHN5bWJvbFJFLnRlc3QodmFsKSkge1xuICAgICAgICBjb25zdCBbLCBzdHJpbmddID0gc3ltYm9sUkUuZXhlYyh2YWwpO1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihzdHJpbmcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzcGVjaWFsVHlwZVJFLnRlc3QodmFsKSkge1xuICAgICAgICBjb25zdCBbLCB0eXBlLCBzdHJpbmcsICwgZGV0YWlsc10gPSBzcGVjaWFsVHlwZVJFLmV4ZWModmFsKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IHdpbmRvd1t0eXBlXShzdHJpbmcpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0Vycm9yJyAmJiBkZXRhaWxzKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhY2sgPSBkZXRhaWxzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbn1cbmV4cG9ydHMucmV2aXZlID0gcmV2aXZlO1xuLyoqXG4gKiBTYW5pdGl6ZSBkYXRhIHRvIGJlIHBvc3RlZCB0byB0aGUgb3RoZXIgc2lkZS5cbiAqIFNpbmNlIHRoZSBtZXNzYWdlIHBvc3RlZCBpcyBzZW50IHdpdGggc3RydWN0dXJlZCBjbG9uZSxcbiAqIHdlIG5lZWQgdG8gZmlsdGVyIG91dCBhbnkgdHlwZXMgdGhhdCBtaWdodCBjYXVzZSBhbiBlcnJvci5cbiAqXG4gKiBAcGFyYW0geyp9IGRhdGFcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIHNhbml0aXplKGRhdGEpIHtcbiAgICBpZiAoIWlzUHJpbWl0aXZlKGRhdGEpICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGRhdGEpICYmXG4gICAgICAgICFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIC8vIGhhbmRsZSB0eXBlcyB0aGF0IHdpbGwgcHJvYmFibHkgY2F1c2UgaXNzdWVzIGluXG4gICAgICAgIC8vIHRoZSBzdHJ1Y3R1cmVkIGNsb25lXG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuZnVuY3Rpb24gaXNQcmltaXRpdmUoZGF0YSkge1xuICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0YTtcbiAgICByZXR1cm4gKHR5cGUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIHR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGUgPT09ICdib29sZWFuJyk7XG59XG4vKipcbiAqIFNlYXJjaGVzIGEga2V5IG9yIHZhbHVlIGluIHRoZSBvYmplY3QsIHdpdGggYSBtYXhpbXVtIGRlZXBuZXNzXG4gKiBAcGFyYW0geyp9IG9iaiBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2VhcmNoIG1hdGNoXG4gKi9cbmZ1bmN0aW9uIHNlYXJjaERlZXBJbk9iamVjdChvYmosIHNlYXJjaFRlcm0pIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGludGVybmFsU2VhcmNoT2JqZWN0KG9iaiwgc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpLCBzZWVuLCAwKTtcbiAgICBzZWVuLmNsZWFyKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuc2VhcmNoRGVlcEluT2JqZWN0ID0gc2VhcmNoRGVlcEluT2JqZWN0O1xuY29uc3QgU0VBUkNIX01BWF9ERVBUSCA9IDEwO1xuLyoqXG4gKiBFeGVjdXRlcyBhIHNlYXJjaCBvbiBlYWNoIGZpZWxkIG9mIHRoZSBwcm92aWRlZCBvYmplY3RcbiAqIEBwYXJhbSB7Kn0gb2JqIFNlYXJjaCB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEBwYXJhbSB7TWFwPGFueSxib29sZWFuPn0gc2VlbiBNYXAgY29udGFpbmluZyB0aGUgc2VhcmNoIHJlc3VsdCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IGJ5IHdhbGtpbmcgb24gdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggRGVlcCBzZWFyY2ggZGVwdGggbGV2ZWwsIHdoaWNoIGlzIGNhcHBlZCB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGlzc3Vlc1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBpbnRlcm5hbFNlYXJjaE9iamVjdChvYmosIHNlYXJjaFRlcm0sIHNlZW4sIGRlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gU0VBUkNIX01BWF9ERVBUSCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGxldCBrZXksIHZhbHVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoQ2hlY2soc2VhcmNoVGVybSwga2V5LCB2YWx1ZSwgc2VlbiwgZGVwdGggKyAxKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59XG4vKipcbiAqIEV4ZWN1dGVzIGEgc2VhcmNoIG9uIGVhY2ggdmFsdWUgb2YgdGhlIHByb3ZpZGVkIGFycmF5XG4gKiBAcGFyYW0geyp9IGFycmF5IFNlYXJjaCB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEBwYXJhbSB7TWFwPGFueSxib29sZWFuPn0gc2VlbiBNYXAgY29udGFpbmluZyB0aGUgc2VhcmNoIHJlc3VsdCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IGJ5IHdhbGtpbmcgb24gdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggRGVlcCBzZWFyY2ggZGVwdGggbGV2ZWwsIHdoaWNoIGlzIGNhcHBlZCB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGlzc3Vlc1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBpbnRlcm5hbFNlYXJjaEFycmF5KGFycmF5LCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCkge1xuICAgIGlmIChkZXB0aCA+IFNFQVJDSF9NQVhfREVQVEgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICBsZXQgdmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IGFycmF5W2ldO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoQ2hlY2soc2VhcmNoVGVybSwgbnVsbCwgdmFsdWUsIHNlZW4sIGRlcHRoICsgMSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGZpZWxkIG1hdGNoZXMgdGhlIHNlYXJjaCB0ZXJtc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gU2VhcmNoIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBGaWVsZCBrZXkgKG51bGwgaWYgZnJvbSBhcnJheSlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgRmllbGQgdmFsdWVcbiAqIEBwYXJhbSB7TWFwPGFueSxib29sZWFuPn0gc2VlbiBNYXAgY29udGFpbmluZyB0aGUgc2VhcmNoIHJlc3VsdCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IGJ5IHdhbGtpbmcgb24gdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggRGVlcCBzZWFyY2ggZGVwdGggbGV2ZWwsIHdoaWNoIGlzIGNhcHBlZCB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGlzc3Vlc1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIGtleSwgdmFsdWUsIHNlZW4sIGRlcHRoKSB7XG4gICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoa2V5ID09PSAnX2N1c3RvbScpIHtcbiAgICAgICAga2V5ID0gdmFsdWUuZGlzcGxheTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICB9XG4gICAgKHJlc3VsdCA9IHNwZWNpYWxUb2tlblRvU3RyaW5nKHZhbHVlKSkgJiYgKHZhbHVlID0gcmVzdWx0KTtcbiAgICBpZiAoa2V5ICYmIGNvbXBhcmUoa2V5LCBzZWFyY2hUZXJtKSkge1xuICAgICAgICBtYXRjaCA9IHRydWU7XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgIG1hdGNoID0gc2Vlbi5nZXQodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgbnVsbCk7XG4gICAgICAgIG1hdGNoID0gaW50ZXJuYWxTZWFyY2hBcnJheSh2YWx1ZSwgc2VhcmNoVGVybSwgc2VlbiwgZGVwdGgpO1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgbWF0Y2gpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgbnVsbCk7XG4gICAgICAgIG1hdGNoID0gaW50ZXJuYWxTZWFyY2hPYmplY3QodmFsdWUsIHNlYXJjaFRlcm0sIHNlZW4sIGRlcHRoKTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG1hdGNoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29tcGFyZSh2YWx1ZSwgc2VhcmNoVGVybSkpIHtcbiAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogQ29tcGFyZXMgdHdvIHZhbHVlc1xuICogQHBhcmFtIHsqfSB2YWx1ZSBNaXhlZCB0eXBlIHZhbHVlIHRoYXQgd2lsbCBiZSBjYXN0IHRvIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gU2VhcmNoIHN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBjb21wYXJlKHZhbHVlLCBzZWFyY2hUZXJtKSB7XG4gICAgcmV0dXJuICgnJyArIHZhbHVlKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGVybSkgIT09IC0xO1xufVxuZnVuY3Rpb24gc29ydEJ5S2V5KHN0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5rZXkgPCBiLmtleSlcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEua2V5ID4gYi5rZXkpXG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG59XG5leHBvcnRzLnNvcnRCeUtleSA9IHNvcnRCeUtleTtcbmZ1bmN0aW9uIHNpbXBsZUdldChvYmplY3QsIHBhdGgpIHtcbiAgICBjb25zdCBzZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5zcGxpdCgnLicpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3NlY3Rpb25zW2ldXTtcbiAgICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbmV4cG9ydHMuc2ltcGxlR2V0ID0gc2ltcGxlR2V0O1xuZnVuY3Rpb24gZm9jdXNJbnB1dChlbCkge1xuICAgIGVsLmZvY3VzKCk7XG4gICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgZWwudmFsdWUubGVuZ3RoKTtcbn1cbmV4cG9ydHMuZm9jdXNJbnB1dCA9IGZvY3VzSW5wdXQ7XG5mdW5jdGlvbiBvcGVuSW5FZGl0b3IoZmlsZSkge1xuICAgIC8vIENvbnNvbGUgZGlzcGxheVxuICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpO1xuICAgIGNvbnN0IHNyYyA9IGBmZXRjaCgnJHtzaGFyZWRfZGF0YV8xLlNoYXJlZERhdGEub3BlbkluRWRpdG9ySG9zdH1fX29wZW4taW4tZWRpdG9yP2ZpbGU9JHtlbmNvZGVVUkkoZmlsZSl9JykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmlsZSAke2ZpbGVOYW1lfSBvcGVuZWQgaW4gZWRpdG9yJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbXNnID0gJ09wZW5pbmcgY29tcG9uZW50ICR7ZmlsZU5hbWV9IGZhaWxlZCdcbiAgICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB7fVxuICAgICAgaWYgKHRhcmdldC5fX1ZVRV9ERVZUT09MU19UT0FTVF9fKSB7XG4gICAgICAgIHRhcmdldC5fX1ZVRV9ERVZUT09MU19UT0FTVF9fKG1zZywgJ2Vycm9yJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCclYycgKyBtc2csICdjb2xvcjpyZWQnKVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ0NoZWNrIHRoZSBzZXR1cCBvZiB5b3VyIHByb2plY3QsIHNlZSBodHRwczovL2RldnRvb2xzLnZ1ZWpzLm9yZy9ndWlkZS9vcGVuLWluLWVkaXRvci5odG1sJylcbiAgICB9XG4gIH0pYDtcbiAgICBpZiAoZW52XzEuaXNDaHJvbWUpIHtcbiAgICAgICAgZW52XzEudGFyZ2V0LmNocm9tZS5kZXZ0b29scy5pbnNwZWN0ZWRXaW5kb3cuZXZhbChzcmMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV2YWxcbiAgICAgICAgZXZhbChzcmMpO1xuICAgIH1cbn1cbmV4cG9ydHMub3BlbkluRWRpdG9yID0gb3BlbkluRWRpdG9yO1xuY29uc3QgRVNDID0ge1xuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgICcmJzogJyZhbXA7Jyxcbn07XG5mdW5jdGlvbiBlc2NhcGUocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1s8PlwiJl0vZywgZXNjYXBlQ2hhcik7XG59XG5leHBvcnRzLmVzY2FwZSA9IGVzY2FwZTtcbmZ1bmN0aW9uIGVzY2FwZUNoYXIoYSkge1xuICAgIHJldHVybiBFU0NbYV0gfHwgYTtcbn1cbmZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZChzdGF0ZSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgZHVtbXlUZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZHVtbXlUZXh0QXJlYS50ZXh0Q29udGVudCA9IHN0cmluZ2lmeShzdGF0ZSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkdW1teVRleHRBcmVhKTtcbiAgICBkdW1teVRleHRBcmVhLnNlbGVjdCgpO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkdW1teVRleHRBcmVhKTtcbn1cbmV4cG9ydHMuY29weVRvQ2xpcGJvYXJkID0gY29weVRvQ2xpcGJvYXJkO1xuZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBleHBvcnRzLlVOREVGSU5FRCB8fCAhb2JqIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gaXNFbXB0eU9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///76203\n");
|
|
482
|
+
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.isEmptyObject = exports.copyToClipboard = exports.escape = exports.openInEditor = exports.focusInput = exports.simpleGet = exports.sortByKey = exports.searchDeepInObject = exports.isPlainObject = exports.revive = exports.parse = exports.getCustomRefDetails = exports.getCustomHTMLElementDetails = exports.getCustomFunctionDetails = exports.getCustomComponentDefinitionDetails = exports.getComponentName = exports.reviveSet = exports.getCustomSetDetails = exports.reviveMap = exports.getCustomMapDetails = exports.stringify = exports.specialTokenToString = exports.MAX_ARRAY_SIZE = exports.MAX_STRING_SIZE = exports.SPECIAL_TOKENS = exports.NAN = exports.NEGATIVE_INFINITY = exports.INFINITY = exports.UNDEFINED = exports.inDoc = exports.getComponentDisplayName = exports.kebabize = exports.camelize = exports.classify = void 0;\n\nconst path_1 = __importDefault(__webpack_require__(21023));\n\nconst transfer_1 = __webpack_require__(34723);\n\nconst backend_1 = __webpack_require__(79310);\n\nconst shared_data_1 = __webpack_require__(29556);\n\nconst env_1 = __webpack_require__(66210);\n\nfunction cached(fn) {\n const cache = Object.create(null);\n return function cachedFn(str) {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n\nconst classifyRE = /(?:^|[-_/])(\\w)/g;\nexports.classify = cached(str => {\n // fix: str.replace may causes '\"replace\" is not a function' exception.\n // This bug may causes the UI 'Component Filter' to not work properly\n // e.g. The type of 'str' is Number.\n // So need cover 'str' to String.\n return str && ('' + str).replace(classifyRE, toUpper);\n});\nconst camelizeRE = /-(\\w)/g;\nexports.camelize = cached(str => {\n return str && str.replace(camelizeRE, toUpper);\n});\nconst kebabizeRE = /([a-z0-9])([A-Z])/g;\nexports.kebabize = cached(str => {\n return str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n return `${lowerCaseCharacter}-${upperCaseLetter}`;\n }).toLowerCase();\n});\n\nfunction toUpper(_, c) {\n return c ? c.toUpperCase() : '';\n}\n\nfunction getComponentDisplayName(originalName, style = 'class') {\n switch (style) {\n case 'class':\n return (0, exports.classify)(originalName);\n\n case 'kebab':\n return (0, exports.kebabize)(originalName);\n\n case 'original':\n default:\n return originalName;\n }\n}\n\nexports.getComponentDisplayName = getComponentDisplayName;\n\nfunction inDoc(node) {\n if (!node) return false;\n const doc = node.ownerDocument.documentElement;\n const parent = node.parentNode;\n return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n}\n\nexports.inDoc = inDoc;\n/**\n * Stringify/parse data using CircularJSON.\n */\n\nexports.UNDEFINED = '__vue_devtool_undefined__';\nexports.INFINITY = '__vue_devtool_infinity__';\nexports.NEGATIVE_INFINITY = '__vue_devtool_negative_infinity__';\nexports.NAN = '__vue_devtool_nan__';\nexports.SPECIAL_TOKENS = {\n true: true,\n false: false,\n undefined: exports.UNDEFINED,\n null: null,\n '-Infinity': exports.NEGATIVE_INFINITY,\n Infinity: exports.INFINITY,\n NaN: exports.NAN\n};\nexports.MAX_STRING_SIZE = 10000;\nexports.MAX_ARRAY_SIZE = 5000;\n\nfunction specialTokenToString(value) {\n if (value === null) {\n return 'null';\n } else if (value === exports.UNDEFINED) {\n return 'undefined';\n } else if (value === exports.NAN) {\n return 'NaN';\n } else if (value === exports.INFINITY) {\n return 'Infinity';\n } else if (value === exports.NEGATIVE_INFINITY) {\n return '-Infinity';\n }\n\n return false;\n}\n\nexports.specialTokenToString = specialTokenToString;\n/**\n * Needed to prevent stack overflow\n * while replacing complex objects\n * like components because we create\n * new objects with the CustomValue API\n * (.i.e `{ _custom: { ... } }`)\n */\n\nclass EncodeCache {\n constructor() {\n this.map = new Map();\n }\n /**\n * Returns a result unique to each input data\n * @param {*} data Input data\n * @param {*} factory Function used to create the unique result\n */\n\n\n cache(data, factory) {\n const cached = this.map.get(data);\n\n if (cached) {\n return cached;\n } else {\n const result = factory(data);\n this.map.set(data, result);\n return result;\n }\n }\n\n clear() {\n this.map.clear();\n }\n\n}\n\nconst encodeCache = new EncodeCache();\n\nclass ReviveCache {\n constructor(maxSize) {\n this.maxSize = maxSize;\n this.map = new Map();\n this.index = 0;\n this.size = 0;\n }\n\n cache(value) {\n const currentIndex = this.index;\n this.map.set(currentIndex, value);\n this.size++;\n\n if (this.size > this.maxSize) {\n this.map.delete(currentIndex - this.size);\n this.size--;\n }\n\n this.index++;\n return currentIndex;\n }\n\n read(id) {\n return this.map.get(id);\n }\n\n}\n\nconst reviveCache = new ReviveCache(1000);\n\nfunction stringify(data) {\n // Create a fresh cache for each serialization\n encodeCache.clear();\n return (0, transfer_1.stringifyCircularAutoChunks)(data, replacer);\n}\n\nexports.stringify = stringify;\n\nfunction replacer(key) {\n // @ts-ignore\n const val = this[key];\n const type = typeof val;\n\n if (Array.isArray(val)) {\n const l = val.length;\n\n if (l > exports.MAX_ARRAY_SIZE) {\n return {\n _isArray: true,\n length: l,\n items: val.slice(0, exports.MAX_ARRAY_SIZE)\n };\n }\n\n return val;\n } else if (typeof val === 'string') {\n if (val.length > exports.MAX_STRING_SIZE) {\n return val.substring(0, exports.MAX_STRING_SIZE) + `... (${val.length} total length)`;\n } else {\n return val;\n }\n } else if (type === 'undefined') {\n return exports.UNDEFINED;\n } else if (val === Infinity) {\n return exports.INFINITY;\n } else if (val === -Infinity) {\n return exports.NEGATIVE_INFINITY;\n } else if (type === 'function') {\n return getCustomFunctionDetails(val);\n } else if (type === 'symbol') {\n return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n } else if (val !== null && type === 'object') {\n const proto = Object.prototype.toString.call(val);\n\n if (proto === '[object Map]') {\n return encodeCache.cache(val, () => getCustomMapDetails(val));\n } else if (proto === '[object Set]') {\n return encodeCache.cache(val, () => getCustomSetDetails(val));\n } else if (proto === '[object RegExp]') {\n // special handling of native type\n return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n } else if (proto === '[object Date]') {\n return `[native Date ${Date.prototype.toString.call(val)}]`;\n } else if (proto === '[object Error]') {\n return `[native Error ${val.message}<>${val.stack}]`;\n } else if (val.state && val._vm) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomStoreDetails)(val));\n } else if (val.constructor && val.constructor.name === 'VueRouter') {\n return encodeCache.cache(val, () => (0, backend_1.getCustomRouterDetails)(val));\n } else if ((0, backend_1.isVueInstance)(val)) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomInstanceDetails)(val));\n } else if (typeof val.render === 'function') {\n return encodeCache.cache(val, () => getCustomComponentDefinitionDetails(val));\n } else if (val.constructor && val.constructor.name === 'VNode') {\n return `[native VNode <${val.tag}>]`;\n } else if (val instanceof HTMLElement) {\n return encodeCache.cache(val, () => getCustomHTMLElementDetails(val));\n }\n } else if (Number.isNaN(val)) {\n return exports.NAN;\n }\n\n return sanitize(val);\n}\n\nfunction getCustomMapDetails(val) {\n const list = [];\n val.forEach((value, key) => list.push({\n key,\n value\n }));\n return {\n _custom: {\n type: 'map',\n display: 'Map',\n value: list,\n readOnly: true,\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomMapDetails = getCustomMapDetails;\n\nfunction reviveMap(val) {\n const result = new Map();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const {\n key,\n value\n } = list[i];\n result.set(key, revive(value));\n }\n\n return result;\n}\n\nexports.reviveMap = reviveMap;\n\nfunction getCustomSetDetails(val) {\n const list = Array.from(val);\n return {\n _custom: {\n type: 'set',\n display: `Set[${list.length}]`,\n value: list,\n readOnly: true\n }\n };\n}\n\nexports.getCustomSetDetails = getCustomSetDetails;\n\nfunction reviveSet(val) {\n const result = new Set();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const value = list[i];\n result.add(revive(value));\n }\n\n return result;\n}\n\nexports.reviveSet = reviveSet; // Use a custom basename functions instead of the shimed version\n// because it doesn't work on Windows\n\nfunction basename(filename, ext) {\n return path_1.default.basename(filename.replace(/^[a-zA-Z]:/, '').replace(/\\\\/g, '/'), ext);\n}\n\nfunction getComponentName(options) {\n const name = options.displayName || options.name || options._componentTag;\n\n if (name) {\n return name;\n }\n\n const file = options.__file; // injected by vue-loader\n\n if (file) {\n return (0, exports.classify)(basename(file, '.vue'));\n }\n}\n\nexports.getComponentName = getComponentName;\n\nfunction getCustomComponentDefinitionDetails(def) {\n let display = getComponentName(def);\n\n if (display) {\n if (def.name && def.__file) {\n display += ` <span>(${def.__file})</span>`;\n }\n } else {\n display = '<i>Unknown Component</i>';\n }\n\n return {\n _custom: {\n type: 'component-definition',\n display,\n tooltip: 'Component definition',\n ...(def.__file ? {\n file: def.__file\n } : {})\n }\n };\n}\n\nexports.getCustomComponentDefinitionDetails = getCustomComponentDefinitionDetails; // eslint-disable-next-line @typescript-eslint/ban-types\n\nfunction getCustomFunctionDetails(func) {\n let string = '';\n let matches = null;\n\n try {\n string = Function.prototype.toString.call(func);\n matches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n } catch (e) {// Func is probably a Proxy, which can break Function.prototype.toString()\n } // Trim any excess whitespace from the argument string\n\n\n const match = matches && matches[0];\n const args = typeof match === 'string' ? `(${match.substring(1, match.length - 2).split(',').map(a => a.trim()).join(', ')})` : '(?)';\n const name = typeof func.name === 'string' ? func.name : '';\n return {\n _custom: {\n type: 'function',\n display: `<span>f</span> ${escape(name)}${args}`,\n _reviveId: reviveCache.cache(func)\n }\n };\n}\n\nexports.getCustomFunctionDetails = getCustomFunctionDetails;\n\nfunction getCustomHTMLElementDetails(value) {\n try {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"opacity-30\"><</span><span class=\"text-blue-500\">${value.tagName.toLowerCase()}</span><span class=\"opacity-30\">></span>`,\n value: namedNodeMapToObject(value.attributes),\n actions: [{\n icon: 'input',\n tooltip: 'Log element to console',\n action: () => {\n // eslint-disable-next-line no-console\n console.log(value);\n }\n }]\n }\n };\n } catch (e) {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"text-blue-500\">${String(value)}</span>`\n }\n };\n }\n}\n\nexports.getCustomHTMLElementDetails = getCustomHTMLElementDetails;\n\nfunction namedNodeMapToObject(map) {\n const result = {};\n const l = map.length;\n\n for (let i = 0; i < l; i++) {\n const node = map.item(i);\n result[node.name] = node.value;\n }\n\n return result;\n}\n\nfunction getCustomRefDetails(instance, key, ref) {\n let value;\n\n if (Array.isArray(ref)) {\n value = ref.map(r => getCustomRefDetails(instance, key, r)).map(data => data.value);\n } else {\n let name;\n\n if (ref._isVue) {\n name = getComponentName(ref.$options);\n } else {\n name = ref.tagName.toLowerCase();\n }\n\n value = {\n _custom: {\n display: `<${name}` + (ref.id ? ` <span class=\"attr-title\">id</span>=\"${ref.id}\"` : '') + (ref.className ? ` <span class=\"attr-title\">class</span>=\"${ref.className}\"` : '') + '>',\n uid: instance.__VUE_DEVTOOLS_UID__,\n type: 'reference'\n }\n };\n }\n\n return {\n type: '$refs',\n key: key,\n value,\n editable: false\n };\n}\n\nexports.getCustomRefDetails = getCustomRefDetails;\n\nfunction parse(data, revive = false) {\n return revive ? (0, transfer_1.parseCircularAutoChunks)(data, reviver) : (0, transfer_1.parseCircularAutoChunks)(data);\n}\n\nexports.parse = parse;\nconst specialTypeRE = /^\\[native (\\w+) (.*?)(<>((.|\\s)*))?\\]$/;\nconst symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\n\nfunction reviver(key, val) {\n return revive(val);\n}\n\nfunction revive(val) {\n if (val === exports.UNDEFINED) {\n return undefined;\n } else if (val === exports.INFINITY) {\n return Infinity;\n } else if (val === exports.NEGATIVE_INFINITY) {\n return -Infinity;\n } else if (val === exports.NAN) {\n return NaN;\n } else if (val && val._custom) {\n const {\n _custom: custom\n } = val;\n\n if (custom.type === 'component') {\n return (0, backend_1.getInstanceMap)().get(custom.id);\n } else if (custom.type === 'map') {\n return reviveMap(val);\n } else if (custom.type === 'set') {\n return reviveSet(val);\n } else if (custom._reviveId) {\n return reviveCache.read(custom._reviveId);\n } else {\n return revive(custom.value);\n }\n } else if (symbolRE.test(val)) {\n const [, string] = symbolRE.exec(val);\n return Symbol.for(string);\n } else if (specialTypeRE.test(val)) {\n const [, type, string,, details] = specialTypeRE.exec(val);\n const result = new window[type](string);\n\n if (type === 'Error' && details) {\n result.stack = details;\n }\n\n return result;\n } else {\n return val;\n }\n}\n\nexports.revive = revive;\n/**\n * Sanitize data to be posted to the other side.\n * Since the message posted is sent with structured clone,\n * we need to filter out any types that might cause an error.\n *\n * @param {*} data\n * @return {*}\n */\n\nfunction sanitize(data) {\n if (!isPrimitive(data) && !Array.isArray(data) && !isPlainObject(data)) {\n // handle types that will probably cause issues in\n // the structured clone\n return Object.prototype.toString.call(data);\n } else {\n return data;\n }\n}\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexports.isPlainObject = isPlainObject;\n\nfunction isPrimitive(data) {\n if (data == null) {\n return true;\n }\n\n const type = typeof data;\n return type === 'string' || type === 'number' || type === 'boolean';\n}\n/**\n * Searches a key or value in the object, with a maximum deepness\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction searchDeepInObject(obj, searchTerm) {\n const seen = new Map();\n const result = internalSearchObject(obj, searchTerm.toLowerCase(), seen, 0);\n seen.clear();\n return result;\n}\n\nexports.searchDeepInObject = searchDeepInObject;\nconst SEARCH_MAX_DEPTH = 10;\n/**\n * Executes a search on each field of the provided object\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\nfunction internalSearchObject(obj, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n const keys = Object.keys(obj);\n let key, value;\n\n for (let i = 0; i < keys.length; i++) {\n key = keys[i];\n value = obj[key];\n match = internalSearchCheck(searchTerm, key, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Executes a search on each value of the provided array\n * @param {*} array Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchArray(array, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n let value;\n\n for (let i = 0; i < array.length; i++) {\n value = array[i];\n match = internalSearchCheck(searchTerm, null, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Checks if the provided field matches the search terms\n * @param {string} searchTerm Search string\n * @param {string} key Field key (null if from array)\n * @param {*} value Field value\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchCheck(searchTerm, key, value, seen, depth) {\n let match = false;\n let result;\n\n if (key === '_custom') {\n key = value.display;\n value = value.value;\n }\n\n (result = specialTokenToString(value)) && (value = result);\n\n if (key && compare(key, searchTerm)) {\n match = true;\n seen.set(value, true);\n } else if (seen.has(value)) {\n match = seen.get(value);\n } else if (Array.isArray(value)) {\n seen.set(value, null);\n match = internalSearchArray(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (isPlainObject(value)) {\n seen.set(value, null);\n match = internalSearchObject(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (compare(value, searchTerm)) {\n match = true;\n seen.set(value, true);\n }\n\n return match;\n}\n/**\n * Compares two values\n * @param {*} value Mixed type value that will be cast to string\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction compare(value, searchTerm) {\n return ('' + value).toLowerCase().indexOf(searchTerm) !== -1;\n}\n\nfunction sortByKey(state) {\n return state && state.slice().sort((a, b) => {\n if (a.key < b.key) return -1;\n if (a.key > b.key) return 1;\n return 0;\n });\n}\n\nexports.sortByKey = sortByKey;\n\nfunction simpleGet(object, path) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n for (let i = 0; i < sections.length; i++) {\n object = object[sections[i]];\n\n if (!object) {\n return undefined;\n }\n }\n\n return object;\n}\n\nexports.simpleGet = simpleGet;\n\nfunction focusInput(el) {\n el.focus();\n el.setSelectionRange(0, el.value.length);\n}\n\nexports.focusInput = focusInput;\n\nfunction openInEditor(file) {\n // Console display\n const fileName = file.replace(/\\\\/g, '\\\\\\\\');\n const src = `fetch('${shared_data_1.SharedData.openInEditorHost}__open-in-editor?file=${encodeURI(file)}').then(response => {\n if (response.ok) {\n console.log('File ${fileName} opened in editor')\n } else {\n const msg = 'Opening component ${fileName} failed'\n const target = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}\n if (target.__VUE_DEVTOOLS_TOAST__) {\n target.__VUE_DEVTOOLS_TOAST__(msg, 'error')\n } else {\n console.log('%c' + msg, 'color:red')\n }\n console.log('Check the setup of your project, see https://devtools.vuejs.org/guide/open-in-editor.html')\n }\n })`;\n\n if (env_1.isChrome) {\n env_1.target.chrome.devtools.inspectedWindow.eval(src);\n } else {\n // eslint-disable-next-line no-eval\n eval(src);\n }\n}\n\nexports.openInEditor = openInEditor;\nconst ESC = {\n '<': '<',\n '>': '>',\n '\"': '"',\n '&': '&'\n};\n\nfunction escape(s) {\n return s.replace(/[<>\"&]/g, escapeChar);\n}\n\nexports.escape = escape;\n\nfunction escapeChar(a) {\n return ESC[a] || a;\n}\n\nfunction copyToClipboard(state) {\n if (typeof document === 'undefined') return;\n const dummyTextArea = document.createElement('textarea');\n dummyTextArea.textContent = stringify(state);\n document.body.appendChild(dummyTextArea);\n dummyTextArea.select();\n document.execCommand('copy');\n document.body.removeChild(dummyTextArea);\n}\n\nexports.copyToClipboard = copyToClipboard;\n\nfunction isEmptyObject(obj) {\n return obj === exports.UNDEFINED || !obj || Object.keys(obj).length === 0;\n}\n\nexports.isEmptyObject = isEmptyObject;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBSjtBQUNEO0FBQ0Y7O0FBdkJEO0FBeUJBLE1BQU0sR0FBRyxHQUFHO0FBQ1YsT0FBSyxNQURLO0FBRVYsT0FBSyxNQUZLO0FBR1YsT0FBSyxRQUhLO0FBSVYsT0FBSztBQUpLLENBQVo7O0FBT0EsU0FBZ0IsTUFBaEIsQ0FBd0IsQ0FBeEIsRUFBeUI7QUFDdkIsU0FBTyxDQUFDLENBQUMsT0FBRixDQUFVLFNBQVYsRUFBcUIsVUFBckIsQ0FBUDtBQUNEOztBQUZEOztBQUlBLFNBQVMsVUFBVCxDQUFxQixDQUFyQixFQUFzQjtBQUNwQixTQUFPLEdBQUcsQ0FBQyxDQUFELENBQUgsSUFBVSxDQUFqQjtBQUNEOztBQUVELFNBQWdCLGVBQWhCLENBQWlDLEtBQWpDLEVBQXNDO0FBQ3BDLE1BQUksT0FBTyxRQUFQLEtBQW9CLFdBQXhCLEVBQXFDO0FBQ3JDLFFBQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFULENBQXVCLFVBQXZCLENBQXRCO0FBQ0EsZUFBYSxDQUFDLFdBQWQsR0FBNEIsU0FBUyxDQUFDLEtBQUQsQ0FBckM7QUFDQSxVQUFRLENBQUMsSUFBVCxDQUFjLFdBQWQsQ0FBMEIsYUFBMUI7QUFDQSxlQUFhLENBQUMsTUFBZDtBQUNBLFVBQVEsQ0FBQyxXQUFULENBQXFCLE1BQXJCO0FBQ0EsVUFBUSxDQUFDLElBQVQsQ0FBYyxXQUFkLENBQTBCLGFBQTFCO0FBQ0Q7O0FBUkQ7O0FBVUEsU0FBZ0IsYUFBaEIsQ0FBK0IsR0FBL0IsRUFBa0M7QUFDaEMsU0FBTyxHQUFHLEtBQUssaUJBQVIsSUFBcUIsQ0FBQyxHQUF0QixJQUE2QixNQUFNLENBQUMsSUFBUCxDQUFZLEdBQVosRUFBaUIsTUFBakIsS0FBNEIsQ0FBaEU7QUFDRDs7QUFGRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3V0aWwudHM/YTY0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGV4cG9ydHMuY29weVRvQ2xpcGJvYXJkID0gZXhwb3J0cy5lc2NhcGUgPSBleHBvcnRzLm9wZW5JbkVkaXRvciA9IGV4cG9ydHMuZm9jdXNJbnB1dCA9IGV4cG9ydHMuc2ltcGxlR2V0ID0gZXhwb3J0cy5zb3J0QnlLZXkgPSBleHBvcnRzLnNlYXJjaERlZXBJbk9iamVjdCA9IGV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGV4cG9ydHMucmV2aXZlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuZ2V0Q3VzdG9tUmVmRGV0YWlscyA9IGV4cG9ydHMuZ2V0Q3VzdG9tSFRNTEVsZW1lbnREZXRhaWxzID0gZXhwb3J0cy5nZXRDdXN0b21GdW5jdGlvbkRldGFpbHMgPSBleHBvcnRzLmdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzID0gZXhwb3J0cy5nZXRDb21wb25lbnROYW1lID0gZXhwb3J0cy5yZXZpdmVTZXQgPSBleHBvcnRzLmdldEN1c3RvbVNldERldGFpbHMgPSBleHBvcnRzLnJldml2ZU1hcCA9IGV4cG9ydHMuZ2V0Q3VzdG9tTWFwRGV0YWlscyA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zcGVjaWFsVG9rZW5Ub1N0cmluZyA9IGV4cG9ydHMuTUFYX0FSUkFZX1NJWkUgPSBleHBvcnRzLk1BWF9TVFJJTkdfU0laRSA9IGV4cG9ydHMuU1BFQ0lBTF9UT0tFTlMgPSBleHBvcnRzLk5BTiA9IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkgPSBleHBvcnRzLklORklOSVRZID0gZXhwb3J0cy5VTkRFRklORUQgPSBleHBvcnRzLmluRG9jID0gZXhwb3J0cy5nZXRDb21wb25lbnREaXNwbGF5TmFtZSA9IGV4cG9ydHMua2ViYWJpemUgPSBleHBvcnRzLmNhbWVsaXplID0gZXhwb3J0cy5jbGFzc2lmeSA9IHZvaWQgMDtcbmNvbnN0IHBhdGhfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCB0cmFuc2Zlcl8xID0gcmVxdWlyZShcIi4vdHJhbnNmZXJcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3Qgc2hhcmVkX2RhdGFfMSA9IHJlcXVpcmUoXCIuL3NoYXJlZC1kYXRhXCIpO1xuY29uc3QgZW52XzEgPSByZXF1aXJlKFwiLi9lbnZcIik7XG5mdW5jdGlvbiBjYWNoZWQoZm4pIHtcbiAgICBjb25zdCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZEZuKHN0cikge1xuICAgICAgICBjb25zdCBoaXQgPSBjYWNoZVtzdHJdO1xuICAgICAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XG4gICAgfTtcbn1cbmNvbnN0IGNsYXNzaWZ5UkUgPSAvKD86XnxbLV8vXSkoXFx3KS9nO1xuZXhwb3J0cy5jbGFzc2lmeSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgLy8gZml4OiBzdHIucmVwbGFjZSBtYXkgY2F1c2VzICdcInJlcGxhY2VcIiBpcyBub3QgYSBmdW5jdGlvbicgZXhjZXB0aW9uLlxuICAgIC8vIFRoaXMgYnVnIG1heSBjYXVzZXMgdGhlIFVJICdDb21wb25lbnQgRmlsdGVyJyB0byBub3Qgd29yayBwcm9wZXJseVxuICAgIC8vIGUuZy4gVGhlIHR5cGUgb2YgJ3N0cicgaXMgTnVtYmVyLlxuICAgIC8vIFNvIG5lZWQgY292ZXIgJ3N0cicgdG8gU3RyaW5nLlxuICAgIHJldHVybiBzdHIgJiYgKCcnICsgc3RyKS5yZXBsYWNlKGNsYXNzaWZ5UkUsIHRvVXBwZXIpO1xufSk7XG5jb25zdCBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xuZXhwb3J0cy5jYW1lbGl6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCB0b1VwcGVyKTtcbn0pO1xuY29uc3Qga2ViYWJpemVSRSA9IC8oW2EtejAtOV0pKFtBLVpdKS9nO1xuZXhwb3J0cy5rZWJhYml6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHJcbiAgICAgICAgLnJlcGxhY2Uoa2ViYWJpemVSRSwgKF8sIGxvd2VyQ2FzZUNoYXJhY3RlciwgdXBwZXJDYXNlTGV0dGVyKSA9PiB7XG4gICAgICAgIHJldHVybiBgJHtsb3dlckNhc2VDaGFyYWN0ZXJ9LSR7dXBwZXJDYXNlTGV0dGVyfWA7XG4gICAgfSlcbiAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG59KTtcbmZ1bmN0aW9uIHRvVXBwZXIoXywgYykge1xuICAgIHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7XG59XG5mdW5jdGlvbiBnZXRDb21wb25lbnREaXNwbGF5TmFtZShvcmlnaW5hbE5hbWUsIHN0eWxlID0gJ2NsYXNzJykge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmNsYXNzaWZ5KShvcmlnaW5hbE5hbWUpO1xuICAgICAgICBjYXNlICdrZWJhYic6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMua2ViYWJpemUpKG9yaWdpbmFsTmFtZSk7XG4gICAgICAgIGNhc2UgJ29yaWdpbmFsJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWU7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnREaXNwbGF5TmFtZSA9IGdldENvbXBvbmVudERpc3BsYXlOYW1lO1xuZnVuY3Rpb24gaW5Eb2Mobm9kZSkge1xuICAgIGlmICghbm9kZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRvYyA9IG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIHJldHVybiBkb2MgPT09IG5vZGUgfHxcbiAgICAgICAgZG9jID09PSBwYXJlbnQgfHxcbiAgICAgICAgISEocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMSAmJiAoZG9jLmNvbnRhaW5zKHBhcmVudCkpKTtcbn1cbmV4cG9ydHMuaW5Eb2MgPSBpbkRvYztcbi8qKlxuICogU3RyaW5naWZ5L3BhcnNlIGRhdGEgdXNpbmcgQ2lyY3VsYXJKU09OLlxuICovXG5leHBvcnRzLlVOREVGSU5FRCA9ICdfX3Z1ZV9kZXZ0b29sX3VuZGVmaW5lZF9fJztcbmV4cG9ydHMuSU5GSU5JVFkgPSAnX192dWVfZGV2dG9vbF9pbmZpbml0eV9fJztcbmV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkgPSAnX192dWVfZGV2dG9vbF9uZWdhdGl2ZV9pbmZpbml0eV9fJztcbmV4cG9ydHMuTkFOID0gJ19fdnVlX2RldnRvb2xfbmFuX18nO1xuZXhwb3J0cy5TUEVDSUFMX1RPS0VOUyA9IHtcbiAgICB0cnVlOiB0cnVlLFxuICAgIGZhbHNlOiBmYWxzZSxcbiAgICB1bmRlZmluZWQ6IGV4cG9ydHMuVU5ERUZJTkVELFxuICAgIG51bGw6IG51bGwsXG4gICAgJy1JbmZpbml0eSc6IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgSW5maW5pdHk6IGV4cG9ydHMuSU5GSU5JVFksXG4gICAgTmFOOiBleHBvcnRzLk5BTixcbn07XG5leHBvcnRzLk1BWF9TVFJJTkdfU0laRSA9IDEwMDAwO1xuZXhwb3J0cy5NQVhfQVJSQVlfU0laRSA9IDUwMDA7XG5mdW5jdGlvbiBzcGVjaWFsVG9rZW5Ub1N0cmluZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5VTkRFRklORUQpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5OQU4pIHtcbiAgICAgICAgcmV0dXJuICdOYU4nO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT09IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgICAgcmV0dXJuICctSW5maW5pdHknO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNwZWNpYWxUb2tlblRvU3RyaW5nID0gc3BlY2lhbFRva2VuVG9TdHJpbmc7XG4vKipcbiAqIE5lZWRlZCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93XG4gKiB3aGlsZSByZXBsYWNpbmcgY29tcGxleCBvYmplY3RzXG4gKiBsaWtlIGNvbXBvbmVudHMgYmVjYXVzZSB3ZSBjcmVhdGVcbiAqIG5ldyBvYmplY3RzIHdpdGggdGhlIEN1c3RvbVZhbHVlIEFQSVxuICogKC5pLmUgYHsgX2N1c3RvbTogeyAuLi4gfSB9YClcbiAqL1xuY2xhc3MgRW5jb2RlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJlc3VsdCB1bmlxdWUgdG8gZWFjaCBpbnB1dCBkYXRhXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIElucHV0IGRhdGFcbiAgICAgKiBAcGFyYW0geyp9IGZhY3RvcnkgRnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVuaXF1ZSByZXN1bHRcbiAgICAgKi9cbiAgICBjYWNoZShkYXRhLCBmYWN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubWFwLmdldChkYXRhKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZhY3RvcnkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQoZGF0YSwgcmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubWFwLmNsZWFyKCk7XG4gICAgfVxufVxuY29uc3QgZW5jb2RlQ2FjaGUgPSBuZXcgRW5jb2RlQ2FjaGUoKTtcbmNsYXNzIFJldml2ZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplKSB7XG4gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG4gICAgY2FjaGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgdGhpcy5tYXAuc2V0KGN1cnJlbnRJbmRleCwgdmFsdWUpO1xuICAgICAgICB0aGlzLnNpemUrKztcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA+IHRoaXMubWF4U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5tYXAuZGVsZXRlKGN1cnJlbnRJbmRleCAtIHRoaXMuc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLnNpemUtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICAgIHJlYWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChpZCk7XG4gICAgfVxufVxuY29uc3QgcmV2aXZlQ2FjaGUgPSBuZXcgUmV2aXZlQ2FjaGUoMTAwMCk7XG5mdW5jdGlvbiBzdHJpbmdpZnkoZGF0YSkge1xuICAgIC8vIENyZWF0ZSBhIGZyZXNoIGNhY2hlIGZvciBlYWNoIHNlcmlhbGl6YXRpb25cbiAgICBlbmNvZGVDYWNoZS5jbGVhcigpO1xuICAgIHJldHVybiAoMCwgdHJhbnNmZXJfMS5zdHJpbmdpZnlDaXJjdWxhckF1dG9DaHVua3MpKGRhdGEsIHJlcGxhY2VyKTtcbn1cbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZnVuY3Rpb24gcmVwbGFjZXIoa2V5KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHZhbCA9IHRoaXNba2V5XTtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGNvbnN0IGwgPSB2YWwubGVuZ3RoO1xuICAgICAgICBpZiAobCA+IGV4cG9ydHMuTUFYX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgX2lzQXJyYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiBsLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB2YWwuc2xpY2UoMCwgZXhwb3J0cy5NQVhfQVJSQVlfU0laRSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gZXhwb3J0cy5NQVhfU1RSSU5HX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwuc3Vic3RyaW5nKDAsIGV4cG9ydHMuTUFYX1NUUklOR19TSVpFKSArIGAuLi4gKCR7KHZhbC5sZW5ndGgpfSB0b3RhbCBsZW5ndGgpYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVU5ERUZJTkVEO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLklORklOSVRZO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZ2V0Q3VzdG9tRnVuY3Rpb25EZXRhaWxzKHZhbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiBgW25hdGl2ZSBTeW1ib2wgJHtTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKX1dYDtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsICE9PSBudWxsICYmIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCk7XG4gICAgICAgIGlmIChwcm90byA9PT0gJ1tvYmplY3QgTWFwXScpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbU1hcERldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IFNldF0nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiBnZXRDdXN0b21TZXREZXRhaWxzKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBvZiBuYXRpdmUgdHlwZVxuICAgICAgICAgICAgcmV0dXJuIGBbbmF0aXZlIFJlZ0V4cCAke1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgICAgICAgIHJldHVybiBgW25hdGl2ZSBEYXRlICR7RGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBFcnJvcl0nKSB7XG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgRXJyb3IgJHt2YWwubWVzc2FnZX08PiR7dmFsLnN0YWNrfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5zdGF0ZSAmJiB2YWwuX3ZtKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiAoMCwgYmFja2VuZF8xLmdldEN1c3RvbVN0b3JlRGV0YWlscykodmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVnVlUm91dGVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gKDAsIGJhY2tlbmRfMS5nZXRDdXN0b21Sb3V0ZXJEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoMCwgYmFja2VuZF8xLmlzVnVlSW5zdGFuY2UpKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+ICgwLCBiYWNrZW5kXzEuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVk5vZGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgVk5vZGUgPCR7dmFsLnRhZ30+XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscyh2YWwpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNOYU4odmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5OQU47XG4gICAgfVxuICAgIHJldHVybiBzYW5pdGl6ZSh2YWwpO1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tTWFwRGV0YWlscyh2YWwpIHtcbiAgICBjb25zdCBsaXN0ID0gW107XG4gICAgdmFsLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGxpc3QucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgfSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdtYXAnLFxuICAgICAgICAgICAgZGlzcGxheTogJ01hcCcsXG4gICAgICAgICAgICB2YWx1ZTogbGlzdCxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbU1hcERldGFpbHMgPSBnZXRDdXN0b21NYXBEZXRhaWxzO1xuZnVuY3Rpb24gcmV2aXZlTWFwKHZhbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBsaXN0ID0gdmFsLl9jdXN0b20udmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gbGlzdFtpXTtcbiAgICAgICAgcmVzdWx0LnNldChrZXksIHJldml2ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5yZXZpdmVNYXAgPSByZXZpdmVNYXA7XG5mdW5jdGlvbiBnZXRDdXN0b21TZXREZXRhaWxzKHZhbCkge1xuICAgIGNvbnN0IGxpc3QgPSBBcnJheS5mcm9tKHZhbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ3NldCcsXG4gICAgICAgICAgICBkaXNwbGF5OiBgU2V0WyR7bGlzdC5sZW5ndGh9XWAsXG4gICAgICAgICAgICB2YWx1ZTogbGlzdCxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbVNldERldGFpbHMgPSBnZXRDdXN0b21TZXREZXRhaWxzO1xuZnVuY3Rpb24gcmV2aXZlU2V0KHZhbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBsaXN0ID0gdmFsLl9jdXN0b20udmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbGlzdFtpXTtcbiAgICAgICAgcmVzdWx0LmFkZChyZXZpdmUodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucmV2aXZlU2V0ID0gcmV2aXZlU2V0O1xuLy8gVXNlIGEgY3VzdG9tIGJhc2VuYW1lIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBzaGltZWQgdmVyc2lvblxuLy8gYmVjYXVzZSBpdCBkb2Vzbid0IHdvcmsgb24gV2luZG93c1xuZnVuY3Rpb24gYmFzZW5hbWUoZmlsZW5hbWUsIGV4dCkge1xuICAgIHJldHVybiBwYXRoXzEuZGVmYXVsdC5iYXNlbmFtZShmaWxlbmFtZS5yZXBsYWNlKC9eW2EtekEtWl06LywgJycpLnJlcGxhY2UoL1xcXFwvZywgJy8nKSwgZXh0KTtcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUob3B0aW9ucykge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IG9wdGlvbnMubmFtZSB8fCBvcHRpb25zLl9jb21wb25lbnRUYWc7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbGUgPSBvcHRpb25zLl9fZmlsZTsgLy8gaW5qZWN0ZWQgYnkgdnVlLWxvYWRlclxuICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5jbGFzc2lmeSkoYmFzZW5hbWUoZmlsZSwgJy52dWUnKSk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZTtcbmZ1bmN0aW9uIGdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzKGRlZikge1xuICAgIGxldCBkaXNwbGF5ID0gZ2V0Q29tcG9uZW50TmFtZShkZWYpO1xuICAgIGlmIChkaXNwbGF5KSB7XG4gICAgICAgIGlmIChkZWYubmFtZSAmJiBkZWYuX19maWxlKSB7XG4gICAgICAgICAgICBkaXNwbGF5ICs9IGAgPHNwYW4+KCR7ZGVmLl9fZmlsZX0pPC9zcGFuPmA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRpc3BsYXkgPSAnPGk+VW5rbm93biBDb21wb25lbnQ8L2k+JztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudC1kZWZpbml0aW9uJyxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICB0b29sdGlwOiAnQ29tcG9uZW50IGRlZmluaXRpb24nLFxuICAgICAgICAgICAgLi4uZGVmLl9fZmlsZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBmaWxlOiBkZWYuX19maWxlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzID0gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHM7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZnVuY3Rpb24gZ2V0Q3VzdG9tRnVuY3Rpb25EZXRhaWxzKGZ1bmMpIHtcbiAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgbGV0IG1hdGNoZXMgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICAgIHN0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgICAgICBtYXRjaGVzID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaC5jYWxsKHN0cmluZywgL1xcKFtcXHNcXFNdKj9cXCkvKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRnVuYyBpcyBwcm9iYWJseSBhIFByb3h5LCB3aGljaCBjYW4gYnJlYWsgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKClcbiAgICB9XG4gICAgLy8gVHJpbSBhbnkgZXhjZXNzIHdoaXRlc3BhY2UgZnJvbSB0aGUgYXJndW1lbnQgc3RyaW5nXG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG4gICAgY29uc3QgYXJncyA9IHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBgKCR7bWF0Y2guc3Vic3RyaW5nKDEsIG1hdGNoLmxlbmd0aCAtIDIpLnNwbGl0KCcsJykubWFwKGEgPT4gYS50cmltKCkpLmpvaW4oJywgJyl9KWBcbiAgICAgICAgOiAnKD8pJztcbiAgICBjb25zdCBuYW1lID0gdHlwZW9mIGZ1bmMubmFtZSA9PT0gJ3N0cmluZycgPyBmdW5jLm5hbWUgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuPmY8L3NwYW4+ICR7ZXNjYXBlKG5hbWUpfSR7YXJnc31gLFxuICAgICAgICAgICAgX3Jldml2ZUlkOiByZXZpdmVDYWNoZS5jYWNoZShmdW5jKSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRDdXN0b21GdW5jdGlvbkRldGFpbHMgPSBnZXRDdXN0b21GdW5jdGlvbkRldGFpbHM7XG5mdW5jdGlvbiBnZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHModmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuIGNsYXNzPVwib3BhY2l0eS0zMFwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9XCJ0ZXh0LWJsdWUtNTAwXCI+JHt2YWx1ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PC9zcGFuPjxzcGFuIGNsYXNzPVwib3BhY2l0eS0zMFwiPiZndDs8L3NwYW4+YCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmFtZWROb2RlTWFwVG9PYmplY3QodmFsdWUuYXR0cmlidXRlcyksXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ0xvZyBlbGVtZW50IHRvIGNvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuIGNsYXNzPVwidGV4dC1ibHVlLTUwMFwiPiR7U3RyaW5nKHZhbHVlKX08L3NwYW4+YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHMgPSBnZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHM7XG5mdW5jdGlvbiBuYW1lZE5vZGVNYXBUb09iamVjdChtYXApIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBsID0gbWFwLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gbWFwLml0ZW0oaSk7XG4gICAgICAgIHJlc3VsdFtub2RlLm5hbWVdID0gbm9kZS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldEN1c3RvbVJlZkRldGFpbHMoaW5zdGFuY2UsIGtleSwgcmVmKSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZikpIHtcbiAgICAgICAgdmFsdWUgPSByZWYubWFwKChyKSA9PiBnZXRDdXN0b21SZWZEZXRhaWxzKGluc3RhbmNlLCBrZXksIHIpKS5tYXAoZGF0YSA9PiBkYXRhLnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBuYW1lO1xuICAgICAgICBpZiAocmVmLl9pc1Z1ZSkge1xuICAgICAgICAgICAgbmFtZSA9IGdldENvbXBvbmVudE5hbWUocmVmLiRvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSByZWYudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGAmbHQ7JHtuYW1lfWAgK1xuICAgICAgICAgICAgICAgICAgICAocmVmLmlkID8gYCA8c3BhbiBjbGFzcz1cImF0dHItdGl0bGVcIj5pZDwvc3Bhbj49XCIke3JlZi5pZH1cImAgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVmLmNsYXNzTmFtZSA/IGAgPHNwYW4gY2xhc3M9XCJhdHRyLXRpdGxlXCI+Y2xhc3M8L3NwYW4+PVwiJHtyZWYuY2xhc3NOYW1lfVwiYCA6ICcnKSArICcmZ3Q7JyxcbiAgICAgICAgICAgICAgICB1aWQ6IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdyZWZlcmVuY2UnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJyRyZWZzJyxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tUmVmRGV0YWlscyA9IGdldEN1c3RvbVJlZkRldGFpbHM7XG5mdW5jdGlvbiBwYXJzZShkYXRhLCByZXZpdmUgPSBmYWxzZSkge1xuICAgIHJldHVybiByZXZpdmVcbiAgICAgICAgPyAoMCwgdHJhbnNmZXJfMS5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSwgcmV2aXZlcilcbiAgICAgICAgOiAoMCwgdHJhbnNmZXJfMS5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSk7XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5jb25zdCBzcGVjaWFsVHlwZVJFID0gL15cXFtuYXRpdmUgKFxcdyspICguKj8pKDw+KCgufFxccykqKSk/XFxdJC87XG5jb25zdCBzeW1ib2xSRSA9IC9eXFxbbmF0aXZlIFN5bWJvbCBTeW1ib2xcXCgoLiopXFwpXFxdJC87XG5mdW5jdGlvbiByZXZpdmVyKGtleSwgdmFsKSB7XG4gICAgcmV0dXJuIHJldml2ZSh2YWwpO1xufVxuZnVuY3Rpb24gcmV2aXZlKHZhbCkge1xuICAgIGlmICh2YWwgPT09IGV4cG9ydHMuVU5ERUZJTkVEKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IGV4cG9ydHMuTkFOKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCAmJiB2YWwuX2N1c3RvbSkge1xuICAgICAgICBjb25zdCB7IF9jdXN0b206IGN1c3RvbSB9ID0gdmFsO1xuICAgICAgICBpZiAoY3VzdG9tLnR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGJhY2tlbmRfMS5nZXRJbnN0YW5jZU1hcCkoKS5nZXQoY3VzdG9tLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20udHlwZSA9PT0gJ21hcCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVNYXAodmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20udHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVTZXQodmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20uX3Jldml2ZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV2aXZlQ2FjaGUucmVhZChjdXN0b20uX3Jldml2ZUlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmUoY3VzdG9tLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzeW1ib2xSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgY29uc3QgWywgc3RyaW5nXSA9IHN5bWJvbFJFLmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3Ioc3RyaW5nKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3BlY2lhbFR5cGVSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgY29uc3QgWywgdHlwZSwgc3RyaW5nLCAsIGRldGFpbHNdID0gc3BlY2lhbFR5cGVSRS5leGVjKHZhbCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyB3aW5kb3dbdHlwZV0oc3RyaW5nKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdFcnJvcicgJiYgZGV0YWlscykge1xuICAgICAgICAgICAgcmVzdWx0LnN0YWNrID0gZGV0YWlscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5leHBvcnRzLnJldml2ZSA9IHJldml2ZTtcbi8qKlxuICogU2FuaXRpemUgZGF0YSB0byBiZSBwb3N0ZWQgdG8gdGhlIG90aGVyIHNpZGUuXG4gKiBTaW5jZSB0aGUgbWVzc2FnZSBwb3N0ZWQgaXMgc2VudCB3aXRoIHN0cnVjdHVyZWQgY2xvbmUsXG4gKiB3ZSBuZWVkIHRvIGZpbHRlciBvdXQgYW55IHR5cGVzIHRoYXQgbWlnaHQgY2F1c2UgYW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZShkYXRhKSB7XG4gICAgaWYgKCFpc1ByaW1pdGl2ZShkYXRhKSAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShkYXRhKSAmJlxuICAgICAgICAhaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgICAgICAvLyBoYW5kbGUgdHlwZXMgdGhhdCB3aWxsIHByb2JhYmx5IGNhdXNlIGlzc3VlcyBpblxuICAgICAgICAvLyB0aGUgc3RydWN0dXJlZCBjbG9uZVxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGRhdGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGE7XG4gICAgcmV0dXJuICh0eXBlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlID09PSAnYm9vbGVhbicpO1xufVxuLyoqXG4gKiBTZWFyY2hlcyBhIGtleSBvciB2YWx1ZSBpbiB0aGUgb2JqZWN0LCB3aXRoIGEgbWF4aW11bSBkZWVwbmVzc1xuICogQHBhcmFtIHsqfSBvYmogU2VhcmNoIHRhcmdldFxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gU2VhcmNoIHN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBzZWFyY2hEZWVwSW5PYmplY3Qob2JqLCBzZWFyY2hUZXJtKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCByZXN1bHQgPSBpbnRlcm5hbFNlYXJjaE9iamVjdChvYmosIHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSwgc2VlbiwgMCk7XG4gICAgc2Vlbi5jbGVhcigpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnNlYXJjaERlZXBJbk9iamVjdCA9IHNlYXJjaERlZXBJbk9iamVjdDtcbmNvbnN0IFNFQVJDSF9NQVhfREVQVEggPSAxMDtcbi8qKlxuICogRXhlY3V0ZXMgYSBzZWFyY2ggb24gZWFjaCBmaWVsZCBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0XG4gKiBAcGFyYW0geyp9IG9iaiBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hPYmplY3Qob2JqLCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCkge1xuICAgIGlmIChkZXB0aCA+IFNFQVJDSF9NQVhfREVQVEgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgbWF0Y2ggPSBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIGtleSwgdmFsdWUsIHNlZW4sIGRlcHRoICsgMSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xufVxuLyoqXG4gKiBFeGVjdXRlcyBhIHNlYXJjaCBvbiBlYWNoIHZhbHVlIG9mIHRoZSBwcm92aWRlZCBhcnJheVxuICogQHBhcmFtIHsqfSBhcnJheSBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hBcnJheShhcnJheSwgc2VhcmNoVGVybSwgc2VlbiwgZGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBTRUFSQ0hfTUFYX0RFUFRIKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgbGV0IHZhbHVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBhcnJheVtpXTtcbiAgICAgICAgbWF0Y2ggPSBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIG51bGwsIHZhbHVlLCBzZWVuLCBkZXB0aCArIDEpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBmaWVsZCBtYXRjaGVzIHRoZSBzZWFyY2ggdGVybXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgRmllbGQga2V5IChudWxsIGlmIGZyb20gYXJyYXkpXG4gKiBAcGFyYW0geyp9IHZhbHVlIEZpZWxkIHZhbHVlXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hDaGVjayhzZWFyY2hUZXJtLCBrZXksIHZhbHVlLCBzZWVuLCBkZXB0aCkge1xuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKGtleSA9PT0gJ19jdXN0b20nKSB7XG4gICAgICAgIGtleSA9IHZhbHVlLmRpc3BsYXk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgfVxuICAgIChyZXN1bHQgPSBzcGVjaWFsVG9rZW5Ub1N0cmluZyh2YWx1ZSkpICYmICh2YWx1ZSA9IHJlc3VsdCk7XG4gICAgaWYgKGtleSAmJiBjb21wYXJlKGtleSwgc2VhcmNoVGVybSkpIHtcbiAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICBtYXRjaCA9IHNlZW4uZ2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoQXJyYXkodmFsdWUsIHNlYXJjaFRlcm0sIHNlZW4sIGRlcHRoKTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG1hdGNoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoT2JqZWN0KHZhbHVlLCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCk7XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCBtYXRjaCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbXBhcmUodmFsdWUsIHNlYXJjaFRlcm0pKSB7XG4gICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59XG4vKipcbiAqIENvbXBhcmVzIHR3byB2YWx1ZXNcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgTWl4ZWQgdHlwZSB2YWx1ZSB0aGF0IHdpbGwgYmUgY2FzdCB0byBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gY29tcGFyZSh2YWx1ZSwgc2VhcmNoVGVybSkge1xuICAgIHJldHVybiAoJycgKyB2YWx1ZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRlcm0pICE9PSAtMTtcbn1cbmZ1bmN0aW9uIHNvcnRCeUtleShzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEua2V5IDwgYi5rZXkpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhLmtleSA+IGIua2V5KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zb3J0QnlLZXkgPSBzb3J0QnlLZXk7XG5mdW5jdGlvbiBzaW1wbGVHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy4nKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtzZWN0aW9uc1tpXV07XG4gICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5leHBvcnRzLnNpbXBsZUdldCA9IHNpbXBsZUdldDtcbmZ1bmN0aW9uIGZvY3VzSW5wdXQoZWwpIHtcbiAgICBlbC5mb2N1cygpO1xuICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIGVsLnZhbHVlLmxlbmd0aCk7XG59XG5leHBvcnRzLmZvY3VzSW5wdXQgPSBmb2N1c0lucHV0O1xuZnVuY3Rpb24gb3BlbkluRWRpdG9yKGZpbGUpIHtcbiAgICAvLyBDb25zb2xlIGRpc3BsYXlcbiAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKTtcbiAgICBjb25zdCBzcmMgPSBgZmV0Y2goJyR7c2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLm9wZW5JbkVkaXRvckhvc3R9X19vcGVuLWluLWVkaXRvcj9maWxlPSR7ZW5jb2RlVVJJKGZpbGUpfScpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5sb2coJ0ZpbGUgJHtmaWxlTmFtZX0gb3BlbmVkIGluIGVkaXRvcicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdPcGVuaW5nIGNvbXBvbmVudCAke2ZpbGVOYW1lfSBmYWlsZWQnXG4gICAgICBjb25zdCB0YXJnZXQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDoge31cbiAgICAgIGlmICh0YXJnZXQuX19WVUVfREVWVE9PTFNfVE9BU1RfXykge1xuICAgICAgICB0YXJnZXQuX19WVUVfREVWVE9PTFNfVE9BU1RfXyhtc2csICdlcnJvcicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnJWMnICsgbXNnLCAnY29sb3I6cmVkJylcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdDaGVjayB0aGUgc2V0dXAgb2YgeW91ciBwcm9qZWN0LCBzZWUgaHR0cHM6Ly9kZXZ0b29scy52dWVqcy5vcmcvZ3VpZGUvb3Blbi1pbi1lZGl0b3IuaHRtbCcpXG4gICAgfVxuICB9KWA7XG4gICAgaWYgKGVudl8xLmlzQ2hyb21lKSB7XG4gICAgICAgIGVudl8xLnRhcmdldC5jaHJvbWUuZGV2dG9vbHMuaW5zcGVjdGVkV2luZG93LmV2YWwoc3JjKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1ldmFsXG4gICAgICAgIGV2YWwoc3JjKTtcbiAgICB9XG59XG5leHBvcnRzLm9wZW5JbkVkaXRvciA9IG9wZW5JbkVkaXRvcjtcbmNvbnN0IEVTQyA9IHtcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICAnJic6ICcmYW1wOycsXG59O1xuZnVuY3Rpb24gZXNjYXBlKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9bPD5cIiZdL2csIGVzY2FwZUNoYXIpO1xufVxuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5mdW5jdGlvbiBlc2NhcGVDaGFyKGEpIHtcbiAgICByZXR1cm4gRVNDW2FdIHx8IGE7XG59XG5mdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQoc3RhdGUpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGR1bW15VGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGR1bW15VGV4dEFyZWEudGV4dENvbnRlbnQgPSBzdHJpbmdpZnkoc3RhdGUpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHVtbXlUZXh0QXJlYSk7XG4gICAgZHVtbXlUZXh0QXJlYS5zZWxlY3QoKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZHVtbXlUZXh0QXJlYSk7XG59XG5leHBvcnRzLmNvcHlUb0NsaXBib2FyZCA9IGNvcHlUb0NsaXBib2FyZDtcbmZ1bmN0aW9uIGlzRW1wdHlPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gZXhwb3J0cy5VTkRFRklORUQgfHwgIW9iaiB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGlzRW1wdHlPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76203\n");
|
|
483
483
|
|
|
484
484
|
/***/ }),
|
|
485
485
|
|