obsidian-dev-utils 101.7.0 → 102.0.0
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/CHANGELOG.md +8 -0
- package/dist/lib/cjs/desktop-zip-extractor.cjs +1 -1
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +4 -3
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/script-utils/demo-vault-app-json.cjs +1 -1
- package/dist/lib/cjs/script-utils/demo-vault-app-json.d.cts +1 -1
- package/dist/lib/cjs/script-utils/demo-vault-buttons.cjs +3 -3
- package/dist/lib/cjs/script-utils/demo-vault-buttons.d.cts +8 -2
- package/dist/lib/cjs/script-utils/demo-vault.cjs +50 -29
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +9 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +4 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +408 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +10 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +3 -1
- package/dist/lib/esm/desktop-zip-extractor.d.mts +4 -3
- package/dist/lib/esm/desktop-zip-extractor.mjs +1 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/script-utils/demo-vault-app-json.d.mts +1 -1
- package/dist/lib/esm/script-utils/demo-vault-app-json.mjs +1 -1
- package/dist/lib/esm/script-utils/demo-vault-buttons.d.mts +8 -2
- package/dist/lib/esm/script-utils/demo-vault-buttons.mjs +3 -3
- package/dist/lib/esm/script-utils/demo-vault.mjs +52 -20
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +9 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +10 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +302 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +3 -1
- package/package.json +3 -4
- package/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian/package.json +6 -0
|
@@ -123,11 +123,9 @@ function keepName($unknown) {
|
|
|
123
123
|
})();
|
|
124
124
|
|
|
125
125
|
"use strict";
|
|
126
|
-
var __create = Object.create;
|
|
127
126
|
var __defProp = Object.defineProperty;
|
|
128
127
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
129
128
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
130
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
131
129
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
132
130
|
var __export = (target, all) => {
|
|
133
131
|
for (var name in all)
|
|
@@ -141,27 +139,20 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
141
139
|
}
|
|
142
140
|
return to;
|
|
143
141
|
};
|
|
144
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
145
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
146
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
147
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
148
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
149
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
150
|
-
mod
|
|
151
|
-
));
|
|
152
142
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
153
143
|
var demo_vault_exports = {};
|
|
154
144
|
__export(demo_vault_exports, {
|
|
155
145
|
archivePluginDemoVault: () => archivePluginDemoVault
|
|
156
146
|
});
|
|
157
147
|
module.exports = __toCommonJS(demo_vault_exports);
|
|
158
|
-
var
|
|
148
|
+
var import_fflate = require('fflate');
|
|
159
149
|
var import_node_fs = require('node:fs');
|
|
160
150
|
var import_promises = require('node:fs/promises');
|
|
161
151
|
var import_demo_vault_naming = require('../obsidian/demo-vault-naming.cjs');
|
|
162
152
|
var import_obsidian_plugin_repo_paths = require('../obsidian/plugin/obsidian-plugin-repo-paths.cjs');
|
|
163
153
|
var import_path = require('../path.cjs');
|
|
164
154
|
var import_demo_vault_app_json = require('./demo-vault-app-json.cjs');
|
|
155
|
+
var import_fs = require('./fs.cjs');
|
|
165
156
|
var import_obsidian_dev_utils_repo_paths = require('./obsidian-dev-utils-repo-paths.cjs');
|
|
166
157
|
var import_root = require('./root.cjs');
|
|
167
158
|
var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
|
|
@@ -208,22 +199,31 @@ async function archivePluginDemoVault() {
|
|
|
208
199
|
pluginId: manifest.id,
|
|
209
200
|
version: manifest.version
|
|
210
201
|
});
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
202
|
+
const entries = await readDemoVaultEntries({
|
|
203
|
+
demoVaultPath,
|
|
204
|
+
rootFolderName
|
|
205
|
+
});
|
|
206
|
+
injectAppJson({
|
|
207
|
+
appJson: await readCommittedAppJson(),
|
|
208
|
+
entries,
|
|
209
|
+
rootFolderName
|
|
210
|
+
});
|
|
211
|
+
injectReadmeVersion({
|
|
212
|
+
entries,
|
|
213
|
+
rootFolderName,
|
|
214
|
+
version: manifest.version
|
|
215
|
+
});
|
|
216
|
+
await (0, import_promises.writeFile)(zipPath, (0, import_fflate.zipSync)(Object.fromEntries(entries)));
|
|
216
217
|
return zipPath;
|
|
217
218
|
}
|
|
218
|
-
function injectAppJson(
|
|
219
|
+
function injectAppJson(params) {
|
|
220
|
+
const {
|
|
221
|
+
appJson,
|
|
222
|
+
entries,
|
|
223
|
+
rootFolderName
|
|
224
|
+
} = params;
|
|
219
225
|
const entryName = (0, import_path.join)(rootFolderName, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.DotObsidian, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.AppJson);
|
|
220
|
-
|
|
221
|
-
const entry = zip.getEntry(entryName);
|
|
222
|
-
if (entry) {
|
|
223
|
-
zip.updateFile(entry, content);
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
zip.addFile(entryName, content);
|
|
226
|
+
entries.set(entryName, Buffer.from((0, import_demo_vault_app_json.buildArchivedDemoVaultAppJsonContent)({ appJson }), "utf-8"));
|
|
227
227
|
}
|
|
228
228
|
async function injectDemoVaultHelper(demoedPluginId) {
|
|
229
229
|
const packageFolder = (0, import_root.getRootFolder)((0, import_path.getFolderName)(__import_meta_url));
|
|
@@ -245,17 +245,23 @@ async function injectDemoVaultHelper(demoedPluginId) {
|
|
|
245
245
|
await (0, import_promises.writeFile)((0, import_path.join)(helperFolder, DATA_JSON_FILE_NAME), `${JSON.stringify(settings, null, DATA_JSON_INDENT)}
|
|
246
246
|
`, "utf-8");
|
|
247
247
|
}
|
|
248
|
-
function injectReadmeVersion(
|
|
249
|
-
const
|
|
248
|
+
function injectReadmeVersion(params) {
|
|
249
|
+
const {
|
|
250
|
+
entries,
|
|
251
|
+
rootFolderName,
|
|
252
|
+
version
|
|
253
|
+
} = params;
|
|
254
|
+
const entryName = (0, import_path.join)(rootFolderName, README_FILE_NAME);
|
|
255
|
+
const entry = entries.get(entryName);
|
|
250
256
|
if (!entry) {
|
|
251
257
|
return;
|
|
252
258
|
}
|
|
253
|
-
const content = entry.
|
|
259
|
+
const content = entry.toString("utf-8");
|
|
254
260
|
const versionedContent = content.replace(OPENING_HEADING_REG_EXP, (heading) => `${heading} v${version}`);
|
|
255
261
|
if (versionedContent === content) {
|
|
256
262
|
return;
|
|
257
263
|
}
|
|
258
|
-
|
|
264
|
+
entries.set(entryName, Buffer.from(versionedContent, "utf-8"));
|
|
259
265
|
}
|
|
260
266
|
async function readCommittedAppJson() {
|
|
261
267
|
const appJsonPath = (0, import_root.resolvePathFromRootSafe)({
|
|
@@ -271,8 +277,23 @@ async function readCommittedAppJson() {
|
|
|
271
277
|
}
|
|
272
278
|
return appJson;
|
|
273
279
|
}
|
|
280
|
+
async function readDemoVaultEntries(params) {
|
|
281
|
+
const {
|
|
282
|
+
demoVaultPath,
|
|
283
|
+
rootFolderName
|
|
284
|
+
} = params;
|
|
285
|
+
const entries = /* @__PURE__ */ new Map();
|
|
286
|
+
for (const dirent of await (0, import_fs.readdirPosix)(demoVaultPath, { recursive: true, withFileTypes: true })) {
|
|
287
|
+
if (!dirent.isFile()) {
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
const path = (0, import_path.join)(dirent.parentPath, dirent.name);
|
|
291
|
+
entries.set((0, import_path.join)(rootFolderName, (0, import_path.relative)(demoVaultPath, path)), await (0, import_promises.readFile)(path));
|
|
292
|
+
}
|
|
293
|
+
return entries;
|
|
294
|
+
}
|
|
274
295
|
// Annotate the CommonJS export names for ESM import in node:
|
|
275
296
|
0 && (module.exports = {
|
|
276
297
|
archivePluginDemoVault
|
|
277
298
|
});
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICBjb25zdCB1cmwgPSBsb2NhbFJlcXVpcmUoJ25vZGU6dXJsJyk7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsLnBhdGhUb0ZpbGVVUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGFjdGl2ZVdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgfVxuXG4gICAgICAvLyBGYWxsYmFjayB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd25cbiAgICAgIHJldHVybiAnJztcbiAgICB9KSgpO1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIEFyY2hpdmVzIGEgcGx1Z2luJ3MgZGVtbyB2YXVsdCBhcyBhIHJlbGVhc2UgYXJ0aWZhY3QuXG4gKlxuICogQSBwbHVnaW4gY2FuIHNoaXAgYSBjdXJhdGVkIGRlbW8gdmF1bHQgYXQgYGRlbW8tdmF1bHQvYCBpbiBpdHMgcmVwbyByb290LiBBdCByZWxlYXNlIHRpbWUgdGhpc1xuICogbW9kdWxlIGluc3RhbGxzIHRoZSBmcmVzaGx5IGJ1aWx0IHBsdWdpbiBpbnRvIHRoYXQgdmF1bHQncyBgLm9ic2lkaWFuL3BsdWdpbnMvPGlkPi9gIGZvbGRlciBhbmRcbiAqIHppcHMgdGhlIHdob2xlIHZhdWx0IGludG8gYGRpc3QvYnVpbGQvPHBsdWdpbi1pZD4tZGVtby12YXVsdC56aXBgLCBzbyB0aGUgZXhpc3RpbmcgR2l0SHViLXJlbGVhc2VcbiAqIHN0ZXAgKHdoaWNoIHVwbG9hZHMgZXZlcnkgZmlsZSBpbiBgZGlzdC9idWlsZC9gKSBhdHRhY2hlcyBpdCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIFRoZSB2ZXJzaW9uIGlzIGRlbGliZXJhdGVseSBhYnNlbnQgZnJvbSB0aGF0IG5hbWUgYW5kIGxpdmVzIElOU0lERSB0aGUgYXJjaGl2ZSBpbnN0ZWFkIFx1MjAxNCBzZWVcbiAqIGBvYnNpZGlhbi9kZW1vLXZhdWx0LW5hbWluZy50c2AgZm9yIHdoeSBcdTIwMTQgaW4gdGhlIHR3byBwbGFjZXMgYSBwZXJzb24gYWN0dWFsbHkgbWVldHMgaXQ6IHRoZSB2YXVsdFxuICogc2l0cyB1bmRlciBhIHNpbmdsZSBgPHBsdWdpbi1pZD4tZGVtby12YXVsdC08dmVyc2lvbj4vYCBmb2xkZXIsIHNvIHVuemlwcGluZyBzZXZlcmFsIHJlbGVhc2VzIGJ5IGhhbmRcbiAqIGludG8gb25lIGZvbGRlciBuZWl0aGVyIGNvbGxpZGVzIG5vciBwcm9kdWNlcyBhbm9ueW1vdXMgZGlyZWN0b3JpZXMsIGFuZCB0aGUgdmF1bHQncyBgUkVBRE1FLm1kYFxuICogaGVhZGluZyBnYWlucyB0aGUgdmVyc2lvbiBpdCBkZW1vbnN0cmF0ZXMuXG4gKlxuICogVGhlIGFyY2hpdmVkIGNvcHkgYWxzbyBjYXJyaWVzIHRoZSBgLm9ic2lkaWFuL2FwcC5qc29uYCBzZXR0aW5ncyB0aGlzIHBhY2thZ2Ugb3ducyAoc2VlXG4gKiBgZGVtby12YXVsdC1hcHAtanNvbi50c2ApLiBUaG9zZSBzZXR0aW5ncyBhbmQgdGhlIFJFQURNRSBoZWFkaW5nIGFyZSB3cml0dGVuIGludG8gdGhlIFpJUCBFTlRSWSBhbmRcbiAqIG5ldmVyIGludG8gdGhlIHJlcG8gZm9sZGVyOiBib3RoIGZpbGVzIGFyZSB0cmFja2VkLCBhbmQgYHVwZGF0ZVZlcnNpb25gIGFyY2hpdmVzIGFmdGVyIGl0IGhhcyBhbHJlYWR5XG4gKiBwdXNoZWQsIHNvIGFuIGluLXBsYWNlIHdyaXRlIHdvdWxkIGxlYXZlIGFuIHVuY29tbWl0dGVkIGNoYW5nZSBiZWhpbmQgYSBwdWJsaXNoZWQgcmVsZWFzZS5cbiAqL1xuXG5pbXBvcnQgQWRtWmlwIGZyb20gJ2FkbS16aXAnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgdHlwZSB7IERlbW9WYXVsdEhlbHBlclNldHRpbmdzIH0gZnJvbSAnLi4vb2JzaWRpYW4vZGVtby12YXVsdC1oZWxwZXItc2V0dGluZ3MudHMnO1xuaW1wb3J0IHR5cGUgeyBEZW1vVmF1bHRBcHBKc29uIH0gZnJvbSAnLi9kZW1vLXZhdWx0LWFwcC1qc29uLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RGVtb1ZhdWx0QXJjaGl2ZUZpbGVOYW1lLFxuICBnZXREZW1vVmF1bHRGb2xkZXJOYW1lXG59IGZyb20gJy4uL29ic2lkaWFuL2RlbW8tdmF1bHQtbmFtaW5nLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGdldEZvbGRlck5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQge1xuICBidWlsZEFyY2hpdmVkRGVtb1ZhdWx0QXBwSnNvbkNvbnRlbnQsXG4gIGZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5ncyxcbiAgcGFyc2VEZW1vVmF1bHRBcHBKc29uXG59IGZyb20gJy4vZGVtby12YXVsdC1hcHAtanNvbi50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuL3Jvb3QudHMnO1xuXG5jb25zdCBERU1PX1ZBVUxUX0hFTFBFUl9QTFVHSU5fSUQgPSAnZGVtby12YXVsdC1oZWxwZXInO1xuY29uc3QgREFUQV9KU09OX0ZJTEVfTkFNRSA9ICdkYXRhLmpzb24nO1xuY29uc3QgREFUQV9KU09OX0lOREVOVCA9IDI7XG5jb25zdCBSRUFETUVfRklMRV9OQU1FID0gJ1JFQURNRS5tZCc7XG5cbi8vIFRoZSBSRUFETUUncyBvcGVuaW5nIGAjIEgxYCwgYW5kIG9ubHkgdGhhdCBvbmU6IHdpdGhvdXQgdGhlIGBtYCBmbGFnIHRoZSBtYXRjaCBpcyBhbmNob3JlZCB0byB0aGUgc3RhcnRcbi8vIE9mIHRoZSBmaWxlLCBhbmQgYC5gIHN0b3BzIGF0IHRoZSBuZXdsaW5lIHRoYXQgZW5kcyB0aGUgbGluZS5cbmNvbnN0IE9QRU5JTkdfSEVBRElOR19SRUdfRVhQID0gL14jIC4qLztcblxuLyoqXG4gKiBUaGUgbWluaW1hbCBzaGFwZSBvZiBhIHBsdWdpbiBgbWFuaWZlc3QuanNvbmAgcmVhZCBieSB7QGxpbmsgYXJjaGl2ZVBsdWdpbkRlbW9WYXVsdH0uXG4gKi9cbmludGVyZmFjZSBQbHVnaW5NYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLCB1c2VkIGFzIHRoZSBmb2xkZXIgbmFtZSB1bmRlciBgZGVtby12YXVsdC8ub2JzaWRpYW4vcGx1Z2lucy9gLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiB2ZXJzaW9uLCBlbWJlZGRlZCBpbiB0aGUgYXJjaGl2ZSdzIHRvcC1sZXZlbCBmb2xkZXIgbmFtZSBhbmQgaXRzIFJFQURNRSBoZWFkaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFyY2hpdmVzIHRoZSBwbHVnaW4ncyBkZW1vIHZhdWx0IChgZGVtby12YXVsdC9gIGluIHRoZSByZXBvIHJvb3QpIGFzIGEgcmVsZWFzZSBhcnRpZmFjdC5cbiAqXG4gKiBJbnN0YWxscyB0aGUgZnJlc2hseSBidWlsdCBwbHVnaW4gZnJvbSBgZGlzdC9idWlsZC9gIGludG8gdGhlIHZhdWx0J3NcbiAqIGAub2JzaWRpYW4vcGx1Z2lucy88aWQ+L2AgZm9sZGVyLCB0aGVuIHppcHMgdGhlIHdob2xlIHZhdWx0IHRvXG4gKiBgZGlzdC9idWlsZC88cGx1Z2luLWlkPi1kZW1vLXZhdWx0LnppcGAsIHVuZGVyIGEgc2luZ2xlIGA8cGx1Z2luLWlkPi1kZW1vLXZhdWx0LTx2ZXJzaW9uPi9gIGZvbGRlci5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBjcmVhdGVkIHppcCBhcmNoaXZlLCBvclxuICogYG51bGxgIGlmIHRoZSByZXBvIGhhcyBubyBgZGVtby12YXVsdC9gIGZvbGRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFyY2hpdmVQbHVnaW5EZW1vVmF1bHQoKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGRlbW9WYXVsdFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCB9KTtcbiAgaWYgKCFleGlzdHNTeW5jKGRlbW9WYXVsdFBhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYW5pZmVzdFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbiB9KTtcbiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKG1hbmlmZXN0UGF0aCwgJ3V0Zi04JykpIGFzIFBsdWdpbk1hbmlmZXN0O1xuXG4gIGNvbnN0IHBsdWdpbkZvbGRlciA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHtcbiAgICBwYXRoOiBqb2luKFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGVtb1ZhdWx0LFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRG90T2JzaWRpYW4sXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QbHVnaW5zLFxuICAgICAgbWFuaWZlc3QuaWRcbiAgICApXG4gIH0pO1xuICBhd2FpdCBta2RpcihwbHVnaW5Gb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IGRpc3RCdWlsZFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCB9KTtcbiAgYXdhaXQgY3AoZGlzdEJ1aWxkUGF0aCwgcGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBpbmplY3REZW1vVmF1bHRIZWxwZXIobWFuaWZlc3QuaWQpO1xuXG4gIGNvbnN0IHppcFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7XG4gICAgcGF0aDogam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EaXN0QnVpbGQsIGdldERlbW9WYXVsdEFyY2hpdmVGaWxlTmFtZShtYW5pZmVzdC5pZCkpXG4gIH0pO1xuICBjb25zdCByb290Rm9sZGVyTmFtZSA9IGdldERlbW9WYXVsdEZvbGRlck5hbWUoe1xuICAgIHBsdWdpbklkOiBtYW5pZmVzdC5pZCxcbiAgICB2ZXJzaW9uOiBtYW5pZmVzdC52ZXJzaW9uXG4gIH0pO1xuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKCk7XG4gIHppcC5hZGRMb2NhbEZvbGRlcihkZW1vVmF1bHRQYXRoLCByb290Rm9sZGVyTmFtZSk7XG4gIGluamVjdEFwcEpzb24oemlwLCBhd2FpdCByZWFkQ29tbWl0dGVkQXBwSnNvbigpLCByb290Rm9sZGVyTmFtZSk7XG4gIGluamVjdFJlYWRtZVZlcnNpb24oemlwLCByb290Rm9sZGVyTmFtZSwgbWFuaWZlc3QudmVyc2lvbik7XG4gIGF3YWl0IHppcC53cml0ZVppcFByb21pc2UoemlwUGF0aCk7XG4gIHJldHVybiB6aXBQYXRoO1xufVxuXG4vLyBTdG9yZXMgdGhlIGFyY2hpdmVkIHZhdWx0J3MgYC5vYnNpZGlhbi9hcHAuanNvbmAgXHUyMDE0IHRoZSBjb21taXR0ZWQgc2V0dGluZ3Mgd2l0aCB0aGUgb3duZWQgb25lcyBtZXJnZWRcbi8vIE92ZXIgdGhlbS4gVGhlIGVudHJ5IGlzIHJlcGxhY2VkIHJhdGhlciB0aGFuIHRoZSBmaWxlLCBzbyB0aGUgcmVwbyBmb2xkZXIgaXMgbGVmdCBleGFjdGx5IGFzIGl0IHdhcy5cbmZ1bmN0aW9uIGluamVjdEFwcEpzb24oemlwOiBBZG1aaXAsIGFwcEpzb246IERlbW9WYXVsdEFwcEpzb24sIHJvb3RGb2xkZXJOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgZW50cnlOYW1lID0gam9pbihyb290Rm9sZGVyTmFtZSwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRG90T2JzaWRpYW4sIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFwcEpzb24pO1xuICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oYnVpbGRBcmNoaXZlZERlbW9WYXVsdEFwcEpzb25Db250ZW50KHsgYXBwSnNvbiB9KSwgJ3V0Zi04Jyk7XG4gIGNvbnN0IGVudHJ5ID0gemlwLmdldEVudHJ5KGVudHJ5TmFtZSk7XG4gIGlmIChlbnRyeSkge1xuICAgIHppcC51cGRhdGVGaWxlKGVudHJ5LCBjb250ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBBIHZhdWx0IHdpdGggbm90aGluZyBlbHNlIHRvIGNvbmZpZ3VyZSBjb21taXRzIG5vIGBhcHAuanNvbmAgYXQgYWxsLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgc3RhdGUuXG4gIHppcC5hZGRGaWxlKGVudHJ5TmFtZSwgY29udGVudCk7XG59XG5cbi8vIEluamVjdHMgdGhlIGJ1aWx0LCBgb2JzaWRpYW4tZGV2LXV0aWxzYC1vd25lZCBgZGVtby12YXVsdC1oZWxwZXJgIGJvb3RzdHJhcCBwbHVnaW4gKHNoaXBwZWQgaW4gdGhpcyBwYWNrYWdlKSBpbnRvIHRoZSBkZW1vIHZhdWx0LCBzbyBubyBwZXItdmF1bHQgY29weSBpcyBjb21taXR0ZWQgYW5kIGFuIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGJ1bXAgcHJvcGFnYXRlcyBmaXhlcy5cbi8vXG4vLyBBbG9uZ3NpZGUgdGhlIGJpbmFyaWVzIGl0IHdyaXRlcyB0aGUgaGVscGVyJ3Mgb3duIGBkYXRhLmpzb25gIG5hbWluZyB0aGUgZGVtb25zdHJhdGVkIHBsdWdpbi4gVGhhdCBpc1xuLy8gVGhlIG9uZSBtb21lbnQgdGhlIGlkIGlzIGtub3duIGZvciBjZXJ0YWluIFx1MjAxNCBpdCBjb21lcyBmcm9tIHRoZSBwbHVnaW4ncyBvd24gbWFuaWZlc3QgXHUyMDE0IHdoZXJlYXMgdGhlXG4vLyBPcGVuZWQgdmF1bHQgb25seSBvZmZlcnMgcGx1Z2luIGZvbGRlcnMgdG8gY291bnQsIHdoaWNoIHRoZSBib290c3RyYXAgaXRzZWxmIGFkZHMgdG8gKHNlZVxuLy8gYERlbW9WYXVsdEhlbHBlclNldHRpbmdzYCkuXG5hc3luYyBmdW5jdGlvbiBpbmplY3REZW1vVmF1bHRIZWxwZXIoZGVtb2VkUGx1Z2luSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlRm9sZGVyID0gZ2V0Um9vdEZvbGRlcihnZXRGb2xkZXJOYW1lKGltcG9ydC5tZXRhLnVybCkpO1xuICBpZiAoIXBhY2thZ2VGb2xkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHRoZSBvYnNpZGlhbi1kZXYtdXRpbHMgcGFja2FnZSBmb2xkZXIgdG8gaW5qZWN0IHRoZSBkZW1vLXZhdWx0LWhlbHBlciBwbHVnaW4uJyk7XG4gIH1cblxuICBjb25zdCBoZWxwZXJTb3VyY2VQYXRoID0gam9pbihwYWNrYWdlRm9sZGVyLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3REZW1vVmF1bHRIZWxwZXIpO1xuICBjb25zdCBoZWxwZXJGb2xkZXIgPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7XG4gICAgcGF0aDogam9pbihcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCxcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRvdE9ic2lkaWFuLFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuUGx1Z2lucyxcbiAgICAgIERFTU9fVkFVTFRfSEVMUEVSX1BMVUdJTl9JRFxuICAgIClcbiAgfSk7XG4gIGF3YWl0IG1rZGlyKGhlbHBlckZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNwKGhlbHBlclNvdXJjZVBhdGgsIGhlbHBlckZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3Qgc2V0dGluZ3M6IERlbW9WYXVsdEhlbHBlclNldHRpbmdzID0geyBkZW1vZWRQbHVnaW5JZCB9O1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihoZWxwZXJGb2xkZXIsIERBVEFfSlNPTl9GSUxFX05BTUUpLCBgJHtKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgREFUQV9KU09OX0lOREVOVCl9XFxuYCwgJ3V0Zi04Jyk7XG59XG5cbi8vIE5hbWVzIHRoZSB2ZXJzaW9uIG9uIHRoZSBhcmNoaXZlZCBgUkVBRE1FLm1kYCdzIGhlYWRpbmcsIHNvIHRoZSB2YXVsdCBzYXlzIHdoaWNoIHJlbGVhc2UgaXQgZGVtb25zdHJhdGVzXG4vLyBIb3dldmVyIGZhciBpdCB0cmF2ZWxzIGZyb20gdGhlIHJlbGVhc2UgcGFnZSBpdCB3YXMgZG93bmxvYWRlZCBmcm9tLlxuLy9cbi8vIEVudHJ5LW9ubHksIGZvciB0aGUgc2FtZSByZWFzb24gYGluamVjdEFwcEpzb25gIGlzOiB0aGUgY29tbWl0dGVkIFJFQURNRSBpcyBhIHRyYWNrZWQsIGhhbmQtYXV0aG9yZWRcbi8vIEZpbGUgYW5kIGB1cGRhdGVWZXJzaW9uYCBhcmNoaXZlcyBhZnRlciBpdCBoYXMgYWxyZWFkeSBwdXNoZWQuXG4vL1xuLy8gQSB2YXVsdCB0aGF0IHNoaXBzIG5vIFJFQURNRSwgb3Igb25lIG9wZW5pbmcgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gYCMgSDFgLCBpcyBsZWZ0IGFsb25lIHJhdGhlclxuLy8gVGhhbiBjb3JyZWN0ZWQuIFRoZSBkZW1vLXZhdWx0IGNvdmVyYWdlIHN1aXRlIGV4ZW1wdHMgYFJFQURNRS5tZGAgZnJvbSBpdHMgSDEgY2hlY2ssIHNvIG5laXRoZXIgc2hhcGVcbi8vIElzIGEgZGVmZWN0IFx1MjAxNCBhbmQgYSByZWxlYXNlIGlzIHRoZSB3cm9uZyBtb21lbnQgdG8gc3RhcnQgZmFpbGluZyBvbiBvbmUuXG5mdW5jdGlvbiBpbmplY3RSZWFkbWVWZXJzaW9uKHppcDogQWRtWmlwLCByb290Rm9sZGVyTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgZW50cnkgPSB6aXAuZ2V0RW50cnkoam9pbihyb290Rm9sZGVyTmFtZSwgUkVBRE1FX0ZJTEVfTkFNRSkpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGVudHJ5LmdldERhdGEoKS50b1N0cmluZygndXRmLTgnKTtcbiAgY29uc3QgdmVyc2lvbmVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZShPUEVOSU5HX0hFQURJTkdfUkVHX0VYUCwgKGhlYWRpbmcpID0+IGAke2hlYWRpbmd9IHYke3ZlcnNpb259YCk7XG4gIGlmICh2ZXJzaW9uZWRDb250ZW50ID09PSBjb250ZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgemlwLnVwZGF0ZUZpbGUoZW50cnksIEJ1ZmZlci5mcm9tKHZlcnNpb25lZENvbnRlbnQsICd1dGYtOCcpKTtcbn1cblxuLy8gUmVhZHMgdGhlIGRlbW8gdmF1bHQncyBjb21taXR0ZWQgYC5vYnNpZGlhbi9hcHAuanNvbmAsIHJlZnVzaW5nIHRoZSBzZXR0aW5ncyB0aGlzIHBhY2thZ2Ugb3ducy5cbi8vXG4vLyBUaG9zZSBzZXR0aW5ncyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgYXJjaGl2ZSwgc28gYSBjb21taXR0ZWQgb25lIGlzIGEgc2Vjb25kIHNvdXJjZSBvZiB0cnV0aCB0aGF0XG4vLyBOb3RoaW5nIGtlZXBzIGluIHN0ZXAuIFRoZSBkZW1vLXZhdWx0IGNvdmVyYWdlIHN1aXRlIGFscmVhZHkgZmFpbHMgb24gaXQsIHdoaWNoIG1lYW5zIHJlYWNoaW5nIGhlcmVcbi8vIE1lYW5zIHRoYXQgZ2F0ZSB3YXMgc2tpcHBlZCBcdTIwMTQgc28gdGhpcyByZWZ1c2VzIHJhdGhlciB0aGFuIG92ZXJ3cml0aW5nIGEgdmFsdWUgc29tZWJvZHkgY2hvc2Ugb24gcHVycG9zZS5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRDb21taXR0ZWRBcHBKc29uKCk6IFByb21pc2U8RGVtb1ZhdWx0QXBwSnNvbj4ge1xuICBjb25zdCBhcHBKc29uUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHtcbiAgICBwYXRoOiBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRG90T2JzaWRpYW4sIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFwcEpzb24pXG4gIH0pO1xuICBjb25zdCBjb250ZW50ID0gZXhpc3RzU3luYyhhcHBKc29uUGF0aCkgPyBhd2FpdCByZWFkRmlsZShhcHBKc29uUGF0aCwgJ3V0Zi04JykgOiBudWxsO1xuICBjb25zdCBhcHBKc29uID0gcGFyc2VEZW1vVmF1bHRBcHBKc29uKHsgY29udGVudCwgcGF0aDogYXBwSnNvblBhdGggfSk7XG5cbiAgY29uc3Qgb3duZWRTZXR0aW5ncyA9IGZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5ncyh7IGFwcEpzb24gfSk7XG4gIGlmIChvd25lZFNldHRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHthcHBKc29uUGF0aH0gc2V0cyAke293bmVkU2V0dGluZ3Muam9pbignLCAnKX0sIHdoaWNoIG9ic2lkaWFuLWRldi11dGlscyBvd25zIGFuZCB3cml0ZXMgaW50byB0aGUgYXJjaGl2ZWQgZGVtbyB2YXVsdC4gU2V0dGluZ3MgaXQgb3ducyBtdXN0IG5vdCBiZSBjb21taXR0ZWQuYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gYXBwSnNvbjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNDQSxxQkFBbUI7QUFDbkIscUJBQTJCO0FBQzNCLHNCQUtPO0FBS1AsK0JBR087QUFDUCx3Q0FBd0M7QUFDeEMsa0JBR087QUFDUCxpQ0FJTztBQUNQLDJDQUEwQztBQUMxQyxrQkFHTztBQXBFUCxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQU07QUFDMUQsTUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxVQUFNLGVBQWU7QUFDckIsVUFBTSxNQUFNLGFBQWEsVUFBVTtBQUNuQyxRQUFJLE9BQU8sSUFBSSxrQkFBa0IsWUFBWTtBQUMzQyxhQUFPLElBQUksY0FBYyxVQUFVLEVBQUU7QUFBQSxJQUN2QztBQUFBLEVBQ0Y7QUFFQSxNQUFJLE9BQU8sV0FBVyxhQUFhO0FBQ2pDLFdBQU8sYUFBYSxTQUFTO0FBQUEsRUFDL0I7QUFHQSxTQUFPO0FBQ1QsR0FBRztBQXVEUCxNQUFNLDhCQUE4QjtB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
|
|
299
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICBjb25zdCB1cmwgPSBsb2NhbFJlcXVpcmUoJ25vZGU6dXJsJyk7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsLnBhdGhUb0ZpbGVVUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGFjdGl2ZVdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgfVxuXG4gICAgICAvLyBGYWxsYmFjayB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd25cbiAgICAgIHJldHVybiAnJztcbiAgICB9KSgpO1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIEFyY2hpdmVzIGEgcGx1Z2luJ3MgZGVtbyB2YXVsdCBhcyBhIHJlbGVhc2UgYXJ0aWZhY3QuXG4gKlxuICogQSBwbHVnaW4gY2FuIHNoaXAgYSBjdXJhdGVkIGRlbW8gdmF1bHQgYXQgYGRlbW8tdmF1bHQvYCBpbiBpdHMgcmVwbyByb290LiBBdCByZWxlYXNlIHRpbWUgdGhpc1xuICogbW9kdWxlIGluc3RhbGxzIHRoZSBmcmVzaGx5IGJ1aWx0IHBsdWdpbiBpbnRvIHRoYXQgdmF1bHQncyBgLm9ic2lkaWFuL3BsdWdpbnMvPGlkPi9gIGZvbGRlciBhbmRcbiAqIHppcHMgdGhlIHdob2xlIHZhdWx0IGludG8gYGRpc3QvYnVpbGQvPHBsdWdpbi1pZD4tZGVtby12YXVsdC56aXBgLCBzbyB0aGUgZXhpc3RpbmcgR2l0SHViLXJlbGVhc2VcbiAqIHN0ZXAgKHdoaWNoIHVwbG9hZHMgZXZlcnkgZmlsZSBpbiBgZGlzdC9idWlsZC9gKSBhdHRhY2hlcyBpdCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIFRoZSB2ZXJzaW9uIGlzIGRlbGliZXJhdGVseSBhYnNlbnQgZnJvbSB0aGF0IG5hbWUgYW5kIGxpdmVzIElOU0lERSB0aGUgYXJjaGl2ZSBpbnN0ZWFkIFx1MjAxNCBzZWVcbiAqIGBvYnNpZGlhbi9kZW1vLXZhdWx0LW5hbWluZy50c2AgZm9yIHdoeSBcdTIwMTQgaW4gdGhlIHR3byBwbGFjZXMgYSBwZXJzb24gYWN0dWFsbHkgbWVldHMgaXQ6IHRoZSB2YXVsdFxuICogc2l0cyB1bmRlciBhIHNpbmdsZSBgPHBsdWdpbi1pZD4tZGVtby12YXVsdC08dmVyc2lvbj4vYCBmb2xkZXIsIHNvIHVuemlwcGluZyBzZXZlcmFsIHJlbGVhc2VzIGJ5IGhhbmRcbiAqIGludG8gb25lIGZvbGRlciBuZWl0aGVyIGNvbGxpZGVzIG5vciBwcm9kdWNlcyBhbm9ueW1vdXMgZGlyZWN0b3JpZXMsIGFuZCB0aGUgdmF1bHQncyBgUkVBRE1FLm1kYFxuICogaGVhZGluZyBnYWlucyB0aGUgdmVyc2lvbiBpdCBkZW1vbnN0cmF0ZXMuXG4gKlxuICogVGhlIGFyY2hpdmVkIGNvcHkgYWxzbyBjYXJyaWVzIHRoZSBgLm9ic2lkaWFuL2FwcC5qc29uYCBzZXR0aW5ncyB0aGlzIHBhY2thZ2Ugb3ducyAoc2VlXG4gKiBgZGVtby12YXVsdC1hcHAtanNvbi50c2ApLiBUaG9zZSBzZXR0aW5ncyBhbmQgdGhlIFJFQURNRSBoZWFkaW5nIGFyZSB3cml0dGVuIGludG8gdGhlIFpJUCBFTlRSWSBhbmRcbiAqIG5ldmVyIGludG8gdGhlIHJlcG8gZm9sZGVyOiBib3RoIGZpbGVzIGFyZSB0cmFja2VkLCBhbmQgYHVwZGF0ZVZlcnNpb25gIGFyY2hpdmVzIGFmdGVyIGl0IGhhcyBhbHJlYWR5XG4gKiBwdXNoZWQsIHNvIGFuIGluLXBsYWNlIHdyaXRlIHdvdWxkIGxlYXZlIGFuIHVuY29tbWl0dGVkIGNoYW5nZSBiZWhpbmQgYSBwdWJsaXNoZWQgcmVsZWFzZS5cbiAqL1xuXG5pbXBvcnQgeyB6aXBTeW5jIH0gZnJvbSAnZmZsYXRlJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBta2RpcixcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHR5cGUgeyBEZW1vVmF1bHRIZWxwZXJTZXR0aW5ncyB9IGZyb20gJy4uL29ic2lkaWFuL2RlbW8tdmF1bHQtaGVscGVyLXNldHRpbmdzLnRzJztcbmltcG9ydCB0eXBlIHsgRGVtb1ZhdWx0QXBwSnNvbiB9IGZyb20gJy4vZGVtby12YXVsdC1hcHAtanNvbi50cyc7XG5cbmltcG9ydCB7XG4gIGdldERlbW9WYXVsdEFyY2hpdmVGaWxlTmFtZSxcbiAgZ2V0RGVtb1ZhdWx0Rm9sZGVyTmFtZVxufSBmcm9tICcuLi9vYnNpZGlhbi9kZW1vLXZhdWx0LW5hbWluZy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBnZXRGb2xkZXJOYW1lLFxuICBqb2luLFxuICByZWxhdGl2ZVxufSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIGJ1aWxkQXJjaGl2ZWREZW1vVmF1bHRBcHBKc29uQ29udGVudCxcbiAgZmluZE93bmVkRGVtb1ZhdWx0QXBwSnNvblNldHRpbmdzLFxuICBwYXJzZURlbW9WYXVsdEFwcEpzb25cbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWFwcC1qc29uLnRzJztcbmltcG9ydCB7IHJlYWRkaXJQb3NpeCB9IGZyb20gJy4vZnMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi9yb290LnRzJztcblxuY29uc3QgREVNT19WQVVMVF9IRUxQRVJfUExVR0lOX0lEID0gJ2RlbW8tdmF1bHQtaGVscGVyJztcbmNvbnN0IERBVEFfSlNPTl9GSUxFX05BTUUgPSAnZGF0YS5qc29uJztcbmNvbnN0IERBVEFfSlNPTl9JTkRFTlQgPSAyO1xuY29uc3QgUkVBRE1FX0ZJTEVfTkFNRSA9ICdSRUFETUUubWQnO1xuXG4vLyBUaGUgUkVBRE1FJ3Mgb3BlbmluZyBgIyBIMWAsIGFuZCBvbmx5IHRoYXQgb25lOiB3aXRob3V0IHRoZSBgbWAgZmxhZyB0aGUgbWF0Y2ggaXMgYW5jaG9yZWQgdG8gdGhlIHN0YXJ0XG4vLyBPZiB0aGUgZmlsZSwgYW5kIGAuYCBzdG9wcyBhdCB0aGUgbmV3bGluZSB0aGF0IGVuZHMgdGhlIGxpbmUuXG5jb25zdCBPUEVOSU5HX0hFQURJTkdfUkVHX0VYUCA9IC9eIyAuKi87XG5cbi8qKlxuICogVGhlIGFyY2hpdmUncyBlbnRyaWVzLCBrZXllZCBieSB0aGUgbmFtZSBlYWNoIG9uZSB0YWtlcyBpbnNpZGUgdGhlIFpJUC5cbiAqXG4gKiBUaGUgd2hvbGUgYXJjaGl2ZSBpcyBhc3NlbWJsZWQgYXMgdGhpcyBtYXAgYW5kIHNlcmlhbGl6ZWQgb25jZSwgc28gaW5qZWN0aW5nIGFuIGVudHJ5IGlzIGFuIG9yZGluYXJ5XG4gKiBgc2V0YCByYXRoZXIgdGhhbiBhIG11dGF0aW9uIG9mIGEgaGFsZi1idWlsdCBhcmNoaXZlIG9iamVjdC5cbiAqL1xudHlwZSBEZW1vVmF1bHRaaXBFbnRyaWVzID0gTWFwPHN0cmluZywgQnVmZmVyPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaW5qZWN0QXBwSnNvbn0uXG4gKi9cbmludGVyZmFjZSBJbmplY3RBcHBKc29uUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21taXR0ZWQgc2V0dGluZ3MgdGhlIG93bmVkIG9uZXMgYXJlIG1lcmdlZCBvdmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSnNvbjogRGVtb1ZhdWx0QXBwSnNvbjtcblxuICAvKipcbiAgICogVGhlIGFyY2hpdmUncyBlbnRyaWVzLCBlZGl0ZWQgaW4gcGxhY2UuXG4gICAqL1xuICByZWFkb25seSBlbnRyaWVzOiBEZW1vVmF1bHRaaXBFbnRyaWVzO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJjaGl2ZSdzIHNpbmdsZSB0b3AtbGV2ZWwgZm9sZGVyLCB3aGljaCBldmVyeSBlbnRyeSBuYW1lIGlzIHJlbGF0aXZlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdEZvbGRlck5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaW5qZWN0UmVhZG1lVmVyc2lvbn0uXG4gKi9cbmludGVyZmFjZSBJbmplY3RSZWFkbWVWZXJzaW9uUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcmNoaXZlJ3MgZW50cmllcywgZWRpdGVkIGluIHBsYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cmllczogRGVtb1ZhdWx0WmlwRW50cmllcztcblxuICAvKipcbiAgICogVGhlIGFyY2hpdmUncyBzaW5nbGUgdG9wLWxldmVsIGZvbGRlciwgd2hpY2ggZXZlcnkgZW50cnkgbmFtZSBpcyByZWxhdGl2ZSB0by5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gdmVyc2lvbiB0aGUgdmF1bHQgZGVtb25zdHJhdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBtaW5pbWFsIHNoYXBlIG9mIGEgcGx1Z2luIGBtYW5pZmVzdC5qc29uYCByZWFkIGJ5IHtAbGluayBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0fS5cbiAqL1xuaW50ZXJmYWNlIFBsdWdpbk1hbmlmZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQsIHVzZWQgYXMgdGhlIGZvbGRlciBuYW1lIHVuZGVyIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zL2AuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIHZlcnNpb24sIGVtYmVkZGVkIGluIHRoZSBhcmNoaXZlJ3MgdG9wLWxldmVsIGZvbGRlciBuYW1lIGFuZCBpdHMgUkVBRE1FIGhlYWRpbmcuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlYWREZW1vVmF1bHRFbnRyaWVzfS5cbiAqL1xuaW50ZXJmYWNlIFJlYWREZW1vVmF1bHRFbnRyaWVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBmb2xkZXIgdG8gcmVhZCwgYXMgYW4gYWJzb2x1dGUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGRlbW9WYXVsdFBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFyY2hpdmUncyBzaW5nbGUgdG9wLWxldmVsIGZvbGRlciwgd2hpY2ggZXZlcnkgZW50cnkgbmFtZSBpcyByZWxhdGl2ZSB0by5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXJOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXJjaGl2ZXMgdGhlIHBsdWdpbidzIGRlbW8gdmF1bHQgKGBkZW1vLXZhdWx0L2AgaW4gdGhlIHJlcG8gcm9vdCkgYXMgYSByZWxlYXNlIGFydGlmYWN0LlxuICpcbiAqIEluc3RhbGxzIHRoZSBmcmVzaGx5IGJ1aWx0IHBsdWdpbiBmcm9tIGBkaXN0L2J1aWxkL2AgaW50byB0aGUgdmF1bHQnc1xuICogYC5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYCBmb2xkZXIsIHRoZW4gemlwcyB0aGUgd2hvbGUgdmF1bHQgdG9cbiAqIGBkaXN0L2J1aWxkLzxwbHVnaW4taWQ+LWRlbW8tdmF1bHQuemlwYCwgdW5kZXIgYSBzaW5nbGUgYDxwbHVnaW4taWQ+LWRlbW8tdmF1bHQtPHZlcnNpb24+L2AgZm9sZGVyLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGNyZWF0ZWQgemlwIGFyY2hpdmUsIG9yXG4gKiBgbnVsbGAgaWYgdGhlIHJlcG8gaGFzIG5vIGBkZW1vLXZhdWx0L2AgZm9sZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXJjaGl2ZVBsdWdpbkRlbW9WYXVsdCgpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3QgZGVtb1ZhdWx0UGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGVtb1ZhdWx0IH0pO1xuICBpZiAoIWV4aXN0c1N5bmMoZGVtb1ZhdWx0UGF0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RKc29uIH0pO1xuICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUobWFuaWZlc3RQYXRoLCAndXRmLTgnKSkgYXMgUGx1Z2luTWFuaWZlc3Q7XG5cbiAgY29uc3QgcGx1Z2luRm9sZGVyID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoe1xuICAgIHBhdGg6IGpvaW4oXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EZW1vVmF1bHQsXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Eb3RPYnNpZGlhbixcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBsdWdpbnMsXG4gICAgICBtYW5pZmVzdC5pZFxuICAgIClcbiAgfSk7XG4gIGF3YWl0IG1rZGlyKHBsdWdpbkZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgZGlzdEJ1aWxkUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkIH0pO1xuICBhd2FpdCBjcChkaXN0QnVpbGRQYXRoLCBwbHVnaW5Gb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGF3YWl0IGluamVjdERlbW9WYXVsdEhlbHBlcihtYW5pZmVzdC5pZCk7XG5cbiAgY29uc3QgemlwUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHtcbiAgICBwYXRoOiBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCwgZ2V0RGVtb1ZhdWx0QXJjaGl2ZUZpbGVOYW1lKG1hbmlmZXN0LmlkKSlcbiAgfSk7XG4gIGNvbnN0IHJvb3RGb2xkZXJOYW1lID0gZ2V0RGVtb1ZhdWx0Rm9sZGVyTmFtZSh7XG4gICAgcGx1Z2luSWQ6IG1hbmlmZXN0LmlkLFxuICAgIHZlcnNpb246IG1hbmlmZXN0LnZlcnNpb25cbiAgfSk7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkRGVtb1ZhdWx0RW50cmllcyh7XG4gICAgZGVtb1ZhdWx0UGF0aCxcbiAgICByb290Rm9sZGVyTmFtZVxuICB9KTtcbiAgaW5qZWN0QXBwSnNvbih7XG4gICAgYXBwSnNvbjogYXdhaXQgcmVhZENvbW1pdHRlZEFwcEpzb24oKSxcbiAgICBlbnRyaWVzLFxuICAgIHJvb3RGb2xkZXJOYW1lXG4gIH0pO1xuICBpbmplY3RSZWFkbWVWZXJzaW9uKHtcbiAgICBlbnRyaWVzLFxuICAgIHJvb3RGb2xkZXJOYW1lLFxuICAgIHZlcnNpb246IG1hbmlmZXN0LnZlcnNpb25cbiAgfSk7XG4gIC8vIEV2ZXJ5IGVudHJ5IGlzIHN0YW1wZWQgd2l0aCB0aGUgbW9tZW50IHRoZSBhcmNoaXZlIGlzIGJ1aWx0IHJhdGhlciB0aGFuIHRoZSBmaWxlJ3Mgb3duIG10aW1lLCB3aGljaCBpc1xuICAvLyBXaGF0IHRoZSBwcmV2aW91cyBhcmNoaXZlciB3cm90ZS4gQSBkZW1vIHZhdWx0J3MgY29tbWl0dGVkIHRpbWVzdGFtcHMgYXJlIGNoZWNrb3V0IGFydGlmYWN0cyBvZiB3aG9ldmVyXG4gIC8vIFJhbiB0aGUgcmVsZWFzZSwgc28gdGhleSBjYXJyeSBub3RoaW5nIGEgcmVhZGVyIGNvdWxkIHVzZTsgdGhlIGJ1aWxkIHRpbWUgYXQgbGVhc3QgZGVzY3JpYmVzIHRoZVxuICAvLyBBcmNoaXZlLlxuICBhd2FpdCB3cml0ZUZpbGUoemlwUGF0aCwgemlwU3luYyhPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcykpKTtcbiAgcmV0dXJuIHppcFBhdGg7XG59XG5cbi8vIFN0b3JlcyB0aGUgYXJjaGl2ZWQgdmF1bHQncyBgLm9ic2lkaWFuL2FwcC5qc29uYCBcdTIwMTQgdGhlIGNvbW1pdHRlZCBzZXR0aW5ncyB3aXRoIHRoZSBvd25lZCBvbmVzIG1lcmdlZFxuLy8gT3ZlciB0aGVtLiBUaGUgRU5UUlkgaXMgd3JpdHRlbiByYXRoZXIgdGhhbiB0aGUgZmlsZSwgc28gdGhlIHJlcG8gZm9sZGVyIGlzIGxlZnQgZXhhY3RseSBhcyBpdCB3YXMsIGFuZFxuLy8gQSB2YXVsdCB3aXRoIG5vdGhpbmcgZWxzZSB0byBjb25maWd1cmUgXHUyMDE0IHdoaWNoIGNvbW1pdHMgbm8gYGFwcC5qc29uYCBhdCBhbGwgXHUyMDE0IGdldHMgb25lIGhlcmUgcmVnYXJkbGVzcy5cbmZ1bmN0aW9uIGluamVjdEFwcEpzb24ocGFyYW1zOiBJbmplY3RBcHBKc29uUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBhcHBKc29uLFxuICAgIGVudHJpZXMsXG4gICAgcm9vdEZvbGRlck5hbWVcbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCBlbnRyeU5hbWUgPSBqb2luKHJvb3RGb2xkZXJOYW1lLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Eb3RPYnNpZGlhbiwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQXBwSnNvbik7XG4gIGVudHJpZXMuc2V0KGVudHJ5TmFtZSwgQnVmZmVyLmZyb20oYnVpbGRBcmNoaXZlZERlbW9WYXVsdEFwcEpzb25Db250ZW50KHsgYXBwSnNvbiB9KSwgJ3V0Zi04JykpO1xufVxuXG4vLyBJbmplY3RzIHRoZSBidWlsdCwgYG9ic2lkaWFuLWRldi11dGlsc2Atb3duZWQgYGRlbW8tdmF1bHQtaGVscGVyYCBib290c3RyYXAgcGx1Z2luIChzaGlwcGVkIGluIHRoaXMgcGFja2FnZSkgaW50byB0aGUgZGVtbyB2YXVsdCwgc28gbm8gcGVyLXZhdWx0IGNvcHkgaXMgY29tbWl0dGVkIGFuZCBhbiBgb2JzaWRpYW4tZGV2LXV0aWxzYCBidW1wIHByb3BhZ2F0ZXMgZml4ZXMuXG4vL1xuLy8gQWxvbmdzaWRlIHRoZSBiaW5hcmllcyBpdCB3cml0ZXMgdGhlIGhlbHBlcidzIG93biBgZGF0YS5qc29uYCBuYW1pbmcgdGhlIGRlbW9uc3RyYXRlZCBwbHVnaW4uIFRoYXQgaXNcbi8vIFRoZSBvbmUgbW9tZW50IHRoZSBpZCBpcyBrbm93biBmb3IgY2VydGFpbiBcdTIwMTQgaXQgY29tZXMgZnJvbSB0aGUgcGx1Z2luJ3Mgb3duIG1hbmlmZXN0IFx1MjAxNCB3aGVyZWFzIHRoZVxuLy8gT3BlbmVkIHZhdWx0IG9ubHkgb2ZmZXJzIHBsdWdpbiBmb2xkZXJzIHRvIGNvdW50LCB3aGljaCB0aGUgYm9vdHN0cmFwIGl0c2VsZiBhZGRzIHRvIChzZWVcbi8vIGBEZW1vVmF1bHRIZWxwZXJTZXR0aW5nc2ApLlxuYXN5bmMgZnVuY3Rpb24gaW5qZWN0RGVtb1ZhdWx0SGVscGVyKGRlbW9lZFBsdWdpbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZUZvbGRlciA9IGdldFJvb3RGb2xkZXIoZ2V0Rm9sZGVyTmFtZShpbXBvcnQubWV0YS51cmwpKTtcbiAgaWYgKCFwYWNrYWdlRm9sZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSB0aGUgb2JzaWRpYW4tZGV2LXV0aWxzIHBhY2thZ2UgZm9sZGVyIHRvIGluamVjdCB0aGUgZGVtby12YXVsdC1oZWxwZXIgcGx1Z2luLicpO1xuICB9XG5cbiAgY29uc3QgaGVscGVyU291cmNlUGF0aCA9IGpvaW4ocGFja2FnZUZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0RGVtb1ZhdWx0SGVscGVyKTtcbiAgY29uc3QgaGVscGVyRm9sZGVyID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoe1xuICAgIHBhdGg6IGpvaW4oXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EZW1vVmF1bHQsXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Eb3RPYnNpZGlhbixcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBsdWdpbnMsXG4gICAgICBERU1PX1ZBVUxUX0hFTFBFUl9QTFVHSU5fSURcbiAgICApXG4gIH0pO1xuICBhd2FpdCBta2RpcihoZWxwZXJGb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBjcChoZWxwZXJTb3VyY2VQYXRoLCBoZWxwZXJGb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHNldHRpbmdzOiBEZW1vVmF1bHRIZWxwZXJTZXR0aW5ncyA9IHsgZGVtb2VkUGx1Z2luSWQgfTtcbiAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oaGVscGVyRm9sZGVyLCBEQVRBX0pTT05fRklMRV9OQU1FKSwgYCR7SlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIERBVEFfSlNPTl9JTkRFTlQpfVxcbmAsICd1dGYtOCcpO1xufVxuXG4vLyBOYW1lcyB0aGUgdmVyc2lvbiBvbiB0aGUgYXJjaGl2ZWQgYFJFQURNRS5tZGAncyBoZWFkaW5nLCBzbyB0aGUgdmF1bHQgc2F5cyB3aGljaCByZWxlYXNlIGl0IGRlbW9uc3RyYXRlc1xuLy8gSG93ZXZlciBmYXIgaXQgdHJhdmVscyBmcm9tIHRoZSByZWxlYXNlIHBhZ2UgaXQgd2FzIGRvd25sb2FkZWQgZnJvbS5cbi8vXG4vLyBFbnRyeS1vbmx5LCBmb3IgdGhlIHNhbWUgcmVhc29uIGBpbmplY3RBcHBKc29uYCBpczogdGhlIGNvbW1pdHRlZCBSRUFETUUgaXMgYSB0cmFja2VkLCBoYW5kLWF1dGhvcmVkXG4vLyBGaWxlIGFuZCBgdXBkYXRlVmVyc2lvbmAgYXJjaGl2ZXMgYWZ0ZXIgaXQgaGFzIGFscmVhZHkgcHVzaGVkLlxuLy9cbi8vIEEgdmF1bHQgdGhhdCBzaGlwcyBubyBSRUFETUUsIG9yIG9uZSBvcGVuaW5nIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIGAjIEgxYCwgaXMgbGVmdCBhbG9uZSByYXRoZXJcbi8vIFRoYW4gY29ycmVjdGVkLiBUaGUgZGVtby12YXVsdCBjb3ZlcmFnZSBzdWl0ZSBleGVtcHRzIGBSRUFETUUubWRgIGZyb20gaXRzIEgxIGNoZWNrLCBzbyBuZWl0aGVyIHNoYXBlXG4vLyBJcyBhIGRlZmVjdCBcdTIwMTQgYW5kIGEgcmVsZWFzZSBpcyB0aGUgd3JvbmcgbW9tZW50IHRvIHN0YXJ0IGZhaWxpbmcgb24gb25lLlxuZnVuY3Rpb24gaW5qZWN0UmVhZG1lVmVyc2lvbihwYXJhbXM6IEluamVjdFJlYWRtZVZlcnNpb25QYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGVudHJpZXMsXG4gICAgcm9vdEZvbGRlck5hbWUsXG4gICAgdmVyc2lvblxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGVudHJ5TmFtZSA9IGpvaW4ocm9vdEZvbGRlck5hbWUsIFJFQURNRV9GSUxFX05BTUUpO1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZ2V0KGVudHJ5TmFtZSk7XG4gIGlmICghZW50cnkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gZW50cnkudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gIGNvbnN0IHZlcnNpb25lZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoT1BFTklOR19IRUFESU5HX1JFR19FWFAsIChoZWFkaW5nKSA9PiBgJHtoZWFkaW5nfSB2JHt2ZXJzaW9ufWApO1xuICBpZiAodmVyc2lvbmVkQ29udGVudCA9PT0gY29udGVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVudHJpZXMuc2V0KGVudHJ5TmFtZSwgQnVmZmVyLmZyb20odmVyc2lvbmVkQ29udGVudCwgJ3V0Zi04JykpO1xufVxuXG4vLyBSZWFkcyB0aGUgZGVtbyB2YXVsdCdzIGNvbW1pdHRlZCBgLm9ic2lkaWFuL2FwcC5qc29uYCwgcmVmdXNpbmcgdGhlIHNldHRpbmdzIHRoaXMgcGFja2FnZSBvd25zLlxuLy9cbi8vIFRob3NlIHNldHRpbmdzIGFyZSBpbmplY3RlZCBpbnRvIHRoZSBhcmNoaXZlLCBzbyBhIGNvbW1pdHRlZCBvbmUgaXMgYSBzZWNvbmQgc291cmNlIG9mIHRydXRoIHRoYXRcbi8vIE5vdGhpbmcga2VlcHMgaW4gc3RlcC4gVGhlIGRlbW8tdmF1bHQgY292ZXJhZ2Ugc3VpdGUgYWxyZWFkeSBmYWlscyBvbiBpdCwgd2hpY2ggbWVhbnMgcmVhY2hpbmcgaGVyZVxuLy8gTWVhbnMgdGhhdCBnYXRlIHdhcyBza2lwcGVkIFx1MjAxNCBzbyB0aGlzIHJlZnVzZXMgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgYSB2YWx1ZSBzb21lYm9keSBjaG9zZSBvbiBwdXJwb3NlLlxuYXN5bmMgZnVuY3Rpb24gcmVhZENvbW1pdHRlZEFwcEpzb24oKTogUHJvbWlzZTxEZW1vVmF1bHRBcHBKc29uPiB7XG4gIGNvbnN0IGFwcEpzb25QYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoe1xuICAgIHBhdGg6IGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGVtb1ZhdWx0LCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Eb3RPYnNpZGlhbiwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQXBwSnNvbilcbiAgfSk7XG4gIGNvbnN0IGNvbnRlbnQgPSBleGlzdHNTeW5jKGFwcEpzb25QYXRoKSA/IGF3YWl0IHJlYWRGaWxlKGFwcEpzb25QYXRoLCAndXRmLTgnKSA6IG51bGw7XG4gIGNvbnN0IGFwcEpzb24gPSBwYXJzZURlbW9WYXVsdEFwcEpzb24oeyBjb250ZW50LCBwYXRoOiBhcHBKc29uUGF0aCB9KTtcblxuICBjb25zdCBvd25lZFNldHRpbmdzID0gZmluZE93bmVkRGVtb1ZhdWx0QXBwSnNvblNldHRpbmdzKHsgYXBwSnNvbiB9KTtcbiAgaWYgKG93bmVkU2V0dGluZ3MubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2FwcEpzb25QYXRofSBzZXRzICR7b3duZWRTZXR0aW5ncy5qb2luKCcsICcpfSwgd2hpY2ggb2JzaWRpYW4tZGV2LXV0aWxzIG93bnMgYW5kIHdyaXRlcyBpbnRvIHRoZSBhcmNoaXZlZCBkZW1vIHZhdWx0LiBTZXR0aW5ncyBpdCBvd25zIG11c3Qgbm90IGJlIGNvbW1pdHRlZC5gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhcHBKc29uO1xufVxuXG4vLyBSZWFkcyBldmVyeSBmaWxlIGluIHRoZSBkZW1vIHZhdWx0IGFzIGFuIGFyY2hpdmUgZW50cnksIHVuZGVyIHRoZSBzaW5nbGUgdG9wLWxldmVsIGZvbGRlciB0aGUgYXJjaGl2ZVxuLy8gU2l0cyBpbi5cbi8vXG4vLyBPbmx5IEZJTEVTIGJlY29tZSBlbnRyaWVzLiBHaXQgY2Fubm90IHRyYWNrIGFuIGVtcHR5IGZvbGRlciwgc28gYSBjb21taXR0ZWQgZGVtbyB2YXVsdCBoYXMgbm9uZSBcdTIwMTQgYW5kXG4vLyBgZXh0cmFjdFppcEFyY2hpdmVgIGNyZWF0ZXMgYW4gZW50cnkncyBwYXJlbnQgZm9sZGVycyB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl2ZSBkZWNsYXJlZCB0aGVtLCBzbyBhXG4vLyBGb2xkZXIgZW50cnkgd291bGQgZWFybiBub3RoaW5nIGV2ZW4gaWYgb25lIGNvdWxkIGV4aXN0LlxuYXN5bmMgZnVuY3Rpb24gcmVhZERlbW9WYXVsdEVudHJpZXMocGFyYW1zOiBSZWFkRGVtb1ZhdWx0RW50cmllc1BhcmFtcyk6IFByb21pc2U8RGVtb1ZhdWx0WmlwRW50cmllcz4ge1xuICBjb25zdCB7XG4gICAgZGVtb1ZhdWx0UGF0aCxcbiAgICByb290Rm9sZGVyTmFtZVxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGVudHJpZXM6IERlbW9WYXVsdFppcEVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgQnVmZmVyPigpO1xuICBmb3IgKGNvbnN0IGRpcmVudCBvZiBhd2FpdCByZWFkZGlyUG9zaXgoZGVtb1ZhdWx0UGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBpZiAoIWRpcmVudC5pc0ZpbGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGpvaW4oZGlyZW50LnBhcmVudFBhdGgsIGRpcmVudC5uYW1lKTtcbiAgICBlbnRyaWVzLnNldChqb2luKHJvb3RGb2xkZXJOYW1lLCByZWxhdGl2ZShkZW1vVmF1bHRQYXRoLCBwYXRoKSksIGF3YWl0IHJlYWRGaWxlKHBhdGgpKTtcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQ0Esb0JBQXdCO0FBQ3hCLHFCQUEyQjtBQUMzQixzQkFLTztBQUtQLCtCQUdPO0FBQ1Asd0NBQXdDO0FBQ3hDLGtCQUlPO0FBQ1AsaUNBSU87QUFDUCxnQkFBNkI7QUFD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
|