sliftutils 1.8.1 → 1.8.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliftutils",
3
- "version": "1.8.1",
3
+ "version": "1.8.3",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -1,4 +1,4 @@
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
  // Locations the daemon owns. Fixed rather than configurable, so every machine looks the same and
3
3
  // the config file only carries what genuinely differs between them.
4
4
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
@@ -23,4 +23,4 @@ exports.SIGNER_CHANGE_DELAY = 24 * 60 * 60 * 1000;
23
23
  // recovers from corruption and interrupted fetches. Counted in checks, so about a quarter hour.
24
24
  exports.MAX_REPO_FAILURES_BEFORE_RECLONE = 15;
25
25
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUdBQWlHO0FBQ2pHLG9FQUFvRTs7O0FBRXZELFFBQUEsV0FBVyxHQUFHLDZCQUE2QixDQUFDO0FBQzVDLFFBQUEsVUFBVSxHQUFHLGdDQUFnQyxDQUFDO0FBQzlDLFFBQUEsaUJBQWlCLEdBQUcsNkNBQTZDLENBQUM7QUFDbEUsUUFBQSxvQkFBb0IsR0FBRyw0QkFBNEIsQ0FBQztBQUNwRCxRQUFBLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDO0FBQzFDLFFBQUEsZUFBZSxHQUFHLHdCQUF3QixDQUFDO0FBQzNDLFFBQUEsZ0JBQWdCLEdBQUcsMkNBQTJDLENBQUM7QUFDL0QsUUFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBQzVCLFFBQUEsYUFBYSxHQUFHLG1CQUFtQixDQUFDO0FBRXBDLFFBQUEsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBQSxzQkFBc0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN2QyxRQUFBLFdBQVcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQUEscUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLCtGQUErRjtBQUMvRix3RkFBd0Y7QUFDM0UsUUFBQSxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdkQsNEZBQTRGO0FBQzVGLGdHQUFnRztBQUNuRixRQUFBLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExvY2F0aW9ucyB0aGUgZGFlbW9uIG93bnMuIEZpeGVkIHJhdGhlciB0aGFuIGNvbmZpZ3VyYWJsZSwgc28gZXZlcnkgbWFjaGluZSBsb29rcyB0aGUgc2FtZSBhbmRcbi8vIHRoZSBjb25maWcgZmlsZSBvbmx5IGNhcnJpZXMgd2hhdCBnZW51aW5lbHkgZGlmZmVycyBiZXR3ZWVuIHRoZW0uXG5cbmV4cG9ydCBjb25zdCBDT05GSUdfUEFUSCA9IFwiL2V0Yy9wb3J0c2VjdXJlL2RhZW1vbi5qc29uXCI7XG5leHBvcnQgY29uc3QgU1RBVEVfUEFUSCA9IFwiL3Zhci9saWIvcG9ydHNlY3VyZS9zdGF0ZS5qc29uXCI7XG5leHBvcnQgY29uc3QgS0VZU19ISVNUT1JZX1BBVEggPSBcIi92YXIvbGliL3BvcnRzZWN1cmUvYXV0aG9yaXplZC1rZXlzLWhpc3RvcnlcIjtcbmV4cG9ydCBjb25zdCBST09UX0FVVEhPUklaRURfS0VZUyA9IFwiL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXNcIjtcbmV4cG9ydCBjb25zdCBTU0hEX0NPTkZJR19QQVRIID0gXCIvZXRjL3NzaC9zc2hkX2NvbmZpZ1wiO1xuZXhwb3J0IGNvbnN0IFNTSERfRFJPUElOX0RJUiA9IFwiL2V0Yy9zc2gvc3NoZF9jb25maWcuZFwiO1xuZXhwb3J0IGNvbnN0IFNTSERfRFJPUElOX1BBVEggPSBcIi9ldGMvc3NoL3NzaGRfY29uZmlnLmQvMDAtcG9ydHNlY3VyZS5jb25mXCI7XG5leHBvcnQgY29uc3QgUEFTU1dEX1BBVEggPSBcIi9ldGMvcGFzc3dkXCI7XG5leHBvcnQgY29uc3QgQVVUSF9MT0dfUEFUSCA9IFwiL3Zhci9sb2cvYXV0aC5sb2dcIjtcblxuZXhwb3J0IGNvbnN0IENIRUNLX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IFdFQkhPT0tfQ0hFQ0tfSU5URVJWQUwgPSA1ICogNjAgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IEdJVF9USU1FT1VUID0gMTIwICogMTAwMDtcbmV4cG9ydCBjb25zdCBNQVhfRVJST1JfQk9EWV9MRU5HVEggPSA1MDA7XG4vLyBBIHNvdXJjZSB0aGF0IHN0YXJ0cyBiZWluZyBzaWduZWQgYnkgc29tZW9uZSBuZXcgaXMgaGVsZCBhdCBhcm0ncyBsZW5ndGggZm9yIHRoaXMgbG9uZywgc28gYVxuLy8gc3RvbGVuIHNpZ25pbmcga2V5IGNhbm5vdCBwdXNoIGtleXMgb250byBhIG1hY2hpbmUgYmVmb3JlIGFueW9uZSBub3RpY2VzIHRoZSB3YXJuaW5nLlxuZXhwb3J0IGNvbnN0IFNJR05FUl9DSEFOR0VfREVMQVkgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuLy8gQWZ0ZXIgdGhpcyBtYW55IGNvbnNlY3V0aXZlIGZhaWx1cmVzIGEgcmVwbyBpcyB0aHJvd24gYXdheSBhbmQgY2xvbmVkIGZyb20gc2NyYXRjaCwgd2hpY2hcbi8vIHJlY292ZXJzIGZyb20gY29ycnVwdGlvbiBhbmQgaW50ZXJydXB0ZWQgZmV0Y2hlcy4gQ291bnRlZCBpbiBjaGVja3MsIHNvIGFib3V0IGEgcXVhcnRlciBob3VyLlxuZXhwb3J0IGNvbnN0IE1BWF9SRVBPX0ZBSUxVUkVTX0JFRk9SRV9SRUNMT05FID0gMTU7XG4iXX0=
26
- /* _JS_SOURCE_HASH = "d214733e56571f96efa46794d88b788ac72af825fd2d9633e88572404bbde2ad"; */
26
+ /* _JS_SOURCE_HASH = "c606b0bfd0484c71ea64ce15490c8a5c417cd888ee8184397cc81fed374ef249"; */
@@ -3,7 +3,7 @@ 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.readSignedRepo = exports.SignedRepoError = exports.noteRevocation = exports.isPairUnrevoked = exports.isPairRevoked = exports.isIdentityFrozen = exports.UNSIGNED = void 0;
6
+ //exports.readSignedRepo = exports.SignedRepoError = exports.noteRevocation = exports.isPairUnrevoked = exports.isPairRevoked = exports.listRevocations = exports.identityFrozenBy = exports.UNSIGNED = void 0;
7
7
  const crypto_1 = __importDefault(require("crypto"));
8
8
  const promises_1 = __importDefault(require("fs/promises"));
9
9
  const path_1 = __importDefault(require("path"));
@@ -39,18 +39,16 @@ async function committedContents(repoPath, filePath) {
39
39
  }
40
40
  return Buffer.from(result.stdout, "utf8");
41
41
  }
42
- // Every revocation this process has ever seen, keyed by revocation id. Once absorbed a revocation
43
- // never leaves, even if its file disappears from the revoke repo - the key that writes revocations
44
- // is on every server, so whoever stole one could otherwise erase the record that shut them out.
45
- // Restarting the process is the way back from a revocation that should not have happened.
46
42
  let absorbedRevocations = new Map();
47
43
  // The pairs the signed unrevokes allow, and the legacy revocation ids they name. Rebuilt on every
48
44
  // read, since unrevokes are signed content and removing one must take effect.
49
45
  let unrevokedPairs = new Set();
50
46
  let unrevokedIds = new Set();
