@vue/devtools 6.0.2 → 6.0.3

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 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.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMzIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU9BOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQUosRUFBYjtBQUVBLElBQUksUUFBUSxHQUFHLENBQWY7QUFHQSxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBSixFQUExQjs7QUFFTyxlQUFlLFdBQWYsQ0FBNEIsT0FBNUIsRUFBdUQsR0FBdkQsRUFBMEU7QUFDL0UsU0FBTyxJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sY0FBYyxDQUFDLE9BQUQsRUFBVSxHQUFWLENBQS9CLENBQVA7QUFDRDs7QUFGRDs7QUFJQSxlQUFlLGNBQWYsQ0FBK0IsT0FBL0IsRUFBMEQsR0FBMUQsRUFBNkU7QUFDM0U7QUFDQSxNQUFJLEdBQUcsQ0FBQyxVQUFKLENBQWUsSUFBZixDQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQUYsQ0FBVSxHQUFWLEtBQWtCLE9BQU8sQ0FBQyxHQUFuRCxDQUFKLEVBQTZEO0FBQzNEO0FBQ0QsR0FKMEUsQ0FNM0U7OztBQUNBLFFBQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFSLENBQWdCLFNBQWhCLENBQTBCLENBQTFCLEVBQTZCLE9BQU8sQ0FBQyxPQUFSLENBQWdCLE9BQWhCLENBQXdCLEdBQXhCLENBQTdCLENBQUQsQ0FBckM7O0FBQ0EsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFiLEVBQWdCLENBQUMsR0FBRyw0QkFBa0IsTUFBdEMsRUFBOEMsQ0FBQyxFQUEvQyxFQUFtRDtBQUNqRCxVQUFNLGNBQWMsR0FBRyw0QkFBa0IsQ0FBbEIsQ0FBdkI7O0FBQ0EsUUFBSSxjQUFjLENBQUMsZ0JBQWYsS0FBb0Msb0JBQXhDLEVBQThEO0FBQzVEO0FBQ0EsWUFBTSxPQUFPLEdBQUcsMEJBQVcsY0FBWCxFQUEyQixHQUEzQixDQUFoQjtBQUVBLFlBQU0sZUFBZSxDQUFDLE9BQUQsRUFBVSxPQUFWLEVBQW1CLEdBQW5CLENBQXJCO0FBRUE7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsZUFBZSxlQUFmLENBQWdDLE9BQWhDLEVBQTJELE9BQTNELEVBQXFGLEdBQXJGLEVBQXdHOzs7QUFDdEcsUUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBUixDQUFZLGtCQUFaLENBQStCLE9BQU8sQ0FBQyxHQUF2QyxDQUEzQjs7QUFDQSxNQUFJLFlBQUosRUFBa0I7QUFDaEIsUUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLEdBQVIsQ0FBWSwyQkFBWixDQUF3QyxZQUF4QyxDQUFQLEVBQThELElBQWxFLEVBQXdFO0FBQ3RFO0FBQ0Q7O0FBRUQsWUFBUTtBQUNSLFVBQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQVIsQ0FBWSxnQkFBWixDQUE2QixPQUFPLENBQUMsR0FBckMsRUFBMEMsUUFBUSxDQUFDLFFBQVQsRUFBMUMsQ0FBbkI7QUFDQSxVQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQVQsRUFBYywyQkFBSyxJQUFMLENBQWQsQ0FBekI7QUFFQSxVQUFNLENBQUMsRUFBRCxJQUFzQixNQUFNLE9BQU8sQ0FBQyxHQUFSLENBQVksd0JBQVosQ0FBcUMsWUFBckMsQ0FBbEM7QUFFQSxVQUFNLE1BQU0sR0FBYztBQUN4QixRQUR3QjtBQUV4QixVQUZ3QjtBQUd4QixhQUh3QjtBQUl4QixhQUp3QjtBQUt4Qiw4QkFBd0IsRUFBRSxJQUxGO0FBTXhCLGlCQUFXLEVBQUUsSUFBSSxHQUFKLEVBTlc7QUFPeEIsa0JBUHdCO0FBUXhCLGtCQUFZLEVBQUUsSUFBSSxHQUFKLEVBUlU7QUFTeEIsWUFBTSxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsYUFBaEIsR0FBZ0MsRUFBRSxDQUFDLGFBQUgsQ0FBaUIsUUFBakIsQ0FBMEIsUUFBMUQsR0FBcUUsSUFUckQ7QUFVeEIsVUFBSSxFQUFFLGFBQU8sQ0FBQyxJQUFSLE1BQVksSUFBWixJQUFZLGFBQVosR0FBWSxFQUFaLEdBQWdCO0FBVkUsS0FBMUI7QUFhQSxXQUFPLENBQUMsR0FBUixDQUFZLDJCQUFaLEdBQTBDLE1BQTFDO0FBQ0EsVUFBTSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxPQUEzQjtBQUNBLFVBQU0sQ0FBQyxXQUFQLENBQW1CLEdBQW5CLENBQXVCLE1BQXZCLEVBQStCLE1BQU0sQ0FBQyxZQUF0QztBQUNBLFVBQU0sQ0FBQyxZQUFQLENBQW9CLG9CQUFwQixHQUEyQyxNQUEzQyxDQTNCZ0IsQ0E2QmhCOztBQUNBLHFDQUFpQixNQUFqQixFQUF5QixHQUF6QjtBQUVBLE9BQUcsQ0FBQyxVQUFKLENBQWUsSUFBZixDQUFvQixNQUFwQjs7QUFFQSxRQUFJLE9BQU8sQ0FBQyxPQUFSLENBQWdCLFFBQXBCLEVBQThCO0FBQzVCLGFBQU8sQ0FBQyxPQUFSLENBQWdCLFFBQWhCLENBQXlCLE9BQU8sQ0FBQyxHQUFqQyxFQUFzQyxNQUF0QztBQUNEOztBQUVELFVBQU0sT0FBTyxDQUFDLEdBQVIsQ0FBWSxtQkFBWixDQUFnQyxPQUFPLENBQUMsR0FBeEMsQ0FBTjtBQUVBLE9BQUcsQ0FBQyxNQUFKLENBQVcsSUFBWCxDQUFnQiw0QkFBYSxnQkFBN0IsRUFBK0M7QUFDN0MsZUFBUyxFQUFFLFlBQVksQ0FBQyxNQUFEO0FBRHNCLEtBQS9DOztBQUlBLFFBQUksaUJBQWlCLENBQUMsR0FBbEIsQ0FBc0IsT0FBTyxDQUFDLEdBQTlCLENBQUosRUFBd0M7QUFDdEMsV0FBSyxNQUFNLENBQVgsSUFBZ0IsaUJBQWlCLENBQUMsR0FBbEIsQ0FBc0IsT0FBTyxDQUFDLEdBQTlCLENBQWhCLEVBQW9EO0FBQ2xELGNBQU0sQ0FBQyxDQUFDLE1BQUQsQ0FBUDtBQUNEO0FBQ0YsS0FoRGUsQ0FrRGhCOzs7QUFDQSxRQUFJLEdBQUcsQ0FBQyxnQkFBSixJQUF3QixJQUE1QixFQUFrQztBQUNoQyxZQUFNLFNBQVMsQ0FBQyxNQUFELEVBQVMsR0FBVCxDQUFmO0FBQ0Q7QUFDRixHQXRERCxNQXNETztBQUNMLFdBQU8sQ0FBQyxJQUFSLENBQWEsNkVBQWIsRUFBNEYsT0FBTyxDQUFDLEdBQXBHO0FBQ0Q7QUFDRjs7QUFFTSxlQUFlLFNBQWYsQ0FBMEIsTUFBMUIsRUFBNkMsR0FBN0MsRUFBZ0U7QUFDckUsS0FBRyxDQUFDLGdCQUFKLEdBQXVCLE1BQXZCO0FBQ0EsS0FBRyxDQUFDLDJCQUFKLEdBQWtDLE1BQU0sQ0FBQyx3QkFBekM7QUFDQSxLQUFHLENBQUMsTUFBSixDQUFXLElBQVgsQ0FBZ0IsNEJBQWEscUJBQTdCLEVBQW9EO0FBQ2xELE1BQUUsRUFBRSxNQUFNLENBQUMsRUFEdUM7QUFFbEQsNEJBQXdCLEVBQUUsTUFBTSxDQUFDO0FBRmlCLEdBQXBEO0FBSUQ7O0FBUEQ7O0FBU0EsU0FBZ0IsWUFBaEIsQ0FBOEIsTUFBOUIsRUFBK0M7QUFDN0MsU0FBTztBQUNMLE1BQUUsRUFBRSxNQUFNLENBQUMsRUFETjtBQUVMLFFBQUksRUFBRSxNQUFNLENBQUMsSUFGUjtBQUdMLFdBQU8sRUFBRSxNQUFNLENBQUMsT0FBUCxDQUFlLE9BSG5CO0FBSUwsVUFBTSxFQUFFLE1BQU0sQ0FBQztBQUpWLEdBQVA7QUFNRDs7QUFQRDtBQVNBLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBSixFQUFmOztBQUVBLFNBQWdCLGNBQWhCLENBQWdDLEdBQWhDLEVBQXFDLFNBQXJDLEVBQXVEO0FBQ3JELE1BQUksR0FBRyxDQUFDLDhCQUFKLElBQXNDLElBQTFDLEVBQWdEO0FBQzlDLFdBQU8sR0FBRyxDQUFDLDhCQUFYO0FBQ0Q7O0FBQ0QsTUFBSSxFQUFFLEdBQUcsU0FBUyxTQUFULGFBQVMsV0FBVCxlQUFhLENBQUMsUUFBUSxFQUFULEVBQWEsUUFBYixFQUF0Qjs7QUFFQSxNQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBUCxDQUFXLEVBQVgsQ0FBakIsRUFBaUM7QUFDL0IsUUFBSSxLQUFLLEdBQUcsQ0FBWjs7QUFDQSxXQUFPLE1BQU0sQ0FBQyxHQUFQLENBQVcsR0FBRyxTQUFTLElBQUksS0FBSyxFQUFoQyxDQUFQLEVBQTRDO0FBQzFDLFdBQUs7QUFDTjs7QUFDRCxNQUFFLEdBQUcsR0FBRyxTQUFTLElBQUksS0FBSyxFQUExQjtBQUNEOztBQUVELFFBQU0sQ0FBQyxHQUFQLENBQVcsRUFBWDtBQUVBLEtBQUcsQ0FBQyw4QkFBSixHQUFxQyxFQUFyQztBQUNBLFNBQU8sRUFBUDtBQUNEOztBQWxCRDs7QUFvQk8sZUFBZSxZQUFmLENBQTZCLEdBQTdCLEVBQXVDLEdBQXZDLEVBQTBEO0FBQy9ELFFBQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFKLENBQWUsSUFBZixDQUFvQixFQUFFLElBQUksRUFBRSxDQUFDLE9BQUgsQ0FBVyxHQUFYLEtBQW1CLEdBQTdDLENBQWY7O0FBQ0EsTUFBSSxNQUFKLEVBQVk7QUFDVixXQUFPLE1BQVA7QUFDRDs7QUFDRCxTQUFPLElBQUksT0FBSixDQUFZLENBQUMsT0FBRCxFQUFVLE1BQVYsS0FBb0I7QUFDckMsUUFBSSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsR0FBbEIsQ0FBc0IsR0FBdEIsQ0FBaEI7QUFDQSxRQUFJLFFBQVEsR0FBRyxLQUFmOztBQUNBLFFBQUksQ0FBQyxTQUFMLEVBQWdCO0FBQ2QsZUFBUyxHQUFHLEVBQVo7QUFDQSx1QkFBaUIsQ0FBQyxHQUFsQixDQUFzQixHQUF0QixFQUEyQixTQUEzQjtBQUNEOztBQUNELFVBQU0sRUFBRSxHQUFJLE1BQUQsSUFBVztBQUNwQixVQUFJLENBQUMsUUFBTCxFQUFlO0FBQ2Isb0JBQVksQ0FBQyxLQUFELENBQVo7QUFDQSxlQUFPLENBQUMsTUFBRCxDQUFQO0FBQ0Q7QUFDRixLQUxEOztBQU1BLGFBQVMsQ0FBQyxJQUFWLENBQWUsRUFBZjtBQUNBLFVBQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFLO0FBQzVCLGNBQVEsR0FBRyxJQUFYO0FBQ0EsWUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQVYsQ0FBa0IsRUFBbEIsQ0FBZDtBQUNBLFVBQUksS0FBSyxLQUFLLENBQUMsQ0FBZixFQUFrQixTQUFTLENBQUMsTUFBVixDQUFpQixLQUFqQixFQUF3QixDQUF4Qjs7QUFDbEIsVUFBSSwwQkFBVyxTQUFmLEVBQTBCO0FBQ3hCO0FBQ0EsZUFBTyxDQUFDLEdBQVIsQ0FBWSxrQ0FBWixFQUFnRCxHQUFoRDtBQUNEOztBQUNELFlBQU0sQ0FBQyxJQUFJLEtBQUosQ0FBVSxzQ0FBVixDQUFELENBQU47QUFDRCxLQVR1QixFQVNyQixLQVRxQixDQUF4QjtBQVVELEdBeEJNLENBQVA7QUF5QkQ7O0FBOUJEOztBQWdDQSxTQUFnQix1QkFBaEIsR0FBdUM7QUFDckMsU0FBTyxJQUFJLENBQUMsS0FBTCxDQUFXLFlBQVcsQ0FBZSxDQUFyQyxDQUFQO0FBQ0Q7O0FBRkQ7O0FBSU8sZUFBZSxRQUFmLENBQXlCLEdBQXpCLEVBQTRDO0FBQ2pELFFBQU0sVUFBVSxHQUFHLEVBQW5COztBQUVBLE9BQUssTUFBTSxTQUFYLElBQXdCLEdBQUcsQ0FBQyxVQUE1QixFQUF3QztBQUN0QyxjQUFVLENBQUMsSUFBWCxDQUFnQixTQUFoQjtBQUNEOztBQUVELEtBQUcsQ0FBQyxNQUFKLENBQVcsSUFBWCxDQUFnQiw0QkFBYSxpQkFBN0IsRUFBZ0Q7QUFDOUMsUUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFYLENBQWUsWUFBZjtBQUR3QyxHQUFoRDtBQUdEOztBQVZEOztBQVlBLFNBQVMsZUFBVCxDQUEwQixTQUExQixFQUFnRCxHQUFoRCxFQUFtRTtBQUNqRSxNQUFJO0FBQ0YsVUFBTSxDQUFDLE1BQVAsQ0FBYyxTQUFTLENBQUMsRUFBeEI7QUFDQSxVQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBSixDQUFlLE9BQWYsQ0FBdUIsU0FBdkIsQ0FBZDtBQUNBLFFBQUksS0FBSyxLQUFLLENBQUMsQ0FBZixFQUFrQixHQUFHLENBQUMsVUFBSixDQUFlLE1BQWYsQ0FBc0IsS0FBdEIsRUFBNkIsQ0FBN0I7QUFDbEIsdUNBQW1CLFNBQVMsQ0FBQyxPQUFWLENBQWtCLEdBQXJDLEVBQTBDLEdBQTFDO0FBQ0EsT0FBRyxDQUFDLE1BQUosQ0FBVyxJQUFYLENBQWdCLDRCQUFhLG1CQUE3QixFQUFrRDtBQUFFLFFBQUUsRUFBRSxTQUFTLENBQUM7QUFBaEIsS0FBbEQ7QUFDRCxHQU5ELENBTUUsT0FBTyxDQUFQLEVBQVU7QUFDVixRQUFJLDBCQUFXLFNBQWYsRUFBMEI7QUFDeEIsYUFBTyxDQUFDLEtBQVIsQ0FBYyxDQUFkO0FBQ0Q7QUFDRjtBQUNGOztBQUVNLGVBQWUsU0FBZixDQUEwQixHQUExQixFQUFvQyxHQUFwQyxFQUF1RDtBQUM1RCxNQUFJO0FBQ0YsVUFBTSxTQUFTLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRCxFQUFNLEdBQU4sQ0FBcEM7O0FBQ0EsUUFBSSxTQUFKLEVBQWU7QUFDYixxQkFBZSxDQUFDLFNBQUQsRUFBWSxHQUFaLENBQWY7QUFDRDtBQUNGLEdBTEQsQ0FLRSxPQUFPLENBQVAsRUFBVTtBQUNWLFFBQUksMEJBQVcsU0FBZixFQUEwQjtBQUN4QixhQUFPLENBQUMsS0FBUixDQUFjLENBQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBWEQsOEIsQ0FhQTs7QUFDTyxlQUFlLDBCQUFmLENBQTJDLEdBQTNDLEVBQThEO0FBQ25FO0FBQ0EsS0FBRyxDQUFDLFVBQUosQ0FBZSxPQUFmLENBQXVCLFNBQVMsSUFBRztBQUNqQyxRQUFJLFNBQVMsQ0FBQyxJQUFWLENBQWUsR0FBbkIsRUFBd0I7QUFDdEIscUJBQWUsQ0FBQyxTQUFELEVBQVksR0FBWixDQUFmO0FBQ0Q7QUFDRixHQUpEO0FBTUEsUUFBTSxJQUFJLEdBQUcsa0JBQWI7QUFDQSxNQUFJLENBQUMsT0FBTCxDQUFhLEdBQUcsSUFBRztBQUNqQixVQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBaEI7QUFDQSxlQUFXLENBQUM7QUFDVixTQURVO0FBRVYsV0FBSyxFQUFFLEVBRkc7QUFHVixhQUFPLEVBQUUsR0FBRyxDQUFDLE9BSEg7QUFJVixVQUFJLEVBQUU7QUFDSjtBQURJO0FBSkksS0FBRCxFQU9SLEdBUFEsQ0FBWDtBQVFELEdBVkQ7QUFXRDs7QUFwQkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9hcHAudHM/ZjcxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBleHBvcnRzLnJlbW92ZUFwcCA9IGV4cG9ydHMuc2VuZEFwcHMgPSBleHBvcnRzLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uID0gZXhwb3J0cy5nZXRBcHBSZWNvcmQgPSBleHBvcnRzLmdldEFwcFJlY29yZElkID0gZXhwb3J0cy5tYXBBcHBSZWNvcmQgPSBleHBvcnRzLnNlbGVjdEFwcCA9IGV4cG9ydHMucmVnaXN0ZXJBcHAgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IHNwZWFraW5ndXJsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInNwZWFraW5ndXJsXCIpKTtcbmNvbnN0IHF1ZXVlXzEgPSByZXF1aXJlKFwiLi91dGlsL3F1ZXVlXCIpO1xuY29uc3Qgc2Nhbl8xID0gcmVxdWlyZShcIi4vbGVnYWN5L3NjYW5cIik7XG5jb25zdCB0aW1lbGluZV8xID0gcmVxdWlyZShcIi4vdGltZWxpbmVcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3Qgam9icyA9IG5ldyBxdWV1ZV8xLkpvYlF1ZXVlKCk7XG5sZXQgcmVjb3JkSWQgPSAwO1xuY29uc3QgYXBwUmVjb3JkUHJvbWlzZXMgPSBuZXcgTWFwKCk7XG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcChvcHRpb25zLCBjdHgpIHtcbiAgICByZXR1cm4gam9icy5xdWV1ZSgoKSA9PiByZWdpc3RlckFwcEpvYihvcHRpb25zLCBjdHgpKTtcbn1cbmV4cG9ydHMucmVnaXN0ZXJBcHAgPSByZWdpc3RlckFwcDtcbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQXBwSm9iKG9wdGlvbnMsIGN0eCkge1xuICAgIC8vIERlZHVwZVxuICAgIGlmIChjdHguYXBwUmVjb3Jkcy5maW5kKGEgPT4gYS5vcHRpb25zLmFwcCA9PT0gb3B0aW9ucy5hcHApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmluZCBjb3JyZWN0IGJhY2tlbmRcbiAgICBjb25zdCBiYXNlRnJhbWV3b3JrVmVyc2lvbiA9IHBhcnNlSW50KG9wdGlvbnMudmVyc2lvbi5zdWJzdHJpbmcoMCwgb3B0aW9ucy52ZXJzaW9uLmluZGV4T2YoJy4nKSkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmRPcHRpb25zID0gYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzW2ldO1xuICAgICAgICBpZiAoYmFja2VuZE9wdGlvbnMuZnJhbWV3b3JrVmVyc2lvbiA9PT0gYmFzZUZyYW1ld29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIC8vIEVuYWJsZSBiYWNrZW5kIGlmIGl0J3Mgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGNvbnN0IGJhY2tlbmQgPSAoMCwgYmFja2VuZF8xLmdldEJhY2tlbmQpKGJhY2tlbmRPcHRpb25zLCBjdHgpO1xuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQXBwUmVjb3JkKG9wdGlvbnMsIGJhY2tlbmQsIGN0eCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcFJlY29yZChvcHRpb25zLCBiYWNrZW5kLCBjdHgpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgcm9vdEluc3RhbmNlID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUm9vdEluc3RhbmNlKG9wdGlvbnMuYXBwKTtcbiAgICBpZiAocm9vdEluc3RhbmNlKSB7XG4gICAgICAgIGlmICgoYXdhaXQgYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKHJvb3RJbnN0YW5jZSkpLmhpZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmRJZCsrO1xuICAgICAgICBjb25zdCBuYW1lID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUmVjb3JkTmFtZShvcHRpb25zLmFwcCwgcmVjb3JkSWQudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IGlkID0gZ2V0QXBwUmVjb3JkSWQob3B0aW9ucy5hcHAsICgwLCBzcGVha2luZ3VybF8xLmRlZmF1bHQpKG5hbWUpKTtcbiAgICAgICAgY29uc3QgW2VsXSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhyb290SW5zdGFuY2UpO1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgYmFja2VuZCxcbiAgICAgICAgICAgIGxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDogbnVsbCxcbiAgICAgICAgICAgIGluc3RhbmNlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgICByb290SW5zdGFuY2UsXG4gICAgICAgICAgICBwZXJmR3JvdXBJZHM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGlmcmFtZTogZG9jdW1lbnQgIT09IGVsLm93bmVyRG9jdW1lbnQgPyBlbC5vd25lckRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lIDogbnVsbCxcbiAgICAgICAgICAgIG1ldGE6IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/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\nfunction _legacy_getVueFromApp(app) {\n if (app.constructor.name === 'VueComponent') {\n // When Vue.extend is used the component is an instance of VueComponent instead of Vue.\n // VueComponent has a property super which points to the original Vue constructor\n return app.constructor.super;\n }\n\n return app.constructor;\n} // eslint-disable-next-line camelcase\n\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 = _legacy_getVueFromApp(app);\n\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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QVcsQ0FBQztBQUNWLFNBRFU7QUFFVixXQUFLLEVBQUUsRUFGRztBQUdWLGFBQU8sRUFBRSxHQUFHLENBQUMsT0FISDtBQUlWLFVBQUksRUFBRTtBQUNKO0FBREk7QUFKSSxLQUFELEVBT1IsR0FQUSxDQUFYO0FBUUQsR0FWRDtBQVdEOztBQXBCRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2FwcC50cz9mNzE1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcyA9IGV4cG9ydHMucmVtb3ZlQXBwID0gZXhwb3J0cy5zZW5kQXBwcyA9IGV4cG9ydHMud2FpdEZvckFwcHNSZWdpc3RyYXRpb24gPSBleHBvcnRzLmdldEFwcFJlY29yZCA9IGV4cG9ydHMuZ2V0QXBwUmVjb3JkSWQgPSBleHBvcnRzLm1hcEFwcFJlY29yZCA9IGV4cG9ydHMuc2VsZWN0QXBwID0gZXhwb3J0cy5yZWdpc3RlckFwcCA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3Qgc3BlYWtpbmd1cmxfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwic3BlYWtpbmd1cmxcIikpO1xuY29uc3QgcXVldWVfMSA9IHJlcXVpcmUoXCIuL3V0aWwvcXVldWVcIik7XG5jb25zdCBzY2FuXzEgPSByZXF1aXJlKFwiLi9sZWdhY3kvc2NhblwiKTtcbmNvbnN0IHRpbWVsaW5lXzEgPSByZXF1aXJlKFwiLi90aW1lbGluZVwiKTtcbmNvbnN0IGJhY2tlbmRfMSA9IHJlcXVpcmUoXCIuL2JhY2tlbmRcIik7XG5jb25zdCBqb2JzID0gbmV3IHF1ZXVlXzEuSm9iUXVldWUoKTtcbmxldCByZWNvcmRJZCA9IDA7XG5jb25zdCBhcHBSZWNvcmRQcm9taXNlcyA9IG5ldyBNYXAoKTtcbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQXBwKG9wdGlvbnMsIGN0eCkge1xuICAgIHJldHVybiBqb2JzLnF1ZXVlKCgpID0+IHJlZ2lzdGVyQXBwSm9iKG9wdGlvbnMsIGN0eCkpO1xufVxuZXhwb3J0cy5yZWdpc3RlckFwcCA9IHJlZ2lzdGVyQXBwO1xuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJBcHBKb2Iob3B0aW9ucywgY3R4KSB7XG4gICAgLy8gRGVkdXBlXG4gICAgaWYgKGN0eC5hcHBSZWNvcmRzLmZpbmQoYSA9PiBhLm9wdGlvbnMuYXBwID09PSBvcHRpb25zLmFwcCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBGaW5kIGNvcnJlY3QgYmFja2VuZFxuICAgIGNvbnN0IGJhc2VGcmFtZXdvcmtWZXJzaW9uID0gcGFyc2VJbnQob3B0aW9ucy52ZXJzaW9uLnN1YnN0cmluZygwLCBvcHRpb25zLnZlcnNpb24uaW5kZXhPZignLicpKSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWNrZW5kXzEuYXZhaWxhYmxlQmFja2VuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYmFja2VuZE9wdGlvbnMgPSBiYWNrZW5kXzEuYXZhaWxhYmxlQmFja2VuZHNbaV07XG4gICAgICAgIGlmIChiYWNrZW5kT3B0aW9ucy5mcmFtZXdvcmtWZXJzaW9uID09PSBiYXNlRnJhbWV3b3JrVmVyc2lvbikge1xuICAgICAgICAgICAgLy8gRW5hYmxlIGJhY2tlbmQgaWYgaXQncyBub3QgZW5hYmxlZFxuICAgICAgICAgICAgY29uc3QgYmFja2VuZCA9ICgwLCBiYWNrZW5kXzEuZ2V0QmFja2VuZCkoYmFja2VuZE9wdGlvbnMsIGN0eCk7XG4gICAgICAgICAgICBhd2FpdCBjcmVhdGVBcHBSZWNvcmQob3B0aW9ucywgYmFja2VuZCwgY3R4KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwUmVjb3JkKG9wdGlvbnMsIGJhY2tlbmQsIGN0eCkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCByb290SW5zdGFuY2UgPSBhd2FpdCBiYWNrZW5kLmFwaS5nZXRBcHBSb290SW5zdGFuY2Uob3B0aW9ucy5hcHApO1xuICAgIGlmIChyb290SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKChhd2FpdCBiYWNrZW5kLmFwaS5nZXRDb21wb25lbnREZXZ0b29sc09wdGlvbnMocm9vdEluc3RhbmNlKSkuaGlkZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlY29yZElkKys7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBhd2FpdCBiYWNrZW5kLmFwaS5nZXRBcHBSZWNvcmROYW1lKG9wdGlvbnMuYXBwLCByZWNvcmRJZC50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgaWQgPSBnZXRBcHBSZWNvcmRJZChvcHRpb25zLmFwcCwgKDAsIHNwZWFraW5ndXJsXzEuZGVmYXVsdCkobmFtZSkpO1xuICAgICAgICBjb25zdCBbZWxdID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKHJvb3RJbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBiYWNrZW5kLFxuICAgICAgICAgICAgbGFzdEluc3BlY3RlZENvbXBvbmVudElkOiBudWxsLFxuICAgICAgICAgICAgaW5zdGFuY2VNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIHJvb3RJbnN0YW5jZSxcbiAgICAgICAgICAgIHBlcmZHcm91cElkczogbmV3IE1hcCgpLFxuICAgICAgICAgICAgaWZyYW1lOiBkb2N1bWVudCAhPT0gZWwub3duZXJEb2N1bWVudCA/IGVsLm93bmVyRG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUgOiBudWxsLFxuICAgICAgICAgICAgbWV0YTogKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucy5hcHAuX19WVUVfREVWVE9PTFNfQVBQX1JFQ09SRF9fID0gcmVjb3JkO1xuICAgICAgICBjb25zdCByb290SWQgPSBgJHtyZWNvcmQuaWR9OnJvb3RgO1xuICAgICAgICByZWNvcmQuaW5zdGFuY2VNYXAuc2V0KHJvb3RJZCwgcmVjb3JkLnJvb3RJbnN0YW5jZSk7XG4gICAgICAgIHJlY29yZC5yb290SW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18gPSByb290SWQ7XG4gICAgICAgIC8vIFRpbWVsaW5lXG4gICAgICAgICgwLCB0aW1lbGluZV8xLmFkZEJ1aWx0aW5MYXllcnMpKHJlY29yZCwgY3R4KTtcbiAgICAgICAgY3R4LmFwcFJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgICBpZiAoYmFja2VuZC5vcHRpb25zLnNldHVwQXBwKSB7XG4gICAgICAgICAgICBiYWNrZW5kLm9wdGlvbnMuc2V0dXBBcHAoYmFja2VuZC5hcGksIHJlY29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYmFja2VuZC5hcGkucmVnaXN0ZXJBcHBsaWNhdGlvbihvcHRpb25zLmFwcCk7XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQVBQX0FERCwge1xuICAgICAgICAgICAgYXBwUmVjb3JkOiBtYXBBcHBSZWNvcmQocmVjb3JkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhcHBSZWNvcmRQcm9taXNlcy5oYXMob3B0aW9ucy5hcHApKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHIgb2YgYXBwUmVjb3JkUHJvbWlzZXMuZ2V0KG9wdGlvbnMuYXBwKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHIocmVjb3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBdXRvIHNlbGVjdCBmaXJzdCBhcHBcbiAgICAgICAgaWYgKGN0eC5jdXJyZW50QXBwUmVjb3JkID09IG51bGwpIHtcbiAgICAgICAgICAgIGF3YWl0IHNlbGVjdEFwcChyZWNvcmQsIGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1Z1ZSBkZXZ0b29sc10gTm8gcm9vdCBpbnN0YW5jZSBmb3VuZCBmb3IgYXBwLCBpdCBtaWdodCBoYXZlIGJlZW4gdW5tb3VudGVkJywgb3B0aW9ucy5hcHApO1xuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdEFwcChyZWNvcmQsIGN0eCkge1xuICAgIGN0eC5jdXJyZW50QXBwUmVjb3JkID0gcmVjb3JkO1xuICAgIGN0eC5jdXJyZW50SW5zcGVjdGVkQ29tcG9uZW50SWQgPSByZWNvcmQubGFzdEluc3BlY3RlZENvbXBvbmVudElkO1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQVBQX1NFTEVDVEVELCB7XG4gICAgICAgIGlkOiByZWNvcmQuaWQsXG4gICAgICAgIGxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDogcmVjb3JkLmxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZCxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VsZWN0QXBwID0gc2VsZWN0QXBwO1xuZnVuY3Rpb24gbWFwQXBwUmVjb3JkKHJlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiByZWNvcmQuaWQsXG4gICAgICAgIG5hbWU6IHJlY29yZC5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiByZWNvcmQub3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBpZnJhbWU6IHJlY29yZC5pZnJhbWUsXG4gICAgfTtcbn1cbmV4cG9ydHMubWFwQXBwUmVjb3JkID0gbWFwQXBwUmVjb3JkO1xuY29uc3QgYXBwSWRzID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gZ2V0QXBwUmVjb3JkSWQoYXBwLCBkZWZhdWx0SWQpIHtcbiAgICBpZiAoYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBhcHAuX19WVUVfREVWVE9PTFNfQVBQX1JFQ09SRF9JRF9fO1xuICAgIH1cbiAgICBsZXQgaWQgPSBkZWZhdWx0SWQgIT09IG51bGwgJiYgZGVmYXVsdElkICE9PSB2b2lkIDAgPyBkZWZhdWx0SWQgOiAocmVjb3JkSWQrKykudG9TdHJpbmcoKTtcbiAgICBpZiAoZGVmYXVsdElkICYmIGFwcElkcy5oYXMoaWQpKSB7XG4gICAgICAgIGxldCBjb3VudCA9IDE7XG4gICAgICAgIHdoaWxlIChhcHBJZHMuaGFzKGAke2RlZmF1bHRJZH06JHtjb3VudH1gKSkge1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBpZCA9IGAke2RlZmF1bHRJZH1fJHtjb3VudH1gO1xuICAgIH1cbiAgICBhcHBJZHMuYWRkKGlkKTtcbiAgICBhcHAuX19WVUVfREVWVE9PTFNfQVBQX1JFQ09SRF9JRF9fID0gaWQ7XG4gICAgcmV0dXJuIGlkO1xufVxuZXhwb3J0cy5nZXRBcHBSZWNvcmRJZCA9IGdldEFwcFJlY29yZElkO1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBwUmVjb3JkKGFwcCwgY3R4KSB7XG4gICAgY29uc3QgcmVjb3JkID0gY3R4LmFwcFJlY29yZHMuZmluZChhciA9PiBhci5vcHRpb25zLmFwcCA9PT0gYXBwKTtcbiAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXNvbHZlcnMgPSBhcHBSZWNvcmRQcm9taXNlcy5nZXQoYXBwKTtcbiAgICAgICAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gICAgICAgIGlmICghcmVzb2x2ZXJzKSB7XG4gICAgICAgICAgICByZXNvbHZlcnMgPSBbXTtcbiAgICAgICAgICAgIGFwcFJlY29yZFByb21pc2VzLnNldChhcHAsIHJlc29sdmVycyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm4gPSAocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRpbWVkT3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJlc29sdmVycy5wdXNoKGZuKTtcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVzb2x2ZXJzLmluZGV4T2YoZm4pO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgICAgICByZXNvbHZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBhcHAgcmVjb3JkJywgYXBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFRpbWVkIG91dCBnZXR0aW5nIGFwcCByZWNvcmQgZm9yIGFwcGApKTtcbiAgICAgICAgfSwgNjAwMDApO1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRBcHBSZWNvcmQgPSBnZXRBcHBSZWNvcmQ7XG5mdW5jdGlvbiB3YWl0Rm9yQXBwc1JlZ2lzdHJhdGlvbigpIHtcbiAgICByZXR1cm4gam9icy5xdWV1ZShhc3luYyAoKSA9PiB7IH0pO1xufVxuZXhwb3J0cy53YWl0Rm9yQXBwc1JlZ2lzdHJhdGlvbiA9IHdhaXRGb3JBcHBzUmVnaXN0cmF0aW9uO1xuYXN5bmMgZnVuY3Rpb24gc2VuZEFwcHMoY3R4KSB7XG4gICAgY29uc3QgYXBwUmVjb3JkcyA9IFtdO1xuICAgIGZvciAoY29uc3QgYXBwUmVjb3JkIG9mIGN0eC5hcHBSZWNvcmRzKSB7XG4gICAgICAgIGFwcFJlY29yZHMucHVzaChhcHBSZWNvcmQpO1xuICAgIH1cbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9MSVNULCB7XG4gICAgICAgIGFwcHM6IGFwcFJlY29yZHMubWFwKG1hcEFwcFJlY29yZCksXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbmRBcHBzID0gc2VuZEFwcHM7XG5mdW5jdGlvbiByZW1vdmVBcHBSZWNvcmQoYXBwUmVjb3JkLCBjdHgpIHtcbiAgICB0cnkge1xuICAgICAgICBhcHBJZHMuZGVsZXRlKGFwcFJlY29yZC5pZCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY3R4LmFwcFJlY29yZHMuaW5kZXhPZihhcHBSZWNvcmQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgY3R4LmFwcFJlY29yZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgKDAsIHRpbWVsaW5lXzEucmVtb3ZlTGF5ZXJzRm9yQXBwKShhcHBSZWNvcmQub3B0aW9ucy5hcHAsIGN0eCk7XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQVBQX1JFTU9WRSwgeyBpZDogYXBwUmVjb3JkLmlkIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiByZW1vdmVBcHAoYXBwLCBjdHgpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCBnZXRBcHBSZWNvcmQoYXBwLCBjdHgpO1xuICAgICAgICBpZiAoYXBwUmVjb3JkKSB7XG4gICAgICAgICAgICByZW1vdmVBcHBSZWNvcmQoYXBwUmVjb3JkLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMucmVtb3ZlQXBwID0gcmVtb3ZlQXBwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuZnVuY3Rpb24gX2xlZ2FjeV9nZXRWdWVGcm9tQXBwKGFwcCkge1xuICAgIGlmIChhcHAuY29uc3RydWN0b3IubmFtZSA9PT0gJ1Z1ZUNvbXBvbmVudCcpIHtcbiAgICAgICAgLy8gV2hlbiBWdWUuZXh0ZW5kIGlzIHVzZWQgdGhlIGNvbXBvbmVudCBpcyBhbiBpbnN0YW5jZSBvZiBWdWVDb21wb25lbnQgaW5zdGVhZCBvZiBWdWUuXG4gICAgICAgIC8vIFZ1ZUNvbXBvbmVudCBoYXMgYSBwcm9wZXJ0eSBzdXBlciB3aGljaCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsIFZ1ZSBjb25zdHJ1Y3RvclxuICAgICAgICByZXR1cm4gYXBwLmNvbnN0cnVjdG9yLnN1cGVyO1xuICAgIH1cbiAgICByZXR1cm4gYXBwLmNvbnN0cnVjdG9yO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuYXN5bmMgZnVuY3Rpb24gX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMoY3R4KSB7XG4gICAgLy8gUmVtb3ZlIGFwcHMgdGhhdCBhcmUgbGVnYWN5XG4gICAgY3R4LmFwcFJlY29yZHMuZm9yRWFjaChhcHBSZWNvcmQgPT4ge1xuICAgICAgICBpZiAoYXBwUmVjb3JkLm1ldGEuVnVlKSB7XG4gICAgICAgICAgICByZW1vdmVBcHBSZWNvcmQoYXBwUmVjb3JkLCBjdHgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYXBwcyA9ICgwLCBzY2FuXzEuc2NhbikoKTtcbiAgICBhcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgY29uc3QgVnVlID0gX2xlZ2FjeV9nZXRWdWVGcm9tQXBwKGFwcCk7XG4gICAgICAgIHJlZ2lzdGVyQXBwKHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgIHR5cGVzOiB7fSxcbiAgICAgICAgICAgIHZlcnNpb246IFZ1ZS52ZXJzaW9uLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAgIFZ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIGN0eCk7XG4gICAgfSk7XG59XG5leHBvcnRzLl9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzID0gX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///79132\n");
111
111
 
112
112
  /***/ }),
