@dbx-tools/core 0.9.5 → 0.9.7

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.
@@ -32,7 +32,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
32
32
  import { mkdir, open } from "node:fs/promises";
33
33
  import { tmpdir } from "node:os";
34
34
  import { dirname, join } from "node:path";
35
- import { async, error, functionModule, hash, log, object } from "@dbx-tools/shared-core";
35
+ import { asyncUtils, errorUtils, functionUtils, hash, log, object } from "@dbx-tools/shared-core";
36
36
  import lockfile from "proper-lockfile";
37
37
  const logger = log.logger("core:file-lock");
38
38
  const DEFAULT_BACKENDS = ["file"];
@@ -114,7 +114,7 @@ function lockId(key) {
114
114
  * callers fall through to the next backend. A miss is cached too, so a process
115
115
  * that cannot flock never retries the load.
116
116
  */
117
- const resolveFlock = functionModule.memoize(async () => {
117
+ const resolveFlock = functionUtils.memoize(async () => {
118
118
  if (process.platform === "win32")
119
119
  return undefined;
120
120
  if (!process.versions.bun)
@@ -131,7 +131,7 @@ const resolveFlock = functionModule.memoize(async () => {
131
131
  return lib.symbols.flock;
132
132
  }
133
133
  catch (cause) {
134
- logger.debug("flock FFI unavailable", { error: error.errorMessage(cause) });
134
+ logger.debug("flock FFI unavailable", { error: errorUtils.errorMessage(cause) });
135
135
  return undefined;
136
136
  }
137
137
  });
@@ -157,7 +157,7 @@ async function waitForFlock(fd, flock, lockPath, deadline) {
157
157
  if (rc === 0)
158
158
  return;
159
159
  assertBeforeDeadline(lockPath, deadline);
160
- await async.sleep(POLL_MS);
160
+ await asyncUtils.sleep(POLL_MS);
161
161
  }
162
162
  }
163
163
  /**
@@ -186,9 +186,9 @@ async function acquireLockDirectory(lockPath, deadline) {
186
186
  catch (cause) {
187
187
  const err = cause;
188
188
  if (err.code !== "ELOCKED")
189
- throw error.toError(cause);
189
+ throw errorUtils.toError(cause);
190
190
  assertBeforeDeadline(lockPath, deadline);
191
- await async.sleep(POLL_MS);
191
+ await asyncUtils.sleep(POLL_MS);
192
192
  }
193
193
  }
194
194
  }
@@ -200,4 +200,4 @@ function assertBeforeDeadline(lockPath, deadline) {
200
200
  async function ensureParentDir(lockPath) {
201
201
  await mkdir(dirname(lockPath), { recursive: true });
202
202
  }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpbGUtbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRzs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sUUFBUSxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUs1QyxNQUFNLGdCQUFnQixHQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTlELDJEQUEyRDtBQUMzRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFFbkI7Ozs7R0FJRztBQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUUzRSwrRUFBK0U7QUFDL0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVuRix1REFBdUQ7QUFDdkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNsQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFpQ2xCOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsR0FBWSxFQUNaLEVBQXdCLEVBQ3hCLFVBQTJCLEVBQUU7SUFFN0IsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUM7SUFDdEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUU5RixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLFFBQVEsT0FBTyxFQUFFLENBQUM7WUFDaEIsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ1gsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDL0QsU0FBUztnQkFDWCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDckUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDakMsT0FBTyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLE9BQU8saUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDUixNQUFNLFdBQVcsR0FBVSxPQUFPLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxtREFBbUQ7QUFDbkQsU0FBUyxNQUFNLENBQUMsR0FBWTtJQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNO1NBQ2xCLFdBQVcsQ0FBQyxHQUFHLENBQUM7U0FDaEIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQiw4RUFBOEU7SUFDOUUsaUVBQWlFO0lBQ2pFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFrQyxFQUFFO0lBQ25GLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxPQUFPO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRTVDLElBQUksQ0FBQztRQUNILDhFQUE4RTtRQUM5RSxpREFBaUQ7UUFDakQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxNQUFNLGtDQUFDLFNBQVMsRUFBQyxDQUE0QixDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDOUIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUgsS0FBSyxVQUFVLFNBQVMsQ0FDdEIsUUFBZ0IsRUFDaEIsS0FBYyxFQUNkLFFBQTRCLEVBQzVCLEVBQXdCO0lBRXhCLE1BQU0sZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUM7UUFDSCxNQUFNLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7Z0JBQVMsQ0FBQztZQUNULEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxZQUFZLENBQ3pCLEVBQVUsRUFDVixLQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsUUFBNEI7SUFFNUIsU0FBUyxDQUFDO1FBQ1IsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDckIsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGlCQUFpQixDQUM5QixRQUFnQixFQUNoQixRQUE0QixFQUM1QixFQUF3QjtJQUV4QixNQUFNLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sR0FBRyxNQUFNLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDcEIsQ0FBQztZQUFTLENBQUM7UUFDVCxNQUFNLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUNqQyxRQUFnQixFQUNoQixRQUE0QjtJQUU1QixTQUFTLENBQUM7UUFDUixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ25DLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxRQUFRO2dCQUNmLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixPQUFPLEVBQUUsQ0FBQzthQUNYLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxHQUFHLEdBQUcsS0FBOEIsQ0FBQztZQUMzQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUztnQkFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsUUFBNEI7SUFDMUUsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxRQUFnQjtJQUM3QyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYXNjYWRpbmcgY3Jvc3MtcHJvY2VzcyBtdXR1YWwgZXhjbHVzaW9uIHZpYSBhIGxvY2tmaWxlLlxuICpcbiAqIFNlcmlhbGl6ZXMgY29uY3VycmVudCAqcHJvY2Vzc2VzKiAodHdvIGBidW4gcnVuIGRlbW9gIHNoZWxscywgYSBDTEkgYmVzaWRlIGFcbiAqIHNlcnZlcikgb24gdGhlIHNhbWUga2V5LiBGb3IgaW4tcHJvY2VzcyAvIHdvcmtlci10aHJlYWQgZXhjbHVzaW9uIHVzZVxuICoge0BsaW5rIHdpdGhQcm9jZXNzTG9ja30gZnJvbSBgLi9wcm9jZXNzLWxvY2sudHNgIGluc3RlYWQuXG4gKlxuICogQmFja2VuZHM6XG4gKlxuICogMS4gKipmaWxlKiogKGRlZmF1bHQpIOKAlCBgcHJvcGVyLWxvY2tmaWxlYCBhdG9taWMgbG9jay1kaXJlY3RvcnkgY3JlYXRpb24sXG4gKiAgICBoZWFydGJlYXQsIHN0YWxlIHJlY292ZXJ5LCBhbmQgb3duZXJzaGlwLXNhZmUgcmVsZWFzZS4gQnVuIGFuZCBOb2RlIHVzZVxuICogICAgdGhpcyBzYW1lIHByb3RvY29sLlxuICogMi4gKipmbG9jayoqIChleHBsaWNpdCBjb21wYXRpYmlsaXR5IG9wdGlvbikg4oCUIGBmbG9jaygyKWAgdmlhIEJ1biBGRkkgb25cbiAqICAgIFVuaXguIEl0IHJlbWFpbnMgYXZhaWxhYmxlIHRvIGNhbGxlcnMgdGhhdCBzZWxlY3RlZCBpdCBleHBsaWNpdGx5LCBidXQgYVxuICogICAgcnVudGltZS1kZXBlbmRlbnQgY2FzY2FkZSBjYW5ub3QgY29vcmRpbmF0ZSBCdW4gYW5kIE5vZGUuXG4gKlxuICogVGhlIGZpcnN0IGJhY2tlbmQgdGhhdCBjYW4gYmUgKmluaXRpYWxpemVkKiBpcyB1c2VkIGZvciB0aGUgd2hvbGUgY2FsbC4gQSBidXN5XG4gKiBsb2NrIHdhaXRzOyBhbiB1bmF2YWlsYWJsZSBiYWNrZW5kIGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQuIENhbGxlcnMgbWF5IG9ubHlcbiAqIGJvdW5kIGhvdyBsb25nIHRvIHdhaXQgKHtAbGluayBGaWxlTG9ja09wdGlvbnMudGltZW91dE1zfSk7IHN0YWxlIHRpbWluZyBpc1xuICogbm90IGNvbmZpZ3VyYWJsZSBzbyBldmVyeSBob2xkZXIgYW5kIHdhaXRlciBhZ3JlZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG1rZGlyLCBvcGVuIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgeyBhc3luYywgZXJyb3IsIGZ1bmN0aW9uTW9kdWxlLCBoYXNoLCBsb2csIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgbG9ja2ZpbGUgZnJvbSBcInByb3Blci1sb2NrZmlsZVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY29yZTpmaWxlLWxvY2tcIik7XG5cbi8qKiBCYWNrZW5kcyB7QGxpbmsgd2l0aEZpbGVMb2NrfSBjYW4gYXR0ZW1wdCwgaW4gY2FzY2FkZSBvcmRlci4gKi9cbmV4cG9ydCB0eXBlIEZpbGVMb2NrQmFja2VuZCA9IFwiZmxvY2tcIiB8IFwiZmlsZVwiO1xuXG5jb25zdCBERUZBVUxUX0JBQ0tFTkRTOiByZWFkb25seSBGaWxlTG9ja0JhY2tlbmRbXSA9IFtcImZpbGVcIl07XG5cbi8qKiBQb2xsIGludGVydmFsIHdoaWxlIHdhaXRpbmcgZm9yIGEgY29udGVuZGVkIE9TIGxvY2suICovXG5jb25zdCBQT0xMX01TID0gNTA7XG5cbi8qKlxuICogQWdlIGFmdGVyIHdoaWNoIGFuIHVucmVmcmVzaGVkIGxvY2sgZGlyZWN0b3J5IG1heSBiZSByZW1vdmVkLlxuICogTWF0Y2hlcyBgcHJvcGVyLWxvY2tmaWxlYCdzIGRlZmF1bHQuIE5vdCBjYWxsZXItY29uZmlndXJhYmxlOiBldmVyeSBwcm9jZXNzXG4gKiBtdXN0IHNoYXJlIHRoZSBzYW1lIHRocmVzaG9sZCBvciBhIGxpdmUgaG9sZGVyIGNhbiBiZSBtaXN0YWtlbiBmb3Igc3RhbGUuXG4gKi9cbmNvbnN0IFNUQUxFX01TID0gb2JqZWN0LnRvTnVtYmVyKHByb2Nlc3MuZW52LkZJTEVfTE9DS19TVEFMRV9NUykgPz8gMTBfMDAwO1xuXG4vKiogSGVhcnRiZWF0IGludGVydmFsIGZvciByZWZyZXNoaW5nIGxvY2stZGlyZWN0b3J5IG10aW1lIChgU1RBTEVfTVMgLyAyYCkuICovXG5jb25zdCBVUERBVEVfTVMgPSBvYmplY3QudG9OdW1iZXIocHJvY2Vzcy5lbnYuRklMRV9MT0NLX1VQREFURV9NUykgPz8gU1RBTEVfTVMgLyAyO1xuXG4vKiogYGZsb2NrKDIpYCBvcGVyYXRpb24gYml0cyAoTGludXggLyBtYWNPUyAvIEJTRCkuICovXG5jb25zdCBMT0NLX0VYID0gMjtcbmNvbnN0IExPQ0tfTkIgPSA0O1xuY29uc3QgTE9DS19VTiA9IDg7XG5cbi8qKiBSZXN1bHQgbWV0YWRhdGEgd2hlbiBhIGNhbGxlciB3YW50cyB0byBrbm93IHdoaWNoIGJhY2tlbmQgcmFuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlTG9ja0FjcXVpc2l0aW9uIHtcbiAgYmFja2VuZDogRmlsZUxvY2tCYWNrZW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVMb2NrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgZm9yIGxvY2tmaWxlcy4gRGVmYXVsdHMgdG8gYCRUTVBESVIvZGJ4LXRvb2xzLWxvY2tzYC5cbiAgICovXG4gIGRpcj86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIHRoZSBiYWNrZW5kIGxpc3QuIERlZmF1bHRzIHRvIHRoZSBwb3J0YWJsZSBgZmlsZWAgcHJvdG9jb2wuICovXG4gIGJhY2tlbmRzPzogcmVhZG9ubHkgRmlsZUxvY2tCYWNrZW5kW107XG4gIC8qKlxuICAgKiBTdG9wIHdhaXRpbmcgYW5kIHRocm93IGFmdGVyIHRoaXMgbWFueSBtaWxsaXNlY29uZHMuIE9taXQgdG8gcG9sbCBmb3JldmVyLlxuICAgKiBUaGlzIGlzIHRoZSBvbmx5IHdhaXQtbG9vcCBrbm9iOyBzdGFsZSByZWNsYWltIHRpbWluZyBpcyBmaXhlZC5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIEludm9rZWQgb25jZSB0aGUgYmFja2VuZCBmb3IgdGhpcyBjYWxsIGhhcyBiZWVuIGNob3Nlbi4gKi9cbiAgb25BY3F1aXJlPzogKGFjcXVpc2l0aW9uOiBGaWxlTG9ja0FjcXVpc2l0aW9uKSA9PiB2b2lkO1xufVxuXG50eXBlIEZsb2NrRm4gPSAoZmQ6IG51bWJlciwgb3BlcmF0aW9uOiBudW1iZXIpID0+IG51bWJlcjtcblxuaW50ZXJmYWNlIEJ1bkZmaU1vZHVsZSB7XG4gIGRsb3BlbjogKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBzeW1ib2xzOiBSZWNvcmQ8c3RyaW5nLCB7IGFyZ3M6IHN0cmluZ1tdOyByZXR1cm5zOiBzdHJpbmcgfT4sXG4gICkgPT4geyBzeW1ib2xzOiB7IGZsb2NrOiBGbG9ja0ZuIH0gfTtcbiAgc3VmZml4OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUnVuIGBmbmAgd2hpbGUgaG9sZGluZyBhIGNyb3NzLXByb2Nlc3MgbG9jayBuYW1lZCBieSBga2V5YC5cbiAqXG4gKiBga2V5YCBpcyBjYW5vbmljYWxpemVkIHdpdGggYG9iamVjdC50b1N0YWJsZUtleWAsIHRoZSBzYW1lIGlkZW50aXR5IHJ1bGUgYXNcbiAqIHByb2Nlc3MgYW5kIFBvc3RncmVzIGFkdmlzb3J5IGxvY2tzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhd2FpdCB3aXRoRmlsZUxvY2soW1wiY2FjaGVcIiwgXCJhcHBraXRcIl0sIGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgbWlncmF0ZSgpO1xuICogfSk7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoRmlsZUxvY2s8VD4oXG4gIGtleTogdW5rbm93bixcbiAgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICBvcHRpb25zOiBGaWxlTG9ja09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8VD4ge1xuICBpZiAob3B0aW9ucy50aW1lb3V0TXMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnRpbWVvdXRNcyA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwidGltZW91dE1zIG11c3QgYmUgbm9uLW5lZ2F0aXZlXCIpO1xuICB9XG4gIGNvbnN0IGlkID0gbG9ja0lkKGtleSk7XG4gIGNvbnN0IGJhY2tlbmRzID0gb3B0aW9ucy5iYWNrZW5kcyA/PyBERUZBVUxUX0JBQ0tFTkRTO1xuICBjb25zdCBkaXIgPSBvcHRpb25zLmRpciA/PyBqb2luKHRtcGRpcigpLCBcImRieC10b29scy1sb2Nrc1wiKTtcbiAgY29uc3QgZGVhZGxpbmUgPSBvcHRpb25zLnRpbWVvdXRNcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogRGF0ZS5ub3coKSArIG9wdGlvbnMudGltZW91dE1zO1xuXG4gIGZvciAoY29uc3QgYmFja2VuZCBvZiBiYWNrZW5kcykge1xuICAgIHN3aXRjaCAoYmFja2VuZCkge1xuICAgICAgY2FzZSBcImZsb2NrXCI6IHtcbiAgICAgICAgY29uc3QgbG9ja1BhdGggPSBqb2luKGRpciwgYCR7aWR9LmZsb2NrYCk7XG4gICAgICAgIGNvbnN0IGZsb2NrID0gYXdhaXQgcmVzb2x2ZUZsb2NrKCk7XG4gICAgICAgIGlmICghZmxvY2spIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoXCJsb2NrIGJhY2tlbmQgdW5hdmFpbGFibGVcIiwgeyBiYWNrZW5kLCBrZXk6IGlkIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcImFjcXVpcmluZyBsb2NrXCIsIHsgYmFja2VuZCwga2V5OiBpZCwgcGF0aDogbG9ja1BhdGggfSk7XG4gICAgICAgIG9wdGlvbnMub25BY3F1aXJlPy4oeyBiYWNrZW5kIH0pO1xuICAgICAgICByZXR1cm4gaG9sZEZsb2NrKGxvY2tQYXRoLCBmbG9jaywgZGVhZGxpbmUsIGZuKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJmaWxlXCI6IHtcbiAgICAgICAgY29uc3QgbG9ja1BhdGggPSBqb2luKGRpciwgaWQpO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJhY3F1aXJpbmcgbG9ja1wiLCB7IGJhY2tlbmQsIGtleTogaWQsIHBhdGg6IGxvY2tQYXRoIH0pO1xuICAgICAgICBvcHRpb25zLm9uQWNxdWlyZT8uKHsgYmFja2VuZCB9KTtcbiAgICAgICAgcmV0dXJuIGhvbGRMb2NrRGlyZWN0b3J5KGxvY2tQYXRoLCBkZWFkbGluZSwgZm4pO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBiYWNrZW5kO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gZmlsZS1sb2NrIGJhY2tlbmQ6ICR7U3RyaW5nKF9leGhhdXN0aXZlKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJ3aXRoRmlsZUxvY2s6IG5vIGxvY2sgYmFja2VuZCBhdmFpbGFibGVcIik7XG59XG5cbi8qKiBDYW5vbmljYWwgZmlsZXN5c3RlbS1zYWZlIGlkIGZvciBhIGxvY2sga2V5LiAqL1xuZnVuY3Rpb24gbG9ja0lkKGtleTogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YWJsZSA9IG9iamVjdFxuICAgIC50b09uZU9yTWFueShrZXkpXG4gICAgLm1hcCgocGFydCkgPT4gb2JqZWN0LnRvU3RhYmxlS2V5KHBhcnQpKVxuICAgIC5qb2luKFwiXFx1MDAwMFwiKTtcbiAgLy8gU2hvcnQgZGlnZXN0IHNvIHBhdGhzIHN0YXkgd2VsbCB1bmRlciBPUyBsaW1pdHM7IGNvbGxpc2lvbnMgYXJlIGZpbmUg4oCUIHRoZXlcbiAgLy8gb25seSBtZXJnZSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IGFscmVhZHkgc2hhcmVkIGEga2V5IHN0cmluZy5cbiAgcmV0dXJuIGhhc2guZm52SGFzaChzdGFibGUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYGZsb2NrKDIpYCB0aHJvdWdoIEJ1biBGRkkgd2hlbiBwb3NzaWJsZS5cbiAqXG4gKiBNZW1vaXplZDogdGhlIEZGSSBpbXBvcnQgKyBsaWJjIGBkbG9wZW5gIHJ1biBvbmNlIHBlciBwcm9jZXNzLiBSZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCBvbiBXaW5kb3dzLCB1bmRlciBwbGFpbiBOb2RlLCBvciB3aGVuIGxpYmMgY2Fubm90IGJlIGxvYWRlZCDigJRcbiAqIGNhbGxlcnMgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGJhY2tlbmQuIEEgbWlzcyBpcyBjYWNoZWQgdG9vLCBzbyBhIHByb2Nlc3NcbiAqIHRoYXQgY2Fubm90IGZsb2NrIG5ldmVyIHJldHJpZXMgdGhlIGxvYWQuXG4gKi9cbmNvbnN0IHJlc29sdmVGbG9jayA9IGZ1bmN0aW9uTW9kdWxlLm1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8RmxvY2tGbiB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoIXByb2Nlc3MudmVyc2lvbnMuYnVuKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgLy8gRHluYW1pYyBzcGVjaWZpZXIgc28gYHRzY2AgKG5vIGBAdHlwZXNgIGZvciBgYnVuOmZmaWApIGRvZXMgbm90IHJlc29sdmUgaXQ7XG4gICAgLy8gdGhlIGltcG9ydCBvbmx5IHN1Y2NlZWRzIHVuZGVyIEJ1biBhdCBydW50aW1lLlxuICAgIGNvbnN0IHNwZWNpZmllciA9IFwiYnVuOmZmaVwiO1xuICAgIGNvbnN0IGZmaSA9IChhd2FpdCBpbXBvcnQoc3BlY2lmaWVyKSkgYXMgdW5rbm93biBhcyBCdW5GZmlNb2R1bGU7XG4gICAgY29uc3QgbGliUGF0aCA9IHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIgPyBcImxpYlN5c3RlbS5CLmR5bGliXCIgOiBgbGliYy4ke2ZmaS5zdWZmaXh9YDtcbiAgICBjb25zdCBsaWIgPSBmZmkuZGxvcGVuKGxpYlBhdGgsIHtcbiAgICAgIGZsb2NrOiB7IGFyZ3M6IFtcImkzMlwiLCBcImkzMlwiXSwgcmV0dXJuczogXCJpMzJcIiB9LFxuICAgIH0pO1xuICAgIHJldHVybiBsaWIuc3ltYm9scy5mbG9jaztcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJmbG9jayBGRkkgdW5hdmFpbGFibGVcIiwgeyBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKGNhdXNlKSB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59KTtcblxuYXN5bmMgZnVuY3Rpb24gaG9sZEZsb2NrPFQ+KFxuICBsb2NrUGF0aDogc3RyaW5nLFxuICBmbG9jazogRmxvY2tGbixcbiAgZGVhZGxpbmU6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuKTogUHJvbWlzZTxUPiB7XG4gIGF3YWl0IGVuc3VyZVBhcmVudERpcihsb2NrUGF0aCk7XG4gIGNvbnN0IGhhbmRsZSA9IGF3YWl0IG9wZW4obG9ja1BhdGgsIFwiYStcIik7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckZsb2NrKGhhbmRsZS5mZCwgZmxvY2ssIGxvY2tQYXRoLCBkZWFkbGluZSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBmbG9jayhoYW5kbGUuZmQsIExPQ0tfVU4pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBoYW5kbGUuY2xvc2UoKS5jYXRjaCgoKSA9PiB7fSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckZsb2NrKFxuICBmZDogbnVtYmVyLFxuICBmbG9jazogRmxvY2tGbixcbiAgbG9ja1BhdGg6IHN0cmluZyxcbiAgZGVhZGxpbmU6IG51bWJlciB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpO1xuICAgIGlmIChyYyA9PT0gMCkgcmV0dXJuO1xuICAgIGFzc2VydEJlZm9yZURlYWRsaW5lKGxvY2tQYXRoLCBkZWFkbGluZSk7XG4gICAgYXdhaXQgYXN5bmMuc2xlZXAoUE9MTF9NUyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQb3J0YWJsZSBsb2NrLWRpcmVjdG9yeSBvd25lcnNoaXAgdGhyb3VnaCBgcHJvcGVyLWxvY2tmaWxlYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaG9sZExvY2tEaXJlY3Rvcnk8VD4oXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIGZuOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbik6IFByb21pc2U8VD4ge1xuICBhd2FpdCBlbnN1cmVQYXJlbnREaXIobG9ja1BhdGgpO1xuICBjb25zdCByZWxlYXNlID0gYXdhaXQgYWNxdWlyZUxvY2tEaXJlY3RvcnkobG9ja1BhdGgsIGRlYWRsaW5lKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWxlYXNlKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYWNxdWlyZUxvY2tEaXJlY3RvcnkoXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgZm9yICg7Oykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbG9ja2ZpbGUubG9jayhsb2NrUGF0aCwge1xuICAgICAgICByZWFscGF0aDogZmFsc2UsXG4gICAgICAgIHN0YWxlOiBTVEFMRV9NUyxcbiAgICAgICAgdXBkYXRlOiBVUERBVEVfTVMsXG4gICAgICAgIHJldHJpZXM6IDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgY29uc3QgZXJyID0gY2F1c2UgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uO1xuICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVMT0NLRURcIikgdGhyb3cgZXJyb3IudG9FcnJvcihjYXVzZSk7XG4gICAgICBhc3NlcnRCZWZvcmVEZWFkbGluZShsb2NrUGF0aCwgZGVhZGxpbmUpO1xuICAgICAgYXdhaXQgYXN5bmMuc2xlZXAoUE9MTF9NUyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydEJlZm9yZURlYWRsaW5lKGxvY2tQYXRoOiBzdHJpbmcsIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKGRlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IHdhaXRpbmcgZm9yIGZpbGUgbG9jazogJHtsb2NrUGF0aH1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVQYXJlbnREaXIobG9ja1BhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBta2RpcihkaXJuYW1lKGxvY2tQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG59XG4iXX0=
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpbGUtbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRzs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xHLE9BQU8sUUFBUSxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUs1QyxNQUFNLGdCQUFnQixHQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTlELDJEQUEyRDtBQUMzRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFFbkI7Ozs7R0FJRztBQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUUzRSwrRUFBK0U7QUFDL0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVuRix1REFBdUQ7QUFDdkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNsQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFpQ2xCOzs7Ozs7Ozs7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QUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYXNjYWRpbmcgY3Jvc3MtcHJvY2VzcyBtdXR1YWwgZXhjbHVzaW9uIHZpYSBhIGxvY2tmaWxlLlxuICpcbiAqIFNlcmlhbGl6ZXMgY29uY3VycmVudCAqcHJvY2Vzc2VzKiAodHdvIGBidW4gcnVuIGRlbW9gIHNoZWxscywgYSBDTEkgYmVzaWRlIGFcbiAqIHNlcnZlcikgb24gdGhlIHNhbWUga2V5LiBGb3IgaW4tcHJvY2VzcyAvIHdvcmtlci10aHJlYWQgZXhjbHVzaW9uIHVzZVxuICoge0BsaW5rIHdpdGhQcm9jZXNzTG9ja30gZnJvbSBgLi9wcm9jZXNzLWxvY2sudHNgIGluc3RlYWQuXG4gKlxuICogQmFja2VuZHM6XG4gKlxuICogMS4gKipmaWxlKiogKGRlZmF1bHQpIOKAlCBgcHJvcGVyLWxvY2tmaWxlYCBhdG9taWMgbG9jay1kaXJlY3RvcnkgY3JlYXRpb24sXG4gKiAgICBoZWFydGJlYXQsIHN0YWxlIHJlY292ZXJ5LCBhbmQgb3duZXJzaGlwLXNhZmUgcmVsZWFzZS4gQnVuIGFuZCBOb2RlIHVzZVxuICogICAgdGhpcyBzYW1lIHByb3RvY29sLlxuICogMi4gKipmbG9jayoqIChleHBsaWNpdCBjb21wYXRpYmlsaXR5IG9wdGlvbikg4oCUIGBmbG9jaygyKWAgdmlhIEJ1biBGRkkgb25cbiAqICAgIFVuaXguIEl0IHJlbWFpbnMgYXZhaWxhYmxlIHRvIGNhbGxlcnMgdGhhdCBzZWxlY3RlZCBpdCBleHBsaWNpdGx5LCBidXQgYVxuICogICAgcnVudGltZS1kZXBlbmRlbnQgY2FzY2FkZSBjYW5ub3QgY29vcmRpbmF0ZSBCdW4gYW5kIE5vZGUuXG4gKlxuICogVGhlIGZpcnN0IGJhY2tlbmQgdGhhdCBjYW4gYmUgKmluaXRpYWxpemVkKiBpcyB1c2VkIGZvciB0aGUgd2hvbGUgY2FsbC4gQSBidXN5XG4gKiBsb2NrIHdhaXRzOyBhbiB1bmF2YWlsYWJsZSBiYWNrZW5kIGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQuIENhbGxlcnMgbWF5IG9ubHlcbiAqIGJvdW5kIGhvdyBsb25nIHRvIHdhaXQgKHtAbGluayBGaWxlTG9ja09wdGlvbnMudGltZW91dE1zfSk7IHN0YWxlIHRpbWluZyBpc1xuICogbm90IGNvbmZpZ3VyYWJsZSBzbyBldmVyeSBob2xkZXIgYW5kIHdhaXRlciBhZ3JlZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG1rZGlyLCBvcGVuIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgeyBhc3luY1V0aWxzLCBlcnJvclV0aWxzLCBmdW5jdGlvblV0aWxzLCBoYXNoLCBsb2csIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgbG9ja2ZpbGUgZnJvbSBcInByb3Blci1sb2NrZmlsZVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY29yZTpmaWxlLWxvY2tcIik7XG5cbi8qKiBCYWNrZW5kcyB7QGxpbmsgd2l0aEZpbGVMb2NrfSBjYW4gYXR0ZW1wdCwgaW4gY2FzY2FkZSBvcmRlci4gKi9cbmV4cG9ydCB0eXBlIEZpbGVMb2NrQmFja2VuZCA9IFwiZmxvY2tcIiB8IFwiZmlsZVwiO1xuXG5jb25zdCBERUZBVUxUX0JBQ0tFTkRTOiByZWFkb25seSBGaWxlTG9ja0JhY2tlbmRbXSA9IFtcImZpbGVcIl07XG5cbi8qKiBQb2xsIGludGVydmFsIHdoaWxlIHdhaXRpbmcgZm9yIGEgY29udGVuZGVkIE9TIGxvY2suICovXG5jb25zdCBQT0xMX01TID0gNTA7XG5cbi8qKlxuICogQWdlIGFmdGVyIHdoaWNoIGFuIHVucmVmcmVzaGVkIGxvY2sgZGlyZWN0b3J5IG1heSBiZSByZW1vdmVkLlxuICogTWF0Y2hlcyBgcHJvcGVyLWxvY2tmaWxlYCdzIGRlZmF1bHQuIE5vdCBjYWxsZXItY29uZmlndXJhYmxlOiBldmVyeSBwcm9jZXNzXG4gKiBtdXN0IHNoYXJlIHRoZSBzYW1lIHRocmVzaG9sZCBvciBhIGxpdmUgaG9sZGVyIGNhbiBiZSBtaXN0YWtlbiBmb3Igc3RhbGUuXG4gKi9cbmNvbnN0IFNUQUxFX01TID0gb2JqZWN0LnRvTnVtYmVyKHByb2Nlc3MuZW52LkZJTEVfTE9DS19TVEFMRV9NUykgPz8gMTBfMDAwO1xuXG4vKiogSGVhcnRiZWF0IGludGVydmFsIGZvciByZWZyZXNoaW5nIGxvY2stZGlyZWN0b3J5IG10aW1lIChgU1RBTEVfTVMgLyAyYCkuICovXG5jb25zdCBVUERBVEVfTVMgPSBvYmplY3QudG9OdW1iZXIocHJvY2Vzcy5lbnYuRklMRV9MT0NLX1VQREFURV9NUykgPz8gU1RBTEVfTVMgLyAyO1xuXG4vKiogYGZsb2NrKDIpYCBvcGVyYXRpb24gYml0cyAoTGludXggLyBtYWNPUyAvIEJTRCkuICovXG5jb25zdCBMT0NLX0VYID0gMjtcbmNvbnN0IExPQ0tfTkIgPSA0O1xuY29uc3QgTE9DS19VTiA9IDg7XG5cbi8qKiBSZXN1bHQgbWV0YWRhdGEgd2hlbiBhIGNhbGxlciB3YW50cyB0byBrbm93IHdoaWNoIGJhY2tlbmQgcmFuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlTG9ja0FjcXVpc2l0aW9uIHtcbiAgYmFja2VuZDogRmlsZUxvY2tCYWNrZW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVMb2NrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgZm9yIGxvY2tmaWxlcy4gRGVmYXVsdHMgdG8gYCRUTVBESVIvZGJ4LXRvb2xzLWxvY2tzYC5cbiAgICovXG4gIGRpcj86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIHRoZSBiYWNrZW5kIGxpc3QuIERlZmF1bHRzIHRvIHRoZSBwb3J0YWJsZSBgZmlsZWAgcHJvdG9jb2wuICovXG4gIGJhY2tlbmRzPzogcmVhZG9ubHkgRmlsZUxvY2tCYWNrZW5kW107XG4gIC8qKlxuICAgKiBTdG9wIHdhaXRpbmcgYW5kIHRocm93IGFmdGVyIHRoaXMgbWFueSBtaWxsaXNlY29uZHMuIE9taXQgdG8gcG9sbCBmb3JldmVyLlxuICAgKiBUaGlzIGlzIHRoZSBvbmx5IHdhaXQtbG9vcCBrbm9iOyBzdGFsZSByZWNsYWltIHRpbWluZyBpcyBmaXhlZC5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIEludm9rZWQgb25jZSB0aGUgYmFja2VuZCBmb3IgdGhpcyBjYWxsIGhhcyBiZWVuIGNob3Nlbi4gKi9cbiAgb25BY3F1aXJlPzogKGFjcXVpc2l0aW9uOiBGaWxlTG9ja0FjcXVpc2l0aW9uKSA9PiB2b2lkO1xufVxuXG50eXBlIEZsb2NrRm4gPSAoZmQ6IG51bWJlciwgb3BlcmF0aW9uOiBudW1iZXIpID0+IG51bWJlcjtcblxuaW50ZXJmYWNlIEJ1bkZmaU1vZHVsZSB7XG4gIGRsb3BlbjogKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBzeW1ib2xzOiBSZWNvcmQ8c3RyaW5nLCB7IGFyZ3M6IHN0cmluZ1tdOyByZXR1cm5zOiBzdHJpbmcgfT4sXG4gICkgPT4geyBzeW1ib2xzOiB7IGZsb2NrOiBGbG9ja0ZuIH0gfTtcbiAgc3VmZml4OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUnVuIGBmbmAgd2hpbGUgaG9sZGluZyBhIGNyb3NzLXByb2Nlc3MgbG9jayBuYW1lZCBieSBga2V5YC5cbiAqXG4gKiBga2V5YCBpcyBjYW5vbmljYWxpemVkIHdpdGggYG9iamVjdC50b1N0YWJsZUtleWAsIHRoZSBzYW1lIGlkZW50aXR5IHJ1bGUgYXNcbiAqIHByb2Nlc3MgYW5kIFBvc3RncmVzIGFkdmlzb3J5IGxvY2tzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhd2FpdCB3aXRoRmlsZUxvY2soW1wiY2FjaGVcIiwgXCJhcHBraXRcIl0sIGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgbWlncmF0ZSgpO1xuICogfSk7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoRmlsZUxvY2s8VD4oXG4gIGtleTogdW5rbm93bixcbiAgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICBvcHRpb25zOiBGaWxlTG9ja09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8VD4ge1xuICBpZiAob3B0aW9ucy50aW1lb3V0TXMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnRpbWVvdXRNcyA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwidGltZW91dE1zIG11c3QgYmUgbm9uLW5lZ2F0aXZlXCIpO1xuICB9XG4gIGNvbnN0IGlkID0gbG9ja0lkKGtleSk7XG4gIGNvbnN0IGJhY2tlbmRzID0gb3B0aW9ucy5iYWNrZW5kcyA/PyBERUZBVUxUX0JBQ0tFTkRTO1xuICBjb25zdCBkaXIgPSBvcHRpb25zLmRpciA/PyBqb2luKHRtcGRpcigpLCBcImRieC10b29scy1sb2Nrc1wiKTtcbiAgY29uc3QgZGVhZGxpbmUgPSBvcHRpb25zLnRpbWVvdXRNcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogRGF0ZS5ub3coKSArIG9wdGlvbnMudGltZW91dE1zO1xuXG4gIGZvciAoY29uc3QgYmFja2VuZCBvZiBiYWNrZW5kcykge1xuICAgIHN3aXRjaCAoYmFja2VuZCkge1xuICAgICAgY2FzZSBcImZsb2NrXCI6IHtcbiAgICAgICAgY29uc3QgbG9ja1BhdGggPSBqb2luKGRpciwgYCR7aWR9LmZsb2NrYCk7XG4gICAgICAgIGNvbnN0IGZsb2NrID0gYXdhaXQgcmVzb2x2ZUZsb2NrKCk7XG4gICAgICAgIGlmICghZmxvY2spIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoXCJsb2NrIGJhY2tlbmQgdW5hdmFpbGFibGVcIiwgeyBiYWNrZW5kLCBrZXk6IGlkIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcImFjcXVpcmluZyBsb2NrXCIsIHsgYmFja2VuZCwga2V5OiBpZCwgcGF0aDogbG9ja1BhdGggfSk7XG4gICAgICAgIG9wdGlvbnMub25BY3F1aXJlPy4oeyBiYWNrZW5kIH0pO1xuICAgICAgICByZXR1cm4gaG9sZEZsb2NrKGxvY2tQYXRoLCBmbG9jaywgZGVhZGxpbmUsIGZuKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJmaWxlXCI6IHtcbiAgICAgICAgY29uc3QgbG9ja1BhdGggPSBqb2luKGRpciwgaWQpO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJhY3F1aXJpbmcgbG9ja1wiLCB7IGJhY2tlbmQsIGtleTogaWQsIHBhdGg6IGxvY2tQYXRoIH0pO1xuICAgICAgICBvcHRpb25zLm9uQWNxdWlyZT8uKHsgYmFja2VuZCB9KTtcbiAgICAgICAgcmV0dXJuIGhvbGRMb2NrRGlyZWN0b3J5KGxvY2tQYXRoLCBkZWFkbGluZSwgZm4pO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBiYWNrZW5kO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gZmlsZS1sb2NrIGJhY2tlbmQ6ICR7U3RyaW5nKF9leGhhdXN0aXZlKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJ3aXRoRmlsZUxvY2s6IG5vIGxvY2sgYmFja2VuZCBhdmFpbGFibGVcIik7XG59XG5cbi8qKiBDYW5vbmljYWwgZmlsZXN5c3RlbS1zYWZlIGlkIGZvciBhIGxvY2sga2V5LiAqL1xuZnVuY3Rpb24gbG9ja0lkKGtleTogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YWJsZSA9IG9iamVjdFxuICAgIC50b09uZU9yTWFueShrZXkpXG4gICAgLm1hcCgocGFydCkgPT4gb2JqZWN0LnRvU3RhYmxlS2V5KHBhcnQpKVxuICAgIC5qb2luKFwiXFx1MDAwMFwiKTtcbiAgLy8gU2hvcnQgZGlnZXN0IHNvIHBhdGhzIHN0YXkgd2VsbCB1bmRlciBPUyBsaW1pdHM7IGNvbGxpc2lvbnMgYXJlIGZpbmUg4oCUIHRoZXlcbiAgLy8gb25seSBtZXJnZSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IGFscmVhZHkgc2hhcmVkIGEga2V5IHN0cmluZy5cbiAgcmV0dXJuIGhhc2guZm52SGFzaChzdGFibGUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYGZsb2NrKDIpYCB0aHJvdWdoIEJ1biBGRkkgd2hlbiBwb3NzaWJsZS5cbiAqXG4gKiBNZW1vaXplZDogdGhlIEZGSSBpbXBvcnQgKyBsaWJjIGBkbG9wZW5gIHJ1biBvbmNlIHBlciBwcm9jZXNzLiBSZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCBvbiBXaW5kb3dzLCB1bmRlciBwbGFpbiBOb2RlLCBvciB3aGVuIGxpYmMgY2Fubm90IGJlIGxvYWRlZCDigJRcbiAqIGNhbGxlcnMgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGJhY2tlbmQuIEEgbWlzcyBpcyBjYWNoZWQgdG9vLCBzbyBhIHByb2Nlc3NcbiAqIHRoYXQgY2Fubm90IGZsb2NrIG5ldmVyIHJldHJpZXMgdGhlIGxvYWQuXG4gKi9cbmNvbnN0IHJlc29sdmVGbG9jayA9IGZ1bmN0aW9uVXRpbHMubWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxGbG9ja0ZuIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghcHJvY2Vzcy52ZXJzaW9ucy5idW4pIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICAvLyBEeW5hbWljIHNwZWNpZmllciBzbyBgdHNjYCAobm8gYEB0eXBlc2AgZm9yIGBidW46ZmZpYCkgZG9lcyBub3QgcmVzb2x2ZSBpdDtcbiAgICAvLyB0aGUgaW1wb3J0IG9ubHkgc3VjY2VlZHMgdW5kZXIgQnVuIGF0IHJ1bnRpbWUuXG4gICAgY29uc3Qgc3BlY2lmaWVyID0gXCJidW46ZmZpXCI7XG4gICAgY29uc3QgZmZpID0gKGF3YWl0IGltcG9ydChzcGVjaWZpZXIpKSBhcyB1bmtub3duIGFzIEJ1bkZmaU1vZHVsZTtcbiAgICBjb25zdCBsaWJQYXRoID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIiA/IFwibGliU3lzdGVtLkIuZHlsaWJcIiA6IGBsaWJjLiR7ZmZpLnN1ZmZpeH1gO1xuICAgIGNvbnN0IGxpYiA9IGZmaS5kbG9wZW4obGliUGF0aCwge1xuICAgICAgZmxvY2s6IHsgYXJnczogW1wiaTMyXCIsIFwiaTMyXCJdLCByZXR1cm5zOiBcImkzMlwiIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGxpYi5zeW1ib2xzLmZsb2NrO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImZsb2NrIEZGSSB1bmF2YWlsYWJsZVwiLCB7IGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVzZSkgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGhvbGRGbG9jazxUPihcbiAgbG9ja1BhdGg6IHN0cmluZyxcbiAgZmxvY2s6IEZsb2NrRm4sXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIGZuOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbik6IFByb21pc2U8VD4ge1xuICBhd2FpdCBlbnN1cmVQYXJlbnREaXIobG9ja1BhdGgpO1xuICBjb25zdCBoYW5kbGUgPSBhd2FpdCBvcGVuKGxvY2tQYXRoLCBcImErXCIpO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JGbG9jayhoYW5kbGUuZmQsIGZsb2NrLCBsb2NrUGF0aCwgZGVhZGxpbmUpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZmxvY2soaGFuZGxlLmZkLCBMT0NLX1VOKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgaGFuZGxlLmNsb3NlKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JGbG9jayhcbiAgZmQ6IG51bWJlcixcbiAgZmxvY2s6IEZsb2NrRm4sXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTtcbiAgICBpZiAocmMgPT09IDApIHJldHVybjtcbiAgICBhc3NlcnRCZWZvcmVEZWFkbGluZShsb2NrUGF0aCwgZGVhZGxpbmUpO1xuICAgIGF3YWl0IGFzeW5jVXRpbHMuc2xlZXAoUE9MTF9NUyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQb3J0YWJsZSBsb2NrLWRpcmVjdG9yeSBvd25lcnNoaXAgdGhyb3VnaCBgcHJvcGVyLWxvY2tmaWxlYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaG9sZExvY2tEaXJlY3Rvcnk8VD4oXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIGZuOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbik6IFByb21pc2U8VD4ge1xuICBhd2FpdCBlbnN1cmVQYXJlbnREaXIobG9ja1BhdGgpO1xuICBjb25zdCByZWxlYXNlID0gYXdhaXQgYWNxdWlyZUxvY2tEaXJlY3RvcnkobG9ja1BhdGgsIGRlYWRsaW5lKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWxlYXNlKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYWNxdWlyZUxvY2tEaXJlY3RvcnkoXG4gIGxvY2tQYXRoOiBzdHJpbmcsXG4gIGRlYWRsaW5lOiBudW1iZXIgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgZm9yICg7Oykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbG9ja2ZpbGUubG9jayhsb2NrUGF0aCwge1xuICAgICAgICByZWFscGF0aDogZmFsc2UsXG4gICAgICAgIHN0YWxlOiBTVEFMRV9NUyxcbiAgICAgICAgdXBkYXRlOiBVUERBVEVfTVMsXG4gICAgICAgIHJldHJpZXM6IDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgY29uc3QgZXJyID0gY2F1c2UgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uO1xuICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVMT0NLRURcIikgdGhyb3cgZXJyb3JVdGlscy50b0Vycm9yKGNhdXNlKTtcbiAgICAgIGFzc2VydEJlZm9yZURlYWRsaW5lKGxvY2tQYXRoLCBkZWFkbGluZSk7XG4gICAgICBhd2FpdCBhc3luY1V0aWxzLnNsZWVwKFBPTExfTVMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRCZWZvcmVEZWFkbGluZShsb2NrUGF0aDogc3RyaW5nLCBkZWFkbGluZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmIChkZWFkbGluZSAhPT0gdW5kZWZpbmVkICYmIERhdGUubm93KCkgPj0gZGVhZGxpbmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVkIG91dCB3YWl0aW5nIGZvciBmaWxlIGxvY2s6ICR7bG9ja1BhdGh9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUGFyZW50RGlyKGxvY2tQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShsb2NrUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuIl19
@@ -29,7 +29,7 @@
29
29
  * @module
30
30
  */
31
31
  import { isMainThread, MessageChannel, parentPort, workerData, } from "node:worker_threads";
32
- import { error, hash, object } from "@dbx-tools/shared-core";
32
+ import { errorUtils, hash, object } from "@dbx-tools/shared-core";
33
33
  /**
34
34
  * `workerData` slot carrying the coordinator port into a worker, and the
35
35
  * `parentPort` message `type` for the late {@link attachProcessLock} handshake.
@@ -198,7 +198,7 @@ class LockClient {
198
198
  }
199
199
  catch (cause) {
200
200
  this.pending.delete(requestId);
201
- reject(error.toError(cause));
201
+ reject(errorUtils.toError(cause));
202
202
  }
203
203
  });
204
204
  }
@@ -352,4 +352,4 @@ export function processLockAttached() {
352
352
  port.on("message", onMessage);
353
353
  });
354
354
  }
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2Nlc3MtbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsVUFBVSxHQUlYLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxhQUFhLEdBQUcsMkJBQTJCLENBQUM7QUFDbEQsTUFBTSxtQkFBbUIsR0FBRyw2QkFBNkIsQ0FBQztBQTBDMUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxlQUFlO0lBQ0YsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO0lBRXZELDhEQUE4RDtJQUM5RCxPQUFPLENBQUMsSUFBaUI7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFvQixFQUFFLEVBQUU7WUFDMUMsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssU0FBUztvQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbkQsTUFBTTtnQkFDUixLQUFLLFNBQVM7b0JBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDN0MsTUFBTTtnQkFDUjtvQkFDRSxNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsNkVBQTZFO1FBQzdFLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FB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QUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLG1CQUFtQjtnQkFBRSxPQUFPO1lBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBRSxPQUFvQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBLZXllZCBtdXR1YWwgZXhjbHVzaW9uIGFjcm9zcyB0aGUgbWFpbiB0aHJlYWQgYW5kIGl0cyB3b3JrZXIgdGhyZWFkcy5cbiAqXG4gKiB7QGxpbmsgd2l0aFByb2Nlc3NMb2NrfSBzZXJpYWxpemVzIGNhbGxiYWNrcyB0aGF0IHNoYXJlIGEga2V5OiBvbmUgcnVucyBhdCBhXG4gKiB0aW1lLCB0aGUgcmVzdCBxdWV1ZSBpbiBhcnJpdmFsIG9yZGVyLCBhbmQgZGlmZmVyZW50IGtleXMgcHJvY2VlZFxuICogY29uY3VycmVudGx5LiBVbmxpa2UgYSBwbGFpbiBpbi1tb2R1bGUgYFByb21pc2VgIGNoYWluLCB0aGUgcXVldWUgaXMgc2hhcmVkIGJ5XG4gKiBldmVyeSB0aHJlYWQgd2lyZWQgdXAgdGhyb3VnaCB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfSwgc28gYSB3b3JrZXJcbiAqIHBvb2wgY2Fubm90IHJ1biB0d28gY2FsbGJhY2tzIGZvciB0aGUgc2FtZSBrZXkgYXQgb25jZS5cbiAqXG4gKiBUaGUgbmFtZSBzYXlzIGBwcm9jZXNzYDogdGhpcyBjb29yZGluYXRlcyB0aGUgVEhSRUFEUyBvZiBvbmUgTm9kZSBwcm9jZXNzLiBJdFxuICogaXMgbm90IGNyb3NzLXByb2Nlc3MgYW5kIG5vdCBjcm9zcy1ob3N0IC0gYSBzZWNvbmQgYG5vZGVgIGludm9jYXRpb24sIG9yIGFcbiAqIHNlY29uZCBhcHAgcmVwbGljYSwgaGFzIGl0cyBvd24gY29vcmRpbmF0b3IgYW5kIHNoYXJlcyBub3RoaW5nLiBXaGVuIHRoZSBzY29wZVxuICogaXMgYSBkZXBsb3ltZW50IHJhdGhlciB0aGFuIGEgcHJvY2VzcywgdXNlXG4gKiBgQGRieC10b29scy9wb3N0Z3Jlc2AncyBgd2l0aEFkdmlzb3J5TG9ja2AsIHdoaWNoIHB1dHMgdGhlIGFyYml0ZXIgaW5cbiAqIFBvc3RncmVTUUwgd2hlcmUgZXZlcnkgcmVwbGljYSBjYW4gc2VlIGl0LlxuICpcbiAqIFRoZSBtYWluIHRocmVhZCBvd25zIHRoZSBvbmx5IGNvb3JkaW5hdG9yLiBFYWNoIHBhcnRpY2lwYXRpbmcgdGhyZWFkIGdldHMgb25lXG4gKiBgTWVzc2FnZVBvcnRgIHRvIGl0LCBhbmQgYSBsb2NrIGlzIGdyYW50ZWQgYnkgYSBtZXNzYWdlIGJhY2sgb3ZlciB0aGF0IHBvcnQuXG4gKiBDb25zZXF1ZW50bHk6XG4gKlxuICogICAtIHRoZSBsb2NrIGlzIEFEVklTT1JZLCBsaWtlIFBvc3RncmVzIGFkdmlzb3J5IGxvY2tzIC0gaXQgcHJvdGVjdHMgYVxuICogICAgIGNyaXRpY2FsIHNlY3Rpb24gb25seSBpbnNvZmFyIGFzIGV2ZXJ5IHdyaXRlciB0YWtlcyB0aGUgc2FtZSBrZXk7XG4gKiAgIC0gZmFpcm5lc3MgaXMgRklGTyBwZXIga2V5LCBzaW5jZSB0aGUgY29vcmRpbmF0b3IgcXVldWVzIHdhaXRlcnMgaW4gdGhlXG4gKiAgICAgb3JkZXIgdGhlaXIgcmVxdWVzdHMgYXJyaXZlO1xuICogICAtIGEgdGhyZWFkIHRoYXQgZGllcyB3aGlsZSBob2xkaW5nIGEgbG9jayByZWxlYXNlcyBpdCwgYmVjYXVzZSBpdHMgcG9ydFxuICogICAgIGNsb3NpbmcgaXMgd2hhdCBoYW5kcyB0aGUga2V5IHRvIHRoZSBuZXh0IHdhaXRlciAoc2VlXG4gKiAgICAge0BsaW5rIExvY2tDb29yZGluYXRvci5yZW1vdmVQb3J0fSkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGlzTWFpblRocmVhZCxcbiAgTWVzc2FnZUNoYW5uZWwsXG4gIHBhcmVudFBvcnQsXG4gIHdvcmtlckRhdGEsXG4gIHR5cGUgTWVzc2FnZVBvcnQsXG4gIHR5cGUgV29ya2VyLFxuICB0eXBlIFdvcmtlck9wdGlvbnMsXG59IGZyb20gXCJub2RlOndvcmtlcl90aHJlYWRzXCI7XG5pbXBvcnQgeyBlcnJvciwgaGFzaCwgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuLyoqXG4gKiBgd29ya2VyRGF0YWAgc2xvdCBjYXJyeWluZyB0aGUgY29vcmRpbmF0b3IgcG9ydCBpbnRvIGEgd29ya2VyLCBhbmQgdGhlXG4gKiBgcGFyZW50UG9ydGAgbWVzc2FnZSBgdHlwZWAgZm9yIHRoZSBsYXRlIHtAbGluayBhdHRhY2hQcm9jZXNzTG9ja30gaGFuZHNoYWtlLlxuICogTmFtZXNwYWNlZCBiZWNhdXNlIGJvdGggdHJhdmVsIHRocm91Z2ggY2hhbm5lbHMgYW4gYXBwbGljYXRpb24gYWxzbyB1c2VzOlxuICogYHdvcmtlckRhdGFgIGlzIHRoZSBjYWxsZXIncyBvd24gb2JqZWN0LCBhbmQgYHBhcmVudFBvcnRgIGNhcnJpZXMgdGhlIGNhbGxlcidzXG4gKiBvd24gbWVzc2FnZXMuXG4gKi9cbmNvbnN0IExPQ0tfUE9SVF9LRVkgPSBcIl9fZGJ4VG9vbHNQcm9jZXNzTG9ja1BvcnRcIjtcbmNvbnN0IEFUVEFDSF9NRVNTQUdFX1RZUEUgPSBcIl9fZGJ4VG9vbHNQcm9jZXNzTG9ja0F0dGFjaFwiO1xuXG4vKiogU2VudCBieSBhIGNsaWVudCB0byB0aGUgY29vcmRpbmF0b3IuICovXG50eXBlIExvY2tSZXF1ZXN0ID1cbiAgfCB7IHR5cGU6IFwiYWNxdWlyZVwiOyByZXF1ZXN0SWQ6IHN0cmluZzsga2V5OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJyZWxlYXNlXCI7IHJlcXVlc3RJZDogc3RyaW5nOyBrZXk6IHN0cmluZyB9O1xuXG4vKiogU2VudCBieSB0aGUgY29vcmRpbmF0b3IgdG8gdGhlIGNsaWVudCB0aGF0IG5vdyBvd25zIHRoZSBrZXkuICovXG50eXBlIExvY2tSZXNwb25zZSA9IHsgdHlwZTogXCJncmFudGVkXCI7IHJlcXVlc3RJZDogc3RyaW5nIH07XG5cbnR5cGUgTG9ja01lc3NhZ2UgPSBMb2NrUmVxdWVzdCB8IExvY2tSZXNwb25zZTtcblxuLyoqIFRoZSBgcGFyZW50UG9ydGAgZW52ZWxvcGUgdGhhdCBoYW5kcyBhIGxhdGUtYXR0YWNoZWQgd29ya2VyIGl0cyBwb3J0LiAqL1xuaW50ZXJmYWNlIEF0dGFjaE1lc3NhZ2Uge1xuICB0eXBlOiB0eXBlb2YgQVRUQUNIX01FU1NBR0VfVFlQRTtcbiAgcG9ydDogTWVzc2FnZVBvcnQ7XG59XG5cbi8qKiBPbmUgb3V0c3RhbmRpbmcgb3IgZ3JhbnRlZCBhY3F1aXNpdGlvbi4gKi9cbmludGVyZmFjZSBMb2NrV2FpdGVyIHtcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIHBvcnQ6IE1lc3NhZ2VQb3J0O1xufVxuXG4vKiogU2hhcGUgb2YgdGhlIGB3b3JrZXJEYXRhYCBzbGljZSB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBMb2NrV29ya2VyRGF0YSB7XG4gIFtMT0NLX1BPUlRfS0VZXT86IE1lc3NhZ2VQb3J0O1xufVxuXG4vKipcbiAqIEEga2V5J3Mgb3duZXIgcGx1cyBpdHMgRklGTyBxdWV1ZSBvZiB3YWl0ZXJzLlxuICpcbiAqIE93bmVyIGFuZCBxdWV1ZSBsaXZlIGluIE9ORSBtYXAgZW50cnkgcmF0aGVyIHRoYW4gdHdvIHBhcmFsbGVsIG1hcHMgc28gYSBrZXlcbiAqIGNhbm5vdCBlbmQgdXAgaGFsZi1wcmVzZW50IC0gYSBxdWV1ZSB3aG9zZSBvd25lciBtYXAgZW50cnkgd2FzIGFscmVhZHkgZGVsZXRlZFxuICogd291bGQgc3RyYW5kIGl0cyB3YWl0ZXJzIGZvcmV2ZXIsIGFuZCB0aGUgZW50cnkgaXMgZHJvcHBlZCBvbmx5IHdoZW4gdGhlIGtleVxuICogaXMgYm90aCB1bm93bmVkIGFuZCB1bndhbnRlZC5cbiAqL1xuaW50ZXJmYWNlIExvY2tTdGF0ZSB7XG4gIG93bmVyOiBMb2NrV2FpdGVyO1xuICBxdWV1ZTogTG9ja1dhaXRlcltdO1xufVxuXG4vKipcbiAqIEFyYml0ZXIgZm9yIGV2ZXJ5IGtleSwgbGl2aW5nIG9uIHRoZSBtYWluIHRocmVhZC5cbiAqXG4gKiBIb2xkcyBubyB0aW1lcnMgYW5kIG5vIGhhbmRsZXMgb2YgaXRzIG93bjogYSBwb3J0IGlzIHVucmVmJ2QgYnkgaXRzIGNsaWVudFxuICogd2hpbGUgaWRsZSAoc2VlIHtAbGluayBMb2NrQ2xpZW50fSksIHNvIGFuIGlkbGUgY29vcmRpbmF0b3IgbmV2ZXIga2VlcHMgdGhlXG4gKiBwcm9jZXNzIGFsaXZlLlxuICovXG5jbGFzcyBMb2NrQ29vcmRpbmF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2NrU3RhdGU+KCk7XG5cbiAgLyoqIFNlcnZlIG9uZSBjbGllbnQuIENhbGxlZCBvbmNlIHBlciBwYXJ0aWNpcGF0aW5nIHRocmVhZC4gKi9cbiAgYWRkUG9ydChwb3J0OiBNZXNzYWdlUG9ydCk6IHZvaWQge1xuICAgIHBvcnQub24oXCJtZXNzYWdlXCIsIChtZXNzYWdlOiBMb2NrTWVzc2FnZSkgPT4ge1xuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImFjcXVpcmVcIjpcbiAgICAgICAgICB0aGlzLmFjcXVpcmUobWVzc2FnZS5rZXksIG1lc3NhZ2UucmVxdWVzdElkLCBwb3J0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlbGVhc2VcIjpcbiAgICAgICAgICB0aGlzLnJlbGVhc2UobWVzc2FnZS5rZXksIG1lc3NhZ2UucmVxdWVzdElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBIGNsb3NlZCBwb3J0IG1lYW5zIGl0cyB0aHJlYWQgZXhpdGVkIG9yIHdhcyB0ZXJtaW5hdGVkLiBSZWxlYXNpbmcgaGVyZSBpc1xuICAgIC8vIHdoYXQga2VlcHMgb25lIGNyYXNoZWQgd29ya2VyIGZyb20gd2VkZ2luZyBhIGtleSBmb3IgdGhlIHByb2Nlc3MgbGlmZXRpbWUuXG4gICAgcG9ydC5vbihcImNsb3NlXCIsICgpID0+IHRoaXMucmVtb3ZlUG9ydChwb3J0KSk7XG4gICAgLy8gVGhlIGNvb3JkaW5hdG9yIHNpZGUgc3RheXMgdW5yZWYnZCBmb3IgaXRzIHdob2xlIGxpZmUuIEl0IGlzIGEgcHVyZVxuICAgIC8vIHJlc3BvbmRlciAtIGl0IG5ldmVyIGhhcyBidXNpbmVzcyBvZiBpdHMgb3duIHBlbmRpbmcgLSBzbyBrZWVwaW5nIHRoZVxuICAgIC8vIGV2ZW50IGxvb3AgYWxpdmUgZm9yIGl0IHdvdWxkIG1lYW4gYSBwcm9jZXNzIHRoYXQgdXNlZCBhIGxvY2sgb25jZSBjb3VsZFxuICAgIC8vIG5ldmVyIGV4aXQuIEEgcmVxdWVzdCBhbHdheXMgYXJyaXZlcyBmcm9tIGEgY2xpZW50IHRoYXQgaGFzIHJlZidkIElUU1xuICAgIC8vIHBvcnQsIHNvIHRoZSBsb29wIGlzIGF3YWtlIHdoZW5ldmVyIHRoZXJlIGlzIGFjdHVhbGx5IHNvbWV0aGluZyB0byBzZXJ2ZS5cbiAgICBwb3J0LnVucmVmKCk7XG4gICAgcG9ydC5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3F1aXJlKGtleTogc3RyaW5nLCByZXF1ZXN0SWQ6IHN0cmluZywgcG9ydDogTWVzc2FnZVBvcnQpOiB2b2lkIHtcbiAgICBjb25zdCB3YWl0ZXI6IExvY2tXYWl0ZXIgPSB7IHJlcXVlc3RJZCwgcG9ydCB9O1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgdGhpcy5zdGF0ZXMuc2V0KGtleSwgeyBvd25lcjogd2FpdGVyLCBxdWV1ZTogW10gfSk7XG4gICAgICBncmFudCh3YWl0ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZS5xdWV1ZS5wdXNoKHdhaXRlcik7XG4gIH1cblxuICAvKipcbiAgICogSGFuZCB0aGUga2V5IG9uLCBpZ25vcmluZyBhIHJlbGVhc2UgZnJvbSBhbnlvbmUgYnV0IHRoZSBjdXJyZW50IG93bmVyLlxuICAgKlxuICAgKiBBIHN0YWxlIHJlbGVhc2UgaXMgZXhwZWN0ZWQsIG5vdCBkZWZlbnNpdmUgY29kaW5nOiBhbiBhYm9ydGVkIGFjcXVpc2l0aW9uXG4gICAqIHNlbmRzIG9uZSBmb3IgYSByZXF1ZXN0IHRoYXQgbmV2ZXIgb3duZWQgdGhlIGtleSwgYW5kIGhvbm91cmluZyBpdCB3b3VsZFxuICAgKiByZXZva2UgdGhlIGxvY2sgZnJvbSB3aG9ldmVyIGhvbGRzIGl0IG5vdy5cbiAgICovXG4gIHByaXZhdGUgcmVsZWFzZShrZXk6IHN0cmluZywgcmVxdWVzdElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGVzLmdldChrZXkpO1xuICAgIGlmIChzdGF0ZT8ub3duZXIucmVxdWVzdElkICE9PSByZXF1ZXN0SWQpIHJldHVybjtcbiAgICB0aGlzLmdyYW50TmV4dChrZXksIHN0YXRlKTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIHRoZSBuZXh0IHdhaXRlciwgb3IgZHJvcCB0aGUga2V5IHdoZW4gbm9ib2R5IHdhbnRzIGl0LiAqL1xuICBwcml2YXRlIGdyYW50TmV4dChrZXk6IHN0cmluZywgc3RhdGU6IExvY2tTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBzdGF0ZS5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmICghbmV4dCkge1xuICAgICAgdGhpcy5zdGF0ZXMuZGVsZXRlKGtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLm93bmVyID0gbmV4dDtcbiAgICBncmFudChuZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcm9wIGEgZGVhZCB0aHJlYWQgZnJvbSBldmVyeSBrZXk6IHJlbGVhc2UgdGhlIG9uZXMgaXQgb3duZWQgYW5kIHJlbW92ZSBpdFxuICAgKiBmcm9tIHRoZSBxdWV1ZXMgaXQgd2FzIHdhaXRpbmcgaW4uXG4gICAqXG4gICAqIFF1ZXVlIHJlbW92YWwgbXVzdCBoYXBwZW4gRklSU1QuIEEgdGhyZWFkIGNhbiBhcHBlYXIgYXMgYm90aCB0aGUgb3duZXIgb2ZcbiAgICogb25lIGtleSBhbmQgYSB3YWl0ZXIgZm9yIGFub3RoZXIsIGFuZCBwcm9tb3RpbmcgaXQgb3V0IG9mIGEgcXVldWUgaXQgY2FuIG5vXG4gICAqIGxvbmdlciBhbnN3ZXIgZm9yIHdvdWxkIGdyYW50IGEgbG9jayB0byBhIGNsb3NlZCBwb3J0IC0gc3RhbGxpbmcgdGhhdCBrZXlcbiAgICogdW50aWwgdGhlIHByb2Nlc3MgZW5kcy5cbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlUG9ydChwb3J0OiBNZXNzYWdlUG9ydCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgdGhpcy5zdGF0ZXMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChzdGF0ZS5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YXRlLnF1ZXVlID0gc3RhdGUucXVldWUuZmlsdGVyKCh3YWl0ZXIpID0+IHdhaXRlci5wb3J0ICE9PSBwb3J0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCBzdGF0ZV0gb2YgWy4uLnRoaXMuc3RhdGVzXSkge1xuICAgICAgaWYgKHN0YXRlLm93bmVyLnBvcnQgPT09IHBvcnQpIHRoaXMuZ3JhbnROZXh0KGtleSwgc3RhdGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogTm90aWZ5IGEgd2FpdGVyIHRoYXQgaXQgbm93IG93bnMgaXRzIGtleS4gKi9cbmZ1bmN0aW9uIGdyYW50KHdhaXRlcjogTG9ja1dhaXRlcik6IHZvaWQge1xuICB3YWl0ZXIucG9ydC5wb3N0TWVzc2FnZSh7IHR5cGU6IFwiZ3JhbnRlZFwiLCByZXF1ZXN0SWQ6IHdhaXRlci5yZXF1ZXN0SWQgfSBzYXRpc2ZpZXMgTG9ja1Jlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBBIHRocmVhZCdzIGVuZCBvZiB0aGUgY29udmVyc2F0aW9uOiBzZW5kcyByZXF1ZXN0cywgYXdhaXRzIGdyYW50cywgYW5kIHJ1bnNcbiAqIGNhbGxiYWNrcy5cbiAqXG4gKiBPd25zIHRoZSBldmVudC1sb29wIGJvb2trZWVwaW5nLiBUaGUgcG9ydCBpcyB1bnJlZidkIHdoaWxlIGlkbGUgc28gaG9sZGluZyBhXG4gKiBsb2NrIG1vZHVsZSBuZXZlciBibG9ja3MgcHJvY2VzcyBleGl0LCBhbmQgcmVmJ2QgZXhhY3RseSB3aGlsZSB0aGlzIHRocmVhZCBoYXNcbiAqIGFuIG91dHN0YW5kaW5nIHJlcXVlc3Qgb3IgYW4gdW5yZWxlYXNlZCBsb2NrIC0gb3RoZXJ3aXNlIE5vZGUgd291bGQgY29uc2lkZXJcbiAqIGl0c2VsZiBvdXQgb2Ygd29yayBhbmQgZXhpdCBtaWQtY3JpdGljYWwtc2VjdGlvbiwgZHJvcHBpbmcgdGhlIGdyYW50IHRoYXQgd2FzXG4gKiBhbHJlYWR5IG9uIGl0cyB3YXkuXG4gKi9cbmNsYXNzIExvY2tDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmcgPSBuZXcgTWFwPHN0cmluZywgKGVycm9yPzogRXJyb3IpID0+IHZvaWQ+KCk7XG4gIC8qKiBSZXF1ZXN0cyArIGhlbGQgbG9ja3MuIFRoZSBwb3J0IGlzIHJlZidkIHdoaWxlIHRoaXMgaXMgYWJvdmUgemVyby4gKi9cbiAgcHJpdmF0ZSBhY3RpdmUgPSAwO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcG9ydDogTWVzc2FnZVBvcnQpIHtcbiAgICBwb3J0Lm9uKFwibWVzc2FnZVwiLCAobWVzc2FnZTogTG9ja01lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IFwiZ3JhbnRlZFwiKSByZXR1cm47XG4gICAgICB0aGlzLnNldHRsZShtZXNzYWdlLnJlcXVlc3RJZCk7XG4gICAgfSk7XG4gICAgcG9ydC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIC8vIFRoZSBjb29yZGluYXRvciBpcyBnb25lIChtYWluIHRocmVhZCBleGl0aW5nLCBvciB0aGlzIHdvcmtlciBiZWluZyB0b3JuXG4gICAgICAvLyBkb3duKS4gRmFpbCB0aGUgd2FpdGVycyByYXRoZXIgdGhhbiBoYW5nIHRoZW06IGEgY2FsbGVyIGJsb2NrZWQgb24gYVxuICAgICAgLy8gbG9jayB0aGF0IGNhbiBuZXZlciBiZSBncmFudGVkIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBkZWFkbG9jay5cbiAgICAgIGNvbnN0IGNsb3NlRXJyb3IgPSBuZXcgRXJyb3IoXCJQcm9jZXNzIGxvY2sgcG9ydCBjbG9zZWQgYmVmb3JlIHRoZSBsb2NrIHdhcyBncmFudGVkXCIpO1xuICAgICAgZm9yIChjb25zdCBzZXR0bGUgb2YgWy4uLnRoaXMucGVuZGluZy52YWx1ZXMoKV0pIHNldHRsZShjbG9zZUVycm9yKTtcbiAgICB9KTtcbiAgICBwb3J0LnVucmVmKCk7XG4gICAgcG9ydC5zdGFydCgpO1xuICB9XG5cbiAgLyoqIFJlc29sdmUgb3IgcmVqZWN0IG9uZSBwZW5kaW5nIHJlcXVlc3QgYW5kIGRyb3AgaXRzIHJlZi4gKi9cbiAgcHJpdmF0ZSBzZXR0bGUocmVxdWVzdElkOiBzdHJpbmcsIGZhaWx1cmU/OiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnN0IHNldHRsZSA9IHRoaXMucGVuZGluZy5nZXQocmVxdWVzdElkKTtcbiAgICBpZiAoIXNldHRsZSkgcmV0dXJuO1xuICAgIHRoaXMucGVuZGluZy5kZWxldGUocmVxdWVzdElkKTtcbiAgICBzZXR0bGUoZmFpbHVyZSk7XG4gIH1cblxuICAvKiogUmVmIHRoZSBwb3J0IGZvciB0aGUgZmlyc3QgdW5pdCBvZiBvdXRzdGFuZGluZyB3b3JrLiAqL1xuICBwcml2YXRlIHJldGFpbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmUrKyA9PT0gMCkgdGhpcy5wb3J0LnJlZigpO1xuICB9XG5cbiAgLyoqIFVucmVmIG9uY2Ugbm90aGluZyBpcyBvdXRzdGFuZGluZywgc28gdGhlIHRocmVhZCBjYW4gZXhpdC4gKi9cbiAgcHJpdmF0ZSByZWxlYXNlKCk6IHZvaWQge1xuICAgIGlmICgtLXRoaXMuYWN0aXZlID09PSAwKSB0aGlzLnBvcnQudW5yZWYoKTtcbiAgfVxuXG4gIGFzeW5jIHJ1bjxUPihrZXk6IHN0cmluZywgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9jZXNzIGxvY2sgcG9ydCBpcyBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IGhhc2guaWQoKTtcbiAgICB0aGlzLnJldGFpbigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMucGVuZGluZy5zZXQocmVxdWVzdElkLCAoZmFpbHVyZSkgPT4gKGZhaWx1cmUgPyByZWplY3QoZmFpbHVyZSkgOiByZXNvbHZlKCkpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2UoeyB0eXBlOiBcImFjcXVpcmVcIiwgcmVxdWVzdElkLCBrZXkgfSBzYXRpc2ZpZXMgTG9ja1JlcXVlc3QpO1xuICAgICAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgICAgIHRoaXMucGVuZGluZy5kZWxldGUocmVxdWVzdElkKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IudG9FcnJvcihjYXVzZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgLy8gTmV2ZXIgZ3JhbnRlZCwgc28gdGhlcmUgaXMgbm90aGluZyB0byByZWxlYXNlIC0ganVzdCBkcm9wIHRoZSByZWYuXG4gICAgICB0aGlzLnJlbGVhc2UoKTtcbiAgICAgIHRocm93IGNhdXNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFBvc3QgYmVmb3JlIHVucmVmJ2luZzogdGhlIHJlbGVhc2UgbXVzdCBiZSBpbiBmbGlnaHQgd2hpbGUgdGhlIHBvcnQgaXNcbiAgICAgIC8vIHN0aWxsIGhvbGRpbmcgdGhlIGxvb3Agb3Blbiwgb3IgdGhlIG5leHQgd2FpdGVyIGlzIHN0cmFuZGVkLlxuICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2UoeyB0eXBlOiBcInJlbGVhc2VcIiwgcmVxdWVzdElkLCBrZXkgfSBzYXRpc2ZpZXMgTG9ja1JlcXVlc3QpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWxlYXNlKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBUaGUgY29vcmRpbmF0b3IsIG9uIHRoZSBtYWluIHRocmVhZCBvbmx5LiAqL1xuY29uc3QgY29vcmRpbmF0b3IgPSBpc01haW5UaHJlYWQgPyBuZXcgTG9ja0Nvb3JkaW5hdG9yKCkgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhpcyB0aHJlYWQncyBjbGllbnQsIGNyZWF0ZWQgb24gZmlyc3QgdXNlLlxuICpcbiAqIExhenkgc28gaW1wb3J0aW5nIHRoaXMgbW9kdWxlIGNvc3RzIG5vdGhpbmcgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBzbyBhIHdvcmtlclxuICogdGhhdCBuZXZlciBsb2NrcyBhbnl0aGluZyBpcyBuZXZlciBmb3JjZWQgdG8gaGF2ZSBiZWVuIHN0YXJ0ZWQgdGhyb3VnaFxuICoge0BsaW5rIHByb2Nlc3NMb2NrV29ya2VyT3B0aW9uc30uIFRoZSBtYWluIHRocmVhZCB3aXJlcyBhIGNoYW5uZWwgdG8gaXRzIG93blxuICogY29vcmRpbmF0b3I7IGEgd29ya2VyIGFkb3B0cyB0aGUgcG9ydCBpdCB3YXMgaGFuZGVkLlxuICovXG5sZXQgY2xpZW50OiBMb2NrQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBsb2NrQ2xpZW50KCk6IExvY2tDbGllbnQge1xuICBpZiAoY2xpZW50KSByZXR1cm4gY2xpZW50O1xuICBpZiAoY29vcmRpbmF0b3IpIHtcbiAgICBjb25zdCB7IHBvcnQxLCBwb3J0MiB9ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgY29vcmRpbmF0b3IuYWRkUG9ydChwb3J0MSk7XG4gICAgY2xpZW50ID0gbmV3IExvY2tDbGllbnQocG9ydDIpO1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cbiAgY29uc3QgcG9ydCA9ICh3b3JrZXJEYXRhIGFzIExvY2tXb3JrZXJEYXRhIHwgdW5kZWZpbmVkKT8uW0xPQ0tfUE9SVF9LRVldO1xuICBpZiAoIXBvcnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlRoaXMgd29ya2VyIGhhcyBubyBwcm9jZXNzLWxvY2sgcG9ydC4gU3RhcnQgaXQgd2l0aCBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnMoKSBcIiArXG4gICAgICAgIFwiKG9yIGNhbGwgYXR0YWNoUHJvY2Vzc0xvY2sod29ya2VyKSBhbmQgYXdhaXQgcHJvY2Vzc0xvY2tBdHRhY2hlZCgpKS5cIixcbiAgICApO1xuICB9XG4gIGNsaWVudCA9IG5ldyBMb2NrQ2xpZW50KHBvcnQpO1xuICByZXR1cm4gY2xpZW50O1xufVxuXG4vKipcbiAqIFJ1biBgZm5gIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgbmFtZWQgYnkgYGtleWAsIHJlbGVhc2luZyBpdCB3aGVuIGBmbmBcbiAqIHNldHRsZXMuXG4gKlxuICogQ2FsbGVycyBzaGFyaW5nIGEga2V5IGFyZSBzZXJpYWxpemVkIGFjcm9zcyB0aGUgbWFpbiB0aHJlYWQgYW5kIGV2ZXJ5IHdvcmtlclxuICogc3RhcnRlZCB0aHJvdWdoIHtAbGluayBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnN9OyBkaXN0aW5jdCBrZXlzIG5ldmVyIGJsb2NrXG4gKiBlYWNoIG90aGVyLiBSZXR1cm5zIHdoYXRldmVyIGBmbmAgcmV0dXJucyBhbmQgcHJvcGFnYXRlcyB3aGF0IGl0IHRocm93cywgc28gaXRcbiAqIGRyb3BzIGludG8gYW4gZXhpc3RpbmcgZXhwcmVzc2lvbiB3aXRob3V0IHJlc3RydWN0dXJpbmcuXG4gKlxuICogYGtleWAgaXMgYW55IHZhbHVlIHdpdGggYSBzdGFibGUgaWRlbnRpdHkgLSBhIHN0cmluZywgYSBgW1wiaW52b2ljZVwiLCBpZF1gXG4gKiB0dXBsZSwgYSBjb25maWcgb2JqZWN0IC0gY2Fub25pY2FsaXplZCBieSBgb2JqZWN0LnRvU3RhYmxlS2V5YCwgdGhlIHNhbWUgcnVsZVxuICogYEBkYngtdG9vbHMvcG9zdGdyZXNgIHVzZXMgZm9yIGFkdmlzb3J5LWxvY2sgaWRzIGFuZCBjaGFubmVsIG5hbWVzLiBTdHJ1Y3R1cmVcbiAqIGlzIHBhcnQgb2YgdGhlIGlkZW50aXR5OiBgW1wiaW52b2ljZVwiLCA3XWAgYW5kIGBcImludm9pY2VfN1wiYCBhcmUgZGlmZmVyZW50XG4gKiBsb2Nrcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXdhaXQgd2l0aFByb2Nlc3NMb2NrKFtcImNhY2hlXCIsIG5hbWVdLCBhc3luYyAoKSA9PiB7XG4gKiAgIGlmICghKGF3YWl0IGV4aXN0cyhuYW1lKSkpIGF3YWl0IGJ1aWxkKG5hbWUpO1xuICogfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUHJvY2Vzc0xvY2s8VD4oa2V5OiB1bmtub3duLCBmbjogKCkgPT4gVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIGxvY2tDbGllbnQoKS5ydW4obG9ja0tleShrZXkpLCBmbik7XG59XG5cbi8qKiBDYW5vbmljYWwgc3RyaW5nIGlkZW50aXR5IGZvciBhIGxvY2sga2V5IChzZWUgYG9iamVjdC50b1N0YWJsZUtleWApLiAqL1xuZnVuY3Rpb24gbG9ja0tleShrZXk6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gb2JqZWN0XG4gICAgLnRvT25lT3JNYW55KGtleSlcbiAgICAubWFwKChwYXJ0KSA9PiBvYmplY3QudG9TdGFibGVLZXkocGFydCkpXG4gICAgLmpvaW4oXCJcXHUwMDAwXCIpO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29vcmRpbmF0b3IgcG9ydCB0byBhIGBXb3JrZXJgJ3Mgb3B0aW9ucyBzbyB0aGUgd29ya2VyIGNhbiBsb2NrXG4gKiBpbW1lZGlhdGVseSAtIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGJlZm9yZSBhbnkgbWVzc2FnZSBpcyBoYW5kbGVkLlxuICpcbiAqIFByZXNlcnZlcyB0aGUgY2FsbGVyJ3MgYHdvcmtlckRhdGFgIGFuZCBgdHJhbnNmZXJMaXN0YDsgdGhlIHBvcnQgaXNcbiAqIHRyYW5zZmVycmVkLCBhcyBgTWVzc2FnZVBvcnRgIGNhbm5vdCBiZSBjbG9uZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIG5ldyBXb3JrZXIodXJsLCBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnMoeyB3b3JrZXJEYXRhOiB7IHRlbmFudCB9IH0pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NMb2NrV29ya2VyT3B0aW9ucyhvcHRpb25zOiBXb3JrZXJPcHRpb25zID0ge30pOiBXb3JrZXJPcHRpb25zIHtcbiAgY29uc3QgcG9ydCA9IGNyZWF0ZUNvb3JkaW5hdG9yUG9ydChcInByb2Nlc3NMb2NrV29ya2VyT3B0aW9uc1wiKTtcbiAgY29uc3QgZXhpc3RpbmcgPSBvYmplY3QuaXNSZWNvcmQob3B0aW9ucy53b3JrZXJEYXRhKSA/IG9wdGlvbnMud29ya2VyRGF0YSA6IHt9O1xuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgd29ya2VyRGF0YTogeyAuLi5leGlzdGluZywgW0xPQ0tfUE9SVF9LRVldOiBwb3J0IH0sXG4gICAgdHJhbnNmZXJMaXN0OiBbLi4uKG9wdGlvbnMudHJhbnNmZXJMaXN0ID8/IFtdKSwgcG9ydF0sXG4gIH07XG59XG5cbi8qKlxuICogV2lyZSBhbiBBTFJFQURZLVJVTk5JTkcgd29ya2VyIGludG8gdGhlIGxvY2ssIGZvciBhIHdvcmtlciB0aGlzIGNvZGUgZGlkIG5vdFxuICogY29uc3RydWN0IChhIHBvb2wgZnJvbSBhIGxpYnJhcnksIHNheSkuXG4gKlxuICogUHJlZmVyIHtAbGluayBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnN9OiB0aGUgcG9ydCBhcnJpdmVzIHdpdGggYSBtZXNzYWdlLCBzb1xuICogdGhlIHdvcmtlciBjYW5ub3QgbG9jayBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBtdXN0IGF3YWl0XG4gKiB7QGxpbmsgcHJvY2Vzc0xvY2tBdHRhY2hlZH0gZmlyc3QuIFRoZSB3b3JrZXIgc2lkZSBuZWVkcyBubyBvdGhlciBjaGFuZ2UgLVxuICogYHdpdGhQcm9jZXNzTG9ja2Agd29ya3Mgbm9ybWFsbHkgb25jZSB0aGUgcG9ydCBsYW5kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaFByb2Nlc3NMb2NrKHdvcmtlcjogV29ya2VyKTogdm9pZCB7XG4gIGNvbnN0IHBvcnQgPSBjcmVhdGVDb29yZGluYXRvclBvcnQoXCJhdHRhY2hQcm9jZXNzTG9ja1wiKTtcbiAgd29ya2VyLnBvc3RNZXNzYWdlKHsgdHlwZTogQVRUQUNIX01FU1NBR0VfVFlQRSwgcG9ydCB9IHNhdGlzZmllcyBBdHRhY2hNZXNzYWdlLCBbcG9ydF0pO1xufVxuXG4vKiogQSBmcmVzaCBjb29yZGluYXRvci1zaWRlIGNoYW5uZWwsIG9yIGEgY2xlYXIgZXJyb3Igb2ZmIHRoZSBtYWluIHRocmVhZC4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvb3JkaW5hdG9yUG9ydChjYWxsZXI6IHN0cmluZyk6IE1lc3NhZ2VQb3J0IHtcbiAgaWYgKCFjb29yZGluYXRvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtjYWxsZXJ9KCkgbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWRgKTtcbiAgfVxuICBjb25zdCB7IHBvcnQxLCBwb3J0MiB9ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNvb3JkaW5hdG9yLmFkZFBvcnQocG9ydDEpO1xuICByZXR1cm4gcG9ydDI7XG59XG5cbi8qKlxuICogSW4gYSB3b3JrZXIsIHJlc29sdmUgb25jZSB0aGUge0BsaW5rIGF0dGFjaFByb2Nlc3NMb2NrfSBwb3J0IGhhcyBhcnJpdmVkLlxuICpcbiAqIE9ubHkgbmVlZGVkIG9uIHRoZSBhdHRhY2ggcGF0aCwgYW5kIHNhZmUgdG8gYXdhaXQgcmVnYXJkbGVzczogaXQgcmV0dXJuc1xuICogaW1tZWRpYXRlbHkgd2hlbiB0aGUgd29ya2VyIGFscmVhZHkgaGFzIGEgcG9ydCAodGhlXG4gKiB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfSBjYXNlKSBvciB3aGVuIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQsIHNvXG4gKiBzaGFyZWQgd29ya2VyIGNvZGUgZG9lcyBub3QgYnJhbmNoIG9uIGhvdyBpdCB3YXMgc3RhcnRlZC5cbiAqXG4gKiBBIGBwYXJlbnRQb3J0YCBsaXN0ZW5lciBrZWVwcyB0aGUgd29ya2VyIGFsaXZlLCB3aGljaCBpcyBDT1JSRUNUIGhlcmUgYW5kXG4gKiBkZWxpYmVyYXRlbHkgbm90IHVucmVmJ2Q6IHRoaXMgcHJvbWlzZSBpcyBwZW5kaW5nIHdvcmssIGFuZCBhIHdvcmtlciBhbGxvd2VkIHRvXG4gKiBleGl0IHdoaWxlIGF3YWl0aW5nIGl0cyBwb3J0IHdvdWxkIGRpZSBzaWxlbnRseSBpbnN0ZWFkIG9mIGxvY2tpbmcuIFRoZVxuICogbGlzdGVuZXIgaXMgcmVtb3ZlZCBhcyBzb29uIGFzIHRoZSBwb3J0IGxhbmRzLCBzbyB0aGUgd29ya2VyIGlzIGZyZWUgdG8gZXhpdFxuICogYWdhaW4gdGhlIG1vbWVudCB0aGUgd2FpdCBpcyBvdmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0xvY2tBdHRhY2hlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGlzTWFpblRocmVhZCB8fCBjbGllbnQgfHwgKHdvcmtlckRhdGEgYXMgTG9ja1dvcmtlckRhdGEgfCB1bmRlZmluZWQpPy5bTE9DS19QT1JUX0tFWV0pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgY29uc3QgcG9ydCA9IHBhcmVudFBvcnQ7XG4gIGlmICghcG9ydCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJwcm9jZXNzTG9ja0F0dGFjaGVkKCkgbXVzdCBiZSBjYWxsZWQgZnJvbSBhIHdvcmtlciB0aHJlYWRcIikpO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uTWVzc2FnZSA9IChtZXNzYWdlOiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIW9iamVjdC5pc1JlY29yZChtZXNzYWdlKSB8fCBtZXNzYWdlLnR5cGUgIT09IEFUVEFDSF9NRVNTQUdFX1RZUEUpIHJldHVybjtcbiAgICAgIHBvcnQub2ZmKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UpO1xuICAgICAgY2xpZW50ID0gbmV3IExvY2tDbGllbnQoKG1lc3NhZ2UgYXMgdW5rbm93biBhcyBBdHRhY2hNZXNzYWdlKS5wb3J0KTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHBvcnQub24oXCJtZXNzYWdlXCIsIG9uTWVzc2FnZSk7XG4gIH0pO1xufVxuIl19
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2Nlc3MtbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsVUFBVSxHQUlYLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbEU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxhQUFhLEdBQUcsMkJBQTJCLENBQUM7QUFDbEQsTUFBTSxtQkFBbUIsR0FBRyw2QkFBNkIsQ0FBQztBQTBDMUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxlQUFlO0lBQ0YsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO0lBRXZELDhEQUE4RDtJQUM5RCxPQUFPLENBQUMsSUFBaUI7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFvQixFQUFFLEVBQUU7WUFDMUMsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssU0FBUztvQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbkQsTUFBTTtnQkFDUixLQUFLLFNBQVM7b0JBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDN0MsTUFBTTtnQkFDUjtvQkFDRSxNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsNkVBQTZFO1FBQzdFLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FB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QUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLG1CQUFtQjtnQkFBRSxPQUFPO1lBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBRSxPQUFvQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBLZXllZCBtdXR1YWwgZXhjbHVzaW9uIGFjcm9zcyB0aGUgbWFpbiB0aHJlYWQgYW5kIGl0cyB3b3JrZXIgdGhyZWFkcy5cbiAqXG4gKiB7QGxpbmsgd2l0aFByb2Nlc3NMb2NrfSBzZXJpYWxpemVzIGNhbGxiYWNrcyB0aGF0IHNoYXJlIGEga2V5OiBvbmUgcnVucyBhdCBhXG4gKiB0aW1lLCB0aGUgcmVzdCBxdWV1ZSBpbiBhcnJpdmFsIG9yZGVyLCBhbmQgZGlmZmVyZW50IGtleXMgcHJvY2VlZFxuICogY29uY3VycmVudGx5LiBVbmxpa2UgYSBwbGFpbiBpbi1tb2R1bGUgYFByb21pc2VgIGNoYWluLCB0aGUgcXVldWUgaXMgc2hhcmVkIGJ5XG4gKiBldmVyeSB0aHJlYWQgd2lyZWQgdXAgdGhyb3VnaCB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfSwgc28gYSB3b3JrZXJcbiAqIHBvb2wgY2Fubm90IHJ1biB0d28gY2FsbGJhY2tzIGZvciB0aGUgc2FtZSBrZXkgYXQgb25jZS5cbiAqXG4gKiBUaGUgbmFtZSBzYXlzIGBwcm9jZXNzYDogdGhpcyBjb29yZGluYXRlcyB0aGUgVEhSRUFEUyBvZiBvbmUgTm9kZSBwcm9jZXNzLiBJdFxuICogaXMgbm90IGNyb3NzLXByb2Nlc3MgYW5kIG5vdCBjcm9zcy1ob3N0IC0gYSBzZWNvbmQgYG5vZGVgIGludm9jYXRpb24sIG9yIGFcbiAqIHNlY29uZCBhcHAgcmVwbGljYSwgaGFzIGl0cyBvd24gY29vcmRpbmF0b3IgYW5kIHNoYXJlcyBub3RoaW5nLiBXaGVuIHRoZSBzY29wZVxuICogaXMgYSBkZXBsb3ltZW50IHJhdGhlciB0aGFuIGEgcHJvY2VzcywgdXNlXG4gKiBgQGRieC10b29scy9wb3N0Z3Jlc2AncyBgd2l0aEFkdmlzb3J5TG9ja2AsIHdoaWNoIHB1dHMgdGhlIGFyYml0ZXIgaW5cbiAqIFBvc3RncmVTUUwgd2hlcmUgZXZlcnkgcmVwbGljYSBjYW4gc2VlIGl0LlxuICpcbiAqIFRoZSBtYWluIHRocmVhZCBvd25zIHRoZSBvbmx5IGNvb3JkaW5hdG9yLiBFYWNoIHBhcnRpY2lwYXRpbmcgdGhyZWFkIGdldHMgb25lXG4gKiBgTWVzc2FnZVBvcnRgIHRvIGl0LCBhbmQgYSBsb2NrIGlzIGdyYW50ZWQgYnkgYSBtZXNzYWdlIGJhY2sgb3ZlciB0aGF0IHBvcnQuXG4gKiBDb25zZXF1ZW50bHk6XG4gKlxuICogICAtIHRoZSBsb2NrIGlzIEFEVklTT1JZLCBsaWtlIFBvc3RncmVzIGFkdmlzb3J5IGxvY2tzIC0gaXQgcHJvdGVjdHMgYVxuICogICAgIGNyaXRpY2FsIHNlY3Rpb24gb25seSBpbnNvZmFyIGFzIGV2ZXJ5IHdyaXRlciB0YWtlcyB0aGUgc2FtZSBrZXk7XG4gKiAgIC0gZmFpcm5lc3MgaXMgRklGTyBwZXIga2V5LCBzaW5jZSB0aGUgY29vcmRpbmF0b3IgcXVldWVzIHdhaXRlcnMgaW4gdGhlXG4gKiAgICAgb3JkZXIgdGhlaXIgcmVxdWVzdHMgYXJyaXZlO1xuICogICAtIGEgdGhyZWFkIHRoYXQgZGllcyB3aGlsZSBob2xkaW5nIGEgbG9jayByZWxlYXNlcyBpdCwgYmVjYXVzZSBpdHMgcG9ydFxuICogICAgIGNsb3NpbmcgaXMgd2hhdCBoYW5kcyB0aGUga2V5IHRvIHRoZSBuZXh0IHdhaXRlciAoc2VlXG4gKiAgICAge0BsaW5rIExvY2tDb29yZGluYXRvci5yZW1vdmVQb3J0fSkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGlzTWFpblRocmVhZCxcbiAgTWVzc2FnZUNoYW5uZWwsXG4gIHBhcmVudFBvcnQsXG4gIHdvcmtlckRhdGEsXG4gIHR5cGUgTWVzc2FnZVBvcnQsXG4gIHR5cGUgV29ya2VyLFxuICB0eXBlIFdvcmtlck9wdGlvbnMsXG59IGZyb20gXCJub2RlOndvcmtlcl90aHJlYWRzXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBoYXNoLCBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG4vKipcbiAqIGB3b3JrZXJEYXRhYCBzbG90IGNhcnJ5aW5nIHRoZSBjb29yZGluYXRvciBwb3J0IGludG8gYSB3b3JrZXIsIGFuZCB0aGVcbiAqIGBwYXJlbnRQb3J0YCBtZXNzYWdlIGB0eXBlYCBmb3IgdGhlIGxhdGUge0BsaW5rIGF0dGFjaFByb2Nlc3NMb2NrfSBoYW5kc2hha2UuXG4gKiBOYW1lc3BhY2VkIGJlY2F1c2UgYm90aCB0cmF2ZWwgdGhyb3VnaCBjaGFubmVscyBhbiBhcHBsaWNhdGlvbiBhbHNvIHVzZXM6XG4gKiBgd29ya2VyRGF0YWAgaXMgdGhlIGNhbGxlcidzIG93biBvYmplY3QsIGFuZCBgcGFyZW50UG9ydGAgY2FycmllcyB0aGUgY2FsbGVyJ3NcbiAqIG93biBtZXNzYWdlcy5cbiAqL1xuY29uc3QgTE9DS19QT1JUX0tFWSA9IFwiX19kYnhUb29sc1Byb2Nlc3NMb2NrUG9ydFwiO1xuY29uc3QgQVRUQUNIX01FU1NBR0VfVFlQRSA9IFwiX19kYnhUb29sc1Byb2Nlc3NMb2NrQXR0YWNoXCI7XG5cbi8qKiBTZW50IGJ5IGEgY2xpZW50IHRvIHRoZSBjb29yZGluYXRvci4gKi9cbnR5cGUgTG9ja1JlcXVlc3QgPVxuICB8IHsgdHlwZTogXCJhY3F1aXJlXCI7IHJlcXVlc3RJZDogc3RyaW5nOyBrZXk6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInJlbGVhc2VcIjsgcmVxdWVzdElkOiBzdHJpbmc7IGtleTogc3RyaW5nIH07XG5cbi8qKiBTZW50IGJ5IHRoZSBjb29yZGluYXRvciB0byB0aGUgY2xpZW50IHRoYXQgbm93IG93bnMgdGhlIGtleS4gKi9cbnR5cGUgTG9ja1Jlc3BvbnNlID0geyB0eXBlOiBcImdyYW50ZWRcIjsgcmVxdWVzdElkOiBzdHJpbmcgfTtcblxudHlwZSBMb2NrTWVzc2FnZSA9IExvY2tSZXF1ZXN0IHwgTG9ja1Jlc3BvbnNlO1xuXG4vKiogVGhlIGBwYXJlbnRQb3J0YCBlbnZlbG9wZSB0aGF0IGhhbmRzIGEgbGF0ZS1hdHRhY2hlZCB3b3JrZXIgaXRzIHBvcnQuICovXG5pbnRlcmZhY2UgQXR0YWNoTWVzc2FnZSB7XG4gIHR5cGU6IHR5cGVvZiBBVFRBQ0hfTUVTU0FHRV9UWVBFO1xuICBwb3J0OiBNZXNzYWdlUG9ydDtcbn1cblxuLyoqIE9uZSBvdXRzdGFuZGluZyBvciBncmFudGVkIGFjcXVpc2l0aW9uLiAqL1xuaW50ZXJmYWNlIExvY2tXYWl0ZXIge1xuICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgcG9ydDogTWVzc2FnZVBvcnQ7XG59XG5cbi8qKiBTaGFwZSBvZiB0aGUgYHdvcmtlckRhdGFgIHNsaWNlIHRoaXMgbW9kdWxlIHJlYWRzLiAqL1xuaW50ZXJmYWNlIExvY2tXb3JrZXJEYXRhIHtcbiAgW0xPQ0tfUE9SVF9LRVldPzogTWVzc2FnZVBvcnQ7XG59XG5cbi8qKlxuICogQSBrZXkncyBvd25lciBwbHVzIGl0cyBGSUZPIHF1ZXVlIG9mIHdhaXRlcnMuXG4gKlxuICogT3duZXIgYW5kIHF1ZXVlIGxpdmUgaW4gT05FIG1hcCBlbnRyeSByYXRoZXIgdGhhbiB0d28gcGFyYWxsZWwgbWFwcyBzbyBhIGtleVxuICogY2Fubm90IGVuZCB1cCBoYWxmLXByZXNlbnQgLSBhIHF1ZXVlIHdob3NlIG93bmVyIG1hcCBlbnRyeSB3YXMgYWxyZWFkeSBkZWxldGVkXG4gKiB3b3VsZCBzdHJhbmQgaXRzIHdhaXRlcnMgZm9yZXZlciwgYW5kIHRoZSBlbnRyeSBpcyBkcm9wcGVkIG9ubHkgd2hlbiB0aGUga2V5XG4gKiBpcyBib3RoIHVub3duZWQgYW5kIHVud2FudGVkLlxuICovXG5pbnRlcmZhY2UgTG9ja1N0YXRlIHtcbiAgb3duZXI6IExvY2tXYWl0ZXI7XG4gIHF1ZXVlOiBMb2NrV2FpdGVyW107XG59XG5cbi8qKlxuICogQXJiaXRlciBmb3IgZXZlcnkga2V5LCBsaXZpbmcgb24gdGhlIG1haW4gdGhyZWFkLlxuICpcbiAqIEhvbGRzIG5vIHRpbWVycyBhbmQgbm8gaGFuZGxlcyBvZiBpdHMgb3duOiBhIHBvcnQgaXMgdW5yZWYnZCBieSBpdHMgY2xpZW50XG4gKiB3aGlsZSBpZGxlIChzZWUge0BsaW5rIExvY2tDbGllbnR9KSwgc28gYW4gaWRsZSBjb29yZGluYXRvciBuZXZlciBrZWVwcyB0aGVcbiAqIHByb2Nlc3MgYWxpdmUuXG4gKi9cbmNsYXNzIExvY2tDb29yZGluYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVzID0gbmV3IE1hcDxzdHJpbmcsIExvY2tTdGF0ZT4oKTtcblxuICAvKiogU2VydmUgb25lIGNsaWVudC4gQ2FsbGVkIG9uY2UgcGVyIHBhcnRpY2lwYXRpbmcgdGhyZWFkLiAqL1xuICBhZGRQb3J0KHBvcnQ6IE1lc3NhZ2VQb3J0KTogdm9pZCB7XG4gICAgcG9ydC5vbihcIm1lc3NhZ2VcIiwgKG1lc3NhZ2U6IExvY2tNZXNzYWdlKSA9PiB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICBjYXNlIFwiYWNxdWlyZVwiOlxuICAgICAgICAgIHRoaXMuYWNxdWlyZShtZXNzYWdlLmtleSwgbWVzc2FnZS5yZXF1ZXN0SWQsIHBvcnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmVsZWFzZVwiOlxuICAgICAgICAgIHRoaXMucmVsZWFzZShtZXNzYWdlLmtleSwgbWVzc2FnZS5yZXF1ZXN0SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEEgY2xvc2VkIHBvcnQgbWVhbnMgaXRzIHRocmVhZCBleGl0ZWQgb3Igd2FzIHRlcm1pbmF0ZWQuIFJlbGVhc2luZyBoZXJlIGlzXG4gICAgLy8gd2hhdCBrZWVwcyBvbmUgY3Jhc2hlZCB3b3JrZXIgZnJvbSB3ZWRnaW5nIGEga2V5IGZvciB0aGUgcHJvY2VzcyBsaWZldGltZS5cbiAgICBwb3J0Lm9uKFwiY2xvc2VcIiwgKCkgPT4gdGhpcy5yZW1vdmVQb3J0KHBvcnQpKTtcbiAgICAvLyBUaGUgY29vcmRpbmF0b3Igc2lkZSBzdGF5cyB1bnJlZidkIGZvciBpdHMgd2hvbGUgbGlmZS4gSXQgaXMgYSBwdXJlXG4gICAgLy8gcmVzcG9uZGVyIC0gaXQgbmV2ZXIgaGFzIGJ1c2luZXNzIG9mIGl0cyBvd24gcGVuZGluZyAtIHNvIGtlZXBpbmcgdGhlXG4gICAgLy8gZXZlbnQgbG9vcCBhbGl2ZSBmb3IgaXQgd291bGQgbWVhbiBhIHByb2Nlc3MgdGhhdCB1c2VkIGEgbG9jayBvbmNlIGNvdWxkXG4gICAgLy8gbmV2ZXIgZXhpdC4gQSByZXF1ZXN0IGFsd2F5cyBhcnJpdmVzIGZyb20gYSBjbGllbnQgdGhhdCBoYXMgcmVmJ2QgSVRTXG4gICAgLy8gcG9ydCwgc28gdGhlIGxvb3AgaXMgYXdha2Ugd2hlbmV2ZXIgdGhlcmUgaXMgYWN0dWFsbHkgc29tZXRoaW5nIHRvIHNlcnZlLlxuICAgIHBvcnQudW5yZWYoKTtcbiAgICBwb3J0LnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFjcXVpcmUoa2V5OiBzdHJpbmcsIHJlcXVlc3RJZDogc3RyaW5nLCBwb3J0OiBNZXNzYWdlUG9ydCk6IHZvaWQge1xuICAgIGNvbnN0IHdhaXRlcjogTG9ja1dhaXRlciA9IHsgcmVxdWVzdElkLCBwb3J0IH07XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlcy5nZXQoa2V5KTtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICB0aGlzLnN0YXRlcy5zZXQoa2V5LCB7IG93bmVyOiB3YWl0ZXIsIHF1ZXVlOiBbXSB9KTtcbiAgICAgIGdyYW50KHdhaXRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnF1ZXVlLnB1c2god2FpdGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kIHRoZSBrZXkgb24sIGlnbm9yaW5nIGEgcmVsZWFzZSBmcm9tIGFueW9uZSBidXQgdGhlIGN1cnJlbnQgb3duZXIuXG4gICAqXG4gICAqIEEgc3RhbGUgcmVsZWFzZSBpcyBleHBlY3RlZCwgbm90IGRlZmVuc2l2ZSBjb2Rpbmc6IGFuIGFib3J0ZWQgYWNxdWlzaXRpb25cbiAgICogc2VuZHMgb25lIGZvciBhIHJlcXVlc3QgdGhhdCBuZXZlciBvd25lZCB0aGUga2V5LCBhbmQgaG9ub3VyaW5nIGl0IHdvdWxkXG4gICAqIHJldm9rZSB0aGUgbG9jayBmcm9tIHdob2V2ZXIgaG9sZHMgaXQgbm93LlxuICAgKi9cbiAgcHJpdmF0ZSByZWxlYXNlKGtleTogc3RyaW5nLCByZXF1ZXN0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKHN0YXRlPy5vd25lci5yZXF1ZXN0SWQgIT09IHJlcXVlc3RJZCkgcmV0dXJuO1xuICAgIHRoaXMuZ3JhbnROZXh0KGtleSwgc3RhdGUpO1xuICB9XG5cbiAgLyoqIFByb21vdGUgdGhlIG5leHQgd2FpdGVyLCBvciBkcm9wIHRoZSBrZXkgd2hlbiBub2JvZHkgd2FudHMgaXQuICovXG4gIHByaXZhdGUgZ3JhbnROZXh0KGtleTogc3RyaW5nLCBzdGF0ZTogTG9ja1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHN0YXRlLnF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKCFuZXh0KSB7XG4gICAgICB0aGlzLnN0YXRlcy5kZWxldGUoa2V5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUub3duZXIgPSBuZXh0O1xuICAgIGdyYW50KG5leHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3AgYSBkZWFkIHRocmVhZCBmcm9tIGV2ZXJ5IGtleTogcmVsZWFzZSB0aGUgb25lcyBpdCBvd25lZCBhbmQgcmVtb3ZlIGl0XG4gICAqIGZyb20gdGhlIHF1ZXVlcyBpdCB3YXMgd2FpdGluZyBpbi5cbiAgICpcbiAgICogUXVldWUgcmVtb3ZhbCBtdXN0IGhhcHBlbiBGSVJTVC4gQSB0aHJlYWQgY2FuIGFwcGVhciBhcyBib3RoIHRoZSBvd25lciBvZlxuICAgKiBvbmUga2V5IGFuZCBhIHdhaXRlciBmb3IgYW5vdGhlciwgYW5kIHByb21vdGluZyBpdCBvdXQgb2YgYSBxdWV1ZSBpdCBjYW4gbm9cbiAgICogbG9uZ2VyIGFuc3dlciBmb3Igd291bGQgZ3JhbnQgYSBsb2NrIHRvIGEgY2xvc2VkIHBvcnQgLSBzdGFsbGluZyB0aGF0IGtleVxuICAgKiB1bnRpbCB0aGUgcHJvY2VzcyBlbmRzLlxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVQb3J0KHBvcnQ6IE1lc3NhZ2VQb3J0KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdGF0ZSBvZiB0aGlzLnN0YXRlcy52YWx1ZXMoKSkge1xuICAgICAgaWYgKHN0YXRlLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhdGUucXVldWUgPSBzdGF0ZS5xdWV1ZS5maWx0ZXIoKHdhaXRlcikgPT4gd2FpdGVyLnBvcnQgIT09IHBvcnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHN0YXRlXSBvZiBbLi4udGhpcy5zdGF0ZXNdKSB7XG4gICAgICBpZiAoc3RhdGUub3duZXIucG9ydCA9PT0gcG9ydCkgdGhpcy5ncmFudE5leHQoa2V5LCBzdGF0ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBOb3RpZnkgYSB3YWl0ZXIgdGhhdCBpdCBub3cgb3ducyBpdHMga2V5LiAqL1xuZnVuY3Rpb24gZ3JhbnQod2FpdGVyOiBMb2NrV2FpdGVyKTogdm9pZCB7XG4gIHdhaXRlci5wb3J0LnBvc3RNZXNzYWdlKHsgdHlwZTogXCJncmFudGVkXCIsIHJlcXVlc3RJZDogd2FpdGVyLnJlcXVlc3RJZCB9IHNhdGlzZmllcyBMb2NrUmVzcG9uc2UpO1xufVxuXG4vKipcbiAqIEEgdGhyZWFkJ3MgZW5kIG9mIHRoZSBjb252ZXJzYXRpb246IHNlbmRzIHJlcXVlc3RzLCBhd2FpdHMgZ3JhbnRzLCBhbmQgcnVuc1xuICogY2FsbGJhY2tzLlxuICpcbiAqIE93bnMgdGhlIGV2ZW50LWxvb3AgYm9va2tlZXBpbmcuIFRoZSBwb3J0IGlzIHVucmVmJ2Qgd2hpbGUgaWRsZSBzbyBob2xkaW5nIGFcbiAqIGxvY2sgbW9kdWxlIG5ldmVyIGJsb2NrcyBwcm9jZXNzIGV4aXQsIGFuZCByZWYnZCBleGFjdGx5IHdoaWxlIHRoaXMgdGhyZWFkIGhhc1xuICogYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCBvciBhbiB1bnJlbGVhc2VkIGxvY2sgLSBvdGhlcndpc2UgTm9kZSB3b3VsZCBjb25zaWRlclxuICogaXRzZWxmIG91dCBvZiB3b3JrIGFuZCBleGl0IG1pZC1jcml0aWNhbC1zZWN0aW9uLCBkcm9wcGluZyB0aGUgZ3JhbnQgdGhhdCB3YXNcbiAqIGFscmVhZHkgb24gaXRzIHdheS5cbiAqL1xuY2xhc3MgTG9ja0NsaWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZyA9IG5ldyBNYXA8c3RyaW5nLCAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZD4oKTtcbiAgLyoqIFJlcXVlc3RzICsgaGVsZCBsb2Nrcy4gVGhlIHBvcnQgaXMgcmVmJ2Qgd2hpbGUgdGhpcyBpcyBhYm92ZSB6ZXJvLiAqL1xuICBwcml2YXRlIGFjdGl2ZSA9IDA7XG4gIHByaXZhdGUgY2xvc2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwb3J0OiBNZXNzYWdlUG9ydCkge1xuICAgIHBvcnQub24oXCJtZXNzYWdlXCIsIChtZXNzYWdlOiBMb2NrTWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2UudHlwZSAhPT0gXCJncmFudGVkXCIpIHJldHVybjtcbiAgICAgIHRoaXMuc2V0dGxlKG1lc3NhZ2UucmVxdWVzdElkKTtcbiAgICB9KTtcbiAgICBwb3J0Lm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgLy8gVGhlIGNvb3JkaW5hdG9yIGlzIGdvbmUgKG1haW4gdGhyZWFkIGV4aXRpbmcsIG9yIHRoaXMgd29ya2VyIGJlaW5nIHRvcm5cbiAgICAgIC8vIGRvd24pLiBGYWlsIHRoZSB3YWl0ZXJzIHJhdGhlciB0aGFuIGhhbmcgdGhlbTogYSBjYWxsZXIgYmxvY2tlZCBvbiBhXG4gICAgICAvLyBsb2NrIHRoYXQgY2FuIG5ldmVyIGJlIGdyYW50ZWQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIGRlYWRsb2NrLlxuICAgICAgY29uc3QgY2xvc2VFcnJvciA9IG5ldyBFcnJvcihcIlByb2Nlc3MgbG9jayBwb3J0IGNsb3NlZCBiZWZvcmUgdGhlIGxvY2sgd2FzIGdyYW50ZWRcIik7XG4gICAgICBmb3IgKGNvbnN0IHNldHRsZSBvZiBbLi4udGhpcy5wZW5kaW5nLnZhbHVlcygpXSkgc2V0dGxlKGNsb3NlRXJyb3IpO1xuICAgIH0pO1xuICAgIHBvcnQudW5yZWYoKTtcbiAgICBwb3J0LnN0YXJ0KCk7XG4gIH1cblxuICAvKiogUmVzb2x2ZSBvciByZWplY3Qgb25lIHBlbmRpbmcgcmVxdWVzdCBhbmQgZHJvcCBpdHMgcmVmLiAqL1xuICBwcml2YXRlIHNldHRsZShyZXF1ZXN0SWQ6IHN0cmluZywgZmFpbHVyZT86IEVycm9yKTogdm9pZCB7XG4gICAgY29uc3Qgc2V0dGxlID0gdGhpcy5wZW5kaW5nLmdldChyZXF1ZXN0SWQpO1xuICAgIGlmICghc2V0dGxlKSByZXR1cm47XG4gICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgIHNldHRsZShmYWlsdXJlKTtcbiAgfVxuXG4gIC8qKiBSZWYgdGhlIHBvcnQgZm9yIHRoZSBmaXJzdCB1bml0IG9mIG91dHN0YW5kaW5nIHdvcmsuICovXG4gIHByaXZhdGUgcmV0YWluKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZSsrID09PSAwKSB0aGlzLnBvcnQucmVmKCk7XG4gIH1cblxuICAvKiogVW5yZWYgb25jZSBub3RoaW5nIGlzIG91dHN0YW5kaW5nLCBzbyB0aGUgdGhyZWFkIGNhbiBleGl0LiAqL1xuICBwcml2YXRlIHJlbGVhc2UoKTogdm9pZCB7XG4gICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIHRoaXMucG9ydC51bnJlZigpO1xuICB9XG5cbiAgYXN5bmMgcnVuPFQ+KGtleTogc3RyaW5nLCBmbjogKCkgPT4gVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb2Nlc3MgbG9jayBwb3J0IGlzIGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdElkID0gaGFzaC5pZCgpO1xuICAgIHRoaXMucmV0YWluKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5wZW5kaW5nLnNldChyZXF1ZXN0SWQsIChmYWlsdXJlKSA9PiAoZmFpbHVyZSA/IHJlamVjdChmYWlsdXJlKSA6IHJlc29sdmUoKSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7IHR5cGU6IFwiYWNxdWlyZVwiLCByZXF1ZXN0SWQsIGtleSB9IHNhdGlzZmllcyBMb2NrUmVxdWVzdCk7XG4gICAgICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgICAgICAgIHJlamVjdChlcnJvclV0aWxzLnRvRXJyb3IoY2F1c2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIC8vIE5ldmVyIGdyYW50ZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVsZWFzZSAtIGp1c3QgZHJvcCB0aGUgcmVmLlxuICAgICAgdGhpcy5yZWxlYXNlKCk7XG4gICAgICB0aHJvdyBjYXVzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBQb3N0IGJlZm9yZSB1bnJlZidpbmc6IHRoZSByZWxlYXNlIG11c3QgYmUgaW4gZmxpZ2h0IHdoaWxlIHRoZSBwb3J0IGlzXG4gICAgICAvLyBzdGlsbCBob2xkaW5nIHRoZSBsb29wIG9wZW4sIG9yIHRoZSBuZXh0IHdhaXRlciBpcyBzdHJhbmRlZC5cbiAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHsgdHlwZTogXCJyZWxlYXNlXCIsIHJlcXVlc3RJZCwga2V5IH0gc2F0aXNmaWVzIExvY2tSZXF1ZXN0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogVGhlIGNvb3JkaW5hdG9yLCBvbiB0aGUgbWFpbiB0aHJlYWQgb25seS4gKi9cbmNvbnN0IGNvb3JkaW5hdG9yID0gaXNNYWluVGhyZWFkID8gbmV3IExvY2tDb29yZGluYXRvcigpIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoaXMgdGhyZWFkJ3MgY2xpZW50LCBjcmVhdGVkIG9uIGZpcnN0IHVzZS5cbiAqXG4gKiBMYXp5IHNvIGltcG9ydGluZyB0aGlzIG1vZHVsZSBjb3N0cyBub3RoaW5nIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgc28gYSB3b3JrZXJcbiAqIHRoYXQgbmV2ZXIgbG9ja3MgYW55dGhpbmcgaXMgbmV2ZXIgZm9yY2VkIHRvIGhhdmUgYmVlbiBzdGFydGVkIHRocm91Z2hcbiAqIHtAbGluayBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnN9LiBUaGUgbWFpbiB0aHJlYWQgd2lyZXMgYSBjaGFubmVsIHRvIGl0cyBvd25cbiAqIGNvb3JkaW5hdG9yOyBhIHdvcmtlciBhZG9wdHMgdGhlIHBvcnQgaXQgd2FzIGhhbmRlZC5cbiAqL1xubGV0IGNsaWVudDogTG9ja0NsaWVudCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gbG9ja0NsaWVudCgpOiBMb2NrQ2xpZW50IHtcbiAgaWYgKGNsaWVudCkgcmV0dXJuIGNsaWVudDtcbiAgaWYgKGNvb3JkaW5hdG9yKSB7XG4gICAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNvb3JkaW5hdG9yLmFkZFBvcnQocG9ydDEpO1xuICAgIGNsaWVudCA9IG5ldyBMb2NrQ2xpZW50KHBvcnQyKTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG4gIGNvbnN0IHBvcnQgPSAod29ya2VyRGF0YSBhcyBMb2NrV29ya2VyRGF0YSB8IHVuZGVmaW5lZCk/LltMT0NLX1BPUlRfS0VZXTtcbiAgaWYgKCFwb3J0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIHdvcmtlciBoYXMgbm8gcHJvY2Vzcy1sb2NrIHBvcnQuIFN0YXJ0IGl0IHdpdGggcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zKCkgXCIgK1xuICAgICAgICBcIihvciBjYWxsIGF0dGFjaFByb2Nlc3NMb2NrKHdvcmtlcikgYW5kIGF3YWl0IHByb2Nlc3NMb2NrQXR0YWNoZWQoKSkuXCIsXG4gICAgKTtcbiAgfVxuICBjbGllbnQgPSBuZXcgTG9ja0NsaWVudChwb3J0KTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIG5hbWVkIGJ5IGBrZXlgLCByZWxlYXNpbmcgaXQgd2hlbiBgZm5gXG4gKiBzZXR0bGVzLlxuICpcbiAqIENhbGxlcnMgc2hhcmluZyBhIGtleSBhcmUgc2VyaWFsaXplZCBhY3Jvc3MgdGhlIG1haW4gdGhyZWFkIGFuZCBldmVyeSB3b3JrZXJcbiAqIHN0YXJ0ZWQgdGhyb3VnaCB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfTsgZGlzdGluY3Qga2V5cyBuZXZlciBibG9ja1xuICogZWFjaCBvdGhlci4gUmV0dXJucyB3aGF0ZXZlciBgZm5gIHJldHVybnMgYW5kIHByb3BhZ2F0ZXMgd2hhdCBpdCB0aHJvd3MsIHNvIGl0XG4gKiBkcm9wcyBpbnRvIGFuIGV4aXN0aW5nIGV4cHJlc3Npb24gd2l0aG91dCByZXN0cnVjdHVyaW5nLlxuICpcbiAqIGBrZXlgIGlzIGFueSB2YWx1ZSB3aXRoIGEgc3RhYmxlIGlkZW50aXR5IC0gYSBzdHJpbmcsIGEgYFtcImludm9pY2VcIiwgaWRdYFxuICogdHVwbGUsIGEgY29uZmlnIG9iamVjdCAtIGNhbm9uaWNhbGl6ZWQgYnkgYG9iamVjdC50b1N0YWJsZUtleWAsIHRoZSBzYW1lIHJ1bGVcbiAqIGBAZGJ4LXRvb2xzL3Bvc3RncmVzYCB1c2VzIGZvciBhZHZpc29yeS1sb2NrIGlkcyBhbmQgY2hhbm5lbCBuYW1lcy4gU3RydWN0dXJlXG4gKiBpcyBwYXJ0IG9mIHRoZSBpZGVudGl0eTogYFtcImludm9pY2VcIiwgN11gIGFuZCBgXCJpbnZvaWNlXzdcImAgYXJlIGRpZmZlcmVudFxuICogbG9ja3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHdpdGhQcm9jZXNzTG9jayhbXCJjYWNoZVwiLCBuYW1lXSwgYXN5bmMgKCkgPT4ge1xuICogICBpZiAoIShhd2FpdCBleGlzdHMobmFtZSkpKSBhd2FpdCBidWlsZChuYW1lKTtcbiAqIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb2Nlc3NMb2NrPFQ+KGtleTogdW5rbm93biwgZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBsb2NrQ2xpZW50KCkucnVuKGxvY2tLZXkoa2V5KSwgZm4pO1xufVxuXG4vKiogQ2Fub25pY2FsIHN0cmluZyBpZGVudGl0eSBmb3IgYSBsb2NrIGtleSAoc2VlIGBvYmplY3QudG9TdGFibGVLZXlgKS4gKi9cbmZ1bmN0aW9uIGxvY2tLZXkoa2V5OiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIG9iamVjdFxuICAgIC50b09uZU9yTWFueShrZXkpXG4gICAgLm1hcCgocGFydCkgPT4gb2JqZWN0LnRvU3RhYmxlS2V5KHBhcnQpKVxuICAgIC5qb2luKFwiXFx1MDAwMFwiKTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvb3JkaW5hdG9yIHBvcnQgdG8gYSBgV29ya2VyYCdzIG9wdGlvbnMgc28gdGhlIHdvcmtlciBjYW4gbG9ja1xuICogaW1tZWRpYXRlbHkgLSBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLCBiZWZvcmUgYW55IG1lc3NhZ2UgaXMgaGFuZGxlZC5cbiAqXG4gKiBQcmVzZXJ2ZXMgdGhlIGNhbGxlcidzIGB3b3JrZXJEYXRhYCBhbmQgYHRyYW5zZmVyTGlzdGA7IHRoZSBwb3J0IGlzXG4gKiB0cmFuc2ZlcnJlZCwgYXMgYE1lc3NhZ2VQb3J0YCBjYW5ub3QgYmUgY2xvbmVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBuZXcgV29ya2VyKHVybCwgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zKHsgd29ya2VyRGF0YTogeyB0ZW5hbnQgfSB9KSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnMob3B0aW9uczogV29ya2VyT3B0aW9ucyA9IHt9KTogV29ya2VyT3B0aW9ucyB7XG4gIGNvbnN0IHBvcnQgPSBjcmVhdGVDb29yZGluYXRvclBvcnQoXCJwcm9jZXNzTG9ja1dvcmtlck9wdGlvbnNcIik7XG4gIGNvbnN0IGV4aXN0aW5nID0gb2JqZWN0LmlzUmVjb3JkKG9wdGlvbnMud29ya2VyRGF0YSkgPyBvcHRpb25zLndvcmtlckRhdGEgOiB7fTtcbiAgcmV0dXJuIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHdvcmtlckRhdGE6IHsgLi4uZXhpc3RpbmcsIFtMT0NLX1BPUlRfS0VZXTogcG9ydCB9LFxuICAgIHRyYW5zZmVyTGlzdDogWy4uLihvcHRpb25zLnRyYW5zZmVyTGlzdCA/PyBbXSksIHBvcnRdLFxuICB9O1xufVxuXG4vKipcbiAqIFdpcmUgYW4gQUxSRUFEWS1SVU5OSU5HIHdvcmtlciBpbnRvIHRoZSBsb2NrLCBmb3IgYSB3b3JrZXIgdGhpcyBjb2RlIGRpZCBub3RcbiAqIGNvbnN0cnVjdCAoYSBwb29sIGZyb20gYSBsaWJyYXJ5LCBzYXkpLlxuICpcbiAqIFByZWZlciB7QGxpbmsgcHJvY2Vzc0xvY2tXb3JrZXJPcHRpb25zfTogdGhlIHBvcnQgYXJyaXZlcyB3aXRoIGEgbWVzc2FnZSwgc29cbiAqIHRoZSB3b3JrZXIgY2Fubm90IGxvY2sgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgbXVzdCBhd2FpdFxuICoge0BsaW5rIHByb2Nlc3NMb2NrQXR0YWNoZWR9IGZpcnN0LiBUaGUgd29ya2VyIHNpZGUgbmVlZHMgbm8gb3RoZXIgY2hhbmdlIC1cbiAqIGB3aXRoUHJvY2Vzc0xvY2tgIHdvcmtzIG5vcm1hbGx5IG9uY2UgdGhlIHBvcnQgbGFuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hQcm9jZXNzTG9jayh3b3JrZXI6IFdvcmtlcik6IHZvaWQge1xuICBjb25zdCBwb3J0ID0gY3JlYXRlQ29vcmRpbmF0b3JQb3J0KFwiYXR0YWNoUHJvY2Vzc0xvY2tcIik7XG4gIHdvcmtlci5wb3N0TWVzc2FnZSh7IHR5cGU6IEFUVEFDSF9NRVNTQUdFX1RZUEUsIHBvcnQgfSBzYXRpc2ZpZXMgQXR0YWNoTWVzc2FnZSwgW3BvcnRdKTtcbn1cblxuLyoqIEEgZnJlc2ggY29vcmRpbmF0b3Itc2lkZSBjaGFubmVsLCBvciBhIGNsZWFyIGVycm9yIG9mZiB0aGUgbWFpbiB0aHJlYWQuICovXG5mdW5jdGlvbiBjcmVhdGVDb29yZGluYXRvclBvcnQoY2FsbGVyOiBzdHJpbmcpOiBNZXNzYWdlUG9ydCB7XG4gIGlmICghY29vcmRpbmF0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y2FsbGVyfSgpIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkYCk7XG4gIH1cbiAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjb29yZGluYXRvci5hZGRQb3J0KHBvcnQxKTtcbiAgcmV0dXJuIHBvcnQyO1xufVxuXG4vKipcbiAqIEluIGEgd29ya2VyLCByZXNvbHZlIG9uY2UgdGhlIHtAbGluayBhdHRhY2hQcm9jZXNzTG9ja30gcG9ydCBoYXMgYXJyaXZlZC5cbiAqXG4gKiBPbmx5IG5lZWRlZCBvbiB0aGUgYXR0YWNoIHBhdGgsIGFuZCBzYWZlIHRvIGF3YWl0IHJlZ2FyZGxlc3M6IGl0IHJldHVybnNcbiAqIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHdvcmtlciBhbHJlYWR5IGhhcyBhIHBvcnQgKHRoZVxuICoge0BsaW5rIHByb2Nlc3NMb2NrV29ya2VyT3B0aW9uc30gY2FzZSkgb3Igd2hlbiBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLCBzb1xuICogc2hhcmVkIHdvcmtlciBjb2RlIGRvZXMgbm90IGJyYW5jaCBvbiBob3cgaXQgd2FzIHN0YXJ0ZWQuXG4gKlxuICogQSBgcGFyZW50UG9ydGAgbGlzdGVuZXIga2VlcHMgdGhlIHdvcmtlciBhbGl2ZSwgd2hpY2ggaXMgQ09SUkVDVCBoZXJlIGFuZFxuICogZGVsaWJlcmF0ZWx5IG5vdCB1bnJlZidkOiB0aGlzIHByb21pc2UgaXMgcGVuZGluZyB3b3JrLCBhbmQgYSB3b3JrZXIgYWxsb3dlZCB0b1xuICogZXhpdCB3aGlsZSBhd2FpdGluZyBpdHMgcG9ydCB3b3VsZCBkaWUgc2lsZW50bHkgaW5zdGVhZCBvZiBsb2NraW5nLiBUaGVcbiAqIGxpc3RlbmVyIGlzIHJlbW92ZWQgYXMgc29vbiBhcyB0aGUgcG9ydCBsYW5kcywgc28gdGhlIHdvcmtlciBpcyBmcmVlIHRvIGV4aXRcbiAqIGFnYWluIHRoZSBtb21lbnQgdGhlIHdhaXQgaXMgb3Zlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NMb2NrQXR0YWNoZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc01haW5UaHJlYWQgfHwgY2xpZW50IHx8ICh3b3JrZXJEYXRhIGFzIExvY2tXb3JrZXJEYXRhIHwgdW5kZWZpbmVkKT8uW0xPQ0tfUE9SVF9LRVldKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIGNvbnN0IHBvcnQgPSBwYXJlbnRQb3J0O1xuICBpZiAoIXBvcnQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwicHJvY2Vzc0xvY2tBdHRhY2hlZCgpIG11c3QgYmUgY2FsbGVkIGZyb20gYSB3b3JrZXIgdGhyZWFkXCIpKTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBvbk1lc3NhZ2UgPSAobWVzc2FnZTogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFvYmplY3QuaXNSZWNvcmQobWVzc2FnZSkgfHwgbWVzc2FnZS50eXBlICE9PSBBVFRBQ0hfTUVTU0FHRV9UWVBFKSByZXR1cm47XG4gICAgICBwb3J0Lm9mZihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcbiAgICAgIGNsaWVudCA9IG5ldyBMb2NrQ2xpZW50KChtZXNzYWdlIGFzIHVua25vd24gYXMgQXR0YWNoTWVzc2FnZSkucG9ydCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBwb3J0Lm9uKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UpO1xuICB9KTtcbn1cbiJdfQ==
@@ -16,6 +16,7 @@ export interface ProjectContext {
16
16
  */
17
17
  readonly url?: net.UrlBuilder;
18
18
  }
19
+ /** Resolve the nearest project root without walking above its npm or Git boundary. */
19
20
  export declare function root(cwd?: string): string | undefined;
20
21
  /**
21
22
  * Parse a git remote URL (`https://...`, `git@host:owner/repo.git`, etc.) and