obsidian-integration-testing 2.5.8 → 2.6.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/dist/lib/cjs/emulator-args.cjs +32 -0
- package/dist/lib/cjs/emulator-args.d.cts +12 -0
- package/dist/lib/cjs/eval-in-obsidian.cjs +4 -3
- package/dist/lib/cjs/transport-desktop-cli.cjs +7 -4
- package/dist/lib/cjs/transport-desktop-cli.d.cts +3 -0
- package/dist/lib/cjs/transport-factory.cjs +5 -3
- package/dist/lib/esm/emulator-args.d.mts +12 -0
- package/dist/lib/esm/emulator-args.mjs +8 -0
- package/dist/lib/esm/eval-in-obsidian.mjs +4 -3
- package/dist/lib/esm/transport-desktop-cli.d.mts +3 -0
- package/dist/lib/esm/transport-desktop-cli.mjs +7 -4
- package/dist/lib/esm/transport-factory.mjs +5 -3
- package/dist/obsidian-integration-testing-2.6.0.tgz +0 -0
- package/package.json +1 -1
- package/dist/obsidian-integration-testing-2.5.7.tgz +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var emulator_args_exports = {};
|
|
20
|
+
__export(emulator_args_exports, {
|
|
21
|
+
buildEmulatorArgs: () => buildEmulatorArgs
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(emulator_args_exports);
|
|
24
|
+
const DNS_SERVER = "8.8.8.8";
|
|
25
|
+
function buildEmulatorArgs(avdName) {
|
|
26
|
+
return ["-avd", avdName, "-no-snapshot-save", "-dns-server", DNS_SERVER];
|
|
27
|
+
}
|
|
28
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
29
|
+
0 && (module.exports = {
|
|
30
|
+
buildEmulatorArgs
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWFyZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCdWlsZHMgdGhlIGFyZ3VtZW50IGxpc3QgZm9yIHNwYXduaW5nIHRoZSBBbmRyb2lkIGVtdWxhdG9yLlxuICovXG5cbmNvbnN0IEROU19TRVJWRVIgPSAnOC44LjguOCc7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBhcmd1bWVudCBsaXN0IGZvciBzcGF3bmluZyB0aGUgQW5kcm9pZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0gYXZkTmFtZSAtIFRoZSBBbmRyb2lkIFZpcnR1YWwgRGV2aWNlIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYXJyYXkgdG8gcGFzcyB0byB0aGUgZW11bGF0b3IgYmluYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXVsYXRvckFyZ3MoYXZkTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWyctYXZkJywgYXZkTmFtZSwgJy1uby1zbmFwc2hvdC1zYXZlJywgJy1kbnMtc2VydmVyJywgRE5TX1NFUlZFUl07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsTUFBTSxhQUFhO0FBUVosU0FBUyxrQkFBa0IsU0FBMkI7QUFDM0QsU0FBTyxDQUFDLFFBQVEsU0FBUyxxQkFBcUIsZUFBZSxVQUFVO0FBQ3pFOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Builds the argument list for spawning the Android emulator.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Builds the argument list for spawning the Android emulator.
|
|
8
|
+
*
|
|
9
|
+
* @param avdName - The Android Virtual Device name.
|
|
10
|
+
* @returns The argument array to pass to the emulator binary.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildEmulatorArgs(avdName: string): string[];
|
|
@@ -92,9 +92,10 @@ async function evalInObsidian(params) {
|
|
|
92
92
|
throw new Error(`evalInObsidian: Obsidian returned non-JSON output: ${resultStr}`);
|
|
93
93
|
}
|
|
94
94
|
if (parsed !== null && typeof parsed === "object" && EVAL_ERROR_MARKER in parsed) {
|
|
95
|
-
const errorDetail = parsed[EVAL_ERROR_MARKER];
|
|
95
|
+
const errorDetail = String(parsed[EVAL_ERROR_MARKER]);
|
|
96
|
+
const sanitizedDetail = errorDetail.replace(/\(https?:\/\/localhost\/:(?<line>\d)/g, "(obsidian-webview:$<line>");
|
|
96
97
|
throw new Error(`evalInObsidian: Error inside Obsidian:
|
|
97
|
-
${
|
|
98
|
+
${sanitizedDetail}`);
|
|
98
99
|
}
|
|
99
100
|
return parsed;
|
|
100
101
|
}
|
|
@@ -140,4 +141,4 @@ function getObsidianModulePluginFn() {
|
|
|
140
141
|
0 && (module.exports = {
|
|
141
142
|
evalInObsidian
|
|
142
143
|
});
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZXNwYWNlIC0tIFdlIG5lZWQgdG8gcmVmZXJlbmNlIGBvYnNpZGlhbmAgbW9kdWxlLlxuaW1wb3J0IHR5cGUgKiBhcyBvYnNpZGlhbiBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmdzLFxuICBDb250ZXh0SWRcbn0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZ2V0VHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5janMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLmNqcyc7XG5pbXBvcnQgeyBqc29uV2l0aEZ1bmN0aW9ucyB9IGZyb20gJy4vanNvbi13aXRoLWZ1bmN0aW9ucy5janMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuL3NlcmlhbGl6ZS1lcnJvci5janMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmNvbnN0IEVWQUxfRVJST1JfTUFSS0VSID0gJ19fb2JzaWRpYW5FdmFsRXJyb3JfXyc7XG5cbmludGVyZmFjZSBFeHBvcnRzV2l0aERlZmF1bHQge1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG5jb25zdCBOT19PVVRQVVQgPSAnKG5vIG91dHB1dCknO1xuXG4vKipcbiAqIENvbW1vbiBhcmd1bWVudHMgYXV0b21hdGljYWxseSBwcm92aWRlZCB0byBldmVyeSB7QGxpbmsgZXZhbEluT2JzaWRpYW59IGNhbGxiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkFyZ3Mge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHtAbGluayBBcHB9IGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBgb2JzaWRpYW5gIG1vZHVsZSwgcmVzb2x2ZWQgYXQgcnVudGltZSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gICAqL1xuICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIGFyZ3M/OiBBcmdzO1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBDb250ZXh0SWR9IGxpbmtpbmcgdGhpcyBjYWxsIHRvIGEgcGVyc2lzdGVudCBzdG9yZSBvbiBgd2luZG93YFxuICAgKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2Vzcy4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgdHlwZWQgYGNvbnRleHRgIG9iamVjdFxuICAgKiB0aGF0IHN1cnZpdmVzIGFjcm9zcyBjYWxscyBzaGFyaW5nIHRoZSBzYW1lIElELlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBjb250ZXh0YCBpcyBhIGZyZXNoIGVtcHR5IG9iamVjdCBlYWNoIGNhbGwuXG4gICAqL1xuICBjb250ZXh0SWQ/OiBUQ29udGV4dElkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gdGhlIE9ic2lkaWFuIGNvbnRleHQuXG4gICAqL1xuICBmbihhcmdzOiBBcmdzICYgQ29tbW9uQXJncyAmIENvbnRleHRBcmdzPFRDb250ZXh0SWQ+KTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBTa2lwcyBwcmUtZmxpZ2h0IGNoZWNrcyAodmF1bHQgcmVnaXN0cmF0aW9uLCBDTEkgYXZhaWxhYmlsaXR5KS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHZhdWx0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQgZm9yIHRoaXMgY2FsbC4gV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSB0cmFuc3BvcnRcbiAgICogY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIgKHNldCBieSB0aGUgZnJhbWV3b3JrIGFkYXB0ZXIncyBnbG9iYWwgc2V0dXApLlxuICAgKi9cbiAgdHJhbnNwb3J0PzogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiB2YXVsdC4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcGxhaW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gYXJncyBvYmplY3QgdGhhdCBpbmNsdWRlcyBgYXBwYCwgYG9ic2lkaWFuTW9kdWxlYCxcbiAqIGBjb250ZXh0YCwgYW5kIGFueSBhZGRpdGlvbmFsIGBhcmdzYCBwYXNzZWQgYnkgdGhlIGNhbGxlci5cbiAqIEl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgaW52b2tlZCBhcyBhbiBJSUZFLlxuICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgc2VsZi1jb250YWluZWQgXHUyMDE0IGNsb3N1cmVzIG92ZXIgbG9jYWwgdmFyaWFibGVzIHdpbGwgbm90IHdvcmsuXG4gKiBQYXNzIGFueSBuZWVkZWQgdmFsdWVzIGFzIGBhcmdzYCBcdTIwMTQgdGhleSBhcmUgSlNPTi1zZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgb24gdGhlIE9ic2lkaWFuIHNpZGUuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBgSlNPTi5zdHJpbmdpZnlgJ2Qgb24gdGhlIE9ic2lkaWFuIHNpZGUgYW5kIHBhcnNlZCBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmbmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsSW5PYnNpZGlhbjxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcGFyYW1zOiBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzLCBSZXN1bHQsIFRDb250ZXh0SWQ+XG4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIGBmbmAgY2FuIGJlIHVuYm91bmQuXG4gIGNvbnN0IHsgYXJncyA9IHt9LCBjb250ZXh0SWQsIGZuLCBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzID0gZmFsc2UsIHRyYW5zcG9ydDogdHJhbnNwb3J0T3ZlcnJpZGUsIHZhdWx0UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBjd2QgPSB2YXVsdFBhdGggPz8gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBDaGVjazogVmF1bHQgcGF0aCBleGlzdHMgb24gZGlzay5cbiAgaWYgKHZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmICFleGlzdHNTeW5jKHZhdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7dmF1bHRQYXRofWApO1xuICB9XG5cbiAgY29uc3QgdHJhbnNwb3J0ID0gdHJhbnNwb3J0T3ZlcnJpZGUgPz8gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoZ2V0VHJhbnNwb3J0T3B0aW9ucygpKTtcblxuICBpZiAoIXNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MpIHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHJlZmxpZ2h0Q2hlY2soY3dkKTtcbiAgfVxuXG4gIGNvbnN0IFNMSUNFX1NUQVJUID0gMjtcbiAgY29uc3QgcmFuZG9tU3VmZml4ID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKFNMSUNFX1NUQVJUKTtcbiAgY29uc3QgY29udGV4dEV4cHIgPSBjb250ZXh0SWRcbiAgICA/IGAoKHdpbmRvdy5fX29ic2lkaWFuQ29udGV4dHNfXyA/Pz0ge30pW1wiJHtTdHJpbmcoY29udGV4dElkKX1cIl0gPz89IHt9KWBcbiAgICA6ICd7fSc7XG4gIGNvbnN0IGV4cHJlc3Npb24gPSBgXG4oYXN5bmMgKCkgPT4ge1xuICBjb25zdCBmbiR7cmFuZG9tU3VmZml4fSA9ICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGZuKX07XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlJHtyYW5kb21TdWZmaXh9ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWFwcC53b3Jrc3BhY2UuYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gICAgfVxuICAgIGlmICghYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcbiAgICB9XG4gICAgJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5Gbil9XG4gICAgJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGUpfVxuICAgIHJldHVybiBhd2FpdCBnZXRPYnNpZGlhbk1vZHVsZSgpO1xuICB9KSgpO1xuICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhzZXJpYWxpemVFcnJvcil9XG4gIGNvbnN0IGFyZ3Mke3JhbmRvbVN1ZmZpeH0gPSAke2pzb25XaXRoRnVuY3Rpb25zKGFyZ3MpfTtcbiAgY29uc3QgY29udGV4dCR7cmFuZG9tU3VmZml4fSA9ICR7Y29udGV4dEV4cHJ9O1xuICBjb25zdCBmdWxsQXJncyR7cmFuZG9tU3VmZml4fSA9IE9iamVjdC5hc3NpZ24oYXJncyR7cmFuZG9tU3VmZml4fSwgeyBhcHAsIG9ic2lkaWFuTW9kdWxlOiBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSwgY29udGV4dDogY29udGV4dCR7cmFuZG9tU3VmZml4fSB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQke3JhbmRvbVN1ZmZpeH0gPSBhd2FpdCBmbiR7cmFuZG9tU3VmZml4fShmdWxsQXJncyR7cmFuZG9tU3VmZml4fSk7XG4gICAgaWYgKHJlc3VsdCR7cmFuZG9tU3VmZml4fSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3VsdCR7cmFuZG9tU3VmZml4fSk7XG4gIH0gY2F0Y2ggKGV2YWxFcnJvciR7cmFuZG9tU3VmZml4fSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7ICR7RVZBTF9FUlJPUl9NQVJLRVJ9OiBzZXJpYWxpemVFcnJvcihldmFsRXJyb3Ike3JhbmRvbVN1ZmZpeH0pIH0pO1xuICB9XG59KSgpYDtcblxuICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0ciA9PT0gJycgfHwgcmVzdWx0U3RyID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBPYnNpZGlhbiByZXR1cm5lZCBub24tSlNPTiBvdXRwdXQ6ICR7cmVzdWx0U3RyfWApO1xuICB9XG5cbiAgaWYgKHBhcnNlZCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBFVkFMX0VSUk9SX01BUktFUiBpbiBwYXJzZWQpIHtcbiAgICBjb25zdCBlcnJvckRldGFpbCA9IChwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW0VWQUxfRVJST1JfTUFSS0VSXTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBFcnJvciBpbnNpZGUgT2JzaWRpYW46XFxuJHtTdHJpbmcoZXJyb3JEZXRhaWwpfWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZXN1bHQ7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIHZpYSB0b1N0cmluZygpIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MsIG5vdCBpbiBOb2RlLiBDb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLiAqL1xuXG4vKipcbiAqIEluamVjdGVkIGludG8gdGhlIE9ic2lkaWFuIHByb2Nlc3MgdG8gcmVzb2x2ZSB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBVc2VzIGEgY2FjaGVkIHZhbHVlIG9uIGBhcHBgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGluc3RhbGxzIGEgdGVtcG9yYXJ5XG4gKiBwbHVnaW4gdGhhdCBjYWxscyBgcmVxdWlyZSgnb2JzaWRpYW4nKWAgYW5kIGNhY2hlcyB0aGUgcmVzdWx0LlxuICpcbiAqIE11c3QgTk9UIHJlZmVyZW5jZSBhbnkgb3V0ZXIgc2NvcGUgXHUyMDE0IGl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAqIGBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuYCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHNhbWUgc2NvcGVcbiAqICh0aGUgZ2VuZXJhdGVkIElJRkUgaGFuZGxlcyB0aGlzKS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9ic2lkaWFuTW9kdWxlKCk6IFByb21pc2U8dHlwZW9mIG9ic2lkaWFuPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZGVwcmVjYXRlZCAtLSBXZSBuZWVkIGdsb2JhbCBgYXBwYCB2YXJpYWJsZS5cbiAgY29uc3QgYXBwID0gd2luZG93LmFwcDtcbiAgaW50ZXJmYWNlIE9ic2lkaWFuTW9kdWxlSG9sZGVyIHtcbiAgICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlSG9sZGVyID0gYXBwIGFzIFBhcnRpYWw8T2JzaWRpYW5Nb2R1bGVIb2xkZXI+O1xuICBpZiAob2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGUpIHtcbiAgICByZXR1cm4gb2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGU7XG4gIH1cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCB0ZW1wTW9kdWxlTmFtZSA9IGBnZXQtb2JzaWRpYW4tbW9kdWxlLSR7cmFuZG9tU3VmZml4fWA7XG4gIGNvbnN0IGRpciA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHt0ZW1wTW9kdWxlTmFtZX1gO1xuICBhcHAucGx1Z2lucy5tYW5pZmVzdHNbdGVtcE1vZHVsZU5hbWVdID0ge1xuICAgIGF1dGhvcjogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRpcixcbiAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgaXNEZXNrdG9wT25seTogZmFsc2UsXG4gICAgbWluQXBwVmVyc2lvbjogJycsXG4gICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgdmVyc2lvbjogJydcbiAgfTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoYCR7ZGlyfS9tYWluLmpzYCwgYCgke1N0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX0pKCk7YCk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGhpbiBgbG9hZFBsdWdpbmAuXG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xufVxuXG4vKipcbiAqIFRoZSBib2R5IG9mIHRoZSB0ZW1wb3JhcnkgcGx1Z2luIHRoYXQgZXh0cmFjdHMgdGhlIGBvYnNpZGlhbmAgbW9kdWxlLlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCB3cml0dGVuIHRvIGBtYWluLmpzYCBieSB7QGxpbmsgZ2V0T2JzaWRpYW5Nb2R1bGV9LlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5GbigpOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG5cbiAgY29uc3QgcGx1Z2luUmVxdWlyZSA9IHJlcXVpcmU7XG4gIGNvbnN0IHBsdWdpbkV4cG9ydHMgPSBleHBvcnRzIGFzIEV4cG9ydHNXaXRoRGVmYXVsdDtcblxuICBjb25zdCBvYnNpZGlhbk1vZHVsZSA9IHBsdWdpblJlcXVpcmUoJ29ic2lkaWFuJykgYXMgdHlwZW9mIG9ic2lkaWFuO1xuICBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSA9IG9ic2lkaWFuTW9kdWxlO1xuICBwbHVnaW5FeHBvcnRzLmRlZmF1bHQgPSBvYnNpZGlhbk1vZHVsZS5QbHVnaW47XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHFCQUEyQjtBQUMzQiwwQkFBb0I7QUFRcEIsOEJBQW9DO0FBQ3BDLGlDQUE0QztBQUM1QyxpQ0FBa0M7QUFDbEMsNkJBQStCO0FBQy9CLCtCQUFxQztBQUVyQyxNQUFNLG9CQUFvQjtBQU0xQixNQUFNLFlBQVk7QUFpRmxCLGVBQXNCLGVBQ3BCLFFBQ2lCO0FBRWpCLFFBQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxXQUFXLElBQUksNEJBQTRCLE9BQU8sV0FBVyxtQkFBbUIsVUFBVSxJQUFJO0FBQ2pILFFBQU0sTUFBTSxhQUFhLG9CQUFBQSxRQUFRLElBQUk7QUFHckMsTUFBSSxjQUFjLFVBQWEsS0FBQywyQkFBVyxTQUFTLEdBQUc7QUFDckQsVUFBTSxJQUFJLE1BQU0sOEJBQThCLFNBQVMsRUFBRTtBQUFBLEVBQzNEO0FBRUEsUUFBTSxZQUFZLHFCQUFxQixVQUFNLG1EQUFxQiw2Q0FBb0IsQ0FB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
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZXNwYWNlIC0tIFdlIG5lZWQgdG8gcmVmZXJlbmNlIGBvYnNpZGlhbmAgbW9kdWxlLlxuaW1wb3J0IHR5cGUgKiBhcyBvYnNpZGlhbiBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmdzLFxuICBDb250ZXh0SWRcbn0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZ2V0VHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5janMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLmNqcyc7XG5pbXBvcnQgeyBqc29uV2l0aEZ1bmN0aW9ucyB9IGZyb20gJy4vanNvbi13aXRoLWZ1bmN0aW9ucy5janMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuL3NlcmlhbGl6ZS1lcnJvci5janMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmNvbnN0IEVWQUxfRVJST1JfTUFSS0VSID0gJ19fb2JzaWRpYW5FdmFsRXJyb3JfXyc7XG5cbmludGVyZmFjZSBFeHBvcnRzV2l0aERlZmF1bHQge1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG5jb25zdCBOT19PVVRQVVQgPSAnKG5vIG91dHB1dCknO1xuXG4vKipcbiAqIENvbW1vbiBhcmd1bWVudHMgYXV0b21hdGljYWxseSBwcm92aWRlZCB0byBldmVyeSB7QGxpbmsgZXZhbEluT2JzaWRpYW59IGNhbGxiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkFyZ3Mge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHtAbGluayBBcHB9IGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBgb2JzaWRpYW5gIG1vZHVsZSwgcmVzb2x2ZWQgYXQgcnVudGltZSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gICAqL1xuICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIGFyZ3M/OiBBcmdzO1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBDb250ZXh0SWR9IGxpbmtpbmcgdGhpcyBjYWxsIHRvIGEgcGVyc2lzdGVudCBzdG9yZSBvbiBgd2luZG93YFxuICAgKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2Vzcy4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgdHlwZWQgYGNvbnRleHRgIG9iamVjdFxuICAgKiB0aGF0IHN1cnZpdmVzIGFjcm9zcyBjYWxscyBzaGFyaW5nIHRoZSBzYW1lIElELlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBjb250ZXh0YCBpcyBhIGZyZXNoIGVtcHR5IG9iamVjdCBlYWNoIGNhbGwuXG4gICAqL1xuICBjb250ZXh0SWQ/OiBUQ29udGV4dElkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gdGhlIE9ic2lkaWFuIGNvbnRleHQuXG4gICAqL1xuICBmbihhcmdzOiBBcmdzICYgQ29tbW9uQXJncyAmIENvbnRleHRBcmdzPFRDb250ZXh0SWQ+KTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBTa2lwcyBwcmUtZmxpZ2h0IGNoZWNrcyAodmF1bHQgcmVnaXN0cmF0aW9uLCBDTEkgYXZhaWxhYmlsaXR5KS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHZhdWx0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQgZm9yIHRoaXMgY2FsbC4gV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSB0cmFuc3BvcnRcbiAgICogY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIgKHNldCBieSB0aGUgZnJhbWV3b3JrIGFkYXB0ZXIncyBnbG9iYWwgc2V0dXApLlxuICAgKi9cbiAgdHJhbnNwb3J0PzogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiB2YXVsdC4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcGxhaW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gYXJncyBvYmplY3QgdGhhdCBpbmNsdWRlcyBgYXBwYCwgYG9ic2lkaWFuTW9kdWxlYCxcbiAqIGBjb250ZXh0YCwgYW5kIGFueSBhZGRpdGlvbmFsIGBhcmdzYCBwYXNzZWQgYnkgdGhlIGNhbGxlci5cbiAqIEl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgaW52b2tlZCBhcyBhbiBJSUZFLlxuICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgc2VsZi1jb250YWluZWQgXHUyMDE0IGNsb3N1cmVzIG92ZXIgbG9jYWwgdmFyaWFibGVzIHdpbGwgbm90IHdvcmsuXG4gKiBQYXNzIGFueSBuZWVkZWQgdmFsdWVzIGFzIGBhcmdzYCBcdTIwMTQgdGhleSBhcmUgSlNPTi1zZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgb24gdGhlIE9ic2lkaWFuIHNpZGUuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBgSlNPTi5zdHJpbmdpZnlgJ2Qgb24gdGhlIE9ic2lkaWFuIHNpZGUgYW5kIHBhcnNlZCBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmbmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsSW5PYnNpZGlhbjxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcGFyYW1zOiBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzLCBSZXN1bHQsIFRDb250ZXh0SWQ+XG4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIGBmbmAgY2FuIGJlIHVuYm91bmQuXG4gIGNvbnN0IHsgYXJncyA9IHt9LCBjb250ZXh0SWQsIGZuLCBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzID0gZmFsc2UsIHRyYW5zcG9ydDogdHJhbnNwb3J0T3ZlcnJpZGUsIHZhdWx0UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBjd2QgPSB2YXVsdFBhdGggPz8gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBDaGVjazogVmF1bHQgcGF0aCBleGlzdHMgb24gZGlzay5cbiAgaWYgKHZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmICFleGlzdHNTeW5jKHZhdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7dmF1bHRQYXRofWApO1xuICB9XG5cbiAgY29uc3QgdHJhbnNwb3J0ID0gdHJhbnNwb3J0T3ZlcnJpZGUgPz8gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoZ2V0VHJhbnNwb3J0T3B0aW9ucygpKTtcblxuICBpZiAoIXNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MpIHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHJlZmxpZ2h0Q2hlY2soY3dkKTtcbiAgfVxuXG4gIGNvbnN0IFNMSUNFX1NUQVJUID0gMjtcbiAgY29uc3QgcmFuZG9tU3VmZml4ID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKFNMSUNFX1NUQVJUKTtcbiAgY29uc3QgY29udGV4dEV4cHIgPSBjb250ZXh0SWRcbiAgICA/IGAoKHdpbmRvdy5fX29ic2lkaWFuQ29udGV4dHNfXyA/Pz0ge30pW1wiJHtTdHJpbmcoY29udGV4dElkKX1cIl0gPz89IHt9KWBcbiAgICA6ICd7fSc7XG4gIGNvbnN0IGV4cHJlc3Npb24gPSBgXG4oYXN5bmMgKCkgPT4ge1xuICBjb25zdCBmbiR7cmFuZG9tU3VmZml4fSA9ICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGZuKX07XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlJHtyYW5kb21TdWZmaXh9ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWFwcC53b3Jrc3BhY2UuYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gICAgfVxuICAgIGlmICghYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcbiAgICB9XG4gICAgJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5Gbil9XG4gICAgJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGUpfVxuICAgIHJldHVybiBhd2FpdCBnZXRPYnNpZGlhbk1vZHVsZSgpO1xuICB9KSgpO1xuICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhzZXJpYWxpemVFcnJvcil9XG4gIGNvbnN0IGFyZ3Mke3JhbmRvbVN1ZmZpeH0gPSAke2pzb25XaXRoRnVuY3Rpb25zKGFyZ3MpfTtcbiAgY29uc3QgY29udGV4dCR7cmFuZG9tU3VmZml4fSA9ICR7Y29udGV4dEV4cHJ9O1xuICBjb25zdCBmdWxsQXJncyR7cmFuZG9tU3VmZml4fSA9IE9iamVjdC5hc3NpZ24oYXJncyR7cmFuZG9tU3VmZml4fSwgeyBhcHAsIG9ic2lkaWFuTW9kdWxlOiBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSwgY29udGV4dDogY29udGV4dCR7cmFuZG9tU3VmZml4fSB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQke3JhbmRvbVN1ZmZpeH0gPSBhd2FpdCBmbiR7cmFuZG9tU3VmZml4fShmdWxsQXJncyR7cmFuZG9tU3VmZml4fSk7XG4gICAgaWYgKHJlc3VsdCR7cmFuZG9tU3VmZml4fSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3VsdCR7cmFuZG9tU3VmZml4fSk7XG4gIH0gY2F0Y2ggKGV2YWxFcnJvciR7cmFuZG9tU3VmZml4fSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7ICR7RVZBTF9FUlJPUl9NQVJLRVJ9OiBzZXJpYWxpemVFcnJvcihldmFsRXJyb3Ike3JhbmRvbVN1ZmZpeH0pIH0pO1xuICB9XG59KSgpYDtcblxuICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0ciA9PT0gJycgfHwgcmVzdWx0U3RyID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBPYnNpZGlhbiByZXR1cm5lZCBub24tSlNPTiBvdXRwdXQ6ICR7cmVzdWx0U3RyfWApO1xuICB9XG5cbiAgaWYgKHBhcnNlZCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBFVkFMX0VSUk9SX01BUktFUiBpbiBwYXJzZWQpIHtcbiAgICBjb25zdCBlcnJvckRldGFpbCA9IFN0cmluZygocGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtFVkFMX0VSUk9SX01BUktFUl0pO1xuICAgIC8vIFJld3JpdGUgYmFyZS1vcmlnaW4gbG9jYWxob3N0IHN0YWNrIGZyYW1lcyBsaWtlIFwiKGh0dHA6Ly9sb2NhbGhvc3QvOjkxNTozMilcIlxuICAgIC8vIFNvIFZpdGVzdCdzIHNvdXJjZS1tYXAgcmVzb2x2ZXIgd29uJ3QgZXh0cmFjdCBcIi9cIiBhcyB0aGUgZmlsZSBwYXRoIGFuZCBjcmFzaFxuICAgIC8vIFdpdGggRUlTRElSIHdoZW4gaXQgdHJpZXMgdG8gcmVhZEZpbGVTeW5jIG9uIHRoZSByb290IGRpcmVjdG9yeS5cbiAgICBjb25zdCBzYW5pdGl6ZWREZXRhaWwgPSBlcnJvckRldGFpbFxuICAgICAgLnJlcGxhY2UoL1xcKGh0dHBzPzpcXC9cXC9sb2NhbGhvc3RcXC86KD88bGluZT5cXGQpL2csICcob2JzaWRpYW4td2VidmlldzokPGxpbmU+Jyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogRXJyb3IgaW5zaWRlIE9ic2lkaWFuOlxcbiR7c2FuaXRpemVkRGV0YWlsfWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZXN1bHQ7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIHZpYSB0b1N0cmluZygpIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MsIG5vdCBpbiBOb2RlLiBDb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLiAqL1xuXG4vKipcbiAqIEluamVjdGVkIGludG8gdGhlIE9ic2lkaWFuIHByb2Nlc3MgdG8gcmVzb2x2ZSB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBVc2VzIGEgY2FjaGVkIHZhbHVlIG9uIGBhcHBgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGluc3RhbGxzIGEgdGVtcG9yYXJ5XG4gKiBwbHVnaW4gdGhhdCBjYWxscyBgcmVxdWlyZSgnb2JzaWRpYW4nKWAgYW5kIGNhY2hlcyB0aGUgcmVzdWx0LlxuICpcbiAqIE11c3QgTk9UIHJlZmVyZW5jZSBhbnkgb3V0ZXIgc2NvcGUgXHUyMDE0IGl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAqIGBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuYCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHNhbWUgc2NvcGVcbiAqICh0aGUgZ2VuZXJhdGVkIElJRkUgaGFuZGxlcyB0aGlzKS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9ic2lkaWFuTW9kdWxlKCk6IFByb21pc2U8dHlwZW9mIG9ic2lkaWFuPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZGVwcmVjYXRlZCAtLSBXZSBuZWVkIGdsb2JhbCBgYXBwYCB2YXJpYWJsZS5cbiAgY29uc3QgYXBwID0gd2luZG93LmFwcDtcbiAgaW50ZXJmYWNlIE9ic2lkaWFuTW9kdWxlSG9sZGVyIHtcbiAgICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlSG9sZGVyID0gYXBwIGFzIFBhcnRpYWw8T2JzaWRpYW5Nb2R1bGVIb2xkZXI+O1xuICBpZiAob2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGUpIHtcbiAgICByZXR1cm4gb2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGU7XG4gIH1cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCB0ZW1wTW9kdWxlTmFtZSA9IGBnZXQtb2JzaWRpYW4tbW9kdWxlLSR7cmFuZG9tU3VmZml4fWA7XG4gIGNvbnN0IGRpciA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHt0ZW1wTW9kdWxlTmFtZX1gO1xuICBhcHAucGx1Z2lucy5tYW5pZmVzdHNbdGVtcE1vZHVsZU5hbWVdID0ge1xuICAgIGF1dGhvcjogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRpcixcbiAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgaXNEZXNrdG9wT25seTogZmFsc2UsXG4gICAgbWluQXBwVmVyc2lvbjogJycsXG4gICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgdmVyc2lvbjogJydcbiAgfTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoYCR7ZGlyfS9tYWluLmpzYCwgYCgke1N0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX0pKCk7YCk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGhpbiBgbG9hZFBsdWdpbmAuXG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xufVxuXG4vKipcbiAqIFRoZSBib2R5IG9mIHRoZSB0ZW1wb3JhcnkgcGx1Z2luIHRoYXQgZXh0cmFjdHMgdGhlIGBvYnNpZGlhbmAgbW9kdWxlLlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCB3cml0dGVuIHRvIGBtYWluLmpzYCBieSB7QGxpbmsgZ2V0T2JzaWRpYW5Nb2R1bGV9LlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5GbigpOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG5cbiAgY29uc3QgcGx1Z2luUmVxdWlyZSA9IHJlcXVpcmU7XG4gIGNvbnN0IHBsdWdpbkV4cG9ydHMgPSBleHBvcnRzIGFzIEV4cG9ydHNXaXRoRGVmYXVsdDtcblxuICBjb25zdCBvYnNpZGlhbk1vZHVsZSA9IHBsdWdpblJlcXVpcmUoJ29ic2lkaWFuJykgYXMgdHlwZW9mIG9ic2lkaWFuO1xuICBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSA9IG9ic2lkaWFuTW9kdWxlO1xuICBwbHVnaW5FeHBvcnRzLmRlZmF1bHQgPSBvYnNpZGlhbk1vZHVsZS5QbHVnaW47XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHFCQUEyQjtB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
|
|
@@ -151,7 +151,7 @@ class DesktopCliTransport {
|
|
|
151
151
|
`window.electron.ipcRenderer.sendSync('vault-open', ${JSON.stringify(vaultPath)}, false);`
|
|
152
152
|
);
|
|
153
153
|
await this.evaluate(registerExpr, { cwd: existingVaultPath });
|
|
154
|
-
await this.enablePluginsInLocalStorage(vaultPath);
|
|
154
|
+
await this.enablePluginsInLocalStorage(vaultPath, existingVaultPath);
|
|
155
155
|
const pollExpr = buildSimpleExpression(
|
|
156
156
|
"return JSON.stringify(app.vault.adapter.getBasePath());"
|
|
157
157
|
);
|
|
@@ -231,8 +231,11 @@ class DesktopCliTransport {
|
|
|
231
231
|
* `obsidian.json`) and before the new vault window finishes loading.
|
|
232
232
|
*
|
|
233
233
|
* @param vaultPath - The absolute path to the vault folder.
|
|
234
|
+
* @param evalTargetVaultPath - The vault path to use as eval target (an existing, loaded vault).
|
|
235
|
+
* localStorage is shared across all Obsidian windows (same Electron origin), so the
|
|
236
|
+
* `localStorage.setItem` call can run in any loaded vault window.
|
|
234
237
|
*/
|
|
235
|
-
async enablePluginsInLocalStorage(vaultPath) {
|
|
238
|
+
async enablePluginsInLocalStorage(vaultPath, evalTargetVaultPath) {
|
|
236
239
|
const vaultId = (0, import_obsidian_config.getVaultId)(vaultPath);
|
|
237
240
|
if (!vaultId) {
|
|
238
241
|
(0, import_log.log)("[cli-transport] Could not find vault ID \u2014 skipping localStorage trust flag.");
|
|
@@ -241,7 +244,7 @@ class DesktopCliTransport {
|
|
|
241
244
|
const enableExpr = buildSimpleExpression(
|
|
242
245
|
`localStorage.setItem(${JSON.stringify(`enable-plugin-${vaultId}`)}, 'true');`
|
|
243
246
|
);
|
|
244
|
-
await this.evaluate(enableExpr, { cwd:
|
|
247
|
+
await this.evaluate(enableExpr, { cwd: evalTargetVaultPath });
|
|
245
248
|
(0, import_log.log)(`[cli-transport] Set enable-plugin-${vaultId} in localStorage.`);
|
|
246
249
|
}
|
|
247
250
|
/**
|
|
@@ -329,4 +332,4 @@ function getObsidianLaunchCommand() {
|
|
|
329
332
|
0 && (module.exports = {
|
|
330
333
|
DesktopCliTransport
|
|
331
334
|
});
|
|
332
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgdW5saW5rLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZXhlYyB9IGZyb20gJy4vZXhlYy5janMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vbm9vcC5janMnO1xuaW1wb3J0IHtcbiAgZ2V0QW55UmVnaXN0ZXJlZFZhdWx0UGF0aCxcbiAgZ2V0VmF1bHRJZCxcbiAgaXNDbGlFbmFibGVkLFxuICBpc1ZhdWx0UmVnaXN0ZXJlZFxufSBmcm9tICcuL29ic2lkaWFuLWNvbmZpZy5janMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuL3NlcmlhbGl6ZS1lcnJvci5janMnO1xuXG4vKipcbiAqIERpc2NyaW1pbmF0ZWQgZW52ZWxvcGUgd3JpdHRlbiBieSB0aGUgdGVtcG9yYXJ5IHNjcmlwdCBmaWxlLlxuICpcbiAqIC0gYHsgdmFsdWU6IHN0cmluZywgdHlwZTogJ2Vycm9yJyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gdGhyZXc7IGB2YWx1ZWAgaXMgdGhlIGVycm9yIG1lc3NhZ2UuXG4gKiAtIGB7IHZhbHVlOiAnJywgdHlwZTogJ251bGwnIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBgbnVsbGAuXG4gKiAtIGB7IHZhbHVlOiAnJywgdHlwZTogJ3VuZGVmaW5lZCcgfWAgXHUyMDE0IHRoZSBleHByZXNzaW9uIHJldHVybmVkIGB1bmRlZmluZWRgLlxuICogLSBgeyB2YWx1ZTogc3RyaW5nIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBhIHN0cmluZyB2YWx1ZSAobm8gYHR5cGVgIGZpZWxkKS5cbiAqL1xudHlwZSBTY3JpcHRSZXN1bHRFbnZlbG9wZSA9XG4gIHwgeyB0eXBlOiAnZXJyb3InIHwgJ251bGwnIHwgJ3VuZGVmaW5lZCc7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsgdmFsdWU6IHN0cmluZyB9O1xuXG5jb25zdCBVTkFCTEVfVE9fRklORF9PQlNJRElBTiA9ICd1bmFibGUgdG8gZmluZCBPYnNpZGlhbic7XG5jb25zdCBBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbmNvbnN0IEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gMTAwMDtcbmNvbnN0IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwMDtcblxuLyoqXG4gKiBUcmFuc3BvcnQgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBEZXNrdG9wIE9ic2lkaWFuIHZpYSB0aGUgYG9ic2lkaWFuIGV2YWxgIENMSSBjb21tYW5kXG4gKiBhbmQgbWFuYWdlcyB2YXVsdHMgdmlhIEVsZWN0cm9uIElQQy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlc2t0b3BDbGlUcmFuc3BvcnQgaW1wbGVtZW50cyBPYnNpZGlhblRyYW5zcG9ydCB7XG4gIC8qKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiB2aWEgYG9ic2lkaWFuIGV2YWxgLlxuICAgKlxuICAgKiBXcml0ZXMgdGhlIGV4cHJlc3Npb24gdG8gYSB0ZW1wb3JhcnkgYC5janNgIGZpbGUgYW5kIGV4ZWN1dGVzIGEgdGlueVxuICAgKiBgcmVxdWlyZSgpLmludm9rZSgpYCBjYWxsIHZpYSB0aGUgQ0xJLiBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gdG8gYVxuICAgKiBgLnJlc3VsdC5qc29uYCBmaWxlIGJ5IHRoZSBzY3JpcHQsIGF2b2lkaW5nIENMSSBzdGRvdXQgc2l6ZSBsaW1pdHNcbiAgICogYW5kIElQQyBidWZmZXIgaXNzdWVzLlxuICAgKlxuICAgKiBIYW5kbGVzIGF1dG8tc3RhcnQ6IGlmIE9ic2lkaWFuIGlzIG5vdCBydW5uaW5nLCBsYXVuY2hlcyBpdCB2aWEgVVJJIHByb3RvY29sXG4gICAqIGFuZCByZXRyaWVzIHVudGlsIGl0IGJlY29tZXMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRXZhbHVhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCByZXN1bHQgc3RyaW5nICh0cmFuc3BvcnQtc3BlY2lmaWMgcHJlZml4ZXMgc3RyaXBwZWQpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgb3B0aW9uczogVHJhbnNwb3J0RXZhbE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IFNMSUNFX1NUQVJUID0gMjtcbiAgICBjb25zdCBzY3JpcHRJZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gICAgY29uc3Qgc2NyaXB0RGlyID0gam9pbih0bXBkaXIoKSwgJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnKTtcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5janNgKTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5yZXN1bHQuanNvbmApO1xuXG4gICAgYXdhaXQgbWtkaXIoc2NyaXB0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGludm9rZU5hbWUgPSBgaW52b2tlXyR7c2NyaXB0SWR9YDtcbiAgICBjb25zdCBzY3JpcHRDb250ZW50ID0gYnVpbGRTY3JpcHRGaWxlKGV4cHJlc3Npb24sIHJlc3VsdFBhdGgsIGludm9rZU5hbWUpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShzY3JpcHRQYXRoLCBzY3JpcHRDb250ZW50KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgbW9kdWxlLmNvbnN0cnVjdG9yLl9sb2FkIHRvIGJ5cGFzcyBhbnkgbW9ua2V5LXBhdGNoZWQgcmVxdWlyZSgpXG4gICAgICAvLyAoZS5nLiwgb2JzaWRpYW4tY29kZXNjcmlwdC10b29sa2l0IHBhdGNoZXMgcmVxdWlyZSBpbiB0aGUgcmVuZGVyZXIgcHJvY2VzcykuXG4gICAgICBjb25zdCBzYWZlUmVxdWlyZSA9IGBtb2R1bGUuY29uc3RydWN0b3IuX2xvYWQoJHtKU09OLnN0cmluZ2lmeShzY3JpcHRQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKSl9KWA7XG4gICAgICBjb25zdCByZXF1aXJlRXhwciA9IGAoYXN5bmMgKCkgPT4geyBhd2FpdCAke3NhZmVSZXF1aXJlfS4ke2ludm9rZU5hbWV9KCkgfSkoKWA7XG4gICAgICBjb25zdCBjb21tYW5kID0gWydvYnNpZGlhbicsICdldmFsJywgJy0tYWxsb3ctZm9jdXMtc3RlYWwnLCBgY29kZT0ke3JlcXVpcmVFeHByfWBdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHtcbiAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgIGlzUXVpZXQ6IHRydWUsXG4gICAgICAgICAgLi4uKG9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kLCBvcHRpb25zLmN3ZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFleGlzdHNTeW5jKHJlc3VsdFBhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGRpZCBub3QgZXhlY3V0ZSBmb3IgcGF0aDogJHtvcHRpb25zLmN3ZH0gXHUyMDE0IHRoZSB2YXVsdCBtYXkgbm90IGJlIGZvdW5kIG9yIE9ic2lkaWFuIGRpZCBub3QgcnVuIHRoZSBldmFsLmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCByZWFkRmlsZShyZXN1bHRQYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpIGFzIFNjcmlwdFJlc3VsdEVudmVsb3BlO1xuXG4gICAgICBpZiAoJ3R5cGUnIGluIGVudmVsb3BlKSB7XG4gICAgICAgIGlmIChlbnZlbG9wZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY3JpcHQgZXJyb3IgaW4gT2JzaWRpYW4gZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9OiAke2VudmVsb3BlLnZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudmVsb3BlLnZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB1bmxpbmsoc2NyaXB0UGF0aCkuY2F0Y2gobm9vcCk7XG4gICAgICBhd2FpdCB1bmxpbmsocmVzdWx0UGF0aCkuY2F0Y2gobm9vcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ0xJLXNwZWNpZmljIHByZWZsaWdodCBjaGVja3MuXG4gICAqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHZhdWx0IGlzIHJlZ2lzdGVyZWQsIENMSSBpcyBlbmFibGVkIGluIE9ic2lkaWFuIHNldHRpbmdzLFxuICAgKiBhbmQgdGhlIGBvYnNpZGlhbmAgQ0xJIGJpbmFyeSBpcyBhdmFpbGFibGUgaW4gUEFUSC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJlZmxpZ2h0Q2hlY2sodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBSdW5uaW5nIHByZWZsaWdodCBjaGVjayBmb3IgdmF1bHQ6ICR7dmF1bHRQYXRofWApO1xuICAgIGlmICghaXNWYXVsdFJlZ2lzdGVyZWQodmF1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmF1bHQgaXMgbm90IHJlZ2lzdGVyZWQgaW4gT2JzaWRpYW46ICR7dmF1bHRQYXRofS4gUmVnaXN0ZXIgdGhlIHZhdWx0IGZpcnN0IHdpdGggcmVnaXN0ZXJWYXVsdCgpIG9yIFRlbXBWYXVsdC5yZWdpc3RlcigpLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NsaUVuYWJsZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPYnNpZGlhbiBDTEkgaXMgZGlzYWJsZWQuIEVuYWJsZSBpdCBpbiBPYnNpZGlhbiBTZXR0aW5ncyBcXHUyMTkyIEdlbmVyYWwgXFx1MjE5MiBDTEkuJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0UGF0aCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcbiAgICBpZiAoIWV4aXN0aW5nVmF1bHRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWdpc3RlciBhIHZhdWx0OiBubyBleGlzdGluZyB2YXVsdCBpcyByZWdpc3RlcmVkIGluIE9ic2lkaWFuLiBPcGVuIE9ic2lkaWFuIGFuZCBjcmVhdGUgb3Igb3BlbiBhdCBsZWFzdCBvbmUgdmF1bHQgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnaXN0ZXJFeHByID0gYnVpbGRJcGNFeHByZXNzaW9uKFxuICAgICAgYHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsICR7SlNPTi5zdHJpbmdpZnkodmF1bHRQYXRoKX0sIGZhbHNlKTtgXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlZ2lzdGVyRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRQYXRoIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoKTtcblxuICAgIGNvbnN0IHBvbGxFeHByID0gYnVpbGRTaW1wbGVFeHByZXNzaW9uKFxuICAgICAgJ3JldHVybiBKU09OLnN0cmluZ2lmeShhcHAudmF1bHQuYWRhcHRlci5nZXRCYXNlUGF0aCgpKTsnXG4gICAgKTtcblxuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFBvbGxpbmcgZm9yIHZhdWx0IHJlYWRpbmVzcyAodGltZW91dD0ke1N0cmluZyhWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcykuLi5gKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gYXdhaXQgdGhpcy5ldmFsdWF0ZShwb2xsRXhwciwgeyBjd2Q6IHZhdWx0UGF0aCB9KTtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UoYmFzZVBhdGgpID09PSB2YXVsdFBhdGgpIHtcbiAgICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBpcyByZWFkeS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBWYXVsdCBub3QgcmVhZHkgeWV0LlxuICAgICAgfVxuICAgICAgYXdhaXQgZGVsYXkoVkFVTFRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IGF0ICR7dmF1bHRQYXRofSBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhIHZhdWx0IGZyb20gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UuXG4gICAqXG4gICAqIFNjaGVkdWxlcyB0aGUgdmF1bHQgd2luZG93IHRvIGNsb3NlLCB3YWl0cywgdGhlbiByZW1vdmVzIHRoZSB2YXVsdFxuICAgKiBmcm9tIHRoZSByZWdpc3RyeSB2aWEgYHZhdWx0LXJlbW92ZWAgSVBDLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBVbnJlZ2lzdGVyaW5nIHZhdWx0OiBjbG9zaW5nIHdpbmRvdyBmb3IgJHt2YXVsdFBhdGh9Li4uYCk7XG4gICAgY29uc3QgZGVzdHJveUV4cHIgPSBidWlsZFNpbXBsZUV4cHJlc3Npb24oYFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cuZWxlY3Ryb24gJiYgd2luZG93LmVsZWN0cm9uLnJlbW90ZSkge1xuICAgICAgICAgIHdpbmRvdy5lbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUoZGVzdHJveUV4cHIsIHsgY3dkOiB2YXVsdFBhdGgsIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogVkFVTFRfRVZBTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyB9KTtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFdpbmRvdyBkZXN0cm95IGNvbW1hbmQgc2VudC4nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gV2luZG93IGRlc3Ryb3kgZmFpbGVkIChub24tZmF0YWwpOiAke3NlcmlhbGl6ZUVycm9yKGVycm9yKX1gKTtcbiAgICB9XG5cbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBXYWl0aW5nIGZvciB3aW5kb3cgdG8gY2xvc2UuLi4nKTtcbiAgICBhd2FpdCBkZWxheShWQVVMVF9DTE9TRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gUmVtb3ZpbmcgdmF1bHQgZnJvbSByZWdpc3RyeS4uLicpO1xuICAgIGNvbnN0IHJlbW92ZUV4cHIgPSBidWlsZElwY0V4cHJlc3Npb24oXG4gICAgICBgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2YXVsdC1yZW1vdmUnLCAke0pTT04uc3RyaW5naWZ5KHZhdWx0UGF0aCl9KTtgXG4gICAgKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGV4aXN0aW5nVmF1bHRGb3JSZW1vdmFsKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUocmVtb3ZlRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRGb3JSZW1vdmFsLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBObyBleGlzdGluZyB2YXVsdCB0byB0YXJnZXQgZm9yIHJlbW92YWwgSVBDIFx1MjAxNCBza2lwcGluZy4nKTtcbiAgICAgIH1cbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFZhdWx0IHJlbW92ZWQgZnJvbSByZWdpc3RyeS4nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVmF1bHQgcmVnaXN0cnkgcmVtb3ZhbCBmYWlsZWQgKG5vbi1mYXRhbCk6ICR7c2VyaWFsaXplRXJyb3IoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgT2JzaWRpYW4gQ0xJIGJpbmFyeSBpcyBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbSBQQVRILlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhc3NlcnRDbGlBdmFpbGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnd2hlcmUuZXhlIG9ic2lkaWFuJyA6ICd3aGljaCBvYnNpZGlhbic7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPYnNpZGlhbiBDTEkgaXMgbm90IGF2YWlsYWJsZS4gRW5zdXJlIE9ic2lkaWFuIGlzIGluc3RhbGxlZCBhbmQgaXRzIENMSSBpcyBpbiB5b3VyIFBBVEguJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYGVuYWJsZS1wbHVnaW4tPHZhdWx0SWQ+YCBpbiBPYnNpZGlhbidzIGxvY2FsU3RvcmFnZSB0byBwcmV2ZW50XG4gICAqIHRoZSBcIkRvIHlvdSB0cnVzdCB0aGUgYXV0aG9yIG9mIHRoaXMgdmF1bHQ/XCIgZGlhbG9nIGZyb20gYXBwZWFyaW5nXG4gICAqIHdoZW4gYSB2YXVsdCB3aXRoIGNvbW11bml0eSBwbHVnaW5zIGlzIG9wZW5lZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBgdmF1bHQtb3BlbmAgSVBDIChzbyB0aGUgdmF1bHQgSUQgZXhpc3RzIGluXG4gICAqIGBvYnNpZGlhbi5qc29uYCkgYW5kIGJlZm9yZSB0aGUgbmV3IHZhdWx0IHdpbmRvdyBmaW5pc2hlcyBsb2FkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5hYmxlUGx1Z2luc0luTG9jYWxTdG9yYWdlKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmF1bHRJZCA9IGdldFZhdWx0SWQodmF1bHRQYXRoKTtcbiAgICBpZiAoIXZhdWx0SWQpIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIENvdWxkIG5vdCBmaW5kIHZhdWx0IElEIFx1MjAxNCBza2lwcGluZyBsb2NhbFN0b3JhZ2UgdHJ1c3QgZmxhZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbmFibGVFeHByID0gYnVpbGRTaW1wbGVFeHByZXNzaW9uKFxuICAgICAgYGxvY2FsU3RvcmFnZS5zZXRJdGVtKCR7SlNPTi5zdHJpbmdpZnkoYGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfWApfSwgJ3RydWUnKTtgXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKGVuYWJsZUV4cHIsIHsgY3dkOiB2YXVsdFBhdGggfSk7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gU2V0IGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfSBpbiBsb2NhbFN0b3JhZ2UuYCk7XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoZXMgT2JzaWRpYW4gYmluYXJ5IGFuZCByZXRyaWVzIHRoZSBldmFsIHVudGlsIGl0IHJlc3BvbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBDTEkgY29tbWFuZCBhcnJheSB0byByZXRyeS5cbiAgICogQHBhcmFtIGN3ZCAtIFRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlT2JzaWRpYW5SdW5uaW5nQW5kUmV0cnkoY29tbWFuZDogc3RyaW5nW10sIGN3ZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gaXMgbm90IHJ1bm5pbmcuIFN0YXJ0aW5nIE9ic2lkaWFuLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQoKSwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gVGhlIGxhdW5jaCBjb21tYW5kIG1heSBmYWlsIG9uIHNvbWUgc3lzdGVtcyBcdTIwMTQgd2UnbGwgc3RpbGwgdHJ5IHBvbGxpbmcuXG4gICAgfVxuXG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUG9sbGluZyBmb3IgT2JzaWRpYW4gQ0xJICh0aW1lb3V0PSR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgYXdhaXQgZGVsYXkoQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgY3dkLCBpc1F1aWV0OiB0cnVlIH0pO1xuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBDTEkgcmVzcG9uZGVkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBpZiAoIW1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gbm90IHJlYWR5IHlldCwgcmV0cnlpbmcuLi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ic2lkaWFuIGRpZCBub3Qgc3RhcnQgd2l0aGluICR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmApO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGFzeW5jIElJRkUgdGhhdCB3YWl0cyBmb3IgbGF5b3V0IHJlYWR5IGFuZCBleGVjdXRlcyBhbiBJUEMgY2FsbC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZClgIHNvIHRoZSBDTEkgcHJvZHVjZXMgYChubyBvdXRwdXQpYC5cbiAqXG4gKiBAcGFyYW0gaXBjU3RhdGVtZW50IC0gVGhlIElQQyBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIFRoZSBJSUZFIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBidWlsZElwY0V4cHJlc3Npb24oaXBjU3RhdGVtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGlwY1N0YXRlbWVudCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb250ZW50IG9mIGEgdGVtcG9yYXJ5IGAuY2pzYCBzY3JpcHQgZmlsZS5cbiAqXG4gKiBUaGUgc2NyaXB0IGRlZmluZXMgYW4gYXN5bmMgYGludm9rZSgpYCBmdW5jdGlvbiB0aGF0IGV2YWx1YXRlcyB0aGVcbiAqIGV4cHJlc3Npb24sIHdyaXRlcyB0aGUgcmVzdWx0IChvciBlcnJvcikgdG8gYHJlc3VsdFBhdGhgLCBhbmQgaXNcbiAqIGV4cG9ydGVkIGZvciB0aGUgQ0xJIHRvIGByZXF1aXJlKClgIGFuZCBjYWxsLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSByZXN1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHJlc3VsdCBmaWxlLlxuICogQHBhcmFtIGludm9rZU5hbWUgLSBUaGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWUgdG8gZXhwb3J0IChhdm9pZHMgY29sbGlzaW9ucykuXG4gKiBAcmV0dXJucyBUaGUgc2NyaXB0IGZpbGUgY29udGVudC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTY3JpcHRGaWxlKGV4cHJlc3Npb246IHN0cmluZywgcmVzdWx0UGF0aDogc3RyaW5nLCBpbnZva2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHRQYXRoSnNvbiA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpKTtcbiAgcmV0dXJuIGBcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgc2VyaWFsaXplRXJyb3IgPSAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhzZXJpYWxpemVFcnJvcil9O1xuXG5hc3luYyBmdW5jdGlvbiAke2ludm9rZU5hbWV9KCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgke2V4cHJlc3Npb259KTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFwiXCIsIHR5cGU6IFwidW5kZWZpbmVkXCIgfSkpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKCR7cmVzdWx0UGF0aEpzb259LCBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiBcIlwiLCB0eXBlOiBcIm51bGxcIiB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFN0cmluZyhyZXN1bHQpIH0pKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IHNlcmlhbGl6ZUVycm9yKGVyciksIHR5cGU6IFwiZXJyb3JcIiB9KSk7XG4gIH1cbn1cblxuZXhwb3J0cy4ke2ludm9rZU5hbWV9ID0gJHtpbnZva2VOYW1lfTtcbmA7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc2ltcGxlIGFzeW5jIElJRkUgZXhwcmVzc2lvbiB0aGF0IHdhaXRzIGZvciBsYXlvdXQgcmVhZHkuXG4gKlxuICogQHBhcmFtIGJvZHkgLSBUaGUgSmF2YVNjcmlwdCBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBUaGUgSUlGRSBleHByZXNzaW9uIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgKGFzeW5jICgpID0+IHtcbiAgaWYgKCFhcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gIH1cbiAgJHtib2R5fVxufSkoKWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBsYXVuY2ggdGhlIE9ic2lkaWFuIGJpbmFyeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCgpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke2xvY2FsQXBwRGF0YX1cXFxcUHJvZ3JhbXNcXFxcT2JzaWRpYW5cXFxcT2JzaWRpYW4uZXhlXCJgO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbiAmJztcbiAgfVxuXG4gIHJldHVybiAnb2JzaWRpYW4gJic7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLHFCQUEyQjtBQUMzQixzQkFLTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFBcUI7QUFDckIsMEJBQW9CO0FBT3BCLGtCQUFxQjtBQUNyQixpQ0FBNEM7QUFDNUMsaUJBQW9CO0FBQ3BCLGtCQUFxQjtBQUNyQiw2QkFLTztBQUNQLDZCQUErQjtBQWMvQixNQUFNLDBCQUEwQjtBQUNoQyxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLHNDQUFzQztBQUM1QyxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLG9DQUFvQztBQUMxQyxNQUFNLHFDQUFxQztBQU1wQyxNQUFNLG9CQUFpRDtBQUFBO0FBQUEsRUFFNUMsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBaUIzQixNQUFhLFNBQVMsWUFBb0IsU0FBZ0Q7QUFDeEYsVUFBTSxjQUFjO0FBQ3BCLFVBQU0sV0FBVyxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQUUsTUFBTSxXQUFXO0FBQ3hELFVBQU0sZ0JB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QU8sa0NBQWtDLENBQUMsUUFBUTtBQUMzRyxVQUFNLFdBQVcsS0FBSyxJQUFJLElBQUk7QUFDOUIsV0FBTyxLQUFLLElBQUksSUFBSSxVQUFVO0FBQzVCLFlBQU0sTUFBTSx3Q0FBd0M7QUFDcEQsVUFBSTtBQUNGLGtCQUFNLGtCQUFLLFNBQVMsRUFBRSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQzFDLDRCQUFJLHlDQUF5QztBQUM3QztBQUFBLE1BQ0YsU0FBUyxPQUFPO0FBQ2QsY0FBTSxVQUFVLGlCQUFpQixRQUFRLE1BQU0sVUFBVSxPQUFPLEtBQUs7QUFDckUsWUFBSSxDQUFDLFFBQVEsU0FBUyx1QkFBdUIsR0FBRztBQUM5QyxnQkFBTTtBQUFBLFFBQ1I7QUFDQSw0QkFBSSxxREFBcUQ7QUFBQSxNQUMzRDtBQUFBLElBQ0Y7QUFFQSxVQUFNLElBQUksTUFBTSxpQ0FBaUMsT0FBTyxrQ0FBa0MsQ0FBQyxLQUFLO0FBQUEsRUFDbEc7QUFDRjtBQVNBLFNBQVMsbUJBQW1CLGNBQThCO0FBQ3hELFNBQU8sc0JBQXNCLFlBQVk7QUFDM0M7QUFjQSxTQUFTLGdCQUFnQixZQUFvQixZQUFvQixZQUE0QjtBQUMzRixRQUFNLGlCQUFpQixLQUFLLFVBQVUsV0FBVyxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ3BFLFNBQU87QUFBQTtBQUFBLDZCQUVnQix3REFBNEIscUNBQWMsQ0FBQztBQUFBO0FBQUEsaUJBRW5ELFVBQVU7QUFBQTtBQUFBLDRCQUVDLFVBQVU7QUFBQTtBQUFBLHlCQUViLGNBQWM7QUFBQTtBQUFBLHlCQUVkLGNBQWM7QUFBQTtBQUFBLHlCQUVkLGNBQWM7QUFBQTtBQUFBO0FBQUEsdUJBR2hCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUkzQixVQUFVLE1BQU0sVUFBVTtBQUFBO0FBRXBDO0FBUUEsU0FBUyxzQkFBc0IsTUFBc0I7QUFDbkQsU0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSUwsSUFBSTtBQUFBO0FBRVI7QUFRQSxTQUFTLE1BQU0sSUFBMkI7QUFDeEMsU0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzlCLGVBQVcsU0FBUyxFQUFFO0FBQUEsRUFDeEIsQ0FBQztBQUNIO0FBT0EsU0FBUywyQkFBbUM7QUFDMUMsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFNBQVM7QUFDaEMsVUFBTSxlQUFlLG9CQUFBQSxRQUFRLElBQUksY0FBYyxLQUFLO0FBQ3BELFdBQU8sYUFBYSxZQUFZO0FBQUEsRUFDbEM7QUFFQSxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsVUFBVTtBQUNqQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgdW5saW5rLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZXhlYyB9IGZyb20gJy4vZXhlYy5janMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vbm9vcC5janMnO1xuaW1wb3J0IHtcbiAgZ2V0QW55UmVnaXN0ZXJlZFZhdWx0UGF0aCxcbiAgZ2V0VmF1bHRJZCxcbiAgaXNDbGlFbmFibGVkLFxuICBpc1ZhdWx0UmVnaXN0ZXJlZFxufSBmcm9tICcuL29ic2lkaWFuLWNvbmZpZy5janMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuL3NlcmlhbGl6ZS1lcnJvci5janMnO1xuXG4vKipcbiAqIERpc2NyaW1pbmF0ZWQgZW52ZWxvcGUgd3JpdHRlbiBieSB0aGUgdGVtcG9yYXJ5IHNjcmlwdCBmaWxlLlxuICpcbiAqIC0gYHsgdmFsdWU6IHN0cmluZywgdHlwZTogJ2Vycm9yJyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gdGhyZXc7IGB2YWx1ZWAgaXMgdGhlIGVycm9yIG1lc3NhZ2UuXG4gKiAtIGB7IHZhbHVlOiAnJywgdHlwZTogJ251bGwnIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBgbnVsbGAuXG4gKiAtIGB7IHZhbHVlOiAnJywgdHlwZTogJ3VuZGVmaW5lZCcgfWAgXHUyMDE0IHRoZSBleHByZXNzaW9uIHJldHVybmVkIGB1bmRlZmluZWRgLlxuICogLSBgeyB2YWx1ZTogc3RyaW5nIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBhIHN0cmluZyB2YWx1ZSAobm8gYHR5cGVgIGZpZWxkKS5cbiAqL1xudHlwZSBTY3JpcHRSZXN1bHRFbnZlbG9wZSA9XG4gIHwgeyB0eXBlOiAnZXJyb3InIHwgJ251bGwnIHwgJ3VuZGVmaW5lZCc7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsgdmFsdWU6IHN0cmluZyB9O1xuXG5jb25zdCBVTkFCTEVfVE9fRklORF9PQlNJRElBTiA9ICd1bmFibGUgdG8gZmluZCBPYnNpZGlhbic7XG5jb25zdCBBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbmNvbnN0IEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gMTAwMDtcbmNvbnN0IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwMDtcblxuLyoqXG4gKiBUcmFuc3BvcnQgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBEZXNrdG9wIE9ic2lkaWFuIHZpYSB0aGUgYG9ic2lkaWFuIGV2YWxgIENMSSBjb21tYW5kXG4gKiBhbmQgbWFuYWdlcyB2YXVsdHMgdmlhIEVsZWN0cm9uIElQQy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlc2t0b3BDbGlUcmFuc3BvcnQgaW1wbGVtZW50cyBPYnNpZGlhblRyYW5zcG9ydCB7XG4gIC8qKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiB2aWEgYG9ic2lkaWFuIGV2YWxgLlxuICAgKlxuICAgKiBXcml0ZXMgdGhlIGV4cHJlc3Npb24gdG8gYSB0ZW1wb3JhcnkgYC5janNgIGZpbGUgYW5kIGV4ZWN1dGVzIGEgdGlueVxuICAgKiBgcmVxdWlyZSgpLmludm9rZSgpYCBjYWxsIHZpYSB0aGUgQ0xJLiBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gdG8gYVxuICAgKiBgLnJlc3VsdC5qc29uYCBmaWxlIGJ5IHRoZSBzY3JpcHQsIGF2b2lkaW5nIENMSSBzdGRvdXQgc2l6ZSBsaW1pdHNcbiAgICogYW5kIElQQyBidWZmZXIgaXNzdWVzLlxuICAgKlxuICAgKiBIYW5kbGVzIGF1dG8tc3RhcnQ6IGlmIE9ic2lkaWFuIGlzIG5vdCBydW5uaW5nLCBsYXVuY2hlcyBpdCB2aWEgVVJJIHByb3RvY29sXG4gICAqIGFuZCByZXRyaWVzIHVudGlsIGl0IGJlY29tZXMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRXZhbHVhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCByZXN1bHQgc3RyaW5nICh0cmFuc3BvcnQtc3BlY2lmaWMgcHJlZml4ZXMgc3RyaXBwZWQpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgb3B0aW9uczogVHJhbnNwb3J0RXZhbE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IFNMSUNFX1NUQVJUID0gMjtcbiAgICBjb25zdCBzY3JpcHRJZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gICAgY29uc3Qgc2NyaXB0RGlyID0gam9pbih0bXBkaXIoKSwgJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnKTtcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5janNgKTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5yZXN1bHQuanNvbmApO1xuXG4gICAgYXdhaXQgbWtkaXIoc2NyaXB0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGludm9rZU5hbWUgPSBgaW52b2tlXyR7c2NyaXB0SWR9YDtcbiAgICBjb25zdCBzY3JpcHRDb250ZW50ID0gYnVpbGRTY3JpcHRGaWxlKGV4cHJlc3Npb24sIHJlc3VsdFBhdGgsIGludm9rZU5hbWUpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShzY3JpcHRQYXRoLCBzY3JpcHRDb250ZW50KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgbW9kdWxlLmNvbnN0cnVjdG9yLl9sb2FkIHRvIGJ5cGFzcyBhbnkgbW9ua2V5LXBhdGNoZWQgcmVxdWlyZSgpXG4gICAgICAvLyAoZS5nLiwgb2JzaWRpYW4tY29kZXNjcmlwdC10b29sa2l0IHBhdGNoZXMgcmVxdWlyZSBpbiB0aGUgcmVuZGVyZXIgcHJvY2VzcykuXG4gICAgICBjb25zdCBzYWZlUmVxdWlyZSA9IGBtb2R1bGUuY29uc3RydWN0b3IuX2xvYWQoJHtKU09OLnN0cmluZ2lmeShzY3JpcHRQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKSl9KWA7XG4gICAgICBjb25zdCByZXF1aXJlRXhwciA9IGAoYXN5bmMgKCkgPT4geyBhd2FpdCAke3NhZmVSZXF1aXJlfS4ke2ludm9rZU5hbWV9KCkgfSkoKWA7XG4gICAgICBjb25zdCBjb21tYW5kID0gWydvYnNpZGlhbicsICdldmFsJywgJy0tYWxsb3ctZm9jdXMtc3RlYWwnLCBgY29kZT0ke3JlcXVpcmVFeHByfWBdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHtcbiAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgIGlzUXVpZXQ6IHRydWUsXG4gICAgICAgICAgLi4uKG9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kLCBvcHRpb25zLmN3ZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFleGlzdHNTeW5jKHJlc3VsdFBhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGRpZCBub3QgZXhlY3V0ZSBmb3IgcGF0aDogJHtvcHRpb25zLmN3ZH0gXHUyMDE0IHRoZSB2YXVsdCBtYXkgbm90IGJlIGZvdW5kIG9yIE9ic2lkaWFuIGRpZCBub3QgcnVuIHRoZSBldmFsLmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCByZWFkRmlsZShyZXN1bHRQYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpIGFzIFNjcmlwdFJlc3VsdEVudmVsb3BlO1xuXG4gICAgICBpZiAoJ3R5cGUnIGluIGVudmVsb3BlKSB7XG4gICAgICAgIGlmIChlbnZlbG9wZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY3JpcHQgZXJyb3IgaW4gT2JzaWRpYW4gZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9OiAke2VudmVsb3BlLnZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudmVsb3BlLnZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB1bmxpbmsoc2NyaXB0UGF0aCkuY2F0Y2gobm9vcCk7XG4gICAgICBhd2FpdCB1bmxpbmsocmVzdWx0UGF0aCkuY2F0Y2gobm9vcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ0xJLXNwZWNpZmljIHByZWZsaWdodCBjaGVja3MuXG4gICAqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHZhdWx0IGlzIHJlZ2lzdGVyZWQsIENMSSBpcyBlbmFibGVkIGluIE9ic2lkaWFuIHNldHRpbmdzLFxuICAgKiBhbmQgdGhlIGBvYnNpZGlhbmAgQ0xJIGJpbmFyeSBpcyBhdmFpbGFibGUgaW4gUEFUSC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJlZmxpZ2h0Q2hlY2sodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBSdW5uaW5nIHByZWZsaWdodCBjaGVjayBmb3IgdmF1bHQ6ICR7dmF1bHRQYXRofWApO1xuICAgIGlmICghaXNWYXVsdFJlZ2lzdGVyZWQodmF1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmF1bHQgaXMgbm90IHJlZ2lzdGVyZWQgaW4gT2JzaWRpYW46ICR7dmF1bHRQYXRofS4gUmVnaXN0ZXIgdGhlIHZhdWx0IGZpcnN0IHdpdGggcmVnaXN0ZXJWYXVsdCgpIG9yIFRlbXBWYXVsdC5yZWdpc3RlcigpLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NsaUVuYWJsZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPYnNpZGlhbiBDTEkgaXMgZGlzYWJsZWQuIEVuYWJsZSBpdCBpbiBPYnNpZGlhbiBTZXR0aW5ncyBcXHUyMTkyIEdlbmVyYWwgXFx1MjE5MiBDTEkuJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0UGF0aCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcbiAgICBpZiAoIWV4aXN0aW5nVmF1bHRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWdpc3RlciBhIHZhdWx0OiBubyBleGlzdGluZyB2YXVsdCBpcyByZWdpc3RlcmVkIGluIE9ic2lkaWFuLiBPcGVuIE9ic2lkaWFuIGFuZCBjcmVhdGUgb3Igb3BlbiBhdCBsZWFzdCBvbmUgdmF1bHQgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnaXN0ZXJFeHByID0gYnVpbGRJcGNFeHByZXNzaW9uKFxuICAgICAgYHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsICR7SlNPTi5zdHJpbmdpZnkodmF1bHRQYXRoKX0sIGZhbHNlKTtgXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlZ2lzdGVyRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRQYXRoIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoLCBleGlzdGluZ1ZhdWx0UGF0aCk7XG5cbiAgICBjb25zdCBwb2xsRXhwciA9IGJ1aWxkU2ltcGxlRXhwcmVzc2lvbihcbiAgICAgICdyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXBwLnZhdWx0LmFkYXB0ZXIuZ2V0QmFzZVBhdGgoKSk7J1xuICAgICk7XG5cbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBQb2xsaW5nIGZvciB2YXVsdCByZWFkaW5lc3MgKHRpbWVvdXQ9JHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiYXNlUGF0aCA9IGF3YWl0IHRoaXMuZXZhbHVhdGUocG9sbEV4cHIsIHsgY3dkOiB2YXVsdFBhdGggfSk7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKGJhc2VQYXRoKSA9PT0gdmF1bHRQYXRoKSB7XG4gICAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVhZHkuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVmF1bHQgbm90IHJlYWR5IHlldC5cbiAgICAgIH1cbiAgICAgIGF3YWl0IGRlbGF5KFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBhdCAke3ZhdWx0UGF0aH0gZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zYCk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSB2YXVsdCBmcm9tIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBTY2hlZHVsZXMgdGhlIHZhdWx0IHdpbmRvdyB0byBjbG9zZSwgd2FpdHMsIHRoZW4gcmVtb3ZlcyB0aGUgdmF1bHRcbiAgICogZnJvbSB0aGUgcmVnaXN0cnkgdmlhIGB2YXVsdC1yZW1vdmVgIElQQy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5yZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVW5yZWdpc3RlcmluZyB2YXVsdDogY2xvc2luZyB3aW5kb3cgZm9yICR7dmF1bHRQYXRofS4uLmApO1xuICAgIGNvbnN0IGRlc3Ryb3lFeHByID0gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAod2luZG93LmVsZWN0cm9uICYmIHdpbmRvdy5lbGVjdHJvbi5yZW1vdGUpIHtcbiAgICAgICAgICB3aW5kb3cuZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKGRlc3Ryb3lFeHByLCB7IGN3ZDogdmF1bHRQYXRoLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBXaW5kb3cgZGVzdHJveSBjb21tYW5kIHNlbnQuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFdpbmRvdyBkZXN0cm95IGZhaWxlZCAobm9uLWZhdGFsKTogJHtzZXJpYWxpemVFcnJvcihlcnJvcil9YCk7XG4gICAgfVxuXG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gV2FpdGluZyBmb3Igd2luZG93IHRvIGNsb3NlLi4uJyk7XG4gICAgYXdhaXQgZGVsYXkoVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFJlbW92aW5nIHZhdWx0IGZyb20gcmVnaXN0cnkuLi4nKTtcbiAgICBjb25zdCByZW1vdmVFeHByID0gYnVpbGRJcGNFeHByZXNzaW9uKFxuICAgICAgYHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtcmVtb3ZlJywgJHtKU09OLnN0cmluZ2lmeSh2YXVsdFBhdGgpfSk7YFxuICAgICk7XG4gICAgY29uc3QgZXhpc3RpbmdWYXVsdEZvclJlbW92YWwgPSBnZXRBbnlSZWdpc3RlcmVkVmF1bHRQYXRoKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCkge1xuICAgICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlbW92ZUV4cHIsIHsgY3dkOiBleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCwgdGltZW91dEluTWlsbGlzZWNvbmRzOiBWQVVMVF9FVkFMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gTm8gZXhpc3RpbmcgdmF1bHQgdG8gdGFyZ2V0IGZvciByZW1vdmFsIElQQyBcdTIwMTQgc2tpcHBpbmcuJyk7XG4gICAgICB9XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCByZW1vdmVkIGZyb20gcmVnaXN0cnkuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFZhdWx0IHJlZ2lzdHJ5IHJlbW92YWwgZmFpbGVkIChub24tZmF0YWwpOiAke3NlcmlhbGl6ZUVycm9yKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIE9ic2lkaWFuIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0gUEFUSC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYXNzZXJ0Q2xpQXZhaWxhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZSBvYnNpZGlhbicgOiAnd2hpY2ggb2JzaWRpYW4nO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2JzaWRpYW4gQ0xJIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSBPYnNpZGlhbiBpcyBpbnN0YWxsZWQgYW5kIGl0cyBDTEkgaXMgaW4geW91ciBQQVRILicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGBlbmFibGUtcGx1Z2luLTx2YXVsdElkPmAgaW4gT2JzaWRpYW4ncyBsb2NhbFN0b3JhZ2UgdG8gcHJldmVudFxuICAgKiB0aGUgXCJEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvciBvZiB0aGlzIHZhdWx0P1wiIGRpYWxvZyBmcm9tIGFwcGVhcmluZ1xuICAgKiB3aGVuIGEgdmF1bHQgd2l0aCBjb21tdW5pdHkgcGx1Z2lucyBpcyBvcGVuZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKlxuICAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgYHZhdWx0LW9wZW5gIElQQyAoc28gdGhlIHZhdWx0IElEIGV4aXN0cyBpblxuICAgKiBgb2JzaWRpYW4uanNvbmApIGFuZCBiZWZvcmUgdGhlIG5ldyB2YXVsdCB3aW5kb3cgZmluaXNoZXMgbG9hZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqIEBwYXJhbSBldmFsVGFyZ2V0VmF1bHRQYXRoIC0gVGhlIHZhdWx0IHBhdGggdG8gdXNlIGFzIGV2YWwgdGFyZ2V0IChhbiBleGlzdGluZywgbG9hZGVkIHZhdWx0KS5cbiAgICogICBsb2NhbFN0b3JhZ2UgaXMgc2hhcmVkIGFjcm9zcyBhbGwgT2JzaWRpYW4gd2luZG93cyAoc2FtZSBFbGVjdHJvbiBvcmlnaW4pLCBzbyB0aGVcbiAgICogICBgbG9jYWxTdG9yYWdlLnNldEl0ZW1gIGNhbGwgY2FuIHJ1biBpbiBhbnkgbG9hZGVkIHZhdWx0IHdpbmRvdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5hYmxlUGx1Z2luc0luTG9jYWxTdG9yYWdlKHZhdWx0UGF0aDogc3RyaW5nLCBldmFsVGFyZ2V0VmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2YXVsdElkID0gZ2V0VmF1bHRJZCh2YXVsdFBhdGgpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gQ291bGQgbm90IGZpbmQgdmF1bHQgSUQgXHUyMDE0IHNraXBwaW5nIGxvY2FsU3RvcmFnZSB0cnVzdCBmbGFnLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVuYWJsZUV4cHIgPSBidWlsZFNpbXBsZUV4cHJlc3Npb24oXG4gICAgICBgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJHtKU09OLnN0cmluZ2lmeShgZW5hYmxlLXBsdWdpbi0ke3ZhdWx0SWR9YCl9LCAndHJ1ZScpO2BcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUoZW5hYmxlRXhwciwgeyBjd2Q6IGV2YWxUYXJnZXRWYXVsdFBhdGggfSk7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gU2V0IGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfSBpbiBsb2NhbFN0b3JhZ2UuYCk7XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoZXMgT2JzaWRpYW4gYmluYXJ5IGFuZCByZXRyaWVzIHRoZSBldmFsIHVudGlsIGl0IHJlc3BvbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBDTEkgY29tbWFuZCBhcnJheSB0byByZXRyeS5cbiAgICogQHBhcmFtIGN3ZCAtIFRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlT2JzaWRpYW5SdW5uaW5nQW5kUmV0cnkoY29tbWFuZDogc3RyaW5nW10sIGN3ZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gaXMgbm90IHJ1bm5pbmcuIFN0YXJ0aW5nIE9ic2lkaWFuLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQoKSwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gVGhlIGxhdW5jaCBjb21tYW5kIG1heSBmYWlsIG9uIHNvbWUgc3lzdGVtcyBcdTIwMTQgd2UnbGwgc3RpbGwgdHJ5IHBvbGxpbmcuXG4gICAgfVxuXG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUG9sbGluZyBmb3IgT2JzaWRpYW4gQ0xJICh0aW1lb3V0PSR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgYXdhaXQgZGVsYXkoQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgY3dkLCBpc1F1aWV0OiB0cnVlIH0pO1xuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBDTEkgcmVzcG9uZGVkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBpZiAoIW1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gbm90IHJlYWR5IHlldCwgcmV0cnlpbmcuLi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ic2lkaWFuIGRpZCBub3Qgc3RhcnQgd2l0aGluICR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmApO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGFzeW5jIElJRkUgdGhhdCB3YWl0cyBmb3IgbGF5b3V0IHJlYWR5IGFuZCBleGVjdXRlcyBhbiBJUEMgY2FsbC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZClgIHNvIHRoZSBDTEkgcHJvZHVjZXMgYChubyBvdXRwdXQpYC5cbiAqXG4gKiBAcGFyYW0gaXBjU3RhdGVtZW50IC0gVGhlIElQQyBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIFRoZSBJSUZFIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBidWlsZElwY0V4cHJlc3Npb24oaXBjU3RhdGVtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGlwY1N0YXRlbWVudCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb250ZW50IG9mIGEgdGVtcG9yYXJ5IGAuY2pzYCBzY3JpcHQgZmlsZS5cbiAqXG4gKiBUaGUgc2NyaXB0IGRlZmluZXMgYW4gYXN5bmMgYGludm9rZSgpYCBmdW5jdGlvbiB0aGF0IGV2YWx1YXRlcyB0aGVcbiAqIGV4cHJlc3Npb24sIHdyaXRlcyB0aGUgcmVzdWx0IChvciBlcnJvcikgdG8gYHJlc3VsdFBhdGhgLCBhbmQgaXNcbiAqIGV4cG9ydGVkIGZvciB0aGUgQ0xJIHRvIGByZXF1aXJlKClgIGFuZCBjYWxsLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSByZXN1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHJlc3VsdCBmaWxlLlxuICogQHBhcmFtIGludm9rZU5hbWUgLSBUaGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWUgdG8gZXhwb3J0IChhdm9pZHMgY29sbGlzaW9ucykuXG4gKiBAcmV0dXJucyBUaGUgc2NyaXB0IGZpbGUgY29udGVudC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTY3JpcHRGaWxlKGV4cHJlc3Npb246IHN0cmluZywgcmVzdWx0UGF0aDogc3RyaW5nLCBpbnZva2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHRQYXRoSnNvbiA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpKTtcbiAgcmV0dXJuIGBcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgc2VyaWFsaXplRXJyb3IgPSAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhzZXJpYWxpemVFcnJvcil9O1xuXG5hc3luYyBmdW5jdGlvbiAke2ludm9rZU5hbWV9KCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgke2V4cHJlc3Npb259KTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFwiXCIsIHR5cGU6IFwidW5kZWZpbmVkXCIgfSkpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKCR7cmVzdWx0UGF0aEpzb259LCBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiBcIlwiLCB0eXBlOiBcIm51bGxcIiB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFN0cmluZyhyZXN1bHQpIH0pKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IHNlcmlhbGl6ZUVycm9yKGVyciksIHR5cGU6IFwiZXJyb3JcIiB9KSk7XG4gIH1cbn1cblxuZXhwb3J0cy4ke2ludm9rZU5hbWV9ID0gJHtpbnZva2VOYW1lfTtcbmA7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc2ltcGxlIGFzeW5jIElJRkUgZXhwcmVzc2lvbiB0aGF0IHdhaXRzIGZvciBsYXlvdXQgcmVhZHkuXG4gKlxuICogQHBhcmFtIGJvZHkgLSBUaGUgSmF2YVNjcmlwdCBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBUaGUgSUlGRSBleHByZXNzaW9uIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgKGFzeW5jICgpID0+IHtcbiAgaWYgKCFhcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gIH1cbiAgJHtib2R5fVxufSkoKWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBsYXVuY2ggdGhlIE9ic2lkaWFuIGJpbmFyeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCgpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke2xvY2FsQXBwRGF0YX1cXFxcUHJvZ3JhbXNcXFxcT2JzaWRpYW5cXFxcT2JzaWRpYW4uZXhlXCJgO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbiAmJztcbiAgfVxuXG4gIHJldHVybiAnb2JzaWRpYW4gJic7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLHFCQUEyQjtBQUMzQixzQkFLTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFBcUI7QUFDckIsMEJBQW9CO0FBT3BCLGtCQUFxQjtBQUNyQixpQ0FBNEM7QUFDNUMsaUJBQW9CO0FBQ3BCLGtCQUFxQjtBQUNyQiw2QkFLTztBQUNQLDZCQUErQjtBQWMvQixNQUFNLDBCQUEwQjtBQUNoQyxNQUFNLDJDQUEy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
|
|
@@ -68,6 +68,9 @@ export declare class DesktopCliTransport implements ObsidianTransport {
|
|
|
68
68
|
* `obsidian.json`) and before the new vault window finishes loading.
|
|
69
69
|
*
|
|
70
70
|
* @param vaultPath - The absolute path to the vault folder.
|
|
71
|
+
* @param evalTargetVaultPath - The vault path to use as eval target (an existing, loaded vault).
|
|
72
|
+
* localStorage is shared across all Obsidian windows (same Electron origin), so the
|
|
73
|
+
* `localStorage.setItem` call can run in any loaded vault window.
|
|
71
74
|
*/
|
|
72
75
|
private enablePluginsInLocalStorage;
|
|
73
76
|
/**
|
|
@@ -37,6 +37,7 @@ var import_node_http = __toESM(require("node:http"), 1);
|
|
|
37
37
|
var import_node_path = require("node:path");
|
|
38
38
|
var import_node_process = __toESM(require("node:process"), 1);
|
|
39
39
|
var import_webdriverio = require("webdriverio");
|
|
40
|
+
var import_emulator_args = require("./emulator-args.cjs");
|
|
40
41
|
var import_log = require("./log.cjs");
|
|
41
42
|
var import_transport_appium = require("./transport-appium.cjs");
|
|
42
43
|
var import_transport_desktop_cdp = require("./transport-desktop-cdp.cjs");
|
|
@@ -281,8 +282,9 @@ class AppiumTransportFactory {
|
|
|
281
282
|
}
|
|
282
283
|
startEmulator(avdName) {
|
|
283
284
|
const emulatorBinary = this.resolveEmulatorBinary();
|
|
284
|
-
|
|
285
|
-
|
|
285
|
+
const args = (0, import_emulator_args.buildEmulatorArgs)(avdName);
|
|
286
|
+
this.log(`Running: ${emulatorBinary} ${args.join(" ")}`);
|
|
287
|
+
const child = (0, import_node_child_process.spawn)(emulatorBinary, args, {
|
|
286
288
|
detached: true,
|
|
287
289
|
stdio: ["ignore", "ignore", "ignore"]
|
|
288
290
|
});
|
|
@@ -409,4 +411,4 @@ function killProcessTree(child) {
|
|
|
409
411
|
createTransportFromOptions,
|
|
410
412
|
getOrCreateTransport
|
|
411
413
|
});
|
|
412
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZXhlY0ZpbGUsXG4gIGV4ZWNGaWxlU3luYyxcbiAgc3Bhd25cbn0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ25vZGU6aHR0cCc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgQXBwaXVtVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLmNqcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAuY2pzJztcbmltcG9ydCB7IERlc2t0b3BDbGlUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS5janMnO1xuXG5jb25zdCBBUFBfUEFDS0FHRSA9ICdtZC5vYnNpZGlhbic7XG5jb25zdCBBUFBfQUNUSVZJVFkgPSBgJHtBUFBfUEFDS0FHRX0uTWFpbkFjdGl2aXR5YDtcbmNvbnN0IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuY29uc3QgQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfQ09VTlQgPSAxO1xuY29uc3QgQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MDAwMDtcbmNvbnN0IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuY29uc3QgQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBDRFBfREVGQVVMVF9QT1JUID0gODMxNTtcbmNvbnN0IENPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDA7XG5jb25zdCBERUZBVUxUX1RSQU5TUE9SVF9UWVBFID0gJ29ic2lkaWFuLWNsaSc7XG5jb25zdCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbmNvbnN0IEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMjAwMDA7XG5jb25zdCBLRVlDT0RFX01FTlUgPSA4MjtcbmNvbnN0IEtFWUNPREVfV0FLRVVQID0gMjI0O1xuY29uc3QgU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBcHBpdW1UcmFuc3BvcnRGYWN0b3J5LnN0YXJ0QXBwaXVtQW5kRW11bGF0b3J9LlxuICovXG5pbnRlcmZhY2UgU3RhcnRBcHBpdW1BbmRFbXVsYXRvclBhcmFtcyB7XG4gIC8qKiBUaGUgQXBwaXVtIHNlcnZlciBVUkwuICovXG4gIGFwcGl1bVVybDogVVJMO1xuXG4gIC8qKiBBVkQgbmFtZSB0byBhdXRvLXN0YXJ0IGlmIHRoZSBkZXZpY2UgaXMgbm90IGNvbm5lY3RlZC4gKi9cbiAgYXZkTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogRGV2aWNlIFVESUQuICovXG4gIGRldmljZUlkOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBBcHBpdW0gc2VydmVyIHBvcnQuICovXG4gIHBvcnQ6IG51bWJlcjtcblxuICAvKiogV2hldGhlciBBcHBpdW0gYXV0by1zdGFydCBpcyBhbGxvd2VkLiAqL1xuICBzaG91bGRBdXRvU3RhcnRBcHBpdW0/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG5sZXQgY2FjaGVkVHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYWxsIEFwcGl1bSB0cmFuc3BvcnQgY3JlYXRpb24gbG9naWMsIGluY2x1ZGluZyBBcHBpdW0gc2VydmVyXG4gKiBzdGFydHVwLCBlbXVsYXRvciBtYW5hZ2VtZW50LCBhbmQgV2ViRHJpdmVySU8gc2Vzc2lvbiBlc3RhYmxpc2htZW50LlxuICpcbiAqIFVzaW5nIGEgY2xhc3MgYXZvaWRzIHRocmVhZGluZyB0aGUgdHJhbnNwb3J0IGB0eXBlYCBsYWJlbCB0aHJvdWdoIGV2ZXJ5XG4gKiBoZWxwZXIgZnVuY3Rpb24gXHUyMDE0IGB0aGlzLmxvZygpYCBhdXRvbWF0aWNhbGx5IHByZWZpeGVzIGl0LlxuICovXG5jbGFzcyBBcHBpdW1UcmFuc3BvcnRGYWN0b3J5IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBBcHBpdW0gdHJhbnNwb3J0IGJ5IGVzdGFibGlzaGluZyBhIFdlYkRyaXZlcklPIHNlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW5kcm9pZCBBcHBpdW0gdHJhbnNwb3J0IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgY29uZmlndXJlZCBBcHBpdW0gdHJhbnNwb3J0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShvcHRpb25zOiBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICAgIHRoaXMubG9nKGBDcmVhdGluZyBBcHBpdW1UcmFuc3BvcnQgKHVybD0ke29wdGlvbnMuYXBwaXVtVXJsfSwgZGV2aWNlPSR7b3B0aW9ucy5kZXZpY2VJZH0pYCk7XG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKG9wdGlvbnMuYXBwaXVtVXJsKTtcblxuICAgIGNvbnN0IHBvcnQgPSBOdW1iZXIodXJsLnBvcnQpO1xuICAgIGlmIChpc05hTihwb3J0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvcnQgaW4gYXBwaXVtVXJsOiAke3VybC5wb3J0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcElkID0gb3B0aW9ucy5hcHBJZCA/PyBBUFBfUEFDS0FHRTtcblxuICAgIGxldCBhcHBpdW1Qcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVtdWxhdG9yUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIFthcHBpdW1Qcm9jZXNzLCBlbXVsYXRvclByb2Nlc3NdID0gYXdhaXQgdGhpcy5zdGFydEFwcGl1bUFuZEVtdWxhdG9yKHtcbiAgICAgICAgYXBwaXVtVXJsOiB1cmwsXG4gICAgICAgIGF2ZE5hbWU6IG9wdGlvbnMuYXZkTmFtZSxcbiAgICAgICAgZGV2aWNlSWQ6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNob3VsZEF1dG9TdGFydEFwcGl1bTogb3B0aW9ucy5zaG91bGRBdXRvU3RhcnRBcHBpdW1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxvZyhcbiAgICAgICAgYENvbm5lY3RpbmcgdG8gQXBwaXVtIChkZXZpY2U9JHtvcHRpb25zLmRldmljZUlkfSwgYXBwPSR7YXBwSWR9LCByZXRyeVRpbWVvdXQ6ICR7U3RyaW5nKEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcywgcmV0cmllczogJHtcbiAgICAgICAgICBTdHJpbmcoQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfQ09VTlQpXG4gICAgICAgIH0pLi4uYFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCByZW1vdGUoe1xuICAgICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgICAnYXBwaXVtOmFwcEFjdGl2aXR5JzogQVBQX0FDVElWSVRZLFxuICAgICAgICAgICdhcHBpdW06YXBwUGFja2FnZSc6IGFwcElkLFxuICAgICAgICAgICdhcHBpdW06YXV0b0dyYW50UGVybWlzc2lvbnMnOiB0cnVlLFxuICAgICAgICAgICdhcHBpdW06YXV0b21hdGlvbk5hbWUnOiAnVWlBdXRvbWF0b3IyJyxcbiAgICAgICAgICAnYXBwaXVtOm5ld0NvbW1hbmRUaW1lb3V0JzogQ09NTUFORF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICAnYXBwaXVtOm5vUmVzZXQnOiB0cnVlLFxuICAgICAgICAgICdhcHBpdW06c2V0dGluZ3MnOiB7XG4gICAgICAgICAgICAnYXBwaXVtOmNocm9tZWRyaXZlckF1dG9kb3dubG9hZCc6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgICdhcHBpdW06c2tpcFNlcnZlckluc3RhbGxhdGlvbic6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTp1ZGlkJzogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgICAnYXBwaXVtOnVpYXV0b21hdG9yMlNlcnZlckxhdW5jaFRpbWVvdXQnOiBTRVJWRVJfTEFVTkNIX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgICdwbGF0Zm9ybU5hbWUnOiAnQW5kcm9pZCdcbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5ULFxuICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgbG9nTGV2ZWw6ICd3YXJuJyxcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lLFxuICAgICAgICBwb3J0XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sb2coJ0FwcGl1bSBzZXNzaW9uIGVzdGFibGlzaGVkLicpO1xuICAgICAgY29uc3QgYXBwaXVtVHJhbnNwb3J0ID0gbmV3IEFwcGl1bVRyYW5zcG9ydCh7XG4gICAgICAgIGFwcElkLFxuICAgICAgICBicm93c2VyLFxuICAgICAgICBkZXZpY2VJZDogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICAgICAgLi4uKG9wdGlvbnMudmF1bHRCYXNlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHsgdmF1bHRCYXNlUGF0aDogb3B0aW9ucy52YXVsdEJhc2VQYXRoIH0pXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxEaXNwb3NlID0gYXBwaXVtVHJhbnNwb3J0LmRpc3Bvc2UuYmluZChhcHBpdW1UcmFuc3BvcnQpO1xuICAgICAgY29uc3QgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCA9IGFwcGl1bVRyYW5zcG9ydDtcbiAgICAgIHRyYW5zcG9ydC5kaXNwb3NlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzcG9zZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmMgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRyYW5zcG9ydDtcblxuICAgICAgZnVuY3Rpb24ga2lsbEF1dG9TdGFydGVkUHJvY2Vzc2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgICAvLyBDYW5ub3QgdXNlIHRoaXMubG9nIGluc2lkZSBuZXN0ZWQgZnVuY3Rpb24gXHUyMDE0IGB0aGlzYCBpcyBub3QgY2FwdHVyZWQuXG4gICAgICAgICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHtvcHRpb25zLnR5cGV9XSBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbXVsYXRvclByb2Nlc3MpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWUoZW11bGF0b3JQcm9jZXNzKTtcbiAgICAgICAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke29wdGlvbnMudHlwZX1dIEF1dG8tc3RhcnRlZCBlbXVsYXRvciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChhcHBpdW1Qcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgdGhpcy5sb2coJ0tpbGxlZCBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICBpZiAoZW11bGF0b3JQcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShlbXVsYXRvclByb2Nlc3MpO1xuICAgICAgICB0aGlzLmxvZygnS2lsbGVkIGF1dG8tc3RhcnRlZCBlbXVsYXRvciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQXBwaXVtUmVhY2hhYmxlKHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1c1VybCA9IG5ldyBVUkwoJy9zdGF0dXMnLCB1cmwpO1xuICAgICAgY29uc3QgcmVxID0gaHR0cC5nZXQoc3RhdHVzVXJsLCB7IHRpbWVvdXQ6IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKHJlcykgPT4ge1xuICAgICAgICByZXMucmVzdW1lKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufSBkaWQgbm90IHJlc3BvbmQgd2l0aGluICR7U3RyaW5nKEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlYWNoIEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufTogJHtlcnIubWVzc2FnZX0uIElzIHRoZSBBcHBpdW0gc2VydmVyIHJ1bm5pbmc/YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0RldmljZUNvbm5lY3RlZChkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBleGVjRmlsZSgnYWRiJywgWydkZXZpY2VzJ10sIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBydW4gJ2FkYiBkZXZpY2VzJzogJHtlcnJvci5tZXNzYWdlfS4gSXMgQURCIGluc3RhbGxlZCBhbmQgaW4gUEFUSD9gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZyhgQURCIHN0ZGVycjogJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpLmZpbHRlcigobGluZSkgPT4gbGluZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBkZXZpY2VMaW5lID0gbGluZXMuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKGRldmljZUlkKSk7XG4gICAgcmV0dXJuIGRldmljZUxpbmU/LmluY2x1ZGVzKCdcXHRkZXZpY2UnKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlRGV2aWNlQ29ubmVjdGVkKGF2ZE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy5sb2coYENoZWNraW5nIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQgdmlhIEFEQi4uLmApO1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGlzIGNvbm5lY3RlZC5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdmROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGlzIG5vdCBjb25uZWN0ZWQuIFN0YXJ0IHRoZSBlbXVsYXRvciBiZWZvcmUgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyxgXG4gICAgICAgICAgKyAnIG9yIHNldCBhdmROYW1lIGluIHRyYW5zcG9ydCBvcHRpb25zIHRvIGF1dG8tc3RhcnQgaXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IG5vdCBmb3VuZCwgc3RhcnRpbmcgZW11bGF0b3IgQVZEIFwiJHthdmROYW1lfVwiLi4uYCk7XG4gICAgY29uc3QgZW11bGF0b3JQcm9jZXNzID0gdGhpcy5zdGFydEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckRldmljZShkZXZpY2VJZCk7XG4gICAgdGhpcy5sb2coYEVtdWxhdG9yIFwiJHthdmROYW1lfVwiIHN0YXJ0ZWQsIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQuYCk7XG4gICAgcmV0dXJuIGVtdWxhdG9yUHJvY2VzcztcbiAgfVxuXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dGhpcy50eXBlfV0gJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW11bGF0b3JCaW5hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZGtSb290ID0gcHJvY2Vzcy5lbnZbJ0FORFJPSURfSE9NRSddID8/IHByb2Nlc3MuZW52WydBTkRST0lEX1NES19ST09UJ107XG4gICAgaWYgKCFzZGtSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZmluZCBBbmRyb2lkIGVtdWxhdG9yOiBuZWl0aGVyIEFORFJPSURfSE9NRSBub3IgQU5EUk9JRF9TREtfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGpvaW4oc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ2VtdWxhdG9yJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRLZXlFdmVudChkZXZpY2VJZDogc3RyaW5nLCBrZXlDb2RlOiBudW1iZXIsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICdhZGInLFxuICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdpbnB1dCcsICdrZXlldmVudCcsIFN0cmluZyhrZXlDb2RlKV0sXG4gICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgICAgICBgV2FybmluZzogZmFpbGVkIHRvICR7ZGVzY3JpcHRpb259IChrZXlldmVudCAke1N0cmluZyhrZXlDb2RlKX0pOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEFwcGl1bUFuZEVtdWxhdG9yKHBhcmFtczogU3RhcnRBcHBpdW1BbmRFbXVsYXRvclBhcmFtcyk6IFByb21pc2U8W0NoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZCwgQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkXT4ge1xuICAgIGNvbnN0IHsgYXBwaXVtVXJsLCBhdmROYW1lLCBkZXZpY2VJZCwgcG9ydCwgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtIH0gPSBwYXJhbXM7XG5cbiAgICBsZXQgbmVlZHNBcHBpdW1TdGFydCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sb2coYENoZWNraW5nIEFwcGl1bSBzZXJ2ZXIgYXQgJHthcHBpdW1VcmwuaHJlZn0uLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZShhcHBpdW1VcmwpO1xuICAgICAgdGhpcy5sb2coJ0FwcGl1bSBzZXJ2ZXIgaXMgcmVhY2hhYmxlLicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoc2hvdWxkQXV0b1N0YXJ0QXBwaXVtID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG5lZWRzQXBwaXVtU3RhcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhcHBpdW1Qcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmVlZHNBcHBpdW1TdGFydCkge1xuICAgICAgdGhpcy5sb2coYEFwcGl1bSBub3QgcmVhY2hhYmxlLCBhdXRvLXN0YXJ0aW5nIG9uIHBvcnQgJHtTdHJpbmcocG9ydCl9Li4uYCk7XG4gICAgICBhcHBpdW1Qcm9jZXNzID0gdGhpcy5zdGFydEFwcGl1bVNlcnZlcihwb3J0KTtcbiAgICB9XG5cbiAgICBjb25zdCBbLCBlbXVsYXRvclByb2Nlc3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgbmVlZHNBcHBpdW1TdGFydFxuICAgICAgICA/IHRoaXMud2FpdEZvckFwcGl1bVJlYWR5KGFwcGl1bVVybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2coJ0F1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyIGlzIHJlYWR5LicpO1xuICAgICAgICB9KVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgdGhpcy5lbnN1cmVEZXZpY2VDb25uZWN0ZWQoYXZkTmFtZSwgZGV2aWNlSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc107XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QXBwaXVtU2VydmVyKHBvcnQ6IG51bWJlcik6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihgbnB4IGFwcGl1bSAtLWxvZy10aW1lc3RhbXAgLS1wb3J0ICR7U3RyaW5nKHBvcnQpfWAsIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaW5oZXJpdCcsICdpbmhlcml0J11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVtdWxhdG9yKGF2ZE5hbWU6IHN0cmluZyk6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgZW11bGF0b3JCaW5hcnkgPSB0aGlzLnJlc29sdmVFbXVsYXRvckJpbmFyeSgpO1xuICAgIHRoaXMubG9nKGBSdW5uaW5nOiAke2VtdWxhdG9yQmluYXJ5fSAtYXZkICR7YXZkTmFtZX0gLW5vLXNuYXBzaG90LXNhdmVgKTtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGVtdWxhdG9yQmluYXJ5LCBbJy1hdmQnLCBhdmROYW1lLCAnLW5vLXNuYXBzaG90LXNhdmUnXSwge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddXG4gICAgfSk7XG5cbiAgICBjaGlsZC51bnJlZigpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckFwcGl1bVJlYWR5KHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgQXBwaXVtIGF0ICR7dXJsLmhyZWZ9ICh0aW1lb3V0OiAke1N0cmluZyhBUFBJVU1fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKVxuICAgICAgfW1zKS4uLmBcbiAgICApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBpdW1SZWFjaGFibGUodXJsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckJvb3QoZGV2aWNlSWQ6IHN0cmluZywgZGVhZGxpbmU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlbWFpbmluZ01zID0gTWF0aC5tYXgoMCwgZGVhZGxpbmUgLSBEYXRlLm5vdygpKTtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciBkZXZpY2UgJHtkZXZpY2VJZH0gdG8gZmluaXNoIGJvb3RpbmcgKHJlbWFpbmluZzogJHtTdHJpbmcocmVtYWluaW5nTXMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUylcbiAgICAgIH1tcykuLi5gXG4gICAgKTtcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGNvbnN0IGlzQm9vdGVkID0gYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICAgJ2FkYicsXG4gICAgICAgICAgWyctcycsIGRldmljZUlkLCAnc2hlbGwnLCAnZ2V0cHJvcCcsICdzeXMuYm9vdF9jb21wbGV0ZWQnXSxcbiAgICAgICAgICB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSxcbiAgICAgICAgICAoX2Vycm9yLCBzdGRvdXQpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0LnRyaW0oKSA9PT0gJzEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGlzQm9vdGVkKSB7XG4gICAgICAgIHRoaXMubG9nKGBEZXZpY2UgJHtkZXZpY2VJZH0gYm9vdCBjb21wbGV0ZWQuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGNvbm5lY3RlZCBidXQgZGlkIG5vdCBmaW5pc2ggYm9vdGluZyB3aXRoaW4gJHtTdHJpbmcoRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JEZXZpY2UoZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIGRldmljZSAke2RldmljZUlkfSB0byBhcHBlYXIgaW4gQURCICh0aW1lb3V0OiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcywgcG9sbDogJHtcbiAgICAgICAgU3RyaW5nKEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpXG4gICAgICB9bXMpLi4uYFxuICAgICk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRGV2aWNlQ29ubmVjdGVkKGRldmljZUlkKSkge1xuICAgICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGFwcGVhcmVkIGluIEFEQiwgd2FpdGluZyBmb3IgYm9vdCB0byBjb21wbGV0ZS4uLmApO1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JCb290KGRldmljZUlkLCBkZWFkbGluZSk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FrZVNjcmVlbihkZXZpY2VJZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFbXVsYXRvciBkZXZpY2UgXCIke2RldmljZUlkfVwiIGRpZCBub3QgYXBwZWFyIHdpdGhpbiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FrZVNjcmVlbihkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coYFdha2luZyBzY3JlZW4gb24gZGV2aWNlICR7ZGV2aWNlSWR9Li4uYCk7XG5cbiAgICBhd2FpdCB0aGlzLnNlbmRLZXlFdmVudChkZXZpY2VJZCwgS0VZQ09ERV9XQUtFVVAsICd3YWtlIHNjcmVlbicpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEtleUV2ZW50KGRldmljZUlkLCBLRVlDT0RFX01FTlUsICdkaXNtaXNzIGxvY2sgc2NyZWVuJyk7XG5cbiAgICB0aGlzLmxvZyhgU2NyZWVuIHdha2UgY29tcGxldGUgb24gZGV2aWNlICR7ZGV2aWNlSWR9LmApO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRyYW5zcG9ydCBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBDTEkgdHJhbnNwb3J0LlxuICogQHJldHVybnMgQSBuZXcgdHJhbnNwb3J0IGluc3RhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdHlwZSA9IG9wdGlvbnM/LnR5cGUgPz8gREVGQVVMVF9UUkFOU1BPUlRfVFlQRTtcblxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy50eXBlID09PSAnb2JzaWRpYW4tY2xpJykge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dHlwZX1dIENyZWF0aW5nIERlc2t0b3BDbGlUcmFuc3BvcnRgKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDbGlUcmFuc3BvcnQoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jZHAnKSB7XG4gICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHt0eXBlfV0gQ3JlYXRpbmcgRGVza3RvcENkcFRyYW5zcG9ydCAoaG9zdD0ke29wdGlvbnMuaG9zdCA/PyAnbG9jYWxob3N0J30sIHBvcnQ9JHtTdHJpbmcob3B0aW9ucy5wb3J0ID8/IENEUF9ERUZBVUxUX1BPUlQpfSlgKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDZHBUcmFuc3BvcnQoe1xuICAgICAgLi4uKG9wdGlvbnMuaG9zdCAhPT0gdW5kZWZpbmVkICYmIHsgY2RwSG9zdDogb3B0aW9ucy5ob3N0IH0pLFxuICAgICAgLi4uKG9wdGlvbnMucG9ydCAhPT0gdW5kZWZpbmVkICYmIHsgY2RwUG9ydDogb3B0aW9ucy5wb3J0IH0pLFxuICAgICAgLi4uKG9wdGlvbnMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBmYWN0b3J5ID0gbmV3IEFwcGl1bVRyYW5zcG9ydEZhY3RvcnkodHlwZSk7XG4gIHJldHVybiBmYWN0b3J5LmNyZWF0ZShvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FjaGVkIHRyYW5zcG9ydCBpbnN0YW5jZSwgY3JlYXRpbmcgb25lIGZyb20gdGhlIGdpdmVuIG9wdGlvbnNcbiAqIGlmIG5vdCBhbHJlYWR5IGNhY2hlZC5cbiAqXG4gKiBUaGUgdHJhbnNwb3J0IGlzIGNhY2hlZCBwZXIgd29ya2VyIHByb2Nlc3Mgc28gV2ViU29ja2V0L0FwcGl1bSBzZXNzaW9uc1xuICogYXJlIHJldXNlZCBhY3Jvc3MgY2FsbHMgd2l0aGluIHRoZSBzYW1lIHRlc3Qgd29ya2VyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBUaGUgY2FjaGVkIG9yIG5ld2x5IGNyZWF0ZWQgdHJhbnNwb3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVUcmFuc3BvcnQob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgaWYgKGNhY2hlZFRyYW5zcG9ydCkge1xuICAgIHJldHVybiBjYWNoZWRUcmFuc3BvcnQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gU2luZ2xlLXRocmVhZGVkIHdvcmtlcjsgbm8gY29uY3VycmVudCB3cml0ZXMuXG4gIGNhY2hlZFRyYW5zcG9ydCA9IHJlc3VsdDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBLaWxscyBhIGNoaWxkIHByb2Nlc3MgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLlxuICpcbiAqIE9uIFdpbmRvd3MsIGBjaGlsZC5raWxsKClgIG9ubHkgc2VuZHMgU0lHVEVSTSB0byB0aGUgZGlyZWN0IHByb2Nlc3MsXG4gKiBsZWF2aW5nIHNwYXduZWQgZ3JhbmRjaGlsZHJlbiAoZS5nLiBRRU1VLCBVaUF1dG9tYXRvcikgYWxpdmUuXG4gKiBgdGFza2tpbGwgL0YgL1QgL1BJRGAgZm9yY2VmdWxseSB0ZXJtaW5hdGVzIHRoZSBlbnRpcmUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY2hpbGQgLSBUaGUgY2hpbGQgcHJvY2VzcyB0byBraWxsLlxuICovXG5mdW5jdGlvbiBraWxsUHJvY2Vzc1RyZWUoY2hpbGQ6IENoaWxkUHJvY2Vzcyk6IHZvaWQge1xuICBpZiAoY2hpbGQucGlkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHRyeSB7XG4gICAgICBleGVjRmlsZVN5bmMoJ3Rhc2traWxsJywgWycvRicsICcvVCcsICcvUElEJywgU3RyaW5nKGNoaWxkLnBpZCldLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKFxuICAgICAgICBgW3RyYW5zcG9ydC1mYWN0b3J5XSB0YXNra2lsbCBmb3IgUElEICR7U3RyaW5nKGNoaWxkLnBpZCl9IGZhaWxlZCAobWF5IGhhdmUgYWxyZWFkeSBleGl0ZWQpOiAke1xuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InXG4gICAgICAgIH1gXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjaGlsZC5raWxsKCdTSUdLSUxMJyk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxnQ0FJTztBQUNQLHVCQUFpQjtBQUNqQix1QkFBcUI7QUFDckIsMEJBQW9CO0FBQ3BCLHlCQUF1QjtBQVF2QixpQkFBb0I7QUFDcEIsOEJBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxtQ0FBb0M7QUFFcEMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZSxHQUFHLFdBQVc7QUFDbkMsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxrREFBa0Q7QUFDeEQsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSw2Q0FBNkM7QUFDbkQsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSw4Q0FBOEM7QUFDcEQsTUFBTSx3Q0FBd0M7QUFDOUMsTUFBTSxlQUFlO0FBQ3JCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0sd0NBQXdDO0FBc0I5QyxJQUFJO0FBU0osTUFBTSx1QkFBdUI7QUFBQSxFQUNWO0FBQUEsRUFFVixZQUFZLE1BQWM7QUFDL0IsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxPQUFPLFNBQTRFO0FBQzlGLFNBQUssSUFBSSxpQ0FBaUMsUUFBUSxTQUFTLFlBQVksUUFBUSxRQUFRLEdBQUc7QUFFMUYsVUFBTSxNQUFNLElBQUksSUFBSSxRQUFRLFNBQVM7QUFFckMsVUFBTSxPQUFPLE9BQU8sSUFBSSxJQUFJO0FBQzVCLFFBQUksTUFBTSxJQUFJLEdBQUc7QUFDZixZQUFNLElBQUksTUFBTSw4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SyxhQUFhLFVBQVUsZ0JBQWdCLGFBQWE7QUFDL0QsVUFBTSxLQUFLLGFBQWEsVUFBVSxjQUFjLHFCQUFxQjtBQUVyRSxTQUFLLElBQUksa0NBQWtDLFFBQVEsR0FBRztBQUFBLEVBQ3hEO0FBQ0Y7QUFRQSxlQUFzQiwyQkFBMkIsU0FBZ0U7QUFDL0csUUFBTSxPQUFPLFNBQVMsUUFBUTtBQUU5QixNQUFJLENBQUMsV0FBVyxRQUFRLFNBQVMsZ0JBQWdCO0FBQy9DLHdCQUFJLHNCQUFzQixJQUFJLGdDQUFnQztBQUM5RCxXQUFPLElBQUksaURBQW9CO0FBQUEsRUFDakM7QUFFQSxNQUFJLFFBQVEsU0FBUyxnQkFBZ0I7QUFDbkMsd0JBQUksc0JBQXNCLElBQUksd0NBQXdDLFFBQVEsUUFBUSxXQUFXLFVBQVUsT0FBTyxRQUFRLFFBQVEsZ0JBQWdCLENBQUMsR0FBRztBQUN0SixXQUFPLElBQUksaURBQW9CO0FBQUEsTUFDN0IsR0FBSSxRQUFRLFNBQVMsVUFBYSxFQUFFLFNBQVMsUUFBUSxLQUFLO0FBQUEsTUFDMUQsR0FBSSxRQUFRLFNBQVMsVUFBYSxFQUFFLFNBQVMsUUFBUSxLQUFLO0FBQUEsTUFDMUQsR0FBSSxRQUFRLGlDQUFpQyxVQUFhLEVBQUUsOEJBQThCLFFBQVEsNkJBQTZCO0FBQUEsSUFDakksQ0FBQztBQUFBLEVBQ0g7QUFFQSxRQUFNLFVBQVUsSUFBSSx1QkFBdUIsSUFBSTtBQUMvQyxTQUFPLFFBQVEsT0FBTyxPQUFPO0FBQy9CO0FBWUEsZUFBc0IscUJBQXFCLFNBQWdFO0FBQ3pHLE1BQUksaUJBQWlCO0FBQ25CLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxTQUFTLE1BQU0sMkJBQTJCLE9BQU87QUFFdkQsb0JBQWtCO0FBQ2xCLFNBQU87QUFDVDtBQVdBLFNBQVMsZ0JBQWdCLE9BQTJCO0FBQ2xELE1BQUksTUFBTSxRQUFRLFFBQVc7QUFDM0I7QUFBQSxFQUNGO0FBRUEsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFNBQVM7QUFDaEMsUUFBSTtBQUNGLGtEQUFhLFlBQVksQ0FBQyxNQUFNLE1BQU0sUUFBUSxPQUFPLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUFBLElBQ3ZGLFNBQVMsT0FBZ0I7QUFDdkI7QUFBQSxRQUNFLHdDQUF3QyxPQUFPLE1BQU0sR0FBRyxDQUFDLHNDQUN2RCxpQkFBaUIsUUFBUSxNQUFNLFVBQVUsZUFDM0M7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0YsT0FBTztBQUNMLFVBQU0sS0FBSyxTQUFTO0FBQUEsRUFDdEI7QUFDRjsiLAogICJuYW1lcyI6IFsia2lsbEF1dG9TdGFydGVkUHJvY2Vzc2VzIiwgImh0dHAiLCAicHJvY2VzcyJdCn0K
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZXhlY0ZpbGUsXG4gIGV4ZWNGaWxlU3luYyxcbiAgc3Bhd25cbn0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ25vZGU6aHR0cCc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBidWlsZEVtdWxhdG9yQXJncyB9IGZyb20gJy4vZW11bGF0b3ItYXJncy5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2xpVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jbGkuY2pzJztcblxuY29uc3QgQVBQX1BBQ0tBR0UgPSAnbWQub2JzaWRpYW4nO1xuY29uc3QgQVBQX0FDVElWSVRZID0gYCR7QVBQX1BBQ0tBR0V9Lk1haW5BY3Rpdml0eWA7XG5jb25zdCBBREJfREVWSUNFX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5UID0gMTtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuY29uc3QgQ0RQX0RFRkFVTFRfUE9SVCA9IDgzMTU7XG5jb25zdCBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwO1xuY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfVFlQRSA9ICdvYnNpZGlhbi1jbGknO1xuY29uc3QgRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTIwMDAwO1xuY29uc3QgS0VZQ09ERV9NRU5VID0gODI7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDtcbmNvbnN0IFNFUlZFUl9MQVVOQ0hfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQXBwaXVtVHJhbnNwb3J0RmFjdG9yeS5zdGFydEFwcGl1bUFuZEVtdWxhdG9yfS5cbiAqL1xuaW50ZXJmYWNlIFN0YXJ0QXBwaXVtQW5kRW11bGF0b3JQYXJhbXMge1xuICAvKiogVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMLiAqL1xuICBhcHBpdW1Vcmw6IFVSTDtcblxuICAvKiogQVZEIG5hbWUgdG8gYXV0by1zdGFydCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBjb25uZWN0ZWQuICovXG4gIGF2ZE5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIERldmljZSBVRElELiAqL1xuICBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgQXBwaXVtIHNlcnZlciBwb3J0LiAqL1xuICBwb3J0OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgQXBwaXVtIGF1dG8tc3RhcnQgaXMgYWxsb3dlZC4gKi9cbiAgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxubGV0IGNhY2hlZFRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRW5jYXBzdWxhdGVzIGFsbCBBcHBpdW0gdHJhbnNwb3J0IGNyZWF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgQXBwaXVtIHNlcnZlclxuICogc3RhcnR1cCwgZW11bGF0b3IgbWFuYWdlbWVudCwgYW5kIFdlYkRyaXZlcklPIHNlc3Npb24gZXN0YWJsaXNobWVudC5cbiAqXG4gKiBVc2luZyBhIGNsYXNzIGF2b2lkcyB0aHJlYWRpbmcgdGhlIHRyYW5zcG9ydCBgdHlwZWAgbGFiZWwgdGhyb3VnaCBldmVyeVxuICogaGVscGVyIGZ1bmN0aW9uIFx1MjAxNCBgdGhpcy5sb2coKWAgYXV0b21hdGljYWxseSBwcmVmaXhlcyBpdC5cbiAqL1xuY2xhc3MgQXBwaXVtVHJhbnNwb3J0RmFjdG9yeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQXBwaXVtIHRyYW5zcG9ydCBieSBlc3RhYmxpc2hpbmcgYSBXZWJEcml2ZXJJTyBzZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuZHJvaWQgQXBwaXVtIHRyYW5zcG9ydCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBIGNvbmZpZ3VyZWQgQXBwaXVtIHRyYW5zcG9ydC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGUob3B0aW9uczogT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgICB0aGlzLmxvZyhgQ3JlYXRpbmcgQXBwaXVtVHJhbnNwb3J0ICh1cmw9JHtvcHRpb25zLmFwcGl1bVVybH0sIGRldmljZT0ke29wdGlvbnMuZGV2aWNlSWR9KWApO1xuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRpb25zLmFwcGl1bVVybCk7XG5cbiAgICBjb25zdCBwb3J0ID0gTnVtYmVyKHVybC5wb3J0KTtcbiAgICBpZiAoaXNOYU4ocG9ydCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3J0IGluIGFwcGl1bVVybDogJHt1cmwucG9ydH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWQgPz8gQVBQX1BBQ0tBR0U7XG5cbiAgICBsZXQgYXBwaXVtUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuICAgIGxldCBlbXVsYXRvclByb2Nlc3M6IENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBbYXBwaXVtUHJvY2VzcywgZW11bGF0b3JQcm9jZXNzXSA9IGF3YWl0IHRoaXMuc3RhcnRBcHBpdW1BbmRFbXVsYXRvcih7XG4gICAgICAgIGFwcGl1bVVybDogdXJsLFxuICAgICAgICBhdmROYW1lOiBvcHRpb25zLmF2ZE5hbWUsXG4gICAgICAgIGRldmljZUlkOiBvcHRpb25zLmRldmljZUlkLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzaG91bGRBdXRvU3RhcnRBcHBpdW06IG9wdGlvbnMuc2hvdWxkQXV0b1N0YXJ0QXBwaXVtXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sb2coXG4gICAgICAgIGBDb25uZWN0aW5nIHRvIEFwcGl1bSAoZGV2aWNlPSR7b3B0aW9ucy5kZXZpY2VJZH0sIGFwcD0ke2FwcElkfSwgcmV0cnlUaW1lb3V0OiAke1N0cmluZyhBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMsIHJldHJpZXM6ICR7XG4gICAgICAgICAgU3RyaW5nKEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5UKVxuICAgICAgICB9KS4uLmBcbiAgICAgICk7XG4gICAgICBjb25zdCBicm93c2VyID0gYXdhaXQgcmVtb3RlKHtcbiAgICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgICAgJ2FwcGl1bTphcHBBY3Rpdml0eSc6IEFQUF9BQ1RJVklUWSxcbiAgICAgICAgICAnYXBwaXVtOmFwcFBhY2thZ2UnOiBhcHBJZCxcbiAgICAgICAgICAnYXBwaXVtOmF1dG9HcmFudFBlcm1pc3Npb25zJzogdHJ1ZSxcbiAgICAgICAgICAnYXBwaXVtOmF1dG9tYXRpb25OYW1lJzogJ1VpQXV0b21hdG9yMicsXG4gICAgICAgICAgJ2FwcGl1bTpuZXdDb21tYW5kVGltZW91dCc6IENPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgJ2FwcGl1bTpub1Jlc2V0JzogdHJ1ZSxcbiAgICAgICAgICAnYXBwaXVtOnNldHRpbmdzJzoge1xuICAgICAgICAgICAgJ2FwcGl1bTpjaHJvbWVkcml2ZXJBdXRvZG93bmxvYWQnOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnYXBwaXVtOnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24nOiB0cnVlLFxuICAgICAgICAgICdhcHBpdW06dWRpZCc6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgICAgJ2FwcGl1bTp1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JzogU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICAncGxhdGZvcm1OYW1lJzogJ0FuZHJvaWQnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVCxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICAgICAgcG9ydFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKCdBcHBpdW0gc2Vzc2lvbiBlc3RhYmxpc2hlZC4nKTtcbiAgICAgIGNvbnN0IGFwcGl1bVRyYW5zcG9ydCA9IG5ldyBBcHBpdW1UcmFuc3BvcnQoe1xuICAgICAgICBhcHBJZCxcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgZGV2aWNlSWQ6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gICAgICAgIC4uLihvcHRpb25zLnZhdWx0QmFzZVBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0QmFzZVBhdGg6IG9wdGlvbnMudmF1bHRCYXNlUGF0aCB9KVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsRGlzcG9zZSA9IGFwcGl1bVRyYW5zcG9ydC5kaXNwb3NlLmJpbmQoYXBwaXVtVHJhbnNwb3J0KTtcbiAgICAgIGNvbnN0IHRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQgPSBhcHBpdW1UcmFuc3BvcnQ7XG4gICAgICB0cmFuc3BvcnQuZGlzcG9zZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBvcmlnaW5hbERpc3Bvc2UoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBraWxsQXV0b1N0YXJ0ZWRQcm9jZXNzZXMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdHJhbnNwb3J0LmRpc3Bvc2VTeW5jID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBraWxsQXV0b1N0YXJ0ZWRQcm9jZXNzZXMoKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0cmFuc3BvcnQ7XG5cbiAgICAgIGZ1bmN0aW9uIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKGFwcGl1bVByb2Nlc3MpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWUoYXBwaXVtUHJvY2Vzcyk7XG4gICAgICAgICAgLy8gQ2Fubm90IHVzZSB0aGlzLmxvZyBpbnNpZGUgbmVzdGVkIGZ1bmN0aW9uIFx1MjAxNCBgdGhpc2AgaXMgbm90IGNhcHR1cmVkLlxuICAgICAgICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7b3B0aW9ucy50eXBlfV0gQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgc3RvcHBlZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW11bGF0b3JQcm9jZXNzKSB7XG4gICAgICAgICAga2lsbFByb2Nlc3NUcmVlKGVtdWxhdG9yUHJvY2Vzcyk7XG4gICAgICAgICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHtvcHRpb25zLnR5cGV9XSBBdXRvLXN0YXJ0ZWQgZW11bGF0b3Igc3RvcHBlZC5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgICAgICBraWxsUHJvY2Vzc1RyZWUoYXBwaXVtUHJvY2Vzcyk7XG4gICAgICAgIHRoaXMubG9nKCdLaWxsZWQgYXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgYWZ0ZXIgY29ubmVjdGlvbiBmYWlsdXJlLicpO1xuICAgICAgfVxuICAgICAgaWYgKGVtdWxhdG9yUHJvY2Vzcykge1xuICAgICAgICBraWxsUHJvY2Vzc1RyZWUoZW11bGF0b3JQcm9jZXNzKTtcbiAgICAgICAgdGhpcy5sb2coJ0tpbGxlZCBhdXRvLXN0YXJ0ZWQgZW11bGF0b3IgYWZ0ZXIgY29ubmVjdGlvbiBmYWlsdXJlLicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FwcGl1bVJlYWNoYWJsZSh1cmw6IFVSTCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXNVcmwgPSBuZXcgVVJMKCcvc3RhdHVzJywgdXJsKTtcbiAgICAgIGNvbnN0IHJlcSA9IGh0dHAuZ2V0KHN0YXR1c1VybCwgeyB0aW1lb3V0OiBBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0sIChyZXMpID0+IHtcbiAgICAgICAgcmVzLnJlc3VtZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcbiAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBcHBpdW0gc2VydmVyIGF0ICR7dXJsLm9yaWdpbn0gZGlkIG5vdCByZXNwb25kIHdpdGhpbiAke1N0cmluZyhBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy4gSXMgdGhlIEFwcGl1bSBzZXJ2ZXIgcnVubmluZz9gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXEub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCByZWFjaCBBcHBpdW0gc2VydmVyIGF0ICR7dXJsLm9yaWdpbn06ICR7ZXJyLm1lc3NhZ2V9LiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZXhlY0ZpbGUoJ2FkYicsIFsnZGV2aWNlcyddLCB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gcnVuICdhZGIgZGV2aWNlcyc6ICR7ZXJyb3IubWVzc2FnZX0uIElzIEFEQiBpbnN0YWxsZWQgYW5kIGluIFBBVEg/YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2coYEFEQiBzdGRlcnI6ICR7c3RkZXJyLnRyaW0oKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpbmVzID0gb3V0cHV0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUubGVuZ3RoID4gMCk7XG4gICAgY29uc3QgZGV2aWNlTGluZSA9IGxpbmVzLmZpbmQoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aChkZXZpY2VJZCkpO1xuICAgIHJldHVybiBkZXZpY2VMaW5lPy5pbmNsdWRlcygnXFx0ZGV2aWNlJykgPz8gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZURldmljZUNvbm5lY3RlZChhdmROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGRldmljZUlkOiBzdHJpbmcpOiBQcm9taXNlPENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMubG9nKGBDaGVja2luZyBkZXZpY2UgJHtkZXZpY2VJZH0gaXMgY29ubmVjdGVkIHZpYSBBREIuLi5gKTtcblxuICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRGV2aWNlQ29ubmVjdGVkKGRldmljZUlkKSkge1xuICAgICAgdGhpcy5sb2coYERldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghYXZkTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGV2aWNlIFwiJHtkZXZpY2VJZH1cIiBpcyBub3QgY29ubmVjdGVkLiBTdGFydCB0aGUgZW11bGF0b3IgYmVmb3JlIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMsYFxuICAgICAgICAgICsgJyBvciBzZXQgYXZkTmFtZSBpbiB0cmFuc3BvcnQgb3B0aW9ucyB0byBhdXRvLXN0YXJ0IGl0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2coYERldmljZSAke2RldmljZUlkfSBub3QgZm91bmQsIHN0YXJ0aW5nIGVtdWxhdG9yIEFWRCBcIiR7YXZkTmFtZX1cIi4uLmApO1xuICAgIGNvbnN0IGVtdWxhdG9yUHJvY2VzcyA9IHRoaXMuc3RhcnRFbXVsYXRvcihhdmROYW1lKTtcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2UoZGV2aWNlSWQpO1xuICAgIHRoaXMubG9nKGBFbXVsYXRvciBcIiR7YXZkTmFtZX1cIiBzdGFydGVkLCBkZXZpY2UgJHtkZXZpY2VJZH0gaXMgY29ubmVjdGVkLmApO1xuICAgIHJldHVybiBlbXVsYXRvclByb2Nlc3M7XG4gIH1cblxuICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke3RoaXMudHlwZX1dICR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUVtdWxhdG9yQmluYXJ5KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2RrUm9vdCA9IHByb2Nlc3MuZW52WydBTkRST0lEX0hPTUUnXSA/PyBwcm9jZXNzLmVudlsnQU5EUk9JRF9TREtfUk9PVCddO1xuICAgIGlmICghc2RrUm9vdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGZpbmQgQW5kcm9pZCBlbXVsYXRvcjogbmVpdGhlciBBTkRST0lEX0hPTUUgbm9yIEFORFJPSURfU0RLX1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBqb2luKHNka1Jvb3QsICdlbXVsYXRvcicsICdlbXVsYXRvcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kS2V5RXZlbnQoZGV2aWNlSWQ6IHN0cmluZywga2V5Q29kZTogbnVtYmVyLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGV4ZWNGaWxlKFxuICAgICAgICAnYWRiJyxcbiAgICAgICAgWyctcycsIGRldmljZUlkLCAnc2hlbGwnLCAnaW5wdXQnLCAna2V5ZXZlbnQnLCBTdHJpbmcoa2V5Q29kZSldLFxuICAgICAgICB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICAgICAgYFdhcm5pbmc6IGZhaWxlZCB0byAke2Rlc2NyaXB0aW9ufSAoa2V5ZXZlbnQgJHtTdHJpbmcoa2V5Q29kZSl9KTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICd1bmtub3duIGVycm9yJ31gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRBcHBpdW1BbmRFbXVsYXRvcihwYXJhbXM6IFN0YXJ0QXBwaXVtQW5kRW11bGF0b3JQYXJhbXMpOiBQcm9taXNlPFtDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQsIENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZF0+IHtcbiAgICBjb25zdCB7IGFwcGl1bVVybCwgYXZkTmFtZSwgZGV2aWNlSWQsIHBvcnQsIHNob3VsZEF1dG9TdGFydEFwcGl1bSB9ID0gcGFyYW1zO1xuXG4gICAgbGV0IG5lZWRzQXBwaXVtU3RhcnQgPSBmYWxzZTtcblxuICAgIHRoaXMubG9nKGBDaGVja2luZyBBcHBpdW0gc2VydmVyIGF0ICR7YXBwaXVtVXJsLmhyZWZ9Li4uYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBpdW1SZWFjaGFibGUoYXBwaXVtVXJsKTtcbiAgICAgIHRoaXMubG9nKCdBcHBpdW0gc2VydmVyIGlzIHJlYWNoYWJsZS4nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgaWYgKHNob3VsZEF1dG9TdGFydEFwcGl1bSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBuZWVkc0FwcGl1bVN0YXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgYXBwaXVtUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5lZWRzQXBwaXVtU3RhcnQpIHtcbiAgICAgIHRoaXMubG9nKGBBcHBpdW0gbm90IHJlYWNoYWJsZSwgYXV0by1zdGFydGluZyBvbiBwb3J0ICR7U3RyaW5nKHBvcnQpfS4uLmApO1xuICAgICAgYXBwaXVtUHJvY2VzcyA9IHRoaXMuc3RhcnRBcHBpdW1TZXJ2ZXIocG9ydCk7XG4gICAgfVxuXG4gICAgY29uc3QgWywgZW11bGF0b3JQcm9jZXNzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIG5lZWRzQXBwaXVtU3RhcnRcbiAgICAgICAgPyB0aGlzLndhaXRGb3JBcHBpdW1SZWFkeShhcHBpdW1VcmwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nKCdBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBpcyByZWFkeS4nKTtcbiAgICAgICAgfSlcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICAgIHRoaXMuZW5zdXJlRGV2aWNlQ29ubmVjdGVkKGF2ZE5hbWUsIGRldmljZUlkKVxuICAgIF0pO1xuXG4gICAgcmV0dXJuIFthcHBpdW1Qcm9jZXNzLCBlbXVsYXRvclByb2Nlc3NdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEFwcGl1bVNlcnZlcihwb3J0OiBudW1iZXIpOiBDaGlsZFByb2Nlc3Mge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oYG5weCBhcHBpdW0gLS1sb2ctdGltZXN0YW1wIC0tcG9ydCAke1N0cmluZyhwb3J0KX1gLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ2luaGVyaXQnLCAnaW5oZXJpdCddXG4gICAgfSk7XG5cbiAgICBjaGlsZC51bnJlZigpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFbXVsYXRvcihhdmROYW1lOiBzdHJpbmcpOiBDaGlsZFByb2Nlc3Mge1xuICAgIGNvbnN0IGVtdWxhdG9yQmluYXJ5ID0gdGhpcy5yZXNvbHZlRW11bGF0b3JCaW5hcnkoKTtcbiAgICBjb25zdCBhcmdzID0gYnVpbGRFbXVsYXRvckFyZ3MoYXZkTmFtZSk7XG4gICAgdGhpcy5sb2coYFJ1bm5pbmc6ICR7ZW11bGF0b3JCaW5hcnl9ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihlbXVsYXRvckJpbmFyeSwgYXJncywge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddXG4gICAgfSk7XG5cbiAgICBjaGlsZC51bnJlZigpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckFwcGl1bVJlYWR5KHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgQXBwaXVtIGF0ICR7dXJsLmhyZWZ9ICh0aW1lb3V0OiAke1N0cmluZyhBUFBJVU1fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKVxuICAgICAgfW1zKS4uLmBcbiAgICApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBpdW1SZWFjaGFibGUodXJsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckJvb3QoZGV2aWNlSWQ6IHN0cmluZywgZGVhZGxpbmU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlbWFpbmluZ01zID0gTWF0aC5tYXgoMCwgZGVhZGxpbmUgLSBEYXRlLm5vdygpKTtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciBkZXZpY2UgJHtkZXZpY2VJZH0gdG8gZmluaXNoIGJvb3RpbmcgKHJlbWFpbmluZzogJHtTdHJpbmcocmVtYWluaW5nTXMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUylcbiAgICAgIH1tcykuLi5gXG4gICAgKTtcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGNvbnN0IGlzQm9vdGVkID0gYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICAgJ2FkYicsXG4gICAgICAgICAgWyctcycsIGRldmljZUlkLCAnc2hlbGwnLCAnZ2V0cHJvcCcsICdzeXMuYm9vdF9jb21wbGV0ZWQnXSxcbiAgICAgICAgICB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSxcbiAgICAgICAgICAoX2Vycm9yLCBzdGRvdXQpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0LnRyaW0oKSA9PT0gJzEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGlzQm9vdGVkKSB7XG4gICAgICAgIHRoaXMubG9nKGBEZXZpY2UgJHtkZXZpY2VJZH0gYm9vdCBjb21wbGV0ZWQuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGNvbm5lY3RlZCBidXQgZGlkIG5vdCBmaW5pc2ggYm9vdGluZyB3aXRoaW4gJHtTdHJpbmcoRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JEZXZpY2UoZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIGRldmljZSAke2RldmljZUlkfSB0byBhcHBlYXIgaW4gQURCICh0aW1lb3V0OiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcywgcG9sbDogJHtcbiAgICAgICAgU3RyaW5nKEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpXG4gICAgICB9bXMpLi4uYFxuICAgICk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRGV2aWNlQ29ubmVjdGVkKGRldmljZUlkKSkge1xuICAgICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGFwcGVhcmVkIGluIEFEQiwgd2FpdGluZyBmb3IgYm9vdCB0byBjb21wbGV0ZS4uLmApO1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JCb290KGRldmljZUlkLCBkZWFkbGluZSk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FrZVNjcmVlbihkZXZpY2VJZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFbXVsYXRvciBkZXZpY2UgXCIke2RldmljZUlkfVwiIGRpZCBub3QgYXBwZWFyIHdpdGhpbiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FrZVNjcmVlbihkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coYFdha2luZyBzY3JlZW4gb24gZGV2aWNlICR7ZGV2aWNlSWR9Li4uYCk7XG5cbiAgICBhd2FpdCB0aGlzLnNlbmRLZXlFdmVudChkZXZpY2VJZCwgS0VZQ09ERV9XQUtFVVAsICd3YWtlIHNjcmVlbicpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEtleUV2ZW50KGRldmljZUlkLCBLRVlDT0RFX01FTlUsICdkaXNtaXNzIGxvY2sgc2NyZWVuJyk7XG5cbiAgICB0aGlzLmxvZyhgU2NyZWVuIHdha2UgY29tcGxldGUgb24gZGV2aWNlICR7ZGV2aWNlSWR9LmApO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRyYW5zcG9ydCBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBDTEkgdHJhbnNwb3J0LlxuICogQHJldHVybnMgQSBuZXcgdHJhbnNwb3J0IGluc3RhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdHlwZSA9IG9wdGlvbnM/LnR5cGUgPz8gREVGQVVMVF9UUkFOU1BPUlRfVFlQRTtcblxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy50eXBlID09PSAnb2JzaWRpYW4tY2xpJykge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dHlwZX1dIENyZWF0aW5nIERlc2t0b3BDbGlUcmFuc3BvcnRgKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDbGlUcmFuc3BvcnQoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jZHAnKSB7XG4gICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHt0eXBlfV0gQ3JlYXRpbmcgRGVza3RvcENkcFRyYW5zcG9ydCAoaG9zdD0ke29wdGlvbnMuaG9zdCA/PyAnbG9jYWxob3N0J30sIHBvcnQ9JHtTdHJpbmcob3B0aW9ucy5wb3J0ID8/IENEUF9ERUZBVUxUX1BPUlQpfSlgKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDZHBUcmFuc3BvcnQoe1xuICAgICAgLi4uKG9wdGlvbnMuaG9zdCAhPT0gdW5kZWZpbmVkICYmIHsgY2RwSG9zdDogb3B0aW9ucy5ob3N0IH0pLFxuICAgICAgLi4uKG9wdGlvbnMucG9ydCAhPT0gdW5kZWZpbmVkICYmIHsgY2RwUG9ydDogb3B0aW9ucy5wb3J0IH0pLFxuICAgICAgLi4uKG9wdGlvbnMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBmYWN0b3J5ID0gbmV3IEFwcGl1bVRyYW5zcG9ydEZhY3RvcnkodHlwZSk7XG4gIHJldHVybiBmYWN0b3J5LmNyZWF0ZShvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FjaGVkIHRyYW5zcG9ydCBpbnN0YW5jZSwgY3JlYXRpbmcgb25lIGZyb20gdGhlIGdpdmVuIG9wdGlvbnNcbiAqIGlmIG5vdCBhbHJlYWR5IGNhY2hlZC5cbiAqXG4gKiBUaGUgdHJhbnNwb3J0IGlzIGNhY2hlZCBwZXIgd29ya2VyIHByb2Nlc3Mgc28gV2ViU29ja2V0L0FwcGl1bSBzZXNzaW9uc1xuICogYXJlIHJldXNlZCBhY3Jvc3MgY2FsbHMgd2l0aGluIHRoZSBzYW1lIHRlc3Qgd29ya2VyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBUaGUgY2FjaGVkIG9yIG5ld2x5IGNyZWF0ZWQgdHJhbnNwb3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVUcmFuc3BvcnQob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgaWYgKGNhY2hlZFRyYW5zcG9ydCkge1xuICAgIHJldHVybiBjYWNoZWRUcmFuc3BvcnQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gU2luZ2xlLXRocmVhZGVkIHdvcmtlcjsgbm8gY29uY3VycmVudCB3cml0ZXMuXG4gIGNhY2hlZFRyYW5zcG9ydCA9IHJlc3VsdDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBLaWxscyBhIGNoaWxkIHByb2Nlc3MgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLlxuICpcbiAqIE9uIFdpbmRvd3MsIGBjaGlsZC5raWxsKClgIG9ubHkgc2VuZHMgU0lHVEVSTSB0byB0aGUgZGlyZWN0IHByb2Nlc3MsXG4gKiBsZWF2aW5nIHNwYXduZWQgZ3JhbmRjaGlsZHJlbiAoZS5nLiBRRU1VLCBVaUF1dG9tYXRvcikgYWxpdmUuXG4gKiBgdGFza2tpbGwgL0YgL1QgL1BJRGAgZm9yY2VmdWxseSB0ZXJtaW5hdGVzIHRoZSBlbnRpcmUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY2hpbGQgLSBUaGUgY2hpbGQgcHJvY2VzcyB0byBraWxsLlxuICovXG5mdW5jdGlvbiBraWxsUHJvY2Vzc1RyZWUoY2hpbGQ6IENoaWxkUHJvY2Vzcyk6IHZvaWQge1xuICBpZiAoY2hpbGQucGlkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHRyeSB7XG4gICAgICBleGVjRmlsZVN5bmMoJ3Rhc2traWxsJywgWycvRicsICcvVCcsICcvUElEJywgU3RyaW5nKGNoaWxkLnBpZCldLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKFxuICAgICAgICBgW3RyYW5zcG9ydC1mYWN0b3J5XSB0YXNra2lsbCBmb3IgUElEICR7U3RyaW5nKGNoaWxkLnBpZCl9IGZhaWxlZCAobWF5IGhhdmUgYWxyZWFkeSBleGl0ZWQpOiAke1xuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InXG4gICAgICAgIH1gXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjaGlsZC5raWxsKCdTSUdLSUxMJyk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxnQ0FJTztBQUNQLHVCQUFpQjtBQUNqQix1QkFBcUI7QUFDckIsMEJBQW9CO0FBQ3BCLHlCQUF1QjtBQVF2QiwyQkFBa0M7QUFDbEMsaUJBQW9CO0FBQ3BCLDhCQUFnQztBQUNoQyxtQ0FBb0M7QUFDcEMsbUNBQW9DO0FBRXBDLE1BQU0sY0FBYztBQUNwQixNQUFNLGVBQWUsR0FBRyxXQUFXO0FBQ25DLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sa0RBQWtEO0FBQ3hELE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0sNkNBQTZDO0FBQ25ELE1BQU0sdUNBQXVDO0FBQzdDLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sa0NBQWtDO0FBQ3hDLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sOENBQThDO0FBQ3BELE1BQU0sd0NBQXdDO0FBQzlDLE1BQU0sZUFBZTtBQUNyQixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLHdDQUF3QztBQXNCOUMsSUFBSTtBQVNKLE1BQU0sdUJBQXVCO0FBQUEsRUFDVjtBQUFBLEVBRVYsWUFBWSxNQUFjO0FBQy9CLFNBQUssT0FBTztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWEsT0FBTyxTQUE0RTtBQUM5RixTQUFLLElBQUksaUNBQWlDLFFBQVEsU0FBUyxZQUFZLFFBQVEsUUFBUSxHQUFHO0FBRTFGLFVBQU0sTUFBTSxJQUFJLElBQUksUUFBUSxTQUFTO0FBRXJDLFVBQU0s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dEc7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFjLFdBQVcsVUFBaUM7QUFDeEQsU0FBSyxJQUFJLDJCQUEyQixRQUFRLEtBQUs7QUFFakQsVUFBTSxLQUFLLGFBQWEsVUFBVSxnQkFBZ0IsYUFBYTtBQUMvRCxVQUFNLEtBQUssYUFBYSxVQUFVLGNBQWMscUJBQXFCO0FBRXJFLFNBQUssSUFBSSxrQ0FBa0MsUUFBUSxHQUFHO0FBQUEsRUFDeEQ7QUFDRjtBQVFBLGVBQXNCLDJCQUEyQixTQUFnRTtBQUMvRyxRQUFNLE9BQU8sU0FBUyxRQUFRO0FBRTlCLE1BQUksQ0FBQyxXQUFXLFFBQVEsU0FBUyxnQkFBZ0I7QUFDL0Msd0JBQUksc0JBQXNCLElBQUksZ0NBQWdDO0FBQzlELFdBQU8sSUFBSSxpREFBb0I7QUFBQSxFQUNqQztBQUVBLE1BQUksUUFBUSxTQUFTLGdCQUFnQjtBQUNuQyx3QkFBSSxzQkFBc0IsSUFBSSx3Q0FBd0MsUUFBUSxRQUFRLFdBQVcsVUFBVSxPQUFPLFFBQVEsUUFBUSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3RKLFdBQU8sSUFBSSxpREFBb0I7QUFBQSxNQUM3QixHQUFJLFFBQVEsU0FBUyxVQUFhLEVBQUUsU0FBUyxRQUFRLEtBQUs7QUFBQSxNQUMxRCxHQUFJLFFBQVEsU0FBUyxVQUFhLEVBQUUsU0FBUyxRQUFRLEtBQUs7QUFBQSxNQUMxRCxHQUFJLFFBQVEsaUNBQWlDLFVBQWEsRUFBRSw4QkFBOEIsUUFBUSw2QkFBNkI7QUFBQSxJQUNqSSxDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0sVUFBVSxJQUFJLHVCQUF1QixJQUFJO0FBQy9DLFNBQU8sUUFBUSxPQUFPLE9BQU87QUFDL0I7QUFZQSxlQUFzQixxQkFBcUIsU0FBZ0U7QUFDekcsTUFBSSxpQkFBaUI7QUFDbkIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsTUFBTSwyQkFBMkIsT0FBTztBQUV2RCxvQkFBa0I7QUFDbEIsU0FBTztBQUNUO0FBV0EsU0FBUyxnQkFBZ0IsT0FBMkI7QUFDbEQsTUFBSSxNQUFNLFFBQVEsUUFBVztBQUMzQjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNoQyxRQUFJO0FBQ0Ysa0RBQWEsWUFBWSxDQUFDLE1BQU0sTUFBTSxRQUFRLE9BQU8sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQUEsSUFDdkYsU0FBUyxPQUFnQjtBQUN2QjtBQUFBLFFBQ0Usd0NBQXdDLE9BQU8sTUFBTSxHQUFHLENBQUMsc0NBQ3ZELGlCQUFpQixRQUFRLE1BQU0sVUFBVSxlQUMzQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixPQUFPO0FBQ0wsVUFBTSxLQUFLLFNBQVM7QUFBQSxFQUN0QjtBQUNGOyIsCiAgIm5hbWVzIjogWyJraWxsQXV0b1N0YXJ0ZWRQcm9jZXNzZXMiLCAiaHR0cCIsICJwcm9jZXNzIl0KfQo=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Builds the argument list for spawning the Android emulator.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Builds the argument list for spawning the Android emulator.
|
|
8
|
+
*
|
|
9
|
+
* @param avdName - The Android Virtual Device name.
|
|
10
|
+
* @returns The argument array to pass to the emulator binary.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildEmulatorArgs(avdName: string): string[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const DNS_SERVER = "8.8.8.8";
|
|
2
|
+
function buildEmulatorArgs(avdName) {
|
|
3
|
+
return ["-avd", avdName, "-no-snapshot-save", "-dns-server", DNS_SERVER];
|
|
4
|
+
}
|
|
5
|
+
export {
|
|
6
|
+
buildEmulatorArgs
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWFyZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCdWlsZHMgdGhlIGFyZ3VtZW50IGxpc3QgZm9yIHNwYXduaW5nIHRoZSBBbmRyb2lkIGVtdWxhdG9yLlxuICovXG5cbmNvbnN0IEROU19TRVJWRVIgPSAnOC44LjguOCc7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBhcmd1bWVudCBsaXN0IGZvciBzcGF3bmluZyB0aGUgQW5kcm9pZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0gYXZkTmFtZSAtIFRoZSBBbmRyb2lkIFZpcnR1YWwgRGV2aWNlIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYXJyYXkgdG8gcGFzcyB0byB0aGUgZW11bGF0b3IgYmluYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXVsYXRvckFyZ3MoYXZkTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWyctYXZkJywgYXZkTmFtZSwgJy1uby1zbmFwc2hvdC1zYXZlJywgJy1kbnMtc2VydmVyJywgRE5TX1NFUlZFUl07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFNQSxNQUFNLGFBQWE7QUFRWixTQUFTLGtCQUFrQixTQUEyQjtBQUMzRCxTQUFPLENBQUMsUUFBUSxTQUFTLHFCQUFxQixlQUFlLFVBQVU7QUFDekU7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -59,9 +59,10 @@ async function evalInObsidian(params) {
|
|
|
59
59
|
throw new Error(`evalInObsidian: Obsidian returned non-JSON output: ${resultStr}`);
|
|
60
60
|
}
|
|
61
61
|
if (parsed !== null && typeof parsed === "object" && EVAL_ERROR_MARKER in parsed) {
|
|
62
|
-
const errorDetail = parsed[EVAL_ERROR_MARKER];
|
|
62
|
+
const errorDetail = String(parsed[EVAL_ERROR_MARKER]);
|
|
63
|
+
const sanitizedDetail = errorDetail.replace(/\(https?:\/\/localhost\/:(?<line>\d)/g, "(obsidian-webview:$<line>");
|
|
63
64
|
throw new Error(`evalInObsidian: Error inside Obsidian:
|
|
64
|
-
${
|
|
65
|
+
${sanitizedDetail}`);
|
|
65
66
|
}
|
|
66
67
|
return parsed;
|
|
67
68
|
}
|
|
@@ -106,4 +107,4 @@ function getObsidianModulePluginFn() {
|
|
|
106
107
|
export {
|
|
107
108
|
evalInObsidian
|
|
108
109
|
};
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZXNwYWNlIC0tIFdlIG5lZWQgdG8gcmVmZXJlbmNlIGBvYnNpZGlhbmAgbW9kdWxlLlxuaW1wb3J0IHR5cGUgKiBhcyBvYnNpZGlhbiBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmdzLFxuICBDb250ZXh0SWRcbn0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZ2V0VHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5tanMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLm1qcyc7XG5pbXBvcnQgeyBqc29uV2l0aEZ1bmN0aW9ucyB9IGZyb20gJy4vanNvbi13aXRoLWZ1bmN0aW9ucy5tanMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuL3NlcmlhbGl6ZS1lcnJvci5tanMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5Lm1qcyc7XG5cbmNvbnN0IEVWQUxfRVJST1JfTUFSS0VSID0gJ19fb2JzaWRpYW5FdmFsRXJyb3JfXyc7XG5cbmludGVyZmFjZSBFeHBvcnRzV2l0aERlZmF1bHQge1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG5jb25zdCBOT19PVVRQVVQgPSAnKG5vIG91dHB1dCknO1xuXG4vKipcbiAqIENvbW1vbiBhcmd1bWVudHMgYXV0b21hdGljYWxseSBwcm92aWRlZCB0byBldmVyeSB7QGxpbmsgZXZhbEluT2JzaWRpYW59IGNhbGxiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkFyZ3Mge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHtAbGluayBBcHB9IGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBgb2JzaWRpYW5gIG1vZHVsZSwgcmVzb2x2ZWQgYXQgcnVudGltZSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gICAqL1xuICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIGFyZ3M/OiBBcmdzO1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBDb250ZXh0SWR9IGxpbmtpbmcgdGhpcyBjYWxsIHRvIGEgcGVyc2lzdGVudCBzdG9yZSBvbiBgd2luZG93YFxuICAgKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2Vzcy4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgdHlwZWQgYGNvbnRleHRgIG9iamVjdFxuICAgKiB0aGF0IHN1cnZpdmVzIGFjcm9zcyBjYWxscyBzaGFyaW5nIHRoZSBzYW1lIElELlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBjb250ZXh0YCBpcyBhIGZyZXNoIGVtcHR5IG9iamVjdCBlYWNoIGNhbGwuXG4gICAqL1xuICBjb250ZXh0SWQ/OiBUQ29udGV4dElkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gdGhlIE9ic2lkaWFuIGNvbnRleHQuXG4gICAqL1xuICBmbihhcmdzOiBBcmdzICYgQ29tbW9uQXJncyAmIENvbnRleHRBcmdzPFRDb250ZXh0SWQ+KTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBTa2lwcyBwcmUtZmxpZ2h0IGNoZWNrcyAodmF1bHQgcmVnaXN0cmF0aW9uLCBDTEkgYXZhaWxhYmlsaXR5KS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHZhdWx0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQgZm9yIHRoaXMgY2FsbC4gV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSB0cmFuc3BvcnRcbiAgICogY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIgKHNldCBieSB0aGUgZnJhbWV3b3JrIGFkYXB0ZXIncyBnbG9iYWwgc2V0dXApLlxuICAgKi9cbiAgdHJhbnNwb3J0PzogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiB2YXVsdC4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcGxhaW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gYXJncyBvYmplY3QgdGhhdCBpbmNsdWRlcyBgYXBwYCwgYG9ic2lkaWFuTW9kdWxlYCxcbiAqIGBjb250ZXh0YCwgYW5kIGFueSBhZGRpdGlvbmFsIGBhcmdzYCBwYXNzZWQgYnkgdGhlIGNhbGxlci5cbiAqIEl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgaW52b2tlZCBhcyBhbiBJSUZFLlxuICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgc2VsZi1jb250YWluZWQgXHUyMDE0IGNsb3N1cmVzIG92ZXIgbG9jYWwgdmFyaWFibGVzIHdpbGwgbm90IHdvcmsuXG4gKiBQYXNzIGFueSBuZWVkZWQgdmFsdWVzIGFzIGBhcmdzYCBcdTIwMTQgdGhleSBhcmUgSlNPTi1zZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgb24gdGhlIE9ic2lkaWFuIHNpZGUuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBgSlNPTi5zdHJpbmdpZnlgJ2Qgb24gdGhlIE9ic2lkaWFuIHNpZGUgYW5kIHBhcnNlZCBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmbmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsSW5PYnNpZGlhbjxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcGFyYW1zOiBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzLCBSZXN1bHQsIFRDb250ZXh0SWQ+XG4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIGBmbmAgY2FuIGJlIHVuYm91bmQuXG4gIGNvbnN0IHsgYXJncyA9IHt9LCBjb250ZXh0SWQsIGZuLCBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzID0gZmFsc2UsIHRyYW5zcG9ydDogdHJhbnNwb3J0T3ZlcnJpZGUsIHZhdWx0UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBjd2QgPSB2YXVsdFBhdGggPz8gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBDaGVjazogVmF1bHQgcGF0aCBleGlzdHMgb24gZGlzay5cbiAgaWYgKHZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmICFleGlzdHNTeW5jKHZhdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7dmF1bHRQYXRofWApO1xuICB9XG5cbiAgY29uc3QgdHJhbnNwb3J0ID0gdHJhbnNwb3J0T3ZlcnJpZGUgPz8gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoZ2V0VHJhbnNwb3J0T3B0aW9ucygpKTtcblxuICBpZiAoIXNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MpIHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHJlZmxpZ2h0Q2hlY2soY3dkKTtcbiAgfVxuXG4gIGNvbnN0IFNMSUNFX1NUQVJUID0gMjtcbiAgY29uc3QgcmFuZG9tU3VmZml4ID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKFNMSUNFX1NUQVJUKTtcbiAgY29uc3QgY29udGV4dEV4cHIgPSBjb250ZXh0SWRcbiAgICA/IGAoKHdpbmRvdy5fX29ic2lkaWFuQ29udGV4dHNfXyA/Pz0ge30pW1wiJHtTdHJpbmcoY29udGV4dElkKX1cIl0gPz89IHt9KWBcbiAgICA6ICd7fSc7XG4gIGNvbnN0IGV4cHJlc3Npb24gPSBgXG4oYXN5bmMgKCkgPT4ge1xuICBjb25zdCBmbiR7cmFuZG9tU3VmZml4fSA9ICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGZuKX07XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlJHtyYW5kb21TdWZmaXh9ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWFwcC53b3Jrc3BhY2UuYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gICAgfVxuICAgIGlmICghYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcbiAgICB9XG4gICAgJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5Gbil9XG4gICAgJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGUpfVxuICAgIHJldHVybiBhd2FpdCBnZXRPYnNpZGlhbk1vZHVsZSgpO1xuICB9KSgpO1xuICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhzZXJpYWxpemVFcnJvcil9XG4gIGNvbnN0IGFyZ3Mke3JhbmRvbVN1ZmZpeH0gPSAke2pzb25XaXRoRnVuY3Rpb25zKGFyZ3MpfTtcbiAgY29uc3QgY29udGV4dCR7cmFuZG9tU3VmZml4fSA9ICR7Y29udGV4dEV4cHJ9O1xuICBjb25zdCBmdWxsQXJncyR7cmFuZG9tU3VmZml4fSA9IE9iamVjdC5hc3NpZ24oYXJncyR7cmFuZG9tU3VmZml4fSwgeyBhcHAsIG9ic2lkaWFuTW9kdWxlOiBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSwgY29udGV4dDogY29udGV4dCR7cmFuZG9tU3VmZml4fSB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQke3JhbmRvbVN1ZmZpeH0gPSBhd2FpdCBmbiR7cmFuZG9tU3VmZml4fShmdWxsQXJncyR7cmFuZG9tU3VmZml4fSk7XG4gICAgaWYgKHJlc3VsdCR7cmFuZG9tU3VmZml4fSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3VsdCR7cmFuZG9tU3VmZml4fSk7XG4gIH0gY2F0Y2ggKGV2YWxFcnJvciR7cmFuZG9tU3VmZml4fSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7ICR7RVZBTF9FUlJPUl9NQVJLRVJ9OiBzZXJpYWxpemVFcnJvcihldmFsRXJyb3Ike3JhbmRvbVN1ZmZpeH0pIH0pO1xuICB9XG59KSgpYDtcblxuICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0ciA9PT0gJycgfHwgcmVzdWx0U3RyID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBPYnNpZGlhbiByZXR1cm5lZCBub24tSlNPTiBvdXRwdXQ6ICR7cmVzdWx0U3RyfWApO1xuICB9XG5cbiAgaWYgKHBhcnNlZCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBFVkFMX0VSUk9SX01BUktFUiBpbiBwYXJzZWQpIHtcbiAgICBjb25zdCBlcnJvckRldGFpbCA9IChwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW0VWQUxfRVJST1JfTUFSS0VSXTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBFcnJvciBpbnNpZGUgT2JzaWRpYW46XFxuJHtTdHJpbmcoZXJyb3JEZXRhaWwpfWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZXN1bHQ7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIHZpYSB0b1N0cmluZygpIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MsIG5vdCBpbiBOb2RlLiBDb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLiAqL1xuXG4vKipcbiAqIEluamVjdGVkIGludG8gdGhlIE9ic2lkaWFuIHByb2Nlc3MgdG8gcmVzb2x2ZSB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBVc2VzIGEgY2FjaGVkIHZhbHVlIG9uIGBhcHBgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGluc3RhbGxzIGEgdGVtcG9yYXJ5XG4gKiBwbHVnaW4gdGhhdCBjYWxscyBgcmVxdWlyZSgnb2JzaWRpYW4nKWAgYW5kIGNhY2hlcyB0aGUgcmVzdWx0LlxuICpcbiAqIE11c3QgTk9UIHJlZmVyZW5jZSBhbnkgb3V0ZXIgc2NvcGUgXHUyMDE0IGl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAqIGBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuYCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHNhbWUgc2NvcGVcbiAqICh0aGUgZ2VuZXJhdGVkIElJRkUgaGFuZGxlcyB0aGlzKS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9ic2lkaWFuTW9kdWxlKCk6IFByb21pc2U8dHlwZW9mIG9ic2lkaWFuPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZGVwcmVjYXRlZCAtLSBXZSBuZWVkIGdsb2JhbCBgYXBwYCB2YXJpYWJsZS5cbiAgY29uc3QgYXBwID0gd2luZG93LmFwcDtcbiAgaW50ZXJmYWNlIE9ic2lkaWFuTW9kdWxlSG9sZGVyIHtcbiAgICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlSG9sZGVyID0gYXBwIGFzIFBhcnRpYWw8T2JzaWRpYW5Nb2R1bGVIb2xkZXI+O1xuICBpZiAob2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGUpIHtcbiAgICByZXR1cm4gb2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGU7XG4gIH1cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCB0ZW1wTW9kdWxlTmFtZSA9IGBnZXQtb2JzaWRpYW4tbW9kdWxlLSR7cmFuZG9tU3VmZml4fWA7XG4gIGNvbnN0IGRpciA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHt0ZW1wTW9kdWxlTmFtZX1gO1xuICBhcHAucGx1Z2lucy5tYW5pZmVzdHNbdGVtcE1vZHVsZU5hbWVdID0ge1xuICAgIGF1dGhvcjogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRpcixcbiAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgaXNEZXNrdG9wT25seTogZmFsc2UsXG4gICAgbWluQXBwVmVyc2lvbjogJycsXG4gICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgdmVyc2lvbjogJydcbiAgfTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoYCR7ZGlyfS9tYWluLmpzYCwgYCgke1N0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX0pKCk7YCk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGhpbiBgbG9hZFBsdWdpbmAuXG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xufVxuXG4vKipcbiAqIFRoZSBib2R5IG9mIHRoZSB0ZW1wb3JhcnkgcGx1Z2luIHRoYXQgZXh0cmFjdHMgdGhlIGBvYnNpZGlhbmAgbW9kdWxlLlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCB3cml0dGVuIHRvIGBtYWluLmpzYCBieSB7QGxpbmsgZ2V0T2JzaWRpYW5Nb2R1bGV9LlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5GbigpOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG5cbiAgY29uc3QgcGx1Z2luUmVxdWlyZSA9IHJlcXVpcmU7XG4gIGNvbnN0IHBsdWdpbkV4cG9ydHMgPSBleHBvcnRzIGFzIEV4cG9ydHNXaXRoRGVmYXVsdDtcblxuICBjb25zdCBvYnNpZGlhbk1vZHVsZSA9IHBsdWdpblJlcXVpcmUoJ29ic2lkaWFuJykgYXMgdHlwZW9mIG9ic2lkaWFuO1xuICBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSA9IG9ic2lkaWFuTW9kdWxlO1xuICBwbHVnaW5FeHBvcnRzLmRlZmF1bHQgPSBvYnNpZGlhbk1vZHVsZS5QbHVnaW47XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFXQSxTQUFTLGtCQUFrQjtBQUMzQixPQUFPLGFBQWE7QUFRcEIsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyw0QkFBNEI7QUFFckMsTUFBTSxvQkFBb0I7QUFNMUIsTUFBTSxZQUFZO0FBaUZsQixlQUFzQixlQUNwQixRQUNpQjtBQUVqQixRQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxJQUFJLDRCQUE0QixPQUFPLFdBQVcsbUJBQW1CLFVBQVUsSUFBSTtBQUNqSCxRQUFNLE1BQU0sYUFBYSxRQUFRLElBQUk7QUFHckMsTUFBSSxjQUFjLFVBQWEsQ0FBQyxXQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLE1BQU0scUJBQXFCLG9CQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQywyQkFBMkI7QUFD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
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZXNwYWNlIC0tIFdlIG5lZWQgdG8gcmVmZXJlbmNlIGBvYnNpZGlhbmAgbW9kdWxlLlxuaW1wb3J0IHR5cGUgKiBhcyBvYnNpZGlhbiBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmdzLFxuICBDb250ZXh0SWRcbn0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZ2V0VHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5tanMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLm1qcyc7XG5pbXBvcnQgeyBqc29uV2l0aEZ1bmN0aW9ucyB9IGZyb20gJy4vanNvbi13aXRoLWZ1bmN0aW9ucy5tanMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuL3NlcmlhbGl6ZS1lcnJvci5tanMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5Lm1qcyc7XG5cbmNvbnN0IEVWQUxfRVJST1JfTUFSS0VSID0gJ19fb2JzaWRpYW5FdmFsRXJyb3JfXyc7XG5cbmludGVyZmFjZSBFeHBvcnRzV2l0aERlZmF1bHQge1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG5jb25zdCBOT19PVVRQVVQgPSAnKG5vIG91dHB1dCknO1xuXG4vKipcbiAqIENvbW1vbiBhcmd1bWVudHMgYXV0b21hdGljYWxseSBwcm92aWRlZCB0byBldmVyeSB7QGxpbmsgZXZhbEluT2JzaWRpYW59IGNhbGxiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkFyZ3Mge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHtAbGluayBBcHB9IGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBgb2JzaWRpYW5gIG1vZHVsZSwgcmVzb2x2ZWQgYXQgcnVudGltZSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gICAqL1xuICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIGFyZ3M/OiBBcmdzO1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBDb250ZXh0SWR9IGxpbmtpbmcgdGhpcyBjYWxsIHRvIGEgcGVyc2lzdGVudCBzdG9yZSBvbiBgd2luZG93YFxuICAgKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2Vzcy4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgdHlwZWQgYGNvbnRleHRgIG9iamVjdFxuICAgKiB0aGF0IHN1cnZpdmVzIGFjcm9zcyBjYWxscyBzaGFyaW5nIHRoZSBzYW1lIElELlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBjb250ZXh0YCBpcyBhIGZyZXNoIGVtcHR5IG9iamVjdCBlYWNoIGNhbGwuXG4gICAqL1xuICBjb250ZXh0SWQ/OiBUQ29udGV4dElkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gdGhlIE9ic2lkaWFuIGNvbnRleHQuXG4gICAqL1xuICBmbihhcmdzOiBBcmdzICYgQ29tbW9uQXJncyAmIENvbnRleHRBcmdzPFRDb250ZXh0SWQ+KTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBTa2lwcyBwcmUtZmxpZ2h0IGNoZWNrcyAodmF1bHQgcmVnaXN0cmF0aW9uLCBDTEkgYXZhaWxhYmlsaXR5KS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHZhdWx0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQgZm9yIHRoaXMgY2FsbC4gV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSB0cmFuc3BvcnRcbiAgICogY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIgKHNldCBieSB0aGUgZnJhbWV3b3JrIGFkYXB0ZXIncyBnbG9iYWwgc2V0dXApLlxuICAgKi9cbiAgdHJhbnNwb3J0PzogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiB2YXVsdC4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcGxhaW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gYXJncyBvYmplY3QgdGhhdCBpbmNsdWRlcyBgYXBwYCwgYG9ic2lkaWFuTW9kdWxlYCxcbiAqIGBjb250ZXh0YCwgYW5kIGFueSBhZGRpdGlvbmFsIGBhcmdzYCBwYXNzZWQgYnkgdGhlIGNhbGxlci5cbiAqIEl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgaW52b2tlZCBhcyBhbiBJSUZFLlxuICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgc2VsZi1jb250YWluZWQgXHUyMDE0IGNsb3N1cmVzIG92ZXIgbG9jYWwgdmFyaWFibGVzIHdpbGwgbm90IHdvcmsuXG4gKiBQYXNzIGFueSBuZWVkZWQgdmFsdWVzIGFzIGBhcmdzYCBcdTIwMTQgdGhleSBhcmUgSlNPTi1zZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgb24gdGhlIE9ic2lkaWFuIHNpZGUuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBgSlNPTi5zdHJpbmdpZnlgJ2Qgb24gdGhlIE9ic2lkaWFuIHNpZGUgYW5kIHBhcnNlZCBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmbmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsSW5PYnNpZGlhbjxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcGFyYW1zOiBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzLCBSZXN1bHQsIFRDb250ZXh0SWQ+XG4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIGBmbmAgY2FuIGJlIHVuYm91bmQuXG4gIGNvbnN0IHsgYXJncyA9IHt9LCBjb250ZXh0SWQsIGZuLCBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzID0gZmFsc2UsIHRyYW5zcG9ydDogdHJhbnNwb3J0T3ZlcnJpZGUsIHZhdWx0UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBjd2QgPSB2YXVsdFBhdGggPz8gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBDaGVjazogVmF1bHQgcGF0aCBleGlzdHMgb24gZGlzay5cbiAgaWYgKHZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmICFleGlzdHNTeW5jKHZhdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7dmF1bHRQYXRofWApO1xuICB9XG5cbiAgY29uc3QgdHJhbnNwb3J0ID0gdHJhbnNwb3J0T3ZlcnJpZGUgPz8gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoZ2V0VHJhbnNwb3J0T3B0aW9ucygpKTtcblxuICBpZiAoIXNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MpIHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHJlZmxpZ2h0Q2hlY2soY3dkKTtcbiAgfVxuXG4gIGNvbnN0IFNMSUNFX1NUQVJUID0gMjtcbiAgY29uc3QgcmFuZG9tU3VmZml4ID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKFNMSUNFX1NUQVJUKTtcbiAgY29uc3QgY29udGV4dEV4cHIgPSBjb250ZXh0SWRcbiAgICA/IGAoKHdpbmRvdy5fX29ic2lkaWFuQ29udGV4dHNfXyA/Pz0ge30pW1wiJHtTdHJpbmcoY29udGV4dElkKX1cIl0gPz89IHt9KWBcbiAgICA6ICd7fSc7XG4gIGNvbnN0IGV4cHJlc3Npb24gPSBgXG4oYXN5bmMgKCkgPT4ge1xuICBjb25zdCBmbiR7cmFuZG9tU3VmZml4fSA9ICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGZuKX07XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlJHtyYW5kb21TdWZmaXh9ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWFwcC53b3Jrc3BhY2UuYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gICAgfVxuICAgIGlmICghYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcbiAgICB9XG4gICAgJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5Gbil9XG4gICAgJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGUpfVxuICAgIHJldHVybiBhd2FpdCBnZXRPYnNpZGlhbk1vZHVsZSgpO1xuICB9KSgpO1xuICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhzZXJpYWxpemVFcnJvcil9XG4gIGNvbnN0IGFyZ3Mke3JhbmRvbVN1ZmZpeH0gPSAke2pzb25XaXRoRnVuY3Rpb25zKGFyZ3MpfTtcbiAgY29uc3QgY29udGV4dCR7cmFuZG9tU3VmZml4fSA9ICR7Y29udGV4dEV4cHJ9O1xuICBjb25zdCBmdWxsQXJncyR7cmFuZG9tU3VmZml4fSA9IE9iamVjdC5hc3NpZ24oYXJncyR7cmFuZG9tU3VmZml4fSwgeyBhcHAsIG9ic2lkaWFuTW9kdWxlOiBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSwgY29udGV4dDogY29udGV4dCR7cmFuZG9tU3VmZml4fSB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQke3JhbmRvbVN1ZmZpeH0gPSBhd2FpdCBmbiR7cmFuZG9tU3VmZml4fShmdWxsQXJncyR7cmFuZG9tU3VmZml4fSk7XG4gICAgaWYgKHJlc3VsdCR7cmFuZG9tU3VmZml4fSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3VsdCR7cmFuZG9tU3VmZml4fSk7XG4gIH0gY2F0Y2ggKGV2YWxFcnJvciR7cmFuZG9tU3VmZml4fSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7ICR7RVZBTF9FUlJPUl9NQVJLRVJ9OiBzZXJpYWxpemVFcnJvcihldmFsRXJyb3Ike3JhbmRvbVN1ZmZpeH0pIH0pO1xuICB9XG59KSgpYDtcblxuICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0ciA9PT0gJycgfHwgcmVzdWx0U3RyID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBPYnNpZGlhbiByZXR1cm5lZCBub24tSlNPTiBvdXRwdXQ6ICR7cmVzdWx0U3RyfWApO1xuICB9XG5cbiAgaWYgKHBhcnNlZCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBFVkFMX0VSUk9SX01BUktFUiBpbiBwYXJzZWQpIHtcbiAgICBjb25zdCBlcnJvckRldGFpbCA9IFN0cmluZygocGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtFVkFMX0VSUk9SX01BUktFUl0pO1xuICAgIC8vIFJld3JpdGUgYmFyZS1vcmlnaW4gbG9jYWxob3N0IHN0YWNrIGZyYW1lcyBsaWtlIFwiKGh0dHA6Ly9sb2NhbGhvc3QvOjkxNTozMilcIlxuICAgIC8vIFNvIFZpdGVzdCdzIHNvdXJjZS1tYXAgcmVzb2x2ZXIgd29uJ3QgZXh0cmFjdCBcIi9cIiBhcyB0aGUgZmlsZSBwYXRoIGFuZCBjcmFzaFxuICAgIC8vIFdpdGggRUlTRElSIHdoZW4gaXQgdHJpZXMgdG8gcmVhZEZpbGVTeW5jIG9uIHRoZSByb290IGRpcmVjdG9yeS5cbiAgICBjb25zdCBzYW5pdGl6ZWREZXRhaWwgPSBlcnJvckRldGFpbFxuICAgICAgLnJlcGxhY2UoL1xcKGh0dHBzPzpcXC9cXC9sb2NhbGhvc3RcXC86KD88bGluZT5cXGQpL2csICcob2JzaWRpYW4td2VidmlldzokPGxpbmU+Jyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogRXJyb3IgaW5zaWRlIE9ic2lkaWFuOlxcbiR7c2FuaXRpemVkRGV0YWlsfWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZXN1bHQ7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIHZpYSB0b1N0cmluZygpIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MsIG5vdCBpbiBOb2RlLiBDb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLiAqL1xuXG4vKipcbiAqIEluamVjdGVkIGludG8gdGhlIE9ic2lkaWFuIHByb2Nlc3MgdG8gcmVzb2x2ZSB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBVc2VzIGEgY2FjaGVkIHZhbHVlIG9uIGBhcHBgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGluc3RhbGxzIGEgdGVtcG9yYXJ5XG4gKiBwbHVnaW4gdGhhdCBjYWxscyBgcmVxdWlyZSgnb2JzaWRpYW4nKWAgYW5kIGNhY2hlcyB0aGUgcmVzdWx0LlxuICpcbiAqIE11c3QgTk9UIHJlZmVyZW5jZSBhbnkgb3V0ZXIgc2NvcGUgXHUyMDE0IGl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAqIGBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuYCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHNhbWUgc2NvcGVcbiAqICh0aGUgZ2VuZXJhdGVkIElJRkUgaGFuZGxlcyB0aGlzKS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9ic2lkaWFuTW9kdWxlKCk6IFByb21pc2U8dHlwZW9mIG9ic2lkaWFuPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZGVwcmVjYXRlZCAtLSBXZSBuZWVkIGdsb2JhbCBgYXBwYCB2YXJpYWJsZS5cbiAgY29uc3QgYXBwID0gd2luZG93LmFwcDtcbiAgaW50ZXJmYWNlIE9ic2lkaWFuTW9kdWxlSG9sZGVyIHtcbiAgICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlSG9sZGVyID0gYXBwIGFzIFBhcnRpYWw8T2JzaWRpYW5Nb2R1bGVIb2xkZXI+O1xuICBpZiAob2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGUpIHtcbiAgICByZXR1cm4gb2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGU7XG4gIH1cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCB0ZW1wTW9kdWxlTmFtZSA9IGBnZXQtb2JzaWRpYW4tbW9kdWxlLSR7cmFuZG9tU3VmZml4fWA7XG4gIGNvbnN0IGRpciA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHt0ZW1wTW9kdWxlTmFtZX1gO1xuICBhcHAucGx1Z2lucy5tYW5pZmVzdHNbdGVtcE1vZHVsZU5hbWVdID0ge1xuICAgIGF1dGhvcjogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRpcixcbiAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgaXNEZXNrdG9wT25seTogZmFsc2UsXG4gICAgbWluQXBwVmVyc2lvbjogJycsXG4gICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgdmVyc2lvbjogJydcbiAgfTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoYCR7ZGlyfS9tYWluLmpzYCwgYCgke1N0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX0pKCk7YCk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGhpbiBgbG9hZFBsdWdpbmAuXG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xufVxuXG4vKipcbiAqIFRoZSBib2R5IG9mIHRoZSB0ZW1wb3JhcnkgcGx1Z2luIHRoYXQgZXh0cmFjdHMgdGhlIGBvYnNpZGlhbmAgbW9kdWxlLlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCB3cml0dGVuIHRvIGBtYWluLmpzYCBieSB7QGxpbmsgZ2V0T2JzaWRpYW5Nb2R1bGV9LlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5GbigpOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG5cbiAgY29uc3QgcGx1Z2luUmVxdWlyZSA9IHJlcXVpcmU7XG4gIGNvbnN0IHBsdWdpbkV4cG9ydHMgPSBleHBvcnRzIGFzIEV4cG9ydHNXaXRoRGVmYXVsdDtcblxuICBjb25zdCBvYnNpZGlhbk1vZHVsZSA9IHBsdWdpblJlcXVpcmUoJ29ic2lkaWFuJykgYXMgdHlwZW9mIG9ic2lkaWFuO1xuICBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSA9IG9ic2lkaWFuTW9kdWxlO1xuICBwbHVnaW5FeHBvcnRzLmRlZmF1bHQgPSBvYnNpZGlhbk1vZHVsZS5QbHVnaW47XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFXQSxTQUFTLGtCQUFrQjtBQUMzQixPQUFPLGFBQWE7QUFRcEIsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxtQ0FB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
|
|
@@ -68,6 +68,9 @@ export declare class DesktopCliTransport implements ObsidianTransport {
|
|
|
68
68
|
* `obsidian.json`) and before the new vault window finishes loading.
|
|
69
69
|
*
|
|
70
70
|
* @param vaultPath - The absolute path to the vault folder.
|
|
71
|
+
* @param evalTargetVaultPath - The vault path to use as eval target (an existing, loaded vault).
|
|
72
|
+
* localStorage is shared across all Obsidian windows (same Electron origin), so the
|
|
73
|
+
* `localStorage.setItem` call can run in any loaded vault window.
|
|
71
74
|
*/
|
|
72
75
|
private enablePluginsInLocalStorage;
|
|
73
76
|
/**
|
|
@@ -128,7 +128,7 @@ class DesktopCliTransport {
|
|
|
128
128
|
`window.electron.ipcRenderer.sendSync('vault-open', ${JSON.stringify(vaultPath)}, false);`
|
|
129
129
|
);
|
|
130
130
|
await this.evaluate(registerExpr, { cwd: existingVaultPath });
|
|
131
|
-
await this.enablePluginsInLocalStorage(vaultPath);
|
|
131
|
+
await this.enablePluginsInLocalStorage(vaultPath, existingVaultPath);
|
|
132
132
|
const pollExpr = buildSimpleExpression(
|
|
133
133
|
"return JSON.stringify(app.vault.adapter.getBasePath());"
|
|
134
134
|
);
|
|
@@ -208,8 +208,11 @@ class DesktopCliTransport {
|
|
|
208
208
|
* `obsidian.json`) and before the new vault window finishes loading.
|
|
209
209
|
*
|
|
210
210
|
* @param vaultPath - The absolute path to the vault folder.
|
|
211
|
+
* @param evalTargetVaultPath - The vault path to use as eval target (an existing, loaded vault).
|
|
212
|
+
* localStorage is shared across all Obsidian windows (same Electron origin), so the
|
|
213
|
+
* `localStorage.setItem` call can run in any loaded vault window.
|
|
211
214
|
*/
|
|
212
|
-
async enablePluginsInLocalStorage(vaultPath) {
|
|
215
|
+
async enablePluginsInLocalStorage(vaultPath, evalTargetVaultPath) {
|
|
213
216
|
const vaultId = getVaultId(vaultPath);
|
|
214
217
|
if (!vaultId) {
|
|
215
218
|
log("[cli-transport] Could not find vault ID \u2014 skipping localStorage trust flag.");
|
|
@@ -218,7 +221,7 @@ class DesktopCliTransport {
|
|
|
218
221
|
const enableExpr = buildSimpleExpression(
|
|
219
222
|
`localStorage.setItem(${JSON.stringify(`enable-plugin-${vaultId}`)}, 'true');`
|
|
220
223
|
);
|
|
221
|
-
await this.evaluate(enableExpr, { cwd:
|
|
224
|
+
await this.evaluate(enableExpr, { cwd: evalTargetVaultPath });
|
|
222
225
|
log(`[cli-transport] Set enable-plugin-${vaultId} in localStorage.`);
|
|
223
226
|
}
|
|
224
227
|
/**
|
|
@@ -305,4 +308,4 @@ function getObsidianLaunchCommand() {
|
|
|
305
308
|
export {
|
|
306
309
|
DesktopCliTransport
|
|
307
310
|
};
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgdW5saW5rLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZXhlYyB9IGZyb20gJy4vZXhlYy5tanMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vbm9vcC5tanMnO1xuaW1wb3J0IHtcbiAgZ2V0QW55UmVnaXN0ZXJlZFZhdWx0UGF0aCxcbiAgZ2V0VmF1bHRJZCxcbiAgaXNDbGlFbmFibGVkLFxuICBpc1ZhdWx0UmVnaXN0ZXJlZFxufSBmcm9tICcuL29ic2lkaWFuLWNvbmZpZy5tanMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuL3NlcmlhbGl6ZS1lcnJvci5tanMnO1xuXG4vKipcbiAqIERpc2NyaW1pbmF0ZWQgZW52ZWxvcGUgd3JpdHRlbiBieSB0aGUgdGVtcG9yYXJ5IHNjcmlwdCBmaWxlLlxuICpcbiAqIC0gYHsgdmFsdWU6IHN0cmluZywgdHlwZTogJ2Vycm9yJyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gdGhyZXc7IGB2YWx1ZWAgaXMgdGhlIGVycm9yIG1lc3NhZ2UuXG4gKiAtIGB7IHZhbHVlOiAnJywgdHlwZTogJ251bGwnIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBgbnVsbGAuXG4gKiAtIGB7IHZhbHVlOiAnJywgdHlwZTogJ3VuZGVmaW5lZCcgfWAgXHUyMDE0IHRoZSBleHByZXNzaW9uIHJldHVybmVkIGB1bmRlZmluZWRgLlxuICogLSBgeyB2YWx1ZTogc3RyaW5nIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBhIHN0cmluZyB2YWx1ZSAobm8gYHR5cGVgIGZpZWxkKS5cbiAqL1xudHlwZSBTY3JpcHRSZXN1bHRFbnZlbG9wZSA9XG4gIHwgeyB0eXBlOiAnZXJyb3InIHwgJ251bGwnIHwgJ3VuZGVmaW5lZCc7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsgdmFsdWU6IHN0cmluZyB9O1xuXG5jb25zdCBVTkFCTEVfVE9fRklORF9PQlNJRElBTiA9ICd1bmFibGUgdG8gZmluZCBPYnNpZGlhbic7XG5jb25zdCBBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbmNvbnN0IEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gMTAwMDtcbmNvbnN0IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwMDtcblxuLyoqXG4gKiBUcmFuc3BvcnQgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBEZXNrdG9wIE9ic2lkaWFuIHZpYSB0aGUgYG9ic2lkaWFuIGV2YWxgIENMSSBjb21tYW5kXG4gKiBhbmQgbWFuYWdlcyB2YXVsdHMgdmlhIEVsZWN0cm9uIElQQy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlc2t0b3BDbGlUcmFuc3BvcnQgaW1wbGVtZW50cyBPYnNpZGlhblRyYW5zcG9ydCB7XG4gIC8qKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiB2aWEgYG9ic2lkaWFuIGV2YWxgLlxuICAgKlxuICAgKiBXcml0ZXMgdGhlIGV4cHJlc3Npb24gdG8gYSB0ZW1wb3JhcnkgYC5janNgIGZpbGUgYW5kIGV4ZWN1dGVzIGEgdGlueVxuICAgKiBgcmVxdWlyZSgpLmludm9rZSgpYCBjYWxsIHZpYSB0aGUgQ0xJLiBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gdG8gYVxuICAgKiBgLnJlc3VsdC5qc29uYCBmaWxlIGJ5IHRoZSBzY3JpcHQsIGF2b2lkaW5nIENMSSBzdGRvdXQgc2l6ZSBsaW1pdHNcbiAgICogYW5kIElQQyBidWZmZXIgaXNzdWVzLlxuICAgKlxuICAgKiBIYW5kbGVzIGF1dG8tc3RhcnQ6IGlmIE9ic2lkaWFuIGlzIG5vdCBydW5uaW5nLCBsYXVuY2hlcyBpdCB2aWEgVVJJIHByb3RvY29sXG4gICAqIGFuZCByZXRyaWVzIHVudGlsIGl0IGJlY29tZXMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRXZhbHVhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCByZXN1bHQgc3RyaW5nICh0cmFuc3BvcnQtc3BlY2lmaWMgcHJlZml4ZXMgc3RyaXBwZWQpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgb3B0aW9uczogVHJhbnNwb3J0RXZhbE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IFNMSUNFX1NUQVJUID0gMjtcbiAgICBjb25zdCBzY3JpcHRJZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gICAgY29uc3Qgc2NyaXB0RGlyID0gam9pbih0bXBkaXIoKSwgJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnKTtcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5janNgKTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5yZXN1bHQuanNvbmApO1xuXG4gICAgYXdhaXQgbWtkaXIoc2NyaXB0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGludm9rZU5hbWUgPSBgaW52b2tlXyR7c2NyaXB0SWR9YDtcbiAgICBjb25zdCBzY3JpcHRDb250ZW50ID0gYnVpbGRTY3JpcHRGaWxlKGV4cHJlc3Npb24sIHJlc3VsdFBhdGgsIGludm9rZU5hbWUpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShzY3JpcHRQYXRoLCBzY3JpcHRDb250ZW50KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgbW9kdWxlLmNvbnN0cnVjdG9yLl9sb2FkIHRvIGJ5cGFzcyBhbnkgbW9ua2V5LXBhdGNoZWQgcmVxdWlyZSgpXG4gICAgICAvLyAoZS5nLiwgb2JzaWRpYW4tY29kZXNjcmlwdC10b29sa2l0IHBhdGNoZXMgcmVxdWlyZSBpbiB0aGUgcmVuZGVyZXIgcHJvY2VzcykuXG4gICAgICBjb25zdCBzYWZlUmVxdWlyZSA9IGBtb2R1bGUuY29uc3RydWN0b3IuX2xvYWQoJHtKU09OLnN0cmluZ2lmeShzY3JpcHRQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKSl9KWA7XG4gICAgICBjb25zdCByZXF1aXJlRXhwciA9IGAoYXN5bmMgKCkgPT4geyBhd2FpdCAke3NhZmVSZXF1aXJlfS4ke2ludm9rZU5hbWV9KCkgfSkoKWA7XG4gICAgICBjb25zdCBjb21tYW5kID0gWydvYnNpZGlhbicsICdldmFsJywgJy0tYWxsb3ctZm9jdXMtc3RlYWwnLCBgY29kZT0ke3JlcXVpcmVFeHByfWBdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHtcbiAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgIGlzUXVpZXQ6IHRydWUsXG4gICAgICAgICAgLi4uKG9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kLCBvcHRpb25zLmN3ZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFleGlzdHNTeW5jKHJlc3VsdFBhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGRpZCBub3QgZXhlY3V0ZSBmb3IgcGF0aDogJHtvcHRpb25zLmN3ZH0gXHUyMDE0IHRoZSB2YXVsdCBtYXkgbm90IGJlIGZvdW5kIG9yIE9ic2lkaWFuIGRpZCBub3QgcnVuIHRoZSBldmFsLmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCByZWFkRmlsZShyZXN1bHRQYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpIGFzIFNjcmlwdFJlc3VsdEVudmVsb3BlO1xuXG4gICAgICBpZiAoJ3R5cGUnIGluIGVudmVsb3BlKSB7XG4gICAgICAgIGlmIChlbnZlbG9wZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY3JpcHQgZXJyb3IgaW4gT2JzaWRpYW4gZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9OiAke2VudmVsb3BlLnZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudmVsb3BlLnZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB1bmxpbmsoc2NyaXB0UGF0aCkuY2F0Y2gobm9vcCk7XG4gICAgICBhd2FpdCB1bmxpbmsocmVzdWx0UGF0aCkuY2F0Y2gobm9vcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ0xJLXNwZWNpZmljIHByZWZsaWdodCBjaGVja3MuXG4gICAqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHZhdWx0IGlzIHJlZ2lzdGVyZWQsIENMSSBpcyBlbmFibGVkIGluIE9ic2lkaWFuIHNldHRpbmdzLFxuICAgKiBhbmQgdGhlIGBvYnNpZGlhbmAgQ0xJIGJpbmFyeSBpcyBhdmFpbGFibGUgaW4gUEFUSC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJlZmxpZ2h0Q2hlY2sodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBSdW5uaW5nIHByZWZsaWdodCBjaGVjayBmb3IgdmF1bHQ6ICR7dmF1bHRQYXRofWApO1xuICAgIGlmICghaXNWYXVsdFJlZ2lzdGVyZWQodmF1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmF1bHQgaXMgbm90IHJlZ2lzdGVyZWQgaW4gT2JzaWRpYW46ICR7dmF1bHRQYXRofS4gUmVnaXN0ZXIgdGhlIHZhdWx0IGZpcnN0IHdpdGggcmVnaXN0ZXJWYXVsdCgpIG9yIFRlbXBWYXVsdC5yZWdpc3RlcigpLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NsaUVuYWJsZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPYnNpZGlhbiBDTEkgaXMgZGlzYWJsZWQuIEVuYWJsZSBpdCBpbiBPYnNpZGlhbiBTZXR0aW5ncyBcXHUyMTkyIEdlbmVyYWwgXFx1MjE5MiBDTEkuJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0UGF0aCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcbiAgICBpZiAoIWV4aXN0aW5nVmF1bHRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWdpc3RlciBhIHZhdWx0OiBubyBleGlzdGluZyB2YXVsdCBpcyByZWdpc3RlcmVkIGluIE9ic2lkaWFuLiBPcGVuIE9ic2lkaWFuIGFuZCBjcmVhdGUgb3Igb3BlbiBhdCBsZWFzdCBvbmUgdmF1bHQgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnaXN0ZXJFeHByID0gYnVpbGRJcGNFeHByZXNzaW9uKFxuICAgICAgYHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsICR7SlNPTi5zdHJpbmdpZnkodmF1bHRQYXRoKX0sIGZhbHNlKTtgXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlZ2lzdGVyRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRQYXRoIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoKTtcblxuICAgIGNvbnN0IHBvbGxFeHByID0gYnVpbGRTaW1wbGVFeHByZXNzaW9uKFxuICAgICAgJ3JldHVybiBKU09OLnN0cmluZ2lmeShhcHAudmF1bHQuYWRhcHRlci5nZXRCYXNlUGF0aCgpKTsnXG4gICAgKTtcblxuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFBvbGxpbmcgZm9yIHZhdWx0IHJlYWRpbmVzcyAodGltZW91dD0ke1N0cmluZyhWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcykuLi5gKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gYXdhaXQgdGhpcy5ldmFsdWF0ZShwb2xsRXhwciwgeyBjd2Q6IHZhdWx0UGF0aCB9KTtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UoYmFzZVBhdGgpID09PSB2YXVsdFBhdGgpIHtcbiAgICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBpcyByZWFkeS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBWYXVsdCBub3QgcmVhZHkgeWV0LlxuICAgICAgfVxuICAgICAgYXdhaXQgZGVsYXkoVkFVTFRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IGF0ICR7dmF1bHRQYXRofSBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhIHZhdWx0IGZyb20gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UuXG4gICAqXG4gICAqIFNjaGVkdWxlcyB0aGUgdmF1bHQgd2luZG93IHRvIGNsb3NlLCB3YWl0cywgdGhlbiByZW1vdmVzIHRoZSB2YXVsdFxuICAgKiBmcm9tIHRoZSByZWdpc3RyeSB2aWEgYHZhdWx0LXJlbW92ZWAgSVBDLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBVbnJlZ2lzdGVyaW5nIHZhdWx0OiBjbG9zaW5nIHdpbmRvdyBmb3IgJHt2YXVsdFBhdGh9Li4uYCk7XG4gICAgY29uc3QgZGVzdHJveUV4cHIgPSBidWlsZFNpbXBsZUV4cHJlc3Npb24oYFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cuZWxlY3Ryb24gJiYgd2luZG93LmVsZWN0cm9uLnJlbW90ZSkge1xuICAgICAgICAgIHdpbmRvdy5lbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUoZGVzdHJveUV4cHIsIHsgY3dkOiB2YXVsdFBhdGgsIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogVkFVTFRfRVZBTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyB9KTtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFdpbmRvdyBkZXN0cm95IGNvbW1hbmQgc2VudC4nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gV2luZG93IGRlc3Ryb3kgZmFpbGVkIChub24tZmF0YWwpOiAke3NlcmlhbGl6ZUVycm9yKGVycm9yKX1gKTtcbiAgICB9XG5cbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBXYWl0aW5nIGZvciB3aW5kb3cgdG8gY2xvc2UuLi4nKTtcbiAgICBhd2FpdCBkZWxheShWQVVMVF9DTE9TRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gUmVtb3ZpbmcgdmF1bHQgZnJvbSByZWdpc3RyeS4uLicpO1xuICAgIGNvbnN0IHJlbW92ZUV4cHIgPSBidWlsZElwY0V4cHJlc3Npb24oXG4gICAgICBgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2YXVsdC1yZW1vdmUnLCAke0pTT04uc3RyaW5naWZ5KHZhdWx0UGF0aCl9KTtgXG4gICAgKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGV4aXN0aW5nVmF1bHRGb3JSZW1vdmFsKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUocmVtb3ZlRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRGb3JSZW1vdmFsLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBObyBleGlzdGluZyB2YXVsdCB0byB0YXJnZXQgZm9yIHJlbW92YWwgSVBDIFx1MjAxNCBza2lwcGluZy4nKTtcbiAgICAgIH1cbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFZhdWx0IHJlbW92ZWQgZnJvbSByZWdpc3RyeS4nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVmF1bHQgcmVnaXN0cnkgcmVtb3ZhbCBmYWlsZWQgKG5vbi1mYXRhbCk6ICR7c2VyaWFsaXplRXJyb3IoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgT2JzaWRpYW4gQ0xJIGJpbmFyeSBpcyBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbSBQQVRILlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhc3NlcnRDbGlBdmFpbGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnd2hlcmUuZXhlIG9ic2lkaWFuJyA6ICd3aGljaCBvYnNpZGlhbic7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPYnNpZGlhbiBDTEkgaXMgbm90IGF2YWlsYWJsZS4gRW5zdXJlIE9ic2lkaWFuIGlzIGluc3RhbGxlZCBhbmQgaXRzIENMSSBpcyBpbiB5b3VyIFBBVEguJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYGVuYWJsZS1wbHVnaW4tPHZhdWx0SWQ+YCBpbiBPYnNpZGlhbidzIGxvY2FsU3RvcmFnZSB0byBwcmV2ZW50XG4gICAqIHRoZSBcIkRvIHlvdSB0cnVzdCB0aGUgYXV0aG9yIG9mIHRoaXMgdmF1bHQ/XCIgZGlhbG9nIGZyb20gYXBwZWFyaW5nXG4gICAqIHdoZW4gYSB2YXVsdCB3aXRoIGNvbW11bml0eSBwbHVnaW5zIGlzIG9wZW5lZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBgdmF1bHQtb3BlbmAgSVBDIChzbyB0aGUgdmF1bHQgSUQgZXhpc3RzIGluXG4gICAqIGBvYnNpZGlhbi5qc29uYCkgYW5kIGJlZm9yZSB0aGUgbmV3IHZhdWx0IHdpbmRvdyBmaW5pc2hlcyBsb2FkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5hYmxlUGx1Z2luc0luTG9jYWxTdG9yYWdlKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmF1bHRJZCA9IGdldFZhdWx0SWQodmF1bHRQYXRoKTtcbiAgICBpZiAoIXZhdWx0SWQpIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIENvdWxkIG5vdCBmaW5kIHZhdWx0IElEIFx1MjAxNCBza2lwcGluZyBsb2NhbFN0b3JhZ2UgdHJ1c3QgZmxhZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbmFibGVFeHByID0gYnVpbGRTaW1wbGVFeHByZXNzaW9uKFxuICAgICAgYGxvY2FsU3RvcmFnZS5zZXRJdGVtKCR7SlNPTi5zdHJpbmdpZnkoYGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfWApfSwgJ3RydWUnKTtgXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKGVuYWJsZUV4cHIsIHsgY3dkOiB2YXVsdFBhdGggfSk7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gU2V0IGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfSBpbiBsb2NhbFN0b3JhZ2UuYCk7XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoZXMgT2JzaWRpYW4gYmluYXJ5IGFuZCByZXRyaWVzIHRoZSBldmFsIHVudGlsIGl0IHJlc3BvbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBDTEkgY29tbWFuZCBhcnJheSB0byByZXRyeS5cbiAgICogQHBhcmFtIGN3ZCAtIFRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlT2JzaWRpYW5SdW5uaW5nQW5kUmV0cnkoY29tbWFuZDogc3RyaW5nW10sIGN3ZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gaXMgbm90IHJ1bm5pbmcuIFN0YXJ0aW5nIE9ic2lkaWFuLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQoKSwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gVGhlIGxhdW5jaCBjb21tYW5kIG1heSBmYWlsIG9uIHNvbWUgc3lzdGVtcyBcdTIwMTQgd2UnbGwgc3RpbGwgdHJ5IHBvbGxpbmcuXG4gICAgfVxuXG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUG9sbGluZyBmb3IgT2JzaWRpYW4gQ0xJICh0aW1lb3V0PSR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgYXdhaXQgZGVsYXkoQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgY3dkLCBpc1F1aWV0OiB0cnVlIH0pO1xuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBDTEkgcmVzcG9uZGVkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBpZiAoIW1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gbm90IHJlYWR5IHlldCwgcmV0cnlpbmcuLi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ic2lkaWFuIGRpZCBub3Qgc3RhcnQgd2l0aGluICR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmApO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGFzeW5jIElJRkUgdGhhdCB3YWl0cyBmb3IgbGF5b3V0IHJlYWR5IGFuZCBleGVjdXRlcyBhbiBJUEMgY2FsbC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZClgIHNvIHRoZSBDTEkgcHJvZHVjZXMgYChubyBvdXRwdXQpYC5cbiAqXG4gKiBAcGFyYW0gaXBjU3RhdGVtZW50IC0gVGhlIElQQyBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIFRoZSBJSUZFIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBidWlsZElwY0V4cHJlc3Npb24oaXBjU3RhdGVtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGlwY1N0YXRlbWVudCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb250ZW50IG9mIGEgdGVtcG9yYXJ5IGAuY2pzYCBzY3JpcHQgZmlsZS5cbiAqXG4gKiBUaGUgc2NyaXB0IGRlZmluZXMgYW4gYXN5bmMgYGludm9rZSgpYCBmdW5jdGlvbiB0aGF0IGV2YWx1YXRlcyB0aGVcbiAqIGV4cHJlc3Npb24sIHdyaXRlcyB0aGUgcmVzdWx0IChvciBlcnJvcikgdG8gYHJlc3VsdFBhdGhgLCBhbmQgaXNcbiAqIGV4cG9ydGVkIGZvciB0aGUgQ0xJIHRvIGByZXF1aXJlKClgIGFuZCBjYWxsLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSByZXN1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHJlc3VsdCBmaWxlLlxuICogQHBhcmFtIGludm9rZU5hbWUgLSBUaGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWUgdG8gZXhwb3J0IChhdm9pZHMgY29sbGlzaW9ucykuXG4gKiBAcmV0dXJucyBUaGUgc2NyaXB0IGZpbGUgY29udGVudC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTY3JpcHRGaWxlKGV4cHJlc3Npb246IHN0cmluZywgcmVzdWx0UGF0aDogc3RyaW5nLCBpbnZva2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHRQYXRoSnNvbiA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpKTtcbiAgcmV0dXJuIGBcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgc2VyaWFsaXplRXJyb3IgPSAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhzZXJpYWxpemVFcnJvcil9O1xuXG5hc3luYyBmdW5jdGlvbiAke2ludm9rZU5hbWV9KCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgke2V4cHJlc3Npb259KTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFwiXCIsIHR5cGU6IFwidW5kZWZpbmVkXCIgfSkpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKCR7cmVzdWx0UGF0aEpzb259LCBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiBcIlwiLCB0eXBlOiBcIm51bGxcIiB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFN0cmluZyhyZXN1bHQpIH0pKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IHNlcmlhbGl6ZUVycm9yKGVyciksIHR5cGU6IFwiZXJyb3JcIiB9KSk7XG4gIH1cbn1cblxuZXhwb3J0cy4ke2ludm9rZU5hbWV9ID0gJHtpbnZva2VOYW1lfTtcbmA7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc2ltcGxlIGFzeW5jIElJRkUgZXhwcmVzc2lvbiB0aGF0IHdhaXRzIGZvciBsYXlvdXQgcmVhZHkuXG4gKlxuICogQHBhcmFtIGJvZHkgLSBUaGUgSmF2YVNjcmlwdCBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBUaGUgSUlGRSBleHByZXNzaW9uIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgKGFzeW5jICgpID0+IHtcbiAgaWYgKCFhcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gIH1cbiAgJHtib2R5fVxufSkoKWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBsYXVuY2ggdGhlIE9ic2lkaWFuIGJpbmFyeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCgpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke2xvY2FsQXBwRGF0YX1cXFxcUHJvZ3JhbXNcXFxcT2JzaWRpYW5cXFxcT2JzaWRpYW4uZXhlXCJgO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbiAmJztcbiAgfVxuXG4gIHJldHVybiAnb2JzaWRpYW4gJic7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFTQSxTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsWUFBWTtBQUNyQixPQUFPLGFBQWE7QUFPcEIsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsV0FBVztBQUNwQixTQUFTLFlBQVk7QUFDckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsc0JBQXNCO0FBYy9CLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0scUNBQXFDO0FBQzNDLE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0scUNBQXFDO0FBQzNDLE1BQU0sb0NBQW9DO0FBQzFDLE1BQU0scUNBQXFDO0FBTXBDLE1BQU0sb0JBQWlEO0FBQUE7QUFBQSxFQUU1QyxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFpQjNCLE1BQWEsU0FBUyxZQUFvQixTQUFnRDtBQUN4RixVQUFNLGNB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
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgdW5saW5rLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZXhlYyB9IGZyb20gJy4vZXhlYy5tanMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vbm9vcC5tanMnO1xuaW1wb3J0IHtcbiAgZ2V0QW55UmVnaXN0ZXJlZFZhdWx0UGF0aCxcbiAgZ2V0VmF1bHRJZCxcbiAgaXNDbGlFbmFibGVkLFxuICBpc1ZhdWx0UmVnaXN0ZXJlZFxufSBmcm9tICcuL29ic2lkaWFuLWNvbmZpZy5tanMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuL3NlcmlhbGl6ZS1lcnJvci5tanMnO1xuXG4vKipcbiAqIERpc2NyaW1pbmF0ZWQgZW52ZWxvcGUgd3JpdHRlbiBieSB0aGUgdGVtcG9yYXJ5IHNjcmlwdCBmaWxlLlxuICpcbiAqIC0gYHsgdmFsdWU6IHN0cmluZywgdHlwZTogJ2Vycm9yJyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gdGhyZXc7IGB2YWx1ZWAgaXMgdGhlIGVycm9yIG1lc3NhZ2UuXG4gKiAtIGB7IHZhbHVlOiAnJywgdHlwZTogJ251bGwnIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBgbnVsbGAuXG4gKiAtIGB7IHZhbHVlOiAnJywgdHlwZTogJ3VuZGVmaW5lZCcgfWAgXHUyMDE0IHRoZSBleHByZXNzaW9uIHJldHVybmVkIGB1bmRlZmluZWRgLlxuICogLSBgeyB2YWx1ZTogc3RyaW5nIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBhIHN0cmluZyB2YWx1ZSAobm8gYHR5cGVgIGZpZWxkKS5cbiAqL1xudHlwZSBTY3JpcHRSZXN1bHRFbnZlbG9wZSA9XG4gIHwgeyB0eXBlOiAnZXJyb3InIHwgJ251bGwnIHwgJ3VuZGVmaW5lZCc7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsgdmFsdWU6IHN0cmluZyB9O1xuXG5jb25zdCBVTkFCTEVfVE9fRklORF9PQlNJRElBTiA9ICd1bmFibGUgdG8gZmluZCBPYnNpZGlhbic7XG5jb25zdCBBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbmNvbnN0IEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gMTAwMDtcbmNvbnN0IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwMDtcblxuLyoqXG4gKiBUcmFuc3BvcnQgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBEZXNrdG9wIE9ic2lkaWFuIHZpYSB0aGUgYG9ic2lkaWFuIGV2YWxgIENMSSBjb21tYW5kXG4gKiBhbmQgbWFuYWdlcyB2YXVsdHMgdmlhIEVsZWN0cm9uIElQQy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlc2t0b3BDbGlUcmFuc3BvcnQgaW1wbGVtZW50cyBPYnNpZGlhblRyYW5zcG9ydCB7XG4gIC8qKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiB2aWEgYG9ic2lkaWFuIGV2YWxgLlxuICAgKlxuICAgKiBXcml0ZXMgdGhlIGV4cHJlc3Npb24gdG8gYSB0ZW1wb3JhcnkgYC5janNgIGZpbGUgYW5kIGV4ZWN1dGVzIGEgdGlueVxuICAgKiBgcmVxdWlyZSgpLmludm9rZSgpYCBjYWxsIHZpYSB0aGUgQ0xJLiBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gdG8gYVxuICAgKiBgLnJlc3VsdC5qc29uYCBmaWxlIGJ5IHRoZSBzY3JpcHQsIGF2b2lkaW5nIENMSSBzdGRvdXQgc2l6ZSBsaW1pdHNcbiAgICogYW5kIElQQyBidWZmZXIgaXNzdWVzLlxuICAgKlxuICAgKiBIYW5kbGVzIGF1dG8tc3RhcnQ6IGlmIE9ic2lkaWFuIGlzIG5vdCBydW5uaW5nLCBsYXVuY2hlcyBpdCB2aWEgVVJJIHByb3RvY29sXG4gICAqIGFuZCByZXRyaWVzIHVudGlsIGl0IGJlY29tZXMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRXZhbHVhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCByZXN1bHQgc3RyaW5nICh0cmFuc3BvcnQtc3BlY2lmaWMgcHJlZml4ZXMgc3RyaXBwZWQpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgb3B0aW9uczogVHJhbnNwb3J0RXZhbE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IFNMSUNFX1NUQVJUID0gMjtcbiAgICBjb25zdCBzY3JpcHRJZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gICAgY29uc3Qgc2NyaXB0RGlyID0gam9pbih0bXBkaXIoKSwgJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnKTtcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5janNgKTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5yZXN1bHQuanNvbmApO1xuXG4gICAgYXdhaXQgbWtkaXIoc2NyaXB0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGludm9rZU5hbWUgPSBgaW52b2tlXyR7c2NyaXB0SWR9YDtcbiAgICBjb25zdCBzY3JpcHRDb250ZW50ID0gYnVpbGRTY3JpcHRGaWxlKGV4cHJlc3Npb24sIHJlc3VsdFBhdGgsIGludm9rZU5hbWUpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShzY3JpcHRQYXRoLCBzY3JpcHRDb250ZW50KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgbW9kdWxlLmNvbnN0cnVjdG9yLl9sb2FkIHRvIGJ5cGFzcyBhbnkgbW9ua2V5LXBhdGNoZWQgcmVxdWlyZSgpXG4gICAgICAvLyAoZS5nLiwgb2JzaWRpYW4tY29kZXNjcmlwdC10b29sa2l0IHBhdGNoZXMgcmVxdWlyZSBpbiB0aGUgcmVuZGVyZXIgcHJvY2VzcykuXG4gICAgICBjb25zdCBzYWZlUmVxdWlyZSA9IGBtb2R1bGUuY29uc3RydWN0b3IuX2xvYWQoJHtKU09OLnN0cmluZ2lmeShzY3JpcHRQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKSl9KWA7XG4gICAgICBjb25zdCByZXF1aXJlRXhwciA9IGAoYXN5bmMgKCkgPT4geyBhd2FpdCAke3NhZmVSZXF1aXJlfS4ke2ludm9rZU5hbWV9KCkgfSkoKWA7XG4gICAgICBjb25zdCBjb21tYW5kID0gWydvYnNpZGlhbicsICdldmFsJywgJy0tYWxsb3ctZm9jdXMtc3RlYWwnLCBgY29kZT0ke3JlcXVpcmVFeHByfWBdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHtcbiAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgIGlzUXVpZXQ6IHRydWUsXG4gICAgICAgICAgLi4uKG9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kLCBvcHRpb25zLmN3ZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFleGlzdHNTeW5jKHJlc3VsdFBhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGRpZCBub3QgZXhlY3V0ZSBmb3IgcGF0aDogJHtvcHRpb25zLmN3ZH0gXHUyMDE0IHRoZSB2YXVsdCBtYXkgbm90IGJlIGZvdW5kIG9yIE9ic2lkaWFuIGRpZCBub3QgcnVuIHRoZSBldmFsLmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCByZWFkRmlsZShyZXN1bHRQYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gSlNPTi5wYXJzZShyZXN1bHRTdHIpIGFzIFNjcmlwdFJlc3VsdEVudmVsb3BlO1xuXG4gICAgICBpZiAoJ3R5cGUnIGluIGVudmVsb3BlKSB7XG4gICAgICAgIGlmIChlbnZlbG9wZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY3JpcHQgZXJyb3IgaW4gT2JzaWRpYW4gZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9OiAke2VudmVsb3BlLnZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudmVsb3BlLnZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB1bmxpbmsoc2NyaXB0UGF0aCkuY2F0Y2gobm9vcCk7XG4gICAgICBhd2FpdCB1bmxpbmsocmVzdWx0UGF0aCkuY2F0Y2gobm9vcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ0xJLXNwZWNpZmljIHByZWZsaWdodCBjaGVja3MuXG4gICAqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHZhdWx0IGlzIHJlZ2lzdGVyZWQsIENMSSBpcyBlbmFibGVkIGluIE9ic2lkaWFuIHNldHRpbmdzLFxuICAgKiBhbmQgdGhlIGBvYnNpZGlhbmAgQ0xJIGJpbmFyeSBpcyBhdmFpbGFibGUgaW4gUEFUSC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJlZmxpZ2h0Q2hlY2sodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBSdW5uaW5nIHByZWZsaWdodCBjaGVjayBmb3IgdmF1bHQ6ICR7dmF1bHRQYXRofWApO1xuICAgIGlmICghaXNWYXVsdFJlZ2lzdGVyZWQodmF1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmF1bHQgaXMgbm90IHJlZ2lzdGVyZWQgaW4gT2JzaWRpYW46ICR7dmF1bHRQYXRofS4gUmVnaXN0ZXIgdGhlIHZhdWx0IGZpcnN0IHdpdGggcmVnaXN0ZXJWYXVsdCgpIG9yIFRlbXBWYXVsdC5yZWdpc3RlcigpLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NsaUVuYWJsZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPYnNpZGlhbiBDTEkgaXMgZGlzYWJsZWQuIEVuYWJsZSBpdCBpbiBPYnNpZGlhbiBTZXR0aW5ncyBcXHUyMTkyIEdlbmVyYWwgXFx1MjE5MiBDTEkuJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0UGF0aCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcbiAgICBpZiAoIWV4aXN0aW5nVmF1bHRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWdpc3RlciBhIHZhdWx0OiBubyBleGlzdGluZyB2YXVsdCBpcyByZWdpc3RlcmVkIGluIE9ic2lkaWFuLiBPcGVuIE9ic2lkaWFuIGFuZCBjcmVhdGUgb3Igb3BlbiBhdCBsZWFzdCBvbmUgdmF1bHQgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnaXN0ZXJFeHByID0gYnVpbGRJcGNFeHByZXNzaW9uKFxuICAgICAgYHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsICR7SlNPTi5zdHJpbmdpZnkodmF1bHRQYXRoKX0sIGZhbHNlKTtgXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlZ2lzdGVyRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRQYXRoIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoLCBleGlzdGluZ1ZhdWx0UGF0aCk7XG5cbiAgICBjb25zdCBwb2xsRXhwciA9IGJ1aWxkU2ltcGxlRXhwcmVzc2lvbihcbiAgICAgICdyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXBwLnZhdWx0LmFkYXB0ZXIuZ2V0QmFzZVBhdGgoKSk7J1xuICAgICk7XG5cbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBQb2xsaW5nIGZvciB2YXVsdCByZWFkaW5lc3MgKHRpbWVvdXQ9JHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiYXNlUGF0aCA9IGF3YWl0IHRoaXMuZXZhbHVhdGUocG9sbEV4cHIsIHsgY3dkOiB2YXVsdFBhdGggfSk7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKGJhc2VQYXRoKSA9PT0gdmF1bHRQYXRoKSB7XG4gICAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVhZHkuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVmF1bHQgbm90IHJlYWR5IHlldC5cbiAgICAgIH1cbiAgICAgIGF3YWl0IGRlbGF5KFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBhdCAke3ZhdWx0UGF0aH0gZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zYCk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSB2YXVsdCBmcm9tIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBTY2hlZHVsZXMgdGhlIHZhdWx0IHdpbmRvdyB0byBjbG9zZSwgd2FpdHMsIHRoZW4gcmVtb3ZlcyB0aGUgdmF1bHRcbiAgICogZnJvbSB0aGUgcmVnaXN0cnkgdmlhIGB2YXVsdC1yZW1vdmVgIElQQy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5yZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVW5yZWdpc3RlcmluZyB2YXVsdDogY2xvc2luZyB3aW5kb3cgZm9yICR7dmF1bHRQYXRofS4uLmApO1xuICAgIGNvbnN0IGRlc3Ryb3lFeHByID0gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAod2luZG93LmVsZWN0cm9uICYmIHdpbmRvdy5lbGVjdHJvbi5yZW1vdGUpIHtcbiAgICAgICAgICB3aW5kb3cuZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKGRlc3Ryb3lFeHByLCB7IGN3ZDogdmF1bHRQYXRoLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBXaW5kb3cgZGVzdHJveSBjb21tYW5kIHNlbnQuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFdpbmRvdyBkZXN0cm95IGZhaWxlZCAobm9uLWZhdGFsKTogJHtzZXJpYWxpemVFcnJvcihlcnJvcil9YCk7XG4gICAgfVxuXG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gV2FpdGluZyBmb3Igd2luZG93IHRvIGNsb3NlLi4uJyk7XG4gICAgYXdhaXQgZGVsYXkoVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFJlbW92aW5nIHZhdWx0IGZyb20gcmVnaXN0cnkuLi4nKTtcbiAgICBjb25zdCByZW1vdmVFeHByID0gYnVpbGRJcGNFeHByZXNzaW9uKFxuICAgICAgYHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtcmVtb3ZlJywgJHtKU09OLnN0cmluZ2lmeSh2YXVsdFBhdGgpfSk7YFxuICAgICk7XG4gICAgY29uc3QgZXhpc3RpbmdWYXVsdEZvclJlbW92YWwgPSBnZXRBbnlSZWdpc3RlcmVkVmF1bHRQYXRoKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCkge1xuICAgICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlbW92ZUV4cHIsIHsgY3dkOiBleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCwgdGltZW91dEluTWlsbGlzZWNvbmRzOiBWQVVMVF9FVkFMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gTm8gZXhpc3RpbmcgdmF1bHQgdG8gdGFyZ2V0IGZvciByZW1vdmFsIElQQyBcdTIwMTQgc2tpcHBpbmcuJyk7XG4gICAgICB9XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCByZW1vdmVkIGZyb20gcmVnaXN0cnkuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFZhdWx0IHJlZ2lzdHJ5IHJlbW92YWwgZmFpbGVkIChub24tZmF0YWwpOiAke3NlcmlhbGl6ZUVycm9yKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIE9ic2lkaWFuIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0gUEFUSC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYXNzZXJ0Q2xpQXZhaWxhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZSBvYnNpZGlhbicgOiAnd2hpY2ggb2JzaWRpYW4nO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2JzaWRpYW4gQ0xJIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSBPYnNpZGlhbiBpcyBpbnN0YWxsZWQgYW5kIGl0cyBDTEkgaXMgaW4geW91ciBQQVRILicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGBlbmFibGUtcGx1Z2luLTx2YXVsdElkPmAgaW4gT2JzaWRpYW4ncyBsb2NhbFN0b3JhZ2UgdG8gcHJldmVudFxuICAgKiB0aGUgXCJEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvciBvZiB0aGlzIHZhdWx0P1wiIGRpYWxvZyBmcm9tIGFwcGVhcmluZ1xuICAgKiB3aGVuIGEgdmF1bHQgd2l0aCBjb21tdW5pdHkgcGx1Z2lucyBpcyBvcGVuZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKlxuICAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgYHZhdWx0LW9wZW5gIElQQyAoc28gdGhlIHZhdWx0IElEIGV4aXN0cyBpblxuICAgKiBgb2JzaWRpYW4uanNvbmApIGFuZCBiZWZvcmUgdGhlIG5ldyB2YXVsdCB3aW5kb3cgZmluaXNoZXMgbG9hZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqIEBwYXJhbSBldmFsVGFyZ2V0VmF1bHRQYXRoIC0gVGhlIHZhdWx0IHBhdGggdG8gdXNlIGFzIGV2YWwgdGFyZ2V0IChhbiBleGlzdGluZywgbG9hZGVkIHZhdWx0KS5cbiAgICogICBsb2NhbFN0b3JhZ2UgaXMgc2hhcmVkIGFjcm9zcyBhbGwgT2JzaWRpYW4gd2luZG93cyAoc2FtZSBFbGVjdHJvbiBvcmlnaW4pLCBzbyB0aGVcbiAgICogICBgbG9jYWxTdG9yYWdlLnNldEl0ZW1gIGNhbGwgY2FuIHJ1biBpbiBhbnkgbG9hZGVkIHZhdWx0IHdpbmRvdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5hYmxlUGx1Z2luc0luTG9jYWxTdG9yYWdlKHZhdWx0UGF0aDogc3RyaW5nLCBldmFsVGFyZ2V0VmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2YXVsdElkID0gZ2V0VmF1bHRJZCh2YXVsdFBhdGgpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gQ291bGQgbm90IGZpbmQgdmF1bHQgSUQgXHUyMDE0IHNraXBwaW5nIGxvY2FsU3RvcmFnZSB0cnVzdCBmbGFnLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVuYWJsZUV4cHIgPSBidWlsZFNpbXBsZUV4cHJlc3Npb24oXG4gICAgICBgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJHtKU09OLnN0cmluZ2lmeShgZW5hYmxlLXBsdWdpbi0ke3ZhdWx0SWR9YCl9LCAndHJ1ZScpO2BcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUoZW5hYmxlRXhwciwgeyBjd2Q6IGV2YWxUYXJnZXRWYXVsdFBhdGggfSk7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gU2V0IGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfSBpbiBsb2NhbFN0b3JhZ2UuYCk7XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoZXMgT2JzaWRpYW4gYmluYXJ5IGFuZCByZXRyaWVzIHRoZSBldmFsIHVudGlsIGl0IHJlc3BvbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBDTEkgY29tbWFuZCBhcnJheSB0byByZXRyeS5cbiAgICogQHBhcmFtIGN3ZCAtIFRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlT2JzaWRpYW5SdW5uaW5nQW5kUmV0cnkoY29tbWFuZDogc3RyaW5nW10sIGN3ZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gaXMgbm90IHJ1bm5pbmcuIFN0YXJ0aW5nIE9ic2lkaWFuLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQoKSwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gVGhlIGxhdW5jaCBjb21tYW5kIG1heSBmYWlsIG9uIHNvbWUgc3lzdGVtcyBcdTIwMTQgd2UnbGwgc3RpbGwgdHJ5IHBvbGxpbmcuXG4gICAgfVxuXG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUG9sbGluZyBmb3IgT2JzaWRpYW4gQ0xJICh0aW1lb3V0PSR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgYXdhaXQgZGVsYXkoQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgY3dkLCBpc1F1aWV0OiB0cnVlIH0pO1xuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBDTEkgcmVzcG9uZGVkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBpZiAoIW1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gbm90IHJlYWR5IHlldCwgcmV0cnlpbmcuLi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ic2lkaWFuIGRpZCBub3Qgc3RhcnQgd2l0aGluICR7U3RyaW5nKEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmApO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGFzeW5jIElJRkUgdGhhdCB3YWl0cyBmb3IgbGF5b3V0IHJlYWR5IGFuZCBleGVjdXRlcyBhbiBJUEMgY2FsbC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZClgIHNvIHRoZSBDTEkgcHJvZHVjZXMgYChubyBvdXRwdXQpYC5cbiAqXG4gKiBAcGFyYW0gaXBjU3RhdGVtZW50IC0gVGhlIElQQyBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIFRoZSBJSUZFIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBidWlsZElwY0V4cHJlc3Npb24oaXBjU3RhdGVtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGlwY1N0YXRlbWVudCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb250ZW50IG9mIGEgdGVtcG9yYXJ5IGAuY2pzYCBzY3JpcHQgZmlsZS5cbiAqXG4gKiBUaGUgc2NyaXB0IGRlZmluZXMgYW4gYXN5bmMgYGludm9rZSgpYCBmdW5jdGlvbiB0aGF0IGV2YWx1YXRlcyB0aGVcbiAqIGV4cHJlc3Npb24sIHdyaXRlcyB0aGUgcmVzdWx0IChvciBlcnJvcikgdG8gYHJlc3VsdFBhdGhgLCBhbmQgaXNcbiAqIGV4cG9ydGVkIGZvciB0aGUgQ0xJIHRvIGByZXF1aXJlKClgIGFuZCBjYWxsLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSByZXN1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHJlc3VsdCBmaWxlLlxuICogQHBhcmFtIGludm9rZU5hbWUgLSBUaGUgdW5pcXVlIGZ1bmN0aW9uIG5hbWUgdG8gZXhwb3J0IChhdm9pZHMgY29sbGlzaW9ucykuXG4gKiBAcmV0dXJucyBUaGUgc2NyaXB0IGZpbGUgY29udGVudC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTY3JpcHRGaWxlKGV4cHJlc3Npb246IHN0cmluZywgcmVzdWx0UGF0aDogc3RyaW5nLCBpbnZva2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHRQYXRoSnNvbiA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpKTtcbiAgcmV0dXJuIGBcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgc2VyaWFsaXplRXJyb3IgPSAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhzZXJpYWxpemVFcnJvcil9O1xuXG5hc3luYyBmdW5jdGlvbiAke2ludm9rZU5hbWV9KCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgke2V4cHJlc3Npb259KTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFwiXCIsIHR5cGU6IFwidW5kZWZpbmVkXCIgfSkpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKCR7cmVzdWx0UGF0aEpzb259LCBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiBcIlwiLCB0eXBlOiBcIm51bGxcIiB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFN0cmluZyhyZXN1bHQpIH0pKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGZzLndyaXRlRmlsZVN5bmMoJHtyZXN1bHRQYXRoSnNvbn0sIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IHNlcmlhbGl6ZUVycm9yKGVyciksIHR5cGU6IFwiZXJyb3JcIiB9KSk7XG4gIH1cbn1cblxuZXhwb3J0cy4ke2ludm9rZU5hbWV9ID0gJHtpbnZva2VOYW1lfTtcbmA7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc2ltcGxlIGFzeW5jIElJRkUgZXhwcmVzc2lvbiB0aGF0IHdhaXRzIGZvciBsYXlvdXQgcmVhZHkuXG4gKlxuICogQHBhcmFtIGJvZHkgLSBUaGUgSmF2YVNjcmlwdCBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBUaGUgSUlGRSBleHByZXNzaW9uIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTaW1wbGVFeHByZXNzaW9uKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgKGFzeW5jICgpID0+IHtcbiAgaWYgKCFhcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gIH1cbiAgJHtib2R5fVxufSkoKWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBsYXVuY2ggdGhlIE9ic2lkaWFuIGJpbmFyeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCgpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke2xvY2FsQXBwRGF0YX1cXFxcUHJvZ3JhbXNcXFxcT2JzaWRpYW5cXFxcT2JzaWRpYW4uZXhlXCJgO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbiAmJztcbiAgfVxuXG4gIHJldHVybiAnb2JzaWRpYW4gJic7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFTQSxTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsWUFBWTtBQUNyQixPQUFPLGFBQWE7QUFPcEIsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsV0FBVztBQUNwQixTQUFTLFlBQVk7QUFDckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFB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
|
|
@@ -7,6 +7,7 @@ import http from "node:http";
|
|
|
7
7
|
import { join } from "node:path";
|
|
8
8
|
import process from "node:process";
|
|
9
9
|
import { remote } from "webdriverio";
|
|
10
|
+
import { buildEmulatorArgs } from "./emulator-args.mjs";
|
|
10
11
|
import { log } from "./log.mjs";
|
|
11
12
|
import { AppiumTransport } from "./transport-appium.mjs";
|
|
12
13
|
import { DesktopCdpTransport } from "./transport-desktop-cdp.mjs";
|
|
@@ -251,8 +252,9 @@ class AppiumTransportFactory {
|
|
|
251
252
|
}
|
|
252
253
|
startEmulator(avdName) {
|
|
253
254
|
const emulatorBinary = this.resolveEmulatorBinary();
|
|
254
|
-
|
|
255
|
-
|
|
255
|
+
const args = buildEmulatorArgs(avdName);
|
|
256
|
+
this.log(`Running: ${emulatorBinary} ${args.join(" ")}`);
|
|
257
|
+
const child = spawn(emulatorBinary, args, {
|
|
256
258
|
detached: true,
|
|
257
259
|
stdio: ["ignore", "ignore", "ignore"]
|
|
258
260
|
});
|
|
@@ -378,4 +380,4 @@ export {
|
|
|
378
380
|
createTransportFromOptions,
|
|
379
381
|
getOrCreateTransport
|
|
380
382
|
};
|
|
381
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZXhlY0ZpbGUsXG4gIGV4ZWNGaWxlU3luYyxcbiAgc3Bhd25cbn0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ25vZGU6aHR0cCc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuaW1wb3J0IHsgQXBwaXVtVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLm1qcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAubWpzJztcbmltcG9ydCB7IERlc2t0b3BDbGlUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS5tanMnO1xuXG5jb25zdCBBUFBfUEFDS0FHRSA9ICdtZC5vYnNpZGlhbic7XG5jb25zdCBBUFBfQUNUSVZJVFkgPSBgJHtBUFBfUEFDS0FHRX0uTWFpbkFjdGl2aXR5YDtcbmNvbnN0IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuY29uc3QgQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfQ09VTlQgPSAxO1xuY29uc3QgQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MDAwMDtcbmNvbnN0IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuY29uc3QgQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBDRFBfREVGQVVMVF9QT1JUID0gODMxNTtcbmNvbnN0IENPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDA7XG5jb25zdCBERUZBVUxUX1RSQU5TUE9SVF9UWVBFID0gJ29ic2lkaWFuLWNsaSc7XG5jb25zdCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbmNvbnN0IEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMjAwMDA7XG5jb25zdCBLRVlDT0RFX01FTlUgPSA4MjtcbmNvbnN0IEtFWUNPREVfV0FLRVVQID0gMjI0O1xuY29uc3QgU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBcHBpdW1UcmFuc3BvcnRGYWN0b3J5LnN0YXJ0QXBwaXVtQW5kRW11bGF0b3J9LlxuICovXG5pbnRlcmZhY2UgU3RhcnRBcHBpdW1BbmRFbXVsYXRvclBhcmFtcyB7XG4gIC8qKiBUaGUgQXBwaXVtIHNlcnZlciBVUkwuICovXG4gIGFwcGl1bVVybDogVVJMO1xuXG4gIC8qKiBBVkQgbmFtZSB0byBhdXRvLXN0YXJ0IGlmIHRoZSBkZXZpY2UgaXMgbm90IGNvbm5lY3RlZC4gKi9cbiAgYXZkTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogRGV2aWNlIFVESUQuICovXG4gIGRldmljZUlkOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBBcHBpdW0gc2VydmVyIHBvcnQuICovXG4gIHBvcnQ6IG51bWJlcjtcblxuICAvKiogV2hldGhlciBBcHBpdW0gYXV0by1zdGFydCBpcyBhbGxvd2VkLiAqL1xuICBzaG91bGRBdXRvU3RhcnRBcHBpdW0/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG5sZXQgY2FjaGVkVHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYWxsIEFwcGl1bSB0cmFuc3BvcnQgY3JlYXRpb24gbG9naWMsIGluY2x1ZGluZyBBcHBpdW0gc2VydmVyXG4gKiBzdGFydHVwLCBlbXVsYXRvciBtYW5hZ2VtZW50LCBhbmQgV2ViRHJpdmVySU8gc2Vzc2lvbiBlc3RhYmxpc2htZW50LlxuICpcbiAqIFVzaW5nIGEgY2xhc3MgYXZvaWRzIHRocmVhZGluZyB0aGUgdHJhbnNwb3J0IGB0eXBlYCBsYWJlbCB0aHJvdWdoIGV2ZXJ5XG4gKiBoZWxwZXIgZnVuY3Rpb24gXHUyMDE0IGB0aGlzLmxvZygpYCBhdXRvbWF0aWNhbGx5IHByZWZpeGVzIGl0LlxuICovXG5jbGFzcyBBcHBpdW1UcmFuc3BvcnRGYWN0b3J5IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBBcHBpdW0gdHJhbnNwb3J0IGJ5IGVzdGFibGlzaGluZyBhIFdlYkRyaXZlcklPIHNlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW5kcm9pZCBBcHBpdW0gdHJhbnNwb3J0IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgY29uZmlndXJlZCBBcHBpdW0gdHJhbnNwb3J0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShvcHRpb25zOiBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICAgIHRoaXMubG9nKGBDcmVhdGluZyBBcHBpdW1UcmFuc3BvcnQgKHVybD0ke29wdGlvbnMuYXBwaXVtVXJsfSwgZGV2aWNlPSR7b3B0aW9ucy5kZXZpY2VJZH0pYCk7XG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKG9wdGlvbnMuYXBwaXVtVXJsKTtcblxuICAgIGNvbnN0IHBvcnQgPSBOdW1iZXIodXJsLnBvcnQpO1xuICAgIGlmIChpc05hTihwb3J0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvcnQgaW4gYXBwaXVtVXJsOiAke3VybC5wb3J0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcElkID0gb3B0aW9ucy5hcHBJZCA/PyBBUFBfUEFDS0FHRTtcblxuICAgIGxldCBhcHBpdW1Qcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVtdWxhdG9yUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIFthcHBpdW1Qcm9jZXNzLCBlbXVsYXRvclByb2Nlc3NdID0gYXdhaXQgdGhpcy5zdGFydEFwcGl1bUFuZEVtdWxhdG9yKHtcbiAgICAgICAgYXBwaXVtVXJsOiB1cmwsXG4gICAgICAgIGF2ZE5hbWU6IG9wdGlvbnMuYXZkTmFtZSxcbiAgICAgICAgZGV2aWNlSWQ6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNob3VsZEF1dG9TdGFydEFwcGl1bTogb3B0aW9ucy5zaG91bGRBdXRvU3RhcnRBcHBpdW1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxvZyhcbiAgICAgICAgYENvbm5lY3RpbmcgdG8gQXBwaXVtIChkZXZpY2U9JHtvcHRpb25zLmRldmljZUlkfSwgYXBwPSR7YXBwSWR9LCByZXRyeVRpbWVvdXQ6ICR7U3RyaW5nKEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcywgcmV0cmllczogJHtcbiAgICAgICAgICBTdHJpbmcoQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfQ09VTlQpXG4gICAgICAgIH0pLi4uYFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCByZW1vdGUoe1xuICAgICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgICAnYXBwaXVtOmFwcEFjdGl2aXR5JzogQVBQX0FDVElWSVRZLFxuICAgICAgICAgICdhcHBpdW06YXBwUGFja2FnZSc6IGFwcElkLFxuICAgICAgICAgICdhcHBpdW06YXV0b0dyYW50UGVybWlzc2lvbnMnOiB0cnVlLFxuICAgICAgICAgICdhcHBpdW06YXV0b21hdGlvbk5hbWUnOiAnVWlBdXRvbWF0b3IyJyxcbiAgICAgICAgICAnYXBwaXVtOm5ld0NvbW1hbmRUaW1lb3V0JzogQ09NTUFORF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICAnYXBwaXVtOm5vUmVzZXQnOiB0cnVlLFxuICAgICAgICAgICdhcHBpdW06c2V0dGluZ3MnOiB7XG4gICAgICAgICAgICAnYXBwaXVtOmNocm9tZWRyaXZlckF1dG9kb3dubG9hZCc6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgICdhcHBpdW06c2tpcFNlcnZlckluc3RhbGxhdGlvbic6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTp1ZGlkJzogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgICAnYXBwaXVtOnVpYXV0b21hdG9yMlNlcnZlckxhdW5jaFRpbWVvdXQnOiBTRVJWRVJfTEFVTkNIX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgICdwbGF0Zm9ybU5hbWUnOiAnQW5kcm9pZCdcbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5ULFxuICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgbG9nTGV2ZWw6ICd3YXJuJyxcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lLFxuICAgICAgICBwb3J0XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sb2coJ0FwcGl1bSBzZXNzaW9uIGVzdGFibGlzaGVkLicpO1xuICAgICAgY29uc3QgYXBwaXVtVHJhbnNwb3J0ID0gbmV3IEFwcGl1bVRyYW5zcG9ydCh7XG4gICAgICAgIGFwcElkLFxuICAgICAgICBicm93c2VyLFxuICAgICAgICBkZXZpY2VJZDogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgcGxhdGZvcm06ICdhbmRyb2lkJyxcbiAgICAgICAgLi4uKG9wdGlvbnMudmF1bHRCYXNlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHsgdmF1bHRCYXNlUGF0aDogb3B0aW9ucy52YXVsdEJhc2VQYXRoIH0pXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxEaXNwb3NlID0gYXBwaXVtVHJhbnNwb3J0LmRpc3Bvc2UuYmluZChhcHBpdW1UcmFuc3BvcnQpO1xuICAgICAgY29uc3QgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCA9IGFwcGl1bVRyYW5zcG9ydDtcbiAgICAgIHRyYW5zcG9ydC5kaXNwb3NlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzcG9zZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmMgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRyYW5zcG9ydDtcblxuICAgICAgZnVuY3Rpb24ga2lsbEF1dG9TdGFydGVkUHJvY2Vzc2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgICAvLyBDYW5ub3QgdXNlIHRoaXMubG9nIGluc2lkZSBuZXN0ZWQgZnVuY3Rpb24gXHUyMDE0IGB0aGlzYCBpcyBub3QgY2FwdHVyZWQuXG4gICAgICAgICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHtvcHRpb25zLnR5cGV9XSBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbXVsYXRvclByb2Nlc3MpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWUoZW11bGF0b3JQcm9jZXNzKTtcbiAgICAgICAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke29wdGlvbnMudHlwZX1dIEF1dG8tc3RhcnRlZCBlbXVsYXRvciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChhcHBpdW1Qcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgdGhpcy5sb2coJ0tpbGxlZCBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICBpZiAoZW11bGF0b3JQcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShlbXVsYXRvclByb2Nlc3MpO1xuICAgICAgICB0aGlzLmxvZygnS2lsbGVkIGF1dG8tc3RhcnRlZCBlbXVsYXRvciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQXBwaXVtUmVhY2hhYmxlKHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1c1VybCA9IG5ldyBVUkwoJy9zdGF0dXMnLCB1cmwpO1xuICAgICAgY29uc3QgcmVxID0gaHR0cC5nZXQoc3RhdHVzVXJsLCB7IHRpbWVvdXQ6IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKHJlcykgPT4ge1xuICAgICAgICByZXMucmVzdW1lKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufSBkaWQgbm90IHJlc3BvbmQgd2l0aGluICR7U3RyaW5nKEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlYWNoIEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufTogJHtlcnIubWVzc2FnZX0uIElzIHRoZSBBcHBpdW0gc2VydmVyIHJ1bm5pbmc/YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0RldmljZUNvbm5lY3RlZChkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBleGVjRmlsZSgnYWRiJywgWydkZXZpY2VzJ10sIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBydW4gJ2FkYiBkZXZpY2VzJzogJHtlcnJvci5tZXNzYWdlfS4gSXMgQURCIGluc3RhbGxlZCBhbmQgaW4gUEFUSD9gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZyhgQURCIHN0ZGVycjogJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpLmZpbHRlcigobGluZSkgPT4gbGluZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBkZXZpY2VMaW5lID0gbGluZXMuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKGRldmljZUlkKSk7XG4gICAgcmV0dXJuIGRldmljZUxpbmU/LmluY2x1ZGVzKCdcXHRkZXZpY2UnKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlRGV2aWNlQ29ubmVjdGVkKGF2ZE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy5sb2coYENoZWNraW5nIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQgdmlhIEFEQi4uLmApO1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGlzIGNvbm5lY3RlZC5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdmROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGlzIG5vdCBjb25uZWN0ZWQuIFN0YXJ0IHRoZSBlbXVsYXRvciBiZWZvcmUgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyxgXG4gICAgICAgICAgKyAnIG9yIHNldCBhdmROYW1lIGluIHRyYW5zcG9ydCBvcHRpb25zIHRvIGF1dG8tc3RhcnQgaXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IG5vdCBmb3VuZCwgc3RhcnRpbmcgZW11bGF0b3IgQVZEIFwiJHthdmROYW1lfVwiLi4uYCk7XG4gICAgY29uc3QgZW11bGF0b3JQcm9jZXNzID0gdGhpcy5zdGFydEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckRldmljZShkZXZpY2VJZCk7XG4gICAgdGhpcy5sb2coYEVtdWxhdG9yIFwiJHthdmROYW1lfVwiIHN0YXJ0ZWQsIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQuYCk7XG4gICAgcmV0dXJuIGVtdWxhdG9yUHJvY2VzcztcbiAgfVxuXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dGhpcy50eXBlfV0gJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW11bGF0b3JCaW5hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZGtSb290ID0gcHJvY2Vzcy5lbnZbJ0FORFJPSURfSE9NRSddID8/IHByb2Nlc3MuZW52WydBTkRST0lEX1NES19ST09UJ107XG4gICAgaWYgKCFzZGtSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZmluZCBBbmRyb2lkIGVtdWxhdG9yOiBuZWl0aGVyIEFORFJPSURfSE9NRSBub3IgQU5EUk9JRF9TREtfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGpvaW4oc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ2VtdWxhdG9yJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRLZXlFdmVudChkZXZpY2VJZDogc3RyaW5nLCBrZXlDb2RlOiBudW1iZXIsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICdhZGInLFxuICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdpbnB1dCcsICdrZXlldmVudCcsIFN0cmluZyhrZXlDb2RlKV0sXG4gICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgICAgICBgV2FybmluZzogZmFpbGVkIHRvICR7ZGVzY3JpcHRpb259IChrZXlldmVudCAke1N0cmluZyhrZXlDb2RlKX0pOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEFwcGl1bUFuZEVtdWxhdG9yKHBhcmFtczogU3RhcnRBcHBpdW1BbmRFbXVsYXRvclBhcmFtcyk6IFByb21pc2U8W0NoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZCwgQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkXT4ge1xuICAgIGNvbnN0IHsgYXBwaXVtVXJsLCBhdmROYW1lLCBkZXZpY2VJZCwgcG9ydCwgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtIH0gPSBwYXJhbXM7XG5cbiAgICBsZXQgbmVlZHNBcHBpdW1TdGFydCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sb2coYENoZWNraW5nIEFwcGl1bSBzZXJ2ZXIgYXQgJHthcHBpdW1VcmwuaHJlZn0uLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZShhcHBpdW1VcmwpO1xuICAgICAgdGhpcy5sb2coJ0FwcGl1bSBzZXJ2ZXIgaXMgcmVhY2hhYmxlLicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoc2hvdWxkQXV0b1N0YXJ0QXBwaXVtID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG5lZWRzQXBwaXVtU3RhcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhcHBpdW1Qcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmVlZHNBcHBpdW1TdGFydCkge1xuICAgICAgdGhpcy5sb2coYEFwcGl1bSBub3QgcmVhY2hhYmxlLCBhdXRvLXN0YXJ0aW5nIG9uIHBvcnQgJHtTdHJpbmcocG9ydCl9Li4uYCk7XG4gICAgICBhcHBpdW1Qcm9jZXNzID0gdGhpcy5zdGFydEFwcGl1bVNlcnZlcihwb3J0KTtcbiAgICB9XG5cbiAgICBjb25zdCBbLCBlbXVsYXRvclByb2Nlc3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgbmVlZHNBcHBpdW1TdGFydFxuICAgICAgICA/IHRoaXMud2FpdEZvckFwcGl1bVJlYWR5KGFwcGl1bVVybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2coJ0F1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyIGlzIHJlYWR5LicpO1xuICAgICAgICB9KVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgdGhpcy5lbnN1cmVEZXZpY2VDb25uZWN0ZWQoYXZkTmFtZSwgZGV2aWNlSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc107XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QXBwaXVtU2VydmVyKHBvcnQ6IG51bWJlcik6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihgbnB4IGFwcGl1bSAtLWxvZy10aW1lc3RhbXAgLS1wb3J0ICR7U3RyaW5nKHBvcnQpfWAsIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaW5oZXJpdCcsICdpbmhlcml0J11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVtdWxhdG9yKGF2ZE5hbWU6IHN0cmluZyk6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgZW11bGF0b3JCaW5hcnkgPSB0aGlzLnJlc29sdmVFbXVsYXRvckJpbmFyeSgpO1xuICAgIHRoaXMubG9nKGBSdW5uaW5nOiAke2VtdWxhdG9yQmluYXJ5fSAtYXZkICR7YXZkTmFtZX0gLW5vLXNuYXBzaG90LXNhdmVgKTtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGVtdWxhdG9yQmluYXJ5LCBbJy1hdmQnLCBhdmROYW1lLCAnLW5vLXNuYXBzaG90LXNhdmUnXSwge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddXG4gICAgfSk7XG5cbiAgICBjaGlsZC51bnJlZigpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckFwcGl1bVJlYWR5KHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgQXBwaXVtIGF0ICR7dXJsLmhyZWZ9ICh0aW1lb3V0OiAke1N0cmluZyhBUFBJVU1fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKVxuICAgICAgfW1zKS4uLmBcbiAgICApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBpdW1SZWFjaGFibGUodXJsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckJvb3QoZGV2aWNlSWQ6IHN0cmluZywgZGVhZGxpbmU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlbWFpbmluZ01zID0gTWF0aC5tYXgoMCwgZGVhZGxpbmUgLSBEYXRlLm5vdygpKTtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciBkZXZpY2UgJHtkZXZpY2VJZH0gdG8gZmluaXNoIGJvb3RpbmcgKHJlbWFpbmluZzogJHtTdHJpbmcocmVtYWluaW5nTXMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUylcbiAgICAgIH1tcykuLi5gXG4gICAgKTtcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGNvbnN0IGlzQm9vdGVkID0gYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICAgJ2FkYicsXG4gICAgICAgICAgWyctcycsIGRldmljZUlkLCAnc2hlbGwnLCAnZ2V0cHJvcCcsICdzeXMuYm9vdF9jb21wbGV0ZWQnXSxcbiAgICAgICAgICB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSxcbiAgICAgICAgICAoX2Vycm9yLCBzdGRvdXQpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0LnRyaW0oKSA9PT0gJzEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGlzQm9vdGVkKSB7XG4gICAgICAgIHRoaXMubG9nKGBEZXZpY2UgJHtkZXZpY2VJZH0gYm9vdCBjb21wbGV0ZWQuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGNvbm5lY3RlZCBidXQgZGlkIG5vdCBmaW5pc2ggYm9vdGluZyB3aXRoaW4gJHtTdHJpbmcoRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JEZXZpY2UoZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIGRldmljZSAke2RldmljZUlkfSB0byBhcHBlYXIgaW4gQURCICh0aW1lb3V0OiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcywgcG9sbDogJHtcbiAgICAgICAgU3RyaW5nKEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpXG4gICAgICB9bXMpLi4uYFxuICAgICk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRGV2aWNlQ29ubmVjdGVkKGRldmljZUlkKSkge1xuICAgICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGFwcGVhcmVkIGluIEFEQiwgd2FpdGluZyBmb3IgYm9vdCB0byBjb21wbGV0ZS4uLmApO1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JCb290KGRldmljZUlkLCBkZWFkbGluZSk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FrZVNjcmVlbihkZXZpY2VJZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFbXVsYXRvciBkZXZpY2UgXCIke2RldmljZUlkfVwiIGRpZCBub3QgYXBwZWFyIHdpdGhpbiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FrZVNjcmVlbihkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coYFdha2luZyBzY3JlZW4gb24gZGV2aWNlICR7ZGV2aWNlSWR9Li4uYCk7XG5cbiAgICBhd2FpdCB0aGlzLnNlbmRLZXlFdmVudChkZXZpY2VJZCwgS0VZQ09ERV9XQUtFVVAsICd3YWtlIHNjcmVlbicpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEtleUV2ZW50KGRldmljZUlkLCBLRVlDT0RFX01FTlUsICdkaXNtaXNzIGxvY2sgc2NyZWVuJyk7XG5cbiAgICB0aGlzLmxvZyhgU2NyZWVuIHdha2UgY29tcGxldGUgb24gZGV2aWNlICR7ZGV2aWNlSWR9LmApO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRyYW5zcG9ydCBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBDTEkgdHJhbnNwb3J0LlxuICogQHJldHVybnMgQSBuZXcgdHJhbnNwb3J0IGluc3RhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdHlwZSA9IG9wdGlvbnM/LnR5cGUgPz8gREVGQVVMVF9UUkFOU1BPUlRfVFlQRTtcblxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy50eXBlID09PSAnb2JzaWRpYW4tY2xpJykge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dHlwZX1dIENyZWF0aW5nIERlc2t0b3BDbGlUcmFuc3BvcnRgKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDbGlUcmFuc3BvcnQoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jZHAnKSB7XG4gICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHt0eXBlfV0gQ3JlYXRpbmcgRGVza3RvcENkcFRyYW5zcG9ydCAoaG9zdD0ke29wdGlvbnMuaG9zdCA/PyAnbG9jYWxob3N0J30sIHBvcnQ9JHtTdHJpbmcob3B0aW9ucy5wb3J0ID8/IENEUF9ERUZBVUxUX1BPUlQpfSlgKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDZHBUcmFuc3BvcnQoe1xuICAgICAgLi4uKG9wdGlvbnMuaG9zdCAhPT0gdW5kZWZpbmVkICYmIHsgY2RwSG9zdDogb3B0aW9ucy5ob3N0IH0pLFxuICAgICAgLi4uKG9wdGlvbnMucG9ydCAhPT0gdW5kZWZpbmVkICYmIHsgY2RwUG9ydDogb3B0aW9ucy5wb3J0IH0pLFxuICAgICAgLi4uKG9wdGlvbnMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBmYWN0b3J5ID0gbmV3IEFwcGl1bVRyYW5zcG9ydEZhY3RvcnkodHlwZSk7XG4gIHJldHVybiBmYWN0b3J5LmNyZWF0ZShvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FjaGVkIHRyYW5zcG9ydCBpbnN0YW5jZSwgY3JlYXRpbmcgb25lIGZyb20gdGhlIGdpdmVuIG9wdGlvbnNcbiAqIGlmIG5vdCBhbHJlYWR5IGNhY2hlZC5cbiAqXG4gKiBUaGUgdHJhbnNwb3J0IGlzIGNhY2hlZCBwZXIgd29ya2VyIHByb2Nlc3Mgc28gV2ViU29ja2V0L0FwcGl1bSBzZXNzaW9uc1xuICogYXJlIHJldXNlZCBhY3Jvc3MgY2FsbHMgd2l0aGluIHRoZSBzYW1lIHRlc3Qgd29ya2VyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBUaGUgY2FjaGVkIG9yIG5ld2x5IGNyZWF0ZWQgdHJhbnNwb3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVUcmFuc3BvcnQob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgaWYgKGNhY2hlZFRyYW5zcG9ydCkge1xuICAgIHJldHVybiBjYWNoZWRUcmFuc3BvcnQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gU2luZ2xlLXRocmVhZGVkIHdvcmtlcjsgbm8gY29uY3VycmVudCB3cml0ZXMuXG4gIGNhY2hlZFRyYW5zcG9ydCA9IHJlc3VsdDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBLaWxscyBhIGNoaWxkIHByb2Nlc3MgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLlxuICpcbiAqIE9uIFdpbmRvd3MsIGBjaGlsZC5raWxsKClgIG9ubHkgc2VuZHMgU0lHVEVSTSB0byB0aGUgZGlyZWN0IHByb2Nlc3MsXG4gKiBsZWF2aW5nIHNwYXduZWQgZ3JhbmRjaGlsZHJlbiAoZS5nLiBRRU1VLCBVaUF1dG9tYXRvcikgYWxpdmUuXG4gKiBgdGFza2tpbGwgL0YgL1QgL1BJRGAgZm9yY2VmdWxseSB0ZXJtaW5hdGVzIHRoZSBlbnRpcmUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY2hpbGQgLSBUaGUgY2hpbGQgcHJvY2VzcyB0byBraWxsLlxuICovXG5mdW5jdGlvbiBraWxsUHJvY2Vzc1RyZWUoY2hpbGQ6IENoaWxkUHJvY2Vzcyk6IHZvaWQge1xuICBpZiAoY2hpbGQucGlkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHRyeSB7XG4gICAgICBleGVjRmlsZVN5bmMoJ3Rhc2traWxsJywgWycvRicsICcvVCcsICcvUElEJywgU3RyaW5nKGNoaWxkLnBpZCldLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKFxuICAgICAgICBgW3RyYW5zcG9ydC1mYWN0b3J5XSB0YXNra2lsbCBmb3IgUElEICR7U3RyaW5nKGNoaWxkLnBpZCl9IGZhaWxlZCAobWF5IGhhdmUgYWxyZWFkeSBleGl0ZWQpOiAke1xuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InXG4gICAgICAgIH1gXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjaGlsZC5raWxsKCdTSUdLSUxMJyk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQVVBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sVUFBVTtBQUNqQixTQUFTLFlBQVk7QUFDckIsT0FBTyxhQUFhO0FBQ3BCLFNBQVMsY0FBYztBQVF2QixTQUFTLFdBQVc7QUFDcEIsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUywyQkFBMkI7QUFFcEMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZSxHQUFHLFdBQVc7QUFDbkMsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxrREFBa0Q7QUFDeEQsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSw2Q0FBNkM7QUFDbkQsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSw4Q0FBOEM7QUFDcEQsTUFBTSx3Q0FBd0M7QUFDOUMsTUFBTSxlQUFlO0FBQ3JCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0sd0NBQXdDO0FBc0I5QyxJQUFJO0FBU0osTUFBTSx1QkFBdUI7QUFBQSxFQUNWO0FBQUEsRUFFVixZQUFZLE1BQWM7QUFDL0IsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxPQUFPLFNBQTRFO0FBQzlGLFNBQUssSUFBSSxpQ0FBaUMsUUFBUSxTQUFTLFlBQVksUUFBUSxRQUFRLEdBQUc7QUFFMUYsVUFBTSxNQUFNLElBQUksSUFBSSxRQUFRLFNBQVM7QUFFckMsVUFBTSxPQUFPLE9BQU8sSUFBSSxJQUFJO0FBQzVCLFFBQUksTUFBTSxJQUFJLEdBQUc7QUFDZixZQUFNLElBQUks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O0FBQy9ELFVBQU0sS0FBSyxhQUFhLFVBQVUsY0FBYyxxQkFBcUI7QUFFckUsU0FBSyxJQUFJLGtDQUFrQyxRQUFRLEdBQUc7QUFBQSxFQUN4RDtBQUNGO0FBUUEsZUFBc0IsMkJBQTJCLFNBQWdFO0FBQy9HLFFBQU0sT0FBTyxTQUFTLFFBQVE7QUFFOUIsTUFBSSxDQUFDLFdBQVcsUUFBUSxTQUFTLGdCQUFnQjtBQUMvQyxRQUFJLHNCQUFzQixJQUFJLGdDQUFnQztBQUM5RCxXQUFPLElBQUksb0JBQW9CO0FBQUEsRUFDakM7QUFFQSxNQUFJLFFBQVEsU0FBUyxnQkFBZ0I7QUFDbkMsUUFBSSxzQkFBc0IsSUFBSSx3Q0FBd0MsUUFBUSxRQUFRLFdBQVcsVUFBVSxPQUFPLFFBQVEsUUFBUSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3RKLFdBQU8sSUFBSSxvQkFBb0I7QUFBQSxNQUM3QixHQUFJLFFBQVEsU0FBUyxVQUFhLEVBQUUsU0FBUyxRQUFRLEtBQUs7QUFBQSxNQUMxRCxHQUFJLFFBQVEsU0FBUyxVQUFhLEVBQUUsU0FBUyxRQUFRLEtBQUs7QUFBQSxNQUMxRCxHQUFJLFFBQVEsaUNBQWlDLFVBQWEsRUFBRSw4QkFBOEIsUUFBUSw2QkFBNkI7QUFBQSxJQUNqSSxDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0sVUFBVSxJQUFJLHVCQUF1QixJQUFJO0FBQy9DLFNBQU8sUUFBUSxPQUFPLE9BQU87QUFDL0I7QUFZQSxlQUFzQixxQkFBcUIsU0FBZ0U7QUFDekcsTUFBSSxpQkFBaUI7QUFDbkIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsTUFBTSwyQkFBMkIsT0FBTztBQUV2RCxvQkFBa0I7QUFDbEIsU0FBTztBQUNUO0FBV0EsU0FBUyxnQkFBZ0IsT0FBMkI7QUFDbEQsTUFBSSxNQUFNLFFBQVEsUUFBVztBQUMzQjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFFBQUk7QUFDRixtQkFBYSxZQUFZLENBQUMsTUFBTSxNQUFNLFFBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFBQSxJQUN2RixTQUFTLE9BQWdCO0FBQ3ZCO0FBQUEsUUFDRSx3Q0FBd0MsT0FBTyxNQUFNLEdBQUcsQ0FBQyxzQ0FDdkQsaUJBQWlCLFFBQVEsTUFBTSxVQUFVLGVBQzNDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLE9BQU87QUFDTCxVQUFNLEtBQUssU0FBUztBQUFBLEVBQ3RCO0FBQ0Y7IiwKICAibmFtZXMiOiBbImtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcyJdCn0K
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZXhlY0ZpbGUsXG4gIGV4ZWNGaWxlU3luYyxcbiAgc3Bhd25cbn0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ25vZGU6aHR0cCc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBidWlsZEVtdWxhdG9yQXJncyB9IGZyb20gJy4vZW11bGF0b3ItYXJncy5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2xpVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jbGkubWpzJztcblxuY29uc3QgQVBQX1BBQ0tBR0UgPSAnbWQub2JzaWRpYW4nO1xuY29uc3QgQVBQX0FDVElWSVRZID0gYCR7QVBQX1BBQ0tBR0V9Lk1haW5BY3Rpdml0eWA7XG5jb25zdCBBREJfREVWSUNFX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5UID0gMTtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuY29uc3QgQ0RQX0RFRkFVTFRfUE9SVCA9IDgzMTU7XG5jb25zdCBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwO1xuY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfVFlQRSA9ICdvYnNpZGlhbi1jbGknO1xuY29uc3QgRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTIwMDAwO1xuY29uc3QgS0VZQ09ERV9NRU5VID0gODI7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDtcbmNvbnN0IFNFUlZFUl9MQVVOQ0hfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQXBwaXVtVHJhbnNwb3J0RmFjdG9yeS5zdGFydEFwcGl1bUFuZEVtdWxhdG9yfS5cbiAqL1xuaW50ZXJmYWNlIFN0YXJ0QXBwaXVtQW5kRW11bGF0b3JQYXJhbXMge1xuICAvKiogVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMLiAqL1xuICBhcHBpdW1Vcmw6IFVSTDtcblxuICAvKiogQVZEIG5hbWUgdG8gYXV0by1zdGFydCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBjb25uZWN0ZWQuICovXG4gIGF2ZE5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIERldmljZSBVRElELiAqL1xuICBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgQXBwaXVtIHNlcnZlciBwb3J0LiAqL1xuICBwb3J0OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgQXBwaXVtIGF1dG8tc3RhcnQgaXMgYWxsb3dlZC4gKi9cbiAgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxubGV0IGNhY2hlZFRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRW5jYXBzdWxhdGVzIGFsbCBBcHBpdW0gdHJhbnNwb3J0IGNyZWF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgQXBwaXVtIHNlcnZlclxuICogc3RhcnR1cCwgZW11bGF0b3IgbWFuYWdlbWVudCwgYW5kIFdlYkRyaXZlcklPIHNlc3Npb24gZXN0YWJsaXNobWVudC5cbiAqXG4gKiBVc2luZyBhIGNsYXNzIGF2b2lkcyB0aHJlYWRpbmcgdGhlIHRyYW5zcG9ydCBgdHlwZWAgbGFiZWwgdGhyb3VnaCBldmVyeVxuICogaGVscGVyIGZ1bmN0aW9uIFx1MjAxNCBgdGhpcy5sb2coKWAgYXV0b21hdGljYWxseSBwcmVmaXhlcyBpdC5cbiAqL1xuY2xhc3MgQXBwaXVtVHJhbnNwb3J0RmFjdG9yeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQXBwaXVtIHRyYW5zcG9ydCBieSBlc3RhYmxpc2hpbmcgYSBXZWJEcml2ZXJJTyBzZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuZHJvaWQgQXBwaXVtIHRyYW5zcG9ydCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBIGNvbmZpZ3VyZWQgQXBwaXVtIHRyYW5zcG9ydC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGUob3B0aW9uczogT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgICB0aGlzLmxvZyhgQ3JlYXRpbmcgQXBwaXVtVHJhbnNwb3J0ICh1cmw9JHtvcHRpb25zLmFwcGl1bVVybH0sIGRldmljZT0ke29wdGlvbnMuZGV2aWNlSWR9KWApO1xuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRpb25zLmFwcGl1bVVybCk7XG5cbiAgICBjb25zdCBwb3J0ID0gTnVtYmVyKHVybC5wb3J0KTtcbiAgICBpZiAoaXNOYU4ocG9ydCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3J0IGluIGFwcGl1bVVybDogJHt1cmwucG9ydH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWQgPz8gQVBQX1BBQ0tBR0U7XG5cbiAgICBsZXQgYXBwaXVtUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuICAgIGxldCBlbXVsYXRvclByb2Nlc3M6IENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBbYXBwaXVtUHJvY2VzcywgZW11bGF0b3JQcm9jZXNzXSA9IGF3YWl0IHRoaXMuc3RhcnRBcHBpdW1BbmRFbXVsYXRvcih7XG4gICAgICAgIGFwcGl1bVVybDogdXJsLFxuICAgICAgICBhdmROYW1lOiBvcHRpb25zLmF2ZE5hbWUsXG4gICAgICAgIGRldmljZUlkOiBvcHRpb25zLmRldmljZUlkLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzaG91bGRBdXRvU3RhcnRBcHBpdW06IG9wdGlvbnMuc2hvdWxkQXV0b1N0YXJ0QXBwaXVtXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sb2coXG4gICAgICAgIGBDb25uZWN0aW5nIHRvIEFwcGl1bSAoZGV2aWNlPSR7b3B0aW9ucy5kZXZpY2VJZH0sIGFwcD0ke2FwcElkfSwgcmV0cnlUaW1lb3V0OiAke1N0cmluZyhBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMsIHJldHJpZXM6ICR7XG4gICAgICAgICAgU3RyaW5nKEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5UKVxuICAgICAgICB9KS4uLmBcbiAgICAgICk7XG4gICAgICBjb25zdCBicm93c2VyID0gYXdhaXQgcmVtb3RlKHtcbiAgICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgICAgJ2FwcGl1bTphcHBBY3Rpdml0eSc6IEFQUF9BQ1RJVklUWSxcbiAgICAgICAgICAnYXBwaXVtOmFwcFBhY2thZ2UnOiBhcHBJZCxcbiAgICAgICAgICAnYXBwaXVtOmF1dG9HcmFudFBlcm1pc3Npb25zJzogdHJ1ZSxcbiAgICAgICAgICAnYXBwaXVtOmF1dG9tYXRpb25OYW1lJzogJ1VpQXV0b21hdG9yMicsXG4gICAgICAgICAgJ2FwcGl1bTpuZXdDb21tYW5kVGltZW91dCc6IENPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgJ2FwcGl1bTpub1Jlc2V0JzogdHJ1ZSxcbiAgICAgICAgICAnYXBwaXVtOnNldHRpbmdzJzoge1xuICAgICAgICAgICAgJ2FwcGl1bTpjaHJvbWVkcml2ZXJBdXRvZG93bmxvYWQnOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnYXBwaXVtOnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24nOiB0cnVlLFxuICAgICAgICAgICdhcHBpdW06dWRpZCc6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgICAgJ2FwcGl1bTp1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JzogU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICAncGxhdGZvcm1OYW1lJzogJ0FuZHJvaWQnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVCxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICAgICAgcG9ydFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKCdBcHBpdW0gc2Vzc2lvbiBlc3RhYmxpc2hlZC4nKTtcbiAgICAgIGNvbnN0IGFwcGl1bVRyYW5zcG9ydCA9IG5ldyBBcHBpdW1UcmFuc3BvcnQoe1xuICAgICAgICBhcHBJZCxcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgZGV2aWNlSWQ6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gICAgICAgIC4uLihvcHRpb25zLnZhdWx0QmFzZVBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0QmFzZVBhdGg6IG9wdGlvbnMudmF1bHRCYXNlUGF0aCB9KVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsRGlzcG9zZSA9IGFwcGl1bVRyYW5zcG9ydC5kaXNwb3NlLmJpbmQoYXBwaXVtVHJhbnNwb3J0KTtcbiAgICAgIGNvbnN0IHRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQgPSBhcHBpdW1UcmFuc3BvcnQ7XG4gICAgICB0cmFuc3BvcnQuZGlzcG9zZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBvcmlnaW5hbERpc3Bvc2UoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBraWxsQXV0b1N0YXJ0ZWRQcm9jZXNzZXMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdHJhbnNwb3J0LmRpc3Bvc2VTeW5jID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBraWxsQXV0b1N0YXJ0ZWRQcm9jZXNzZXMoKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0cmFuc3BvcnQ7XG5cbiAgICAgIGZ1bmN0aW9uIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKGFwcGl1bVByb2Nlc3MpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWUoYXBwaXVtUHJvY2Vzcyk7XG4gICAgICAgICAgLy8gQ2Fubm90IHVzZSB0aGlzLmxvZyBpbnNpZGUgbmVzdGVkIGZ1bmN0aW9uIFx1MjAxNCBgdGhpc2AgaXMgbm90IGNhcHR1cmVkLlxuICAgICAgICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7b3B0aW9ucy50eXBlfV0gQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgc3RvcHBlZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW11bGF0b3JQcm9jZXNzKSB7XG4gICAgICAgICAga2lsbFByb2Nlc3NUcmVlKGVtdWxhdG9yUHJvY2Vzcyk7XG4gICAgICAgICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHtvcHRpb25zLnR5cGV9XSBBdXRvLXN0YXJ0ZWQgZW11bGF0b3Igc3RvcHBlZC5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgICAgICBraWxsUHJvY2Vzc1RyZWUoYXBwaXVtUHJvY2Vzcyk7XG4gICAgICAgIHRoaXMubG9nKCdLaWxsZWQgYXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgYWZ0ZXIgY29ubmVjdGlvbiBmYWlsdXJlLicpO1xuICAgICAgfVxuICAgICAgaWYgKGVtdWxhdG9yUHJvY2Vzcykge1xuICAgICAgICBraWxsUHJvY2Vzc1RyZWUoZW11bGF0b3JQcm9jZXNzKTtcbiAgICAgICAgdGhpcy5sb2coJ0tpbGxlZCBhdXRvLXN0YXJ0ZWQgZW11bGF0b3IgYWZ0ZXIgY29ubmVjdGlvbiBmYWlsdXJlLicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FwcGl1bVJlYWNoYWJsZSh1cmw6IFVSTCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXNVcmwgPSBuZXcgVVJMKCcvc3RhdHVzJywgdXJsKTtcbiAgICAgIGNvbnN0IHJlcSA9IGh0dHAuZ2V0KHN0YXR1c1VybCwgeyB0aW1lb3V0OiBBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0sIChyZXMpID0+IHtcbiAgICAgICAgcmVzLnJlc3VtZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcbiAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBcHBpdW0gc2VydmVyIGF0ICR7dXJsLm9yaWdpbn0gZGlkIG5vdCByZXNwb25kIHdpdGhpbiAke1N0cmluZyhBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy4gSXMgdGhlIEFwcGl1bSBzZXJ2ZXIgcnVubmluZz9gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXEub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCByZWFjaCBBcHBpdW0gc2VydmVyIGF0ICR7dXJsLm9yaWdpbn06ICR7ZXJyLm1lc3NhZ2V9LiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZXhlY0ZpbGUoJ2FkYicsIFsnZGV2aWNlcyddLCB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gcnVuICdhZGIgZGV2aWNlcyc6ICR7ZXJyb3IubWVzc2FnZX0uIElzIEFEQiBpbnN0YWxsZWQgYW5kIGluIFBBVEg/YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2coYEFEQiBzdGRlcnI6ICR7c3RkZXJyLnRyaW0oKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpbmVzID0gb3V0cHV0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUubGVuZ3RoID4gMCk7XG4gICAgY29uc3QgZGV2aWNlTGluZSA9IGxpbmVzLmZpbmQoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aChkZXZpY2VJZCkpO1xuICAgIHJldHVybiBkZXZpY2VMaW5lPy5pbmNsdWRlcygnXFx0ZGV2aWNlJykgPz8gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZURldmljZUNvbm5lY3RlZChhdmROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGRldmljZUlkOiBzdHJpbmcpOiBQcm9taXNlPENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMubG9nKGBDaGVja2luZyBkZXZpY2UgJHtkZXZpY2VJZH0gaXMgY29ubmVjdGVkIHZpYSBBREIuLi5gKTtcblxuICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRGV2aWNlQ29ubmVjdGVkKGRldmljZUlkKSkge1xuICAgICAgdGhpcy5sb2coYERldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghYXZkTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGV2aWNlIFwiJHtkZXZpY2VJZH1cIiBpcyBub3QgY29ubmVjdGVkLiBTdGFydCB0aGUgZW11bGF0b3IgYmVmb3JlIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMsYFxuICAgICAgICAgICsgJyBvciBzZXQgYXZkTmFtZSBpbiB0cmFuc3BvcnQgb3B0aW9ucyB0byBhdXRvLXN0YXJ0IGl0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2coYERldmljZSAke2RldmljZUlkfSBub3QgZm91bmQsIHN0YXJ0aW5nIGVtdWxhdG9yIEFWRCBcIiR7YXZkTmFtZX1cIi4uLmApO1xuICAgIGNvbnN0IGVtdWxhdG9yUHJvY2VzcyA9IHRoaXMuc3RhcnRFbXVsYXRvcihhdmROYW1lKTtcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2UoZGV2aWNlSWQpO1xuICAgIHRoaXMubG9nKGBFbXVsYXRvciBcIiR7YXZkTmFtZX1cIiBzdGFydGVkLCBkZXZpY2UgJHtkZXZpY2VJZH0gaXMgY29ubmVjdGVkLmApO1xuICAgIHJldHVybiBlbXVsYXRvclByb2Nlc3M7XG4gIH1cblxuICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke3RoaXMudHlwZX1dICR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUVtdWxhdG9yQmluYXJ5KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2RrUm9vdCA9IHByb2Nlc3MuZW52WydBTkRST0lEX0hPTUUnXSA/PyBwcm9jZXNzLmVudlsnQU5EUk9JRF9TREtfUk9PVCddO1xuICAgIGlmICghc2RrUm9vdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGZpbmQgQW5kcm9pZCBlbXVsYXRvcjogbmVpdGhlciBBTkRST0lEX0hPTUUgbm9yIEFORFJPSURfU0RLX1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBqb2luKHNka1Jvb3QsICdlbXVsYXRvcicsICdlbXVsYXRvcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kS2V5RXZlbnQoZGV2aWNlSWQ6IHN0cmluZywga2V5Q29kZTogbnVtYmVyLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGV4ZWNGaWxlKFxuICAgICAgICAnYWRiJyxcbiAgICAgICAgWyctcycsIGRldmljZUlkLCAnc2hlbGwnLCAnaW5wdXQnLCAna2V5ZXZlbnQnLCBTdHJpbmcoa2V5Q29kZSldLFxuICAgICAgICB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICAgICAgYFdhcm5pbmc6IGZhaWxlZCB0byAke2Rlc2NyaXB0aW9ufSAoa2V5ZXZlbnQgJHtTdHJpbmcoa2V5Q29kZSl9KTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICd1bmtub3duIGVycm9yJ31gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRBcHBpdW1BbmRFbXVsYXRvcihwYXJhbXM6IFN0YXJ0QXBwaXVtQW5kRW11bGF0b3JQYXJhbXMpOiBQcm9taXNlPFtDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQsIENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZF0+IHtcbiAgICBjb25zdCB7IGFwcGl1bVVybCwgYXZkTmFtZSwgZGV2aWNlSWQsIHBvcnQsIHNob3VsZEF1dG9TdGFydEFwcGl1bSB9ID0gcGFyYW1zO1xuXG4gICAgbGV0IG5lZWRzQXBwaXVtU3RhcnQgPSBmYWxzZTtcblxuICAgIHRoaXMubG9nKGBDaGVja2luZyBBcHBpdW0gc2VydmVyIGF0ICR7YXBwaXVtVXJsLmhyZWZ9Li4uYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBpdW1SZWFjaGFibGUoYXBwaXVtVXJsKTtcbiAgICAgIHRoaXMubG9nKCdBcHBpdW0gc2VydmVyIGlzIHJlYWNoYWJsZS4nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgaWYgKHNob3VsZEF1dG9TdGFydEFwcGl1bSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBuZWVkc0FwcGl1bVN0YXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgYXBwaXVtUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5lZWRzQXBwaXVtU3RhcnQpIHtcbiAgICAgIHRoaXMubG9nKGBBcHBpdW0gbm90IHJlYWNoYWJsZSwgYXV0by1zdGFydGluZyBvbiBwb3J0ICR7U3RyaW5nKHBvcnQpfS4uLmApO1xuICAgICAgYXBwaXVtUHJvY2VzcyA9IHRoaXMuc3RhcnRBcHBpdW1TZXJ2ZXIocG9ydCk7XG4gICAgfVxuXG4gICAgY29uc3QgWywgZW11bGF0b3JQcm9jZXNzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIG5lZWRzQXBwaXVtU3RhcnRcbiAgICAgICAgPyB0aGlzLndhaXRGb3JBcHBpdW1SZWFkeShhcHBpdW1VcmwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nKCdBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBpcyByZWFkeS4nKTtcbiAgICAgICAgfSlcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICAgIHRoaXMuZW5zdXJlRGV2aWNlQ29ubmVjdGVkKGF2ZE5hbWUsIGRldmljZUlkKVxuICAgIF0pO1xuXG4gICAgcmV0dXJuIFthcHBpdW1Qcm9jZXNzLCBlbXVsYXRvclByb2Nlc3NdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEFwcGl1bVNlcnZlcihwb3J0OiBudW1iZXIpOiBDaGlsZFByb2Nlc3Mge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oYG5weCBhcHBpdW0gLS1sb2ctdGltZXN0YW1wIC0tcG9ydCAke1N0cmluZyhwb3J0KX1gLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ2luaGVyaXQnLCAnaW5oZXJpdCddXG4gICAgfSk7XG5cbiAgICBjaGlsZC51bnJlZigpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFbXVsYXRvcihhdmROYW1lOiBzdHJpbmcpOiBDaGlsZFByb2Nlc3Mge1xuICAgIGNvbnN0IGVtdWxhdG9yQmluYXJ5ID0gdGhpcy5yZXNvbHZlRW11bGF0b3JCaW5hcnkoKTtcbiAgICBjb25zdCBhcmdzID0gYnVpbGRFbXVsYXRvckFyZ3MoYXZkTmFtZSk7XG4gICAgdGhpcy5sb2coYFJ1bm5pbmc6ICR7ZW11bGF0b3JCaW5hcnl9ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihlbXVsYXRvckJpbmFyeSwgYXJncywge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddXG4gICAgfSk7XG5cbiAgICBjaGlsZC51bnJlZigpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckFwcGl1bVJlYWR5KHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgQXBwaXVtIGF0ICR7dXJsLmhyZWZ9ICh0aW1lb3V0OiAke1N0cmluZyhBUFBJVU1fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoQVBQSVVNX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKVxuICAgICAgfW1zKS4uLmBcbiAgICApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBpdW1SZWFjaGFibGUodXJsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckJvb3QoZGV2aWNlSWQ6IHN0cmluZywgZGVhZGxpbmU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlbWFpbmluZ01zID0gTWF0aC5tYXgoMCwgZGVhZGxpbmUgLSBEYXRlLm5vdygpKTtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciBkZXZpY2UgJHtkZXZpY2VJZH0gdG8gZmluaXNoIGJvb3RpbmcgKHJlbWFpbmluZzogJHtTdHJpbmcocmVtYWluaW5nTXMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUylcbiAgICAgIH1tcykuLi5gXG4gICAgKTtcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGNvbnN0IGlzQm9vdGVkID0gYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICAgJ2FkYicsXG4gICAgICAgICAgWyctcycsIGRldmljZUlkLCAnc2hlbGwnLCAnZ2V0cHJvcCcsICdzeXMuYm9vdF9jb21wbGV0ZWQnXSxcbiAgICAgICAgICB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSxcbiAgICAgICAgICAoX2Vycm9yLCBzdGRvdXQpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0LnRyaW0oKSA9PT0gJzEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGlzQm9vdGVkKSB7XG4gICAgICAgIHRoaXMubG9nKGBEZXZpY2UgJHtkZXZpY2VJZH0gYm9vdCBjb21wbGV0ZWQuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGNvbm5lY3RlZCBidXQgZGlkIG5vdCBmaW5pc2ggYm9vdGluZyB3aXRoaW4gJHtTdHJpbmcoRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JEZXZpY2UoZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIGRldmljZSAke2RldmljZUlkfSB0byBhcHBlYXIgaW4gQURCICh0aW1lb3V0OiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcywgcG9sbDogJHtcbiAgICAgICAgU3RyaW5nKEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpXG4gICAgICB9bXMpLi4uYFxuICAgICk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRGV2aWNlQ29ubmVjdGVkKGRldmljZUlkKSkge1xuICAgICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGFwcGVhcmVkIGluIEFEQiwgd2FpdGluZyBmb3IgYm9vdCB0byBjb21wbGV0ZS4uLmApO1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JCb290KGRldmljZUlkLCBkZWFkbGluZSk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FrZVNjcmVlbihkZXZpY2VJZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFbXVsYXRvciBkZXZpY2UgXCIke2RldmljZUlkfVwiIGRpZCBub3QgYXBwZWFyIHdpdGhpbiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FrZVNjcmVlbihkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coYFdha2luZyBzY3JlZW4gb24gZGV2aWNlICR7ZGV2aWNlSWR9Li4uYCk7XG5cbiAgICBhd2FpdCB0aGlzLnNlbmRLZXlFdmVudChkZXZpY2VJZCwgS0VZQ09ERV9XQUtFVVAsICd3YWtlIHNjcmVlbicpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEtleUV2ZW50KGRldmljZUlkLCBLRVlDT0RFX01FTlUsICdkaXNtaXNzIGxvY2sgc2NyZWVuJyk7XG5cbiAgICB0aGlzLmxvZyhgU2NyZWVuIHdha2UgY29tcGxldGUgb24gZGV2aWNlICR7ZGV2aWNlSWR9LmApO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRyYW5zcG9ydCBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBDTEkgdHJhbnNwb3J0LlxuICogQHJldHVybnMgQSBuZXcgdHJhbnNwb3J0IGluc3RhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdHlwZSA9IG9wdGlvbnM/LnR5cGUgPz8gREVGQVVMVF9UUkFOU1BPUlRfVFlQRTtcblxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy50eXBlID09PSAnb2JzaWRpYW4tY2xpJykge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dHlwZX1dIENyZWF0aW5nIERlc2t0b3BDbGlUcmFuc3BvcnRgKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDbGlUcmFuc3BvcnQoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jZHAnKSB7XG4gICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHt0eXBlfV0gQ3JlYXRpbmcgRGVza3RvcENkcFRyYW5zcG9ydCAoaG9zdD0ke29wdGlvbnMuaG9zdCA/PyAnbG9jYWxob3N0J30sIHBvcnQ9JHtTdHJpbmcob3B0aW9ucy5wb3J0ID8/IENEUF9ERUZBVUxUX1BPUlQpfSlgKTtcbiAgICByZXR1cm4gbmV3IERlc2t0b3BDZHBUcmFuc3BvcnQoe1xuICAgICAgLi4uKG9wdGlvbnMuaG9zdCAhPT0gdW5kZWZpbmVkICYmIHsgY2RwSG9zdDogb3B0aW9ucy5ob3N0IH0pLFxuICAgICAgLi4uKG9wdGlvbnMucG9ydCAhPT0gdW5kZWZpbmVkICYmIHsgY2RwUG9ydDogb3B0aW9ucy5wb3J0IH0pLFxuICAgICAgLi4uKG9wdGlvbnMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBmYWN0b3J5ID0gbmV3IEFwcGl1bVRyYW5zcG9ydEZhY3RvcnkodHlwZSk7XG4gIHJldHVybiBmYWN0b3J5LmNyZWF0ZShvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FjaGVkIHRyYW5zcG9ydCBpbnN0YW5jZSwgY3JlYXRpbmcgb25lIGZyb20gdGhlIGdpdmVuIG9wdGlvbnNcbiAqIGlmIG5vdCBhbHJlYWR5IGNhY2hlZC5cbiAqXG4gKiBUaGUgdHJhbnNwb3J0IGlzIGNhY2hlZCBwZXIgd29ya2VyIHByb2Nlc3Mgc28gV2ViU29ja2V0L0FwcGl1bSBzZXNzaW9uc1xuICogYXJlIHJldXNlZCBhY3Jvc3MgY2FsbHMgd2l0aGluIHRoZSBzYW1lIHRlc3Qgd29ya2VyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBUaGUgY2FjaGVkIG9yIG5ld2x5IGNyZWF0ZWQgdHJhbnNwb3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVUcmFuc3BvcnQob3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgaWYgKGNhY2hlZFRyYW5zcG9ydCkge1xuICAgIHJldHVybiBjYWNoZWRUcmFuc3BvcnQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gU2luZ2xlLXRocmVhZGVkIHdvcmtlcjsgbm8gY29uY3VycmVudCB3cml0ZXMuXG4gIGNhY2hlZFRyYW5zcG9ydCA9IHJlc3VsdDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBLaWxscyBhIGNoaWxkIHByb2Nlc3MgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLlxuICpcbiAqIE9uIFdpbmRvd3MsIGBjaGlsZC5raWxsKClgIG9ubHkgc2VuZHMgU0lHVEVSTSB0byB0aGUgZGlyZWN0IHByb2Nlc3MsXG4gKiBsZWF2aW5nIHNwYXduZWQgZ3JhbmRjaGlsZHJlbiAoZS5nLiBRRU1VLCBVaUF1dG9tYXRvcikgYWxpdmUuXG4gKiBgdGFza2tpbGwgL0YgL1QgL1BJRGAgZm9yY2VmdWxseSB0ZXJtaW5hdGVzIHRoZSBlbnRpcmUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY2hpbGQgLSBUaGUgY2hpbGQgcHJvY2VzcyB0byBraWxsLlxuICovXG5mdW5jdGlvbiBraWxsUHJvY2Vzc1RyZWUoY2hpbGQ6IENoaWxkUHJvY2Vzcyk6IHZvaWQge1xuICBpZiAoY2hpbGQucGlkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHRyeSB7XG4gICAgICBleGVjRmlsZVN5bmMoJ3Rhc2traWxsJywgWycvRicsICcvVCcsICcvUElEJywgU3RyaW5nKGNoaWxkLnBpZCldLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nKFxuICAgICAgICBgW3RyYW5zcG9ydC1mYWN0b3J5XSB0YXNra2lsbCBmb3IgUElEICR7U3RyaW5nKGNoaWxkLnBpZCl9IGZhaWxlZCAobWF5IGhhdmUgYWxyZWFkeSBleGl0ZWQpOiAke1xuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InXG4gICAgICAgIH1gXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjaGlsZC5raWxsKCdTSUdLSUxMJyk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQVVBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sVUFBVTtBQUNqQixTQUFTLFlBQVk7QUFDckIsT0FBTyxhQUFhO0FBQ3BCLFNBQVMsY0FBYztBQVF2QixTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLFdBQVc7QUFDcEIsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUywyQkFBMkI7QUFFcEMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZSxHQUFHLFdBQVc7QUFDbkMsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxrREFBa0Q7QUFDeEQsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSw2Q0FBNkM7QUFDbkQsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSw4Q0FBOEM7QUFDcEQsTUFBTSx3Q0FBd0M7QUFDOUMsTUFBTSxlQUFlO0FBQ3JCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0sd0NBQXdDO0FBc0I5QyxJQUFJO0FBU0osTUFBTSx1QkFBdUI7QUFBQSxFQUNWO0FBQUEsRUFFVixZQUFZLE1BQWM7QUFDL0IsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxPQUFPLFNBQTRFO0FBQzlGLFNBQUssSUFBSSxpQ0FBaUMsUUFBUSxTQUFTLFlBQVksUUFBUSxRQUFRLEdBQUc7QUFFMUYsVUFBTSxNQUFNLElBQUksSUFBSSxRQUFRLFNBQVM7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RUFFQSxNQUFjLFdBQVcsVUFBaUM7QUFDeEQsU0FBSyxJQUFJLDJCQUEyQixRQUFRLEtBQUs7QUFFakQsVUFBTSxLQUFLLGFBQWEsVUFBVSxnQkFBZ0IsYUFBYTtBQUMvRCxVQUFNLEtBQUssYUFBYSxVQUFVLGNBQWMscUJBQXFCO0FBRXJFLFNBQUssSUFBSSxrQ0FBa0MsUUFBUSxHQUFHO0FBQUEsRUFDeEQ7QUFDRjtBQVFBLGVBQXNCLDJCQUEyQixTQUFnRTtBQUMvRyxRQUFNLE9BQU8sU0FBUyxRQUFRO0FBRTlCLE1BQUksQ0FBQyxXQUFXLFFBQVEsU0FBUyxnQkFBZ0I7QUFDL0MsUUFBSSxzQkFBc0IsSUFBSSxnQ0FBZ0M7QUFDOUQsV0FBTyxJQUFJLG9CQUFvQjtBQUFBLEVBQ2pDO0FBRUEsTUFBSSxRQUFRLFNBQVMsZ0JBQWdCO0FBQ25DLFFBQUksc0JBQXNCLElBQUksd0NBQXdDLFFBQVEsUUFBUSxXQUFXLFVBQVUsT0FBTyxRQUFRLFFBQVEsZ0JBQWdCLENBQUMsR0FBRztBQUN0SixXQUFPLElBQUksb0JBQW9CO0FBQUEsTUFDN0IsR0FBSSxRQUFRLFNBQVMsVUFBYSxFQUFFLFNBQVMsUUFBUSxLQUFLO0FBQUEsTUFDMUQsR0FBSSxRQUFRLFNBQVMsVUFBYSxFQUFFLFNBQVMsUUFBUSxLQUFLO0FBQUEsTUFDMUQsR0FBSSxRQUFRLGlDQUFpQyxVQUFhLEVBQUUsOEJBQThCLFFBQVEsNkJBQTZCO0FBQUEsSUFDakksQ0FBQztBQUFBLEVBQ0g7QUFFQSxRQUFNLFVBQVUsSUFBSSx1QkFBdUIsSUFBSTtBQUMvQyxTQUFPLFFBQVEsT0FBTyxPQUFPO0FBQy9CO0FBWUEsZUFBc0IscUJBQXFCLFNBQWdFO0FBQ3pHLE1BQUksaUJBQWlCO0FBQ25CLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxTQUFTLE1BQU0sMkJBQTJCLE9BQU87QUFFdkQsb0JBQWtCO0FBQ2xCLFNBQU87QUFDVDtBQVdBLFNBQVMsZ0JBQWdCLE9BQTJCO0FBQ2xELE1BQUksTUFBTSxRQUFRLFFBQVc7QUFDM0I7QUFBQSxFQUNGO0FBRUEsTUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyxRQUFJO0FBQ0YsbUJBQWEsWUFBWSxDQUFDLE1BQU0sTUFBTSxRQUFRLE9BQU8sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQUEsSUFDdkYsU0FBUyxPQUFnQjtBQUN2QjtBQUFBLFFBQ0Usd0NBQXdDLE9BQU8sTUFBTSxHQUFHLENBQUMsc0NBQ3ZELGlCQUFpQixRQUFRLE1BQU0sVUFBVSxlQUMzQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixPQUFPO0FBQ0wsVUFBTSxLQUFLLFNBQVM7QUFBQSxFQUN0QjtBQUNGOyIsCiAgIm5hbWVzIjogWyJraWxsQXV0b1N0YXJ0ZWRQcm9jZXNzZXMiXQp9Cg==
|
|
Binary file
|
package/package.json
CHANGED
|
Binary file
|