113
113
 
@@ -283,7 +283,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
283
283
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
284
284
 
285
285
  "use strict";
286
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getComponentParents = exports.walkTree = exports.functionalVnodeMap = exports.instanceMap = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst el_1 = __webpack_require__(66351);\n\nconst util_1 = __webpack_require__(95136);\n\nlet appRecord;\nlet api;\nconst consoleBoundInstances = Array(5);\nlet filter = '';\nconst functionalIds = new Map(); // Dedupe instances\n// Some instances may be both on a component and on a child abstract/functional component\n\nconst captureIds = new Map();\n\nasync function walkTree(instance, pFilter, api, ctx) {\n initCtx(api, ctx);\n filter = pFilter;\n functionalIds.clear();\n captureIds.clear();\n const result = flatten(await findQualifiedChildren(instance));\n return result;\n}\n\nexports.walkTree = walkTree;\n\nfunction getComponentParents(instance, api, ctx) {\n initCtx(api, ctx);\n const captureIds = new Map();\n\n const captureId = vm => {\n const id = (0, util_1.getUniqueId)(vm);\n if (captureIds.has(id)) return;\n captureIds.set(id, undefined);\n mark(vm);\n };\n\n const parents = [];\n captureId(instance);\n let parent = instance;\n\n while (parent = parent.$parent) {\n captureId(parent);\n parents.push(parent);\n }\n\n return parents;\n}\n\nexports.getComponentParents = getComponentParents;\n\nfunction initCtx(_api, ctx) {\n appRecord = ctx.currentAppRecord;\n api = _api;\n\n if (!appRecord.meta.instanceMap) {\n appRecord.meta.instanceMap = new Map();\n }\n\n exports.instanceMap = appRecord.meta.instanceMap;\n\n if (!appRecord.meta.functionalVnodeMap) {\n appRecord.meta.functionalVnodeMap = new Map();\n }\n\n exports.functionalVnodeMap = appRecord.meta.functionalVnodeMap;\n}\n/**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n */\n\n\nfunction findQualifiedChildrenFromList(instances) {\n instances = instances.filter(child => !(0, util_1.isBeingDestroyed)(child));\n return Promise.all(!filter ? instances.map(capture) : Array.prototype.concat.apply([], instances.map(findQualifiedChildren)));\n}\n/**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n */\n\n\nasync function findQualifiedChildren(instance) {\n if (isQualified(instance)) {\n return [await capture(instance)];\n } else {\n let children = await findQualifiedChildrenFromList(instance.$children); // Find functional components in recursively in non-functional vnodes.\n\n if (instance._vnode && instance._vnode.children) {\n const list = await Promise.all(flatten(instance._vnode.children.filter(child => !child.componentInstance).map(captureChild))); // Filter qualified children.\n\n const additionalChildren = list.filter(instance => isQualified(instance));\n children = children.concat(additionalChildren);\n }\n\n return children;\n }\n}\n/**\n * Get children from a component instance.\n */\n\n\nfunction getInternalInstanceChildren(instance) {\n if (instance.$children) {\n return instance.$children;\n }\n\n return [];\n}\n/**\n * Check if an instance is qualified.\n */\n\n\nfunction isQualified(instance) {\n const name = (0, shared_utils_1.classify)((0, util_1.getInstanceName)(instance)).toLowerCase();\n return name.indexOf(filter) > -1;\n}\n\nfunction flatten(items) {\n const r = items.reduce((acc, item) => {\n if (Array.isArray(item)) {\n let children = [];\n\n for (const i of item) {\n if (Array.isArray(i)) {\n children = children.concat(flatten(i));\n } else {\n children.push(i);\n }\n }\n\n acc.push(...children);\n } else if (item) {\n acc.push(item);\n }\n\n return acc;\n }, []);\n return r;\n}\n\nfunction captureChild(child) {\n if (child.fnContext && !child.componentInstance) {\n return capture(child);\n } else if (child.componentInstance) {\n if (!(0, util_1.isBeingDestroyed)(child.componentInstance)) return capture(child.componentInstance);\n } else if (child.children) {\n return Promise.all(flatten(child.children.map(captureChild)));\n }\n}\n/**\n * Capture the meta information of an instance. (recursive)\n */\n\n\nasync function capture(instance, index, list) {\n var _a, _b, _c, _d, _e, _f;\n\n if (instance.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n instance = instance.vnode;\n }\n\n if (instance.$options && instance.$options.abstract && instance._vnode && instance._vnode.componentInstance) {\n instance = instance._vnode.componentInstance;\n }\n\n if ((_b = (_a = instance.$options) === null || _a === void 0 ? void 0 : _a.devtools) === null || _b === void 0 ? void 0 : _b.hide) return; // Functional component.\n\n if (instance.fnContext && !instance.componentInstance) {\n const contextUid = instance.fnContext.__VUE_DEVTOOLS_UID__;\n let id = functionalIds.get(contextUid);\n\n if (id == null) {\n id = 0;\n } else {\n id++;\n }\n\n functionalIds.set(contextUid, id);\n const functionalId = contextUid + ':functional:' + id;\n markFunctional(functionalId, instance);\n const childrenPromise = instance.children ? instance.children.map(child => child.fnContext ? captureChild(child) : child.componentInstance ? capture(child.componentInstance) : undefined) // router-view has both fnContext and componentInstance on vnode.\n : instance.componentInstance ? [capture(instance.componentInstance)] : []; // await all childrenCapture to-be resolved\n\n const children = (await Promise.all(childrenPromise)).filter(Boolean);\n const treeNode = {\n uid: functionalId,\n id: functionalId,\n tags: [{\n label: 'functional',\n textColor: 0x555555,\n backgroundColor: 0xeeeeee\n }],\n name: (0, util_1.getInstanceName)(instance),\n renderKey: (0, util_1.getRenderKey)(instance.key),\n children,\n hasChildren: !!children.length,\n inactive: false,\n isFragment: false // TODO: Check what is it for.\n\n };\n return api.visitComponentTree(instance, treeNode, filter, (_c = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _c === void 0 ? void 0 : _c.app);\n } // instance._uid is not reliable in devtools as there\n // may be 2 roots with same _uid which causes unexpected\n // behaviour\n\n\n instance.__VUE_DEVTOOLS_UID__ = (0, util_1.getUniqueId)(instance); // Dedupe\n\n if (captureIds.has(instance.__VUE_DEVTOOLS_UID__)) {\n return;\n } else {\n captureIds.set(instance.__VUE_DEVTOOLS_UID__, undefined);\n }\n\n mark(instance);\n const name = (0, util_1.getInstanceName)(instance);\n const children = (await Promise.all((await getInternalInstanceChildren(instance)).filter(child => !(0, util_1.isBeingDestroyed)(child)).map(capture))).filter(Boolean);\n const ret = {\n uid: instance._uid,\n id: instance.__VUE_DEVTOOLS_UID__,\n name,\n renderKey: (0, util_1.getRenderKey)(instance.$vnode ? instance.$vnode.key : null),\n inactive: !!instance._inactive,\n isFragment: !!instance._isFragment,\n children,\n hasChildren: !!children.length,\n tags: [],\n meta: {}\n };\n\n if (instance._vnode && instance._vnode.children) {\n const vnodeChildren = await Promise.all(flatten(instance._vnode.children.map(captureChild)));\n ret.children = ret.children.concat(flatten(vnodeChildren).filter(Boolean));\n ret.hasChildren = !!ret.children.length;\n } // ensure correct ordering\n\n\n const rootElements = (0, el_1.getRootElementsFromComponentInstance)(instance);\n const firstElement = rootElements[0];\n\n if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.$parent;\n const parentRootElements = parentInstance ? (0, el_1.getRootElementsFromComponentInstance)(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\n ret.domOrder = indexList.reverse();\n } else {\n ret.domOrder = [-1];\n } // check if instance is available in console\n\n\n const consoleId = consoleBoundInstances.indexOf(instance.__VUE_DEVTOOLS_UID__);\n ret.consoleId = consoleId > -1 ? '$vm' + consoleId : null; // check router view\n\n const isRouterView2 = (_e = (_d = instance.$vnode) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.routerView;\n\n if (instance._routerView || isRouterView2) {\n ret.isRouterView = true;\n\n if (!instance._inactive && instance.$route) {\n const matched = instance.$route.matched;\n const depth = isRouterView2 ? instance.$vnode.data.routerViewDepth : instance._routerView.depth;\n ret.meta.matchedRouteSegment = matched && matched[depth] && (isRouterView2 ? matched[depth].path : matched[depth].handler.path);\n }\n\n ret.tags.push({\n label: `router-view${ret.meta.matchedRouteSegment ? `: ${ret.meta.matchedRouteSegment}` : ''}`,\n textColor: 0x000000,\n backgroundColor: 0xff8344\n });\n }\n\n return api.visitComponentTree(instance, ret, filter, (_f = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _f === void 0 ? void 0 : _f.app);\n}\n/**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n\n\nfunction mark(instance) {\n const refId = instance.__VUE_DEVTOOLS_UID__;\n\n if (!exports.instanceMap.has(refId)) {\n exports.instanceMap.set(refId, instance);\n appRecord.instanceMap.set(refId, instance);\n instance.$on('hook:beforeDestroy', function () {\n exports.instanceMap.delete(refId);\n });\n }\n}\n\nfunction markFunctional(id, vnode) {\n const refId = vnode.fnContext.__VUE_DEVTOOLS_UID__;\n\n if (!exports.functionalVnodeMap.has(refId)) {\n exports.functionalVnodeMap.set(refId, {});\n vnode.fnContext.$on('hook:beforeDestroy', function () {\n exports.functionalVnodeMap.delete(refId);\n });\n }\n\n exports.functionalVnodeMap.get(refId)[id] = vnode;\n appRecord.instanceMap.set(id, {\n __VUE_DEVTOOLS_UID__: id,\n __VUE_DEVTOOLS_FUNCTIONAL_LEGACY__: true,\n vnode\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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OEIsRUFBOUIsSUFBb0MsS0FBcEM7QUFFQSxXQUFTLENBQUMsV0FBVixDQUFzQixHQUF0QixDQUEwQixFQUExQixFQUE4QjtBQUM1Qix3QkFBb0IsRUFBRSxFQURNO0FBRTVCLHNDQUFrQyxFQUFFLElBRlI7QUFHNUI7QUFINEIsR0FBOUI7QUFLRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJlZS50cz80MDczIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDb21wb25lbnRQYXJlbnRzID0gZXhwb3J0cy53YWxrVHJlZSA9IGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwID0gZXhwb3J0cy5pbnN0YW5jZU1hcCA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgZWxfMSA9IHJlcXVpcmUoXCIuL2VsXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmxldCBhcHBSZWNvcmQ7XG5sZXQgYXBpO1xuY29uc3QgY29uc29sZUJvdW5kSW5zdGFuY2VzID0gQXJyYXkoNSk7XG5sZXQgZmlsdGVyID0gJyc7XG5jb25zdCBmdW5jdGlvbmFsSWRzID0gbmV3IE1hcCgpO1xuLy8gRGVkdXBlIGluc3RhbmNlc1xuLy8gU29tZSBpbnN0YW5jZXMgbWF5IGJlIGJvdGggb24gYSBjb21wb25lbnQgYW5kIG9uIGEgY2hpbGQgYWJzdHJhY3QvZnVuY3Rpb25hbCBjb21wb25lbnRcbmNvbnN0IGNhcHR1cmVJZHMgPSBuZXcgTWFwKCk7XG5hc3luYyBmdW5jdGlvbiB3YWxrVHJlZShpbnN0YW5jZSwgcEZpbHRlciwgYXBpLCBjdHgpIHtcbiAgICBpbml0Q3R4KGFwaSwgY3R4KTtcbiAgICBmaWx0ZXIgPSBwRmlsdGVyO1xuICAgIGZ1bmN0aW9uYWxJZHMuY2xlYXIoKTtcbiAgICBjYXB0dXJlSWRzLmNsZWFyKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbihhd2FpdCBmaW5kUXVhbGlmaWVkQ2hpbGRyZW4oaW5zdGFuY2UpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy53YWxrVHJlZSA9IHdhbGtUcmVlO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50UGFyZW50cyhpbnN0YW5jZSwgYXBpLCBjdHgpIHtcbiAgICBpbml0Q3R4KGFwaSwgY3R4KTtcbiAgICBjb25zdCBjYXB0dXJlSWRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGNhcHR1cmVJZCA9IHZtID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSAoMCwgdXRpbF8xLmdldFVuaXF1ZUlkKSh2bSk7XG4gICAgICAgIGlmIChjYXB0dXJlSWRzLmhhcyhpZCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhcHR1cmVJZHMuc2V0KGlkLCB1bmRlZmluZWQpO1xuICAgICAgICBtYXJrKHZtKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICBjYXB0dXJlSWQoaW5zdGFuY2UpO1xuICAgIGxldCBwYXJlbnQgPSBpbnN0YW5jZTtcbiAgICB3aGlsZSAoKHBhcmVudCA9IHBhcmVudC4kcGFyZW50KSkge1xuICAgICAgICBjYXB0dXJlSWQocGFyZW50KTtcbiAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufVxuZXhwb3J0cy5nZXRDb21wb25lbnRQYXJlbnRzID0gZ2V0Q29tcG9uZW50UGFyZW50cztcbmZ1bmN0aW9uIGluaXRDdHgoX2FwaSwgY3R4KSB7XG4gICAgYXBwUmVjb3JkID0gY3R4LmN1cnJlbnRBcHBSZWNvcmQ7XG4gICAgYXBpID0gX2FwaTtcbiAgICBpZiAoIWFwcFJlY29yZC5tZXRhLmluc3RhbmNlTWFwKSB7XG4gICAgICAgIGFwcFJlY29yZC5tZXRhLmluc3RhbmNlTWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBleHBvcnRzLmluc3RhbmNlTWFwID0gYXBwUmVjb3JkLm1ldGEuaW5zdGFuY2VNYXA7XG4gICAgaWYgKCFhcHBSZWNvcmQubWV0YS5mdW5jdGlvbmFsVm5vZGVNYXApIHtcbiAgICAgICAgYXBwUmVjb3JkLm1ldGEuZnVuY3Rpb25hbFZub2RlTWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcCA9IGFwcFJlY29yZC5tZXRhLmZ1bmN0aW9uYWxWbm9kZU1hcDtcbn1cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGFuIGFycmF5IG9mIGluc3RhbmNlcyBhbmQgZmxhdHRlbiBpdCBpbnRvXG4gKiBhbiBhcnJheSBvZiBxdWFsaWZpZWQgaW5zdGFuY2VzLiBUaGlzIGlzIGEgZGVwdGgtZmlyc3RcbiAqIHRyYXZlcnNhbCAtIGUuZy4gaWYgYW4gaW5zdGFuY2UgaXMgbm90IG1hdGNoZWQsIHdlIHdpbGxcbiAqIHJlY3Vyc2l2ZWx5IGdvIGRlZXBlciB1bnRpbCBhIHF1YWxpZmllZCBjaGlsZCBpcyBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gZmluZFF1YWxpZmllZENoaWxkcmVuRnJvbUxpc3QoaW5zdGFuY2VzKSB7XG4gICAgaW5zdGFuY2VzID0gaW5zdGFuY2VzXG4gICAgICAgIC5maWx0ZXIoY2hpbGQgPT4gISgwLCB1dGlsXzEuaXNCZWluZ0Rlc3Ryb3llZCkoY2hpbGQpKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoIWZpbHRlclxuICAgICAgICA/IGluc3RhbmNlcy5tYXAoY2FwdHVyZSlcbiAgICAgICAgOiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBpbnN0YW5jZXMubWFwKGZpbmRRdWFsaWZpZWRDaGlsZHJlbikpKTtcbn1cbi8qKlxuICogRmluZCBxdWFsaWZpZWQgY2hpbGRyZW4gZnJvbSBhIHNpbmdsZSBpbnN0YW5jZS5cbiAqIElmIHRoZSBpbnN0YW5jZSBpdHNlbGYgaXMgcXVhbGlmaWVkLCBqdXN0IHJldHVybiBpdHNlbGYuXG4gKiBUaGlzIGlzIG9rIGJlY2F1c2UgW10uY29uY2F0IHdvcmtzIGluIGJvdGggY2FzZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRRdWFsaWZpZWRDaGlsZHJlbihpbnN0YW5jZSkge1xuICAgIGlmIChpc1F1YWxpZmllZChpbnN0YW5jZSkpIHtcbiAgICAgICAgcmV0dXJuIFthd2FpdCBjYXB0dXJlKGluc3RhbmNlKV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2hpbGRyZW4gPSBhd2FpdCBmaW5kUXVhbGlmaWVkQ2hpbGRyZW5Gcm9tTGlzdChpbnN0YW5jZS4kY2hpbGRyZW4pO1xuICAgICAgICAvLyBGaW5kIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBpbiByZWN1cnNpdmVseSBpbiBub24tZnVuY3Rpb25hbCB2bm9kZXMuXG4gICAgICAgIGlmIChpbnN0YW5jZS5fdm5vZGUgJiYgaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgUHJvbWlzZS5hbGwoZmxhdHRlbihpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+ICFjaGlsZC5jb21wb25lbnRJbnN0YW5jZSkubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICAgICAgICAgIC8vIEZpbHRlciBxdWFsaWZpZWQgY2hpbGRyZW4uXG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsQ2hpbGRyZW4gPSBsaXN0LmZpbHRlcihpbnN0YW5jZSA9PiBpc1F1YWxpZmllZChpbnN0YW5jZSkpO1xuICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoYWRkaXRpb25hbENoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxufVxuLyoqXG4gKiBHZXQgY2hpbGRyZW4gZnJvbSBhIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SW50ZXJuYWxJbnN0YW5jZUNoaWxkcmVuKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLiRjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UuJGNoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gW107XG59XG4vKipcbiAqIENoZWNrIGlmIGFuIGluc3RhbmNlIGlzIHF1YWxpZmllZC5cbiAqL1xuZnVuY3Rpb24gaXNRdWFsaWZpZWQoaW5zdGFuY2UpIHtcbiAgICBjb25zdCBuYW1lID0gKDAsIHNoYXJlZF91dGlsc18xLmNsYXNzaWZ5KSgoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBuYW1lLmluZGV4T2YoZmlsdGVyKSA+IC0xO1xufVxuZnVuY3Rpb24gZmxhdHRlbihpdGVtcykge1xuICAgIGNvbnN0IHIgPSBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGZsYXR0ZW4oaSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2MucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXRlbSkge1xuICAgICAgICAgICAgYWNjLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBjYXB0dXJlQ2hpbGQoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQuZm5Db250ZXh0ICYmICFjaGlsZC5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gY2FwdHVyZShjaGlsZCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGlmICghKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSkpXG4gICAgICAgICAgICByZXR1cm4gY2FwdHVyZShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmbGF0dGVuKGNoaWxkLmNoaWxkcmVuLm1hcChjYXB0dXJlQ2hpbGQpKSk7XG4gICAgfVxufVxuLyoqXG4gKiBDYXB0dXJlIHRoZSBtZXRhIGluZm9ybWF0aW9uIG9mIGFuIGluc3RhbmNlLiAocmVjdXJzaXZlKVxuICovXG5hc3luYyBmdW5jdGlvbiBjYXB0dXJlKGluc3RhbmNlLCBpbmRleCwgbGlzdCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGlmIChpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19GVU5DVElPTkFMX0xFR0FDWV9fKSB7XG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2Uudm5vZGU7XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZS4kb3B0aW9ucyAmJiBpbnN0YW5jZS4kb3B0aW9ucy5hYnN0cmFjdCAmJiBpbnN0YW5jZS5fdm5vZGUgJiYgaW5zdGFuY2UuX3Zub2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UuX3Zub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH1cbiAgICBpZiAoKF9iID0gKF9hID0gaW5zdGFuY2UuJG9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZXZ0b29scykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhpZGUpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBGdW5jdGlvbmFsIGNvbXBvbmVudC5cbiAgICBpZiAoaW5zdGFuY2UuZm5Db250ZXh0ICYmICFpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBjb250ZXh0VWlkID0gaW5zdGFuY2UuZm5Db250ZXh0Ll9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgICAgICBsZXQgaWQgPSBmdW5jdGlvbmFsSWRzLmdldChjb250ZXh0VWlkKTtcbiAgICAgICAgaWYgKGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIGlkID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlkKys7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb25hbElkcy5zZXQoY29udGV4dFVpZCwgaWQpO1xuICAgICAgICBjb25zdCBmdW5jdGlvbmFsSWQgPSBjb250ZXh0VWlkICsgJzpmdW5jdGlvbmFsOicgKyBpZDtcbiAgICAgICAgbWFya0Z1bmN0aW9uYWwoZnVuY3Rpb25hbElkLCBpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuUHJvbWlzZSA9IChpbnN0YW5jZS5jaGlsZHJlblxuICAgICAgICAgICAgPyBpbnN0YW5jZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQuZm5Db250ZXh0XG4gICAgICAgICAgICAgICAgPyBjYXB0dXJlQ2hpbGQoY2hpbGQpXG4gICAgICAgICAgICAgICAgOiBjaGlsZC5jb21wb25lbnRJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICA/IGNhcHR1cmUoY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgLy8gcm91dGVyLXZpZXcgaGFzIGJvdGggZm5Db250ZXh0IGFuZCBjb21wb25lbnRJbnN0YW5jZSBvbiB2bm9kZS5cbiAgICAgICAgICAgIDogaW5zdGFuY2UuY29tcG9uZW50SW5zdGFuY2UgPyBbY2FwdHVyZShpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSldIDogW10pO1xuICAgICAgICAvLyBhd2FpdCBhbGwgY2hpbGRyZW5DYXB0dXJlIHRvLWJlIHJlc29sdmVkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKGF3YWl0IFByb21pc2UuYWxsKGNoaWxkcmVuUHJvbWlzZSkpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB7XG4gICAgICAgICAgICB1aWQ6IGZ1bmN0aW9uYWxJZCxcbiAgICAgICAgICAgIGlkOiBmdW5jdGlvbmFsSWQsXG4gICAgICAgICAgICB0YWdzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IDB4NTU1NTU1LFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4ZWVlZWVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbmFtZTogKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKSxcbiAgICAgICAgICAgIHJlbmRlcktleTogKDAsIHV0aWxfMS5nZXRSZW5kZXJLZXkpKGluc3RhbmNlLmtleSksXG4gICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiAhIWNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgICAgIGluYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRnJhZ21lbnQ6IGZhbHNlLCAvLyBUT0RPOiBDaGVjayB3aGF0IGlzIGl0IGZvci5cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFwaS52aXNpdENvbXBvbmVudFRyZWUoaW5zdGFuY2UsIHRyZWVOb2RlLCBmaWx0ZXIsIChfYyA9IGFwcFJlY29yZCA9PT0gbnVsbCB8fCBhcHBSZWNvcmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFwcFJlY29yZC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuYXBwKTtcbiAgICB9XG4gICAgLy8gaW5zdGFuY2UuX3VpZCBpcyBub3QgcmVsaWFibGUgaW4gZGV2dG9vbHMgYXMgdGhlcmVcbiAgICAvLyBtYXkgYmUgMiByb290cyB3aXRoIHNhbWUgX3VpZCB3aGljaCBjYXVzZXMgdW5leHBlY3RlZFxuICAgIC8vIGJlaGF2aW91clxuICAgIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVJZCkoaW5zdGFuY2UpO1xuICAgIC8vIERlZHVwZVxuICAgIGlmIChjYXB0dXJlSWRzLmhhcyhpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2FwdHVyZUlkcy5zZXQoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIG1hcmsoaW5zdGFuY2UpO1xuICAgIGNvbnN0IG5hbWUgPSAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gKGF3YWl0IFByb21pc2UuYWxsKChhd2FpdCBnZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oaW5zdGFuY2UpKVxuICAgICAgICAuZmlsdGVyKGNoaWxkID0+ICEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkKSlcbiAgICAgICAgLm1hcChjYXB0dXJlKSkpLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCByZXQgPSB7XG4gICAgICAgIHVpZDogaW5zdGFuY2UuX3VpZCxcbiAgICAgICAgaWQ6IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLFxuICAgICAgICBuYW1lLFxuICAgICAgICByZW5kZXJLZXk6ICgwLCB1dGlsXzEuZ2V0UmVuZGVyS2V5KShpbnN0YW5jZS4kdm5vZGUgPyBpbnN0YW5jZS4kdm5vZGUua2V5IDogbnVsbCksXG4gICAgICAgIGluYWN0aXZlOiAhIWluc3RhbmNlLl9pbmFjdGl2ZSxcbiAgICAgICAgaXNGcmFnbWVudDogISFpbnN0YW5jZS5faXNGcmFnbWVudCxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGhhc0NoaWxkcmVuOiAhIWNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgdGFnczogW10sXG4gICAgICAgIG1ldGE6IHt9LFxuICAgIH07XG4gICAgaWYgKGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3Qgdm5vZGVDaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKGZsYXR0ZW4oaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuLm1hcChjYXB0dXJlQ2hpbGQpKSk7XG4gICAgICAgIHJldC5jaGlsZHJlbiA9IHJldC5jaGlsZHJlbi5jb25jYXQoZmxhdHRlbih2bm9kZUNoaWxkcmVuKS5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICByZXQuaGFzQ2hpbGRyZW4gPSAhIXJldC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgfVxuICAgIC8vIGVuc3VyZSBjb3JyZWN0IG9yZGVyaW5nXG4gICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShpbnN0YW5jZSk7XG4gICAgY29uc3QgZmlyc3RFbGVtZW50ID0gcm9vdEVsZW1lbnRzWzBdO1xuICAgIGlmIChmaXJzdEVsZW1lbnQgPT09IG51bGwgfHwgZmlyc3RFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaXJzdEVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZSA9IGluc3RhbmNlLiRwYXJlbnQ7XG4gICAgICAgIGNvbnN0IHBhcmVudFJvb3RFbGVtZW50cyA9IHBhcmVudEluc3RhbmNlID8gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShwYXJlbnRJbnN0YW5jZSkgOiBbXTtcbiAgICAgICAgbGV0IGVsID0gZmlyc3RFbGVtZW50O1xuICAgICAgICBjb25zdCBpbmRleExpc3QgPSBbXTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaW5kZXhMaXN0LnB1c2goQXJyYXkuZnJvbShlbC5wYXJlbnRFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoZWwpKTtcbiAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICAgICAgfSB3aGlsZSAoZWwucGFyZW50RWxlbWVudCAmJiBwYXJlbnRSb290RWxlbWVudHMubGVuZ3RoICYmICFwYXJlbnRSb290RWxlbWVudHMuaW5jbHVkZXMoZWwpKTtcbiAgICAgICAgcmV0LmRvbU9yZGVyID0gaW5kZXhMaXN0LnJldmVyc2UoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldC5kb21PcmRlciA9IFstMV07XG4gICAgfVxuICAgIC8vIGNoZWNrIGlmIGluc3RhbmNlIGlzIGF2YWlsYWJsZSBpbiBjb25zb2xlXG4gICAgY29uc3QgY29uc29sZUlkID0gY29uc29sZUJvdW5kSW5zdGFuY2VzLmluZGV4T2YoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18pO1xuICAgIHJldC5jb25zb2xlSWQgPSBjb25zb2xlSWQgPiAtMSA/ICckdm0nICsgY29uc29sZUlkIDogbnVsbDtcbiAgICAvLyBjaGVjayByb3V0ZXIgdmlld1xuICAgIGNvbnN0IGlzUm91dGVyVmlldzIgPSAoX2UgPSAoX2QgPSBpbnN0YW5jZS4kdm5vZGUpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5kYXRhKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Uucm91dGVyVmlldztcbiAgICBpZiAoaW5zdGFuY2UuX3JvdXRlclZpZXcgfHwgaXNSb3V0ZXJWaWV3Mikge1xuICAgICAgICByZXQuaXNSb3V0ZXJWaWV3ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpbnN0YW5jZS5faW5hY3RpdmUgJiYgaW5zdGFuY2UuJHJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gaW5zdGFuY2UuJHJvdXRlLm1hdGNoZWQ7XG4gICAgICAgICAgICBjb25zdCBkZXB0aCA9IGlzUm91dGVyVmlldzJcbiAgICAgICAgICAgICAgICA/IGluc3RhbmNlLiR2bm9kZS5kYXRhLnJvdXRlclZpZXdEZXB0aFxuICAgICAgICAgICAgICAgIDogaW5zdGFuY2UuX3JvdXRlclZpZXcuZGVwdGg7XG4gICAgICAgICAgICByZXQubWV0YS5tYXRjaGVkUm91dGVTZWdtZW50ID1cbiAgICAgICAgICAgICAgICBtYXRjaGVkICYmXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZWRbZGVwdGhdICYmXG4gICAgICAgICAgICAgICAgICAgIChpc1JvdXRlclZpZXcyID8gbWF0Y2hlZFtkZXB0aF0ucGF0aCA6IG1hdGNoZWRbZGVwdGhdLmhhbmRsZXIucGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0LnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogYHJvdXRlci12aWV3JHtyZXQubWV0YS5tYXRjaGVkUm91dGVTZWdtZW50ID8gYDogJHtyZXQubWV0YS5tYXRjaGVkUm91dGVTZWdtZW50fWAgOiAnJ31gLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhmZjgzNDQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgcmV0LCBmaWx0ZXIsIChfZiA9IGFwcFJlY29yZCA9PT0gbnVsbCB8fCBhcHBSZWNvcmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFwcFJlY29yZC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuYXBwKTtcbn1cbi8qKlxuICogTWFyayBhbiBpbnN0YW5jZSBhcyBjYXB0dXJlZCBhbmQgc3RvcmUgaXQgaW4gdGhlIGluc3RhbmNlIG1hcC5cbiAqXG4gKiBAcGFyYW0ge1Z1ZX0gaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gbWFyayhpbnN0YW5jZSkge1xuICAgIGNvbnN0IHJlZklkID0gaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgaWYgKCFleHBvcnRzLmluc3RhbmNlTWFwLmhhcyhyZWZJZCkpIHtcbiAgICAgICAgZXhwb3J0cy5pbnN0YW5jZU1hcC5zZXQocmVmSWQsIGluc3RhbmNlKTtcbiAgICAgICAgYXBwUmVjb3JkLmluc3RhbmNlTWFwLnNldChyZWZJZCwgaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS4kb24oJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuaW5zdGFuY2VNYXAuZGVsZXRlKHJlZklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFya0Z1bmN0aW9uYWwoaWQsIHZub2RlKSB7XG4gICAgY29uc3QgcmVmSWQgPSB2bm9kZS5mbkNvbnRleHQuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgaWYgKCFleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5oYXMocmVmSWQpKSB7XG4gICAgICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLnNldChyZWZJZCwge30pO1xuICAgICAgICB2bm9kZS5mbkNvbnRleHQuJG9uKCdob29rOmJlZm9yZURlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5kZWxldGUocmVmSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuZ2V0KHJlZklkKVtpZF0gPSB2bm9kZTtcbiAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuc2V0KGlkLCB7XG4gICAgICAgIF9fVlVFX0RFVlRPT0xTX1VJRF9fOiBpZCxcbiAgICAgICAgX19WVUVfREVWVE9PTFNfRlVOQ1RJT05BTF9MRUdBQ1lfXzogdHJ1ZSxcbiAgICAgICAgdm5vZGUsXG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmVlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///18059\n");
286
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getComponentParents = exports.walkTree = exports.functionalVnodeMap = exports.instanceMap = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst el_1 = __webpack_require__(66351);\n\nconst util_1 = __webpack_require__(95136);\n\nlet appRecord;\nlet api;\nconst consoleBoundInstances = Array(5);\nlet filter = '';\nconst functionalIds = new Map(); // Dedupe instances\n// Some instances may be both on a component and on a child abstract/functional component\n\nconst captureIds = new Map();\n\nasync function walkTree(instance, pFilter, api, ctx) {\n initCtx(api, ctx);\n filter = pFilter;\n functionalIds.clear();\n captureIds.clear();\n const result = flatten(await findQualifiedChildren(instance));\n return result;\n}\n\nexports.walkTree = walkTree;\n\nfunction getComponentParents(instance, api, ctx) {\n initCtx(api, ctx);\n const captureIds = new Map();\n\n const captureId = vm => {\n const id = (0, util_1.getUniqueId)(vm);\n if (captureIds.has(id)) return;\n captureIds.set(id, undefined);\n\n if (vm.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n markFunctional(id, vm.vnode);\n } else {\n mark(vm);\n }\n };\n\n const parents = [];\n captureId(instance);\n let parent = instance;\n\n while (parent = parent.$parent) {\n captureId(parent);\n parents.push(parent);\n }\n\n return parents;\n}\n\nexports.getComponentParents = getComponentParents;\n\nfunction initCtx(_api, ctx) {\n appRecord = ctx.currentAppRecord;\n api = _api;\n\n if (!appRecord.meta.instanceMap) {\n appRecord.meta.instanceMap = new Map();\n }\n\n exports.instanceMap = appRecord.meta.instanceMap;\n\n if (!appRecord.meta.functionalVnodeMap) {\n appRecord.meta.functionalVnodeMap = new Map();\n }\n\n exports.functionalVnodeMap = appRecord.meta.functionalVnodeMap;\n}\n/**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n */\n\n\nfunction findQualifiedChildrenFromList(instances) {\n instances = instances.filter(child => !(0, util_1.isBeingDestroyed)(child));\n return Promise.all(!filter ? instances.map(capture) : Array.prototype.concat.apply([], instances.map(findQualifiedChildren)));\n}\n/**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n */\n\n\nasync function findQualifiedChildren(instance) {\n if (isQualified(instance)) {\n return [await capture(instance)];\n } else {\n let children = await findQualifiedChildrenFromList(instance.$children); // Find functional components in recursively in non-functional vnodes.\n\n if (instance._vnode && instance._vnode.children) {\n const list = await Promise.all(flatten(instance._vnode.children.filter(child => !child.componentInstance).map(captureChild))); // Filter qualified children.\n\n const additionalChildren = list.filter(instance => isQualified(instance));\n children = children.concat(additionalChildren);\n }\n\n return children;\n }\n}\n/**\n * Get children from a component instance.\n */\n\n\nfunction getInternalInstanceChildren(instance) {\n if (instance.$children) {\n return instance.$children;\n }\n\n return [];\n}\n/**\n * Check if an instance is qualified.\n */\n\n\nfunction isQualified(instance) {\n const name = (0, shared_utils_1.classify)((0, util_1.getInstanceName)(instance)).toLowerCase();\n return name.indexOf(filter) > -1;\n}\n\nfunction flatten(items) {\n const r = items.reduce((acc, item) => {\n if (Array.isArray(item)) {\n let children = [];\n\n for (const i of item) {\n if (Array.isArray(i)) {\n children = children.concat(flatten(i));\n } else {\n children.push(i);\n }\n }\n\n acc.push(...children);\n } else if (item) {\n acc.push(item);\n }\n\n return acc;\n }, []);\n return r;\n}\n\nfunction captureChild(child) {\n if (child.fnContext && !child.componentInstance) {\n return capture(child);\n } else if (child.componentInstance) {\n if (!(0, util_1.isBeingDestroyed)(child.componentInstance)) return capture(child.componentInstance);\n } else if (child.children) {\n return Promise.all(flatten(child.children.map(captureChild)));\n }\n}\n/**\n * Capture the meta information of an instance. (recursive)\n */\n\n\nasync function capture(instance, index, list) {\n var _a, _b, _c, _d, _e, _f;\n\n if (instance.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n instance = instance.vnode;\n }\n\n if (instance.$options && instance.$options.abstract && instance._vnode && instance._vnode.componentInstance) {\n instance = instance._vnode.componentInstance;\n }\n\n if ((_b = (_a = instance.$options) === null || _a === void 0 ? void 0 : _a.devtools) === null || _b === void 0 ? void 0 : _b.hide) return; // Functional component.\n\n if (instance.fnContext && !instance.componentInstance) {\n const contextUid = instance.fnContext.__VUE_DEVTOOLS_UID__;\n let id = functionalIds.get(contextUid);\n\n if (id == null) {\n id = 0;\n } else {\n id++;\n }\n\n functionalIds.set(contextUid, id);\n const functionalId = contextUid + ':functional:' + id;\n markFunctional(functionalId, instance);\n const childrenPromise = instance.children ? instance.children.map(child => child.fnContext ? captureChild(child) : child.componentInstance ? capture(child.componentInstance) : undefined) // router-view has both fnContext and componentInstance on vnode.\n : instance.componentInstance ? [capture(instance.componentInstance)] : []; // await all childrenCapture to-be resolved\n\n const children = (await Promise.all(childrenPromise)).filter(Boolean);\n const treeNode = {\n uid: functionalId,\n id: functionalId,\n tags: [{\n label: 'functional',\n textColor: 0x555555,\n backgroundColor: 0xeeeeee\n }],\n name: (0, util_1.getInstanceName)(instance),\n renderKey: (0, util_1.getRenderKey)(instance.key),\n children,\n hasChildren: !!children.length,\n inactive: false,\n isFragment: false // TODO: Check what is it for.\n\n };\n return api.visitComponentTree(instance, treeNode, filter, (_c = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _c === void 0 ? void 0 : _c.app);\n } // instance._uid is not reliable in devtools as there\n // may be 2 roots with same _uid which causes unexpected\n // behaviour\n\n\n instance.__VUE_DEVTOOLS_UID__ = (0, util_1.getUniqueId)(instance); // Dedupe\n\n if (captureIds.has(instance.__VUE_DEVTOOLS_UID__)) {\n return;\n } else {\n captureIds.set(instance.__VUE_DEVTOOLS_UID__, undefined);\n }\n\n mark(instance);\n const name = (0, util_1.getInstanceName)(instance);\n const children = (await Promise.all((await getInternalInstanceChildren(instance)).filter(child => !(0, util_1.isBeingDestroyed)(child)).map(capture))).filter(Boolean);\n const ret = {\n uid: instance._uid,\n id: instance.__VUE_DEVTOOLS_UID__,\n name,\n renderKey: (0, util_1.getRenderKey)(instance.$vnode ? instance.$vnode.key : null),\n inactive: !!instance._inactive,\n isFragment: !!instance._isFragment,\n children,\n hasChildren: !!children.length,\n tags: [],\n meta: {}\n };\n\n if (instance._vnode && instance._vnode.children) {\n const vnodeChildren = await Promise.all(flatten(instance._vnode.children.map(captureChild)));\n ret.children = ret.children.concat(flatten(vnodeChildren).filter(Boolean));\n ret.hasChildren = !!ret.children.length;\n } // ensure correct ordering\n\n\n const rootElements = (0, el_1.getRootElementsFromComponentInstance)(instance);\n const firstElement = rootElements[0];\n\n if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.$parent;\n const parentRootElements = parentInstance ? (0, el_1.getRootElementsFromComponentInstance)(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\n ret.domOrder = indexList.reverse();\n } else {\n ret.domOrder = [-1];\n } // check if instance is available in console\n\n\n const consoleId = consoleBoundInstances.indexOf(instance.__VUE_DEVTOOLS_UID__);\n ret.consoleId = consoleId > -1 ? '$vm' + consoleId : null; // check router view\n\n const isRouterView2 = (_e = (_d = instance.$vnode) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.routerView;\n\n if (instance._routerView || isRouterView2) {\n ret.isRouterView = true;\n\n if (!instance._inactive && instance.$route) {\n const matched = instance.$route.matched;\n const depth = isRouterView2 ? instance.$vnode.data.routerViewDepth : instance._routerView.depth;\n ret.meta.matchedRouteSegment = matched && matched[depth] && (isRouterView2 ? matched[depth].path : matched[depth].handler.path);\n }\n\n ret.tags.push({\n label: `router-view${ret.meta.matchedRouteSegment ? `: ${ret.meta.matchedRouteSegment}` : ''}`,\n textColor: 0x000000,\n backgroundColor: 0xff8344\n });\n }\n\n return api.visitComponentTree(instance, ret, filter, (_f = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _f === void 0 ? void 0 : _f.app);\n}\n/**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n\n\nfunction mark(instance) {\n const refId = instance.__VUE_DEVTOOLS_UID__;\n\n if (!exports.instanceMap.has(refId)) {\n exports.instanceMap.set(refId, instance);\n appRecord.instanceMap.set(refId, instance);\n instance.$on('hook:beforeDestroy', function () {\n exports.instanceMap.delete(refId);\n });\n }\n}\n\nfunction markFunctional(id, vnode) {\n const refId = vnode.fnContext.__VUE_DEVTOOLS_UID__;\n\n if (!exports.functionalVnodeMap.has(refId)) {\n exports.functionalVnodeMap.set(refId, {});\n vnode.fnContext.$on('hook:beforeDestroy', function () {\n exports.functionalVnodeMap.delete(refId);\n });\n }\n\n exports.functionalVnodeMap.get(refId)[id] = vnode;\n appRecord.instanceMap.set(id, {\n __VUE_DEVTOOLS_UID__: id,\n __VUE_DEVTOOLS_FUNCTIONAL_LEGACY__: true,\n vnode\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQW9CLG9CQUFwQixFQUEwQztBQUN4QyxpQ0FBbUIsTUFBbkIsQ0FBMEIsS0FBMUI7QUFDRCxLQUZEO0FBR0Q7O0FBRUQsNkJBQW1CLEdBQW5CLENBQXVCLEtBQXZCLEVBQThCLEVBQTlCLElBQW9DLEtBQXBDO0FBRUEsV0FBUyxDQUFDLFdBQVYsQ0FBc0IsR0FBdEIsQ0FBMEIsRUFBMUIsRUFBOEI7QUFDNUIsd0JBQW9CLEVBQUUsRUFETTtBQUU1QixzQ0FBa0MsRUFBRSxJQUZSO0FBRzVCO0FBSDRCLEdBQTlCO0FBS0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyZWUudHM/NDA3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Q29tcG9uZW50UGFyZW50cyA9IGV4cG9ydHMud2Fsa1RyZWUgPSBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcCA9IGV4cG9ydHMuaW5zdGFuY2VNYXAgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IGVsXzEgPSByZXF1aXJlKFwiLi9lbFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5sZXQgYXBwUmVjb3JkO1xubGV0IGFwaTtcbmNvbnN0IGNvbnNvbGVCb3VuZEluc3RhbmNlcyA9IEFycmF5KDUpO1xubGV0IGZpbHRlciA9ICcnO1xuY29uc3QgZnVuY3Rpb25hbElkcyA9IG5ldyBNYXAoKTtcbi8vIERlZHVwZSBpbnN0YW5jZXNcbi8vIFNvbWUgaW5zdGFuY2VzIG1heSBiZSBib3RoIG9uIGEgY29tcG9uZW50IGFuZCBvbiBhIGNoaWxkIGFic3RyYWN0L2Z1bmN0aW9uYWwgY29tcG9uZW50XG5jb25zdCBjYXB0dXJlSWRzID0gbmV3IE1hcCgpO1xuYXN5bmMgZnVuY3Rpb24gd2Fsa1RyZWUoaW5zdGFuY2UsIHBGaWx0ZXIsIGFwaSwgY3R4KSB7XG4gICAgaW5pdEN0eChhcGksIGN0eCk7XG4gICAgZmlsdGVyID0gcEZpbHRlcjtcbiAgICBmdW5jdGlvbmFsSWRzLmNsZWFyKCk7XG4gICAgY2FwdHVyZUlkcy5jbGVhcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW4oYXdhaXQgZmluZFF1YWxpZmllZENoaWxkcmVuKGluc3RhbmNlKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMud2Fsa1RyZWUgPSB3YWxrVHJlZTtcbmZ1bmN0aW9uIGdldENvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UsIGFwaSwgY3R4KSB7XG4gICAgaW5pdEN0eChhcGksIGN0eCk7XG4gICAgY29uc3QgY2FwdHVyZUlkcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBjYXB0dXJlSWQgPSB2bSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVJZCkodm0pO1xuICAgICAgICBpZiAoY2FwdHVyZUlkcy5oYXMoaWQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXB0dXJlSWRzLnNldChpZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKHZtLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgICAgIG1hcmtGdW5jdGlvbmFsKGlkLCB2bS52bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtYXJrKHZtKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgIGNhcHR1cmVJZChpbnN0YW5jZSk7XG4gICAgbGV0IHBhcmVudCA9IGluc3RhbmNlO1xuICAgIHdoaWxlICgocGFyZW50ID0gcGFyZW50LiRwYXJlbnQpKSB7XG4gICAgICAgIGNhcHR1cmVJZChwYXJlbnQpO1xuICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59XG5leHBvcnRzLmdldENvbXBvbmVudFBhcmVudHMgPSBnZXRDb21wb25lbnRQYXJlbnRzO1xuZnVuY3Rpb24gaW5pdEN0eChfYXBpLCBjdHgpIHtcbiAgICBhcHBSZWNvcmQgPSBjdHguY3VycmVudEFwcFJlY29yZDtcbiAgICBhcGkgPSBfYXBpO1xuICAgIGlmICghYXBwUmVjb3JkLm1ldGEuaW5zdGFuY2VNYXApIHtcbiAgICAgICAgYXBwUmVjb3JkLm1ldGEuaW5zdGFuY2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGV4cG9ydHMuaW5zdGFuY2VNYXAgPSBhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcDtcbiAgICBpZiAoIWFwcFJlY29yZC5tZXRhLmZ1bmN0aW9uYWxWbm9kZU1hcCkge1xuICAgICAgICBhcHBSZWNvcmQubWV0YS5mdW5jdGlvbmFsVm5vZGVNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwID0gYXBwUmVjb3JkLm1ldGEuZnVuY3Rpb25hbFZub2RlTWFwO1xufVxuLyoqXG4gKiBJdGVyYXRlIHRocm91Z2ggYW4gYXJyYXkgb2YgaW5zdGFuY2VzIGFuZCBmbGF0dGVuIGl0IGludG9cbiAqIGFuIGFycmF5IG9mIHF1YWxpZmllZCBpbnN0YW5jZXMuIFRoaXMgaXMgYSBkZXB0aC1maXJzdFxuICogdHJhdmVyc2FsIC0gZS5nLiBpZiBhbiBpbnN0YW5jZSBpcyBub3QgbWF0Y2hlZCwgd2Ugd2lsbFxuICogcmVjdXJzaXZlbHkgZ28gZGVlcGVyIHVudGlsIGEgcXVhbGlmaWVkIGNoaWxkIGlzIGZvdW5kLlxuICovXG5mdW5jdGlvbiBmaW5kUXVhbGlmaWVkQ2hpbGRyZW5Gcm9tTGlzdChpbnN0YW5jZXMpIHtcbiAgICBpbnN0YW5jZXMgPSBpbnN0YW5jZXNcbiAgICAgICAgLmZpbHRlcihjaGlsZCA9PiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbCghZmlsdGVyXG4gICAgICAgID8gaW5zdGFuY2VzLm1hcChjYXB0dXJlKVxuICAgICAgICA6IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGluc3RhbmNlcy5tYXAoZmluZFF1YWxpZmllZENoaWxkcmVuKSkpO1xufVxuLyoqXG4gKiBGaW5kIHF1YWxpZmllZCBjaGlsZHJlbiBmcm9tIGEgc2luZ2xlIGluc3RhbmNlLlxuICogSWYgdGhlIGluc3RhbmNlIGl0c2VsZiBpcyBxdWFsaWZpZWQsIGp1c3QgcmV0dXJuIGl0c2VsZi5cbiAqIFRoaXMgaXMgb2sgYmVjYXVzZSBbXS5jb25jYXQgd29ya3MgaW4gYm90aCBjYXNlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZFF1YWxpZmllZENoaWxkcmVuKGluc3RhbmNlKSB7XG4gICAgaWYgKGlzUXVhbGlmaWVkKGluc3RhbmNlKSkge1xuICAgICAgICByZXR1cm4gW2F3YWl0IGNhcHR1cmUoaW5zdGFuY2UpXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBjaGlsZHJlbiA9IGF3YWl0IGZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KGluc3RhbmNlLiRjaGlsZHJlbik7XG4gICAgICAgIC8vIEZpbmQgZnVuY3Rpb25hbCBjb21wb25lbnRzIGluIHJlY3Vyc2l2ZWx5IGluIG5vbi1mdW5jdGlvbmFsIHZub2Rlcy5cbiAgICAgICAgaWYgKGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBQcm9taXNlLmFsbChmbGF0dGVuKGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gIWNoaWxkLmNvbXBvbmVudEluc3RhbmNlKS5tYXAoY2FwdHVyZUNoaWxkKSkpO1xuICAgICAgICAgICAgLy8gRmlsdGVyIHF1YWxpZmllZCBjaGlsZHJlbi5cbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDaGlsZHJlbiA9IGxpc3QuZmlsdGVyKGluc3RhbmNlID0+IGlzUXVhbGlmaWVkKGluc3RhbmNlKSk7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChhZGRpdGlvbmFsQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG59XG4vKipcbiAqIEdldCBjaGlsZHJlbiBmcm9tIGEgY29tcG9uZW50IGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBnZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oaW5zdGFuY2UpIHtcbiAgICBpZiAoaW5zdGFuY2UuJGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS4kY2hpbGRyZW47XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gaW5zdGFuY2UgaXMgcXVhbGlmaWVkLlxuICovXG5mdW5jdGlvbiBpc1F1YWxpZmllZChpbnN0YW5jZSkge1xuICAgIGNvbnN0IG5hbWUgPSAoMCwgc2hhcmVkX3V0aWxzXzEuY2xhc3NpZnkpKCgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIG5hbWUuaW5kZXhPZihmaWx0ZXIpID4gLTE7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGl0ZW1zKSB7XG4gICAgY29uc3QgciA9IGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoZmxhdHRlbihpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIGNhcHR1cmVDaGlsZChjaGlsZCkge1xuICAgIGlmIChjaGlsZC5mbkNvbnRleHQgJiYgIWNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSlcbiAgICAgICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZsYXR0ZW4oY2hpbGQuY2hpbGRyZW4ubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICB9XG59XG4vKipcbiAqIENhcHR1cmUgdGhlIG1ldGEgaW5mb3JtYXRpb24gb2YgYW4gaW5zdGFuY2UuIChyZWN1cnNpdmUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmUoaW5zdGFuY2UsIGluZGV4LCBsaXN0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgaWYgKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS52bm9kZTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLiRvcHRpb25zICYmIGluc3RhbmNlLiRvcHRpb25zLmFic3RyYWN0ICYmIGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoX2IgPSAoX2EgPSBpbnN0YW5jZS4kb3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRldnRvb2xzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGlkZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEZ1bmN0aW9uYWwgY29tcG9uZW50LlxuICAgIGlmIChpbnN0YW5jZS5mbkNvbnRleHQgJiYgIWluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRVaWQgPSBpbnN0YW5jZS5mbkNvbnRleHQuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgICAgIGxldCBpZCA9IGZ1bmN0aW9uYWxJZHMuZ2V0KGNvbnRleHRVaWQpO1xuICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgaWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQrKztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbmFsSWRzLnNldChjb250ZXh0VWlkLCBpZCk7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxJZCA9IGNvbnRleHRVaWQgKyAnOmZ1bmN0aW9uYWw6JyArIGlkO1xuICAgICAgICBtYXJrRnVuY3Rpb25hbChmdW5jdGlvbmFsSWQsIGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Qcm9taXNlID0gKGluc3RhbmNlLmNoaWxkcmVuXG4gICAgICAgICAgICA/IGluc3RhbmNlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5mbkNvbnRleHRcbiAgICAgICAgICAgICAgICA/IGNhcHR1cmVDaGlsZChjaGlsZClcbiAgICAgICAgICAgICAgICA6IGNoaWxkLmNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgID8gY2FwdHVyZShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgICAgICAgICAvLyByb3V0ZXItdmlldyBoYXMgYm90aCBmbkNvbnRleHQgYW5kIGNvbXBvbmVudEluc3RhbmNlIG9uIHZub2RlLlxuICAgICAgICAgICAgOiBpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSA/IFtjYXB0dXJlKGluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKV0gOiBbXSk7XG4gICAgICAgIC8vIGF3YWl0IGFsbCBjaGlsZHJlbkNhcHR1cmUgdG8tYmUgcmVzb2x2ZWRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgUHJvbWlzZS5hbGwoY2hpbGRyZW5Qcm9taXNlKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgIHVpZDogZnVuY3Rpb25hbElkLFxuICAgICAgICAgICAgaWQ6IGZ1bmN0aW9uYWxJZCxcbiAgICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMHg1NTU1NTUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhlZWVlZWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBuYW1lOiAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpLFxuICAgICAgICAgICAgcmVuZGVyS2V5OiAoMCwgdXRpbF8xLmdldFJlbmRlcktleSkoaW5zdGFuY2Uua2V5KSxcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46ICEhY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICAgICAgaW5hY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgaXNGcmFnbWVudDogZmFsc2UsIC8vIFRPRE86IENoZWNrIHdoYXQgaXMgaXQgZm9yLlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIGZpbHRlciwgKF9jID0gYXBwUmVjb3JkID09PSBudWxsIHx8IGFwcFJlY29yZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwUmVjb3JkLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hcHApO1xuICAgIH1cbiAgICAvLyBpbnN0YW5jZS5fdWlkIGlzIG5vdCByZWxpYWJsZSBpbiBkZXZ0b29scyBhcyB0aGVyZVxuICAgIC8vIG1heSBiZSAyIHJvb3RzIHdpdGggc2FtZSBfdWlkIHdoaWNoIGNhdXNlcyB1bmV4cGVjdGVkXG4gICAgLy8gYmVoYXZpb3VyXG4gICAgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18gPSAoMCwgdXRpbF8xLmdldFVuaXF1ZUlkKShpbnN0YW5jZSk7XG4gICAgLy8gRGVkdXBlXG4gICAgaWYgKGNhcHR1cmVJZHMuaGFzKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjYXB0dXJlSWRzLnNldChpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXywgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgbWFyayhpbnN0YW5jZSk7XG4gICAgY29uc3QgbmFtZSA9ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgUHJvbWlzZS5hbGwoKGF3YWl0IGdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihpbnN0YW5jZSkpXG4gICAgICAgIC5maWx0ZXIoY2hpbGQgPT4gISgwLCB1dGlsXzEuaXNCZWluZ0Rlc3Ryb3llZCkoY2hpbGQpKVxuICAgICAgICAubWFwKGNhcHR1cmUpKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgICAgdWlkOiBpbnN0YW5jZS5fdWlkLFxuICAgICAgICBpZDogaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJlbmRlcktleTogKDAsIHV0aWxfMS5nZXRSZW5kZXJLZXkpKGluc3RhbmNlLiR2bm9kZSA/IGluc3RhbmNlLiR2bm9kZS5rZXkgOiBudWxsKSxcbiAgICAgICAgaW5hY3RpdmU6ICEhaW5zdGFuY2UuX2luYWN0aXZlLFxuICAgICAgICBpc0ZyYWdtZW50OiAhIWluc3RhbmNlLl9pc0ZyYWdtZW50LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgaGFzQ2hpbGRyZW46ICEhY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgbWV0YToge30sXG4gICAgfTtcbiAgICBpZiAoaW5zdGFuY2UuX3Zub2RlICYmIGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCB2bm9kZUNoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoZmxhdHRlbihpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4ubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICAgICAgcmV0LmNoaWxkcmVuID0gcmV0LmNoaWxkcmVuLmNvbmNhdChmbGF0dGVuKHZub2RlQ2hpbGRyZW4pLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICAgIHJldC5oYXNDaGlsZHJlbiA9ICEhcmV0LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgLy8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmdcbiAgICBjb25zdCByb290RWxlbWVudHMgPSAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKGluc3RhbmNlKTtcbiAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSByb290RWxlbWVudHNbMF07XG4gICAgaWYgKGZpcnN0RWxlbWVudCA9PT0gbnVsbCB8fCBmaXJzdEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlID0gaW5zdGFuY2UuJHBhcmVudDtcbiAgICAgICAgY29uc3QgcGFyZW50Um9vdEVsZW1lbnRzID0gcGFyZW50SW5zdGFuY2UgPyAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKHBhcmVudEluc3RhbmNlKSA6IFtdO1xuICAgICAgICBsZXQgZWwgPSBmaXJzdEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGluZGV4TGlzdCA9IFtdO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpbmRleExpc3QucHVzaChBcnJheS5mcm9tKGVsLnBhcmVudEVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihlbCkpO1xuICAgICAgICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9IHdoaWxlIChlbC5wYXJlbnRFbGVtZW50ICYmIHBhcmVudFJvb3RFbGVtZW50cy5sZW5ndGggJiYgIXBhcmVudFJvb3RFbGVtZW50cy5pbmNsdWRlcyhlbCkpO1xuICAgICAgICByZXQuZG9tT3JkZXIgPSBpbmRleExpc3QucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0LmRvbU9yZGVyID0gWy0xXTtcbiAgICB9XG4gICAgLy8gY2hlY2sgaWYgaW5zdGFuY2UgaXMgYXZhaWxhYmxlIGluIGNvbnNvbGVcbiAgICBjb25zdCBjb25zb2xlSWQgPSBjb25zb2xlQm91bmRJbnN0YW5jZXMuaW5kZXhPZihpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyk7XG4gICAgcmV0LmNvbnNvbGVJZCA9IGNvbnNvbGVJZCA+IC0xID8gJyR2bScgKyBjb25zb2xlSWQgOiBudWxsO1xuICAgIC8vIGNoZWNrIHJvdXRlciB2aWV3XG4gICAgY29uc3QgaXNSb3V0ZXJWaWV3MiA9IChfZSA9IChfZCA9IGluc3RhbmNlLiR2bm9kZSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmRhdGEpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5yb3V0ZXJWaWV3O1xuICAgIGlmIChpbnN0YW5jZS5fcm91dGVyVmlldyB8fCBpc1JvdXRlclZpZXcyKSB7XG4gICAgICAgIHJldC5pc1JvdXRlclZpZXcgPSB0cnVlO1xuICAgICAgICBpZiAoIWluc3RhbmNlLl9pbmFjdGl2ZSAmJiBpbnN0YW5jZS4kcm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBpbnN0YW5jZS4kcm91dGUubWF0Y2hlZDtcbiAgICAgICAgICAgIGNvbnN0IGRlcHRoID0gaXNSb3V0ZXJWaWV3MlxuICAgICAgICAgICAgICAgID8gaW5zdGFuY2UuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXG4gICAgICAgICAgICAgICAgOiBpbnN0YW5jZS5fcm91dGVyVmlldy5kZXB0aDtcbiAgICAgICAgICAgIHJldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnQgPVxuICAgICAgICAgICAgICAgIG1hdGNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFtkZXB0aF0gJiZcbiAgICAgICAgICAgICAgICAgICAgKGlzUm91dGVyVmlldzIgPyBtYXRjaGVkW2RlcHRoXS5wYXRoIDogbWF0Y2hlZFtkZXB0aF0uaGFuZGxlci5wYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXQudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBgcm91dGVyLXZpZXcke3JldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnQgPyBgOiAke3JldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnR9YCA6ICcnfWAsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDB4MDAwMDAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweGZmODM0NCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhcGkudmlzaXRDb21wb25lbnRUcmVlKGluc3RhbmNlLCByZXQsIGZpbHRlciwgKF9mID0gYXBwUmVjb3JkID09PSBudWxsIHx8IGFwcFJlY29yZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwUmVjb3JkLm9wdGlvbnMpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5hcHApO1xufVxuLyoqXG4gKiBNYXJrIGFuIGluc3RhbmNlIGFzIGNhcHR1cmVkIGFuZCBzdG9yZSBpdCBpbiB0aGUgaW5zdGFuY2UgbWFwLlxuICpcbiAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBtYXJrKGluc3RhbmNlKSB7XG4gICAgY29uc3QgcmVmSWQgPSBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXztcbiAgICBpZiAoIWV4cG9ydHMuaW5zdGFuY2VNYXAuaGFzKHJlZklkKSkge1xuICAgICAgICBleHBvcnRzLmluc3RhbmNlTWFwLnNldChyZWZJZCwgaW5zdGFuY2UpO1xuICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuc2V0KHJlZklkLCBpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLiRvbignaG9vazpiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwb3J0cy5pbnN0YW5jZU1hcC5kZWxldGUocmVmSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYXJrRnVuY3Rpb25hbChpZCwgdm5vZGUpIHtcbiAgICBjb25zdCByZWZJZCA9IHZub2RlLmZuQ29udGV4dC5fX1ZVRV9ERVZUT09MU19VSURfXztcbiAgICBpZiAoIWV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmhhcyhyZWZJZCkpIHtcbiAgICAgICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuc2V0KHJlZklkLCB7fSk7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dC4kb24oJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmRlbGV0ZShyZWZJZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5nZXQocmVmSWQpW2lkXSA9IHZub2RlO1xuICAgIGFwcFJlY29yZC5pbnN0YW5jZU1hcC5zZXQoaWQsIHtcbiAgICAgICAgX19WVUVfREVWVE9PTFNfVUlEX186IGlkLFxuICAgICAgICBfX1ZVRV9ERVZUT09MU19GVU5DVElPTkFMX0xFR0FDWV9fOiB0cnVlLFxuICAgICAgICB2bm9kZSxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyZWUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18059\n");
287
287
 
288
288
  /***/ }),
289
289