51
- /** Whether an identity - a key fingerprint or a machine id - has a revocation nothing has undone.
52
- The one meaning of "frozen", used both when stripping repo content and when explaining why. */
53
- function isIdentityFrozen(identity) {
47
+ /** The revocation freezing an identity - a key fingerprint or a machine id - or nothing if it is
48
+ not frozen. The one meaning of "frozen", used both when stripping repo content and when
49
+ explaining why, and it hands back the revocation rather than a bare yes so that whoever has to
50
+ explain it can say which address it was, and when, instead of "an unapproved address". */
51
+ function identityFrozenBy(identity) {
54
52
  for (let [revocationId, revocation] of absorbedRevocations) {
55
53
  if (revocation.identity !== identity) {
56
54
  continue;
@@ -58,11 +56,21 @@ function isIdentityFrozen(identity) {
58
56
  if (unrevokedIds.has(revocationId) || unrevokedPairs.has(`${identity} ${revocation.ip}`)) {
59
57
  continue;
60
58
  }
61
- return true;
59
+ return { ...revocation, revocationId };
62
60
  }
63
- return false;
61
+ return undefined;
62
+ }
63
+ exports.identityFrozenBy = identityFrozenBy;
64
+ /** Every revocation this process has absorbed, and whether an unrevoke has since forgiven it. For
65
+ anything showing the whole picture rather than asking about one identity. */
66
+ function listRevocations() {
67
+ return [...absorbedRevocations].map(([revocationId, revocation]) => ({
68
+ ...revocation,
69
+ revocationId,
70
+ forgiven: unrevokedIds.has(revocationId) || unrevokedPairs.has(`${revocation.identity} ${revocation.ip}`),
71
+ }));
64
72
  }
65
- exports.isIdentityFrozen = isIdentityFrozen;
73
+ exports.listRevocations = listRevocations;
66
74
  function isPairRevoked(identity, ip) {
67
75
  for (let [revocationId, revocation] of absorbedRevocations) {
68
76
  if (revocation.identity === identity && revocation.ip === ip && !unrevokedIds.has(revocationId)) {
@@ -78,8 +86,8 @@ function isPairUnrevoked(identity, ip) {
78
86
  exports.isPairUnrevoked = isPairUnrevoked;
79
87
  /** For whoever just wrote a revocation, so it holds here immediately rather than on the next
80
88
  absorb. Sticky like the rest. */
81
- function noteRevocation(revocationId, identity, ip) {
82
- absorbedRevocations.set(revocationId, { identity, ip });
89
+ function noteRevocation(revocationId, revocation) {
90
+ absorbedRevocations.set(revocationId, revocation);
83
91
  }
84
92
  exports.noteRevocation = noteRevocation;
85
93
  /** A repo whose signature does not check out, with the message ready for whoever asked. Not every
@@ -214,7 +222,12 @@ async function readSignedRepo(config) {
214
222
  }
215
223
  let revocationId = parsed.revocationId || name.replace(/\.json$/, "");
216
224
  if (!absorbedRevocations.has(revocationId)) {
217
- absorbedRevocations.set(revocationId, { identity, ip: parsed.ip || ((_a = parsed.attempt) === null || _a === void 0 ? void 0 : _a.ip) || "" });
225
+ absorbedRevocations.set(revocationId, {
226
+ identity,
227
+ ip: parsed.ip || ((_a = parsed.attempt) === null || _a === void 0 ? void 0 : _a.ip) || "",
228
+ revokedAt: parsed.revokedAt || "",
229
+ revokedBy: parsed.revokedBy || "",
230
+ });
218
231
  }
219
232
  }
220
233
  catch (e) {
@@ -253,8 +266,9 @@ async function readSignedRepo(config) {
253
266
  let lines = contents.toString("utf8").split("\n");
254
267
  let kept = lines.filter(line => {
255
268
  let fingerprint = (0, authorizedKeys_1.keyFingerprint)(line);
256
- if (fingerprint && isIdentityFrozen(fingerprint)) {
257
- console.log(`Dropping revoked key ${fingerprint} from ${path_1.default.join(repoPath, filePath)}`);
269
+ let frozen = fingerprint && identityFrozenBy(fingerprint);
270
+ if (frozen) {
271
+ console.log(`Dropping revoked key ${fingerprint} from ${path_1.default.join(repoPath, filePath)}, used from ${frozen.ip}`);
258
272
  return false;
259
273
  }
260
274
  return true;
@@ -265,8 +279,9 @@ async function readSignedRepo(config) {
265
279
  }
266
280
  if (filePath.startsWith("machines/") && filePath.endsWith(".json")) {
267
281
  let machineId = filePath.slice("machines/".length, -".json".length);
268
- if (isIdentityFrozen(machineId)) {
269
- console.log(`Dropping frozen machine ${machineId} from ${path_1.default.join(repoPath, filePath)}`);
282
+ let frozen = identityFrozenBy(machineId);
283
+ if (frozen) {
284
+ console.log(`Dropping frozen machine ${machineId} from ${path_1.default.join(repoPath, filePath)}, used from ${frozen.ip}`);
270
285
  files.delete(filePath);
271
286
  }
272
287
  }
@@ -274,5 +289,5 @@ async function readSignedRepo(config) {
274
289
  return { signer, manifestHash, signatureHash, files };
275
290
  }
276
291
  exports.readSignedRepo = readSignedRepo;
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZFNpZ25lZFJlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWFkU2lnbmVkUmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsMkRBQTZCO0FBQzdCLGdEQUF3QjtBQUN4Qix5REFBNkc7QUFDN0cscURBQXdEO0FBQ3hELHNEQUFtRDtBQUNuRCxrREFBaUQ7QUFDakQsK0NBQW1EO0FBQ25ELG1DQUFzQztBQUV0QyxpR0FBaUc7QUFDakcsbURBQW1EO0FBQ3RDLFFBQUEsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMzQiw2RkFBNkY7QUFDN0Ysa0NBQWtDO0FBQ2xDLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDO0FBQzFDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFFbEM7Ozs7OzREQUs0RDtBQUM1RCxLQUFLLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtJQUMvRCxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUEsb0JBQVksRUFBQztRQUM1QixPQUFPLEVBQUUsS0FBSztRQUNkLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVELEdBQUcsRUFBRSxRQUFRO1FBQ2IsV0FBVyxFQUFFLG1CQUFXO0tBQzNCLENBQUMsQ0FBQztJQUNILElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsa0dBQWtHO0FBQ2xHLG1HQUFt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QUFDO0lBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzFELENBQUM7QUEvTEQsd0NBK0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgTUFOSUZFU1RfTkFNRSwgbm9ybWFsaXplQ29udGVudCwgU0lHTl9OQU1FU1BBQ0UsIFNJR05BVFVSRV9OQU1FIH0gZnJvbSBcIi4uLy4uL3NpZ25lZEZpbGVzL21hbmlmZXN0XCI7XG5pbXBvcnQgeyB2ZXJpZnlTU0hTSUcgfSBmcm9tIFwiLi4vLi4vc2lnbmVkRmlsZXMvc3Noc2lnXCI7XG5pbXBvcnQgeyBrZXlGaW5nZXJwcmludCB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5c1wiO1xuaW1wb3J0IHsgcmV2b2tlUmVwb1BhdGggfSBmcm9tIFwiLi4vcmV2b2tlU291cmNlXCI7XG5pbXBvcnQgeyBzcGF3blByb21pc2UgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9zcGF3blwiO1xuaW1wb3J0IHsgR0lUX1RJTUVPVVQgfSBmcm9tIFwiLi9wYXRoc1wiO1xuXG4vLyBBIHNvdXJjZSB0aGF0IGhhcyBuZXZlciBiZWVuIHNpZ25lZCByZWFkcyBhcyB0aGlzLCBzbyBsb3NpbmcgYSBzaWduYXR1cmUgY291bnRzIGFzIGEgY2hhbmdlIG9mXG4vLyBzaWduZXIgcmF0aGVyIHRoYW4gYXMgc29tZXRoaW5nIHRvIHdhdmUgdGhyb3VnaC5cbmV4cG9ydCBjb25zdCBVTlNJR05FRCA9IFwiXCI7XG4vLyBXaGF0IGZpeGVzIGJvdGggb2YgdGhlIHNpZ25hdHVyZSBwcm9ibGVtcyB3ZSByZXBvcnQsIHNvIHRoZSBtZXNzYWdlIGNhbiBzYXkgc28gcmF0aGVyIHRoYW5cbi8vIGxlYXZpbmcgc29tZW9uZSB0byB3b3JrIGl0IG91dC5cbmNvbnN0IFNJR05fQ09NTUFORCA9IFwieWFybiBzaWduZmlsZXMgZ2l0XCI7XG5jb25zdCBSRVZPQ0FUSU9OU19ESVIgPSBcInJldm9jYXRpb25zXCI7XG5jb25zdCBVTlJFVk9LRVNfRElSID0gXCJ1bnJldm9rZWRcIjtcblxuLyoqIFdoYXQgdGhlIGxhc3QgY29tbWl0IGhvbGRzIGZvciBhIGZpbGUsIHdoYXRldmVyIHRoZSB3b3JraW5nIHRyZWUgaGFzIGRvbmUgdG8gaXQgc2luY2UuXG5cbiAgICBPbmx5IGV2ZXIgY29uc3VsdGVkIHdoZW4gd2hhdCBpcyBvbiBkaXNrIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUsIHNvIHRoZSBub3JtYWwgY2FzZSBjb3N0c1xuICAgIG5vIGdpdCBhdCBhbGwuIFRoZSBjb250ZW50IHN0aWxsIGhhcyB0byBtYXRjaCB0aGUgbWFuaWZlc3QgdG8gYmUgdXNlZCwgc28gYSBjaGVja291dCB0aGF0IGlzXG4gICAgbm90IGEgZ2l0IHJlcG8sIGEgcGF0aCB0aGF0IHdhcyBuZXZlciBjb21taXR0ZWQsIGFuZCBjb250ZW50IG1hbmdsZWQgb24gaXRzIHdheSBvdXQgb2YgZ2l0IGFsbFxuICAgIGVuZCB0aGUgc2FtZSB3YXk6IG5vIG1hdGNoLCBhbmQgdGhlIGZpbGUgaXMgbGVmdCBvdXQuICovXG5hc3luYyBmdW5jdGlvbiBjb21taXR0ZWRDb250ZW50cyhyZXBvUGF0aDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHNwYXduUHJvbWlzZSh7XG4gICAgICAgIGNvbW1hbmQ6IFwiZ2l0XCIsXG4gICAgICAgIGFyZ3M6IFtcInNob3dcIiwgYEhFQUQ6JHtmaWxlUGF0aC5zcGxpdChwYXRoLnNlcCkuam9pbihcIi9cIil9YF0sXG4gICAgICAgIGN3ZDogcmVwb1BhdGgsXG4gICAgICAgIHRpbWVvdXRUaW1lOiBHSVRfVElNRU9VVCxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yIHx8IHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRvdXQsIFwidXRmOFwiKTtcbn1cblxuLy8gRXZlcnkgcmV2b2NhdGlvbiB0aGlzIHByb2Nlc3MgaGFzIGV2ZXIgc2Vlbiwga2V5ZWQgYnkgcmV2b2NhdGlvbiBpZC4gT25jZSBhYnNvcmJlZCBhIHJldm9jYXRpb25cbi8vIG5ldmVyIGxlYXZlcywgZXZlbiBpZiBpdHMgZmlsZSBkaXNhcHBlYXJzIGZyb20gdGhlIHJldm9rZSByZXBvIC0gdGhlIGtleSB0aGF0IHdyaXRlcyByZXZvY2F0aW9uc1xuLy8gaXMgb24gZXZlcnkgc2VydmVyLCBzbyB3aG9ldmVyIHN0b2xlIG9uZSBjb3VsZCBvdGhlcndpc2UgZXJhc2UgdGhlIHJlY29yZCB0aGF0IHNodXQgdGhlbSBvdXQuXG4vLyBSZXN0YXJ0aW5nIHRoZSBwcm9jZXNzIGlzIHRoZSB3YXkgYmFjayBmcm9tIGEgcmV2b2NhdGlvbiB0aGF0IHNob3VsZCBub3QgaGF2ZSBoYXBwZW5lZC5cbmxldCBhYnNvcmJlZFJldm9jYXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIHsgaWRlbnRpdHk6IHN0cmluZzsgaXA6IHN0cmluZyB9PigpO1xuLy8gVGhlIHBhaXJzIHRoZSBzaWduZWQgdW5yZXZva2VzIGFsbG93LCBhbmQgdGhlIGxlZ2FjeSByZXZvY2F0aW9uIGlkcyB0aGV5IG5hbWUuIFJlYnVpbHQgb24gZXZlcnlcbi8vIHJlYWQsIHNpbmNlIHVucmV2b2tlcyBhcmUgc2lnbmVkIGNvbnRlbnQgYW5kIHJlbW92aW5nIG9uZSBtdXN0IHRha2UgZWZmZWN0LlxubGV0IHVucmV2b2tlZFBhaXJzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5sZXQgdW5yZXZva2VkSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKiBXaGV0aGVyIGFuIGlkZW50aXR5IC0gYSBrZXkgZmluZ2VycHJpbnQgb3IgYSBtYWNoaW5lIGlkIC0gaGFzIGEgcmV2b2NhdGlvbiBub3RoaW5nIGhhcyB1bmRvbmUuXG4gICAgVGhlIG9uZSBtZWFuaW5nIG9mIFwiZnJvemVuXCIsIHVzZWQgYm90aCB3aGVuIHN0cmlwcGluZyByZXBvIGNvbnRlbnQgYW5kIHdoZW4gZXhwbGFpbmluZyB3aHkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZGVudGl0eUZyb3plbihpZGVudGl0eTogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgW3Jldm9jYXRpb25JZCwgcmV2b2NhdGlvbl0gb2YgYWJzb3JiZWRSZXZvY2F0aW9ucykge1xuICAgICAgICBpZiAocmV2b2NhdGlvbi5pZGVudGl0eSAhPT0gaWRlbnRpdHkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bnJldm9rZWRJZHMuaGFzKHJldm9jYXRpb25JZCkgfHwgdW5yZXZva2VkUGFpcnMuaGFzKGAke2lkZW50aXR5fSAke3Jldm9jYXRpb24uaXB9YCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhaXJSZXZva2VkKGlkZW50aXR5OiBzdHJpbmcsIGlwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBbcmV2b2NhdGlvbklkLCByZXZvY2F0aW9uXSBvZiBhYnNvcmJlZFJldm9jYXRpb25zKSB7XG4gICAgICAgIGlmIChyZXZvY2F0aW9uLmlkZW50aXR5ID09PSBpZGVudGl0eSAmJiByZXZvY2F0aW9uLmlwID09PSBpcCAmJiAhdW5yZXZva2VkSWRzLmhhcyhyZXZvY2F0aW9uSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhaXJVbnJldm9rZWQoaWRlbnRpdHk6IHN0cmluZywgaXA6IHN0cmluZykge1xuICAgIHJldHVybiB1bnJldm9rZWRQYWlycy5oYXMoYCR7aWRlbnRpdHl9ICR7aXB9YCk7XG59XG5cbi8qKiBGb3Igd2hvZXZlciBqdXN0IHdyb3RlIGEgcmV2b2NhdGlvbiwgc28gaXQgaG9sZHMgaGVyZSBpbW1lZGlhdGVseSByYXRoZXIgdGhhbiBvbiB0aGUgbmV4dFxuICAgIGFic29yYi4gU3RpY2t5IGxpa2UgdGhlIHJlc3QuICovXG5leHBvcnQgZnVuY3Rpb24gbm90ZVJldm9jYXRpb24ocmV2b2NhdGlvbklkOiBzdHJpbmcsIGlkZW50aXR5OiBzdHJpbmcsIGlwOiBzdHJpbmcpIHtcbiAgICBhYnNvcmJlZFJldm9jYXRpb25zLnNldChyZXZvY2F0aW9uSWQsIHsgaWRlbnRpdHksIGlwIH0pO1xufVxuXG4vKiogQSByZXBvIHdob3NlIHNpZ25hdHVyZSBkb2VzIG5vdCBjaGVjayBvdXQsIHdpdGggdGhlIG1lc3NhZ2UgcmVhZHkgZm9yIHdob2V2ZXIgYXNrZWQuIE5vdCBldmVyeVxuICAgIGNhbGxlciB0cmVhdHMgaXQgdGhlIHNhbWUgLSBhIHNvdXJjZSBrZWVwcyBpdHMgbGFzdCBrZXlzLCBhIG1hY2hpbmUgbGlzdCBpcyBqdXN0IHJlZnVzZWQgLSBzb1xuICAgIHRoZSBraW5kIGlzIGNhcnJpZWQgcmF0aGVyIHRoYW4gYWN0ZWQgb24gaGVyZS4gKi9cbmV4cG9ydCBjbGFzcyBTaWduZWRSZXBvRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHByb2JsZW06IHN0cmluZywgcHVibGljIGhlYWRsaW5lOiBzdHJpbmcsIHB1YmxpYyBib2R5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoYCR7aGVhZGxpbmV9LiAke2JvZHl9YCk7XG4gICAgfVxufVxuXG4vKiogRXZlcnl0aGluZyBhIHNpZ25lZCBjaGVja291dCB2b3VjaGVzIGZvciwgaW4gb25lIGNhbGw6IHdobyBzaWduZWQgaXQsIGFuZCB0aGUgY29udGVudHMgb2YgZXZlcnlcbiAgICBmaWxlIHRoZSBzaWduYXR1cmUgYWN0dWFsbHkgY292ZXJzLlxuXG4gICAgVU5TSUdORUQgd2l0aCBubyBmaWxlcyB3aGVuIHRoZXJlIGlzIG5vIHNpZ25hdHVyZSBhdCBhbGwuIFRocm93cyBhIFNpZ25lZFJlcG9FcnJvciBvbmx5IHdoZW4gdGhlXG4gICAgc2lnbmF0dXJlIG92ZXIgdGhlIG1hbmlmZXN0IGRvZXMgbm90IGhvbGQgdXAsIHNpbmNlIHRoZW4gbm90aGluZyBpbiB0aGUgcmVwbyBjYW4gYmUgYmVsaWV2ZWQgYW5kXG4gICAgdGhlIGNhbGxlciBrZWVwcyB3aGF0ZXZlciBpdCBsYXN0IGFjY2VwdGVkLlxuXG4gICAgSW5kaXZpZHVhbCBmaWxlcyBhcmUgaW5jbHVkZWQgb3IgbGVmdCBvdXQgb25lIGF0IGEgdGltZSwgYW5kIGEgZmlsZSBiZWluZyBsZWZ0IG91dCBuZXZlciBhZmZlY3RzXG4gICAgdGhlIG90aGVyczogYSBmaWxlIHRoZSBtYW5pZmVzdCBkb2VzIG5vdCBuYW1lLCBhIGZpbGUgd2hvc2UgY29udGVudHMgbm8gbG9uZ2VyIG1hdGNoIHdoYXQgd2FzXG4gICAgc2lnbmVkLCBhbmQgYSBmaWxlIHRoZSBtYW5pZmVzdCBuYW1lcyB0aGF0IGlzIG5vdCBvbiBkaXNrIGFyZSBhbGwgc2ltcGx5IGZpbGVzIHdlIGhvbGQgbm9cbiAgICBzaWduYXR1cmUgZm9yLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTaWduZWRSZXBvKGNvbmZpZzogeyByZXBvUGF0aDogc3RyaW5nOyBzb3VyY2VVUkw6IHN0cmluZyB9KTogUHJvbWlzZTx7XG4gICAgc2lnbmVyOiBzdHJpbmc7XG4gICAgbWFuaWZlc3RIYXNoOiBzdHJpbmc7XG4gICAgc2lnbmF0dXJlSGFzaDogc3RyaW5nO1xuICAgIGZpbGVzOiBNYXA8c3RyaW5nLCBCdWZmZXI+O1xufT4ge1xuICAgIGxldCB7IHJlcG9QYXRoLCBzb3VyY2VVUkwgfSA9IGNvbmZpZztcblxuICAgIGxldCBicm9rZW4gPSAoZGV0YWlsOiBzdHJpbmcpID0+IG5ldyBTaWduZWRSZXBvRXJyb3IoXG4gICAgICAgIFwiY29ycnVwdFwiLFxuICAgICAgICBgS0VZIFJFUE8gU0lHTkFUVVJFIElTIEJST0tFTmAsXG4gICAgICAgIGBUaGUgc2lnbmF0dXJlIG9uICR7cmVwb1BhdGh9IGRvZXMgbm90IGNoZWNrIG91dCwgc28gZXZlcnl0aGluZyBpbiBpdCBpcyBiZWluZyBpZ25vcmVkIGFuZGBcbiAgICAgICAgKyBgIHRoaXMgbWFjaGluZSBrZWVwcyB1c2luZyB3aGF0IGl0IGxhc3QgYWNjZXB0ZWQuXFxuXFxuJHtkZXRhaWx9YFxuICAgICAgICArIGBcXG5cXG5UbyByZXBsYWNlIHRoZSBzaWduYXR1cmUsIHJ1biBpbiB0aGF0IHJlcG86XFxuXFxgXFxgXFxgXFxuJHtTSUdOX0NPTU1BTkR9XFxuXFxgXFxgXFxgYFxuICAgICk7XG5cbiAgICAvLyBUaGUgc2lnbmF0dXJlIGNvdmVycyB0aGUgbm9ybWFsaXNlZCBieXRlcywgc28gYSBjaGVja291dCB0aGF0IGFycml2ZWQgd2l0aCBDUkxGIHN0aWxsXG4gICAgLy8gdmVyaWZpZXMgcmF0aGVyIHRoYW4gbG9va2luZyBsaWtlIHRhbXBlcmluZy5cbiAgICBsZXQgdmVyaWZ5UGFpciA9IChtYW5pZmVzdDogQnVmZmVyIHwgdW5kZWZpbmVkLCBzaWduYXR1cmU6IEJ1ZmZlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAoIW1hbmlmZXN0IHx8ICFzaWduYXR1cmUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2lnbmVyOiB2ZXJpZnlTU0hTSUcoe1xuICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZS50b1N0cmluZyhcInV0ZjhcIiksXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG5vcm1hbGl6ZUNvbnRlbnQobWFuaWZlc3QpLFxuICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IFNJR05fTkFNRVNQQUNFLFxuICAgICAgICAgICAgICAgIH0pLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICAgICAgICBtYW5pZmVzdEhhc2g6IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShtYW5pZmVzdCkuZGlnZXN0KFwiaGV4XCIpLFxuICAgICAgICAgICAgICAgIHNpZ25hdHVyZUhhc2g6IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShzaWduYXR1cmUpLmRpZ2VzdChcImhleFwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbGV0IGRpc2tNYW5pZmVzdCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihyZXBvUGF0aCwgTUFOSUZFU1RfTkFNRSkpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgbGV0IGRpc2tTaWduYXR1cmUgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ocmVwb1BhdGgsIFNJR05BVFVSRV9OQU1FKSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAvLyBXaGF0IHRoZSB3b3JraW5nIHRyZWUgaG9sZHMgaXMgd2hhdCB3ZSB3YW50LCB3aGVuIGl0IGhvbGRzIHNvbWV0aGluZyB0aGF0IHZlcmlmaWVzLlxuICAgIGxldCBzaWduZWQgPSB2ZXJpZnlQYWlyKGRpc2tNYW5pZmVzdCwgZGlza1NpZ25hdHVyZSk7XG4gICAgLy8gT3RoZXJ3aXNlIHRoZSBsYXN0IGNvbW1pdCwgd2hpY2ggaXMgdGhlIHN0YXRlIHNvbWVib2R5IGFjdHVhbGx5IHNpZ25lZCBhbmQgcHVzaGVkLiBBbiBlZGl0XG4gICAgLy8gaW4gcHJvZ3Jlc3MsIG9yIG9uZSBhYmFuZG9uZWQgaGFsZiB3YXksIHRoZW4gY29zdHMgbm90aGluZzogaXQgaXMgc2ltcGx5IG5vdCB3aGF0IHdlIHJlYWQuXG4gICAgaWYgKCFzaWduZWQpIHtcbiAgICAgICAgc2lnbmVkID0gdmVyaWZ5UGFpcihcbiAgICAgICAgICAgIGF3YWl0IGNvbW1pdHRlZENvbnRlbnRzKHJlcG9QYXRoLCBNQU5JRkVTVF9OQU1FKSxcbiAgICAgICAgICAgIGF3YWl0IGNvbW1pdHRlZENvbnRlbnRzKHJlcG9QYXRoLCBTSUdOQVRVUkVfTkFNRSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNpZ25lZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7cGF0aC5qb2luKHJlcG9QYXRoLCBNQU5JRkVTVF9OQU1FKX0gZG9lcyBub3QgdmVyaWZ5IGFzIGl0IGlzIGhlcmUsIHJlYWRpbmcgdGhlIGNvbW1pdHRlZCBvbmUgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFzaWduZWQpIHtcbiAgICAgICAgaWYgKCFkaXNrTWFuaWZlc3QgJiYgIWRpc2tTaWduYXR1cmUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3JlcG9QYXRofSBpcyBub3Qgc2lnbmVkLCBpZ25vcmluZyBhbGwgb2YgaXRzIGZpbGVzYCk7XG4gICAgICAgICAgICByZXR1cm4geyBzaWduZXI6IFVOU0lHTkVELCBtYW5pZmVzdEhhc2g6IFwiXCIsIHNpZ25hdHVyZUhhc2g6IFwiXCIsIGZpbGVzOiBuZXcgTWFwKCkgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRpc2tNYW5pZmVzdCB8fCAhZGlza1NpZ25hdHVyZSkge1xuICAgICAgICAgICAgdGhyb3cgYnJva2VuKGBPbmx5IG9uZSBvZiAke01BTklGRVNUX05BTUV9IGFuZCAke1NJR05BVFVSRV9OQU1FfSBpcyBwcmVzZW50LmApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGJyb2tlbihgTmVpdGhlciB0aGUgJHtNQU5JRkVTVF9OQU1FfSBoZXJlIG5vciB0aGUgY29tbWl0dGVkIG9uZSB2ZXJpZmllcy5gKTtcbiAgICB9XG4gICAgbGV0IHsgc2lnbmVyLCBtYW5pZmVzdEhhc2gsIHNpZ25hdHVyZUhhc2ggfSA9IHNpZ25lZDtcbiAgICBsZXQgbWFuaWZlc3RCeXRlcyA9IHNpZ25lZC5tYW5pZmVzdDtcblxuICAgIC8vIFRoZSBtYW5pZmVzdCBpcyB0aGUgbGlzdCBvZiBmaWxlcywgc28gaXQgaXMgdGhlIG9ubHkgdGhpbmcgd2UgcmVhZC4gV2hhdGV2ZXIgZWxzZSBpcyBpbiB0aGVcbiAgICAvLyBjaGVja291dCBpcyBuZXZlciBvcGVuZWQgYW5kIG5ldmVyIG1lbnRpb25lZCAtIGEgd29ya2luZyB0cmVlIGZ1bGwgb2Ygbm9kZV9tb2R1bGVzIGlzIG5vdFxuICAgIC8vIHNvbWV0aGluZyB0byByZXBvcnQgb24sIGl0IGlzIHNpbXBseSBub3Qgd2hhdCB3YXMgc2lnbmVkLlxuICAgIC8vXG4gICAgLy8gQSBmaWxlIGNvdW50cyBvbmx5IGlmIGl0cyBjb250ZW50cyBzdGlsbCBtYXRjaCB3aGF0IHRoZSBtYW5pZmVzdCBzYXlzLiBPbmUgdGhhdCBkb2VzIG5vdCBpc1xuICAgIC8vIGxlZnQgb3V0IG9uIGl0cyBvd246IGl0IGlzIGEgZmlsZSB3ZSBob2xkIG5vIHNpZ25hdHVyZSBmb3IsIGFuZCBpdCBzYXlzIG5vdGhpbmcgYWJvdXQgdGhlXG4gICAgLy8gZmlsZXMgdGhhdCBETyBtYXRjaC4gT25seSB0aGUgc2lnbmF0dXJlIG92ZXIgdGhlIG1hbmlmZXN0IGNhbiBkaXNjcmVkaXQgdGhlIHdob2xlIHJlcG8uXG4gICAgbGV0IG1hbmlmZXN0ID0gSlNPTi5wYXJzZShtYW5pZmVzdEJ5dGVzLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgbGV0IGxpc3RlZCA9IChtYW5pZmVzdC5maWxlcyB8fCBbXSkgYXMgeyBwYXRoOiBzdHJpbmc7IHNpemU6IG51bWJlcjsgc2hhMjU2OiBzdHJpbmcgfVtdO1xuXG4gICAgbGV0IG1hdGNoZXNNYW5pZmVzdCA9IChjb250ZW50czogQnVmZmVyIHwgdW5kZWZpbmVkLCBleHBlY3RlZDogeyBzaXplOiBudW1iZXI7IHNoYTI1Njogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKCFjb250ZW50cykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUNvbnRlbnQoY29udGVudHMpO1xuICAgICAgICBpZiAobm9ybWFsaXplZC5sZW5ndGggIT09IGV4cGVjdGVkLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShub3JtYWxpemVkKS5kaWdlc3QoXCJoZXhcIikgIT09IGV4cGVjdGVkLnNoYTI1Nikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICB9O1xuXG4gICAgbGV0IGZpbGVzID0gbmV3IE1hcDxzdHJpbmcsIEJ1ZmZlcj4oKTtcbiAgICBmb3IgKGxldCBleHBlY3RlZCBvZiBsaXN0ZWQpIHtcbiAgICAgICAgbGV0IGNvbnRlbnRzID0gbWF0Y2hlc01hbmlmZXN0KFxuICAgICAgICAgICAgYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHJlcG9QYXRoLCBleHBlY3RlZC5wYXRoKSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICk7XG4gICAgICAgIC8vIFNhbWUgYXMgZm9yIHRoZSBtYW5pZmVzdDogd2hhdCB0aGUgd29ya2luZyB0cmVlIGhvbGRzIGlzIHByZWZlcnJlZCwgYW5kIHRoZSBjb21taXR0ZWRcbiAgICAgICAgLy8gZmlsZSBpcyB3aGF0IHdlIGZhbGwgYmFjayB0by4gQSBmaWxlIGVkaXRlZCBidXQgbm90IHNpZ25lZCwgb3IgZGVsZXRlZCBieSBhY2NpZGVudCwgdGhlblxuICAgICAgICAvLyBnb2VzIG9uIHdvcmtpbmcgZnJvbSB0aGUgbGFzdCBzdGF0ZSBhbnlib2R5IHNpZ25lZC5cbiAgICAgICAgaWYgKCFjb250ZW50cykge1xuICAgICAgICAgICAgY29udGVudHMgPSBtYXRjaGVzTWFuaWZlc3QoYXdhaXQgY29tbWl0dGVkQ29udGVudHMocmVwb1BhdGgsIGV4cGVjdGVkLnBhdGgpLCBleHBlY3RlZCk7XG4gICAgICAgICAgICBpZiAoY29udGVudHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtwYXRoLmpvaW4ocmVwb1BhdGgsIGV4cGVjdGVkLnBhdGgpfSBkb2VzIG5vdCBtYXRjaCB0aGUgbWFuaWZlc3QgYXMgaXQgaXMgaGVyZSwgdXNpbmcgdGhlIGNvbW1pdHRlZCBvbmVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbnRlbnRzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBgSWdub3JpbmcgJHtwYXRoLmpvaW4ocmVwb1BhdGgsIGV4cGVjdGVkLnBhdGgpfSwgbmVpdGhlciBpdCBub3IgdGhlIGNvbW1pdHRlZCB2ZXJzaW9uYFxuICAgICAgICAgICAgICAgICsgYCBtYXRjaGVzIHRoZSBtYW5pZmVzdC4gUnVuICR7U0lHTl9DT01NQU5EfSBpbiB0aGF0IHJlcG8gdG8gc2lnbiBpdCBhcyBpdCBub3cgaXMuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVzLnNldChleHBlY3RlZC5wYXRoLCBjb250ZW50cyk7XG4gICAgfVxuXG4gICAgLy8gQWJzb3JiIHRoZSByZXZva2UgcmVwbydzIGZpbGVzIGludG8gdGhlIHN0aWNreSBtYXAuIE9uY2Ugc2VlbiBhIHJldm9jYXRpb24gbmV2ZXIgbGVhdmVzIGl0LFxuICAgIC8vIGV2ZW4gaWYgaXRzIGZpbGUgZGlzYXBwZWFycyAtIHRoZSBrZXkgdGhhdCB3cml0ZXMgcmV2b2NhdGlvbnMgaXMgb24gZXZlcnkgc2VydmVyLCBzbyB3aG9ldmVyXG4gICAgLy8gc3RvbGUgb25lIGNvdWxkIG90aGVyd2lzZSBlcmFzZSB0aGUgcmVjb3JkIHRoYXQgc2h1dCB0aGVtIG91dC5cbiAgICBsZXQgcmV2b2NhdGlvbnNEaXJlY3RvcnkgPSBwYXRoLmpvaW4ocmV2b2tlUmVwb1BhdGgoc291cmNlVVJMKSwgUkVWT0NBVElPTlNfRElSKTtcbiAgICBmb3IgKGxldCBuYW1lIG9mIChhd2FpdCBmcy5yZWFkZGlyKHJldm9jYXRpb25zRGlyZWN0b3J5KS5jYXRjaCgoKSA9PiBbXSBhcyBzdHJpbmdbXSkpLnNvcnQoKSkge1xuICAgICAgICBpZiAoIW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBwYXJzZWQgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihyZXZvY2F0aW9uc0RpcmVjdG9yeSwgbmFtZSksIFwidXRmOFwiKSk7XG4gICAgICAgICAgICBsZXQgaWRlbnRpdHkgPSBwYXJzZWQuZmluZ2VycHJpbnQgfHwgcGFyc2VkLm1hY2hpbmVJZDtcbiAgICAgICAgICAgIGlmICghaWRlbnRpdHkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByZXZvY2F0aW9uSWQgPSBwYXJzZWQucmV2b2NhdGlvbklkIHx8IG5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIlwiKTtcbiAgICAgICAgICAgIGlmICghYWJzb3JiZWRSZXZvY2F0aW9ucy5oYXMocmV2b2NhdGlvbklkKSkge1xuICAgICAgICAgICAgICAgIGFic29yYmVkUmV2b2NhdGlvbnMuc2V0KHJldm9jYXRpb25JZCwgeyBpZGVudGl0eSwgaXA6IHBhcnNlZC5pcCB8fCBwYXJzZWQuYXR0ZW1wdD8uaXAgfHwgXCJcIiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIHVucmVhZGFibGUgcmV2b2NhdGlvbiAke3BhdGguam9pbihyZXZvY2F0aW9uc0RpcmVjdG9yeSwgbmFtZSl9LiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZWJ1aWxkIHRoZSB1bnJldm9rZXMgZnJvbSB0aGUgc2lnbmVkIGZpbGVzIGp1c3QgcmVhZC4gVW5yZXZva2VzIGFyZSBzaWduZWQgY29udGVudCwgc29cbiAgICAvLyByZW1vdmluZyBvbmUgbXVzdCB0YWtlIGVmZmVjdCwgdW5saWtlIHRoZSBzdGlja3kgcmV2b2NhdGlvbnMuXG4gICAgdW5yZXZva2VkUGFpcnMgPSBuZXcgU2V0KCk7XG4gICAgdW5yZXZva2VkSWRzID0gbmV3IFNldCgpO1xuICAgIGZvciAobGV0IFtmaWxlUGF0aCwgY29udGVudHNdIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmICghZmlsZVBhdGguc3RhcnRzV2l0aChgJHtVTlJFVk9LRVNfRElSfS9gKSB8fCAhZmlsZVBhdGguZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRzLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICAgICAgICBmb3IgKGxldCBhbGxvd2VkIG9mIHBhcnNlZC5hbGxvd2VkIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkZW50aXR5ID0gYWxsb3dlZC5maW5nZXJwcmludCB8fCBhbGxvd2VkLm1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkgJiYgYWxsb3dlZC5pcCkge1xuICAgICAgICAgICAgICAgICAgICB1bnJldm9rZWRQYWlycy5hZGQoYCR7aWRlbnRpdHl9ICR7YWxsb3dlZC5pcH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCByZXZvY2F0aW9uSWQgb2YgcGFyc2VkLnJldm9jYXRpb25JZHMgfHwgW10pIHtcbiAgICAgICAgICAgICAgICB1bnJldm9rZWRJZHMuYWRkKHJldm9jYXRpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyB1bnJlYWRhYmxlIHVucmV2b2tlICR7ZmlsZVBhdGh9LiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEcm9wIGV2ZXJ5dGhpbmcgZnJvemVuOiByZXZva2VkIGtleXMgb3V0IG9mIGF1dGhvcml6ZWRfa2V5cyBhbmQgdG9wIGxldmVsIC5wdWIgZmlsZXMsIGFuZFxuICAgIC8vIGZyb3plbiBtYWNoaW5lcycgZmlsZXMgb3V0IG9mIG1hY2hpbmVzLy4gV2hhdCBjb21lcyBiYWNrIGlzIHdoYXQgdGhpcyBtYWNoaW5lIGFjdHVhbGx5XG4gICAgLy8gdHJ1c3RzLCBzbyBubyBjYWxsZXIgY2FuIHJlYWQgdGhlIGxpc3QgYW5kIGZvcmdldCB0aGUgcmV2b2NhdGlvbnMuXG4gICAgZm9yIChsZXQgW2ZpbGVQYXRoLCBjb250ZW50c10gb2YgWy4uLmZpbGVzXSkge1xuICAgICAgICBpZiAoZmlsZVBhdGggPT09IFwiYXV0aG9yaXplZF9rZXlzXCIgfHwgKGZpbGVQYXRoLmVuZHNXaXRoKFwiLnB1YlwiKSAmJiAhZmlsZVBhdGguaW5jbHVkZXMoXCIvXCIpKSkge1xuICAgICAgICAgICAgbGV0IGxpbmVzID0gY29udGVudHMudG9TdHJpbmcoXCJ1dGY4XCIpLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgICAgbGV0IGtlcHQgPSBsaW5lcy5maWx0ZXIobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbmdlcnByaW50ID0ga2V5RmluZ2VycHJpbnQobGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmdlcnByaW50ICYmIGlzSWRlbnRpdHlGcm96ZW4oZmluZ2VycHJpbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBEcm9wcGluZyByZXZva2VkIGtleSAke2ZpbmdlcnByaW50fSBmcm9tICR7cGF0aC5qb2luKHJlcG9QYXRoLCBmaWxlUGF0aCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChrZXB0Lmxlbmd0aCAhPT0gbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmlsZXMuc2V0KGZpbGVQYXRoLCBCdWZmZXIuZnJvbShrZXB0LmpvaW4oXCJcXG5cIikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aChcIm1hY2hpbmVzL1wiKSAmJiBmaWxlUGF0aC5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICBsZXQgbWFjaGluZUlkID0gZmlsZVBhdGguc2xpY2UoXCJtYWNoaW5lcy9cIi5sZW5ndGgsIC1cIi5qc29uXCIubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmIChpc0lkZW50aXR5RnJvemVuKG1hY2hpbmVJZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRHJvcHBpbmcgZnJvemVuIG1hY2hpbmUgJHttYWNoaW5lSWR9IGZyb20gJHtwYXRoLmpvaW4ocmVwb1BhdGgsIGZpbGVQYXRoKX1gKTtcbiAgICAgICAgICAgICAgICBmaWxlcy5kZWxldGUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2lnbmVyLCBtYW5pZmVzdEhhc2gsIHNpZ25hdHVyZUhhc2gsIGZpbGVzIH07XG59XG4iXX0=
278
- /* _JS_SOURCE_HASH = "a7f584e4bc3843982002db74c091f40816f174d63cc0fa58062f40d97dc2dcda"; */
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZFNpZ25lZFJlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWFkU2lnbmVkUmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsMkRBQTZCO0FBQzdCLGdEQUF3QjtBQUN4Qix5REFBNkc7QUFDN0cscURBQXdEO0FBQ3hELHNEQUFtRDtBQUNuRCxrREFBaUQ7QUFDakQsK0NBQW1EO0FBQ25ELG1DQUFzQztBQUV0QyxpR0FBaUc7QUFDakcsbURBQW1EO0FBQ3RDLFFBQUEsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMzQiw2RkFBNkY7QUFDN0Ysa0NBQWtDO0FBQ2xDLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDO0FBQzFDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFFbEM7Ozs7OzREQUs0RDtBQUM1RCxLQUFLLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtJQUMvRCxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUEsb0JBQVksRUFBQztRQUM1QixPQUFPLEVBQUUsS0FBSztRQUNkLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVELEdBQUcsRUFBRSxRQUFRO1FBQ2IsV0FBVyxFQUFFLG1CQUFXO0tBQzNCLENBQUMsQ0FBQztJQUNILElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBWUQsSUFBSSxtQkFBbUIsR0FBRyxJ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QztRQUNMLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRSxJQUFJLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLFNBQVMsU0FBUyxjQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsZUFBZSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbEgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQXRNRCx3Q0FzTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBNQU5JRkVTVF9OQU1FLCBub3JtYWxpemVDb250ZW50LCBTSUdOX05BTUVTUEFDRSwgU0lHTkFUVVJFX05BTUUgfSBmcm9tIFwiLi4vLi4vc2lnbmVkRmlsZXMvbWFuaWZlc3RcIjtcbmltcG9ydCB7IHZlcmlmeVNTSFNJRyB9IGZyb20gXCIuLi8uLi9zaWduZWRGaWxlcy9zc2hzaWdcIjtcbmltcG9ydCB7IGtleUZpbmdlcnByaW50IH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzXCI7XG5pbXBvcnQgeyByZXZva2VSZXBvUGF0aCB9IGZyb20gXCIuLi9yZXZva2VTb3VyY2VcIjtcbmltcG9ydCB7IHNwYXduUHJvbWlzZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL3NwYXduXCI7XG5pbXBvcnQgeyBHSVRfVElNRU9VVCB9IGZyb20gXCIuL3BhdGhzXCI7XG5cbi8vIEEgc291cmNlIHRoYXQgaGFzIG5ldmVyIGJlZW4gc2lnbmVkIHJlYWRzIGFzIHRoaXMsIHNvIGxvc2luZyBhIHNpZ25hdHVyZSBjb3VudHMgYXMgYSBjaGFuZ2Ugb2Zcbi8vIHNpZ25lciByYXRoZXIgdGhhbiBhcyBzb21ldGhpbmcgdG8gd2F2ZSB0aHJvdWdoLlxuZXhwb3J0IGNvbnN0IFVOU0lHTkVEID0gXCJcIjtcbi8vIFdoYXQgZml4ZXMgYm90aCBvZiB0aGUgc2lnbmF0dXJlIHByb2JsZW1zIHdlIHJlcG9ydCwgc28gdGhlIG1lc3NhZ2UgY2FuIHNheSBzbyByYXRoZXIgdGhhblxuLy8gbGVhdmluZyBzb21lb25lIHRvIHdvcmsgaXQgb3V0LlxuY29uc3QgU0lHTl9DT01NQU5EID0gXCJ5YXJuIHNpZ25maWxlcyBnaXRcIjtcbmNvbnN0IFJFVk9DQVRJT05TX0RJUiA9IFwicmV2b2NhdGlvbnNcIjtcbmNvbnN0IFVOUkVWT0tFU19ESVIgPSBcInVucmV2b2tlZFwiO1xuXG4vKiogV2hhdCB0aGUgbGFzdCBjb21taXQgaG9sZHMgZm9yIGEgZmlsZSwgd2hhdGV2ZXIgdGhlIHdvcmtpbmcgdHJlZSBoYXMgZG9uZSB0byBpdCBzaW5jZS5cblxuICAgIE9ubHkgZXZlciBjb25zdWx0ZWQgd2hlbiB3aGF0IGlzIG9uIGRpc2sgZG9lcyBub3QgbWF0Y2ggdGhlIHNpZ25hdHVyZSwgc28gdGhlIG5vcm1hbCBjYXNlIGNvc3RzXG4gICAgbm8gZ2l0IGF0IGFsbC4gVGhlIGNvbnRlbnQgc3RpbGwgaGFzIHRvIG1hdGNoIHRoZSBtYW5pZmVzdCB0byBiZSB1c2VkLCBzbyBhIGNoZWNrb3V0IHRoYXQgaXNcbiAgICBub3QgYSBnaXQgcmVwbywgYSBwYXRoIHRoYXQgd2FzIG5ldmVyIGNvbW1pdHRlZCwgYW5kIGNvbnRlbnQgbWFuZ2xlZCBvbiBpdHMgd2F5IG91dCBvZiBnaXQgYWxsXG4gICAgZW5kIHRoZSBzYW1lIHdheTogbm8gbWF0Y2gsIGFuZCB0aGUgZmlsZSBpcyBsZWZ0IG91dC4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbW1pdHRlZENvbnRlbnRzKHJlcG9QYXRoOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgc3Bhd25Qcm9taXNlKHtcbiAgICAgICAgY29tbWFuZDogXCJnaXRcIixcbiAgICAgICAgYXJnczogW1wic2hvd1wiLCBgSEVBRDoke2ZpbGVQYXRoLnNwbGl0KHBhdGguc2VwKS5qb2luKFwiL1wiKX1gXSxcbiAgICAgICAgY3dkOiByZXBvUGF0aCxcbiAgICAgICAgdGltZW91dFRpbWU6IEdJVF9USU1FT1VULFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IgfHwgcmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVzdWx0LnN0ZG91dCwgXCJ1dGY4XCIpO1xufVxuXG4vLyBFdmVyeSByZXZvY2F0aW9uIHRoaXMgcHJvY2VzcyBoYXMgZXZlciBzZWVuLCBrZXllZCBieSByZXZvY2F0aW9uIGlkLiBPbmNlIGFic29yYmVkIGEgcmV2b2NhdGlvblxuLy8gbmV2ZXIgbGVhdmVzLCBldmVuIGlmIGl0cyBmaWxlIGRpc2FwcGVhcnMgZnJvbSB0aGUgcmV2b2tlIHJlcG8gLSB0aGUga2V5IHRoYXQgd3JpdGVzIHJldm9jYXRpb25zXG4vLyBpcyBvbiBldmVyeSBzZXJ2ZXIsIHNvIHdob2V2ZXIgc3RvbGUgb25lIGNvdWxkIG90aGVyd2lzZSBlcmFzZSB0aGUgcmVjb3JkIHRoYXQgc2h1dCB0aGVtIG91dC5cbi8vIFJlc3RhcnRpbmcgdGhlIHByb2Nlc3MgaXMgdGhlIHdheSBiYWNrIGZyb20gYSByZXZvY2F0aW9uIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGhhcHBlbmVkLlxuZXhwb3J0IHR5cGUgUmV2b2NhdGlvbiA9IHtcbiAgICBpZGVudGl0eTogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgcmV2b2tlZEF0OiBzdHJpbmc7XG4gICAgcmV2b2tlZEJ5OiBzdHJpbmc7XG59O1xubGV0IGFic29yYmVkUmV2b2NhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgUmV2b2NhdGlvbj4oKTtcbi8vIFRoZSBwYWlycyB0aGUgc2lnbmVkIHVucmV2b2tlcyBhbGxvdywgYW5kIHRoZSBsZWdhY3kgcmV2b2NhdGlvbiBpZHMgdGhleSBuYW1lLiBSZWJ1aWx0IG9uIGV2ZXJ5XG4vLyByZWFkLCBzaW5jZSB1bnJldm9rZXMgYXJlIHNpZ25lZCBjb250ZW50IGFuZCByZW1vdmluZyBvbmUgbXVzdCB0YWtlIGVmZmVjdC5cbmxldCB1bnJldm9rZWRQYWlycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xubGV0IHVucmV2b2tlZElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKiogVGhlIHJldm9jYXRpb24gZnJlZXppbmcgYW4gaWRlbnRpdHkgLSBhIGtleSBmaW5nZXJwcmludCBvciBhIG1hY2hpbmUgaWQgLSBvciBub3RoaW5nIGlmIGl0IGlzXG4gICAgbm90IGZyb3plbi4gVGhlIG9uZSBtZWFuaW5nIG9mIFwiZnJvemVuXCIsIHVzZWQgYm90aCB3aGVuIHN0cmlwcGluZyByZXBvIGNvbnRlbnQgYW5kIHdoZW5cbiAgICBleHBsYWluaW5nIHdoeSwgYW5kIGl0IGhhbmRzIGJhY2sgdGhlIHJldm9jYXRpb24gcmF0aGVyIHRoYW4gYSBiYXJlIHllcyBzbyB0aGF0IHdob2V2ZXIgaGFzIHRvXG4gICAgZXhwbGFpbiBpdCBjYW4gc2F5IHdoaWNoIGFkZHJlc3MgaXQgd2FzLCBhbmQgd2hlbiwgaW5zdGVhZCBvZiBcImFuIHVuYXBwcm92ZWQgYWRkcmVzc1wiLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RnJvemVuQnkoaWRlbnRpdHk6IHN0cmluZykge1xuICAgIGZvciAobGV0IFtyZXZvY2F0aW9uSWQsIHJldm9jYXRpb25dIG9mIGFic29yYmVkUmV2b2NhdGlvbnMpIHtcbiAgICAgICAgaWYgKHJldm9jYXRpb24uaWRlbnRpdHkgIT09IGlkZW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5yZXZva2VkSWRzLmhhcyhyZXZvY2F0aW9uSWQpIHx8IHVucmV2b2tlZFBhaXJzLmhhcyhgJHtpZGVudGl0eX0gJHtyZXZvY2F0aW9uLmlwfWApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5yZXZvY2F0aW9uLCByZXZvY2F0aW9uSWQgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIEV2ZXJ5IHJldm9jYXRpb24gdGhpcyBwcm9jZXNzIGhhcyBhYnNvcmJlZCwgYW5kIHdoZXRoZXIgYW4gdW5yZXZva2UgaGFzIHNpbmNlIGZvcmdpdmVuIGl0LiBGb3JcbiAgICBhbnl0aGluZyBzaG93aW5nIHRoZSB3aG9sZSBwaWN0dXJlIHJhdGhlciB0aGFuIGFza2luZyBhYm91dCBvbmUgaWRlbnRpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdFJldm9jYXRpb25zKCkge1xuICAgIHJldHVybiBbLi4uYWJzb3JiZWRSZXZvY2F0aW9uc10ubWFwKChbcmV2b2NhdGlvbklkLCByZXZvY2F0aW9uXSkgPT4gKHtcbiAgICAgICAgLi4ucmV2b2NhdGlvbixcbiAgICAgICAgcmV2b2NhdGlvbklkLFxuICAgICAgICBmb3JnaXZlbjogdW5yZXZva2VkSWRzLmhhcyhyZXZvY2F0aW9uSWQpIHx8IHVucmV2b2tlZFBhaXJzLmhhcyhgJHtyZXZvY2F0aW9uLmlkZW50aXR5fSAke3Jldm9jYXRpb24uaXB9YCksXG4gICAgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYWlyUmV2b2tlZChpZGVudGl0eTogc3RyaW5nLCBpcDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgW3Jldm9jYXRpb25JZCwgcmV2b2NhdGlvbl0gb2YgYWJzb3JiZWRSZXZvY2F0aW9ucykge1xuICAgICAgICBpZiAocmV2b2NhdGlvbi5pZGVudGl0eSA9PT0gaWRlbnRpdHkgJiYgcmV2b2NhdGlvbi5pcCA9PT0gaXAgJiYgIXVucmV2b2tlZElkcy5oYXMocmV2b2NhdGlvbklkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYWlyVW5yZXZva2VkKGlkZW50aXR5OiBzdHJpbmcsIGlwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdW5yZXZva2VkUGFpcnMuaGFzKGAke2lkZW50aXR5fSAke2lwfWApO1xufVxuXG4vKiogRm9yIHdob2V2ZXIganVzdCB3cm90ZSBhIHJldm9jYXRpb24sIHNvIGl0IGhvbGRzIGhlcmUgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gb24gdGhlIG5leHRcbiAgICBhYnNvcmIuIFN0aWNreSBsaWtlIHRoZSByZXN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGVSZXZvY2F0aW9uKHJldm9jYXRpb25JZDogc3RyaW5nLCByZXZvY2F0aW9uOiBSZXZvY2F0aW9uKSB7XG4gICAgYWJzb3JiZWRSZXZvY2F0aW9ucy5zZXQocmV2b2NhdGlvbklkLCByZXZvY2F0aW9uKTtcbn1cblxuLyoqIEEgcmVwbyB3aG9zZSBzaWduYXR1cmUgZG9lcyBub3QgY2hlY2sgb3V0LCB3aXRoIHRoZSBtZXNzYWdlIHJlYWR5IGZvciB3aG9ldmVyIGFza2VkLiBOb3QgZXZlcnlcbiAgICBjYWxsZXIgdHJlYXRzIGl0IHRoZSBzYW1lIC0gYSBzb3VyY2Uga2VlcHMgaXRzIGxhc3Qga2V5cywgYSBtYWNoaW5lIGxpc3QgaXMganVzdCByZWZ1c2VkIC0gc29cbiAgICB0aGUga2luZCBpcyBjYXJyaWVkIHJhdGhlciB0aGFuIGFjdGVkIG9uIGhlcmUuICovXG5leHBvcnQgY2xhc3MgU2lnbmVkUmVwb0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9ibGVtOiBzdHJpbmcsIHB1YmxpYyBoZWFkbGluZTogc3RyaW5nLCBwdWJsaWMgYm9keTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGAke2hlYWRsaW5lfS4gJHtib2R5fWApO1xuICAgIH1cbn1cblxuLyoqIEV2ZXJ5dGhpbmcgYSBzaWduZWQgY2hlY2tvdXQgdm91Y2hlcyBmb3IsIGluIG9uZSBjYWxsOiB3aG8gc2lnbmVkIGl0LCBhbmQgdGhlIGNvbnRlbnRzIG9mIGV2ZXJ5XG4gICAgZmlsZSB0aGUgc2lnbmF0dXJlIGFjdHVhbGx5IGNvdmVycy5cblxuICAgIFVOU0lHTkVEIHdpdGggbm8gZmlsZXMgd2hlbiB0aGVyZSBpcyBubyBzaWduYXR1cmUgYXQgYWxsLiBUaHJvd3MgYSBTaWduZWRSZXBvRXJyb3Igb25seSB3aGVuIHRoZVxuICAgIHNpZ25hdHVyZSBvdmVyIHRoZSBtYW5pZmVzdCBkb2VzIG5vdCBob2xkIHVwLCBzaW5jZSB0aGVuIG5vdGhpbmcgaW4gdGhlIHJlcG8gY2FuIGJlIGJlbGlldmVkIGFuZFxuICAgIHRoZSBjYWxsZXIga2VlcHMgd2hhdGV2ZXIgaXQgbGFzdCBhY2NlcHRlZC5cblxuICAgIEluZGl2aWR1YWwgZmlsZXMgYXJlIGluY2x1ZGVkIG9yIGxlZnQgb3V0IG9uZSBhdCBhIHRpbWUsIGFuZCBhIGZpbGUgYmVpbmcgbGVmdCBvdXQgbmV2ZXIgYWZmZWN0c1xuICAgIHRoZSBvdGhlcnM6IGEgZmlsZSB0aGUgbWFuaWZlc3QgZG9lcyBub3QgbmFtZSwgYSBmaWxlIHdob3NlIGNvbnRlbnRzIG5vIGxvbmdlciBtYXRjaCB3aGF0IHdhc1xuICAgIHNpZ25lZCwgYW5kIGEgZmlsZSB0aGUgbWFuaWZlc3QgbmFtZXMgdGhhdCBpcyBub3Qgb24gZGlzayBhcmUgYWxsIHNpbXBseSBmaWxlcyB3ZSBob2xkIG5vXG4gICAgc2lnbmF0dXJlIGZvci4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU2lnbmVkUmVwbyhjb25maWc6IHsgcmVwb1BhdGg6IHN0cmluZzsgc291cmNlVVJMOiBzdHJpbmcgfSk6IFByb21pc2U8e1xuICAgIHNpZ25lcjogc3RyaW5nO1xuICAgIG1hbmlmZXN0SGFzaDogc3RyaW5nO1xuICAgIHNpZ25hdHVyZUhhc2g6IHN0cmluZztcbiAgICBmaWxlczogTWFwPHN0cmluZywgQnVmZmVyPjtcbn0+IHtcbiAgICBsZXQgeyByZXBvUGF0aCwgc291cmNlVVJMIH0gPSBjb25maWc7XG5cbiAgICBsZXQgYnJva2VuID0gKGRldGFpbDogc3RyaW5nKSA9PiBuZXcgU2lnbmVkUmVwb0Vycm9yKFxuICAgICAgICBcImNvcnJ1cHRcIixcbiAgICAgICAgYEtFWSBSRVBPIFNJR05BVFVSRSBJUyBCUk9LRU5gLFxuICAgICAgICBgVGhlIHNpZ25hdHVyZSBvbiAke3JlcG9QYXRofSBkb2VzIG5vdCBjaGVjayBvdXQsIHNvIGV2ZXJ5dGhpbmcgaW4gaXQgaXMgYmVpbmcgaWdub3JlZCBhbmRgXG4gICAgICAgICsgYCB0aGlzIG1hY2hpbmUga2VlcHMgdXNpbmcgd2hhdCBpdCBsYXN0IGFjY2VwdGVkLlxcblxcbiR7ZGV0YWlsfWBcbiAgICAgICAgKyBgXFxuXFxuVG8gcmVwbGFjZSB0aGUgc2lnbmF0dXJlLCBydW4gaW4gdGhhdCByZXBvOlxcblxcYFxcYFxcYFxcbiR7U0lHTl9DT01NQU5EfVxcblxcYFxcYFxcYGBcbiAgICApO1xuXG4gICAgLy8gVGhlIHNpZ25hdHVyZSBjb3ZlcnMgdGhlIG5vcm1hbGlzZWQgYnl0ZXMsIHNvIGEgY2hlY2tvdXQgdGhhdCBhcnJpdmVkIHdpdGggQ1JMRiBzdGlsbFxuICAgIC8vIHZlcmlmaWVzIHJhdGhlciB0aGFuIGxvb2tpbmcgbGlrZSB0YW1wZXJpbmcuXG4gICAgbGV0IHZlcmlmeVBhaXIgPSAobWFuaWZlc3Q6IEJ1ZmZlciB8IHVuZGVmaW5lZCwgc2lnbmF0dXJlOiBCdWZmZXIgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKCFtYW5pZmVzdCB8fCAhc2lnbmF0dXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNpZ25lcjogdmVyaWZ5U1NIU0lHKHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmUudG9TdHJpbmcoXCJ1dGY4XCIpLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBub3JtYWxpemVDb250ZW50KG1hbmlmZXN0KSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBTSUdOX05BTUVTUEFDRSxcbiAgICAgICAgICAgICAgICB9KS5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgICAgICAgICAgbWFuaWZlc3RIYXNoOiBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUobWFuaWZlc3QpLmRpZ2VzdChcImhleFwiKSxcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVIYXNoOiBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoc2lnbmF0dXJlKS5kaWdlc3QoXCJoZXhcIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGxldCBkaXNrTWFuaWZlc3QgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ocmVwb1BhdGgsIE1BTklGRVNUX05BTUUpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGxldCBkaXNrU2lnbmF0dXJlID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHJlcG9QYXRoLCBTSUdOQVRVUkVfTkFNRSkpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgLy8gV2hhdCB0aGUgd29ya2luZyB0cmVlIGhvbGRzIGlzIHdoYXQgd2Ugd2FudCwgd2hlbiBpdCBob2xkcyBzb21ldGhpbmcgdGhhdCB2ZXJpZmllcy5cbiAgICBsZXQgc2lnbmVkID0gdmVyaWZ5UGFpcihkaXNrTWFuaWZlc3QsIGRpc2tTaWduYXR1cmUpO1xuICAgIC8vIE90aGVyd2lzZSB0aGUgbGFzdCBjb21taXQsIHdoaWNoIGlzIHRoZSBzdGF0ZSBzb21lYm9keSBhY3R1YWxseSBzaWduZWQgYW5kIHB1c2hlZC4gQW4gZWRpdFxuICAgIC8vIGluIHByb2dyZXNzLCBvciBvbmUgYWJhbmRvbmVkIGhhbGYgd2F5LCB0aGVuIGNvc3RzIG5vdGhpbmc6IGl0IGlzIHNpbXBseSBub3Qgd2hhdCB3ZSByZWFkLlxuICAgIGlmICghc2lnbmVkKSB7XG4gICAgICAgIHNpZ25lZCA9IHZlcmlmeVBhaXIoXG4gICAgICAgICAgICBhd2FpdCBjb21taXR0ZWRDb250ZW50cyhyZXBvUGF0aCwgTUFOSUZFU1RfTkFNRSksXG4gICAgICAgICAgICBhd2FpdCBjb21taXR0ZWRDb250ZW50cyhyZXBvUGF0aCwgU0lHTkFUVVJFX05BTUUpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzaWduZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3BhdGguam9pbihyZXBvUGF0aCwgTUFOSUZFU1RfTkFNRSl9IGRvZXMgbm90IHZlcmlmeSBhcyBpdCBpcyBoZXJlLCByZWFkaW5nIHRoZSBjb21taXR0ZWQgb25lIGluc3RlYWRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc2lnbmVkKSB7XG4gICAgICAgIGlmICghZGlza01hbmlmZXN0ICYmICFkaXNrU2lnbmF0dXJlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtyZXBvUGF0aH0gaXMgbm90IHNpZ25lZCwgaWdub3JpbmcgYWxsIG9mIGl0cyBmaWxlc2ApO1xuICAgICAgICAgICAgcmV0dXJuIHsgc2lnbmVyOiBVTlNJR05FRCwgbWFuaWZlc3RIYXNoOiBcIlwiLCBzaWduYXR1cmVIYXNoOiBcIlwiLCBmaWxlczogbmV3IE1hcCgpIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaXNrTWFuaWZlc3QgfHwgIWRpc2tTaWduYXR1cmUpIHtcbiAgICAgICAgICAgIHRocm93IGJyb2tlbihgT25seSBvbmUgb2YgJHtNQU5JRkVTVF9OQU1FfSBhbmQgJHtTSUdOQVRVUkVfTkFNRX0gaXMgcHJlc2VudC5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBicm9rZW4oYE5laXRoZXIgdGhlICR7TUFOSUZFU1RfTkFNRX0gaGVyZSBub3IgdGhlIGNvbW1pdHRlZCBvbmUgdmVyaWZpZXMuYCk7XG4gICAgfVxuICAgIGxldCB7IHNpZ25lciwgbWFuaWZlc3RIYXNoLCBzaWduYXR1cmVIYXNoIH0gPSBzaWduZWQ7XG4gICAgbGV0IG1hbmlmZXN0Qnl0ZXMgPSBzaWduZWQubWFuaWZlc3Q7XG5cbiAgICAvLyBUaGUgbWFuaWZlc3QgaXMgdGhlIGxpc3Qgb2YgZmlsZXMsIHNvIGl0IGlzIHRoZSBvbmx5IHRoaW5nIHdlIHJlYWQuIFdoYXRldmVyIGVsc2UgaXMgaW4gdGhlXG4gICAgLy8gY2hlY2tvdXQgaXMgbmV2ZXIgb3BlbmVkIGFuZCBuZXZlciBtZW50aW9uZWQgLSBhIHdvcmtpbmcgdHJlZSBmdWxsIG9mIG5vZGVfbW9kdWxlcyBpcyBub3RcbiAgICAvLyBzb21ldGhpbmcgdG8gcmVwb3J0IG9uLCBpdCBpcyBzaW1wbHkgbm90IHdoYXQgd2FzIHNpZ25lZC5cbiAgICAvL1xuICAgIC8vIEEgZmlsZSBjb3VudHMgb25seSBpZiBpdHMgY29udGVudHMgc3RpbGwgbWF0Y2ggd2hhdCB0aGUgbWFuaWZlc3Qgc2F5cy4gT25lIHRoYXQgZG9lcyBub3QgaXNcbiAgICAvLyBsZWZ0IG91dCBvbiBpdHMgb3duOiBpdCBpcyBhIGZpbGUgd2UgaG9sZCBubyBzaWduYXR1cmUgZm9yLCBhbmQgaXQgc2F5cyBub3RoaW5nIGFib3V0IHRoZVxuICAgIC8vIGZpbGVzIHRoYXQgRE8gbWF0Y2guIE9ubHkgdGhlIHNpZ25hdHVyZSBvdmVyIHRoZSBtYW5pZmVzdCBjYW4gZGlzY3JlZGl0IHRoZSB3aG9sZSByZXBvLlxuICAgIGxldCBtYW5pZmVzdCA9IEpTT04ucGFyc2UobWFuaWZlc3RCeXRlcy50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgIGxldCBsaXN0ZWQgPSAobWFuaWZlc3QuZmlsZXMgfHwgW10pIGFzIHsgcGF0aDogc3RyaW5nOyBzaXplOiBudW1iZXI7IHNoYTI1Njogc3RyaW5nIH1bXTtcblxuICAgIGxldCBtYXRjaGVzTWFuaWZlc3QgPSAoY29udGVudHM6IEJ1ZmZlciB8IHVuZGVmaW5lZCwgZXhwZWN0ZWQ6IHsgc2l6ZTogbnVtYmVyOyBzaGEyNTY6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmICghY29udGVudHMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVDb250ZW50KGNvbnRlbnRzKTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoICE9PSBleHBlY3RlZC5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUobm9ybWFsaXplZCkuZGlnZXN0KFwiaGV4XCIpICE9PSBleHBlY3RlZC5zaGEyNTYpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgfTtcblxuICAgIGxldCBmaWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBCdWZmZXI+KCk7XG4gICAgZm9yIChsZXQgZXhwZWN0ZWQgb2YgbGlzdGVkKSB7XG4gICAgICAgIGxldCBjb250ZW50cyA9IG1hdGNoZXNNYW5pZmVzdChcbiAgICAgICAgICAgIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihyZXBvUGF0aCwgZXhwZWN0ZWQucGF0aCkpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCksXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICApO1xuICAgICAgICAvLyBTYW1lIGFzIGZvciB0aGUgbWFuaWZlc3Q6IHdoYXQgdGhlIHdvcmtpbmcgdHJlZSBob2xkcyBpcyBwcmVmZXJyZWQsIGFuZCB0aGUgY29tbWl0dGVkXG4gICAgICAgIC8vIGZpbGUgaXMgd2hhdCB3ZSBmYWxsIGJhY2sgdG8uIEEgZmlsZSBlZGl0ZWQgYnV0IG5vdCBzaWduZWQsIG9yIGRlbGV0ZWQgYnkgYWNjaWRlbnQsIHRoZW5cbiAgICAgICAgLy8gZ29lcyBvbiB3b3JraW5nIGZyb20gdGhlIGxhc3Qgc3RhdGUgYW55Ym9keSBzaWduZWQuXG4gICAgICAgIGlmICghY29udGVudHMpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzID0gbWF0Y2hlc01hbmlmZXN0KGF3YWl0IGNvbW1pdHRlZENvbnRlbnRzKHJlcG9QYXRoLCBleHBlY3RlZC5wYXRoKSwgZXhwZWN0ZWQpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7cGF0aC5qb2luKHJlcG9QYXRoLCBleHBlY3RlZC5wYXRoKX0gZG9lcyBub3QgbWF0Y2ggdGhlIG1hbmlmZXN0IGFzIGl0IGlzIGhlcmUsIHVzaW5nIHRoZSBjb21taXR0ZWQgb25lYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb250ZW50cykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgYElnbm9yaW5nICR7cGF0aC5qb2luKHJlcG9QYXRoLCBleHBlY3RlZC5wYXRoKX0sIG5laXRoZXIgaXQgbm9yIHRoZSBjb21taXR0ZWQgdmVyc2lvbmBcbiAgICAgICAgICAgICAgICArIGAgbWF0Y2hlcyB0aGUgbWFuaWZlc3QuIFJ1biAke1NJR05fQ09NTUFORH0gaW4gdGhhdCByZXBvIHRvIHNpZ24gaXQgYXMgaXQgbm93IGlzLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlcy5zZXQoZXhwZWN0ZWQucGF0aCwgY29udGVudHMpO1xuICAgIH1cblxuICAgIC8vIEFic29yYiB0aGUgcmV2b2tlIHJlcG8ncyBmaWxlcyBpbnRvIHRoZSBzdGlja3kgbWFwLiBPbmNlIHNlZW4gYSByZXZvY2F0aW9uIG5ldmVyIGxlYXZlcyBpdCxcbiAgICAvLyBldmVuIGlmIGl0cyBmaWxlIGRpc2FwcGVhcnMgLSB0aGUga2V5IHRoYXQgd3JpdGVzIHJldm9jYXRpb25zIGlzIG9uIGV2ZXJ5IHNlcnZlciwgc28gd2hvZXZlclxuICAgIC8vIHN0b2xlIG9uZSBjb3VsZCBvdGhlcndpc2UgZXJhc2UgdGhlIHJlY29yZCB0aGF0IHNodXQgdGhlbSBvdXQuXG4gICAgbGV0IHJldm9jYXRpb25zRGlyZWN0b3J5ID0gcGF0aC5qb2luKHJldm9rZVJlcG9QYXRoKHNvdXJjZVVSTCksIFJFVk9DQVRJT05TX0RJUik7XG4gICAgZm9yIChsZXQgbmFtZSBvZiAoYXdhaXQgZnMucmVhZGRpcihyZXZvY2F0aW9uc0RpcmVjdG9yeSkuY2F0Y2goKCkgPT4gW10gYXMgc3RyaW5nW10pKS5zb3J0KCkpIHtcbiAgICAgICAgaWYgKCFuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ocmV2b2NhdGlvbnNEaXJlY3RvcnksIG5hbWUpLCBcInV0ZjhcIikpO1xuICAgICAgICAgICAgbGV0IGlkZW50aXR5ID0gcGFyc2VkLmZpbmdlcnByaW50IHx8IHBhcnNlZC5tYWNoaW5lSWQ7XG4gICAgICAgICAgICBpZiAoIWlkZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmV2b2NhdGlvbklkID0gcGFyc2VkLnJldm9jYXRpb25JZCB8fCBuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJcIik7XG4gICAgICAgICAgICBpZiAoIWFic29yYmVkUmV2b2NhdGlvbnMuaGFzKHJldm9jYXRpb25JZCkpIHtcbiAgICAgICAgICAgICAgICBhYnNvcmJlZFJldm9jYXRpb25zLnNldChyZXZvY2F0aW9uSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGlwOiBwYXJzZWQuaXAgfHwgcGFyc2VkLmF0dGVtcHQ/LmlwIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIHJldm9rZWRBdDogcGFyc2VkLnJldm9rZWRBdCB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICByZXZva2VkQnk6IHBhcnNlZC5yZXZva2VkQnkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIHVucmVhZGFibGUgcmV2b2NhdGlvbiAke3BhdGguam9pbihyZXZvY2F0aW9uc0RpcmVjdG9yeSwgbmFtZSl9LiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZWJ1aWxkIHRoZSB1bnJldm9rZXMgZnJvbSB0aGUgc2lnbmVkIGZpbGVzIGp1c3QgcmVhZC4gVW5yZXZva2VzIGFyZSBzaWduZWQgY29udGVudCwgc29cbiAgICAvLyByZW1vdmluZyBvbmUgbXVzdCB0YWtlIGVmZmVjdCwgdW5saWtlIHRoZSBzdGlja3kgcmV2b2NhdGlvbnMuXG4gICAgdW5yZXZva2VkUGFpcnMgPSBuZXcgU2V0KCk7XG4gICAgdW5yZXZva2VkSWRzID0gbmV3IFNldCgpO1xuICAgIGZvciAobGV0IFtmaWxlUGF0aCwgY29udGVudHNdIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmICghZmlsZVBhdGguc3RhcnRzV2l0aChgJHtVTlJFVk9LRVNfRElSfS9gKSB8fCAhZmlsZVBhdGguZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRzLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICAgICAgICBmb3IgKGxldCBhbGxvd2VkIG9mIHBhcnNlZC5hbGxvd2VkIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkZW50aXR5ID0gYWxsb3dlZC5maW5nZXJwcmludCB8fCBhbGxvd2VkLm1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkgJiYgYWxsb3dlZC5pcCkge1xuICAgICAgICAgICAgICAgICAgICB1bnJldm9rZWRQYWlycy5hZGQoYCR7aWRlbnRpdHl9ICR7YWxsb3dlZC5pcH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCByZXZvY2F0aW9uSWQgb2YgcGFyc2VkLnJldm9jYXRpb25JZHMgfHwgW10pIHtcbiAgICAgICAgICAgICAgICB1bnJldm9rZWRJZHMuYWRkKHJldm9jYXRpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyB1bnJlYWRhYmxlIHVucmV2b2tlICR7ZmlsZVBhdGh9LiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEcm9wIGV2ZXJ5dGhpbmcgZnJvemVuOiByZXZva2VkIGtleXMgb3V0IG9mIGF1dGhvcml6ZWRfa2V5cyBhbmQgdG9wIGxldmVsIC5wdWIgZmlsZXMsIGFuZFxuICAgIC8vIGZyb3plbiBtYWNoaW5lcycgZmlsZXMgb3V0IG9mIG1hY2hpbmVzLy4gV2hhdCBjb21lcyBiYWNrIGlzIHdoYXQgdGhpcyBtYWNoaW5lIGFjdHVhbGx5XG4gICAgLy8gdHJ1c3RzLCBzbyBubyBjYWxsZXIgY2FuIHJlYWQgdGhlIGxpc3QgYW5kIGZvcmdldCB0aGUgcmV2b2NhdGlvbnMuXG4gICAgZm9yIChsZXQgW2ZpbGVQYXRoLCBjb250ZW50c10gb2YgWy4uLmZpbGVzXSkge1xuICAgICAgICBpZiAoZmlsZVBhdGggPT09IFwiYXV0aG9yaXplZF9rZXlzXCIgfHwgKGZpbGVQYXRoLmVuZHNXaXRoKFwiLnB1YlwiKSAmJiAhZmlsZVBhdGguaW5jbHVkZXMoXCIvXCIpKSkge1xuICAgICAgICAgICAgbGV0IGxpbmVzID0gY29udGVudHMudG9TdHJpbmcoXCJ1dGY4XCIpLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgICAgbGV0IGtlcHQgPSBsaW5lcy5maWx0ZXIobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbmdlcnByaW50ID0ga2V5RmluZ2VycHJpbnQobGluZSk7XG4gICAgICAgICAgICAgICAgbGV0IGZyb3plbiA9IGZpbmdlcnByaW50ICYmIGlkZW50aXR5RnJvemVuQnkoZmluZ2VycHJpbnQpO1xuICAgICAgICAgICAgICAgIGlmIChmcm96ZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYERyb3BwaW5nIHJldm9rZWQga2V5ICR7ZmluZ2VycHJpbnR9IGZyb20gJHtwYXRoLmpvaW4ocmVwb1BhdGgsIGZpbGVQYXRoKX0sIHVzZWQgZnJvbSAke2Zyb3plbi5pcH1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGtlcHQubGVuZ3RoICE9PSBsaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmaWxlcy5zZXQoZmlsZVBhdGgsIEJ1ZmZlci5mcm9tKGtlcHQuam9pbihcIlxcblwiKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKFwibWFjaGluZXMvXCIpICYmIGZpbGVQYXRoLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgIGxldCBtYWNoaW5lSWQgPSBmaWxlUGF0aC5zbGljZShcIm1hY2hpbmVzL1wiLmxlbmd0aCwgLVwiLmpzb25cIi5sZW5ndGgpO1xuICAgICAgICAgICAgbGV0IGZyb3plbiA9IGlkZW50aXR5RnJvemVuQnkobWFjaGluZUlkKTtcbiAgICAgICAgICAgIGlmIChmcm96ZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRHJvcHBpbmcgZnJvemVuIG1hY2hpbmUgJHttYWNoaW5lSWR9IGZyb20gJHtwYXRoLmpvaW4ocmVwb1BhdGgsIGZpbGVQYXRoKX0sIHVzZWQgZnJvbSAke2Zyb3plbi5pcH1gKTtcbiAgICAgICAgICAgICAgICBmaWxlcy5kZWxldGUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2lnbmVyLCBtYW5pZmVzdEhhc2gsIHNpZ25hdHVyZUhhc2gsIGZpbGVzIH07XG59XG4iXX0=
293
+ /* _JS_SOURCE_HASH = "a69f30c687fcaacaf72a1b8af6d119997c25d46e7ae67d8251e49a2bf190b2a8"; */
@@ -1,14 +1,38 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
3
  export declare const UNSIGNED = "";
4
- /** Whether an identity - a key fingerprint or a machine id - has a revocation nothing has undone.
5
- The one meaning of "frozen", used both when stripping repo content and when explaining why. */
6
- export declare function isIdentityFrozen(identity: string): boolean;
4
+ export type Revocation = {
5
+ identity: string;
6
+ ip: string;
7
+ revokedAt: string;
8
+ revokedBy: string;
9
+ };
10
+ /** The revocation freezing an identity - a key fingerprint or a machine id - or nothing if it is
11
+ not frozen. The one meaning of "frozen", used both when stripping repo content and when
12
+ explaining why, and it hands back the revocation rather than a bare yes so that whoever has to
13
+ explain it can say which address it was, and when, instead of "an unapproved address". */
14
+ export declare function identityFrozenBy(identity: string): {
15
+ revocationId: string;
16
+ identity: string;
17
+ ip: string;
18
+ revokedAt: string;
19
+ revokedBy: string;
20
+ } | undefined;
21
+ /** Every revocation this process has absorbed, and whether an unrevoke has since forgiven it. For
22
+ anything showing the whole picture rather than asking about one identity. */
23
+ export declare function listRevocations(): {
24
+ revocationId: string;
25
+ forgiven: boolean;
26
+ identity: string;
27
+ ip: string;
28
+ revokedAt: string;
29
+ revokedBy: string;
30
+ }[];
7
31
  export declare function isPairRevoked(identity: string, ip: string): boolean;
8
32
  export declare function isPairUnrevoked(identity: string, ip: string): boolean;
9
33
  /** For whoever just wrote a revocation, so it holds here immediately rather than on the next
10
34
  absorb. Sticky like the rest. */
11
- export declare function noteRevocation(revocationId: string, identity: string, ip: string): void;
35
+ export declare function noteRevocation(revocationId: string, revocation: Revocation): void;
12
36
  /** A repo whose signature does not check out, with the message ready for whoever asked. Not every
13
37
  caller treats it the same - a source keeps its last keys, a machine list is just refused - so
14
38
  the kind is carried rather than acted on here. */
@@ -40,15 +40,23 @@ async function committedContents(repoPath: string, filePath: string) {
40
40
  // never leaves, even if its file disappears from the revoke repo - the key that writes revocations
41
41
  // is on every server, so whoever stole one could otherwise erase the record that shut them out.
42
42
  // Restarting the process is the way back from a revocation that should not have happened.
43
- let absorbedRevocations = new Map<string, { identity: string; ip: string }>();
43
+ export type Revocation = {
44
+ identity: string;
45
+ ip: string;
46
+ revokedAt: string;
47
+ revokedBy: string;
48
+ };
49
+ let absorbedRevocations = new Map<string, Revocation>();
44
50
  // The pairs the signed unrevokes allow, and the legacy revocation ids they name. Rebuilt on every
45
51
  // read, since unrevokes are signed content and removing one must take effect.
46
52
  let unrevokedPairs = new Set<string>();
47
53
  let unrevokedIds = new Set<string>();
48
54
 
49
- /** Whether an identity - a key fingerprint or a machine id - has a revocation nothing has undone.
50
- The one meaning of "frozen", used both when stripping repo content and when explaining why. */
51
- export function isIdentityFrozen(identity: string) {
55
+ /** The revocation freezing an identity - a key fingerprint or a machine id - or nothing if it is
56
+ not frozen. The one meaning of "frozen", used both when stripping repo content and when
57
+ explaining why, and it hands back the revocation rather than a bare yes so that whoever has to
58
+ explain it can say which address it was, and when, instead of "an unapproved address". */
59
+ export function identityFrozenBy(identity: string) {
52
60
  for (let [revocationId, revocation] of absorbedRevocations) {
53
61
  if (revocation.identity !== identity) {
54
62
  continue;
@@ -56,9 +64,19 @@ export function isIdentityFrozen(identity: string) {
56
64
  if (unrevokedIds.has(revocationId) || unrevokedPairs.has(`${identity} ${revocation.ip}`)) {
57
65
  continue;
58
66
  }
59
- return true;
67
+ return { ...revocation, revocationId };
60
68
  }
61
- return false;
69
+ return undefined;
70
+ }
71
+
72
+ /** Every revocation this process has absorbed, and whether an unrevoke has since forgiven it. For
73
+ anything showing the whole picture rather than asking about one identity. */
74
+ export function listRevocations() {
75
+ return [...absorbedRevocations].map(([revocationId, revocation]) => ({
76
+ ...revocation,
77
+ revocationId,
78
+ forgiven: unrevokedIds.has(revocationId) || unrevokedPairs.has(`${revocation.identity} ${revocation.ip}`),
79
+ }));
62
80
  }
63
81
 
64
82
  export function isPairRevoked(identity: string, ip: string) {
@@ -76,8 +94,8 @@ export function isPairUnrevoked(identity: string, ip: string) {
76
94
 
77
95
  /** For whoever just wrote a revocation, so it holds here immediately rather than on the next
78
96
  absorb. Sticky like the rest. */
79
- export function noteRevocation(revocationId: string, identity: string, ip: string) {
80
- absorbedRevocations.set(revocationId, { identity, ip });
97
+ export function noteRevocation(revocationId: string, revocation: Revocation) {
98
+ absorbedRevocations.set(revocationId, revocation);
81
99
  }
82
100
 
83
101
  /** A repo whose signature does not check out, with the message ready for whoever asked. Not every
@@ -232,7 +250,12 @@ export async function readSignedRepo(config: { repoPath: string; sourceURL: stri
232
250
  }
233
251
  let revocationId = parsed.revocationId || name.replace(/\.json$/, "");
234
252
  if (!absorbedRevocations.has(revocationId)) {
235
- absorbedRevocations.set(revocationId, { identity, ip: parsed.ip || parsed.attempt?.ip || "" });
253
+ absorbedRevocations.set(revocationId, {
254
+ identity,
255
+ ip: parsed.ip || parsed.attempt?.ip || "",
256
+ revokedAt: parsed.revokedAt || "",
257
+ revokedBy: parsed.revokedBy || "",
258
+ });
236
259
  }
237
260
  } catch (e) {
238
261
  console.log(`Ignoring unreadable revocation ${path.join(revocationsDirectory, name)}. ${e}`);
@@ -271,8 +294,9 @@ export async function readSignedRepo(config: { repoPath: string; sourceURL: stri
271
294
  let lines = contents.toString("utf8").split("\n");
272
295
  let kept = lines.filter(line => {
273
296
  let fingerprint = keyFingerprint(line);
274
- if (fingerprint && isIdentityFrozen(fingerprint)) {
275
- console.log(`Dropping revoked key ${fingerprint} from ${path.join(repoPath, filePath)}`);
297
+ let frozen = fingerprint && identityFrozenBy(fingerprint);
298
+ if (frozen) {
299
+ console.log(`Dropping revoked key ${fingerprint} from ${path.join(repoPath, filePath)}, used from ${frozen.ip}`);
276
300
  return false;
277
301
  }
278
302
  return true;
@@ -283,8 +307,9 @@ export async function readSignedRepo(config: { repoPath: string; sourceURL: stri
283
307
  }
284
308
  if (filePath.startsWith("machines/") && filePath.endsWith(".json")) {
285
309
  let machineId = filePath.slice("machines/".length, -".json".length);
286
- if (isIdentityFrozen(machineId)) {
287
- console.log(`Dropping frozen machine ${machineId} from ${path.join(repoPath, filePath)}`);
310
+ let frozen = identityFrozenBy(machineId);
311
+ if (frozen) {
312
+ console.log(`Dropping frozen machine ${machineId} from ${path.join(repoPath, filePath)}, used from ${frozen.ip}`);
288
313
  files.delete(filePath);
289
314
  }
290
315
  }
@@ -1,4 +1,4 @@
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
  };
@@ -142,4 +142,4 @@ async function readRepoKeys(repoPath) {
142
142
  }
143
143
  exports.readRepoKeys = readRepoKeys;
144
144
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplZEtleXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhdXRob3JpemVkS2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsMkRBQTZCO0FBQzdCLGdEQUF3QjtBQUV4QixTQUFnQixhQUFhLENBQUMsUUFBZ0I7SUFDMUMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs4RUFDOEU7QUFDOUUsU0FBZ0IsY0FBYyxDQUFDLE9BQWU7SUFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSSxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FB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QUFFLENBQUM7UUFDdEMsT0FBTyxhQUFhLENBQUMsTUFBTSxrQkFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELFFBQVEsaUJBQWlCLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQWZELG9DQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplS2V5cyhjb250ZW50czogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnRzLnNwbGl0KFwiXFxuXCIpLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKS5maWx0ZXIobGluZSA9PiBsaW5lICYmICFsaW5lLnN0YXJ0c1dpdGgoXCIjXCIpKTtcbn1cblxuLyoqIFRoZSBmaW5nZXJwcmludCBzc2ggaXRzZWxmIHJlcG9ydHMgZm9yIGEga2V5LCB3aGljaCBpcyB3aGF0IHRoZSBzc2hkIGxvZyBuYW1lcyBhbmQgdGhlcmVmb3JlXG4gICAgd2hhdCBhIHJldm9jYXRpb24gaXMga2V5ZWQgYnkuIFJldHVybnMgXCJcIiBmb3IgYSBsaW5lIHRoYXQgaG9sZHMgbm8ga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleUZpbmdlcnByaW50KGtleUxpbmU6IHN0cmluZykge1xuICAgIGxldCBwYXJ0cyA9IGtleUxpbmUudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgbGV0IHR5cGVJbmRleCA9IHBhcnRzLmZpbmRJbmRleChwYXJ0ID0+IC9eKHNzaC18ZWNkc2EtfHNrLSkvLnRlc3QocGFydCkpO1xuICAgIGxldCBibG9iID0gdHlwZUluZGV4ID49IDAgJiYgcGFydHNbdHlwZUluZGV4ICsgMV0gfHwgXCJcIjtcbiAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlNIQTI1NjpcIiArIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShCdWZmZXIuZnJvbShibG9iLCBcImJhc2U2NFwiKSkuZGlnZXN0KFwiYmFzZTY0XCIpLnJlcGxhY2UoLz0rJC8sIFwiXCIpO1xufVxuXG5leHBvcnQgY29uc3QgTk9fUkVTVFJJQ1RJT04gPSBcIkFOWSBBRERSRVNTIChubyBmcm9tPSByZXN0cmljdGlvbilcIjtcblxuLyoqIFRoZSBhZGRyZXNzZXMgYSBrZXkgbWF5IGJlIHVzZWQgZnJvbSwgb25lIGJ5IG9uZSwgb3IgdW5kZWZpbmVkIHdoZW4gdGhlIGtleSBjYXJyaWVzIG5vIGZyb209XG4gICAgYXQgYWxsLiBVbmRlZmluZWQgYW5kIGFuIGVtcHR5IGxpc3QgYXJlIHZlcnkgZGlmZmVyZW50IHRoaW5ncywgc28gdGhleSBzdGF5IGRpc3Rpbmd1aXNoYWJsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZXlSZXN0cmljdGlvbkxpc3Qoa2V5TGluZTogc3RyaW5nKSB7XG4gICAgbGV0IG1hdGNoID0ga2V5TGluZS5tYXRjaCgvZnJvbT1cIihbXlwiXSopXCIvKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaFsxXS5zcGxpdChcIixcIikubWFwKGVudHJ5ID0+IGVudHJ5LnRyaW0oKSkuZmlsdGVyKGVudHJ5ID0+IGVudHJ5KTtcbn1cblxuLyoqIFRoZSBhZGRyZXNzZXMgYSBrZXkgbWF5IGJlIHVzZWQgZnJvbSwgd2hpY2ggaXMgdGhlIHBhcnQgb2YgYW4gYXV0aG9yaXplZF9rZXlzIGxpbmUgdGhhdFxuICAgIGRlY2lkZXMgaG93IG11Y2ggYSBzdG9sZW4ga2V5IGlzIHdvcnRoLiBBIGtleSB3aXRoIG5vIHJlc3RyaWN0aW9uIHNheXMgc28gbG91ZGx5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleVJlc3RyaWN0aW9uKGtleUxpbmU6IHN0cmluZykge1xuICAgIGxldCBsaXN0ID0ga2V5UmVzdHJpY3Rpb25MaXN0KGtleUxpbmUpO1xuICAgIGlmICghbGlzdCkge1xuICAgICAgICByZXR1cm4gTk9fUkVTVFJJQ1RJT047XG4gICAgfVxuICAgIHJldHVybiBsaXN0LmpvaW4oXCIsXCIpO1xufVxuXG4vKiogQWRkcyBhZGRyZXNzZXMgdG8gYSBrZXkncyBmcm9tPSBsaXN0LCBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSBsaW5lIGV4YWN0bHkgYXMgaXQgd2FzLiBSZXR1cm5zXG4gICAgd2hpY2ggYWRkcmVzc2VzIHdlcmUgYWN0dWFsbHkgbmV3LCBzbyBhIGNhbGxlciBjYW4gcmVwb3J0IG9ubHkgd2hhdCBpdCBjaGFuZ2VkLlxuXG4gICAgQSBrZXkgd2l0aCBubyBmcm9tPSBhdCBhbGwgaXMgbGVmdCBhbG9uZTogYWRkaW5nIG9uZSB3b3VsZCBzaWxlbnRseSByZXN0cmljdCBhIGtleSB0aGF0IGlzXG4gICAgY3VycmVudGx5IHVucmVzdHJpY3RlZCwgd2hpY2ggaXMgYSBkaWZmZXJlbnQgZGVjaXNpb24gdGhhbiB0aGUgb25lIGJlaW5nIG1hZGUgaGVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0FkZHJlc3NlcyhrZXlMaW5lOiBzdHJpbmcsIGFkZHJlc3Nlczogc3RyaW5nW10pIHtcbiAgICBsZXQgbGlzdCA9IGtleVJlc3RyaWN0aW9uTGlzdChrZXlMaW5lKTtcbiAgICBpZiAoIWxpc3QpIHtcbiAgICAgICAgcmV0dXJuIHsga2V5TGluZSwgYWRkZWQ6IFtdIGFzIHN0cmluZ1tdIH07XG4gICAgfVxuICAgIGxldCBhbGxvd2VkID0gbGlzdDtcbiAgICBsZXQgYWRkZWQgPSBhZGRyZXNzZXMuZmlsdGVyKGFkZHJlc3MgPT4gYWRkcmVzcyAmJiAhYWxsb3dlZC5pbmNsdWRlcyhhZGRyZXNzKSk7XG4gICAgaWYgKCFhZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsga2V5TGluZSwgYWRkZWQgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5TGluZToga2V5TGluZS5yZXBsYWNlKC9mcm9tPVwiW15cIl0qXCIvLCBgZnJvbT1cIiR7Wy4uLmFsbG93ZWQsIC4uLmFkZGVkXS5qb2luKFwiLFwiKX1cImApLFxuICAgICAgICBhZGRlZCxcbiAgICB9O1xufVxuXG4vKiogRW5vdWdoIHRvIHJlY29nbmlzZSB3aG9zZSBrZXkgdGhpcyBpcyB3aXRob3V0IHByaW50aW5nIHRoZSB3aG9sZSBibG9iLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZUtleShrZXlMaW5lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFydHMgPSBrZXlMaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgIGxldCB0eXBlSW5kZXggPSBwYXJ0cy5maW5kSW5kZXgocGFydCA9PiAvXihzc2gtfGVjZHNhLXxzay0pLy50ZXN0KHBhcnQpKTtcbiAgICBpZiAodHlwZUluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4ga2V5TGluZS5zbGljZSgwLCA2MCk7XG4gICAgfVxuICAgIGxldCB0eXBlID0gcGFydHNbdHlwZUluZGV4XTtcbiAgICBsZXQgYmxvYiA9IHBhcnRzW3R5cGVJbmRleCArIDFdIHx8IFwiXCI7XG4gICAgbGV0IGNvbW1lbnQgPSBwYXJ0cy5zbGljZSh0eXBlSW5kZXggKyAyKS5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gYCR7dHlwZX0gLi4uJHtibG9iLnNsaWNlKC0xMil9JHtjb21tZW50ICYmIGAgJHtjb21tZW50fWAgfHwgXCJcIn1gO1xufVxuXG4vKiogVGhlIHNob3J0ZXN0IHRoaW5nIHRoYXQgc3RpbGwgaWRlbnRpZmllcyBhIGtleSB0byBhIHBlcnNvbjogdGhlIGNvbW1lbnQgaXQgY2Fycmllcywgd2hpY2ggaXNcbiAgICB1c3VhbGx5IHVzZXJAbWFjaGluZSwgYW5kIG90aGVyd2lzZSB0aGUgdGFpbCBvZiB0aGUga2V5IGl0c2VsZi4gRm9yIHRoZSBmaXJzdCBsaW5lIG9mIGFcbiAgICBub3RpZmljYXRpb24sIHdoZXJlIHRoZXJlIGlzIG9ubHkgcm9vbSBmb3IgdGhlIG9uZSB0aGluZyB0aGF0IG1hdHRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5TmljZU5hbWUoa2V5TGluZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcnRzID0ga2V5TGluZS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICBsZXQgdHlwZUluZGV4ID0gcGFydHMuZmluZEluZGV4KHBhcnQgPT4gL14oc3NoLXxlY2RzYS18c2stKS8udGVzdChwYXJ0KSk7XG4gICAgaWYgKHR5cGVJbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIGtleUxpbmUuc2xpY2UoMCwgMjApO1xuICAgIH1cbiAgICBsZXQgY29tbWVudCA9IHBhcnRzLnNsaWNlKHR5cGVJbmRleCArIDIpLmpvaW4oXCIgXCIpO1xuICAgIHJldHVybiBjb21tZW50IHx8IGAuLi4keyhwYXJ0c1t0eXBlSW5kZXggKyAxXSB8fCBcIlwiKS5zbGljZSgtOCl9YDtcbn1cblxuLyoqIFdoYXQgYSBzZXQgb2Yga2V5cyBoYXMgdG8gc2F0aXNmeSBiZWZvcmUgaXQgaXMgd29ydGggc2lnbmluZywgYXMgYSBsaXN0IG9mIGNvbXBsYWludHMuXG5cbiAgICBFdmVyeSBrZXkgbmVlZHMgYSBmcm9tPSwgYmVjYXVzZSBhbiB1bnJlc3RyaWN0ZWQga2V5IGNhbiBuZXZlciBiZSBjYXVnaHQgYmVpbmcgdXNlZCBmcm9tIHRoZVxuICAgIHdyb25nIHBsYWNlLCBhbmQgYmVpbmcgY2F1Z2h0IGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgdHJpZ2dlcnMgYSByZXZvY2F0aW9uLlxuXG4gICAgTm8gdHdvIGtleXMgbWF5IGFsbG93IHRoZSBzYW1lIGFkZHJlc3NlcywgYmVjYXVzZSB0aGF0IGlzIG9uZSBwZXJzb24gaG9sZGluZyB0d28ga2V5czogcmV2b2tpbmdcbiAgICBvbmUgb2YgdGhlbSBsZWF2ZXMgdGhlIG90aGVyIHdvcmtpbmcsIHNvIHRoZSByZXZvY2F0aW9uIGFjaGlldmVzIG5vdGhpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEtleVByb2JsZW1zKGtleXM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHByb2JsZW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBieVJlc3RyaWN0aW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGxldCByZXN0cmljdGlvbiA9IGtleVJlc3RyaWN0aW9uTGlzdChrZXkpO1xuICAgICAgICBpZiAoIXJlc3RyaWN0aW9uKSB7XG4gICAgICAgICAgICBwcm9ibGVtcy5wdXNoKGBubyBmcm9tPSByZXN0cmljdGlvbiwgc28gaXQgY2FuIGJlIHVzZWQgZnJvbSBhbnl3aGVyZTpcXG4gICAgICAke3N1bW1hcml6ZUtleShrZXkpfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGVkLCBzbyB0aGUgc2FtZSBhZGRyZXNzZXMgd3JpdHRlbiBpbiBhIGRpZmZlcmVudCBvcmRlciBzdGlsbCBjb3VudCBhcyB0aGUgc2FtZS5cbiAgICAgICAgbGV0IGlkZW50aXR5ID0gWy4uLnJlc3RyaWN0aW9uXS5zb3J0KCkuam9pbihcIixcIik7XG4gICAgICAgIGJ5UmVzdHJpY3Rpb24uc2V0KGlkZW50aXR5LCBbLi4uKGJ5UmVzdHJpY3Rpb24uZ2V0KGlkZW50aXR5KSB8fCBbXSksIGtleV0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBbcmVzdHJpY3Rpb24sIHNoYXJpbmddIG9mIGJ5UmVzdHJpY3Rpb24pIHtcbiAgICAgICAgaWYgKHNoYXJpbmcubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHJvYmxlbXMucHVzaChcbiAgICAgICAgICAgIGAke3NoYXJpbmcubGVuZ3RofSBrZXlzIGFsbG93IGV4YWN0bHkgdGhlIHNhbWUgYWRkcmVzc2VzICgke3Jlc3RyaWN0aW9ufSksIHdoaWNoIGlzIG9uZWBcbiAgICAgICAgICAgICsgYCBwZXJzb24gaG9sZGluZyBtb3JlIHRoYW4gb25lIGtleTpcXG5gXG4gICAgICAgICAgICArIHNoYXJpbmcubWFwKGtleSA9PiBgICAgICAgJHtzdW1tYXJpemVLZXkoa2V5KX1gKS5qb2luKFwiXFxuXCIpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwcm9ibGVtcztcbn1cblxuLyoqIFJlYWRzIHRoZSBhdXRob3JpemVkIGtleXMgYSByZXBvIGNoZWNrb3V0IHdhbnRzIGFwcGxpZWQuIFByZWZlcnMgYSB0b3AgbGV2ZWwgYXV0aG9yaXplZF9rZXlzXG4gICAgZmlsZSBhbmQgb3RoZXJ3aXNlIGNvbmNhdGVuYXRlcyBldmVyeSAucHViIGF0IHRoZSB0b3AgbGV2ZWwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcG9LZXlzKHJlcG9QYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgY29tYmluZWRQYXRoID0gcGF0aC5qb2luKHJlcG9QYXRoLCBcImF1dGhvcml6ZWRfa2V5c1wiKTtcbiAgICBsZXQgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIocmVwb1BhdGgpO1xuICAgIGlmIChlbnRyaWVzLmluY2x1ZGVzKFwiYXV0aG9yaXplZF9rZXlzXCIpKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVLZXlzKGF3YWl0IGZzLnJlYWRGaWxlKGNvbWJpbmVkUGF0aCwgXCJ1dGY4XCIpKTtcbiAgICB9XG4gICAgbGV0IHB1YkZpbGVzID0gZW50cmllcy5maWx0ZXIobmFtZSA9PiBuYW1lLmVuZHNXaXRoKFwiLnB1YlwiKSkuc29ydCgpO1xuICAgIGlmICghcHViRmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXV0aG9yaXplZF9rZXlzIG9yIGF0IGxlYXN0IG9uZSAucHViIGZpbGUgaW4gJHtyZXBvUGF0aH0sIGZvdW5kIG5laXRoZXJgKTtcbiAgICB9XG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgbmFtZSBvZiBwdWJGaWxlcykge1xuICAgICAgICBrZXlzLnB1c2goLi4ubm9ybWFsaXplS2V5cyhhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ocmVwb1BhdGgsIG5hbWUpLCBcInV0ZjhcIikpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59XG4iXX0=
145
- /* _JS_SOURCE_HASH = "5dc60c0f88ff3878003bf57017d1342326afa7c6a9f511d5896e4113565a7823"; */
145
+ /* _JS_SOURCE_HASH = "622a4e8d2e5f745af7a714ec04f3cfd72e7e92f0c7d74044c6ca1d511499b9d9"; */
@@ -1,4 +1,4 @@
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
  };
@@ -108,4 +108,4 @@ async function resolveKeysRepo(named) {
108
108
  }
109
109
  exports.resolveKeysRepo = resolveKeysRepo;
110
110
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c1JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJrZXlzUmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBNkI7QUFDN0IsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QiwwQ0FBNkM7QUFDN0MscURBQWdEO0FBQ2hELHVDQUEyQztBQUMzQyw0Q0FBOEM7QUFDOUMsNENBQWdEO0FBRWhELGdHQUFnRztBQUNoRyxnR0FBZ0c7QUFDaEcsaUdBQWlHO0FBQ2pHLEVBQUU7QUFDRixpR0FBaUc7QUFDakcscUVBQXFFO0FBQ3JFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUM7QUFFL0MsS0FBSyxVQUFVLFVBQVUsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUM7UUFDRCxNQUFNLGtCQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUM7QUFFRDttRkFDbUY7QUFDbkYsS0FBSyxVQUFVLFVBQVUsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDRCxNQUFNLElBQUEsNkJBQVksRUFBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDO0FBRUQsaUZBQWlGO0FBQ2pGLEtBQUssVUFBVSxzQkFBc0I7SUFDakMsNkZBQTZGO0lBQzdGLGtGQUFrRjtJQUNsRixJQUFJLFFBQVEsR0FBRyxNQUFNLElBQUEsb0JBQVksRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7bUNBR21DO0FBQ25DLEtBQUssVUFBVSxjQUFjO0lBQ3pCLElBQUksWUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE9BQU8sY0FBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLE1BQU0sR0FBRyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLElBQUksU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxRSxPQUFPLFNBQVMsSUFBSSxJQUFBLHdCQUFjLEVBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hELENBQUM7QUFFRCxLQUFLLFVBQVUsUUFBUSxDQUFDLFFBQWdCO0lBQ3BDLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBQSxvQkFBWSxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFHLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxRQUFRLHdDQUF3QyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztvREFLb0Q7QUFDN0MsS0FBSyxVQUFVLGVBQWUsQ0FBQyxLQUFjO0lBQ2hELElBQUksS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUV6QixJQUFJLFVBQVUsR0FBYSxFQUFFLENBQUM7SUFDOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBQSxrQkFBVSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLE9BQU8sR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7UUFDN0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksVUFBVSxHQUFHLE1BQU0sY0FBYyxFQUFFLENBQUM7UUFDeEMsSUFBSSxVQUFVLElBQUksVUFBVSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzdELENBQUM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUNYLDREQUE0RDtVQUMxRCxpQkFBaUIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxvQ0FBb0MsSUFBSTtVQUMvRSxDQUFDLFlBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxPQUFPO1lBQ3hCLENBQUMsQ0FBQyxvQ0FBb0MsY0FBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0I7a0JBQzNGLDJDQUEyQyxjQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDOUUsQ0FBQyxDQUFDLDZEQUE2RDtrQkFDN0QsNENBQTRDO2tCQUM1QyxvREFBb0QsQ0FBQyxDQUM5RCxDQUFDO0FBQ04sQ0FBQztBQWxDRCwwQ0FrQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQ09ORklHX1BBVEggfSBmcm9tIFwiLi9kYWVtb24vcGF0aHNcIjtcbmltcG9ydCB7IHJlYWRSZXBvS2V5cyB9IGZyb20gXCIuL2F1dGhvcml6ZWRLZXlzXCI7XG5pbXBvcnQgeyBzb3VyY2VSZXBvUGF0aCB9IGZyb20gXCIuL3NvdXJjZXNcIjtcbmltcG9ydCB7IGV4cGFuZEhvbWUgfSBmcm9tIFwiLi4vaGVscGVycy9wYXRoc1wiO1xuaW1wb3J0IHsgc3Bhd25Qcm9taXNlIH0gZnJvbSBcIi4uL2hlbHBlcnMvc3Bhd25cIjtcblxuLy8gVGhlIG9uZSBwbGFjZSB0aGF0IGFuc3dlcnMgXCJ3aGljaCBrZXlzIHJlcG9cIi4gRXZlcnl0aGluZyB0aGF0IHJlYWRzIG9yIHdyaXRlcyBvbmUgY29tZXMgaGVyZTpcbi8vIHNpZ25pbmcsIHVucmV2b2tpbmcsIG1hY2hpbmUgdHJ1c3QsIGFuZCBhZGRpbmcgYSBtYWNoaW5lLiBUaGV5IHdlcmUgZWFjaCB3b3JraW5nIGl0IG91dCB0aGVpclxuLy8gb3duIHdheSwgd2hpY2ggaXMgaG93IHNpZ25maWxlcyBlbmRlZCB1cCBzaWduaW5nIHdoYXRldmVyIHJlcG8geW91IGhhcHBlbmVkIHRvIGJlIHN0YW5kaW5nIGluLlxuLy9cbi8vIFdoZXJlIGEgV2luZG93cyBtYWNoaW5lIGlzIGV4cGVjdGVkIHRvIGtlZXAgaXQsIHJlbGF0aXZlIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gVGhlcmUgaXMgbm9cbi8vIGRhZW1vbiB0aGVyZSBhbmQgbm8gL2V0Yywgc28gYSBzaWJsaW5nIGNoZWNrb3V0IGlzIHRoZSBjb252ZW50aW9uLlxuY29uc3QgV0lORE9XU19SRVBPX1BBVEggPSBcIi4uL2F1dGhvcml6ZWRfa2V5c1wiO1xuXG5hc3luYyBmdW5jdGlvbiBwYXRoRXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKiBBIGdpdCBjaGVja291dCB0aGF0IGFjdHVhbGx5IGhvbGRzIGtleXMuIEJvdGggaGFsdmVzIG1hdHRlcjogYSByZXBvIHdpdGggbm8gYXV0aG9yaXplZF9rZXlzIGlzXG4gICAgc29tZSBvdGhlciByZXBvLCBhbmQgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYSBjaGVja291dCBoYXMgbm90aGluZyB0byBwdXNoLiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNLZXlzUmVwbyhyZXBvUGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKCFhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbihyZXBvUGF0aCwgXCIuZ2l0XCIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHJlYWRSZXBvS2V5cyhyZXBvUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLyoqIFRoZSByZXBvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBpbnNpZGUsIG9yIFwiXCIgd2hlbiBpdCBpcyBub3QgaW5zaWRlIG9uZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcG9PZkN1cnJlbnREaXJlY3RvcnkoKSB7XG4gICAgLy8gUmVhZCBmb3IgaXRzIHZhbHVlLCBzbyBzdGRvdXQgaGFzIHRvIGJlIG9uIGl0cyBvd24uIHJ1blByb21pc2Ugam9pbnMgaXQgd2l0aCBzdGRlcnIsIGFuZCBhXG4gICAgLy8gZ2l0IHdhcm5pbmcgZ2x1ZWQgdG8gdGhlIGZyb250IG9mIHRoaXMgYmVjb21lcyBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGV4aXN0LlxuICAgIGxldCB0b3BMZXZlbCA9IGF3YWl0IHNwYXduUHJvbWlzZSh7IGNvbW1hbmQ6IFwiZ2l0XCIsIGFyZ3M6IFtcInJldi1wYXJzZVwiLCBcIi0tc2hvdy10b3BsZXZlbFwiXSB9KTtcbiAgICByZXR1cm4gdG9wTGV2ZWwuc3RhdHVzID09PSAwICYmIHRvcExldmVsLnN0ZG91dC50cmltKCkgfHwgXCJcIjtcbn1cblxuLyoqIFdoZXJlIHRoaXMgbWFjaGluZSdzIG93biBrZXlzIHJlcG8gaXMsIHdoZW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG5vdCBvbmUuXG5cbiAgICBPbiBhIGhvc3QgdGhhdCBpcyB0aGUgY2hlY2tvdXQgdGhlIGRhZW1vbiBrZWVwcyB1cCB0byBkYXRlLiBPbiBXaW5kb3dzIHRoZXJlIGlzIG5vIGRhZW1vbiwgc29cbiAgICBpdCBpcyB0aGUgc2libGluZyBkaXJlY3RvcnkuICovXG5hc3luYyBmdW5jdGlvbiBjb25maWd1cmVkUmVwbygpIHtcbiAgICBpZiAob3MucGxhdGZvcm0oKSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoV0lORE9XU19SRVBPX1BBVEgpO1xuICAgIH1cbiAgICBsZXQgY29uZmlnID0gYXdhaXQgZnMucmVhZEZpbGUoQ09ORklHX1BBVEgsIFwidXRmOFwiKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgICBsZXQgc291cmNlVVJMID0gY29uZmlnICYmIChKU09OLnBhcnNlKGNvbmZpZykucmVwb1NvdXJjZXMgfHwgW10pWzBdIHx8IFwiXCI7XG4gICAgcmV0dXJuIHNvdXJjZVVSTCAmJiBzb3VyY2VSZXBvUGF0aChzb3VyY2VVUkwpIHx8IFwiXCI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9yaWdpbk9mKHJlcG9QYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgb3JpZ2luID0gYXdhaXQgc3Bhd25Qcm9taXNlKHsgY29tbWFuZDogXCJnaXRcIiwgYXJnczogW1wicmVtb3RlXCIsIFwiZ2V0LXVybFwiLCBcIm9yaWdpblwiXSwgY3dkOiByZXBvUGF0aCB9KTtcbiAgICBsZXQgdXJsID0gb3JpZ2luLnN0ZG91dC50cmltKCk7XG4gICAgaWYgKG9yaWdpbi5zdGF0dXMgIT09IDAgfHwgIXVybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7cmVwb1BhdGh9IHRvIGhhdmUgYW4gb3JpZ2luIHJlbW90ZSwgaXQgaGFzIG5vbmVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqIFRoZSBrZXlzIHJlcG8gdG8gYWN0IG9uLlxuXG4gICAgQSBuYW1lZCBvbmUgaWYgdGhlcmUgaXMgb25lLCBvdGhlcndpc2UgdGhlIHJlcG8gdGhlIGNvbW1hbmQgaXMgYmVpbmcgcnVuIGluIGlmIHRoYXQgcmVwbyBob2xkc1xuICAgIGtleXMsIG90aGVyd2lzZSB0aGlzIG1hY2hpbmUncyBvd24uIFJ1bm5pbmcgaW4gc29tZSBvdGhlciByZXBvIHRoZXJlZm9yZSByZWFjaGVzIHRoZSBrZXlzIHJlcG9cbiAgICByYXRoZXIgdGhhbiBhY3Rpbmcgb24gd2hhdGV2ZXIgaGFwcGVuZWQgdG8gYmUgYXJvdW5kIC0gc2lnbmluZyBzbGlmdHV0aWxzIGJlY2F1c2UgdGhhdCBpcyB3aGVyZVxuICAgIHRoZSB0ZXJtaW5hbCB3YXMgaXMgbmV2ZXIgd2hhdCBhbnlib2R5IG1lYW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVLZXlzUmVwbyhuYW1lZD86IHN0cmluZyk6IFByb21pc2U8eyByZXBvUGF0aDogc3RyaW5nOyBzb3VyY2VVUkw6IHN0cmluZyB9PiB7XG4gICAgbGV0IHRyaWVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgbGV0IGNhbmRpZGF0ZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKG5hbWVkKSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaChleHBhbmRIb21lKG5hbWVkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBhd2FpdCByZXBvT2ZDdXJyZW50RGlyZWN0b3J5KCk7XG4gICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbmZpZ3VyZWQgPSBhd2FpdCBjb25maWd1cmVkUmVwbygpO1xuICAgICAgICBpZiAoY29uZmlndXJlZCAmJiBjb25maWd1cmVkICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goY29uZmlndXJlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCByZXBvUGF0aCBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgIGlmIChhd2FpdCBpc0tleXNSZXBvKHJlcG9QYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVwb1BhdGgsIHNvdXJjZVVSTDogYXdhaXQgb3JpZ2luT2YocmVwb1BhdGgpIH07XG4gICAgICAgIH1cbiAgICAgICAgdHJpZWQucHVzaChyZXBvUGF0aCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgYSBnaXQgcmVwbyBob2xkaW5nIGF1dGhvcml6ZWRfa2V5cywgZm91bmQgbm9uZS5cXG5gXG4gICAgICAgICsgYExvb2tlZCBpbjpcXG4gICR7dHJpZWQuam9pbihcIlxcbiAgXCIpIHx8IFwiKG5vd2hlcmUgLSB0aGlzIGlzIG5vdCBhIGdpdCByZXBvKVwifVxcbmBcbiAgICAgICAgKyAob3MucGxhdGZvcm0oKSA9PT0gXCJ3aW4zMlwiXG4gICAgICAgICAgICA/IGBPbiBXaW5kb3dzIHRoZSByZXBvIGlzIHJlYWQgZnJvbSAke3BhdGgucmVzb2x2ZShXSU5ET1dTX1JFUE9fUEFUSCl9LCBzbyBjbG9uZSBpdCB0aGVyZTpcXG5gXG4gICAgICAgICAgICArIGAgIGdpdCBjbG9uZSA8eW91ciBhdXRob3JpemVkX2tleXMgcmVwbz4gJHtwYXRoLnJlc29sdmUoV0lORE9XU19SRVBPX1BBVEgpfWBcbiAgICAgICAgICAgIDogYFNldCB0aGlzIG1hY2hpbmUgdXAsIG9yIHJ1biB0aGlzIGZyb20gaW5zaWRlIGEga2V5cyByZXBvOlxcbmBcbiAgICAgICAgICAgICsgYCAgeWFybiBzZXR1cG5vdGlmeSA8ZGlzY29yZC13ZWJob29rLXVybD5cXG5gXG4gICAgICAgICAgICArIGAgIHlhcm4gc2VjdXJlc3NoIGFkZCA8cmVwby1wcml2YXRlLWtleT4gPHJlcG8tdXJsPmApXG4gICAgKTtcbn1cbiJdfQ==
111
- /* _JS_SOURCE_HASH = "cc6f1a68a3ed8776d2d177cfa31dd8917cb1f08773131d306af563402dc5c293"; */
111
+ /* _JS_SOURCE_HASH = "0a60b8461fd314f179501c420f00b557b2f1144e5f6481cc44dd42796e78d895"; */
@@ -1,4 +1,4 @@
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
  };
@@ -54,4 +54,4 @@ function deriveRevokeKey(sourcePrivateKey) {
54
54
  }
55
55
  exports.deriveRevokeKey = deriveRevokeKey;
56
56
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2b2tlU291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmV2b2tlU291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGlEQUFxRDtBQUNyRCxtREFBcUY7QUFDckYsZ0RBQXdCO0FBQ3hCLHVDQUEwRjtBQUUxRiwrRkFBK0Y7QUFDL0YsZ0dBQWdHO0FBQ2hHLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQywrRkFBK0Y7QUFDL0Ysa0VBQWtFO0FBQ3JELFFBQUEsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7QUFFbEQsU0FBZ0IsYUFBYSxDQUFDLFNBQWlCO0lBQzNDLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sR0FBRyxVQUFVLEdBQUcsY0FBYyxNQUFNLENBQUM7QUFDaEQsQ0FBQztBQUhELHNDQUdDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLFNBQWlCO0lBQzNDLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFBLGlCQUFPLEdBQUUsRUFBRSxHQUFHLElBQUEsb0JBQVUsRUFBQyxTQUFTLENBQUMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLFNBQWlCO0lBQ2pELE9BQU8sR0FBRyw4QkFBb0IsSUFBSSxJQUFBLG9CQUFVLEVBQUMsU0FBUyxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUM7QUFDL0UsQ0FBQztBQUZELGtEQUVDO0FBRUQsK0ZBQStGO0FBQ3hGLEtBQUssVUFBVSxhQUFhLENBQUMsU0FBaUI7SUFDakQsT0FBTyxNQUFNLElBQUEsaUJBQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixjQUFjLENBQUMsU0FBaUI7SUFDNUMsT0FBTyxHQUFHLG1CQUFTLElBQUksSUFBQSxvQkFBVSxFQUFDLFNBQVMsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDO0FBQ3BFLENBQUM7QUFGRCx3Q0FFQztBQUVEO3lGQUN5RjtBQUN6RixTQUFnQixlQUFlLENBQUMsZ0JBQXdCO0lBQ3BELElBQUksTUFBTSxHQUFHLElBQUEsbUNBQXNCLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxJQUFJLE9BQU8sR0FBRyxJQUFBLDRCQUFnQixFQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLHdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUMvRSxPQUFPO1FBQ0gsU0FBUyxFQUFFLGVBQWUsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUztTQUNoRCxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3ZCLGNBQWMsRUFBRSxJQUFBLG9DQUF1QixFQUFDO1lBQ3BDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLFlBQVksSUFBSSx3QkFBZ0IsRUFBRTtTQUNuRSxDQUFDO0tBQ0wsQ0FBQztBQUNOLENBQUM7QUFiRCwwQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlcml2ZUVkMjU1MTlLZXkgfSBmcm9tIFwiLi4va2V5cy9kZXJpdmVLZXlcIjtcbmltcG9ydCB7IGZvcm1hdE9wZW5TU0hQcml2YXRlS2V5LCBwYXJzZU9wZW5TU0hQcml2YXRlS2V5IH0gZnJvbSBcIi4uL2tleXMvc3NoS2V5RmlsZVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZpbmRLZXksIGtleXNEaXIsIExFR0FDWV9SRVBPX0tFWVNfRElSLCBSRVBPU19ESVIsIHNvdXJjZU5hbWUgfSBmcm9tIFwiLi9zb3VyY2VzXCI7XG5cbi8vIEEgc291cmNlJ3MgcmV2b2NhdGlvbnMgbGl2ZSBpbiBhIHJlcG8gYmVzaWRlIGl0LiBEZXJpdmVkIHJhdGhlciB0aGFuIGNvbmZpZ3VyZWQsIHNvIGFkZGluZyBhXG4vLyBzb3VyY2UgYnJpbmdzIGl0cyByZXZva2UgcmVwbyB3aXRoIGl0IGFuZCB0aGVyZSBpcyBub3RoaW5nIGV4dHJhIHRvIHBhc3Mgb24gdGhlIGNvbW1hbmQgbGluZS5cbmNvbnN0IFJFVk9LRURfU1VGRklYID0gXCJfcmV2b2tlZFwiO1xuLy8gR2l0SHViIHdpbGwgbm90IHRha2UgdGhlIHNhbWUgcHVibGljIGtleSBhcyBhIGRlcGxveSBrZXkgb24gdHdvIHJlcG9zLCBzbyB0aGUgcmV2b2tlIHJlcG8gaXNcbi8vIHJlYWNoZWQgd2l0aCBhIGtleSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSdzLCB1bmRlciB0aGlzIGxhYmVsLlxuZXhwb3J0IGNvbnN0IFJFVk9LRV9LRVlfTEFCRUwgPSBcInJldm9rZWdpdGh1YmtleVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlUmVwb1VSTChzb3VyY2VVUkw6IHN0cmluZykge1xuICAgIGxldCB3aXRob3V0R2l0ID0gc291cmNlVVJMLnJlcGxhY2UoL1xcLmdpdCQvLCBcIlwiKTtcbiAgICByZXR1cm4gYCR7d2l0aG91dEdpdH0ke1JFVk9LRURfU1VGRklYfS5naXRgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlS2V5UGF0aChzb3VyY2VVUkw6IHN0cmluZykge1xuICAgIHJldHVybiBwYXRoLmpvaW4oa2V5c0RpcigpLCBgJHtzb3VyY2VOYW1lKHNvdXJjZVVSTCl9JHtSRVZPS0VEX1NVRkZJWH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZ2FjeVJldm9rZUtleVBhdGgoc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7TEVHQUNZX1JFUE9fS0VZU19ESVJ9LyR7c291cmNlTmFtZShzb3VyY2VVUkwpfSR7UkVWT0tFRF9TVUZGSVh9YDtcbn1cblxuLyoqIFdoZXJldmVyIHRoaXMgc291cmNlJ3MgcmV2b2tlIGtleSBhbHJlYWR5IGlzLCBvciBub3RoaW5nIGlmIGl0IGhhcyBub3QgYmVlbiBkZXJpdmVkIHlldC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kUmV2b2tlS2V5KHNvdXJjZVVSTDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZpbmRLZXkoeyBjdXJyZW50OiByZXZva2VLZXlQYXRoKHNvdXJjZVVSTCksIGxlZ2FjeTogbGVnYWN5UmV2b2tlS2V5UGF0aChzb3VyY2VVUkwpIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlUmVwb1BhdGgoc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7UkVQT1NfRElSfS8ke3NvdXJjZU5hbWUoc291cmNlVVJMKX0ke1JFVk9LRURfU1VGRklYfWA7XG59XG5cbi8qKiBUaGUgcmV2b2tlIHJlcG8ncyBrZXksIHdvcmtlZCBvdXQgZnJvbSB0aGUgc291cmNlIHJlcG8ncyBrZXkuIEFueXRoaW5nIGhvbGRpbmcgdGhlIHNvdXJjZSBrZXlcbiAgICBjYW4gcHJvZHVjZSBpdCwgc28gaXQgbmV2ZXIgaGFzIHRvIGJlIHN0b3JlZCBhbnl3aGVyZSBzZXBhcmF0ZWx5IG9yIGhhbmRlZCBhcm91bmQuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlUmV2b2tlS2V5KHNvdXJjZVByaXZhdGVLZXk6IHN0cmluZykge1xuICAgIGxldCBzb3VyY2UgPSBwYXJzZU9wZW5TU0hQcml2YXRlS2V5KHNvdXJjZVByaXZhdGVLZXkpO1xuICAgIGxldCBkZXJpdmVkID0gZGVyaXZlRWQyNTUxOUtleSh7IHNlZWQ6IHNvdXJjZS5zZWVkLCBsYWJlbDogUkVWT0tFX0tFWV9MQUJFTCB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwdWJsaWNLZXk6IGBzc2gtZWQyNTUxOSAke0J1ZmZlci5jb25jYXQoW1xuICAgICAgICAgICAgQnVmZmVyLmZyb20oWzAsIDAsIDAsIDExXSksIEJ1ZmZlci5mcm9tKFwic3NoLWVkMjU1MTlcIiksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShbMCwgMCwgMCwgMzJdKSwgZGVyaXZlZC5wdWJsaWNLZXksXG4gICAgICAgIF0pLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWAsXG4gICAgICAgIHByaXZhdGVLZXlGaWxlOiBmb3JtYXRPcGVuU1NIUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICBzZWVkOiBkZXJpdmVkLnNlZWQsXG4gICAgICAgICAgICBjb21tZW50OiBgJHtzb3VyY2UuY29tbWVudCB8fCBcInBvcnRzZWN1cmVcIn0gJHtSRVZPS0VfS0VZX0xBQkVMfWAsXG4gICAgICAgIH0pLFxuICAgIH07XG59XG4iXX0=
57
- /* _JS_SOURCE_HASH = "fa19b1fd43388ad835ac95f96f64acb37f8ebbc316741e6c48fc273ac174e1e7"; */
57
+ /* _JS_SOURCE_HASH = "1cf044f3f2be95082155ec3ae573bd217e3e92827eeb2871ed71ea00d0bf4d4b"; */
@@ -1,4 +1,4 @@
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
  };
@@ -77,4 +77,4 @@ async function describeMissingSourceKey(repoURL) {
77
77
  }
78
78
  exports.describeMissingSourceKey = describeMissingSourceKey;
79
79
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkRBQTZCO0FBQzdCLDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIsZ0dBQWdHO0FBQ2hHLG1HQUFtRztBQUVuRyxrR0FBa0c7QUFDbEcsMENBQTBDO0FBQzdCLFFBQUEsYUFBYSxHQUFHLGlCQUFpQixDQUFDO0FBQy9DLGdHQUFnRztBQUNoRyx5QkFBeUI7QUFDWixRQUFBLG9CQUFvQixHQUFHLDJCQUEyQixDQUFDO0FBQ25ELFFBQUEsU0FBUyxHQUFHLDJDQUEyQyxDQUFDO0FBRXJFLFNBQWdCLE9BQU87SUFDbkIsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLFlBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxxQkFBYSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELDBCQUVDO0FBRUQ7MkZBQzJGO0FBQzNGLFNBQWdCLFVBQVUsQ0FBQyxPQUFlO0lBQ3RDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hGLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxPQUFlO0lBQ3pDLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxPQUFlO0lBQy9DLE9BQU8sR0FBRyw0QkFBb0IsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUM1RCxDQUFDO0FBRkQsa0RBRUM7QUFFRCxTQUFnQixjQUFjLENBQUMsT0FBZTtJQUMxQyxPQUFPLEdBQUcsaUJBQVMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUNqRCxDQUFDO0FBRkQsd0NBRUM7QUFFRDtpRkFDaUY7QUFDakY7O21GQUVtRjtBQUNuRixLQUFLLFVBQVUsT0FBTyxDQUFDLFFBQWdCO0lBQ25DLElBQUksS0FBSyxHQUFHLE1BQU0sa0JBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELE9BQU8sQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxFQUFFLEtBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRU0sS0FBSyxVQUFVLE9BQU8sQ0FBQyxNQUEyQztJQUNyRSxPQUFPLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUZELDBCQUVDO0FBRUQ7OzJDQUUyQztBQUNwQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFBMkM7SUFDaEYsSUFBSSxRQUFRLEdBQUcsS0FBSyxFQUFFLFFBQWdCLEVBQUUsRUFBRTtRQUN0QyxJQUFJLEtBQUssR0FBRyxNQUFNLGtCQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsUUFBUSxvRUFBb0UsQ0FBQztRQUMzRixDQUFDO1FBQ0QsT0FBTyxHQUFHLFFBQVEsdUJBQXVCLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNyRixDQUFDO0FBWkQsZ0RBWUM7QUFFTSxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQWU7SUFDL0MsT0FBTyxNQUFNLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRyxDQUFDO0FBRkQsc0NBRUM7QUFFTSxLQUFLLFVBQVUsd0JBQXdCLENBQUMsT0FBZTtJQUMxRCxPQUFPLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0csQ0FBQztBQUZELDREQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuLy8gUE9SVEVEIENPREU6IG5vdGhpbmcgaGVyZSBpcyBkdXBsaWNhdGVkIGFueSBtb3JlLCB0aGUgZGFlbW9uIGltcG9ydHMgaXQgZGlyZWN0bHkuIEtlcHQgaW4gb25lXG4vLyBwbGFjZSBiZWNhdXNlIHRoZSBkYWVtb24gYW5kIHRoZSBkZXBsb3kgaGF2ZSB0byBhZ3JlZSBvbiB3aGVyZSBhIHNvdXJjZSdzIGtleSBhbmQgY2hlY2tvdXQgbGl2ZS5cblxuLy8gVGhlIHVzZXIncyBvd24gZm9sZGVyLCBzbyB0aGlzIHdvcmtzIHRoZSBzYW1lIG9uIGEgbWFjaGluZSB0aGF0IGhhcyBubyAvZXRjLiBUaGUgZGFlbW9uIHJ1bnMgYXNcbi8vIHJvb3QsIHNvIG9uIGEgaG9zdCB0aGlzIGlzIHJvb3QncyBob21lLlxuZXhwb3J0IGNvbnN0IEtFWVNfRElSX05BTUUgPSBcImF1dGhvcml6ZWRfa2V5c1wiO1xuLy8gV2hlcmUga2V5cyB1c2VkIHRvIGdvLiBTdGlsbCByZWFkLCBzbyBhIGhvc3Qgc2V0IHVwIGJlZm9yZSB0aGlzIGtlZXBzIHdvcmtpbmcsIGJ1dCBub3RoaW5nIGlzXG4vLyB3cml0dGVuIGhlcmUgYW55IG1vcmUuXG5leHBvcnQgY29uc3QgTEVHQUNZX1JFUE9fS0VZU19ESVIgPSBcIi9ldGMvcG9ydHNlY3VyZS9yZXBvLWtleXNcIjtcbmV4cG9ydCBjb25zdCBSRVBPU19ESVIgPSBcIi92YXIvbGliL3BvcnRzZWN1cmUvYXV0aG9yaXplZC1rZXlzLXJlcG9zXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBrZXlzRGlyKCkge1xuICAgIHJldHVybiBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBLRVlTX0RJUl9OQU1FKTtcbn1cblxuLyoqIEEgcmVwbyB1cmwgcmVkdWNlZCB0byBzb21ldGhpbmcgdXNhYmxlIGFzIGEgZmlsZSBuYW1lLiBEZXJpdmVkIHJhdGhlciB0aGFuIGNvbmZpZ3VyZWQsIHNvIHRoZVxuICAgIGRhZW1vbiBhbmQgdGhlIGRlcGxveSBzY3JpcHQgYWx3YXlzIGFncmVlIG9uIHdoZXJlIGEgc291cmNlJ3Mga2V5IGFuZCBjaGVja291dCBsaXZlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZU5hbWUocmVwb1VSTDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlcG9VUkwucmVwbGFjZSgvW15BLVphLXowLTldKy9nLCBcIi1cIikucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc291cmNlS2V5UGF0aChyZXBvVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKGtleXNEaXIoKSwgc291cmNlTmFtZShyZXBvVVJMKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWdhY3lTb3VyY2VLZXlQYXRoKHJlcG9VUkw6IHN0cmluZykge1xuICAgIHJldHVybiBgJHtMRUdBQ1lfUkVQT19LRVlTX0RJUn0vJHtzb3VyY2VOYW1lKHJlcG9VUkwpfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3VyY2VSZXBvUGF0aChyZXBvVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7UkVQT1NfRElSfS8ke3NvdXJjZU5hbWUocmVwb1VSTCl9YDtcbn1cblxuLyoqIFRoZSBrZXkgZm9yIGEgc291cmNlLCB3aGVyZXZlciBpdCBoYXBwZW5zIHRvIGJlLiBUaGUgdXNlciBmb2xkZXIgaXMgd2hlcmUgdGhleSBnbyBub3csIGFuZCB0aGVcbiAgICBvbGQgbG9jYXRpb24gaXMgc3RpbGwgcmVhZCBzbyBhIGhvc3QgdGhhdCBwcmVkYXRlcyB0aGUgbW92ZSBrZWVwcyB3b3JraW5nLiAqL1xuLyoqIEEga2V5IGhhcyB0byBiZSB0aGUgZmlsZSBpdHNlbGYuIFNvbWV0aGluZyBlbHNlIG9mIHRoYXQgbmFtZSAtIG1vc3Qgb2Z0ZW4gYSBkaXJlY3Rvcnkgc29tZWJvZHlcbiAgICBtYWRlIHRvIHB1dCB0aGUga2V5IGluc2lkZSAtIGlzIG5vdCBhIGtleSwgYW5kIGFuc3dlcmluZyB3aXRoIGl0IG1lYW5zIHdob2V2ZXIgcmVhZHMgaXQgZ2V0c1xuICAgIFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIiBpbnN0ZWFkIG9mIGJlaW5nIHRvbGQgdGhlIGtleSBpcyBtaXNzaW5nLiAqL1xuYXN5bmMgZnVuY3Rpb24ga2V5RmlsZShmaWxlUGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gc3RhdHM/LmlzRmlsZSgpICYmIGZpbGVQYXRoIHx8IFwiXCI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kS2V5KGNvbmZpZzogeyBjdXJyZW50OiBzdHJpbmc7IGxlZ2FjeTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gYXdhaXQga2V5RmlsZShjb25maWcuY3VycmVudCkgfHwgYXdhaXQga2V5RmlsZShjb25maWcubGVnYWN5KTtcbn1cblxuLyoqIFdoYXQgaXMgYXQgZWFjaCBwbGFjZSB0aGUga2V5IGNvdWxkIGJlLCBmb3Igd2hvZXZlciBoYXMgdG8gYmUgdG9sZCBpdCB3YXMgbm90IGZvdW5kLiBcIk5vIHN1Y2hcbiAgICBmaWxlXCIgaXMgYSBsaWUgd2hlbiBhIGRpcmVjdG9yeSBvZiB0aGF0IG5hbWUgaXMgc2l0dGluZyByaWdodCB0aGVyZSwgYW5kIGl0IGlzIHRoZSBvbmUgY2FzZVxuICAgIHdoZXJlIHNheWluZyBzbyBpcyB0aGUgd2hvbGUgYW5zd2VyLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2NyaWJlTWlzc2luZ0tleShjb25maWc6IHsgY3VycmVudDogc3RyaW5nOyBsZWdhY3k6IHN0cmluZyB9KSB7XG4gICAgbGV0IGRlc2NyaWJlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKCFzdGF0cykge1xuICAgICAgICAgICAgcmV0dXJuIGAke2ZpbGVQYXRofSAobm90aGluZyB0aGVyZSlgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZmlsZVBhdGh9IChhIGRpcmVjdG9yeSAtIHRoZSBrZXkgaGFzIHRvIEJFIHRoaXMgcGF0aCwgbm90IGEgZmlsZSBpbnNpZGUgaXQpYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7ZmlsZVBhdGh9IChub3QgYSByZWd1bGFyIGZpbGUpYDtcbiAgICB9O1xuICAgIHJldHVybiBgJHthd2FpdCBkZXNjcmliZShjb25maWcuY3VycmVudCl9LCBhbmQgJHthd2FpdCBkZXNjcmliZShjb25maWcubGVnYWN5KX1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFNvdXJjZUtleShyZXBvVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgZmluZEtleSh7IGN1cnJlbnQ6IHNvdXJjZUtleVBhdGgocmVwb1VSTCksIGxlZ2FjeTogbGVnYWN5U291cmNlS2V5UGF0aChyZXBvVVJMKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2NyaWJlTWlzc2luZ1NvdXJjZUtleShyZXBvVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgZGVzY3JpYmVNaXNzaW5nS2V5KHsgY3VycmVudDogc291cmNlS2V5UGF0aChyZXBvVVJMKSwgbGVnYWN5OiBsZWdhY3lTb3VyY2VLZXlQYXRoKHJlcG9VUkwpIH0pO1xufVxuIl19
80
- /* _JS_SOURCE_HASH = "14f67e8bb2d153197e29c99fd30dd3a2bf096e6fb62844dacbd01bbdf860c607"; */
80
+ /* _JS_SOURCE_HASH = "251d19bea727e2ae11bfa013e5c5f73eb4dc697a4b54afcf3b6b5aee85e00d4b"; */
@@ -1,4 +1,4 @@
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
  };
@@ -25,4 +25,4 @@ function expandHome(filePath) {
25
25
  }
26
26
  exports.expandHome = expandHome;
27
27
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBRXhCOztnQ0FFZ0M7QUFDaEMsU0FBZ0IsVUFBVSxDQUFDLFFBQWdCO0lBQ3ZDLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sWUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFELE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxZQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQix5RkFBeUY7UUFDekYsa0RBQWtEO1FBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLFFBQVEsaUVBQWlFLENBQUMsQ0FBQztJQUN0SSxDQUFDO0lBQ0QsT0FBTyxjQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFiRCxnQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8qKiBXaW5kb3dzIHNoZWxscyBkbyBub3QgZXhwYW5kIH4gdGhlbXNlbHZlcywgYW5kIGh1bnRpbmcgZG93biB5b3VyIGhvbWUgZm9sZGVyIGJ5IGhhbmQgaXNcbiAgICBhbm5veWluZywgc28gd2UgZXhwYW5kIGl0IG9uIGV2ZXJ5IHBsYXRmb3JtLiBCb3RoIHNlcGFyYXRvcnMgYXJlIGFjY2VwdGVkLCBiZWNhdXNlIGEgV2luZG93c1xuICAgIHVzZXIgbWF5IHR5cGUgZWl0aGVyIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmRIb21lKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICBpZiAoZmlsZVBhdGggPT09IFwiflwiKSB7XG4gICAgICAgIHJldHVybiBvcy5ob21lZGlyKCk7XG4gICAgfVxuICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKFwifi9cIikgfHwgZmlsZVBhdGguc3RhcnRzV2l0aChcIn5cXFxcXCIpKSB7XG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBmaWxlUGF0aC5zbGljZSgyKSk7XG4gICAgfVxuICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKFwiflwiKSkge1xuICAgICAgICAvLyB+b3RoZXJ1c2VyIG5lZWRzIGFuIGFjY291bnQgZGF0YWJhc2Ugd2UgY2Fubm90IHJlYWQgcG9ydGFibHksIGFuZCBxdWlldGx5IHJlc29sdmluZyBpdFxuICAgICAgICAvLyB0byB0aGUgd3JvbmcgaG9tZSB3b3VsZCBiZSB3b3JzZSB0aGFuIHJlZnVzaW5nLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIH4gb3IgYW4gb3JkaW5hcnkgcGF0aCwgd2FzICR7ZmlsZVBhdGh9LiBSZWZlcnJpbmcgdG8gYW5vdGhlciB1c2VyJ3MgaG9tZSB3aXRoIH5uYW1lIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xufVxuIl19
28
- /* _JS_SOURCE_HASH = "aa5698729d5def416d177e211ac514eed7d8c8fcb796c68dcc520ddf0d83526b"; */
28
+ /* _JS_SOURCE_HASH = "493654cc4781cc00e46bb1f87e8f539ef3884ca93d7ce6173bbd46a2bd648be8"; */