@vue/devtools 6.0.7 → 6.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/backend.js +1 -1
- package/package.json +1 -1
package/build/backend.js
CHANGED
|
@@ -107,7 +107,7 @@ Object.defineProperty(exports, "__esModule", ({
|
|
|
107
107
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
108
108
|
|
|
109
109
|
"use strict";
|
|
110
|
-
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports._legacy_getAndRegisterApps = exports.removeApp = exports.sendApps = exports.waitForAppsRegistration = exports.getAppRecord = exports.getAppRecordId = exports.mapAppRecord = exports.selectApp = exports.registerApp = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst speakingurl_1 = __importDefault(__webpack_require__(97500));\n\nconst queue_1 = __webpack_require__(49107);\n\nconst scan_1 = __webpack_require__(18426);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst backend_1 = __webpack_require__(36873);\n\nconst global_hook_js_1 = __webpack_require__(13179);\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 }\n\n if (!options.version) {\n throw new Error('[Vue Devtools] Vue version not found');\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;\nlet scanTimeout; // eslint-disable-next-line camelcase\n\nfunction _legacy_getAndRegisterApps(ctx, clear = false) {\n setTimeout(() => {\n if (clear) {\n // Remove apps that are legacy\n ctx.appRecords.forEach(appRecord => {\n if (appRecord.meta.Vue) {\n removeAppRecord(appRecord, ctx);\n }\n });\n }\n\n const apps = (0, scan_1.scan)();\n clearTimeout(scanTimeout);\n\n if (!apps.length) {\n scanTimeout = setTimeout(() => _legacy_getAndRegisterApps(ctx), 1000);\n }\n\n apps.forEach(app => {\n const Vue = global_hook_js_1.hook.Vue;\n registerApp({\n app,\n types: {},\n version: Vue === null || Vue === void 0 ? void 0 : Vue.version,\n meta: {\n Vue\n }\n }, ctx);\n });\n }, 0);\n}\n\nexports._legacy_getAndRegisterApps = _legacy_getAndRegisterApps;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMzIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU9BOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQUosRUFBYjtBQUVBLElBQUksUUFBUSxHQUFHLENBQWY7QUFHQSxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBSixFQUExQjs7QUFFTyxlQUFlLFdBQWYsQ0FBNEIsT0FBNUIsRUFBdUQsR0FBdkQsRUFBMEU7QUFDL0UsU0FBTyxJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sY0FBYyxDQUFDLE9BQUQsRUFBVSxHQUFWLENBQS9CLENBQVA7QUFDRDs7QUFGRDs7QUFJQSxlQUFlLGNBQWYsQ0FBK0IsT0FBL0IsRUFBMEQsR0FBMUQsRUFBNkU7QUFDM0U7QUFDQSxNQUFJLEdBQUcsQ0FBQyxVQUFKLENBQWUsSUFBZixDQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQUYsQ0FBVSxHQUFWLEtBQWtCLE9BQU8sQ0FBQyxHQUFuRCxDQUFKLEVBQTZEO0FBQzNEO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFiLEVBQXNCO0FBQ3BCLFVBQU0sSUFBSSxLQUFKLENBQVUsc0NBQVYsQ0FBTjtBQUNELEdBUjBFLENBVTNFOzs7QUFDQSxRQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBUixDQUFnQixTQUFoQixDQUEwQixDQUExQixFQUE2QixPQUFPLENBQUMsT0FBUixDQUFnQixPQUFoQixDQUF3QixHQUF4QixDQUE3QixDQUFELENBQXJDOztBQUNBLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBYixFQUFnQixDQUFDLEdBQUcsNEJBQWtCLE1BQXRDLEVBQThDLENBQUMsRUFBL0MsRUFBbUQ7QUFDakQsVUFBTSxjQUFjLEdBQUcsNEJBQWtCLENBQWxCLENBQXZCOztBQUNBLFFBQUksY0FBYyxDQUFDLGdCQUFmLEtBQW9DLG9CQUF4QyxFQUE4RDtBQUM1RDtBQUNBLFlBQU0sT0FBTyxHQUFHLDBCQUFXLGNBQVgsRUFBMkIsR0FBM0IsQ0FBaEI7QUFFQSxZQUFNLGVBQWUsQ0FBQyxPQUFELEVBQVUsT0FBVixFQUFtQixHQUFuQixDQUFyQjtBQUVBO0FBQ0Q7QUFDRjtBQUNGOztBQUVELGVBQWUsZUFBZixDQUFnQyxPQUFoQyxFQUEyRCxPQUEzRCxFQUFxRixHQUFyRixFQUF3Rzs7O0FBQ3RHLFFBQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQVIsQ0FBWSxrQkFBWixDQUErQixPQUFPLENBQUMsR0FBdkMsQ0FBM0I7O0FBQ0EsTUFBSSxZQUFKLEVBQWtCO0FBQ2hCLFFBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxHQUFSLENBQVksMkJBQVosQ0FBd0MsWUFBeEMsQ0FBUCxFQUE4RCxJQUFsRSxFQUF3RTtBQUN0RTtBQUNEOztBQUVELFlBQVE7QUFDUixVQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFSLENBQVksZ0JBQVosQ0FBNkIsT0FBTyxDQUFDLEdBQXJDLEVBQTBDLFFBQVEsQ0FBQyxRQUFULEVBQTFDLENBQW5CO0FBQ0EsVUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFULEVBQWMsMkJBQUssSUFBTCxDQUFkLENBQXpCO0FBRUEsVUFBTSxDQUFDLEVBQUQsSUFBc0IsTUFBTSxPQUFPLENBQUMsR0FBUixDQUFZLHdCQUFaLENBQXFDLFlBQXJDLENBQWxDO0FBRUEsVUFBTSxNQUFNLEdBQWM7QUFDeEIsUUFEd0I7QUFFeEIsVUFGd0I7QUFHeEIsYUFId0I7QUFJeEIsYUFKd0I7QUFLeEIsOEJBQXdCLEVBQUUsSUFMRjtBQU14QixpQkFBVyxFQUFFLElBQUksR0FBSixFQU5XO0FBT3hCLGtCQVB3QjtBQVF4QixrQkFBWSxFQUFFLElBQUksR0FBSixFQVJVO0FBU3hCLFlBQU0sRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDLGFBQWhCLEdBQWdDLEVBQUUsQ0FBQyxhQUFILENBQWlCLFFBQWpCLENBQTBCLFFBQTFELEdBQXFFLElBVHJEO0FBVXhCLFVBQUksRUFBRSxhQUFPLENBQUMsSUFBUixNQUFZLElBQVosSUFBWSxhQUFaLEdBQVksRUFBWixHQUFnQjtBQVZFLEtBQTFCO0FBYUEsV0FBTyxDQUFDLEdBQVIsQ0FBWSwyQkFBWixHQUEwQyxNQUExQztBQUNBLFVBQU0sTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsT0FBM0I7QUFDQSxVQUFNLENBQUMsV0FBUCxDQUFtQixHQUFuQixDQUF1QixNQUF2QixFQUErQixNQUFNLENBQUMsWUFBdEM7QUFDQSxVQUFNLENBQUMsWUFBUCxDQUFvQixvQkFBcEIsR0FBMkMsTUFBM0MsQ0EzQmdCLENBNkJoQjs7QUFDQSxxQ0FBaUIsTUFBakIsRUFBeUIsR0FBekI7QUFFQSxPQUFHLENBQUMsVUFBSixDQUFlLElBQWYsQ0FBb0IsTUFBcEI7O0FBRUEsUUFBSSxPQUFPLENBQUMsT0FBUixDQUFnQixRQUFwQixFQUE4QjtBQUM1QixhQUFPLENBQUMsT0FBUixDQUFnQixRQUFoQixDQUF5QixPQUFPLENBQUMsR0FBakMsRUFBc0MsTUFBdEM7QUFDRDs7QUFFRCxVQUFNLE9BQU8sQ0FBQyxHQUFSLENBQVksbUJBQVosQ0FBZ0MsT0FBTyxDQUFDLEdBQXhDLENBQU47QUFFQSxPQUFHLENBQUMsTUFBSixDQUFXLElBQVgsQ0FBZ0IsNEJBQWEsZ0JBQTdCLEVBQStDO0FBQzdDLGVBQVMsRUFBRSxZQUFZLENBQUMsTUFBRDtBQURzQixLQUEvQzs7QUFJQSxRQUFJLGlCQUFpQixDQUFDLEdBQWxCLENBQXNCLE9BQU8sQ0FBQyxHQUE5QixDQUFKLEVBQXdDO0FBQ3RDLFdBQUssTUFBTSxDQUFYLElBQWdCLGlCQUFpQixDQUFDLEdBQWxCLENBQXNCLE9BQU8sQ0FBQyxHQUE5QixDQUFoQixFQUFvRDtBQUNsRCxjQUFNLENBQUMsQ0FBQyxNQUFELENBQVA7QUFDRDtBQUNGLEtBaERlLENBa0RoQjs7O0FBQ0EsUUFBSSxHQUFHLENBQUMsZ0JBQUosSUFBd0IsSUFBNUIsRUFBa0M7QUFDaEMsWUFBTSxTQUFTLENBQUMsTUFBRCxFQUFTLEdBQVQsQ0FBZjtBQUNEO0FBQ0YsR0F0REQsTUFzRE87QUFDTCxXQUFPLENBQUMsSUFBUixDQUFhLDZFQUFiLEVBQTRGLE9BQU8sQ0FBQyxHQUFwRztBQUNEO0FBQ0Y7O0FBRU0sZUFBZSxTQUFmLENBQTBCLE1BQTFCLEVBQTZDLEdBQTdDLEVBQWdFO0FBQ3JFLEtBQUcsQ0FBQyxnQkFBSixHQUF1QixNQUF2QjtBQUNBLEtBQUcsQ0FBQywyQkFBSixHQUFrQyxNQUFNLENBQUMsd0JBQXpDO0FBQ0EsS0FBRyxDQUFDLE1BQUosQ0FBVyxJQUFYLENBQWdCLDRCQUFhLHFCQUE3QixFQUFvRDtBQUNsRCxNQUFFLEVBQUUsTUFBTSxDQUFDLEVBRHVDO0FBRWxELDRCQUF3QixFQUFFLE1BQU0sQ0FBQztBQUZpQixHQUFwRDtBQUlEOztBQVBEOztBQVNBLFNBQWdCLFlBQWhCLENBQThCLE1BQTlCLEVBQStDO0FBQzdDLFNBQU87QUFDTCxNQUFFLEVBQUUsTUFBTSxDQUFDLEVBRE47QUFFTCxRQUFJLEVBQUUsTUFBTSxDQUFDLElBRlI7QUFHTCxXQUFPLEVBQUUsTUFBTSxDQUFDLE9BQVAsQ0FBZSxPQUhuQjtBQUlMLFVBQU0sRUFBRSxNQUFNLENBQUM7QUFKVixHQUFQO0FBTUQ7O0FBUEQ7QUFTQSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUosRUFBZjs7QUFFQSxTQUFnQixjQUFoQixDQUFnQyxHQUFoQyxFQUFxQyxTQUFyQyxFQUF1RDtBQUNyRCxNQUFJLEdBQUcsQ0FBQyw4QkFBSixJQUFzQyxJQUExQyxFQUFnRDtBQUM5QyxXQUFPLEdBQUcsQ0FBQyw4QkFBWDtBQUNEOztBQUNELE1BQUksRUFBRSxHQUFHLFNBQVMsU0FBVCxhQUFTLFdBQVQsZUFBYSxDQUFDLFFBQVEsRUFBVCxFQUFhLFFBQWIsRUFBdEI7O0FBRUEsTUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLEdBQVAsQ0FBVyxFQUFYLENBQWpCLEVBQWlDO0FBQy9CLFFBQUksS0FBSyxHQUFHLENBQVo7O0FBQ0EsV0FBTyxNQUFNLENBQUMsR0FBUCxDQUFXLEdBQUcsU0FBUyxJQUFJLEtBQUssRUFBaEMsQ0FBUCxFQUE0QztBQUMxQyxXQUFLO0FBQ047O0FBQ0QsTUFBRSxHQUFHLEdBQUcsU0FBUyxJQUFJLEtBQUssRUFBMUI7QUFDRDs7QUFFRCxRQUFNLENBQUMsR0FBUCxDQUFXLEVBQVg7QUFFQSxLQUFHLENBQUMsOEJBQUosR0FBcUMsRUFBckM7QUFDQSxTQUFPLEVBQVA7QUFDRDs7QUFsQkQ7O0FBb0JPLGVBQWUsWUFBZixDQUE2QixHQUE3QixFQUF1QyxHQUF2QyxFQUEwRDtBQUMvRCxRQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBSixDQUFlLElBQWYsQ0FBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFILENBQVcsR0FBWCxLQUFtQixHQUE3QyxDQUFmOztBQUNBLE1BQUksTUFBSixFQUFZO0FBQ1YsV0FBTyxNQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFJLE9BQUosQ0FBWSxDQUFDLE9BQUQsRUFBVSxNQUFWLEtBQW9CO0FBQ3JDLFFBQUksU0FBUyxHQUFHLGlCQUFpQixDQUFDLEdBQWxCLENBQXNCLEdBQXRCLENBQWhCO0FBQ0EsUUFBSSxRQUFRLEdBQUcsS0FBZjs7QUFDQSxRQUFJLENBQUMsU0FBTCxFQUFnQjtBQUNkLGVBQVMsR0FBRyxFQUFaO0FBQ0EsdUJBQWlCLENBQUMsR0FBbEIsQ0FBc0IsR0FBdEIsRUFBMkIsU0FBM0I7QUFDRDs7QUFDRCxVQUFNLEVBQUUsR0FBSSxNQUFELElBQVc7QUFDcEIsVUFBSSxDQUFDLFFBQUwsRUFBZTtBQUNiLG9CQUFZLENBQUMsS0FBRCxDQUFaO0FBQ0EsZUFBTyxDQUFDLE1BQUQsQ0FBUDtBQUNEO0FBQ0YsS0FMRDs7QUFNQSxhQUFTLENBQUMsSUFBVixDQUFlLEVBQWY7QUFDQSxVQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBSztBQUM1QixjQUFRLEdBQUcsSUFBWDtBQUNBLFlBQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFWLENBQWtCLEVBQWxCLENBQWQ7QUFDQSxVQUFJLEtBQUssS0FBSyxDQUFDLENBQWYsRUFBa0IsU0FBUyxDQUFDLE1BQVYsQ0FBaUIsS0FBakIsRUFBd0IsQ0FBeEI7O0FBQ2xCLFVBQUksMEJBQVcsU0FBZixFQUEwQjtBQUN4QjtBQUNBLGVBQU8sQ0FBQyxHQUFSLENBQVksa0NBQVosRUFBZ0QsR0FBaEQ7QUFDRDs7QUFDRCxZQUFNLENBQUMsSUFBSSxLQUFKLENBQVUsc0NBQVYsQ0FBRCxDQUFOO0FBQ0QsS0FUdUIsRUFTckIsS0FUcUIsQ0FBeEI7QUFVRCxHQXhCTSxDQUFQO0FBeUJEOztBQTlCRDs7QUFnQ0EsU0FBZ0IsdUJBQWhCLEdBQXVDO0FBQ3JDLFNBQU8sSUFBSSxDQUFDLEtBQUwsQ0FBVyxZQUFXLENBQWUsQ0FBckMsQ0FBUDtBQUNEOztBQUZEOztBQUlPLGVBQWUsUUFBZixDQUF5QixHQUF6QixFQUE0QztBQUNqRCxRQUFNLFVBQVUsR0FBRyxFQUFuQjs7QUFFQSxPQUFLLE1BQU0sU0FBWCxJQUF3QixHQUFHLENBQUMsVUFBNUIsRUFBd0M7QUFDdEMsY0FBVSxDQUFDLElBQVgsQ0FBZ0IsU0FBaEI7QUFDRDs7QUFFRCxLQUFHLENBQUMsTUFBSixDQUFXLElBQVgsQ0FBZ0IsNEJBQWEsaUJBQTdCLEVBQWdEO0FBQzlDLFFBQUksRUFBRSxVQUFVLENBQUMsR0FBWCxDQUFlLFlBQWY7QUFEd0MsR0FBaEQ7QUFHRDs7QUFWRDs7QUFZQSxTQUFTLGVBQVQsQ0FBMEIsU0FBMUIsRUFBZ0QsR0FBaEQsRUFBbUU7QUFDakUsTUFBSTtBQUNGLFVBQU0sQ0FBQyxNQUFQLENBQWMsU0FBUyxDQUFDLEVBQXhCO0FBQ0EsVUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQUosQ0FBZSxPQUFmLENBQXVCLFNBQXZCLENBQWQ7QUFDQSxRQUFJLEtBQUssS0FBSyxDQUFDLENBQWYsRUFBa0IsR0FBRyxDQUFDLFVBQUosQ0FBZSxNQUFmLENBQXNCLEtBQXRCLEVBQTZCLENBQTdCO0FBQ2xCLHVDQUFtQixTQUFTLENBQUMsT0FBVixDQUFrQixHQUFyQyxFQUEwQyxHQUExQztBQUNBLE9BQUcsQ0FBQyxNQUFKLENBQVcsSUFBWCxDQUFnQiw0QkFBYSxtQkFBN0IsRUFBa0Q7QUFBRSxRQUFFLEVBQUUsU0FBUyxDQUFDO0FBQWhCLEtBQWxEO0FBQ0QsR0FORCxDQU1FLE9BQU8sQ0FBUCxFQUFVO0FBQ1YsUUFBSSwwQkFBVyxTQUFmLEVBQTBCO0FBQ3hCLGFBQU8sQ0FBQyxLQUFSLENBQWMsQ0FBZDtBQUNEO0FBQ0Y7QUFDRjs7QUFFTSxlQUFlLFNBQWYsQ0FBMEIsR0FBMUIsRUFBb0MsR0FBcEMsRUFBdUQ7QUFDNUQsTUFBSTtBQUNGLFVBQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUQsRUFBTSxHQUFOLENBQXBDOztBQUNBLFFBQUksU0FBSixFQUFlO0FBQ2IscUJBQWUsQ0FBQyxTQUFELEVBQVksR0FBWixDQUFmO0FBQ0Q7QUFDRixHQUxELENBS0UsT0FBTyxDQUFQLEVBQVU7QUFDVixRQUFJLDBCQUFXLFNBQWYsRUFBMEI7QUFDeEIsYUFBTyxDQUFDLEtBQVIsQ0FBYyxDQUFkO0FBQ0Q7QUFDRjtBQUNGOztBQVhEO0FBYUEsSUFBSSxXQUFKLEMsQ0FFQTs7QUFDQSxTQUFnQiwwQkFBaEIsQ0FBNEMsR0FBNUMsRUFBaUUsS0FBSyxHQUFHLEtBQXpFLEVBQThFO0FBQzVFLFlBQVUsQ0FBQyxNQUFLO0FBQ2QsUUFBSSxLQUFKLEVBQVc7QUFDVDtBQUNBLFNBQUcsQ0FBQyxVQUFKLENBQWUsT0FBZixDQUF1QixTQUFTLElBQUc7QUFDakMsWUFBSSxTQUFTLENBQUMsSUFBVixDQUFlLEdBQW5CLEVBQXdCO0FBQ3RCLHlCQUFlLENBQUMsU0FBRCxFQUFZLEdBQVosQ0FBZjtBQUNEO0FBQ0YsT0FKRDtBQUtEOztBQUVELFVBQU0sSUFBSSxHQUFHLGtCQUFiO0FBRUEsZ0JBQVksQ0FBQyxXQUFELENBQVo7O0FBQ0EsUUFBSSxDQUFDLElBQUksQ0FBQyxNQUFWLEVBQWtCO0FBQ2hCLGlCQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sMEJBQTBCLENBQUMsR0FBRCxDQUFqQyxFQUF3QyxJQUF4QyxDQUF4QjtBQUNEOztBQUVELFFBQUksQ0FBQyxPQUFMLENBQWEsR0FBRyxJQUFHO0FBQ2pCLFlBQU0sR0FBRyxHQUFHLHNCQUFLLEdBQWpCO0FBQ0EsaUJBQVcsQ0FBQztBQUNWLFdBRFU7QUFFVixhQUFLLEVBQUUsRUFGRztBQUdWLGVBQU8sRUFBRSxHQUFHLFNBQUgsT0FBRyxXQUFILEdBQUcsTUFBSCxNQUFHLENBQUUsT0FISjtBQUlWLFlBQUksRUFBRTtBQUNKO0FBREk7QUFKSSxPQUFELEVBT1IsR0FQUSxDQUFYO0FBUUQsS0FWRDtBQVdELEdBNUJTLEVBNEJQLENBNUJPLENBQVY7QUE2QkQ7O0FBOUJEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvYXBwLnRzP2Y3MTUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzID0gZXhwb3J0cy5yZW1vdmVBcHAgPSBleHBvcnRzLnNlbmRBcHBzID0gZXhwb3J0cy53YWl0Rm9yQXBwc1JlZ2lzdHJhdGlvbiA9IGV4cG9ydHMuZ2V0QXBwUmVjb3JkID0gZXhwb3J0cy5nZXRBcHBSZWNvcmRJZCA9IGV4cG9ydHMubWFwQXBwUmVjb3JkID0gZXhwb3J0cy5zZWxlY3RBcHAgPSBleHBvcnRzLnJlZ2lzdGVyQXBwID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBzcGVha2luZ3VybF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJzcGVha2luZ3VybFwiKSk7XG5jb25zdCBxdWV1ZV8xID0gcmVxdWlyZShcIi4vdXRpbC9xdWV1ZVwiKTtcbmNvbnN0IHNjYW5fMSA9IHJlcXVpcmUoXCIuL2xlZ2FjeS9zY2FuXCIpO1xuY29uc3QgdGltZWxpbmVfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lXCIpO1xuY29uc3QgYmFja2VuZF8xID0gcmVxdWlyZShcIi4vYmFja2VuZFwiKTtcbmNvbnN0IGdsb2JhbF9ob29rX2pzXzEgPSByZXF1aXJlKFwiLi9nbG9iYWwtaG9vay5qc1wiKTtcbmNvbnN0IGpvYnMgPSBuZXcgcXVldWVfMS5Kb2JRdWV1ZSgpO1xubGV0IHJlY29yZElkID0gMDtcbmNvbnN0IGFwcFJlY29yZFByb21pc2VzID0gbmV3IE1hcCgpO1xuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJBcHAob3B0aW9ucywgY3R4KSB7XG4gICAgcmV0dXJuIGpvYnMucXVldWUoKCkgPT4gcmVnaXN0ZXJBcHBKb2Iob3B0aW9ucywgY3R4KSk7XG59XG5leHBvcnRzLnJlZ2lzdGVyQXBwID0gcmVnaXN0ZXJBcHA7XG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcEpvYihvcHRpb25zLCBjdHgpIHtcbiAgICAvLyBEZWR1cGVcbiAgICBpZiAoY3R4LmFwcFJlY29yZHMuZmluZChhID0+IGEub3B0aW9ucy5hcHAgPT09IG9wdGlvbnMuYXBwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW1Z1ZSBEZXZ0b29sc10gVnVlIHZlcnNpb24gbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIC8vIEZpbmQgY29ycmVjdCBiYWNrZW5kXG4gICAgY29uc3QgYmFzZUZyYW1ld29ya1ZlcnNpb24gPSBwYXJzZUludChvcHRpb25zLnZlcnNpb24uc3Vic3RyaW5nKDAsIG9wdGlvbnMudmVyc2lvbi5pbmRleE9mKCcuJykpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhY2tlbmRfMS5hdmFpbGFibGVCYWNrZW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBiYWNrZW5kT3B0aW9ucyA9IGJhY2tlbmRfMS5hdmFpbGFibGVCYWNrZW5kc1tpXTtcbiAgICAgICAgaWYgKGJhY2tlbmRPcHRpb25zLmZyYW1ld29ya1ZlcnNpb24gPT09IGJhc2VGcmFtZXdvcmtWZXJzaW9uKSB7XG4gICAgICAgICAgICAvLyBFbmFibGUgYmFja2VuZCBpZiBpdCdzIG5vdCBlbmFibGVkXG4gICAgICAgICAgICBjb25zdCBiYWNrZW5kID0gKDAsIGJhY2tlbmRfMS5nZXRCYWNrZW5kKShiYWNrZW5kT3B0aW9ucywgY3R4KTtcbiAgICAgICAgICAgIGF3YWl0IGNyZWF0ZUFwcFJlY29yZChvcHRpb25zLCBiYWNrZW5kLCBjdHgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBcHBSZWNvcmQob3B0aW9ucywgYmFja2VuZCwgY3R4KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJvb3RJbnN0YW5jZSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldEFwcFJvb3RJbnN0YW5jZShvcHRpb25zLmFwcCk7XG4gICAgaWYgKHJvb3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoKGF3YWl0IGJhY2tlbmQuYXBpLmdldENvbXBvbmVudERldnRvb2xzT3B0aW9ucyhyb290SW5zdGFuY2UpKS5oaWRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVjb3JkSWQrKztcbiAgICAgICAgY29uc3QgbmFtZSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldEFwcFJlY29yZE5hbWUob3B0aW9ucy5hcHAsIHJlY29yZElkLnRvU3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBpZCA9IGdldEFwcFJlY29yZElkKG9wdGlvbnMuYXBwLCAoMCwgc3BlYWtpbmd1cmxfMS5kZWZhdWx0KShuYW1lKSk7XG4gICAgICAgIGNvbnN0IFtlbF0gPSBhd2FpdCBiYWNrZW5kLmFwaS5nZXRDb21wb25lbnRSb290RWxlbWVudHMocm9vdEluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgcmVjb3JkID0ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGJhY2tlbmQsXG4gICAgICAgICAgICBsYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQ6IG51bGwsXG4gICAgICAgICAgICBpbnN0YW5jZU1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgICAgcm9vdEluc3RhbmNlLFxuICAgICAgICAgICAgcGVyZkdyb3VwSWRzOiBuZXcgTWFwKCksXG4gICAgICAgICAgICBpZnJhbWU6IGRvY3VtZW50ICE9PSBlbC5vd25lckRvY3VtZW50ID8gZWwub3duZXJEb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZSA6IG51bGwsXG4gICAgICAgICAgICBtZXRhOiAoX2EgPSBvcHRpb25zLm1ldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBvcHRpb25zLmFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX18gPSByZWNvcmQ7XG4gICAgICAgIGNvbnN0IHJvb3RJZCA9IGAke3JlY29yZC5pZH06cm9vdGA7XG4gICAgICAgIHJlY29yZC5pbnN0YW5jZU1hcC5zZXQocm9vdElkLCByZWNvcmQucm9vdEluc3RhbmNlKTtcbiAgICAgICAgcmVjb3JkLnJvb3RJbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyA9IHJvb3RJZDtcbiAgICAgICAgLy8gVGltZWxpbmVcbiAgICAgICAgKDAsIHRpbWVsaW5lXzEuYWRkQnVpbHRpbkxheWVycykocmVjb3JkLCBjdHgpO1xuICAgICAgICBjdHguYXBwUmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgIGlmIChiYWNrZW5kLm9wdGlvbnMuc2V0dXBBcHApIHtcbiAgICAgICAgICAgIGJhY2tlbmQub3B0aW9ucy5zZXR1cEFwcChiYWNrZW5kLmFwaSwgcmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBiYWNrZW5kLmFwaS5yZWdpc3RlckFwcGxpY2F0aW9uKG9wdGlvbnMuYXBwKTtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfQURELCB7XG4gICAgICAgICAgICBhcHBSZWNvcmQ6IG1hcEFwcFJlY29yZChyZWNvcmQpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGFwcFJlY29yZFByb21pc2VzLmhhcyhvcHRpb25zLmFwcCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiBhcHBSZWNvcmRQcm9taXNlcy5nZXQob3B0aW9ucy5hcHApKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcihyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEF1dG8gc2VsZWN0IGZpcnN0IGFwcFxuICAgICAgICBpZiAoY3R4LmN1cnJlbnRBcHBSZWNvcmQgPT0gbnVsbCkge1xuICAgICAgICAgICAgYXdhaXQgc2VsZWN0QXBwKHJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbVnVlIGRldnRvb2xzXSBObyByb290IGluc3RhbmNlIGZvdW5kIGZvciBhcHAsIGl0IG1pZ2h0IGhhdmUgYmVlbiB1bm1vdW50ZWQnLCBvcHRpb25zLmFwcCk7XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0QXBwKHJlY29yZCwgY3R4KSB7XG4gICAgY3R4LmN1cnJlbnRBcHBSZWNvcmQgPSByZWNvcmQ7XG4gICAgY3R4LmN1cnJlbnRJbnNwZWN0ZWRDb21wb25lbnRJZCA9IHJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQ7XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfU0VMRUNURUQsIHtcbiAgICAgICAgaWQ6IHJlY29yZC5pZCxcbiAgICAgICAgbGFzdEluc3BlY3RlZENvbXBvbmVudElkOiByZWNvcmQubGFzdEluc3BlY3RlZENvbXBvbmVudElkLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZWxlY3RBcHAgPSBzZWxlY3RBcHA7XG5mdW5jdGlvbiBtYXBBcHBSZWNvcmQocmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHJlY29yZC5pZCxcbiAgICAgICAgbmFtZTogcmVjb3JkLm5hbWUsXG4gICAgICAgIHZlcnNpb246IHJlY29yZC5vcHRpb25zLnZlcnNpb24sXG4gICAgICAgIGlmcmFtZTogcmVjb3JkLmlmcmFtZSxcbiAgICB9O1xufVxuZXhwb3J0cy5tYXBBcHBSZWNvcmQgPSBtYXBBcHBSZWNvcmQ7XG5jb25zdCBhcHBJZHMgPSBuZXcgU2V0KCk7XG5mdW5jdGlvbiBnZXRBcHBSZWNvcmRJZChhcHAsIGRlZmF1bHRJZCkge1xuICAgIGlmIChhcHAuX19WVUVfREVWVE9PTFNfQVBQX1JFQ09SRF9JRF9fICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX0lEX187XG4gICAgfVxuICAgIGxldCBpZCA9IGRlZmF1bHRJZCAhPT0gbnVsbCAmJiBkZWZhdWx0SWQgIT09IHZvaWQgMCA/IGRlZmF1bHRJZCA6IChyZWNvcmRJZCsrKS50b1N0cmluZygpO1xuICAgIGlmIChkZWZhdWx0SWQgJiYgYXBwSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMTtcbiAgICAgICAgd2hpbGUgKGFwcElkcy5oYXMoYCR7ZGVmYXVsdElkfToke2NvdW50fWApKSB7XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGlkID0gYCR7ZGVmYXVsdElkfV8ke2NvdW50fWA7XG4gICAgfVxuICAgIGFwcElkcy5hZGQoaWQpO1xuICAgIGFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX0lEX18gPSBpZDtcbiAgICByZXR1cm4gaWQ7XG59XG5leHBvcnRzLmdldEFwcFJlY29yZElkID0gZ2V0QXBwUmVjb3JkSWQ7XG5hc3luYyBmdW5jdGlvbiBnZXRBcHBSZWNvcmQoYXBwLCBjdHgpIHtcbiAgICBjb25zdCByZWNvcmQgPSBjdHguYXBwUmVjb3Jkcy5maW5kKGFyID0+IGFyLm9wdGlvbnMuYXBwID09PSBhcHApO1xuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlc29sdmVycyA9IGFwcFJlY29yZFByb21pc2VzLmdldChhcHApO1xuICAgICAgICBsZXQgdGltZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFyZXNvbHZlcnMpIHtcbiAgICAgICAgICAgIHJlc29sdmVycyA9IFtdO1xuICAgICAgICAgICAgYXBwUmVjb3JkUHJvbWlzZXMuc2V0KGFwcCwgcmVzb2x2ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbiA9IChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGltZWRPdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVjb3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVzb2x2ZXJzLnB1c2goZm4pO1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXNvbHZlcnMuaW5kZXhPZihmbik7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgICAgIHJlc29sdmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVGltZWQgb3V0IHdhaXRpbmcgZm9yIGFwcCByZWNvcmQnLCBhcHApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVGltZWQgb3V0IGdldHRpbmcgYXBwIHJlY29yZCBmb3IgYXBwYCkpO1xuICAgICAgICB9LCA2MDAwMCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldEFwcFJlY29yZCA9IGdldEFwcFJlY29yZDtcbmZ1bmN0aW9uIHdhaXRGb3JBcHBzUmVnaXN0cmF0aW9uKCkge1xuICAgIHJldHVybiBqb2JzLnF1ZXVlKGFzeW5jICgpID0+IHsgfSk7XG59XG5leHBvcnRzLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uID0gd2FpdEZvckFwcHNSZWdpc3RyYXRpb247XG5hc3luYyBmdW5jdGlvbiBzZW5kQXBwcyhjdHgpIHtcbiAgICBjb25zdCBhcHBSZWNvcmRzID0gW107XG4gICAgZm9yIChjb25zdCBhcHBSZWNvcmQgb2YgY3R4LmFwcFJlY29yZHMpIHtcbiAgICAgICAgYXBwUmVjb3Jkcy5wdXNoKGFwcFJlY29yZCk7XG4gICAgfVxuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQVBQX0xJU1QsIHtcbiAgICAgICAgYXBwczogYXBwUmVjb3Jkcy5tYXAobWFwQXBwUmVjb3JkKSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VuZEFwcHMgPSBzZW5kQXBwcztcbmZ1bmN0aW9uIHJlbW92ZUFwcFJlY29yZChhcHBSZWNvcmQsIGN0eCkge1xuICAgIHRyeSB7XG4gICAgICAgIGFwcElkcy5kZWxldGUoYXBwUmVjb3JkLmlkKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdHguYXBwUmVjb3Jkcy5pbmRleE9mKGFwcFJlY29yZCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBjdHguYXBwUmVjb3Jkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAoMCwgdGltZWxpbmVfMS5yZW1vdmVMYXllcnNGb3JBcHApKGFwcFJlY29yZC5vcHRpb25zLmFwcCwgY3R4KTtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfUkVNT1ZFLCB7IGlkOiBhcHBSZWNvcmQuaWQgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFwcChhcHAsIGN0eCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IGF3YWl0IGdldEFwcFJlY29yZChhcHAsIGN0eCk7XG4gICAgICAgIGlmIChhcHBSZWNvcmQpIHtcbiAgICAgICAgICAgIHJlbW92ZUFwcFJlY29yZChhcHBSZWNvcmQsIGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5yZW1vdmVBcHAgPSByZW1vdmVBcHA7XG5sZXQgc2NhblRpbWVvdXQ7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5mdW5jdGlvbiBfbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcyhjdHgsIGNsZWFyID0gZmFsc2UpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYXBwcyB0aGF0IGFyZSBsZWdhY3lcbiAgICAgICAgICAgIGN0eC5hcHBSZWNvcmRzLmZvckVhY2goYXBwUmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXBwUmVjb3JkLm1ldGEuVnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFwcFJlY29yZChhcHBSZWNvcmQsIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwcyA9ICgwLCBzY2FuXzEuc2NhbikoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNjYW5UaW1lb3V0KTtcbiAgICAgICAgaWYgKCFhcHBzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2NhblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IF9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKGN0eCksIDEwMDApO1xuICAgICAgICB9XG4gICAgICAgIGFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgY29uc3QgVnVlID0gZ2xvYmFsX2hvb2tfanNfMS5ob29rLlZ1ZTtcbiAgICAgICAgICAgIHJlZ2lzdGVyQXBwKHtcbiAgICAgICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICAgICAgdHlwZXM6IHt9LFxuICAgICAgICAgICAgICAgIHZlcnNpb246IFZ1ZSA9PT0gbnVsbCB8fCBWdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFZ1ZS52ZXJzaW9uLFxuICAgICAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgVnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICB9KTtcbiAgICB9LCAwKTtcbn1cbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBfbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\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 global_hook_js_1 = __webpack_require__(13179);\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 }\n\n if (!options.version) {\n throw new Error('[Vue Devtools] Vue version not found');\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;\nlet scanTimeout; // eslint-disable-next-line camelcase\n\nfunction _legacy_getAndRegisterApps(ctx, clear = false) {\n setTimeout(() => {\n if (clear) {\n // Remove apps that are legacy\n ctx.appRecords.forEach(appRecord => {\n if (appRecord.meta.Vue) {\n removeAppRecord(appRecord, ctx);\n }\n });\n }\n\n const apps = (0, scan_1.scan)();\n clearTimeout(scanTimeout);\n\n if (!apps.length) {\n scanTimeout = setTimeout(() => _legacy_getAndRegisterApps(ctx), 1000);\n }\n\n apps.forEach(app => {\n const Vue = global_hook_js_1.hook.Vue;\n registerApp({\n app,\n types: {},\n version: Vue === null || Vue === void 0 ? void 0 : Vue.version,\n meta: {\n Vue\n }\n }, ctx);\n });\n }, 0);\n}\n\nexports._legacy_getAndRegisterApps = _legacy_getAndRegisterApps;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUMsR0FBRCxDQUFqQyxFQUF3QyxJQUF4QyxDQUF4QjtBQUNEOztBQUVELFFBQUksQ0FBQyxPQUFMLENBQWEsR0FBRyxJQUFHO0FBQ2pCLFlBQU0sR0FBRyxHQUFHLHNCQUFLLEdBQWpCO0FBQ0EsaUJBQVcsQ0FBQztBQUNWLFdBRFU7QUFFVixhQUFLLEVBQUUsRUFGRztBQUdWLGVBQU8sRUFBRSxHQUFHLFNBQUgsT0FBRyxXQUFILEdBQUcsTUFBSCxNQUFHLENBQUUsT0FISjtBQUlWLFlBQUksRUFBRTtBQUNKO0FBREk7QUFKSSxPQUFELEVBT1IsR0FQUSxDQUFYO0FBUUQsS0FWRDtBQVdELEdBNUJTLEVBNEJQLENBNUJPLENBQVY7QUE2QkQ7O0FBOUJEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvYXBwLnRzP2Y3MTUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzID0gZXhwb3J0cy5yZW1vdmVBcHAgPSBleHBvcnRzLnNlbmRBcHBzID0gZXhwb3J0cy53YWl0Rm9yQXBwc1JlZ2lzdHJhdGlvbiA9IGV4cG9ydHMuZ2V0QXBwUmVjb3JkID0gZXhwb3J0cy5nZXRBcHBSZWNvcmRJZCA9IGV4cG9ydHMubWFwQXBwUmVjb3JkID0gZXhwb3J0cy5zZWxlY3RBcHAgPSBleHBvcnRzLnJlZ2lzdGVyQXBwID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBzcGVha2luZ3VybF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJzcGVha2luZ3VybFwiKSk7XG5jb25zdCBxdWV1ZV8xID0gcmVxdWlyZShcIi4vdXRpbC9xdWV1ZVwiKTtcbmNvbnN0IHNjYW5fMSA9IHJlcXVpcmUoXCIuL2xlZ2FjeS9zY2FuXCIpO1xuY29uc3QgdGltZWxpbmVfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lXCIpO1xuY29uc3QgYmFja2VuZF8xID0gcmVxdWlyZShcIi4vYmFja2VuZFwiKTtcbmNvbnN0IGdsb2JhbF9ob29rX2pzXzEgPSByZXF1aXJlKFwiLi9nbG9iYWwtaG9vay5qc1wiKTtcbmNvbnN0IGpvYnMgPSBuZXcgcXVldWVfMS5Kb2JRdWV1ZSgpO1xubGV0IHJlY29yZElkID0gMDtcbmNvbnN0IGFwcFJlY29yZFByb21pc2VzID0gbmV3IE1hcCgpO1xuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJBcHAob3B0aW9ucywgY3R4KSB7XG4gICAgcmV0dXJuIGpvYnMucXVldWUoKCkgPT4gcmVnaXN0ZXJBcHBKb2Iob3B0aW9ucywgY3R4KSk7XG59XG5leHBvcnRzLnJlZ2lzdGVyQXBwID0gcmVnaXN0ZXJBcHA7XG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcEpvYihvcHRpb25zLCBjdHgpIHtcbiAgICAvLyBEZWR1cGVcbiAgICBpZiAoY3R4LmFwcFJlY29yZHMuZmluZChhID0+IGEub3B0aW9ucy5hcHAgPT09IG9wdGlvbnMuYXBwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW1Z1ZSBEZXZ0b29sc10gVnVlIHZlcnNpb24gbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIC8vIEZpbmQgY29ycmVjdCBiYWNrZW5kXG4gICAgY29uc3QgYmFzZUZyYW1ld29ya1ZlcnNpb24gPSBwYXJzZUludChvcHRpb25zLnZlcnNpb24uc3Vic3RyaW5nKDAsIG9wdGlvbnMudmVyc2lvbi5pbmRleE9mKCcuJykpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhY2tlbmRfMS5hdmFpbGFibGVCYWNrZW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBiYWNrZW5kT3B0aW9ucyA9IGJhY2tlbmRfMS5hdmFpbGFibGVCYWNrZW5kc1tpXTtcbiAgICAgICAgaWYgKGJhY2tlbmRPcHRpb25zLmZyYW1ld29ya1ZlcnNpb24gPT09IGJhc2VGcmFtZXdvcmtWZXJzaW9uKSB7XG4gICAgICAgICAgICAvLyBFbmFibGUgYmFja2VuZCBpZiBpdCdzIG5vdCBlbmFibGVkXG4gICAgICAgICAgICBjb25zdCBiYWNrZW5kID0gKDAsIGJhY2tlbmRfMS5nZXRCYWNrZW5kKShiYWNrZW5kT3B0aW9ucywgY3R4KTtcbiAgICAgICAgICAgIGF3YWl0IGNyZWF0ZUFwcFJlY29yZChvcHRpb25zLCBiYWNrZW5kLCBjdHgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBcHBSZWNvcmQob3B0aW9ucywgYmFja2VuZCwgY3R4KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJvb3RJbnN0YW5jZSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldEFwcFJvb3RJbnN0YW5jZShvcHRpb25zLmFwcCk7XG4gICAgaWYgKHJvb3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoKGF3YWl0IGJhY2tlbmQuYXBpLmdldENvbXBvbmVudERldnRvb2xzT3B0aW9ucyhyb290SW5zdGFuY2UpKS5oaWRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVjb3JkSWQrKztcbiAgICAgICAgY29uc3QgbmFtZSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldEFwcFJlY29yZE5hbWUob3B0aW9ucy5hcHAsIHJlY29yZElkLnRvU3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBpZCA9IGdldEFwcFJlY29yZElkKG9wdGlvbnMuYXBwLCAoMCwgc3BlYWtpbmd1cmxfMS5kZWZhdWx0KShuYW1lKSk7XG4gICAgICAgIGNvbnN0IFtlbF0gPSBhd2FpdCBiYWNrZW5kLmFwaS5nZXRDb21wb25lbnRSb290RWxlbWVudHMocm9vdEluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgcmVjb3JkID0ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGJhY2tlbmQsXG4gICAgICAgICAgICBsYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQ6IG51bGwsXG4gICAgICAgICAgICBpbnN0YW5jZU1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgICAgcm9vdEluc3RhbmNlLFxuICAgICAgICAgICAgcGVyZkdyb3VwSWRzOiBuZXcgTWFwKCksXG4gICAgICAgICAgICBpZnJhbWU6IGRvY3VtZW50ICE9PSBlbC5vd25lckRvY3VtZW50ID8gZWwub3duZXJEb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZSA6IG51bGwsXG4gICAgICAgICAgICBtZXRhOiAoX2EgPSBvcHRpb25zLm1ldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBvcHRpb25zLmFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX18gPSByZWNvcmQ7XG4gICAgICAgIGNvbnN0IHJvb3RJZCA9IGAke3JlY29yZC5pZH06cm9vdGA7XG4gICAgICAgIHJlY29yZC5pbnN0YW5jZU1hcC5zZXQocm9vdElkLCByZWNvcmQucm9vdEluc3RhbmNlKTtcbiAgICAgICAgcmVjb3JkLnJvb3RJbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyA9IHJvb3RJZDtcbiAgICAgICAgLy8gVGltZWxpbmVcbiAgICAgICAgKDAsIHRpbWVsaW5lXzEuYWRkQnVpbHRpbkxheWVycykocmVjb3JkLCBjdHgpO1xuICAgICAgICBjdHguYXBwUmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgIGlmIChiYWNrZW5kLm9wdGlvbnMuc2V0dXBBcHApIHtcbiAgICAgICAgICAgIGJhY2tlbmQub3B0aW9ucy5zZXR1cEFwcChiYWNrZW5kLmFwaSwgcmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBiYWNrZW5kLmFwaS5yZWdpc3RlckFwcGxpY2F0aW9uKG9wdGlvbnMuYXBwKTtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfQURELCB7XG4gICAgICAgICAgICBhcHBSZWNvcmQ6IG1hcEFwcFJlY29yZChyZWNvcmQpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGFwcFJlY29yZFByb21pc2VzLmhhcyhvcHRpb25zLmFwcCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiBhcHBSZWNvcmRQcm9taXNlcy5nZXQob3B0aW9ucy5hcHApKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcihyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEF1dG8gc2VsZWN0IGZpcnN0IGFwcFxuICAgICAgICBpZiAoY3R4LmN1cnJlbnRBcHBSZWNvcmQgPT0gbnVsbCkge1xuICAgICAgICAgICAgYXdhaXQgc2VsZWN0QXBwKHJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbVnVlIGRldnRvb2xzXSBObyByb290IGluc3RhbmNlIGZvdW5kIGZvciBhcHAsIGl0IG1pZ2h0IGhhdmUgYmVlbiB1bm1vdW50ZWQnLCBvcHRpb25zLmFwcCk7XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0QXBwKHJlY29yZCwgY3R4KSB7XG4gICAgY3R4LmN1cnJlbnRBcHBSZWNvcmQgPSByZWNvcmQ7XG4gICAgY3R4LmN1cnJlbnRJbnNwZWN0ZWRDb21wb25lbnRJZCA9IHJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQ7XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfU0VMRUNURUQsIHtcbiAgICAgICAgaWQ6IHJlY29yZC5pZCxcbiAgICAgICAgbGFzdEluc3BlY3RlZENvbXBvbmVudElkOiByZWNvcmQubGFzdEluc3BlY3RlZENvbXBvbmVudElkLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZWxlY3RBcHAgPSBzZWxlY3RBcHA7XG5mdW5jdGlvbiBtYXBBcHBSZWNvcmQocmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHJlY29yZC5pZCxcbiAgICAgICAgbmFtZTogcmVjb3JkLm5hbWUsXG4gICAgICAgIHZlcnNpb246IHJlY29yZC5vcHRpb25zLnZlcnNpb24sXG4gICAgICAgIGlmcmFtZTogcmVjb3JkLmlmcmFtZSxcbiAgICB9O1xufVxuZXhwb3J0cy5tYXBBcHBSZWNvcmQgPSBtYXBBcHBSZWNvcmQ7XG5jb25zdCBhcHBJZHMgPSBuZXcgU2V0KCk7XG5mdW5jdGlvbiBnZXRBcHBSZWNvcmRJZChhcHAsIGRlZmF1bHRJZCkge1xuICAgIGlmIChhcHAuX19WVUVfREVWVE9PTFNfQVBQX1JFQ09SRF9JRF9fICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX0lEX187XG4gICAgfVxuICAgIGxldCBpZCA9IGRlZmF1bHRJZCAhPT0gbnVsbCAmJiBkZWZhdWx0SWQgIT09IHZvaWQgMCA/IGRlZmF1bHRJZCA6IChyZWNvcmRJZCsrKS50b1N0cmluZygpO1xuICAgIGlmIChkZWZhdWx0SWQgJiYgYXBwSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMTtcbiAgICAgICAgd2hpbGUgKGFwcElkcy5oYXMoYCR7ZGVmYXVsdElkfV8ke2NvdW50fWApKSB7XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGlkID0gYCR7ZGVmYXVsdElkfV8ke2NvdW50fWA7XG4gICAgfVxuICAgIGFwcElkcy5hZGQoaWQpO1xuICAgIGFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX0lEX18gPSBpZDtcbiAgICByZXR1cm4gaWQ7XG59XG5leHBvcnRzLmdldEFwcFJlY29yZElkID0gZ2V0QXBwUmVjb3JkSWQ7XG5hc3luYyBmdW5jdGlvbiBnZXRBcHBSZWNvcmQoYXBwLCBjdHgpIHtcbiAgICBjb25zdCByZWNvcmQgPSBjdHguYXBwUmVjb3Jkcy5maW5kKGFyID0+IGFyLm9wdGlvbnMuYXBwID09PSBhcHApO1xuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlc29sdmVycyA9IGFwcFJlY29yZFByb21pc2VzLmdldChhcHApO1xuICAgICAgICBsZXQgdGltZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFyZXNvbHZlcnMpIHtcbiAgICAgICAgICAgIHJlc29sdmVycyA9IFtdO1xuICAgICAgICAgICAgYXBwUmVjb3JkUHJvbWlzZXMuc2V0KGFwcCwgcmVzb2x2ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbiA9IChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGltZWRPdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVjb3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVzb2x2ZXJzLnB1c2goZm4pO1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXNvbHZlcnMuaW5kZXhPZihmbik7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgICAgIHJlc29sdmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVGltZWQgb3V0IHdhaXRpbmcgZm9yIGFwcCByZWNvcmQnLCBhcHApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVGltZWQgb3V0IGdldHRpbmcgYXBwIHJlY29yZCBmb3IgYXBwYCkpO1xuICAgICAgICB9LCA2MDAwMCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldEFwcFJlY29yZCA9IGdldEFwcFJlY29yZDtcbmZ1bmN0aW9uIHdhaXRGb3JBcHBzUmVnaXN0cmF0aW9uKCkge1xuICAgIHJldHVybiBqb2JzLnF1ZXVlKGFzeW5jICgpID0+IHsgfSk7XG59XG5leHBvcnRzLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uID0gd2FpdEZvckFwcHNSZWdpc3RyYXRpb247XG5hc3luYyBmdW5jdGlvbiBzZW5kQXBwcyhjdHgpIHtcbiAgICBjb25zdCBhcHBSZWNvcmRzID0gW107XG4gICAgZm9yIChjb25zdCBhcHBSZWNvcmQgb2YgY3R4LmFwcFJlY29yZHMpIHtcbiAgICAgICAgYXBwUmVjb3Jkcy5wdXNoKGFwcFJlY29yZCk7XG4gICAgfVxuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQVBQX0xJU1QsIHtcbiAgICAgICAgYXBwczogYXBwUmVjb3Jkcy5tYXAobWFwQXBwUmVjb3JkKSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VuZEFwcHMgPSBzZW5kQXBwcztcbmZ1bmN0aW9uIHJlbW92ZUFwcFJlY29yZChhcHBSZWNvcmQsIGN0eCkge1xuICAgIHRyeSB7XG4gICAgICAgIGFwcElkcy5kZWxldGUoYXBwUmVjb3JkLmlkKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdHguYXBwUmVjb3Jkcy5pbmRleE9mKGFwcFJlY29yZCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBjdHguYXBwUmVjb3Jkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAoMCwgdGltZWxpbmVfMS5yZW1vdmVMYXllcnNGb3JBcHApKGFwcFJlY29yZC5vcHRpb25zLmFwcCwgY3R4KTtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfUkVNT1ZFLCB7IGlkOiBhcHBSZWNvcmQuaWQgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFwcChhcHAsIGN0eCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IGF3YWl0IGdldEFwcFJlY29yZChhcHAsIGN0eCk7XG4gICAgICAgIGlmIChhcHBSZWNvcmQpIHtcbiAgICAgICAgICAgIHJlbW92ZUFwcFJlY29yZChhcHBSZWNvcmQsIGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5yZW1vdmVBcHAgPSByZW1vdmVBcHA7XG5sZXQgc2NhblRpbWVvdXQ7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5mdW5jdGlvbiBfbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcyhjdHgsIGNsZWFyID0gZmFsc2UpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYXBwcyB0aGF0IGFyZSBsZWdhY3lcbiAgICAgICAgICAgIGN0eC5hcHBSZWNvcmRzLmZvckVhY2goYXBwUmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXBwUmVjb3JkLm1ldGEuVnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFwcFJlY29yZChhcHBSZWNvcmQsIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwcyA9ICgwLCBzY2FuXzEuc2NhbikoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNjYW5UaW1lb3V0KTtcbiAgICAgICAgaWYgKCFhcHBzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2NhblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IF9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKGN0eCksIDEwMDApO1xuICAgICAgICB9XG4gICAgICAgIGFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgY29uc3QgVnVlID0gZ2xvYmFsX2hvb2tfanNfMS5ob29rLlZ1ZTtcbiAgICAgICAgICAgIHJlZ2lzdGVyQXBwKHtcbiAgICAgICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICAgICAgdHlwZXM6IHt9LFxuICAgICAgICAgICAgICAgIHZlcnNpb246IFZ1ZSA9PT0gbnVsbCB8fCBWdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFZ1ZS52ZXJzaW9uLFxuICAgICAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgVnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICB9KTtcbiAgICB9LCAwKTtcbn1cbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBfbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79132\n");
|
|
111
111
|
|
|
112
112
|
/***/ }),
|
|
113
113
|
|