sliftutils 1.7.106 → 1.7.108
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/index.d.ts +7 -8
- package/package.json +1 -1
- package/storage/ArchivesDisk.ts +1 -1
- package/storage/archiveHelpers.d.ts +1 -4
- package/storage/archiveHelpers.ts +6 -13
- package/storage/dist/ArchivesDisk.ts.cache +3 -3
- package/storage/dist/archiveHelpers.ts.cache +9 -12
- package/storage/remoteStorage/dist/storageLogs.ts.cache +26 -17
- package/storage/remoteStorage/dist/storeSync.ts.cache +91 -59
- package/storage/remoteStorage/storageLogs.d.ts +1 -1
- package/storage/remoteStorage/storageLogs.ts +27 -17
- package/storage/remoteStorage/storeSync.d.ts +5 -3
- package/storage/remoteStorage/storeSync.ts +86 -53
|
@@ -12,7 +12,11 @@ const serverConfig_1 = require("./serverConfig");
|
|
|
12
12
|
const certs_1 = require("../../misc/https/certs");
|
|
13
13
|
// The storage server's operation log: every mutation (never the data itself - just what happened, to what, when, how big, and who asked), every error, and the synchronization key points, streamed as JSON lines into <storage folder>/logs (see StreamingLogs for the file lifecycle). Everything here is a safe no-op on processes that have no storage folder - logging must never be the thing that breaks a request.
|
|
14
14
|
exports.LOGS_FOLDER_NAME = "logs";
|
|
15
|
-
|
|
15
|
+
// NOT lazy: a failure to resolve the folder (the server config may simply not be SET yet this early in startup) must be retried on the next log call, not cached as "no logs ever"
|
|
16
|
+
let logsInstance;
|
|
17
|
+
function getLogs() {
|
|
18
|
+
if (logsInstance)
|
|
19
|
+
return logsInstance;
|
|
16
20
|
let folder;
|
|
17
21
|
try {
|
|
18
22
|
folder = path_1.default.join((0, serverConfig_1.getStorageFolder)(), exports.LOGS_FOLDER_NAME);
|
|
@@ -21,8 +25,9 @@ const getLogs = (0, caching_1.lazy)(() => {
|
|
|
21
25
|
return undefined;
|
|
22
26
|
}
|
|
23
27
|
hookErrorLogging();
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
logsInstance = new StreamingLogs_1.StreamingLogs({ folder, threadId: getThreadIdSafe() });
|
|
29
|
+
return logsInstance;
|
|
30
|
+
}
|
|
26
31
|
function firstExternalIPv4() {
|
|
27
32
|
for (let addresses of Object.values(os_1.default.networkInterfaces())) {
|
|
28
33
|
for (let address of addresses || []) {
|
|
@@ -32,26 +37,30 @@ function firstExternalIPv4() {
|
|
|
32
37
|
}
|
|
33
38
|
return undefined;
|
|
34
39
|
}
|
|
40
|
+
// Memoized on SUCCESS only: the thread cert may not be loaded yet when the first entries are written, and that must not permanently strip the thread id from every later entry
|
|
41
|
+
let cachedThreadId;
|
|
35
42
|
function getThreadIdSafe() {
|
|
36
43
|
var _a;
|
|
44
|
+
if (cachedThreadId)
|
|
45
|
+
return cachedThreadId;
|
|
37
46
|
try {
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
catch (_b) {
|
|
41
|
-
return undefined;
|
|
47
|
+
cachedThreadId = (0, certs_1.getOwnThreadId)(((_a = (0, serverConfig_1.getStorageServerConfigOptional)()) === null || _a === void 0 ? void 0 : _a.rootDomain) || "");
|
|
42
48
|
}
|
|
49
|
+
catch (_b) { }
|
|
50
|
+
return cachedThreadId;
|
|
43
51
|
}
|
|
44
|
-
|
|
45
|
-
|
|
52
|
+
const cachedIp = (0, caching_1.lazy)(() => firstExternalIPv4());
|
|
53
|
+
// threadId and domain are re-resolved until known (early entries may predate the config/certs); the rest never changes
|
|
54
|
+
function baseFields() {
|
|
46
55
|
var _a;
|
|
47
|
-
return
|
|
56
|
+
return {
|
|
48
57
|
pid: process.pid,
|
|
49
58
|
threadId: getThreadIdSafe(),
|
|
50
59
|
entryPoint: process.argv[1],
|
|
51
|
-
ip:
|
|
60
|
+
ip: cachedIp(),
|
|
52
61
|
domain: (_a = (0, serverConfig_1.getStorageServerConfigOptional)()) === null || _a === void 0 ? void 0 : _a.domain,
|
|
53
|
-
}
|
|
54
|
-
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
55
64
|
// Everything logged here goes BOTH to the storage log stream and the console - one call, never two. The console line carries only the entry (the base fields are constant per process, so they would just be noise there); the stream gets everything.
|
|
56
65
|
function write(kind, entry, alsoConsole) {
|
|
57
66
|
if (alsoConsole) {
|
|
@@ -62,9 +71,9 @@ function write(kind, entry, alsoConsole) {
|
|
|
62
71
|
return;
|
|
63
72
|
logs.log({ kind, time: Date.now(), ...baseFields(), ...entry });
|
|
64
73
|
}
|
|
65
|
-
/** One mutation the server performed: set/del/move/undelete/setLarge/routingConfig, plus the per-file synchronization writes ("sync get"/"sync set"). Sizes and times, never the data. internal marks writes pushed by a peer's synchronization rather than a client.
|
|
74
|
+
/** One mutation the server performed: set/del/move/undelete/setLarge/routingConfig, plus the per-file synchronization writes ("sync get"/"sync set"). Sizes and times, never the data. internal marks writes pushed by a peer's synchronization rather than a client. Stream-only - one entry per write is exactly what the console does NOT need. */
|
|
66
75
|
function logMutation(entry) {
|
|
67
|
-
write("mutation", entry,
|
|
76
|
+
write("mutation", entry, false);
|
|
68
77
|
}
|
|
69
78
|
exports.logMutation = logMutation;
|
|
70
79
|
/** A synchronization key point: scans and full syncs starting/finishing, reconciles, boundary scans - what an operator greps for to see whether the fleet is converging. Also printed to the console. */
|
|
@@ -115,5 +124,5 @@ async function readStorageLogFile(name) {
|
|
|
115
124
|
return await logs.readFileCompressed(name);
|
|
116
125
|
}
|
|
117
126
|
exports.readStorageLogFile = readStorageLogFile;
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlTG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLHlEQUFtRDtBQUNuRCxvREFBOEQ7QUFDOUQsaURBQWtGO0FBQ2xGLGtEQUF3RDtBQUV4RCwyWkFBMlo7QUFFOVksUUFBQSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFdkMsTUFBTSxPQUFPLEdBQUcsSUFBQSxjQUFJLEVBQUMsR0FBOEIsRUFBRTtJQUNqRCxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLENBQUM7UUFDRCxNQUFNLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFBLCtCQUFnQixHQUFFLEVBQUUsd0JBQWdCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ0wsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELGdCQUFnQixFQUFFLENBQUM7SUFDbkIsT0FBTyxJQUFJLDZCQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsaUJBQWlCO0lBQ3RCLEtBQUssSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUQsS0FBSyxJQUFJLE9BQU8sSUFBSSxTQUFTLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvRSxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLGVBQWU7O0lBQ3BCLElBQUksQ0FBQztRQUNE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SyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZKLENBQUM7WUFBQyxXQUFNLENBQUMsQ0FBQyxDQUFDO29CQUFTLENBQUM7Z0JBQ2pCLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDMUIsQ0FBQztRQUNMLENBQUMsQ0FBQztJQUNOLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILGdIQUFnSDtBQUN6RyxLQUFLLFVBQVUsbUJBQW1CO0lBQ3JDLElBQUksSUFBSSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQ3JCLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDckIsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBSkQsa0RBSUM7QUFFRCxzSEFBc0g7QUFDL0csS0FBSyxVQUFVLGtCQUFrQixDQUFDLElBQVk7SUFDakQsSUFBSSxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDckIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFORCxnREFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsYXp5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgU3RyZWFtaW5nTG9ncywgTG9nRmlsZUluZm8gfSBmcm9tIFwiLi4vU3RyZWFtaW5nTG9nc1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZUZvbGRlciwgZ2V0U3RvcmFnZVNlcnZlckNvbmZpZ09wdGlvbmFsIH0gZnJvbSBcIi4vc2VydmVyQ29uZmlnXCI7XG5pbXBvcnQgeyBnZXRPd25UaHJlYWRJZCB9IGZyb20gXCIuLi8uLi9taXNjL2h0dHBzL2NlcnRzXCI7XG5cbi8vIFRoZSBzdG9yYWdlIHNlcnZlcidzIG9wZXJhdGlvbiBsb2c6IGV2ZXJ5IG11dGF0aW9uIChuZXZlciB0aGUgZGF0YSBpdHNlbGYgLSBqdXN0IHdoYXQgaGFwcGVuZWQsIHRvIHdoYXQsIHdoZW4sIGhvdyBiaWcsIGFuZCB3aG8gYXNrZWQpLCBldmVyeSBlcnJvciwgYW5kIHRoZSBzeW5jaHJvbml6YXRpb24ga2V5IHBvaW50cywgc3RyZWFtZWQgYXMgSlNPTiBsaW5lcyBpbnRvIDxzdG9yYWdlIGZvbGRlcj4vbG9ncyAoc2VlIFN0cmVhbWluZ0xvZ3MgZm9yIHRoZSBmaWxlIGxpZmVjeWNsZSkuIEV2ZXJ5dGhpbmcgaGVyZSBpcyBhIHNhZmUgbm8tb3Agb24gcHJvY2Vzc2VzIHRoYXQgaGF2ZSBubyBzdG9yYWdlIGZvbGRlciAtIGxvZ2dpbmcgbXVzdCBuZXZlciBiZSB0aGUgdGhpbmcgdGhhdCBicmVha3MgYSByZXF1ZXN0LlxuXG5leHBvcnQgY29uc3QgTE9HU19GT0xERVJfTkFNRSA9IFwibG9nc1wiO1xuXG5jb25zdCBnZXRMb2dzID0gbGF6eSgoKTogU3RyZWFtaW5nTG9ncyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IGZvbGRlcjogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICAgIGZvbGRlciA9IHBhdGguam9pbihnZXRTdG9yYWdlRm9sZGVyKCksIExPR1NfRk9MREVSX05BTUUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBob29rRXJyb3JMb2dnaW5nKCk7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1pbmdMb2dzKHsgZm9sZGVyLCB0aHJlYWRJZDogZ2V0VGhyZWFkSWRTYWZlKCkgfSk7XG59KTtcblxuZnVuY3Rpb24gZmlyc3RFeHRlcm5hbElQdjQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGxldCBhZGRyZXNzZXMgb2YgT2JqZWN0LnZhbHVlcyhvcy5uZXR3b3JrSW50ZXJmYWNlcygpKSkge1xuICAgICAgICBmb3IgKGxldCBhZGRyZXNzIG9mIGFkZHJlc3NlcyB8fCBbXSkge1xuICAgICAgICAgICAgaWYgKGFkZHJlc3MuZmFtaWx5ID09PSBcIklQdjRcIiAmJiAhYWRkcmVzcy5pbnRlcm5hbCkgcmV0dXJuIGFkZHJlc3MuYWRkcmVzcztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRUaHJlYWRJZFNhZmUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0T3duVGhyZWFkSWQoZ2V0U3RvcmFnZVNlcnZlckNvbmZpZ09wdGlvbmFsKCk/LnJvb3REb21haW4gfHwgXCJcIik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vLyBDb21wdXRlZCBvbmNlOiBub25lIG9mIGl0IGNoYW5nZXMgb3ZlciBhIHByb2Nlc3MncyBsaWZldGltZVxuY29uc3QgYmFzZUZpZWxkcyA9IGxhenkoKCkgPT4gKHtcbiAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgIHRocmVhZElkOiBnZXRUaHJlYWRJZFNhZmUoKSxcbiAgICBlbnRyeVBvaW50OiBwcm9jZXNzLmFyZ3ZbMV0sXG4gICAgaXA6IGZpcnN0RXh0ZXJuYWxJUHY0KCksXG4gICAgZG9tYWluOiBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwoKT8uZG9tYWluLFxufSkpO1xuXG4vLyBFdmVyeXRoaW5nIGxvZ2dlZCBoZXJlIGdvZXMgQk9USCB0byB0aGUgc3RvcmFnZSBsb2cgc3RyZWFtIGFuZCB0aGUgY29uc29sZSAtIG9uZSBjYWxsLCBuZXZlciB0d28uIFRoZSBjb25zb2xlIGxpbmUgY2FycmllcyBvbmx5IHRoZSBlbnRyeSAodGhlIGJhc2UgZmllbGRzIGFyZSBjb25zdGFudCBwZXIgcHJvY2Vzcywgc28gdGhleSB3b3VsZCBqdXN0IGJlIG5vaXNlIHRoZXJlKTsgdGhlIHN0cmVhbSBnZXRzIGV2ZXJ5dGhpbmcuXG5mdW5jdGlvbiB3cml0ZShraW5kOiBzdHJpbmcsIGVudHJ5OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSwgYWxzb0NvbnNvbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoYWxzb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFske2tpbmR9XSAke0pTT04uc3RyaW5naWZ5KGVudHJ5KX1gKTtcbiAgICB9XG4gICAgbGV0IGxvZ3MgPSBnZXRMb2dzKCk7XG4gICAgaWYgKCFsb2dzKSByZXR1cm47XG4gICAgbG9ncy5sb2coeyBraW5kLCB0aW1lOiBEYXRlLm5vdygpLCAuLi5iYXNlRmllbGRzKCksIC4uLmVudHJ5IH0pO1xufVxuXG4vKiogT25lIG11dGF0aW9uIHRoZSBzZXJ2ZXIgcGVyZm9ybWVkOiBzZXQvZGVsL21vdmUvdW5kZWxldGUvc2V0TGFyZ2Uvcm91dGluZ0NvbmZpZywgcGx1cyB0aGUgcGVyLWZpbGUgc3luY2hyb25pemF0aW9uIHdyaXRlcyAoXCJzeW5jIGdldFwiL1wic3luYyBzZXRcIikuIFNpemVzIGFuZCB0aW1lcywgbmV2ZXIgdGhlIGRhdGEuIGludGVybmFsIG1hcmtzIHdyaXRlcyBwdXNoZWQgYnkgYSBwZWVyJ3Mgc3luY2hyb25pemF0aW9uIHJhdGhlciB0aGFuIGEgY2xpZW50LiBBbHNvIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nTXV0YXRpb24oZW50cnk6IHsgb3A6IHN0cmluZzsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHN0b3JlPzogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHRvUGF0aD86IHN0cmluZzsgc2l6ZT86IG51bWJlcjsgd3JpdGVUaW1lPzogbnVtYmVyOyBjYWxsZXJJZD86IHN0cmluZzsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB3cml0ZShcIm11dGF0aW9uXCIsIGVudHJ5LCB0cnVlKTtcbn1cblxuLyoqIEEgc3luY2hyb25pemF0aW9uIGtleSBwb2ludDogc2NhbnMgYW5kIGZ1bGwgc3luY3Mgc3RhcnRpbmcvZmluaXNoaW5nLCByZWNvbmNpbGVzLCBib3VuZGFyeSBzY2FucyAtIHdoYXQgYW4gb3BlcmF0b3IgZ3JlcHMgZm9yIHRvIHNlZSB3aGV0aGVyIHRoZSBmbGVldCBpcyBjb252ZXJnaW5nLiBBbHNvIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nU3luY0V2ZW50KGVudHJ5OiB7IGV2ZW50OiBzdHJpbmc7IHN0b3JlOiBzdHJpbmc7IHNvdXJjZT86IHN0cmluZzsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KTogdm9pZCB7XG4gICAgd3JpdGUoXCJzeW5jXCIsIGVudHJ5LCB0cnVlKTtcbn1cblxuLyoqIE9uZSBjb25zb2xlLmVycm9yIGlzIGFsbCBhbiBlcnJvciB0YWtlcyAoY29uc29sZS5lcnJvciBhbmQgY29uc29sZS53YXJuIGFyZSBIT09LRUQgdG8gZmVlZCB0aGUgc3RyZWFtKSAtIHRoaXMganVzdCBndWFyYW50ZWVzIHRoZSBob29rIGlzIGluc3RhbGxlZCBmaXJzdCwgZm9yIHZlcnktZWFybHkgY2FsbGVycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dTdG9yYWdlRXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgZ2V0TG9ncygpO1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG59XG5cbi8vIEV2ZXJ5dGhpbmcgY29uc29sZS5lcnJvcmVkIG9yIGNvbnNvbGUud2FybmVkIGFsc28gbGFuZHMgaW4gdGhlIGxvZyBzdHJlYW0gKHdpdGggYSByZWVudHJhbmN5IGd1YXJkOiBhIGZhaWx1cmUgSU5TSURFIGxvZ2dpbmcgbXVzdCBub3QgbG9nIGl0c2VsZiBmb3JldmVyKVxubGV0IHdyaXRpbmdIb29rZWQgPSBmYWxzZTtcbmNvbnN0IGhvb2tFcnJvckxvZ2dpbmcgPSBsYXp5KCgpID0+IHtcbiAgICBmb3IgKGxldCBsZXZlbCBvZiBbXCJlcnJvclwiLCBcIndhcm5cIl0gYXMgY29uc3QpIHtcbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29uc29sZVtsZXZlbF0uYmluZChjb25zb2xlKTtcbiAgICAgICAgY29uc29sZVtsZXZlbF0gPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICBvcmlnaW5hbCguLi5hcmdzKTtcbiAgICAgICAgICAgIGlmICh3cml0aW5nSG9va2VkKSByZXR1cm47XG4gICAgICAgICAgICB3cml0aW5nSG9va2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgd3JpdGUobGV2ZWwsIHsgbWVzc2FnZTogYXJncy5tYXAoeCA9PiB0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiAmJiB4IHx8ICgoeCBhcyBFcnJvcik/LnN0YWNrID8/IEpTT04uc3RyaW5naWZ5KHgpKSkuam9pbihcIiBcIikuc2xpY2UoMCwgNTAwMCkgfSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBjYXRjaCB7IH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgd3JpdGluZ0hvb2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn0pO1xuXG4vKiogVGhlIGxvZyBmaWxlcyB0aGlzIHNlcnZlciBob2xkcyAtIHNlZSBTdHJlYW1pbmdMb2dzLmxpc3RGaWxlcy4gRW1wdHkgb24gcHJvY2Vzc2VzIHdpdGggbm8gc3RvcmFnZSBmb2xkZXIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFN0b3JhZ2VMb2dGaWxlcygpOiBQcm9taXNlPExvZ0ZpbGVJbmZvW10+IHtcbiAgICBsZXQgbG9ncyA9IGdldExvZ3MoKTtcbiAgICBpZiAoIWxvZ3MpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXdhaXQgbG9ncy5saXN0RmlsZXMoKTtcbn1cblxuLyoqIE9uZSBsb2cgZmlsZSdzIGJ5dGVzLCBhbHdheXMgTFo0LWNvbXByZXNzZWQgLSBzZWUgU3RyZWFtaW5nTG9ncy5yZWFkRmlsZUNvbXByZXNzZWQgKGRlY29kZSB3aXRoIGRlY29kZUxvZ0ZpbGUpLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdG9yYWdlTG9nRmlsZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGxldCBsb2dzID0gZ2V0TG9ncygpO1xuICAgIGlmICghbG9ncykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgcHJvY2VzcyBoYXMgbm8gc3RvcmFnZSBmb2xkZXIsIHNvIGl0IGhhcyBubyBsb2dzIHRvIHJlYWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGxvZ3MucmVhZEZpbGVDb21wcmVzc2VkKG5hbWUpO1xufVxuIl19
|
|
119
|
-
/* _JS_SOURCE_HASH = "
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlTG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLHlEQUFtRDtBQUNuRCxvREFBOEQ7QUFDOUQsaURBQWtGO0FBQ2xGLGtEQUF3RDtBQUV4RCwyWkFBMlo7QUFFOVksUUFBQSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFdkMsbUxBQW1MO0FBQ25MLElBQUksWUFBdUMsQ0FBQztBQUM1QyxTQUFTLE9BQU87SUFDWixJQUFJLFlBQVk7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN0QyxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLENBQUM7UUFDRCxNQUFNLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFBLCtCQUFnQixHQUFFLEVBQUUsd0JBQWdCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ0wsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELGdCQUFnQixFQUFFLENBQUM7SUFDbkIsWUFBWSxHQUFHLElBQUksNkJBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLGlCQUFpQjtJQUN0QixLQUFLLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzFELEtBQUssSUFBSSxPQUFPLElBQUksU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0UsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLFNB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UUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQUMsQ0FBVyxhQUFYLENBQUMsdUJBQUQsQ0FBQyxDQUFZLEtBQUssbUNBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkosQ0FBQztZQUFDLFdBQU0sQ0FBQyxDQUFDLENBQUM7b0JBQVMsQ0FBQztnQkFDakIsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMxQixDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsZ0hBQWdIO0FBQ3pHLEtBQUssVUFBVSxtQkFBbUI7SUFDckMsSUFBSSxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDckIsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFKRCxrREFJQztBQUVELHNIQUFzSDtBQUMvRyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsSUFBWTtJQUNqRCxJQUFJLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUNyQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQU5ELGdEQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBTdHJlYW1pbmdMb2dzLCBMb2dGaWxlSW5mbyB9IGZyb20gXCIuLi9TdHJlYW1pbmdMb2dzXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlRm9sZGVyLCBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwgfSBmcm9tIFwiLi9zZXJ2ZXJDb25maWdcIjtcbmltcG9ydCB7IGdldE93blRocmVhZElkIH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcblxuLy8gVGhlIHN0b3JhZ2Ugc2VydmVyJ3Mgb3BlcmF0aW9uIGxvZzogZXZlcnkgbXV0YXRpb24gKG5ldmVyIHRoZSBkYXRhIGl0c2VsZiAtIGp1c3Qgd2hhdCBoYXBwZW5lZCwgdG8gd2hhdCwgd2hlbiwgaG93IGJpZywgYW5kIHdobyBhc2tlZCksIGV2ZXJ5IGVycm9yLCBhbmQgdGhlIHN5bmNocm9uaXphdGlvbiBrZXkgcG9pbnRzLCBzdHJlYW1lZCBhcyBKU09OIGxpbmVzIGludG8gPHN0b3JhZ2UgZm9sZGVyPi9sb2dzIChzZWUgU3RyZWFtaW5nTG9ncyBmb3IgdGhlIGZpbGUgbGlmZWN5Y2xlKS4gRXZlcnl0aGluZyBoZXJlIGlzIGEgc2FmZSBuby1vcCBvbiBwcm9jZXNzZXMgdGhhdCBoYXZlIG5vIHN0b3JhZ2UgZm9sZGVyIC0gbG9nZ2luZyBtdXN0IG5ldmVyIGJlIHRoZSB0aGluZyB0aGF0IGJyZWFrcyBhIHJlcXVlc3QuXG5cbmV4cG9ydCBjb25zdCBMT0dTX0ZPTERFUl9OQU1FID0gXCJsb2dzXCI7XG5cbi8vIE5PVCBsYXp5OiBhIGZhaWx1cmUgdG8gcmVzb2x2ZSB0aGUgZm9sZGVyICh0aGUgc2VydmVyIGNvbmZpZyBtYXkgc2ltcGx5IG5vdCBiZSBTRVQgeWV0IHRoaXMgZWFybHkgaW4gc3RhcnR1cCkgbXVzdCBiZSByZXRyaWVkIG9uIHRoZSBuZXh0IGxvZyBjYWxsLCBub3QgY2FjaGVkIGFzIFwibm8gbG9ncyBldmVyXCJcbmxldCBsb2dzSW5zdGFuY2U6IFN0cmVhbWluZ0xvZ3MgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRMb2dzKCk6IFN0cmVhbWluZ0xvZ3MgfCB1bmRlZmluZWQge1xuICAgIGlmIChsb2dzSW5zdGFuY2UpIHJldHVybiBsb2dzSW5zdGFuY2U7XG4gICAgbGV0IGZvbGRlcjogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICAgIGZvbGRlciA9IHBhdGguam9pbihnZXRTdG9yYWdlRm9sZGVyKCksIExPR1NfRk9MREVSX05BTUUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBob29rRXJyb3JMb2dnaW5nKCk7XG4gICAgbG9nc0luc3RhbmNlID0gbmV3IFN0cmVhbWluZ0xvZ3MoeyBmb2xkZXIsIHRocmVhZElkOiBnZXRUaHJlYWRJZFNhZmUoKSB9KTtcbiAgICByZXR1cm4gbG9nc0luc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBmaXJzdEV4dGVybmFsSVB2NCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGZvciAobGV0IGFkZHJlc3NlcyBvZiBPYmplY3QudmFsdWVzKG9zLm5ldHdvcmtJbnRlcmZhY2VzKCkpKSB7XG4gICAgICAgIGZvciAobGV0IGFkZHJlc3Mgb2YgYWRkcmVzc2VzIHx8IFtdKSB7XG4gICAgICAgICAgICBpZiAoYWRkcmVzcy5mYW1pbHkgPT09IFwiSVB2NFwiICYmICFhZGRyZXNzLmludGVybmFsKSByZXR1cm4gYWRkcmVzcy5hZGRyZXNzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIE1lbW9pemVkIG9uIFNVQ0NFU1Mgb25seTogdGhlIHRocmVhZCBjZXJ0IG1heSBub3QgYmUgbG9hZGVkIHlldCB3aGVuIHRoZSBmaXJzdCBlbnRyaWVzIGFyZSB3cml0dGVuLCBhbmQgdGhhdCBtdXN0IG5vdCBwZXJtYW5lbnRseSBzdHJpcCB0aGUgdGhyZWFkIGlkIGZyb20gZXZlcnkgbGF0ZXIgZW50cnlcbmxldCBjYWNoZWRUaHJlYWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VGhyZWFkSWRTYWZlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNhY2hlZFRocmVhZElkKSByZXR1cm4gY2FjaGVkVGhyZWFkSWQ7XG4gICAgdHJ5IHtcbiAgICAgICAgY2FjaGVkVGhyZWFkSWQgPSBnZXRPd25UaHJlYWRJZChnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwoKT8ucm9vdERvbWFpbiB8fCBcIlwiKTtcbiAgICB9IGNhdGNoIHsgfVxuICAgIHJldHVybiBjYWNoZWRUaHJlYWRJZDtcbn1cblxuY29uc3QgY2FjaGVkSXAgPSBsYXp5KCgpID0+IGZpcnN0RXh0ZXJuYWxJUHY0KCkpO1xuXG4vLyB0aHJlYWRJZCBhbmQgZG9tYWluIGFyZSByZS1yZXNvbHZlZCB1bnRpbCBrbm93biAoZWFybHkgZW50cmllcyBtYXkgcHJlZGF0ZSB0aGUgY29uZmlnL2NlcnRzKTsgdGhlIHJlc3QgbmV2ZXIgY2hhbmdlc1xuZnVuY3Rpb24gYmFzZUZpZWxkcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgICB0aHJlYWRJZDogZ2V0VGhyZWFkSWRTYWZlKCksXG4gICAgICAgIGVudHJ5UG9pbnQ6IHByb2Nlc3MuYXJndlsxXSxcbiAgICAgICAgaXA6IGNhY2hlZElwKCksXG4gICAgICAgIGRvbWFpbjogZ2V0U3RvcmFnZVNlcnZlckNvbmZpZ09wdGlvbmFsKCk/LmRvbWFpbixcbiAgICB9O1xufVxuXG4vLyBFdmVyeXRoaW5nIGxvZ2dlZCBoZXJlIGdvZXMgQk9USCB0byB0aGUgc3RvcmFnZSBsb2cgc3RyZWFtIGFuZCB0aGUgY29uc29sZSAtIG9uZSBjYWxsLCBuZXZlciB0d28uIFRoZSBjb25zb2xlIGxpbmUgY2FycmllcyBvbmx5IHRoZSBlbnRyeSAodGhlIGJhc2UgZmllbGRzIGFyZSBjb25zdGFudCBwZXIgcHJvY2Vzcywgc28gdGhleSB3b3VsZCBqdXN0IGJlIG5vaXNlIHRoZXJlKTsgdGhlIHN0cmVhbSBnZXRzIGV2ZXJ5dGhpbmcuXG5mdW5jdGlvbiB3cml0ZShraW5kOiBzdHJpbmcsIGVudHJ5OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSwgYWxzb0NvbnNvbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoYWxzb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFske2tpbmR9XSAke0pTT04uc3RyaW5naWZ5KGVudHJ5KX1gKTtcbiAgICB9XG4gICAgbGV0IGxvZ3MgPSBnZXRMb2dzKCk7XG4gICAgaWYgKCFsb2dzKSByZXR1cm47XG4gICAgbG9ncy5sb2coeyBraW5kLCB0aW1lOiBEYXRlLm5vdygpLCAuLi5iYXNlRmllbGRzKCksIC4uLmVudHJ5IH0pO1xufVxuXG4vKiogT25lIG11dGF0aW9uIHRoZSBzZXJ2ZXIgcGVyZm9ybWVkOiBzZXQvZGVsL21vdmUvdW5kZWxldGUvc2V0TGFyZ2Uvcm91dGluZ0NvbmZpZywgcGx1cyB0aGUgcGVyLWZpbGUgc3luY2hyb25pemF0aW9uIHdyaXRlcyAoXCJzeW5jIGdldFwiL1wic3luYyBzZXRcIikuIFNpemVzIGFuZCB0aW1lcywgbmV2ZXIgdGhlIGRhdGEuIGludGVybmFsIG1hcmtzIHdyaXRlcyBwdXNoZWQgYnkgYSBwZWVyJ3Mgc3luY2hyb25pemF0aW9uIHJhdGhlciB0aGFuIGEgY2xpZW50LiBTdHJlYW0tb25seSAtIG9uZSBlbnRyeSBwZXIgd3JpdGUgaXMgZXhhY3RseSB3aGF0IHRoZSBjb25zb2xlIGRvZXMgTk9UIG5lZWQuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nTXV0YXRpb24oZW50cnk6IHsgb3A6IHN0cmluZzsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHN0b3JlPzogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHRvUGF0aD86IHN0cmluZzsgc2l6ZT86IG51bWJlcjsgd3JpdGVUaW1lPzogbnVtYmVyOyBjYWxsZXJJZD86IHN0cmluZzsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB3cml0ZShcIm11dGF0aW9uXCIsIGVudHJ5LCBmYWxzZSk7XG59XG5cbi8qKiBBIHN5bmNocm9uaXphdGlvbiBrZXkgcG9pbnQ6IHNjYW5zIGFuZCBmdWxsIHN5bmNzIHN0YXJ0aW5nL2ZpbmlzaGluZywgcmVjb25jaWxlcywgYm91bmRhcnkgc2NhbnMgLSB3aGF0IGFuIG9wZXJhdG9yIGdyZXBzIGZvciB0byBzZWUgd2hldGhlciB0aGUgZmxlZXQgaXMgY29udmVyZ2luZy4gQWxzbyBwcmludGVkIHRvIHRoZSBjb25zb2xlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ1N5bmNFdmVudChlbnRyeTogeyBldmVudDogc3RyaW5nOyBzdG9yZTogc3RyaW5nOyBzb3VyY2U/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSk6IHZvaWQge1xuICAgIHdyaXRlKFwic3luY1wiLCBlbnRyeSwgdHJ1ZSk7XG59XG5cbi8qKiBPbmUgY29uc29sZS5lcnJvciBpcyBhbGwgYW4gZXJyb3IgdGFrZXMgKGNvbnNvbGUuZXJyb3IgYW5kIGNvbnNvbGUud2FybiBhcmUgSE9PS0VEIHRvIGZlZWQgdGhlIHN0cmVhbSkgLSB0aGlzIGp1c3QgZ3VhcmFudGVlcyB0aGUgaG9vayBpcyBpbnN0YWxsZWQgZmlyc3QsIGZvciB2ZXJ5LWVhcmx5IGNhbGxlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nU3RvcmFnZUVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGdldExvZ3MoKTtcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xufVxuXG4vLyBFdmVyeXRoaW5nIGNvbnNvbGUuZXJyb3JlZCBvciBjb25zb2xlLndhcm5lZCBhbHNvIGxhbmRzIGluIHRoZSBsb2cgc3RyZWFtICh3aXRoIGEgcmVlbnRyYW5jeSBndWFyZDogYSBmYWlsdXJlIElOU0lERSBsb2dnaW5nIG11c3Qgbm90IGxvZyBpdHNlbGYgZm9yZXZlcilcbmxldCB3cml0aW5nSG9va2VkID0gZmFsc2U7XG5jb25zdCBob29rRXJyb3JMb2dnaW5nID0gbGF6eSgoKSA9PiB7XG4gICAgZm9yIChsZXQgbGV2ZWwgb2YgW1wiZXJyb3JcIiwgXCJ3YXJuXCJdIGFzIGNvbnN0KSB7XG4gICAgICAgIGxldCBvcmlnaW5hbCA9IGNvbnNvbGVbbGV2ZWxdLmJpbmQoY29uc29sZSk7XG4gICAgICAgIGNvbnNvbGVbbGV2ZWxdID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgICAgb3JpZ2luYWwoLi4uYXJncyk7XG4gICAgICAgICAgICBpZiAod3JpdGluZ0hvb2tlZCkgcmV0dXJuO1xuICAgICAgICAgICAgd3JpdGluZ0hvb2tlZCA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdyaXRlKGxldmVsLCB7IG1lc3NhZ2U6IGFyZ3MubWFwKHggPT4gdHlwZW9mIHggPT09IFwic3RyaW5nXCIgJiYgeCB8fCAoKHggYXMgRXJyb3IpPy5zdGFjayA/PyBKU09OLnN0cmluZ2lmeSh4KSkpLmpvaW4oXCIgXCIpLnNsaWNlKDAsIDUwMDApIH0sIGZhbHNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHdyaXRpbmdIb29rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59KTtcblxuLyoqIFRoZSBsb2cgZmlsZXMgdGhpcyBzZXJ2ZXIgaG9sZHMgLSBzZWUgU3RyZWFtaW5nTG9ncy5saXN0RmlsZXMuIEVtcHR5IG9uIHByb2Nlc3NlcyB3aXRoIG5vIHN0b3JhZ2UgZm9sZGVyLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTdG9yYWdlTG9nRmlsZXMoKTogUHJvbWlzZTxMb2dGaWxlSW5mb1tdPiB7XG4gICAgbGV0IGxvZ3MgPSBnZXRMb2dzKCk7XG4gICAgaWYgKCFsb2dzKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGF3YWl0IGxvZ3MubGlzdEZpbGVzKCk7XG59XG5cbi8qKiBPbmUgbG9nIGZpbGUncyBieXRlcywgYWx3YXlzIExaNC1jb21wcmVzc2VkIC0gc2VlIFN0cmVhbWluZ0xvZ3MucmVhZEZpbGVDb21wcmVzc2VkIChkZWNvZGUgd2l0aCBkZWNvZGVMb2dGaWxlKS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RvcmFnZUxvZ0ZpbGUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBsZXQgbG9ncyA9IGdldExvZ3MoKTtcbiAgICBpZiAoIWxvZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIHByb2Nlc3MgaGFzIG5vIHN0b3JhZ2UgZm9sZGVyLCBzbyBpdCBoYXMgbm8gbG9ncyB0byByZWFkYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBsb2dzLnJlYWRGaWxlQ29tcHJlc3NlZChuYW1lKTtcbn1cbiJdfQ==
|
|
128
|
+
/* _JS_SOURCE_HASH = "f86b5463724c925b2746a25399d35510958d35837879980b9d9dd00c4a943c8d"; */
|