sliftutils 1.7.108 → 1.7.110

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.
@@ -1,9 +1,9 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
6
- //exports.readStorageLogFile = exports.listStorageLogFiles = exports.logStorageError = exports.logSyncEvent = exports.logMutation = exports.LOGS_FOLDER_NAME = void 0;
6
+ //exports.readStorageLogFile = exports.listStorageLogFiles = exports.logStorageWarn = exports.logStorageError = exports.logSyncEvent = exports.logMutation = exports.LOGS_FOLDER_NAME = void 0;
7
7
  const os_1 = __importDefault(require("os"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const caching_1 = require("socket-function/src/caching");
@@ -71,7 +71,7 @@ function write(kind, entry, alsoConsole) {
71
71
  return;
72
72
  logs.log({ kind, time: Date.now(), ...baseFields(), ...entry });
73
73
  }
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. */
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. Logged DELIBERATELY at two layers: the controller (which knows the account/bucket and the caller) AND BlobStore itself (which knows the folder, and sees the writes that never pass through the controller) - the redundancy is the point, because a write that only one layer saw is exactly the kind of masked issue these logs exist to expose. Stream-only - one entry per write is exactly what the console does NOT need. */
75
75
  function logMutation(entry) {
76
76
  write("mutation", entry, false);
77
77
  }
@@ -87,6 +87,12 @@ function logStorageError(message) {
87
87
  console.error(message);
88
88
  }
89
89
  exports.logStorageError = logStorageError;
90
+ /** logStorageError at warn level: guarantees the console.warn hook is installed before warning, so warnings from before the first logged mutation still reach the stream. */
91
+ function logStorageWarn(message) {
92
+ getLogs();
93
+ console.warn(message);
94
+ }
95
+ exports.logStorageWarn = logStorageWarn;
90
96
  // Everything console.errored or console.warned also lands in the log stream (with a reentrancy guard: a failure INSIDE logging must not log itself forever)
91
97
  let writingHooked = false;
92
98
  const hookErrorLogging = (0, caching_1.lazy)(() => {
@@ -124,5 +130,5 @@ async function readStorageLogFile(name) {
124
130
  return await logs.readFileCompressed(name);
125
131
  }
126
132
  exports.readStorageLogFile = readStorageLogFile;
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlTG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLHlEQUFtRDtBQUNuRCxvREFBOEQ7QUFDOUQsaURBQWtGO0FBQ2xGLGtEQUF3RDtBQUV4RCwyWkFBMlo7QUFFOVksUUFBQSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFdkMsbUxBQW1MO0FBQ25MLElBQUksWUFBdUMsQ0FBQztBQUM1QyxTQUFTLE9BQU87SUFDWixJQUFJLFlBQVk7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN0QyxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLENBQUM7UUFDRCxNQUFNLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFBLCtCQUFnQixHQUFFLEVBQUUsd0JBQWdCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ0wsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELGdCQUFnQixFQUFFLENBQUM7SUFDbkIsWUFBWSxHQUFHLElBQUksNkJBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLGlCQUFpQjtJQUN0QixLQUFLLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzFELEtBQUssSUFBSSxPQUFPLElBQUksU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0UsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLFNB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UUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQUMsQ0FBVyxhQUFYLENBQUMsdUJBQUQsQ0FBQyxDQUFZLEtBQUssbUNBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkosQ0FBQztZQUFDLFdBQU0sQ0FBQyxDQUFDLENBQUM7b0JBQVMsQ0FBQztnQkFDakIsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMxQixDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsZ0hBQWdIO0FBQ3pHLEtBQUssVUFBVSxtQkFBbUI7SUFDckMsSUFBSSxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDckIsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFKRCxrREFJQztBQUVELHNIQUFzSDtBQUMvRyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsSUFBWTtJQUNqRCxJQUFJLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUNyQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQU5ELGdEQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBTdHJlYW1pbmdMb2dzLCBMb2dGaWxlSW5mbyB9IGZyb20gXCIuLi9TdHJlYW1pbmdMb2dzXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlRm9sZGVyLCBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwgfSBmcm9tIFwiLi9zZXJ2ZXJDb25maWdcIjtcbmltcG9ydCB7IGdldE93blRocmVhZElkIH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcblxuLy8gVGhlIHN0b3JhZ2Ugc2VydmVyJ3Mgb3BlcmF0aW9uIGxvZzogZXZlcnkgbXV0YXRpb24gKG5ldmVyIHRoZSBkYXRhIGl0c2VsZiAtIGp1c3Qgd2hhdCBoYXBwZW5lZCwgdG8gd2hhdCwgd2hlbiwgaG93IGJpZywgYW5kIHdobyBhc2tlZCksIGV2ZXJ5IGVycm9yLCBhbmQgdGhlIHN5bmNocm9uaXphdGlvbiBrZXkgcG9pbnRzLCBzdHJlYW1lZCBhcyBKU09OIGxpbmVzIGludG8gPHN0b3JhZ2UgZm9sZGVyPi9sb2dzIChzZWUgU3RyZWFtaW5nTG9ncyBmb3IgdGhlIGZpbGUgbGlmZWN5Y2xlKS4gRXZlcnl0aGluZyBoZXJlIGlzIGEgc2FmZSBuby1vcCBvbiBwcm9jZXNzZXMgdGhhdCBoYXZlIG5vIHN0b3JhZ2UgZm9sZGVyIC0gbG9nZ2luZyBtdXN0IG5ldmVyIGJlIHRoZSB0aGluZyB0aGF0IGJyZWFrcyBhIHJlcXVlc3QuXG5cbmV4cG9ydCBjb25zdCBMT0dTX0ZPTERFUl9OQU1FID0gXCJsb2dzXCI7XG5cbi8vIE5PVCBsYXp5OiBhIGZhaWx1cmUgdG8gcmVzb2x2ZSB0aGUgZm9sZGVyICh0aGUgc2VydmVyIGNvbmZpZyBtYXkgc2ltcGx5IG5vdCBiZSBTRVQgeWV0IHRoaXMgZWFybHkgaW4gc3RhcnR1cCkgbXVzdCBiZSByZXRyaWVkIG9uIHRoZSBuZXh0IGxvZyBjYWxsLCBub3QgY2FjaGVkIGFzIFwibm8gbG9ncyBldmVyXCJcbmxldCBsb2dzSW5zdGFuY2U6IFN0cmVhbWluZ0xvZ3MgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRMb2dzKCk6IFN0cmVhbWluZ0xvZ3MgfCB1bmRlZmluZWQge1xuICAgIGlmIChsb2dzSW5zdGFuY2UpIHJldHVybiBsb2dzSW5zdGFuY2U7XG4gICAgbGV0IGZvbGRlcjogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICAgIGZvbGRlciA9IHBhdGguam9pbihnZXRTdG9yYWdlRm9sZGVyKCksIExPR1NfRk9MREVSX05BTUUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBob29rRXJyb3JMb2dnaW5nKCk7XG4gICAgbG9nc0luc3RhbmNlID0gbmV3IFN0cmVhbWluZ0xvZ3MoeyBmb2xkZXIsIHRocmVhZElkOiBnZXRUaHJlYWRJZFNhZmUoKSB9KTtcbiAgICByZXR1cm4gbG9nc0luc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBmaXJzdEV4dGVybmFsSVB2NCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGZvciAobGV0IGFkZHJlc3NlcyBvZiBPYmplY3QudmFsdWVzKG9zLm5ldHdvcmtJbnRlcmZhY2VzKCkpKSB7XG4gICAgICAgIGZvciAobGV0IGFkZHJlc3Mgb2YgYWRkcmVzc2VzIHx8IFtdKSB7XG4gICAgICAgICAgICBpZiAoYWRkcmVzcy5mYW1pbHkgPT09IFwiSVB2NFwiICYmICFhZGRyZXNzLmludGVybmFsKSByZXR1cm4gYWRkcmVzcy5hZGRyZXNzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIE1lbW9pemVkIG9uIFNVQ0NFU1Mgb25seTogdGhlIHRocmVhZCBjZXJ0IG1heSBub3QgYmUgbG9hZGVkIHlldCB3aGVuIHRoZSBmaXJzdCBlbnRyaWVzIGFyZSB3cml0dGVuLCBhbmQgdGhhdCBtdXN0IG5vdCBwZXJtYW5lbnRseSBzdHJpcCB0aGUgdGhyZWFkIGlkIGZyb20gZXZlcnkgbGF0ZXIgZW50cnlcbmxldCBjYWNoZWRUaHJlYWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VGhyZWFkSWRTYWZlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNhY2hlZFRocmVhZElkKSByZXR1cm4gY2FjaGVkVGhyZWFkSWQ7XG4gICAgdHJ5IHtcbiAgICAgICAgY2FjaGVkVGhyZWFkSWQgPSBnZXRPd25UaHJlYWRJZChnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwoKT8ucm9vdERvbWFpbiB8fCBcIlwiKTtcbiAgICB9IGNhdGNoIHsgfVxuICAgIHJldHVybiBjYWNoZWRUaHJlYWRJZDtcbn1cblxuY29uc3QgY2FjaGVkSXAgPSBsYXp5KCgpID0+IGZpcnN0RXh0ZXJuYWxJUHY0KCkpO1xuXG4vLyB0aHJlYWRJZCBhbmQgZG9tYWluIGFyZSByZS1yZXNvbHZlZCB1bnRpbCBrbm93biAoZWFybHkgZW50cmllcyBtYXkgcHJlZGF0ZSB0aGUgY29uZmlnL2NlcnRzKTsgdGhlIHJlc3QgbmV2ZXIgY2hhbmdlc1xuZnVuY3Rpb24gYmFzZUZpZWxkcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgICB0aHJlYWRJZDogZ2V0VGhyZWFkSWRTYWZlKCksXG4gICAgICAgIGVudHJ5UG9pbnQ6IHByb2Nlc3MuYXJndlsxXSxcbiAgICAgICAgaXA6IGNhY2hlZElwKCksXG4gICAgICAgIGRvbWFpbjogZ2V0U3RvcmFnZVNlcnZlckNvbmZpZ09wdGlvbmFsKCk/LmRvbWFpbixcbiAgICB9O1xufVxuXG4vLyBFdmVyeXRoaW5nIGxvZ2dlZCBoZXJlIGdvZXMgQk9USCB0byB0aGUgc3RvcmFnZSBsb2cgc3RyZWFtIGFuZCB0aGUgY29uc29sZSAtIG9uZSBjYWxsLCBuZXZlciB0d28uIFRoZSBjb25zb2xlIGxpbmUgY2FycmllcyBvbmx5IHRoZSBlbnRyeSAodGhlIGJhc2UgZmllbGRzIGFyZSBjb25zdGFudCBwZXIgcHJvY2Vzcywgc28gdGhleSB3b3VsZCBqdXN0IGJlIG5vaXNlIHRoZXJlKTsgdGhlIHN0cmVhbSBnZXRzIGV2ZXJ5dGhpbmcuXG5mdW5jdGlvbiB3cml0ZShraW5kOiBzdHJpbmcsIGVudHJ5OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSwgYWxzb0NvbnNvbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoYWxzb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFske2tpbmR9XSAke0pTT04uc3RyaW5naWZ5KGVudHJ5KX1gKTtcbiAgICB9XG4gICAgbGV0IGxvZ3MgPSBnZXRMb2dzKCk7XG4gICAgaWYgKCFsb2dzKSByZXR1cm47XG4gICAgbG9ncy5sb2coeyBraW5kLCB0aW1lOiBEYXRlLm5vdygpLCAuLi5iYXNlRmllbGRzKCksIC4uLmVudHJ5IH0pO1xufVxuXG4vKiogT25lIG11dGF0aW9uIHRoZSBzZXJ2ZXIgcGVyZm9ybWVkOiBzZXQvZGVsL21vdmUvdW5kZWxldGUvc2V0TGFyZ2Uvcm91dGluZ0NvbmZpZywgcGx1cyB0aGUgcGVyLWZpbGUgc3luY2hyb25pemF0aW9uIHdyaXRlcyAoXCJzeW5jIGdldFwiL1wic3luYyBzZXRcIikuIFNpemVzIGFuZCB0aW1lcywgbmV2ZXIgdGhlIGRhdGEuIGludGVybmFsIG1hcmtzIHdyaXRlcyBwdXNoZWQgYnkgYSBwZWVyJ3Mgc3luY2hyb25pemF0aW9uIHJhdGhlciB0aGFuIGEgY2xpZW50LiBTdHJlYW0tb25seSAtIG9uZSBlbnRyeSBwZXIgd3JpdGUgaXMgZXhhY3RseSB3aGF0IHRoZSBjb25zb2xlIGRvZXMgTk9UIG5lZWQuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nTXV0YXRpb24oZW50cnk6IHsgb3A6IHN0cmluZzsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHN0b3JlPzogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHRvUGF0aD86IHN0cmluZzsgc2l6ZT86IG51bWJlcjsgd3JpdGVUaW1lPzogbnVtYmVyOyBjYWxsZXJJZD86IHN0cmluZzsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB3cml0ZShcIm11dGF0aW9uXCIsIGVudHJ5LCBmYWxzZSk7XG59XG5cbi8qKiBBIHN5bmNocm9uaXphdGlvbiBrZXkgcG9pbnQ6IHNjYW5zIGFuZCBmdWxsIHN5bmNzIHN0YXJ0aW5nL2ZpbmlzaGluZywgcmVjb25jaWxlcywgYm91bmRhcnkgc2NhbnMgLSB3aGF0IGFuIG9wZXJhdG9yIGdyZXBzIGZvciB0byBzZWUgd2hldGhlciB0aGUgZmxlZXQgaXMgY29udmVyZ2luZy4gQWxzbyBwcmludGVkIHRvIHRoZSBjb25zb2xlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ1N5bmNFdmVudChlbnRyeTogeyBldmVudDogc3RyaW5nOyBzdG9yZTogc3RyaW5nOyBzb3VyY2U/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSk6IHZvaWQge1xuICAgIHdyaXRlKFwic3luY1wiLCBlbnRyeSwgdHJ1ZSk7XG59XG5cbi8qKiBPbmUgY29uc29sZS5lcnJvciBpcyBhbGwgYW4gZXJyb3IgdGFrZXMgKGNvbnNvbGUuZXJyb3IgYW5kIGNvbnNvbGUud2FybiBhcmUgSE9PS0VEIHRvIGZlZWQgdGhlIHN0cmVhbSkgLSB0aGlzIGp1c3QgZ3VhcmFudGVlcyB0aGUgaG9vayBpcyBpbnN0YWxsZWQgZmlyc3QsIGZvciB2ZXJ5LWVhcmx5IGNhbGxlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nU3RvcmFnZUVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGdldExvZ3MoKTtcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xufVxuXG4vLyBFdmVyeXRoaW5nIGNvbnNvbGUuZXJyb3JlZCBvciBjb25zb2xlLndhcm5lZCBhbHNvIGxhbmRzIGluIHRoZSBsb2cgc3RyZWFtICh3aXRoIGEgcmVlbnRyYW5jeSBndWFyZDogYSBmYWlsdXJlIElOU0lERSBsb2dnaW5nIG11c3Qgbm90IGxvZyBpdHNlbGYgZm9yZXZlcilcbmxldCB3cml0aW5nSG9va2VkID0gZmFsc2U7XG5jb25zdCBob29rRXJyb3JMb2dnaW5nID0gbGF6eSgoKSA9PiB7XG4gICAgZm9yIChsZXQgbGV2ZWwgb2YgW1wiZXJyb3JcIiwgXCJ3YXJuXCJdIGFzIGNvbnN0KSB7XG4gICAgICAgIGxldCBvcmlnaW5hbCA9IGNvbnNvbGVbbGV2ZWxdLmJpbmQoY29uc29sZSk7XG4gICAgICAgIGNvbnNvbGVbbGV2ZWxdID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgICAgb3JpZ2luYWwoLi4uYXJncyk7XG4gICAgICAgICAgICBpZiAod3JpdGluZ0hvb2tlZCkgcmV0dXJuO1xuICAgICAgICAgICAgd3JpdGluZ0hvb2tlZCA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdyaXRlKGxldmVsLCB7IG1lc3NhZ2U6IGFyZ3MubWFwKHggPT4gdHlwZW9mIHggPT09IFwic3RyaW5nXCIgJiYgeCB8fCAoKHggYXMgRXJyb3IpPy5zdGFjayA/PyBKU09OLnN0cmluZ2lmeSh4KSkpLmpvaW4oXCIgXCIpLnNsaWNlKDAsIDUwMDApIH0sIGZhbHNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHdyaXRpbmdIb29rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59KTtcblxuLyoqIFRoZSBsb2cgZmlsZXMgdGhpcyBzZXJ2ZXIgaG9sZHMgLSBzZWUgU3RyZWFtaW5nTG9ncy5saXN0RmlsZXMuIEVtcHR5IG9uIHByb2Nlc3NlcyB3aXRoIG5vIHN0b3JhZ2UgZm9sZGVyLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTdG9yYWdlTG9nRmlsZXMoKTogUHJvbWlzZTxMb2dGaWxlSW5mb1tdPiB7XG4gICAgbGV0IGxvZ3MgPSBnZXRMb2dzKCk7XG4gICAgaWYgKCFsb2dzKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGF3YWl0IGxvZ3MubGlzdEZpbGVzKCk7XG59XG5cbi8qKiBPbmUgbG9nIGZpbGUncyBieXRlcywgYWx3YXlzIExaNC1jb21wcmVzc2VkIC0gc2VlIFN0cmVhbWluZ0xvZ3MucmVhZEZpbGVDb21wcmVzc2VkIChkZWNvZGUgd2l0aCBkZWNvZGVMb2dGaWxlKS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RvcmFnZUxvZ0ZpbGUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBsZXQgbG9ncyA9IGdldExvZ3MoKTtcbiAgICBpZiAoIWxvZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIHByb2Nlc3MgaGFzIG5vIHN0b3JhZ2UgZm9sZGVyLCBzbyBpdCBoYXMgbm8gbG9ncyB0byByZWFkYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBsb2dzLnJlYWRGaWxlQ29tcHJlc3NlZChuYW1lKTtcbn1cbiJdfQ==
128
- /* _JS_SOURCE_HASH = "f86b5463724c925b2746a25399d35510958d35837879980b9d9dd00c4a943c8d"; */
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlTG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLHlEQUFtRDtBQUNuRCxvREFBOEQ7QUFDOUQsaURBQWtGO0FBQ2xGLGtEQUF3RDtBQUV4RCwyWkFBMlo7QUFFOVksUUFBQSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFdkMsbUxBQW1MO0FBQ25MLElBQUksWUFBdUMsQ0FBQztBQUM1QyxTQUFTLE9BQU87SUFDWixJQUFJLFlBQVk7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN0QyxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLENBQUM7UUFDRCxNQUFNLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFBLCtCQUFnQixHQUFFLEVBQUUsd0JBQWdCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ0wsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELGdCQUFnQixFQUFFLENBQUM7SUFDbkIsWUFBWSxHQUFHLElBQUksNkJBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLGlCQUFpQjtJQUN0QixLQUFLLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzFELEtBQUssSUFBSSxPQUFPLElBQUksU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0UsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLFNB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cnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbGF6eSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IFN0cmVhbWluZ0xvZ3MsIExvZ0ZpbGVJbmZvIH0gZnJvbSBcIi4uL1N0cmVhbWluZ0xvZ3NcIjtcbmltcG9ydCB7IGdldFN0b3JhZ2VGb2xkZXIsIGdldFN0b3JhZ2VTZXJ2ZXJDb25maWdPcHRpb25hbCB9IGZyb20gXCIuL3NlcnZlckNvbmZpZ1wiO1xuaW1wb3J0IHsgZ2V0T3duVGhyZWFkSWQgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuXG4vLyBUaGUgc3RvcmFnZSBzZXJ2ZXIncyBvcGVyYXRpb24gbG9nOiBldmVyeSBtdXRhdGlvbiAobmV2ZXIgdGhlIGRhdGEgaXRzZWxmIC0ganVzdCB3aGF0IGhhcHBlbmVkLCB0byB3aGF0LCB3aGVuLCBob3cgYmlnLCBhbmQgd2hvIGFza2VkKSwgZXZlcnkgZXJyb3IsIGFuZCB0aGUgc3luY2hyb25pemF0aW9uIGtleSBwb2ludHMsIHN0cmVhbWVkIGFzIEpTT04gbGluZXMgaW50byA8c3RvcmFnZSBmb2xkZXI+L2xvZ3MgKHNlZSBTdHJlYW1pbmdMb2dzIGZvciB0aGUgZmlsZSBsaWZlY3ljbGUpLiBFdmVyeXRoaW5nIGhlcmUgaXMgYSBzYWZlIG5vLW9wIG9uIHByb2Nlc3NlcyB0aGF0IGhhdmUgbm8gc3RvcmFnZSBmb2xkZXIgLSBsb2dnaW5nIG11c3QgbmV2ZXIgYmUgdGhlIHRoaW5nIHRoYXQgYnJlYWtzIGEgcmVxdWVzdC5cblxuZXhwb3J0IGNvbnN0IExPR1NfRk9MREVSX05BTUUgPSBcImxvZ3NcIjtcblxuLy8gTk9UIGxhenk6IGEgZmFpbHVyZSB0byByZXNvbHZlIHRoZSBmb2xkZXIgKHRoZSBzZXJ2ZXIgY29uZmlnIG1heSBzaW1wbHkgbm90IGJlIFNFVCB5ZXQgdGhpcyBlYXJseSBpbiBzdGFydHVwKSBtdXN0IGJlIHJldHJpZWQgb24gdGhlIG5leHQgbG9nIGNhbGwsIG5vdCBjYWNoZWQgYXMgXCJubyBsb2dzIGV2ZXJcIlxubGV0IGxvZ3NJbnN0YW5jZTogU3RyZWFtaW5nTG9ncyB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldExvZ3MoKTogU3RyZWFtaW5nTG9ncyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGxvZ3NJbnN0YW5jZSkgcmV0dXJuIGxvZ3NJbnN0YW5jZTtcbiAgICBsZXQgZm9sZGVyOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgICAgZm9sZGVyID0gcGF0aC5qb2luKGdldFN0b3JhZ2VGb2xkZXIoKSwgTE9HU19GT0xERVJfTkFNRSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGhvb2tFcnJvckxvZ2dpbmcoKTtcbiAgICBsb2dzSW5zdGFuY2UgPSBuZXcgU3RyZWFtaW5nTG9ncyh7IGZvbGRlciwgdGhyZWFkSWQ6IGdldFRocmVhZElkU2FmZSgpIH0pO1xuICAgIHJldHVybiBsb2dzSW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGZpcnN0RXh0ZXJuYWxJUHY0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChsZXQgYWRkcmVzc2VzIG9mIE9iamVjdC52YWx1ZXMob3MubmV0d29ya0ludGVyZmFjZXMoKSkpIHtcbiAgICAgICAgZm9yIChsZXQgYWRkcmVzcyBvZiBhZGRyZXNzZXMgfHwgW10pIHtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzLmZhbWlseSA9PT0gXCJJUHY0XCIgJiYgIWFkZHJlc3MuaW50ZXJuYWwpIHJldHVybiBhZGRyZXNzLmFkZHJlc3M7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gTWVtb2l6ZWQgb24gU1VDQ0VTUyBvbmx5OiB0aGUgdGhyZWFkIGNlcnQgbWF5IG5vdCBiZSBsb2FkZWQgeWV0IHdoZW4gdGhlIGZpcnN0IGVudHJpZXMgYXJlIHdyaXR0ZW4sIGFuZCB0aGF0IG11c3Qgbm90IHBlcm1hbmVudGx5IHN0cmlwIHRoZSB0aHJlYWQgaWQgZnJvbSBldmVyeSBsYXRlciBlbnRyeVxubGV0IGNhY2hlZFRocmVhZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRUaHJlYWRJZFNhZmUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY2FjaGVkVGhyZWFkSWQpIHJldHVybiBjYWNoZWRUaHJlYWRJZDtcbiAgICB0cnkge1xuICAgICAgICBjYWNoZWRUaHJlYWRJZCA9IGdldE93blRocmVhZElkKGdldFN0b3JhZ2VTZXJ2ZXJDb25maWdPcHRpb25hbCgpPy5yb290RG9tYWluIHx8IFwiXCIpO1xuICAgIH0gY2F0Y2ggeyB9XG4gICAgcmV0dXJuIGNhY2hlZFRocmVhZElkO1xufVxuXG5jb25zdCBjYWNoZWRJcCA9IGxhenkoKCkgPT4gZmlyc3RFeHRlcm5hbElQdjQoKSk7XG5cbi8vIHRocmVhZElkIGFuZCBkb21haW4gYXJlIHJlLXJlc29sdmVkIHVudGlsIGtub3duIChlYXJseSBlbnRyaWVzIG1heSBwcmVkYXRlIHRoZSBjb25maWcvY2VydHMpOyB0aGUgcmVzdCBuZXZlciBjaGFuZ2VzXG5mdW5jdGlvbiBiYXNlRmllbGRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgICAgIHRocmVhZElkOiBnZXRUaHJlYWRJZFNhZmUoKSxcbiAgICAgICAgZW50cnlQb2ludDogcHJvY2Vzcy5hcmd2WzFdLFxuICAgICAgICBpcDogY2FjaGVkSXAoKSxcbiAgICAgICAgZG9tYWluOiBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwoKT8uZG9tYWluLFxuICAgIH07XG59XG5cbi8vIEV2ZXJ5dGhpbmcgbG9nZ2VkIGhlcmUgZ29lcyBCT1RIIHRvIHRoZSBzdG9yYWdlIGxvZyBzdHJlYW0gYW5kIHRoZSBjb25zb2xlIC0gb25lIGNhbGwsIG5ldmVyIHR3by4gVGhlIGNvbnNvbGUgbGluZSBjYXJyaWVzIG9ubHkgdGhlIGVudHJ5ICh0aGUgYmFzZSBmaWVsZHMgYXJlIGNvbnN0YW50IHBlciBwcm9jZXNzLCBzbyB0aGV5IHdvdWxkIGp1c3QgYmUgbm9pc2UgdGhlcmUpOyB0aGUgc3RyZWFtIGdldHMgZXZlcnl0aGluZy5cbmZ1bmN0aW9uIHdyaXRlKGtpbmQ6IHN0cmluZywgZW50cnk6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LCBhbHNvQ29uc29sZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChhbHNvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgWyR7a2luZH1dICR7SlNPTi5zdHJpbmdpZnkoZW50cnkpfWApO1xuICAgIH1cbiAgICBsZXQgbG9ncyA9IGdldExvZ3MoKTtcbiAgICBpZiAoIWxvZ3MpIHJldHVybjtcbiAgICBsb2dzLmxvZyh7IGtpbmQsIHRpbWU6IERhdGUubm93KCksIC4uLmJhc2VGaWVsZHMoKSwgLi4uZW50cnkgfSk7XG59XG5cbi8qKiBPbmUgbXV0YXRpb24gdGhlIHNlcnZlciBwZXJmb3JtZWQ6IHNldC9kZWwvbW92ZS91bmRlbGV0ZS9zZXRMYXJnZS9yb3V0aW5nQ29uZmlnLCBwbHVzIHRoZSBwZXItZmlsZSBzeW5jaHJvbml6YXRpb24gd3JpdGVzIChcInN5bmMgZ2V0XCIvXCJzeW5jIHNldFwiKS4gU2l6ZXMgYW5kIHRpbWVzLCBuZXZlciB0aGUgZGF0YS4gaW50ZXJuYWwgbWFya3Mgd3JpdGVzIHB1c2hlZCBieSBhIHBlZXIncyBzeW5jaHJvbml6YXRpb24gcmF0aGVyIHRoYW4gYSBjbGllbnQuIExvZ2dlZCBERUxJQkVSQVRFTFkgYXQgdHdvIGxheWVyczogdGhlIGNvbnRyb2xsZXIgKHdoaWNoIGtub3dzIHRoZSBhY2NvdW50L2J1Y2tldCBhbmQgdGhlIGNhbGxlcikgQU5EIEJsb2JTdG9yZSBpdHNlbGYgKHdoaWNoIGtub3dzIHRoZSBmb2xkZXIsIGFuZCBzZWVzIHRoZSB3cml0ZXMgdGhhdCBuZXZlciBwYXNzIHRocm91Z2ggdGhlIGNvbnRyb2xsZXIpIC0gdGhlIHJlZHVuZGFuY3kgaXMgdGhlIHBvaW50LCBiZWNhdXNlIGEgd3JpdGUgdGhhdCBvbmx5IG9uZSBsYXllciBzYXcgaXMgZXhhY3RseSB0aGUga2luZCBvZiBtYXNrZWQgaXNzdWUgdGhlc2UgbG9ncyBleGlzdCB0byBleHBvc2UuIFN0cmVhbS1vbmx5IC0gb25lIGVudHJ5IHBlciB3cml0ZSBpcyBleGFjdGx5IHdoYXQgdGhlIGNvbnNvbGUgZG9lcyBOT1QgbmVlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dNdXRhdGlvbihlbnRyeTogeyBvcDogc3RyaW5nOyBhY2NvdW50Pzogc3RyaW5nOyBidWNrZXROYW1lPzogc3RyaW5nOyBzdG9yZT86IHN0cmluZzsgZm9sZGVyPzogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHRvUGF0aD86IHN0cmluZzsgc2l6ZT86IG51bWJlcjsgd3JpdGVUaW1lPzogbnVtYmVyOyBjYWxsZXJJZD86IHN0cmluZzsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB3cml0ZShcIm11dGF0aW9uXCIsIGVudHJ5LCBmYWxzZSk7XG59XG5cbi8qKiBBIHN5bmNocm9uaXphdGlvbiBrZXkgcG9pbnQ6IHNjYW5zIGFuZCBmdWxsIHN5bmNzIHN0YXJ0aW5nL2ZpbmlzaGluZywgcmVjb25jaWxlcywgYm91bmRhcnkgc2NhbnMgLSB3aGF0IGFuIG9wZXJhdG9yIGdyZXBzIGZvciB0byBzZWUgd2hldGhlciB0aGUgZmxlZXQgaXMgY29udmVyZ2luZy4gQWxzbyBwcmludGVkIHRvIHRoZSBjb25zb2xlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ1N5bmNFdmVudChlbnRyeTogeyBldmVudDogc3RyaW5nOyBzdG9yZTogc3RyaW5nOyBzb3VyY2U/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSk6IHZvaWQge1xuICAgIHdyaXRlKFwic3luY1wiLCBlbnRyeSwgdHJ1ZSk7XG59XG5cbi8qKiBPbmUgY29uc29sZS5lcnJvciBpcyBhbGwgYW4gZXJyb3IgdGFrZXMgKGNvbnNvbGUuZXJyb3IgYW5kIGNvbnNvbGUud2FybiBhcmUgSE9PS0VEIHRvIGZlZWQgdGhlIHN0cmVhbSkgLSB0aGlzIGp1c3QgZ3VhcmFudGVlcyB0aGUgaG9vayBpcyBpbnN0YWxsZWQgZmlyc3QsIGZvciB2ZXJ5LWVhcmx5IGNhbGxlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nU3RvcmFnZUVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGdldExvZ3MoKTtcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKiogbG9nU3RvcmFnZUVycm9yIGF0IHdhcm4gbGV2ZWw6IGd1YXJhbnRlZXMgdGhlIGNvbnNvbGUud2FybiBob29rIGlzIGluc3RhbGxlZCBiZWZvcmUgd2FybmluZywgc28gd2FybmluZ3MgZnJvbSBiZWZvcmUgdGhlIGZpcnN0IGxvZ2dlZCBtdXRhdGlvbiBzdGlsbCByZWFjaCB0aGUgc3RyZWFtLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ1N0b3JhZ2VXYXJuKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGdldExvZ3MoKTtcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG59XG5cbi8vIEV2ZXJ5dGhpbmcgY29uc29sZS5lcnJvcmVkIG9yIGNvbnNvbGUud2FybmVkIGFsc28gbGFuZHMgaW4gdGhlIGxvZyBzdHJlYW0gKHdpdGggYSByZWVudHJhbmN5IGd1YXJkOiBhIGZhaWx1cmUgSU5TSURFIGxvZ2dpbmcgbXVzdCBub3QgbG9nIGl0c2VsZiBmb3JldmVyKVxubGV0IHdyaXRpbmdIb29rZWQgPSBmYWxzZTtcbmNvbnN0IGhvb2tFcnJvckxvZ2dpbmcgPSBsYXp5KCgpID0+IHtcbiAgICBmb3IgKGxldCBsZXZlbCBvZiBbXCJlcnJvclwiLCBcIndhcm5cIl0gYXMgY29uc3QpIHtcbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29uc29sZVtsZXZlbF0uYmluZChjb25zb2xlKTtcbiAgICAgICAgY29uc29sZVtsZXZlbF0gPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICBvcmlnaW5hbCguLi5hcmdzKTtcbiAgICAgICAgICAgIGlmICh3cml0aW5nSG9va2VkKSByZXR1cm47XG4gICAgICAgICAgICB3cml0aW5nSG9va2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgd3JpdGUobGV2ZWwsIHsgbWVzc2FnZTogYXJncy5tYXAoeCA9PiB0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiAmJiB4IHx8ICgoeCBhcyBFcnJvcik/LnN0YWNrID8/IEpTT04uc3RyaW5naWZ5KHgpKSkuam9pbihcIiBcIikuc2xpY2UoMCwgNTAwMCkgfSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBjYXRjaCB7IH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgd3JpdGluZ0hvb2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn0pO1xuXG4vKiogVGhlIGxvZyBmaWxlcyB0aGlzIHNlcnZlciBob2xkcyAtIHNlZSBTdHJlYW1pbmdMb2dzLmxpc3RGaWxlcy4gRW1wdHkgb24gcHJvY2Vzc2VzIHdpdGggbm8gc3RvcmFnZSBmb2xkZXIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFN0b3JhZ2VMb2dGaWxlcygpOiBQcm9taXNlPExvZ0ZpbGVJbmZvW10+IHtcbiAgICBsZXQgbG9ncyA9IGdldExvZ3MoKTtcbiAgICBpZiAoIWxvZ3MpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXdhaXQgbG9ncy5saXN0RmlsZXMoKTtcbn1cblxuLyoqIE9uZSBsb2cgZmlsZSdzIGJ5dGVzLCBhbHdheXMgTFo0LWNvbXByZXNzZWQgLSBzZWUgU3RyZWFtaW5nTG9ncy5yZWFkRmlsZUNvbXByZXNzZWQgKGRlY29kZSB3aXRoIGRlY29kZUxvZ0ZpbGUpLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdG9yYWdlTG9nRmlsZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGxldCBsb2dzID0gZ2V0TG9ncygpO1xuICAgIGlmICghbG9ncykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgcHJvY2VzcyBoYXMgbm8gc3RvcmFnZSBmb2xkZXIsIHNvIGl0IGhhcyBubyBsb2dzIHRvIHJlYWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGxvZ3MucmVhZEZpbGVDb21wcmVzc2VkKG5hbWUpO1xufVxuIl19
134
+ /* _JS_SOURCE_HASH = "a5215e3a8003c30f28fd2f53ecb2fc96ed8b490bfdce6647ee2918e246783e2e"; */