@bitgo-beta/sdk-core 8.2.1-beta.1913 → 8.2.1-beta.1915

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.
@@ -83,8 +83,11 @@ export declare class Safes implements ISafes {
83
83
  */
84
84
  private createMpcRoot;
85
85
  /**
86
- * List the enterprise's safes (cursor pagination).
87
- * Implemented in WCN-1192 Phase 3 (blocked on WCN-1177).
86
+ * List the enterprise's safes the caller is a member of (cursor pagination).
87
+ * GET /api/v2/enterprise/:eId/safes?limit&prevId
88
+ *
89
+ * `cursor` is the opaque `nextCursor` returned by a previous call; page forward until
90
+ * `nextCursor` is absent.
88
91
  * @experimental
89
92
  */
90
93
  list(params?: ListSafesOptions): Promise<{
@@ -92,8 +95,8 @@ export declare class Safes implements ISafes {
92
95
  nextCursor?: string;
93
96
  }>;
94
97
  /**
95
- * Fetch a single safe by id.
96
- * Implemented in WCN-1192 Phase 3 (blocked on WCN-1177).
98
+ * Fetch a single safe by id. Non-members get a 404 (existence is not leaked).
99
+ * GET /api/v2/enterprise/:eId/safes/:safeId
97
100
  * @experimental
98
101
  */
99
102
  get(params: GetSafeOptions): Promise<Safe>;
@@ -1 +1 @@
1
- {"version":3,"file":"safes.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/safes.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA4B9B;;;;;;GAMG;AACH,qBAAa,KAAM,YAAW,MAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM;IAKlD;;;OAGG;IACH,OAAO,CAAC,GAAG;IAIX;;;;;;;;OAQG;IACG,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkDvF;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9E;;;OAGG;IACH,OAAO,CAAC,WAAW;IAOnB;;;;;;OAMG;YACW,kBAAkB;IA0BhC;;;;;OAKG;YACW,aAAa;IAY3B;;;;OAIG;IACG,IAAI,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1F;;;;OAIG;IACG,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjD"}
1
+ {"version":3,"file":"safes.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/safes.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAuC9B;;;;;;GAMG;AACH,qBAAa,KAAM,YAAW,MAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM;IAKlD;;;OAGG;IACH,OAAO,CAAC,GAAG;IAIX;;;;;;;;OAQG;IACG,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkDvF;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9E;;;OAGG;IACH,OAAO,CAAC,WAAW;IAOnB;;;;;;OAMG;YACW,kBAAkB;IA0BhC;;;;;OAKG;YACW,aAAa;IAY3B;;;;;;;OAOG;IACG,IAAI,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAiB1F;;;;OAIG;IACG,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAKjD"}
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.Safes = void 0;
4
37
  /**
@@ -7,6 +40,7 @@ exports.Safes = void 0;
7
40
  * @experimental The safe client surface is experimental and may change (including breaking
8
41
  * changes) before the public release.
9
42
  */
43
+ const t = __importStar(require("io-ts"));
10
44
  const public_types_1 = require("@bitgo/public-types");
11
45
  const common_1 = require("../../common");
12
46
  const codecs_1 = require("../utils/codecs");
@@ -37,6 +71,16 @@ const ROOT_COIN_BY_NETWORK = {
37
71
  eddsaMpc: 'tsol',
38
72
  },
39
73
  };
74
+ /**
75
+ * Wire shape of the paginated `GET /enterprise/:eId/safes` response. WP paginates with the v2
76
+ * `prevId`/`nextBatchPrevId` convention; the SDK re-exposes it as an opaque `cursor`/`nextCursor`
77
+ * (see `list`).
78
+ * @experimental
79
+ */
80
+ const ListSafesResponse = t.intersection([
81
+ t.type({ safes: t.array(public_types_1.SafeData) }),
82
+ t.partial({ nextBatchPrevId: t.string }),
83
+ ]);
40
84
  /**
41
85
  * Collection accessor for a single enterprise's safes, mirroring Wallets / Enterprises.
42
86
  * Safe routes are enterprise-scoped (/api/v2/enterprise/:eId/safes), so the accessor is
@@ -212,21 +256,39 @@ class Safes {
212
256
  return [userKeychain.id, backupKeychain.id, bitgoKeychain.id];
213
257
  }
214
258
  /**
215
- * List the enterprise's safes (cursor pagination).
216
- * Implemented in WCN-1192 Phase 3 (blocked on WCN-1177).
259
+ * List the enterprise's safes the caller is a member of (cursor pagination).
260
+ * GET /api/v2/enterprise/:eId/safes?limit&prevId
261
+ *
262
+ * `cursor` is the opaque `nextCursor` returned by a previous call; page forward until
263
+ * `nextCursor` is absent.
217
264
  * @experimental
218
265
  */
219
266
  async list(params = {}) {
220
- throw new Error('Safes.list is not yet implemented (WCN-1192 Phase 3)');
267
+ // SDK exposes an opaque cursor; WP speaks prevId/nextBatchPrevId (v2 list convention).
268
+ const query = {};
269
+ if (params.limit !== undefined) {
270
+ query.limit = params.limit;
271
+ }
272
+ if (params.cursor !== undefined) {
273
+ query.prevId = params.cursor;
274
+ }
275
+ const response = await this.bitgo.get(this.url()).query(query).result();
276
+ const { safes, nextBatchPrevId } = (0, codecs_1.decodeWithCodec)(ListSafesResponse, response, 'ListSafesResponse');
277
+ return {
278
+ safes: safes.map((safeData) => new safe_1.Safe(this.bitgo, safeData)),
279
+ nextCursor: nextBatchPrevId,
280
+ };
221
281
  }
222
282
  /**
223
- * Fetch a single safe by id.
224
- * Implemented in WCN-1192 Phase 3 (blocked on WCN-1177).
283
+ * Fetch a single safe by id. Non-members get a 404 (existence is not leaked).
284
+ * GET /api/v2/enterprise/:eId/safes/:safeId
225
285
  * @experimental
226
286
  */
227
287
  async get(params) {
228
- throw new Error('Safes.get is not yet implemented (WCN-1192 Phase 3)');
288
+ const response = await this.bitgo.get(this.url(`/${params.id}`)).result();
289
+ const safeData = (0, codecs_1.decodeWithCodec)(public_types_1.SafeData, response, 'SafeData');
290
+ return new safe_1.Safe(this.bitgo, safeData);
229
291
  }
230
292
  }
231
293
  exports.Safes = Safes;
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9zYWZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNILHNEQUFrSDtBQUNsSCx5Q0FBNEM7QUFHNUMsNENBQWtEO0FBQ2xELDBEQUF1RDtBQUd2RCxpQ0FBOEI7QUFFOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBK0Q7SUFDdkYsT0FBTyxFQUFFO1FBQ1AsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsWUFBWTtRQUNaLFFBQVEsRUFBRSxLQUFLO1FBQ2YsUUFBUSxFQUFFLEtBQUs7S0FDaEI7SUFDRCxPQUFPLEVBQUU7UUFDUCxpQkFBaUI7UUFDakIsaUJBQWlCLEVBQUUsTUFBTTtRQUN6QixlQUFlLEVBQUUsTUFBTTtRQUN2QixZQUFZO1FBQ1osUUFBUSxFQUFFLE9BQU87UUFDakIsUUFBUSxFQUFFLE1BQU07S0FDakI7Q0FDRixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBYSxLQUFLO0lBSWhCLFlBQVksS0FBZ0IsRUFBRSxZQUFvQjtRQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsWUFBWSxTQUFTLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBeUI7UUFDMUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FB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QUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFzQjtRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGO0FBek5ELHNCQXlOQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGUgc2FmZSBjbGllbnQgc3VyZmFjZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2UgKGluY2x1ZGluZyBicmVha2luZ1xuICogY2hhbmdlcykgYmVmb3JlIHRoZSBwdWJsaWMgcmVsZWFzZS5cbiAqL1xuaW1wb3J0IHsgRmluYWxpemVTYWZlQm9keSwgSW5pdGlhbGl6ZVNhZmVCb2R5LCBSb290S2V5VHJpcGxldCwgUm9vdEtleVR5cGUsIFNhZmVEYXRhIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudHMgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgSUJhc2VDb2luIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uL3V0aWxzL2NvZGVjcyc7XG5pbXBvcnQgeyBwb3N0V2l0aENvZGVjIH0gZnJvbSAnLi4vdXRpbHMvcG9zdFdpdGhDb2RlYyc7XG5pbXBvcnQgeyBGaW5hbGl6ZVNhZmVPcHRpb25zLCBJbml0aWFsaXplU2FmZU9wdGlvbnMgfSBmcm9tICcuL2lTYWZlJztcbmltcG9ydCB7IENyZWF0ZVNhZmVPcHRpb25zLCBHZXRTYWZlT3B0aW9ucywgSVNhZmVzLCBMaXN0U2FmZXNPcHRpb25zLCBTYWZlQ3JlYXRpb25IYW5kbGUsIFNhZmVLZXlzIH0gZnJvbSAnLi9pU2FmZXMnO1xuaW1wb3J0IHsgU2FmZSB9IGZyb20gJy4vc2FmZSc7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpdmUgY29pbiBwZXIgcm9vdCBzbG90LCBieSBuZXR3b3JrLiBTYWZlIHJvb3RzIGFyZSBjdXJ2ZS9zY2hlbWUtc2NvcGVkLCBub3RcbiAqIGNvaW4tc2NvcGVkIOKAlCBXUCBzdGFtcHMgYGN1cnZlYCBzZXJ2ZXItc2lkZSBmcm9tIHRoZSBjb2luJ3Mga2V5IGN1cnZlLCBzbyBhbnkgY29pbiBvZiB0aGVcbiAqIHJpZ2h0IChjdXJ2ZSwgc2NoZW1lKSB3b3Jrcy4gVGhlc2UgYXJlIHN0YWJsZSwgYWx3YXlzLWF2YWlsYWJsZSBjaG9pY2VzIHVzZWQgb25seSB0byByb3V0ZVxuICogdGhlIGtleS1nZW5lcmF0aW9uIGNlcmVtb255OyB0aGUgcmVzdWx0aW5nIHJvb3QgaXMgaW50ZXJjaGFuZ2VhYmxlIGFjcm9zcyBjb2lucyBvZiB0aGUgc2xvdC5cbiAqIEBleHBlcmltZW50YWxcbiAqL1xuY29uc3QgUk9PVF9DT0lOX0JZX05FVFdPUks6IFJlY29yZDwnbWFpbm5ldCcgfCAndGVzdG5ldCcsIFJlY29yZDxSb290S2V5VHlwZSwgc3RyaW5nPj4gPSB7XG4gIG1haW5uZXQ6IHtcbiAgICAvLyBtdWx0aXNpZyByb290c1xuICAgIHNlY3AyNTZrMU11bHRpc2lnOiAnYnRjJyxcbiAgICBlZDI1NTE5TXVsdGlzaWc6ICd4bG0nLFxuICAgIC8vIE1QQyByb290c1xuICAgIGVjZHNhTXBjOiAnZXRoJyxcbiAgICBlZGRzYU1wYzogJ3NvbCcsXG4gIH0sXG4gIHRlc3RuZXQ6IHtcbiAgICAvLyBtdWx0aXNpZyByb290c1xuICAgIHNlY3AyNTZrMU11bHRpc2lnOiAndGJ0YycsXG4gICAgZWQyNTUxOU11bHRpc2lnOiAndHhsbScsXG4gICAgLy8gTVBDIHJvb3RzXG4gICAgZWNkc2FNcGM6ICdodGV0aCcsXG4gICAgZWRkc2FNcGM6ICd0c29sJyxcbiAgfSxcbn07XG5cbi8qKlxuICogQ29sbGVjdGlvbiBhY2Nlc3NvciBmb3IgYSBzaW5nbGUgZW50ZXJwcmlzZSdzIHNhZmVzLCBtaXJyb3JpbmcgV2FsbGV0cyAvIEVudGVycHJpc2VzLlxuICogU2FmZSByb3V0ZXMgYXJlIGVudGVycHJpc2Utc2NvcGVkICgvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlcyksIHNvIHRoZSBhY2Nlc3NvciBpc1xuICogY29uc3RydWN0ZWQgd2l0aCB0aGUgZW50ZXJwcmlzZSBpZCAoc2VlIEVudGVycHJpc2Uuc2FmZXMoKSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgU2FmZXMgaW1wbGVtZW50cyBJU2FmZXMge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50ZXJwcmlzZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgZW50ZXJwcmlzZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5lbnRlcnByaXNlSWQgPSBlbnRlcnByaXNlSWQ7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJwcmlzZS1zY29wZWQgdjIgVVJMIGZvciB0aGUgc2FmZXMgY29sbGVjdGlvbiwgZS5nLiAvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlc1xuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIHByaXZhdGUgdXJsKGV4dHJhID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJpdGdvLnVybChgL2VudGVycHJpc2UvJHt0aGlzLmVudGVycHJpc2VJZH0vc2FmZXMke2V4dHJhfWAsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uZS1jYWxsIGNvbnZlbmllbmNlIHdyYXBwZXIgY2hhaW5pbmcgdGhlIHRocmVlIGNyZWF0aW9uIHBoYXNlczpcbiAgICogaW5pdGlhbGl6ZSAoUGhhc2UgMSkg4oaSIGNyZWF0ZVNhZmVLZXlzIChQaGFzZSAyLCA0IHNhZmVJZC10YWdnZWQgY2VyZW1vbmllcykg4oaSXG4gICAqIGZpbmFsaXplIChQaGFzZSAzKS4gSE9UIGN1c3RvZHkgb25seSBpbiB2MS5cbiAgICpcbiAgICogSWYgYSBrZXkgY2VyZW1vbnkgZmFpbHMsIGBjcmVhdGVTYWZlS2V5c2AgYXJjaGl2ZXMgdGhlIHNhZmUgYmVmb3JlIHRocm93aW5nLCBzbyBhIGZhaWxlZCBydW5cbiAgICogbGVhdmVzIG5vIGhhbGYtY3JlYXRlZCBzYWZlIGJlaGluZCDigJQgY3JlYXRlIGEgbmV3IHNhZmUgYW5kIHJldHJ5LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVNhZmUocGFyYW1zOiBDcmVhdGVTYWZlT3B0aW9ucyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHNhZmUgPSBhd2FpdCB0aGlzLmluaXRpYWxpemVTYWZlKHsgbGFiZWw6IHBhcmFtcy5sYWJlbCB9KTtcbiAgICBjb25zdCByb290S2V5cyA9IGF3YWl0IHRoaXMuY3JlYXRlU2FmZUtleXMoeyAuLi5wYXJhbXMsIHNhZmVJZDogc2FmZS5pZCgpIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmFsaXplU2FmZShzYWZlLmlkKCksIHJvb3RLZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaGFzZSAxIOKAlCBpbml0aWFsaXplIGEgc2FmZSAobWV0YWRhdGEgb25seSwgbm8ga2V5IG1hdGVyaWFsKS5cbiAgICogUE9TVCAvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlcyB7IGxhYmVsIH1cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVNhZmUocGFyYW1zOiBJbml0aWFsaXplU2FmZU9wdGlvbnMpOiBQcm9taXNlPFNhZmU+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3RXaXRoQ29kZWModGhpcy5iaXRnbywgdGhpcy51cmwoKSwgSW5pdGlhbGl6ZVNhZmVCb2R5LCBwYXJhbXMpLnJlc3VsdCgpO1xuICAgIGNvbnN0IHNhZmVEYXRhID0gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gICAgcmV0dXJuIG5ldyBTYWZlKHRoaXMuYml0Z28sIHNhZmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaGFzZSAyIOKAlCBydW4gdGhlIDQgcm9vdCBrZXkgY2VyZW1vbmllcyB0YWdnZWQgd2l0aCBgc2FmZUlkYDsgcmV0dXJucyB0aGUgMTIgbWludGVkIGtleSBpZHNcbiAgICogYXMgNCBvcmRlcmVkIFt1c2VyLCBiYWNrdXAsIGJpdGdvXSB0cmlwbGV0cy4gSE9UIGN1c3RvZHkgb25seSBpbiB2MS5cbiAgICpcbiAgICogQWxsIDQgY2VyZW1vbmllcyAoMi4xIG11bHRpc2lnIOKRoOKRoywgMi4yIE1QQyDikaHikaIpIHJ1biBpbiBwYXJhbGxlbC4gSWYgYW55IG9mIHRoZW0gZmFpbCwgdGhlXG4gICAqIHBhcnRpYWxseS1jcmVhdGVkIHNhZmUgaXMgYXJjaGl2ZWQgKGEgbGVnYWwgYGluaXRpYWxpemluZyDihpIgYXJjaGl2ZWRgIHRyYW5zaXRpb24sIHNvIHRoZVxuICAgKiBvcnBoYW5lZCB0YWdnZWQga2V5cyBhcmUgaW5lcnQpIGFuZCBhbiBlcnJvciBsaXN0aW5nIGV2ZXJ5IGNlcmVtb255IGZhaWx1cmUgaXMgdGhyb3duIOKAlFxuICAgKiBjcmVhdGUgYSBuZXcgc2FmZSBhbmQgcmV0cnkuXG4gICAqXG4gICAqIE5vdCBpbmRlcGVuZGVudGx5IGlkZW1wb3RlbnQ6IHJlLXJ1bm5pbmcgYWdhaW5zdCBhIHNhZmUgdGhhdCBhbHJlYWR5IGhhcyBzb21lIHJvb3RzIGhpdHMgV1Anc1xuICAgKiB1bmlxdWUgcm9vdC1zbG90IGluZGV4LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBjcmVhdGVTYWZlS2V5cyhwYXJhbXM6IENyZWF0ZVNhZmVPcHRpb25zICYgU2FmZUNyZWF0aW9uSGFuZGxlKTogUHJvbWlzZTxTYWZlS2V5cz4ge1xuICAgIGNvbnN0IHsgc2FmZUlkLCBwYXNzcGhyYXNlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZW50ZXJwcmlzZSA9IHRoaXMuZW50ZXJwcmlzZUlkO1xuXG4gICAgLy8gYHNsb3RzYCBNVVNUIHN0YXkgaW5kZXgtYWxpZ25lZCB3aXRoIHRoZSBQcm9taXNlLmFsbFNldHRsZWQgYXJyYXkgYmVsb3cuIE9yZGVyZWQgYnkgc2NoZW1lOlxuICAgIC8vIHRoZSB0d28gbXVsdGlzaWcgcm9vdHMgZmlyc3QsIHRoZW4gdGhlIHR3byBNUEMgcm9vdHMuXG4gICAgY29uc3Qgc2xvdHM6IFJvb3RLZXlUeXBlW10gPSBbJ3NlY3AyNTZrMU11bHRpc2lnJywgJ2VkMjU1MTlNdWx0aXNpZycsICdlY2RzYU1wYycsICdlZGRzYU1wYyddO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgLy8gUGhhc2UgMi4xIOKAlCBtdWx0aXNpZyByb290cyAo4pGg4pGjKTogbG9jYWwgdXNlci9iYWNrdXAga2V5cGFpcnMgKyBCaXRHbyBrZXksIGFsbCBzYWZlSWQtdGFnZ2VkLlxuICAgICAgdGhpcy5jcmVhdGVNdWx0aXNpZ1Jvb3QoJ3NlY3AyNTZrMU11bHRpc2lnJywgc2FmZUlkLCBwYXNzcGhyYXNlLCBlbnRlcnByaXNlKSxcbiAgICAgIHRoaXMuY3JlYXRlTXVsdGlzaWdSb290KCdlZDI1NTE5TXVsdGlzaWcnLCBzYWZlSWQsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UpLFxuICAgICAgLy8gUGhhc2UgMi4yIOKAlCBNUEMgcm9vdHMgKOKRoeKRoik6IHRoZSBleGlzdGluZyBES0xTICjikaEpIGFuZCBFZERTQSAo4pGiKSBjZXJlbW9uaWVzLCBzYWZlSWQgdGhyZWFkZWQuXG4gICAgICB0aGlzLmNyZWF0ZU1wY1Jvb3QoJ2VjZHNhTXBjJywgc2FmZUlkLCBwYXNzcGhyYXNlLCBlbnRlcnByaXNlKSxcbiAgICAgIHRoaXMuY3JlYXRlTXBjUm9vdCgnZWRkc2FNcGMnLCBzYWZlSWQsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UpLFxuICAgIF0pO1xuXG4gICAgLy8gU2luZ2xlIHBhc3Mgb3ZlciB0aGUgc2V0dGxlZCByZXN1bHRzOiBgc3RhdHVzID09PSAnZnVsZmlsbGVkJ2AgbmFycm93cyBgLnZhbHVlYCB0byBhXG4gICAgLy8gUm9vdEtleVRyaXBsZXQgKG5vIGNhc3QgbmVlZGVkKSwgYW5kIHJlamVjdGlvbnMgYXJlIGNvbGxlY3RlZCBwZXItc2xvdCBmb3IgdGhlIGVycm9yIGJlbG93LlxuICAgIGNvbnN0IGhvdCA9IHt9IGFzIFNhZmVLZXlzWydyb290S2V5cyddWydob3QnXTtcbiAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICAgIGhvdFtzbG90c1tpXV0gPSByZXN1bHQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWFzb24gPSByZXN1bHQucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHQucmVhc29uLm1lc3NhZ2UgOiBTdHJpbmcocmVzdWx0LnJlYXNvbik7XG4gICAgICAgIGZhaWx1cmVzLnB1c2goYCR7c2xvdHNbaV19OiAke3JlYXNvbn1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBCZXN0LWVmZm9ydCBhYmFuZG9uIHRoZSBwYXJ0aWFsbHktY3JlYXRlZCBzYWZlIHNvIGEgcmV0cnkgc3RhcnRzIGZyb20gYSBjbGVhbiBzbGF0ZS4gS2VlcFxuICAgICAgLy8gdGhlIGNlcmVtb255IGZhaWx1cmVzIGFzIHRoZSBwcmltYXJ5IGVycm9yOyBub3RlIGl0IGlmIHRoZSBjbGVhbnVwIGFyY2hpdmUgYWxzbyBmYWlsZWQuXG4gICAgICBsZXQgYXJjaGl2ZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXJjaGl2ZVNhZmUoc2FmZUlkKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXJjaGl2ZUVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZSA6IG5ldyBFcnJvcihTdHJpbmcoZSkpO1xuICAgICAgfVxuICAgICAgbGV0IG1lc3NhZ2UgPVxuICAgICAgICBgU2FmZSBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQgZm9yICR7ZmFpbHVyZXMubGVuZ3RofSByb290IGNlcmVtb255L2llcyBgICtcbiAgICAgICAgYFske2ZhaWx1cmVzLmpvaW4oJzsgJyl9XS4gVGhlIHNhZmUgKCR7c2FmZUlkfSkgaGFzIGJlZW4gYXJjaGl2ZWQ7IGNyZWF0ZSBhIG5ldyBzYWZlIGFuZCByZXRyeS5gO1xuICAgICAgaWYgKGFyY2hpdmVFcnJvcikge1xuICAgICAgICBtZXNzYWdlICs9IGAgTk9URTogYXJjaGl2aW5nIHRoZSBzYWZlIGFsc28gZmFpbGVkICgke2FyY2hpdmVFcnJvci5tZXNzYWdlfSk7IGFyY2hpdmUgaXQgbWFudWFsbHkgYmVmb3JlIHJldHJ5aW5nLmA7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcm9vdEtleXM6IHsgaG90IH0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcmNoaXZlIGEgc2FmZS4gQWxzbyB0aGUgYWJhbmRvbm1lbnQgcGF0aCBmb3IgYSBzdHVjayBgaW5pdGlhbGl6aW5nYCBzYWZlICh1c2VkIGJ5XG4gICAqIGBjcmVhdGVTYWZlS2V5c2AgdG8gY2xlYW4gdXAgYWZ0ZXIgYSBmYWlsZWQgY2VyZW1vbnkpLlxuICAgKiBQT1NUIC9hcGkvdjIvZW50ZXJwcmlzZS86ZUlkL3NhZmVzLzpzYWZlSWQvYXJjaGl2ZVxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBhcmNoaXZlU2FmZShzYWZlSWQ6IHN0cmluZyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy51cmwoYC8ke3NhZmVJZH0vYXJjaGl2ZWApKVxuICAgICAgLnNlbmQoKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIGNvbnN0IHNhZmVEYXRhID0gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gICAgcmV0dXJuIG5ldyBTYWZlKHRoaXMuYml0Z28sIHNhZmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaGFzZSAzIOKAlCBmaW5hbGl6ZSBhIHNhZmUgd2l0aCB0aGUgMTIgcm9vdCBrZXkgaWRzIGFzIDQgb3JkZXJlZCBbdXNlciwgYmFja3VwLCBiaXRnb10gdHJpcGxldHMuXG4gICAqIFBPU1QgL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMvOnNhZmVJZC9maW5hbGl6ZSB7IHJvb3RLZXlzIH0uXG4gICAqIElkZW1wb3RlbnQ6IHJlLWZpbmFsaXppbmcgd2l0aCB0aGUgc2FtZSBgcm9vdEtleXNgIHJldHVybnMgdGhlIGFjdGl2ZSBzYWZlIGFnYWluICgyMDApLlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBmaW5hbGl6ZVNhZmUoc2FmZUlkOiBzdHJpbmcsIHBhcmFtczogRmluYWxpemVTYWZlT3B0aW9ucyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdFdpdGhDb2RlYyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLnVybChgLyR7c2FmZUlkfS9maW5hbGl6ZWApLFxuICAgICAgRmluYWxpemVTYWZlQm9keSxcbiAgICAgIHBhcmFtc1xuICAgICkucmVzdWx0KCk7XG4gICAgY29uc3Qgc2FmZURhdGEgPSBkZWNvZGVXaXRoQ29kZWMoU2FmZURhdGEsIHJlc3BvbnNlLCAnU2FmZURhdGEnKTtcbiAgICByZXR1cm4gbmV3IFNhZmUodGhpcy5iaXRnbywgc2FmZURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvaW4gdXNlZCB0byByb3V0ZSBhIGdpdmVuIHJvb3QncyBrZXkgY2VyZW1vbnkgKHNlZSBST09UX0NPSU5fQllfTkVUV09SSykuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHByaXZhdGUgY29pbkZvclJvb3Qoc2xvdDogUm9vdEtleVR5cGUpOiBJQmFzZUNvaW4ge1xuICAgIC8vIFYxTmV0d29yayBpcyBleGFjdGx5ICdiaXRjb2luJyB8ICd0ZXN0bmV0Jywgc28gdGhpcyBicmFuY2ggaXMgZXhoYXVzdGl2ZSBvdmVyIGV2ZXJ5XG4gICAgLy8gZW52aXJvbm1lbnQ6ICdiaXRjb2luJyBpcyBtYWlubmV0IGFuZCBldmVyeSBvdGhlciB2YWx1ZSBpcyBhIHRlc3RuZXQuXG4gICAgY29uc3QgbmV0d29yayA9IEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5uZXR3b3JrID09PSAnYml0Y29pbicgPyAnbWFpbm5ldCcgOiAndGVzdG5ldCc7XG4gICAgcmV0dXJuIHRoaXMuYml0Z28uY29pbihST09UX0NPSU5fQllfTkVUV09SS1tuZXR3b3JrXVtzbG90XSk7XG4gIH1cblxuICAvKipcbiAgICogUGhhc2UgMi4xIGhlbHBlciDigJQgbWludCBvbmUgb25jaGFpbi1tdWx0aXNpZyByb290IChjb2xkIG1vZGVsLCBhcyB3YWxsZXQgY3JlYXRpb24gZG9lcyB0b2RheSk6XG4gICAqIGdlbmVyYXRlIHVzZXIvYmFja3VwIGtleXBhaXJzIGxvY2FsbHksIGVuY3J5cHQgd2l0aCBgcGFzc3BocmFzZWAsIHJlZ2lzdGVyIHZpYSBQT1NUIC86Y29pbi9rZXlcbiAgICogd2l0aCBgc2FmZUlkYDsgdGhlIEJpdEdvIGtleSBpcyBjcmVhdGVkIHRocm91Z2ggdGhlIHNhbWUgcm91dGUncyBgc291cmNlOidiaXRnbydgIHBhdGguXG4gICAqIFJldHVybnMgdGhlIFt1c2VyLCBiYWNrdXAsIGJpdGdvXSBrZXkgaWQgdHJpcGxldC5cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVNdWx0aXNpZ1Jvb3QoXG4gICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyB8ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgIHNhZmVJZDogc3RyaW5nLFxuICAgIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBlbnRlcnByaXNlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSb290S2V5VHJpcGxldD4ge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IHRoaXMuY29pbkZvclJvb3Qoc2xvdCkua2V5Y2hhaW5zKCk7XG5cbiAgICBjb25zdCB1c2VyS2V5UGFpciA9IGtleWNoYWlucy5jcmVhdGUoKTtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0ga2V5Y2hhaW5zLmFkZCh7XG4gICAgICBwdWI6IHVzZXJLZXlQYWlyLnB1YixcbiAgICAgIGVuY3J5cHRlZFBydjogYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHVzZXJLZXlQYWlyLnBydiwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSksXG4gICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIHNhZmVJZCxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSBrZXljaGFpbnMuY3JlYXRlQmFja3VwKHsgcGFzc3BocmFzZSwgc2FmZUlkIH0pO1xuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW5Qcm9taXNlID0ga2V5Y2hhaW5zLmNyZWF0ZUJpdEdvKHsgZW50ZXJwcmlzZSwgc2FmZUlkIH0pO1xuXG4gICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdXNlcktleWNoYWluUHJvbWlzZSxcbiAgICAgIGJhY2t1cEtleWNoYWluUHJvbWlzZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW5Qcm9taXNlLFxuICAgIF0pO1xuICAgIHJldHVybiBbdXNlcktleWNoYWluLmlkLCBiYWNrdXBLZXljaGFpbi5pZCwgYml0Z29LZXljaGFpbi5pZF07XG4gIH1cblxuICAvKipcbiAgICogUGhhc2UgMi4yIGhlbHBlciDigJQgcnVuIG9uZSBNUEMgY2VyZW1vbnkgKERLTFMgZm9yIGVjZHNhTXBjLCBFZERTQSBmb3IgZWRkc2FNcGMpIHZpYSB0aGVcbiAgICogZXhpc3RpbmcgYGNyZWF0ZU1wY2AgZmxvdyB3aXRoIGBzYWZlSWRgIHRocmVhZGVkIHRocm91Z2gsIHNvIHRoZSByZXN1bHRpbmcgdXNlci9iYWNrdXAvYml0Z29cbiAgICoga2V5cyBsYW5kIHRhZ2dlZC4gUmV0dXJucyB0aGUgW3VzZXIsIGJhY2t1cCwgYml0Z29dIGtleSBpZCB0cmlwbGV0LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNyZWF0ZU1wY1Jvb3QoXG4gICAgc2xvdDogJ2VjZHNhTXBjJyB8ICdlZGRzYU1wYycsXG4gICAgc2FmZUlkOiBzdHJpbmcsXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIGVudGVycHJpc2U6IHN0cmluZ1xuICApOiBQcm9taXNlPFJvb3RLZXlUcmlwbGV0PiB7XG4gICAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluIH0gPSBhd2FpdCB0aGlzLmNvaW5Gb3JSb290KHNsb3QpXG4gICAgICAua2V5Y2hhaW5zKClcbiAgICAgIC5jcmVhdGVNcGMoeyBtdWx0aXNpZ1R5cGU6ICd0c3MnLCBwYXNzcGhyYXNlLCBlbnRlcnByaXNlLCBzYWZlSWQgfSk7XG4gICAgcmV0dXJuIFt1c2VyS2V5Y2hhaW4uaWQsIGJhY2t1cEtleWNoYWluLmlkLCBiaXRnb0tleWNoYWluLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHRoZSBlbnRlcnByaXNlJ3Mgc2FmZXMgKGN1cnNvciBwYWdpbmF0aW9uKS5cbiAgICogSW1wbGVtZW50ZWQgaW4gV0NOLTExOTIgUGhhc2UgMyAoYmxvY2tlZCBvbiBXQ04tMTE3NykuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIGFzeW5jIGxpc3QocGFyYW1zOiBMaXN0U2FmZXNPcHRpb25zID0ge30pOiBQcm9taXNlPHsgc2FmZXM6IFNhZmVbXTsgbmV4dEN1cnNvcj86IHN0cmluZyB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTYWZlcy5saXN0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgKFdDTi0xMTkyIFBoYXNlIDMpJyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSBzaW5nbGUgc2FmZSBieSBpZC5cbiAgICogSW1wbGVtZW50ZWQgaW4gV0NOLTExOTIgUGhhc2UgMyAoYmxvY2tlZCBvbiBXQ04tMTE3NykuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIGFzeW5jIGdldChwYXJhbXM6IEdldFNhZmVPcHRpb25zKTogUHJvbWlzZTxTYWZlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTYWZlcy5nZXQgaXMgbm90IHlldCBpbXBsZW1lbnRlZCAoV0NOLTExOTIgUGhhc2UgMyknKTtcbiAgfVxufVxuIl19
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9zYWZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7R0FLRztBQUNILHlDQUEyQjtBQUMzQixzREFBa0g7QUFDbEgseUNBQTRDO0FBRzVDLDRDQUFrRDtBQUNsRCwwREFBdUQ7QUFHdkQsaUNBQThCO0FBRTlCOzs7Ozs7R0FNRztBQUNILE1BQU0sb0JBQW9CLEdBQStEO0lBQ3ZGLE9BQU8sRUFBRTtRQUNQLGlCQUFpQjtRQUNqQixpQkFBaUIsRUFBRSxLQUFLO1FBQ3hCLGVBQWUsRUFBRSxLQUFLO1FBQ3RCLFlBQVk7UUFDWixRQUFRLEVBQUUsS0FBSztRQUNmLFFBQVEsRUFBRSxLQUFLO0tBQ2hCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFLE1BQU07UUFDekIsZUFBZSxFQUFFLE1BQU07UUFDdkIsWUFBWTtRQUNaLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFFBQVEsRUFBRSxNQUFNO0tBQ2pCO0NBQ0YsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyx1QkFBUSxDQUFDLEVBQUUsQ0FBQztJQUNwQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUN6QyxDQUFDLENBQUM7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFhLEtBQUs7SUFJaEIsWUFBWSxLQUFnQixFQUFFLFlBQW9CO1FBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxD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QUlHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFzQjtRQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLElBQUEsd0JBQWUsRUFBQyx1QkFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksV0FBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBM09ELHNCQTJPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGUgc2FmZSBjbGllbnQgc3VyZmFjZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2UgKGluY2x1ZGluZyBicmVha2luZ1xuICogY2hhbmdlcykgYmVmb3JlIHRoZSBwdWJsaWMgcmVsZWFzZS5cbiAqL1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQgeyBGaW5hbGl6ZVNhZmVCb2R5LCBJbml0aWFsaXplU2FmZUJvZHksIFJvb3RLZXlUcmlwbGV0LCBSb290S2V5VHlwZSwgU2FmZURhdGEgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBJQmFzZUNvaW4gfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vdXRpbHMvY29kZWNzJztcbmltcG9ydCB7IHBvc3RXaXRoQ29kZWMgfSBmcm9tICcuLi91dGlscy9wb3N0V2l0aENvZGVjJztcbmltcG9ydCB7IEZpbmFsaXplU2FmZU9wdGlvbnMsIEluaXRpYWxpemVTYWZlT3B0aW9ucyB9IGZyb20gJy4vaVNhZmUnO1xuaW1wb3J0IHsgQ3JlYXRlU2FmZU9wdGlvbnMsIEdldFNhZmVPcHRpb25zLCBJU2FmZXMsIExpc3RTYWZlc09wdGlvbnMsIFNhZmVDcmVhdGlvbkhhbmRsZSwgU2FmZUtleXMgfSBmcm9tICcuL2lTYWZlcyc7XG5pbXBvcnQgeyBTYWZlIH0gZnJvbSAnLi9zYWZlJztcblxuLyoqXG4gKiBSZXByZXNlbnRhdGl2ZSBjb2luIHBlciByb290IHNsb3QsIGJ5IG5ldHdvcmsuIFNhZmUgcm9vdHMgYXJlIGN1cnZlL3NjaGVtZS1zY29wZWQsIG5vdFxuICogY29pbi1zY29wZWQg4oCUIFdQIHN0YW1wcyBgY3VydmVgIHNlcnZlci1zaWRlIGZyb20gdGhlIGNvaW4ncyBrZXkgY3VydmUsIHNvIGFueSBjb2luIG9mIHRoZVxuICogcmlnaHQgKGN1cnZlLCBzY2hlbWUpIHdvcmtzLiBUaGVzZSBhcmUgc3RhYmxlLCBhbHdheXMtYXZhaWxhYmxlIGNob2ljZXMgdXNlZCBvbmx5IHRvIHJvdXRlXG4gKiB0aGUga2V5LWdlbmVyYXRpb24gY2VyZW1vbnk7IHRoZSByZXN1bHRpbmcgcm9vdCBpcyBpbnRlcmNoYW5nZWFibGUgYWNyb3NzIGNvaW5zIG9mIHRoZSBzbG90LlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5jb25zdCBST09UX0NPSU5fQllfTkVUV09SSzogUmVjb3JkPCdtYWlubmV0JyB8ICd0ZXN0bmV0JywgUmVjb3JkPFJvb3RLZXlUeXBlLCBzdHJpbmc+PiA9IHtcbiAgbWFpbm5ldDoge1xuICAgIC8vIG11bHRpc2lnIHJvb3RzXG4gICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdidGMnLFxuICAgIGVkMjU1MTlNdWx0aXNpZzogJ3hsbScsXG4gICAgLy8gTVBDIHJvb3RzXG4gICAgZWNkc2FNcGM6ICdldGgnLFxuICAgIGVkZHNhTXBjOiAnc29sJyxcbiAgfSxcbiAgdGVzdG5ldDoge1xuICAgIC8vIG11bHRpc2lnIHJvb3RzXG4gICAgc2VjcDI1NmsxTXVsdGlzaWc6ICd0YnRjJyxcbiAgICBlZDI1NTE5TXVsdGlzaWc6ICd0eGxtJyxcbiAgICAvLyBNUEMgcm9vdHNcbiAgICBlY2RzYU1wYzogJ2h0ZXRoJyxcbiAgICBlZGRzYU1wYzogJ3Rzb2wnLFxuICB9LFxufTtcblxuLyoqXG4gKiBXaXJlIHNoYXBlIG9mIHRoZSBwYWdpbmF0ZWQgYEdFVCAvZW50ZXJwcmlzZS86ZUlkL3NhZmVzYCByZXNwb25zZS4gV1AgcGFnaW5hdGVzIHdpdGggdGhlIHYyXG4gKiBgcHJldklkYC9gbmV4dEJhdGNoUHJldklkYCBjb252ZW50aW9uOyB0aGUgU0RLIHJlLWV4cG9zZXMgaXQgYXMgYW4gb3BhcXVlIGBjdXJzb3JgL2BuZXh0Q3Vyc29yYFxuICogKHNlZSBgbGlzdGApLlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5jb25zdCBMaXN0U2FmZXNSZXNwb25zZSA9IHQuaW50ZXJzZWN0aW9uKFtcbiAgdC50eXBlKHsgc2FmZXM6IHQuYXJyYXkoU2FmZURhdGEpIH0pLFxuICB0LnBhcnRpYWwoeyBuZXh0QmF0Y2hQcmV2SWQ6IHQuc3RyaW5nIH0pLFxuXSk7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBhY2Nlc3NvciBmb3IgYSBzaW5nbGUgZW50ZXJwcmlzZSdzIHNhZmVzLCBtaXJyb3JpbmcgV2FsbGV0cyAvIEVudGVycHJpc2VzLlxuICogU2FmZSByb3V0ZXMgYXJlIGVudGVycHJpc2Utc2NvcGVkICgvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlcyksIHNvIHRoZSBhY2Nlc3NvciBpc1xuICogY29uc3RydWN0ZWQgd2l0aCB0aGUgZW50ZXJwcmlzZSBpZCAoc2VlIEVudGVycHJpc2Uuc2FmZXMoKSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgU2FmZXMgaW1wbGVtZW50cyBJU2FmZXMge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50ZXJwcmlzZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgZW50ZXJwcmlzZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5lbnRlcnByaXNlSWQgPSBlbnRlcnByaXNlSWQ7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJwcmlzZS1zY29wZWQgdjIgVVJMIGZvciB0aGUgc2FmZXMgY29sbGVjdGlvbiwgZS5nLiAvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlc1xuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIHByaXZhdGUgdXJsKGV4dHJhID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJpdGdvLnVybChgL2VudGVycHJpc2UvJHt0aGlzLmVudGVycHJpc2VJZH0vc2FmZXMke2V4dHJhfWAsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uZS1jYWxsIGNvbnZlbmllbmNlIHdyYXBwZXIgY2hhaW5pbmcgdGhlIHRocmVlIGNyZWF0aW9uIHBoYXNlczpcbiAgICogaW5pdGlhbGl6ZSAoUGhhc2UgMSkg4oaSIGNyZWF0ZVNhZmVLZXlzIChQaGFzZSAyLCA0IHNhZmVJZC10YWdnZWQgY2VyZW1vbmllcykg4oaSXG4gICAqIGZpbmFsaXplIChQaGFzZSAzKS4gSE9UIGN1c3RvZHkgb25seSBpbiB2MS5cbiAgICpcbiAgICogSWYgYSBrZXkgY2VyZW1vbnkgZmFpbHMsIGBjcmVhdGVTYWZlS2V5c2AgYXJjaGl2ZXMgdGhlIHNhZmUgYmVmb3JlIHRocm93aW5nLCBzbyBhIGZhaWxlZCBydW5cbiAgICogbGVhdmVzIG5vIGhhbGYtY3JlYXRlZCBzYWZlIGJlaGluZCDigJQgY3JlYXRlIGEgbmV3IHNhZmUgYW5kIHJldHJ5LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVNhZmUocGFyYW1zOiBDcmVhdGVTYWZlT3B0aW9ucyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHNhZmUgPSBhd2FpdCB0aGlzLmluaXRpYWxpemVTYWZlKHsgbGFiZWw6IHBhcmFtcy5sYWJlbCB9KTtcbiAgICBjb25zdCByb290S2V5cyA9IGF3YWl0IHRoaXMuY3JlYXRlU2FmZUtleXMoeyAuLi5wYXJhbXMsIHNhZmVJZDogc2FmZS5pZCgpIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmFsaXplU2FmZShzYWZlLmlkKCksIHJvb3RLZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaGFzZSAxIOKAlCBpbml0aWFsaXplIGEgc2FmZSAobWV0YWRhdGEgb25seSwgbm8ga2V5IG1hdGVyaWFsKS5cbiAgICogUE9TVCAvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlcyB7IGxhYmVsIH1cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVNhZmUocGFyYW1zOiBJbml0aWFsaXplU2FmZU9wdGlvbnMpOiBQcm9taXNlPFNhZmU+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3RXaXRoQ29kZWModGhpcy5iaXRnbywgdGhpcy51cmwoKSwgSW5pdGlhbGl6ZVNhZmVCb2R5LCBwYXJhbXMpLnJlc3VsdCgpO1xuICAgIGNvbnN0IHNhZmVEYXRhID0gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gICAgcmV0dXJuIG5ldyBTYWZlKHRoaXMuYml0Z28sIHNhZmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaGFzZSAyIOKAlCBydW4gdGhlIDQgcm9vdCBrZXkgY2VyZW1vbmllcyB0YWdnZWQgd2l0aCBgc2FmZUlkYDsgcmV0dXJucyB0aGUgMTIgbWludGVkIGtleSBpZHNcbiAgICogYXMgNCBvcmRlcmVkIFt1c2VyLCBiYWNrdXAsIGJpdGdvXSB0cmlwbGV0cy4gSE9UIGN1c3RvZHkgb25seSBpbiB2MS5cbiAgICpcbiAgICogQWxsIDQgY2VyZW1vbmllcyAoMi4xIG11bHRpc2lnIOKRoOKRoywgMi4yIE1QQyDikaHikaIpIHJ1biBpbiBwYXJhbGxlbC4gSWYgYW55IG9mIHRoZW0gZmFpbCwgdGhlXG4gICAqIHBhcnRpYWxseS1jcmVhdGVkIHNhZmUgaXMgYXJjaGl2ZWQgKGEgbGVnYWwgYGluaXRpYWxpemluZyDihpIgYXJjaGl2ZWRgIHRyYW5zaXRpb24sIHNvIHRoZVxuICAgKiBvcnBoYW5lZCB0YWdnZWQga2V5cyBhcmUgaW5lcnQpIGFuZCBhbiBlcnJvciBsaXN0aW5nIGV2ZXJ5IGNlcmVtb255IGZhaWx1cmUgaXMgdGhyb3duIOKAlFxuICAgKiBjcmVhdGUgYSBuZXcgc2FmZSBhbmQgcmV0cnkuXG4gICAqXG4gICAqIE5vdCBpbmRlcGVuZGVudGx5IGlkZW1wb3RlbnQ6IHJlLXJ1bm5pbmcgYWdhaW5zdCBhIHNhZmUgdGhhdCBhbHJlYWR5IGhhcyBzb21lIHJvb3RzIGhpdHMgV1Anc1xuICAgKiB1bmlxdWUgcm9vdC1zbG90IGluZGV4LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBjcmVhdGVTYWZlS2V5cyhwYXJhbXM6IENyZWF0ZVNhZmVPcHRpb25zICYgU2FmZUNyZWF0aW9uSGFuZGxlKTogUHJvbWlzZTxTYWZlS2V5cz4ge1xuICAgIGNvbnN0IHsgc2FmZUlkLCBwYXNzcGhyYXNlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZW50ZXJwcmlzZSA9IHRoaXMuZW50ZXJwcmlzZUlkO1xuXG4gICAgLy8gYHNsb3RzYCBNVVNUIHN0YXkgaW5kZXgtYWxpZ25lZCB3aXRoIHRoZSBQcm9taXNlLmFsbFNldHRsZWQgYXJyYXkgYmVsb3cuIE9yZGVyZWQgYnkgc2NoZW1lOlxuICAgIC8vIHRoZSB0d28gbXVsdGlzaWcgcm9vdHMgZmlyc3QsIHRoZW4gdGhlIHR3byBNUEMgcm9vdHMuXG4gICAgY29uc3Qgc2xvdHM6IFJvb3RLZXlUeXBlW10gPSBbJ3NlY3AyNTZrMU11bHRpc2lnJywgJ2VkMjU1MTlNdWx0aXNpZycsICdlY2RzYU1wYycsICdlZGRzYU1wYyddO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgLy8gUGhhc2UgMi4xIOKAlCBtdWx0aXNpZyByb290cyAo4pGg4pGjKTogbG9jYWwgdXNlci9iYWNrdXAga2V5cGFpcnMgKyBCaXRHbyBrZXksIGFsbCBzYWZlSWQtdGFnZ2VkLlxuICAgICAgdGhpcy5jcmVhdGVNdWx0aXNpZ1Jvb3QoJ3NlY3AyNTZrMU11bHRpc2lnJywgc2FmZUlkLCBwYXNzcGhyYXNlLCBlbnRlcnByaXNlKSxcbiAgICAgIHRoaXMuY3JlYXRlTXVsdGlzaWdSb290KCdlZDI1NTE5TXVsdGlzaWcnLCBzYWZlSWQsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UpLFxuICAgICAgLy8gUGhhc2UgMi4yIOKAlCBNUEMgcm9vdHMgKOKRoeKRoik6IHRoZSBleGlzdGluZyBES0xTICjikaEpIGFuZCBFZERTQSAo4pGiKSBjZXJlbW9uaWVzLCBzYWZlSWQgdGhyZWFkZWQuXG4gICAgICB0aGlzLmNyZWF0ZU1wY1Jvb3QoJ2VjZHNhTXBjJywgc2FmZUlkLCBwYXNzcGhyYXNlLCBlbnRlcnByaXNlKSxcbiAgICAgIHRoaXMuY3JlYXRlTXBjUm9vdCgnZWRkc2FNcGMnLCBzYWZlSWQsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UpLFxuICAgIF0pO1xuXG4gICAgLy8gU2luZ2xlIHBhc3Mgb3ZlciB0aGUgc2V0dGxlZCByZXN1bHRzOiBgc3RhdHVzID09PSAnZnVsZmlsbGVkJ2AgbmFycm93cyBgLnZhbHVlYCB0byBhXG4gICAgLy8gUm9vdEtleVRyaXBsZXQgKG5vIGNhc3QgbmVlZGVkKSwgYW5kIHJlamVjdGlvbnMgYXJlIGNvbGxlY3RlZCBwZXItc2xvdCBmb3IgdGhlIGVycm9yIGJlbG93LlxuICAgIGNvbnN0IGhvdCA9IHt9IGFzIFNhZmVLZXlzWydyb290S2V5cyddWydob3QnXTtcbiAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICAgIGhvdFtzbG90c1tpXV0gPSByZXN1bHQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWFzb24gPSByZXN1bHQucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHQucmVhc29uLm1lc3NhZ2UgOiBTdHJpbmcocmVzdWx0LnJlYXNvbik7XG4gICAgICAgIGZhaWx1cmVzLnB1c2goYCR7c2xvdHNbaV19OiAke3JlYXNvbn1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBCZXN0LWVmZm9ydCBhYmFuZG9uIHRoZSBwYXJ0aWFsbHktY3JlYXRlZCBzYWZlIHNvIGEgcmV0cnkgc3RhcnRzIGZyb20gYSBjbGVhbiBzbGF0ZS4gS2VlcFxuICAgICAgLy8gdGhlIGNlcmVtb255IGZhaWx1cmVzIGFzIHRoZSBwcmltYXJ5IGVycm9yOyBub3RlIGl0IGlmIHRoZSBjbGVhbnVwIGFyY2hpdmUgYWxzbyBmYWlsZWQuXG4gICAgICBsZXQgYXJjaGl2ZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXJjaGl2ZVNhZmUoc2FmZUlkKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXJjaGl2ZUVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZSA6IG5ldyBFcnJvcihTdHJpbmcoZSkpO1xuICAgICAgfVxuICAgICAgbGV0IG1lc3NhZ2UgPVxuICAgICAgICBgU2FmZSBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQgZm9yICR7ZmFpbHVyZXMubGVuZ3RofSByb290IGNlcmVtb255L2llcyBgICtcbiAgICAgICAgYFske2ZhaWx1cmVzLmpvaW4oJzsgJyl9XS4gVGhlIHNhZmUgKCR7c2FmZUlkfSkgaGFzIGJlZW4gYXJjaGl2ZWQ7IGNyZWF0ZSBhIG5ldyBzYWZlIGFuZCByZXRyeS5gO1xuICAgICAgaWYgKGFyY2hpdmVFcnJvcikge1xuICAgICAgICBtZXNzYWdlICs9IGAgTk9URTogYXJjaGl2aW5nIHRoZSBzYWZlIGFsc28gZmFpbGVkICgke2FyY2hpdmVFcnJvci5tZXNzYWdlfSk7IGFyY2hpdmUgaXQgbWFudWFsbHkgYmVmb3JlIHJldHJ5aW5nLmA7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcm9vdEtleXM6IHsgaG90IH0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcmNoaXZlIGEgc2FmZS4gQWxzbyB0aGUgYWJhbmRvbm1lbnQgcGF0aCBmb3IgYSBzdHVjayBgaW5pdGlhbGl6aW5nYCBzYWZlICh1c2VkIGJ5XG4gICAqIGBjcmVhdGVTYWZlS2V5c2AgdG8gY2xlYW4gdXAgYWZ0ZXIgYSBmYWlsZWQgY2VyZW1vbnkpLlxuICAgKiBQT1NUIC9hcGkvdjIvZW50ZXJwcmlzZS86ZUlkL3NhZmVzLzpzYWZlSWQvYXJjaGl2ZVxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBhcmNoaXZlU2FmZShzYWZlSWQ6IHN0cmluZyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy51cmwoYC8ke3NhZmVJZH0vYXJjaGl2ZWApKVxuICAgICAgLnNlbmQoKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIGNvbnN0IHNhZmVEYXRhID0gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gICAgcmV0dXJuIG5ldyBTYWZlKHRoaXMuYml0Z28sIHNhZmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaGFzZSAzIOKAlCBmaW5hbGl6ZSBhIHNhZmUgd2l0aCB0aGUgMTIgcm9vdCBrZXkgaWRzIGFzIDQgb3JkZXJlZCBbdXNlciwgYmFja3VwLCBiaXRnb10gdHJpcGxldHMuXG4gICAqIFBPU1QgL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMvOnNhZmVJZC9maW5hbGl6ZSB7IHJvb3RLZXlzIH0uXG4gICAqIElkZW1wb3RlbnQ6IHJlLWZpbmFsaXppbmcgd2l0aCB0aGUgc2FtZSBgcm9vdEtleXNgIHJldHVybnMgdGhlIGFjdGl2ZSBzYWZlIGFnYWluICgyMDApLlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBmaW5hbGl6ZVNhZmUoc2FmZUlkOiBzdHJpbmcsIHBhcmFtczogRmluYWxpemVTYWZlT3B0aW9ucyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdFdpdGhDb2RlYyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLnVybChgLyR7c2FmZUlkfS9maW5hbGl6ZWApLFxuICAgICAgRmluYWxpemVTYWZlQm9keSxcbiAgICAgIHBhcmFtc1xuICAgICkucmVzdWx0KCk7XG4gICAgY29uc3Qgc2FmZURhdGEgPSBkZWNvZGVXaXRoQ29kZWMoU2FmZURhdGEsIHJlc3BvbnNlLCAnU2FmZURhdGEnKTtcbiAgICByZXR1cm4gbmV3IFNhZmUodGhpcy5iaXRnbywgc2FmZURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvaW4gdXNlZCB0byByb3V0ZSBhIGdpdmVuIHJvb3QncyBrZXkgY2VyZW1vbnkgKHNlZSBST09UX0NPSU5fQllfTkVUV09SSykuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHByaXZhdGUgY29pbkZvclJvb3Qoc2xvdDogUm9vdEtleVR5cGUpOiBJQmFzZUNvaW4ge1xuICAgIC8vIFYxTmV0d29yayBpcyBleGFjdGx5ICdiaXRjb2luJyB8ICd0ZXN0bmV0Jywgc28gdGhpcyBicmFuY2ggaXMgZXhoYXVzdGl2ZSBvdmVyIGV2ZXJ5XG4gICAgLy8gZW52aXJvbm1lbnQ6ICdiaXRjb2luJyBpcyBtYWlubmV0IGFuZCBldmVyeSBvdGhlciB2YWx1ZSBpcyBhIHRlc3RuZXQuXG4gICAgY29uc3QgbmV0d29yayA9IEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5uZXR3b3JrID09PSAnYml0Y29pbicgPyAnbWFpbm5ldCcgOiAndGVzdG5ldCc7XG4gICAgcmV0dXJuIHRoaXMuYml0Z28uY29pbihST09UX0NPSU5fQllfTkVUV09SS1tuZXR3b3JrXVtzbG90XSk7XG4gIH1cblxuICAvKipcbiAgICogUGhhc2UgMi4xIGhlbHBlciDigJQgbWludCBvbmUgb25jaGFpbi1tdWx0aXNpZyByb290IChjb2xkIG1vZGVsLCBhcyB3YWxsZXQgY3JlYXRpb24gZG9lcyB0b2RheSk6XG4gICAqIGdlbmVyYXRlIHVzZXIvYmFja3VwIGtleXBhaXJzIGxvY2FsbHksIGVuY3J5cHQgd2l0aCBgcGFzc3BocmFzZWAsIHJlZ2lzdGVyIHZpYSBQT1NUIC86Y29pbi9rZXlcbiAgICogd2l0aCBgc2FmZUlkYDsgdGhlIEJpdEdvIGtleSBpcyBjcmVhdGVkIHRocm91Z2ggdGhlIHNhbWUgcm91dGUncyBgc291cmNlOidiaXRnbydgIHBhdGguXG4gICAqIFJldHVybnMgdGhlIFt1c2VyLCBiYWNrdXAsIGJpdGdvXSBrZXkgaWQgdHJpcGxldC5cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVNdWx0aXNpZ1Jvb3QoXG4gICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyB8ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgIHNhZmVJZDogc3RyaW5nLFxuICAgIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBlbnRlcnByaXNlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSb290S2V5VHJpcGxldD4ge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IHRoaXMuY29pbkZvclJvb3Qoc2xvdCkua2V5Y2hhaW5zKCk7XG5cbiAgICBjb25zdCB1c2VyS2V5UGFpciA9IGtleWNoYWlucy5jcmVhdGUoKTtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0ga2V5Y2hhaW5zLmFkZCh7XG4gICAgICBwdWI6IHVzZXJLZXlQYWlyLnB1YixcbiAgICAgIGVuY3J5cHRlZFBydjogYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHVzZXJLZXlQYWlyLnBydiwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSksXG4gICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIHNhZmVJZCxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSBrZXljaGFpbnMuY3JlYXRlQmFja3VwKHsgcGFzc3BocmFzZSwgc2FmZUlkIH0pO1xuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW5Qcm9taXNlID0ga2V5Y2hhaW5zLmNyZWF0ZUJpdEdvKHsgZW50ZXJwcmlzZSwgc2FmZUlkIH0pO1xuXG4gICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdXNlcktleWNoYWluUHJvbWlzZSxcbiAgICAgIGJhY2t1cEtleWNoYWluUHJvbWlzZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW5Qcm9taXNlLFxuICAgIF0pO1xuICAgIHJldHVybiBbdXNlcktleWNoYWluLmlkLCBiYWNrdXBLZXljaGFpbi5pZCwgYml0Z29LZXljaGFpbi5pZF07XG4gIH1cblxuICAvKipcbiAgICogUGhhc2UgMi4yIGhlbHBlciDigJQgcnVuIG9uZSBNUEMgY2VyZW1vbnkgKERLTFMgZm9yIGVjZHNhTXBjLCBFZERTQSBmb3IgZWRkc2FNcGMpIHZpYSB0aGVcbiAgICogZXhpc3RpbmcgYGNyZWF0ZU1wY2AgZmxvdyB3aXRoIGBzYWZlSWRgIHRocmVhZGVkIHRocm91Z2gsIHNvIHRoZSByZXN1bHRpbmcgdXNlci9iYWNrdXAvYml0Z29cbiAgICoga2V5cyBsYW5kIHRhZ2dlZC4gUmV0dXJucyB0aGUgW3VzZXIsIGJhY2t1cCwgYml0Z29dIGtleSBpZCB0cmlwbGV0LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNyZWF0ZU1wY1Jvb3QoXG4gICAgc2xvdDogJ2VjZHNhTXBjJyB8ICdlZGRzYU1wYycsXG4gICAgc2FmZUlkOiBzdHJpbmcsXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIGVudGVycHJpc2U6IHN0cmluZ1xuICApOiBQcm9taXNlPFJvb3RLZXlUcmlwbGV0PiB7XG4gICAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluIH0gPSBhd2FpdCB0aGlzLmNvaW5Gb3JSb290KHNsb3QpXG4gICAgICAua2V5Y2hhaW5zKClcbiAgICAgIC5jcmVhdGVNcGMoeyBtdWx0aXNpZ1R5cGU6ICd0c3MnLCBwYXNzcGhyYXNlLCBlbnRlcnByaXNlLCBzYWZlSWQgfSk7XG4gICAgcmV0dXJuIFt1c2VyS2V5Y2hhaW4uaWQsIGJhY2t1cEtleWNoYWluLmlkLCBiaXRnb0tleWNoYWluLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHRoZSBlbnRlcnByaXNlJ3Mgc2FmZXMgdGhlIGNhbGxlciBpcyBhIG1lbWJlciBvZiAoY3Vyc29yIHBhZ2luYXRpb24pLlxuICAgKiBHRVQgL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXM/bGltaXQmcHJldklkXG4gICAqXG4gICAqIGBjdXJzb3JgIGlzIHRoZSBvcGFxdWUgYG5leHRDdXJzb3JgIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbDsgcGFnZSBmb3J3YXJkIHVudGlsXG4gICAqIGBuZXh0Q3Vyc29yYCBpcyBhYnNlbnQuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIGFzeW5jIGxpc3QocGFyYW1zOiBMaXN0U2FmZXNPcHRpb25zID0ge30pOiBQcm9taXNlPHsgc2FmZXM6IFNhZmVbXTsgbmV4dEN1cnNvcj86IHN0cmluZyB9PiB7XG4gICAgLy8gU0RLIGV4cG9zZXMgYW4gb3BhcXVlIGN1cnNvcjsgV1Agc3BlYWtzIHByZXZJZC9uZXh0QmF0Y2hQcmV2SWQgKHYyIGxpc3QgY29udmVudGlvbikuXG4gICAgY29uc3QgcXVlcnk6IHsgbGltaXQ/OiBudW1iZXI7IHByZXZJZD86IHN0cmluZyB9ID0ge307XG4gICAgaWYgKHBhcmFtcy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBxdWVyeS5saW1pdCA9IHBhcmFtcy5saW1pdDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5jdXJzb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcXVlcnkucHJldklkID0gcGFyYW1zLmN1cnNvcjtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgpKS5xdWVyeShxdWVyeSkucmVzdWx0KCk7XG4gICAgY29uc3QgeyBzYWZlcywgbmV4dEJhdGNoUHJldklkIH0gPSBkZWNvZGVXaXRoQ29kZWMoTGlzdFNhZmVzUmVzcG9uc2UsIHJlc3BvbnNlLCAnTGlzdFNhZmVzUmVzcG9uc2UnKTtcbiAgICByZXR1cm4ge1xuICAgICAgc2FmZXM6IHNhZmVzLm1hcCgoc2FmZURhdGEpID0+IG5ldyBTYWZlKHRoaXMuYml0Z28sIHNhZmVEYXRhKSksXG4gICAgICBuZXh0Q3Vyc29yOiBuZXh0QmF0Y2hQcmV2SWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhIHNpbmdsZSBzYWZlIGJ5IGlkLiBOb24tbWVtYmVycyBnZXQgYSA0MDQgKGV4aXN0ZW5jZSBpcyBub3QgbGVha2VkKS5cbiAgICogR0VUIC9hcGkvdjIvZW50ZXJwcmlzZS86ZUlkL3NhZmVzLzpzYWZlSWRcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgYXN5bmMgZ2V0KHBhcmFtczogR2V0U2FmZU9wdGlvbnMpOiBQcm9taXNlPFNhZmU+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKGAvJHtwYXJhbXMuaWR9YCkpLnJlc3VsdCgpO1xuICAgIGNvbnN0IHNhZmVEYXRhID0gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gICAgcmV0dXJuIG5ldyBTYWZlKHRoaXMuYml0Z28sIHNhZmVEYXRhKTtcbiAgfVxufVxuIl19
@@ -253,12 +253,38 @@ describe('Safes', function () {
253
253
  result.status().should.equal('active');
254
254
  });
255
255
  });
256
- describe('unimplemented lifecycle methods', function () {
257
- it('list throws (Phase 3)', async function () {
258
- await safes.list().should.be.rejectedWith(/not yet implemented .*Phase 3/);
256
+ describe('get', function () {
257
+ it('GETs the safe URL and returns a Safe', async function () {
258
+ mockBitGo.get = sinon.stub().returns({ result: sinon.stub().resolves(safeDataWire) });
259
+ const result = await safes.get({ id: 'test-safe-id' });
260
+ result.should.be.instanceof(src_1.Safe);
261
+ result.id().should.equal('test-safe-id');
262
+ sinon.assert.calledWith(mockBitGo.get, '/enterprise/test-enterprise-id/safes/test-safe-id');
263
+ });
264
+ });
265
+ describe('list', function () {
266
+ it('GETs the safes collection and maps the response to Safes', async function () {
267
+ const query = sinon.stub().returnsThis();
268
+ const result = sinon.stub().resolves({ safes: [safeDataWire], nextBatchPrevId: 'next-page-id' });
269
+ mockBitGo.get = sinon.stub().returns({ query, result });
270
+ const page = await safes.list();
271
+ page.safes.should.have.length(1);
272
+ page.safes[0].should.be.instanceof(src_1.Safe);
273
+ page.safes[0].id().should.equal('test-safe-id');
274
+ page.should.have.property('nextCursor', 'next-page-id');
275
+ sinon.assert.calledWith(mockBitGo.get, '/enterprise/test-enterprise-id/safes');
276
+ // no cursor/limit passed → empty query
277
+ sinon.assert.calledWith(query, {});
259
278
  });
260
- it('get throws (Phase 3)', async function () {
261
- await safes.get({ id: 'vid' }).should.be.rejectedWith(/not yet implemented .*Phase 3/);
279
+ it('maps cursor→prevId and limit onto the query', async function () {
280
+ const query = sinon.stub().returnsThis();
281
+ const result = sinon.stub().resolves({ safes: [] });
282
+ mockBitGo.get = sinon.stub().returns({ query, result });
283
+ const page = await safes.list({ cursor: 'prev-page-id', limit: 50 });
284
+ page.safes.should.have.length(0);
285
+ // absent nextBatchPrevId → undefined nextCursor (last page)
286
+ (page.nextCursor === undefined).should.be.true();
287
+ sinon.assert.calledWith(query, { limit: 50, prevId: 'prev-page-id' });
262
288
  });
263
289
  });
264
290
  describe('Enterprise.safes() accessor', function () {
@@ -268,4 +294,4 @@ describe('Safes', function () {
268
294
  });
269
295
  });
270
296
  });
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9zYWZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUErQjtBQUMvQixrQkFBZ0I7QUFDaEIseUNBQTBEO0FBRTFELFFBQVEsQ0FBQyxPQUFPLEVBQUU7SUFDaEIsSUFBSSxLQUFZLENBQUM7SUFDakIsSUFBSSxTQUFjLENBQUM7SUFDbkIsTUFBTSxZQUFZLEdBQUc7UUFDbkIsRUFBRSxFQUFFLGNBQWM7UUFDbEIsWUFBWSxFQUFFLG9CQUFvQjtRQUNsQyxLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsUUFBUTtRQUNoQixPQUFPLEVBQUUsWUFBWTtRQUNyQixLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEUsU0FBUyxFQUFFLDBCQUEwQjtLQUN0QyxDQUFDO0lBRUYsVUFBVSxDQUFDO1FBQ1QsU0FBUyxHQUFHO1lBQ1YsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNuRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNuQixDQUFDO1FBQ0YsS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO1lBQzlELE1BQU0s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QUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLO1lBQzlCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw2QkFBNkIsRUFBRTtRQUN0QyxFQUFFLENBQUMsbURBQW1ELEVBQUU7WUFDdEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBVSxDQUFDLFNBQVMsRUFBRSxFQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBFbnRlcnByaXNlLCBTYWZlLCBTYWZlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdTYWZlcycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHNhZmVzOiBTYWZlcztcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBjb25zdCBzYWZlRGF0YVdpcmUgPSB7XG4gICAgaWQ6ICd0ZXN0LXNhZmUtaWQnLFxuICAgIGVudGVycHJpc2VJZDogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsXG4gICAgbGFiZWw6ICdteSBzYWZlJyxcbiAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgIGNyZWF0b3I6ICdjcmVhdG9yLWlkJyxcbiAgICB1c2VyczogW3sgdXNlcklkOiAnY3JlYXRvci1pZCcsIHBlcm1pc3Npb25zOiBbJ2FkbWluJywgJ3NwZW5kJ10gfV0sXG4gICAgY3JlYXRlZEF0OiAnMjAyNi0wNy0wN1QwMDowMDowMC4wMDBaJyxcbiAgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZykgPT4gcGF0aCksXG4gICAgICBwb3N0OiBzaW5vbi5zdHViKCksXG4gICAgfTtcbiAgICBzYWZlcyA9IG5ldyBTYWZlcyhtb2NrQml0R28sICd0ZXN0LWVudGVycHJpc2UtaWQnKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpbml0aWFsaXplU2FmZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnUE9TVHMgdG8gdGhlIHNhZmVzIGNvbGxlY3Rpb24gVVJMIGFuZCByZXR1cm5zIGEgU2FmZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHNhZmVEYXRhV2lyZSkgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZCB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuaW5pdGlhbGl6ZVNhZmUoeyBsYWJlbDogJ215IHNhZmUnIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZSk7XG4gICAgICByZXN1bHQuaWQoKS5zaG91bGQuZXF1YWwoJ3Rlc3Qtc2FmZS1pZCcpO1xuICAgICAgcmVzdWx0LmVudGVycHJpc2VJZCgpLnNob3VsZC5lcXVhbCgndGVzdC1lbnRlcnByaXNlLWlkJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28ucG9zdCwgJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcycpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgoc2VuZCwgeyBsYWJlbDogJ215IHNhZmUnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlU2FmZUtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUGVyLWNvaW4ga2V5Y2hhaW5zKCkgbW9jazogbXVsdGlzaWcgY29pbnMgdXNlIGNyZWF0ZS9hZGQvY3JlYXRlQmFja3VwL2NyZWF0ZUJpdEdvOyBNUEMgY29pbnNcbiAgICAvLyB1c2UgY3JlYXRlTXBjLiBJZHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29pbiBuYW1lIHNvIHdlIGNhbiBhc3NlcnQgcGVyLXNsb3QgY29pbiByb3V0aW5nLlxuICAgIGZ1bmN0aW9uIG1ha2VLZXljaGFpbnMoY29pbjogc3RyaW5nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcHViOiBgJHtjb2lufS1wdWJgLCBwcnY6IGAke2NvaW59LXBydmAgfSksXG4gICAgICAgIGFkZDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6IGAke2NvaW59LXVzZXJgIH0pLFxuICAgICAgICBjcmVhdGVCYWNrdXA6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiBgJHtjb2lufS1iYWNrdXBgIH0pLFxuICAgICAgICBjcmVhdGVCaXRHbzogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6IGAke2NvaW59LWJpdGdvYCB9KSxcbiAgICAgICAgY3JlYXRlTXBjOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICAgIHVzZXJLZXljaGFpbjogeyBpZDogYCR7Y29pbn0tdXNlcmAgfSxcbiAgICAgICAgICBiYWNrdXBLZXljaGFpbjogeyBpZDogYCR7Y29pbn0tYmFja3VwYCB9LFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW46IHsgaWQ6IGAke2NvaW59LWJpdGdvYCB9LFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGtleWNoYWluc0J5Q29pbjogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgbWFrZUtleWNoYWlucz4+O1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNCeUNvaW4gPSB7fTtcbiAgICAgIG1vY2tCaXRHby5nZXRFbnYgPSBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdCcpOyAvLyB0ZXN0bmV0IGNvaW4gbWFwXG4gICAgICBtb2NrQml0R28uZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnZW5jcnlwdGVkLXBydicpO1xuICAgICAgbW9ja0JpdEdvLmNvaW4gPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAga2V5Y2hhaW5zQnlDb2luW25hbWVdID0ga2V5Y2hhaW5zQnlDb2luW25hbWVdIHx8IG1ha2VLZXljaGFpbnMobmFtZSk7XG4gICAgICAgIHJldHVybiB7IGtleWNoYWluczogKCkgPT4ga2V5Y2hhaW5zQnlDb2luW25hbWVdIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdydW5zIHRoZSA0IHJvb3QgY2VyZW1vbmllcyBhbmQgcmV0dXJucyAxMiBpZHMgYXMgb3JkZXJlZCB0cmlwbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICByb290S2V5czoge1xuICAgICAgICAgIGhvdDoge1xuICAgICAgICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6IFsndGJ0Yy11c2VyJywgJ3RidGMtYmFja3VwJywgJ3RidGMtYml0Z28nXSxcbiAgICAgICAgICAgIGVjZHNhTXBjOiBbJ2h0ZXRoLXVzZXInLCAnaHRldGgtYmFja3VwJywgJ2h0ZXRoLWJpdGdvJ10sXG4gICAgICAgICAgICBlZGRzYU1wYzogWyd0c29sLXVzZXInLCAndHNvbC1iYWNrdXAnLCAndHNvbC1iaXRnbyddLFxuICAgICAgICAgICAgZWQyNTUxOU11bHRpc2lnOiBbJ3R4bG0tdXNlcicsICd0eGxtLWJhY2t1cCcsICd0eGxtLWJpdGdvJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RhZ3MgZXZlcnkgbXVsdGlzaWcga2V5IHJlZ2lzdHJhdGlvbiB3aXRoIHNhZmVJZCBhbmQgdGhlIGNvcnJlY3Qgc291cmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2FmZXMuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pO1xuXG4gICAgICBjb25zdCBidGMgPSBrZXljaGFpbnNCeUNvaW5bJ3RidGMnXTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goYnRjLmFkZCwge1xuICAgICAgICBwdWI6ICd0YnRjLXB1YicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1wcnYnLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgc2FmZUlkOiAnc2FmZS0xJyxcbiAgICAgIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChidGMuY3JlYXRlQmFja3VwLCB7IHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGJ0Yy5jcmVhdGVCaXRHbywgeyBlbnRlcnByaXNlOiAndGVzdC1lbnRlcnByaXNlLWlkJywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJlYWRzIHNhZmVJZCArIGVudGVycHJpc2UgaW50byBib3RoIE1QQyBjZXJlbW9uaWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2FmZXMuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pO1xuXG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGtleWNoYWluc0J5Q29pblsnaHRldGgnXS5jcmVhdGVNcGMsIHtcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgcGFzc3BocmFzZTogJ3B3JyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsXG4gICAgICAgIHNhZmVJZDogJ3NhZmUtMScsXG4gICAgICB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goa2V5Y2hhaW5zQnlDb2luWyd0c29sJ10uY3JlYXRlTXBjLCB7XG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwdycsXG4gICAgICAgIGVudGVycHJpc2U6ICd0ZXN0LWVudGVycHJpc2UtaWQnLFxuICAgICAgICBzYWZlSWQ6ICdzYWZlLTEnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2VsZWN0cyBtYWlubmV0IGNvaW5zIGluIGEgcHJvZCBlbnZpcm9ubWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCaXRHby5nZXRFbnYgPSBzaW5vbi5zdHViKCkucmV0dXJucygncHJvZCcpO1xuICAgICAgYXdhaXQgc2FmZXMuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pO1xuXG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28uY29pbiwgJ2J0YycpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLmNvaW4sICdldGgnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5jb2luLCAnc29sJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28uY29pbiwgJ3hsbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1bnMgdGhlIDQgcm9vdCBjZXJlbW9uaWVzIGluIHBhcmFsbGVsIChub25lIGF3YWl0cyBhbm90aGVyKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEdhdGUgZXhhY3RseSBvbmUgY2FsbCBwZXIgcm9vdCBvbiBhIHNoYXJlZCBsYXRjaCB0aGF0IG9ubHkgb3BlbnMgb25jZSBhbGwgNCByb290cyBoYXZlXG4gICAgICAvLyBlbnRlcmVkLiBJZiB0aGUgcm9vdHMgcmFuIHNlcXVlbnRpYWxseSwgdGhlIGZpcnN0IHdvdWxkIGF3YWl0IHRoZSBsYXRjaCBmb3JldmVyIOKGkiB0aGVcbiAgICAgIC8vIHRlc3Qgd291bGQgdGltZSBvdXQ7IGNvbXBsZXRpbmcgcHJvdmVzIGFsbCA0IHdlcmUgaW4gZmxpZ2h0IGNvbmN1cnJlbnRseS5cbiAgICAgIGxldCByZWxlYXNlOiAoKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZ2F0ZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiAocmVsZWFzZSA9IHJlc29sdmUpKTtcbiAgICAgIGxldCBzdGFydGVkID0gMDtcbiAgICAgIGNvbnN0IGdhdGVkID0gKHJlc3VsdDogYW55KSA9PlxuICAgICAgICBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoKytzdGFydGVkID09PSA0KSB7XG4gICAgICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGdhdGU7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICAvLyBvbmUgZ2F0ZWQgZW50cnkgcG9pbnQgcGVyIHJvb3Q6IG11bHRpc2lnIHJvb3RzIHZpYSBjcmVhdGVCaXRHbywgTVBDIHJvb3RzIHZpYSBjcmVhdGVNcGNcbiAgICAgIGtleWNoYWluc0J5Q29pblsndGJ0YyddID0gbWFrZUtleWNoYWlucygndGJ0YycpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0YnRjJ10uY3JlYXRlQml0R28gPSBnYXRlZCh7IGlkOiAndGJ0Yy1iaXRnbycgfSk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXSA9IG1ha2VLZXljaGFpbnMoJ3R4bG0nKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHhsbSddLmNyZWF0ZUJpdEdvID0gZ2F0ZWQoeyBpZDogJ3R4bG0tYml0Z28nIH0pO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWydodGV0aCddID0gbWFrZUtleWNoYWlucygnaHRldGgnKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsnaHRldGgnXS5jcmVhdGVNcGMgPSBnYXRlZCh7XG4gICAgICAgIHVzZXJLZXljaGFpbjogeyBpZDogJ2h0ZXRoLXVzZXInIH0sXG4gICAgICAgIGJhY2t1cEtleWNoYWluOiB7IGlkOiAnaHRldGgtYmFja3VwJyB9LFxuICAgICAgICBiaXRnb0tleWNoYWluOiB7IGlkOiAnaHRldGgtYml0Z28nIH0sXG4gICAgICB9KTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHNvbCddID0gbWFrZUtleWNoYWlucygndHNvbCcpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0c29sJ10uY3JlYXRlTXBjID0gZ2F0ZWQoe1xuICAgICAgICB1c2VyS2V5Y2hhaW46IHsgaWQ6ICd0c29sLXVzZXInIH0sXG4gICAgICAgIGJhY2t1cEtleWNoYWluOiB7IGlkOiAndHNvbC1iYWNrdXAnIH0sXG4gICAgICAgIGJpdGdvS2V5Y2hhaW46IHsgaWQ6ICd0c29sLWJpdGdvJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcbiAgICAgIHN0YXJ0ZWQuc2hvdWxkLmVxdWFsKDQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FyY2hpdmVzIHRoZSBzYWZlIGFuZCB0aHJvd3MgbGlzdGluZyBldmVyeSBmYWlsZWQgY2VyZW1vbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUd28gY2VyZW1vbmllcyBmYWlsIChhbiBNUEMgYW5kIGEgbXVsdGlzaWcgcm9vdCkuXG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ2h0ZXRoJ10gPSBtYWtlS2V5Y2hhaW5zKCdodGV0aCcpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWydodGV0aCddLmNyZWF0ZU1wYyA9IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignZGtscyBib29tJykpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0eGxtJ10gPSBtYWtlS2V5Y2hhaW5zKCd0eGxtJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXS5jcmVhdGVCaXRHbyA9IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignYml0Z28ga2V5IGJvb20nKSk7XG4gICAgICAvLyBhcmNoaXZlIHN1Y2NlZWRzLCByZXR1cm5pbmcgYSB2YWxpZCAoYXJjaGl2ZWQpIFNhZmVEYXRhXG4gICAgICBjb25zdCBzZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IC4uLnNhZmVEYXRhV2lyZSwgc3RhdHVzOiAnYXJjaGl2ZWQnIH0pLFxuICAgICAgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZCB9KTtcblxuICAgICAgY29uc3QgZXJyID0gYXdhaXQgc2FmZXNcbiAgICAgICAgLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvU2FmZSBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQgZm9yIDIgcm9vdC8pO1xuICAgICAgZXJyLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9lY2RzYU1wYzogZGtscyBib29tLyk7XG4gICAgICBlcnIubWVzc2FnZS5zaG91bGQubWF0Y2goL2VkMjU1MTlNdWx0aXNpZzogYml0Z28ga2V5IGJvb20vKTtcbiAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5tYXRjaCgvaGFzIGJlZW4gYXJjaGl2ZWQvKTtcbiAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5ub3QubWF0Y2goL2FyY2hpdmluZyB0aGUgc2FmZSBhbHNvIGZhaWxlZC8pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnBvc3QsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvc2FmZS0xL2FyY2hpdmUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdub3RlcyB3aGVuIGFyY2hpdmluZyBhbHNvIGZhaWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0c29sJ10gPSBtYWtlS2V5Y2hhaW5zKCd0c29sJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3Rzb2wnXS5jcmVhdGVNcGMgPSBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ2VkZHNhIGJvb20nKSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignYXJjaGl2ZSA1MDAnKSkgfSksXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgc2FmZXNcbiAgICAgICAgLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvYXJjaGl2aW5nIHRoZSBzYWZlIGFsc28gZmFpbGVkIFxcKGFyY2hpdmUgNTAwXFwpLiphcmNoaXZlIGl0IG1hbnVhbGx5Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmaW5hbGl6ZVNhZmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgcm9vdEtleXMgPSB7XG4gICAgICBob3Q6IHtcbiAgICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6IFsndTEnLCAnYjEnLCAnZzEnXSBhcyBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10sXG4gICAgICAgIGVjZHNhTXBjOiBbJ3UyJywgJ2IyJywgJ2cyJ10gYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgICBlZGRzYU1wYzogWyd1MycsICdiMycsICdnMyddIGFzIFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSxcbiAgICAgICAgZWQyNTUxOU11bHRpc2lnOiBbJ3U0JywgJ2I0JywgJ2c0J10gYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaXQoJ1BPU1RzIHRoZSByb290S2V5cyB0byB0aGUgZmluYWxpemUgVVJMIGFuZCByZXR1cm5zIHRoZSBhY3RpdmUgU2FmZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHNhZmVEYXRhV2lyZSkgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZCB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuZmluYWxpemVTYWZlKCd0ZXN0LXNhZmUtaWQnLCB7IHJvb3RLZXlzIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZSk7XG4gICAgICByZXN1bHQuc3RhdHVzKCkuc2hvdWxkLmVxdWFsKCdhY3RpdmUnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5wb3N0LCAnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3Rlc3Qtc2FmZS1pZC9maW5hbGl6ZScpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChzZW5kLCB7IHJvb3RLZXlzIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYXJjaGl2ZVNhZmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ1BPU1RzIHRvIHRoZSBhcmNoaXZlIFVSTCBhbmQgcmV0dXJucyB0aGUgYXJjaGl2ZWQgU2FmZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgLi4uc2FmZURhdGFXaXJlLCBzdGF0dXM6ICdhcmNoaXZlZCcgfSkgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZCB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuYXJjaGl2ZVNhZmUoJ3Rlc3Qtc2FmZS1pZCcpO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZSk7XG4gICAgICByZXN1bHQuc3RhdHVzKCkuc2hvdWxkLmVxdWFsKCdhcmNoaXZlZCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnBvc3QsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkL2FyY2hpdmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlU2FmZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnY2hhaW5zIGluaXRpYWxpemUg4oaSIGNyZWF0ZVNhZmVLZXlzIOKGkiBmaW5hbGl6ZSwgdGhyZWFkaW5nIHRoZSBzYWZlSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbml0aWFsaXppbmcgPSBuZXcgU2FmZShtb2NrQml0R28sIHsgLi4uc2FmZURhdGFXaXJlLCBzdGF0dXM6ICdpbml0aWFsaXppbmcnIH0gYXMgYW55KTtcbiAgICAgIGNvbnN0IHJvb3RLZXlzID0geyByb290S2V5czogeyBob3Q6IHt9IH0gfSBhcyBhbnk7XG4gICAgICBjb25zdCBpbml0U3R1YiA9IHNpbm9uLnN0dWIoc2FmZXMsICdpbml0aWFsaXplU2FmZScpLnJlc29sdmVzKGluaXRpYWxpemluZyk7XG4gICAgICBjb25zdCBrZXlzU3R1YiA9IHNpbm9uLnN0dWIoc2FmZXMsICdjcmVhdGVTYWZlS2V5cycpLnJlc29sdmVzKHJvb3RLZXlzKTtcbiAgICAgIGNvbnN0IGZpbmFsaXplU3R1YiA9IHNpbm9uLnN0dWIoc2FmZXMsICdmaW5hbGl6ZVNhZmUnKS5yZXNvbHZlcyhuZXcgU2FmZShtb2NrQml0R28sIHNhZmVEYXRhV2lyZSBhcyBhbnkpKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuZ2VuZXJhdGVTYWZlKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3JyB9KTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChpbml0U3R1YiwgeyBsYWJlbDogJ215IHNhZmUnIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChrZXlzU3R1YiwgeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICd0ZXN0LXNhZmUtaWQnIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgoZmluYWxpemVTdHViLCAndGVzdC1zYWZlLWlkJywgcm9vdEtleXMpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxPcmRlcihpbml0U3R1Yiwga2V5c1N0dWIsIGZpbmFsaXplU3R1Yik7XG4gICAgICByZXN1bHQuc3RhdHVzKCkuc2hvdWxkLmVxdWFsKCdhY3RpdmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VuaW1wbGVtZW50ZWQgbGlmZWN5Y2xlIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2xpc3QgdGhyb3dzIChQaGFzZSAzKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmVzLmxpc3QoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub3QgeWV0IGltcGxlbWVudGVkIC4qUGhhc2UgMy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dldCB0aHJvd3MgKFBoYXNlIDMpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2FmZXMuZ2V0KHsgaWQ6ICd2aWQnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCB5ZXQgaW1wbGVtZW50ZWQgLipQaGFzZSAzLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFbnRlcnByaXNlLnNhZmVzKCkgYWNjZXNzb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3JldHVybnMgYSBTYWZlcyBpbnN0YW5jZSBzY29wZWQgdG8gdGhlIGVudGVycHJpc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbnRlcnByaXNlID0gbmV3IEVudGVycHJpc2UobW9ja0JpdEdvLCB7fSBhcyBhbnksIHsgaWQ6ICdlbnQtaWQnLCBuYW1lOiAnZW50JyB9KTtcbiAgICAgIGVudGVycHJpc2Uuc2FmZXMoKS5zaG91bGQuYmUuaW5zdGFuY2VvZihTYWZlcyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9zYWZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUErQjtBQUMvQixrQkFBZ0I7QUFDaEIseUNBQTBEO0FBRTFELFFBQVEsQ0FBQyxPQUFPLEVBQUU7SUFDaEIsSUFBSSxLQUFZLENBQUM7SUFDakIsSUFBSSxTQUFjLENBQUM7SUFDbkIsTUFBTSxZQUFZLEdBQUc7UUFDbkIsRUFBRSxFQUFFLGNBQWM7UUFDbEIsWUFBWSxFQUFFLG9CQUFvQjtRQUNsQyxLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsUUFBUTtRQUNoQixPQUFPLEVBQUUsWUFBWTtRQUNyQixLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEUsU0FBUyxFQUFFLDBCQUEwQjtLQUN0QyxDQUFDO0lBRUYsVUFBVSxDQUFDO1FBQ1QsU0FBUyxHQUFHO1lBQ1YsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNuRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNuQixDQUFDO1FBQ0YsS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO1lBQzlELE1BQU0s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QUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsNkJBQTZCLEVBQUU7UUFDdEMsRUFBRSxDQUFDLG1EQUFtRCxFQUFFO1lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUksZ0JBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2RixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgRW50ZXJwcmlzZSwgU2FmZSwgU2FmZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnU2FmZXMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBzYWZlczogU2FmZXM7XG4gIGxldCBtb2NrQml0R286IGFueTtcbiAgY29uc3Qgc2FmZURhdGFXaXJlID0ge1xuICAgIGlkOiAndGVzdC1zYWZlLWlkJyxcbiAgICBlbnRlcnByaXNlSWQ6ICd0ZXN0LWVudGVycHJpc2UtaWQnLFxuICAgIGxhYmVsOiAnbXkgc2FmZScsXG4gICAgc3RhdHVzOiAnYWN0aXZlJyxcbiAgICBjcmVhdG9yOiAnY3JlYXRvci1pZCcsXG4gICAgdXNlcnM6IFt7IHVzZXJJZDogJ2NyZWF0b3ItaWQnLCBwZXJtaXNzaW9uczogWydhZG1pbicsICdzcGVuZCddIH1dLFxuICAgIGNyZWF0ZWRBdDogJzIwMjYtMDctMDdUMDA6MDA6MDAuMDAwWicsXG4gIH07XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgdXJsOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKChwYXRoOiBzdHJpbmcpID0+IHBhdGgpLFxuICAgICAgcG9zdDogc2lub24uc3R1YigpLFxuICAgIH07XG4gICAgc2FmZXMgPSBuZXcgU2FmZXMobW9ja0JpdEdvLCAndGVzdC1lbnRlcnByaXNlLWlkJyk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnaW5pdGlhbGl6ZVNhZmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ1BPU1RzIHRvIHRoZSBzYWZlcyBjb2xsZWN0aW9uIFVSTCBhbmQgcmV0dXJucyBhIFNhZmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhzYWZlRGF0YVdpcmUpIH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7IHNlbmQgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmVzLmluaXRpYWxpemVTYWZlKHsgbGFiZWw6ICdteSBzYWZlJyB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5pbnN0YW5jZW9mKFNhZmUpO1xuICAgICAgcmVzdWx0LmlkKCkuc2hvdWxkLmVxdWFsKCd0ZXN0LXNhZmUtaWQnKTtcbiAgICAgIHJlc3VsdC5lbnRlcnByaXNlSWQoKS5zaG91bGQuZXF1YWwoJ3Rlc3QtZW50ZXJwcmlzZS1pZCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnBvc3QsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKHNlbmQsIHsgbGFiZWw6ICdteSBzYWZlJyB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZVNhZmVLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFBlci1jb2luIGtleWNoYWlucygpIG1vY2s6IG11bHRpc2lnIGNvaW5zIHVzZSBjcmVhdGUvYWRkL2NyZWF0ZUJhY2t1cC9jcmVhdGVCaXRHbzsgTVBDIGNvaW5zXG4gICAgLy8gdXNlIGNyZWF0ZU1wYy4gSWRzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvaW4gbmFtZSBzbyB3ZSBjYW4gYXNzZXJ0IHBlci1zbG90IGNvaW4gcm91dGluZy5cbiAgICBmdW5jdGlvbiBtYWtlS2V5Y2hhaW5zKGNvaW46IHN0cmluZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IHB1YjogYCR7Y29pbn0tcHViYCwgcHJ2OiBgJHtjb2lufS1wcnZgIH0pLFxuICAgICAgICBhZGQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiBgJHtjb2lufS11c2VyYCB9KSxcbiAgICAgICAgY3JlYXRlQmFja3VwOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDogYCR7Y29pbn0tYmFja3VwYCB9KSxcbiAgICAgICAgY3JlYXRlQml0R286IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiBgJHtjb2lufS1iaXRnb2AgfSksXG4gICAgICAgIGNyZWF0ZU1wYzogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICB1c2VyS2V5Y2hhaW46IHsgaWQ6IGAke2NvaW59LXVzZXJgIH0sXG4gICAgICAgICAgYmFja3VwS2V5Y2hhaW46IHsgaWQ6IGAke2NvaW59LWJhY2t1cGAgfSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluOiB7IGlkOiBgJHtjb2lufS1iaXRnb2AgfSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBrZXljaGFpbnNCeUNvaW46IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIG1ha2VLZXljaGFpbnM+PjtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAga2V5Y2hhaW5zQnlDb2luID0ge307XG4gICAgICBtb2NrQml0R28uZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKTsgLy8gdGVzdG5ldCBjb2luIG1hcFxuICAgICAgbW9ja0JpdEdvLmVuY3J5cHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2VuY3J5cHRlZC1wcnYnKTtcbiAgICAgIG1vY2tCaXRHby5jb2luID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGtleWNoYWluc0J5Q29pbltuYW1lXSA9IGtleWNoYWluc0J5Q29pbltuYW1lXSB8fCBtYWtlS2V5Y2hhaW5zKG5hbWUpO1xuICAgICAgICByZXR1cm4geyBrZXljaGFpbnM6ICgpID0+IGtleWNoYWluc0J5Q29pbltuYW1lXSB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVucyB0aGUgNCByb290IGNlcmVtb25pZXMgYW5kIHJldHVybnMgMTIgaWRzIGFzIG9yZGVyZWQgdHJpcGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgcm9vdEtleXM6IHtcbiAgICAgICAgICBob3Q6IHtcbiAgICAgICAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiBbJ3RidGMtdXNlcicsICd0YnRjLWJhY2t1cCcsICd0YnRjLWJpdGdvJ10sXG4gICAgICAgICAgICBlY2RzYU1wYzogWydodGV0aC11c2VyJywgJ2h0ZXRoLWJhY2t1cCcsICdodGV0aC1iaXRnbyddLFxuICAgICAgICAgICAgZWRkc2FNcGM6IFsndHNvbC11c2VyJywgJ3Rzb2wtYmFja3VwJywgJ3Rzb2wtYml0Z28nXSxcbiAgICAgICAgICAgIGVkMjU1MTlNdWx0aXNpZzogWyd0eGxtLXVzZXInLCAndHhsbS1iYWNrdXAnLCAndHhsbS1iaXRnbyddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd0YWdzIGV2ZXJ5IG11bHRpc2lnIGtleSByZWdpc3RyYXRpb24gd2l0aCBzYWZlSWQgYW5kIHRoZSBjb3JyZWN0IHNvdXJjZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcblxuICAgICAgY29uc3QgYnRjID0ga2V5Y2hhaW5zQnlDb2luWyd0YnRjJ107XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGJ0Yy5hZGQsIHtcbiAgICAgICAgcHViOiAndGJ0Yy1wdWInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtcHJ2JyxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIHNhZmVJZDogJ3NhZmUtMScsXG4gICAgICB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goYnRjLmNyZWF0ZUJhY2t1cCwgeyBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChidGMuY3JlYXRlQml0R28sIHsgZW50ZXJwcmlzZTogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyZWFkcyBzYWZlSWQgKyBlbnRlcnByaXNlIGludG8gYm90aCBNUEMgY2VyZW1vbmllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChrZXljaGFpbnNCeUNvaW5bJ2h0ZXRoJ10uY3JlYXRlTXBjLCB7XG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwdycsXG4gICAgICAgIGVudGVycHJpc2U6ICd0ZXN0LWVudGVycHJpc2UtaWQnLFxuICAgICAgICBzYWZlSWQ6ICdzYWZlLTEnLFxuICAgICAgfSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGtleWNoYWluc0J5Q29pblsndHNvbCddLmNyZWF0ZU1wYywge1xuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICBwYXNzcGhyYXNlOiAncHcnLFxuICAgICAgICBlbnRlcnByaXNlOiAndGVzdC1lbnRlcnByaXNlLWlkJyxcbiAgICAgICAgc2FmZUlkOiAnc2FmZS0xJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlbGVjdHMgbWFpbm5ldCBjb2lucyBpbiBhIHByb2QgZW52aXJvbm1lbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrQml0R28uZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Byb2QnKTtcbiAgICAgIGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLmNvaW4sICdidGMnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5jb2luLCAnZXRoJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28uY29pbiwgJ3NvbCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLmNvaW4sICd4bG0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW5zIHRoZSA0IHJvb3QgY2VyZW1vbmllcyBpbiBwYXJhbGxlbCAobm9uZSBhd2FpdHMgYW5vdGhlciknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBHYXRlIGV4YWN0bHkgb25lIGNhbGwgcGVyIHJvb3Qgb24gYSBzaGFyZWQgbGF0Y2ggdGhhdCBvbmx5IG9wZW5zIG9uY2UgYWxsIDQgcm9vdHMgaGF2ZVxuICAgICAgLy8gZW50ZXJlZC4gSWYgdGhlIHJvb3RzIHJhbiBzZXF1ZW50aWFsbHksIHRoZSBmaXJzdCB3b3VsZCBhd2FpdCB0aGUgbGF0Y2ggZm9yZXZlciDihpIgdGhlXG4gICAgICAvLyB0ZXN0IHdvdWxkIHRpbWUgb3V0OyBjb21wbGV0aW5nIHByb3ZlcyBhbGwgNCB3ZXJlIGluIGZsaWdodCBjb25jdXJyZW50bHkuXG4gICAgICBsZXQgcmVsZWFzZTogKCkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGdhdGUgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKHJlbGVhc2UgPSByZXNvbHZlKSk7XG4gICAgICBsZXQgc3RhcnRlZCA9IDA7XG4gICAgICBjb25zdCBnYXRlZCA9IChyZXN1bHQ6IGFueSkgPT5cbiAgICAgICAgc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKCsrc3RhcnRlZCA9PT0gNCkge1xuICAgICAgICAgICAgcmVsZWFzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBnYXRlO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgLy8gb25lIGdhdGVkIGVudHJ5IHBvaW50IHBlciByb290OiBtdWx0aXNpZyByb290cyB2aWEgY3JlYXRlQml0R28sIE1QQyByb290cyB2aWEgY3JlYXRlTXBjXG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3RidGMnXSA9IG1ha2VLZXljaGFpbnMoJ3RidGMnKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndGJ0YyddLmNyZWF0ZUJpdEdvID0gZ2F0ZWQoeyBpZDogJ3RidGMtYml0Z28nIH0pO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0eGxtJ10gPSBtYWtlS2V5Y2hhaW5zKCd0eGxtJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXS5jcmVhdGVCaXRHbyA9IGdhdGVkKHsgaWQ6ICd0eGxtLWJpdGdvJyB9KTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsnaHRldGgnXSA9IG1ha2VLZXljaGFpbnMoJ2h0ZXRoJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ2h0ZXRoJ10uY3JlYXRlTXBjID0gZ2F0ZWQoe1xuICAgICAgICB1c2VyS2V5Y2hhaW46IHsgaWQ6ICdodGV0aC11c2VyJyB9LFxuICAgICAgICBiYWNrdXBLZXljaGFpbjogeyBpZDogJ2h0ZXRoLWJhY2t1cCcgfSxcbiAgICAgICAgYml0Z29LZXljaGFpbjogeyBpZDogJ2h0ZXRoLWJpdGdvJyB9LFxuICAgICAgfSk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3Rzb2wnXSA9IG1ha2VLZXljaGFpbnMoJ3Rzb2wnKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHNvbCddLmNyZWF0ZU1wYyA9IGdhdGVkKHtcbiAgICAgICAgdXNlcktleWNoYWluOiB7IGlkOiAndHNvbC11c2VyJyB9LFxuICAgICAgICBiYWNrdXBLZXljaGFpbjogeyBpZDogJ3Rzb2wtYmFja3VwJyB9LFxuICAgICAgICBiaXRnb0tleWNoYWluOiB7IGlkOiAndHNvbC1iaXRnbycgfSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG4gICAgICBzdGFydGVkLnNob3VsZC5lcXVhbCg0KTtcbiAgICB9KTtcblxuICAgIGl0KCdhcmNoaXZlcyB0aGUgc2FmZSBhbmQgdGhyb3dzIGxpc3RpbmcgZXZlcnkgZmFpbGVkIGNlcmVtb255JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVHdvIGNlcmVtb25pZXMgZmFpbCAoYW4gTVBDIGFuZCBhIG11bHRpc2lnIHJvb3QpLlxuICAgICAga2V5Y2hhaW5zQnlDb2luWydodGV0aCddID0gbWFrZUtleWNoYWlucygnaHRldGgnKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsnaHRldGgnXS5jcmVhdGVNcGMgPSBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ2RrbHMgYm9vbScpKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHhsbSddID0gbWFrZUtleWNoYWlucygndHhsbScpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0eGxtJ10uY3JlYXRlQml0R28gPSBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ2JpdGdvIGtleSBib29tJykpO1xuICAgICAgLy8gYXJjaGl2ZSBzdWNjZWVkcywgcmV0dXJuaW5nIGEgdmFsaWQgKGFyY2hpdmVkKSBTYWZlRGF0YVxuICAgICAgY29uc3Qgc2VuZCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyAuLi5zYWZlRGF0YVdpcmUsIHN0YXR1czogJ2FyY2hpdmVkJyB9KSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7IHNlbmQgfSk7XG5cbiAgICAgIGNvbnN0IGVyciA9IGF3YWl0IHNhZmVzXG4gICAgICAgIC5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1NhZmUga2V5IGdlbmVyYXRpb24gZmFpbGVkIGZvciAyIHJvb3QvKTtcbiAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5tYXRjaCgvZWNkc2FNcGM6IGRrbHMgYm9vbS8pO1xuICAgICAgZXJyLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9lZDI1NTE5TXVsdGlzaWc6IGJpdGdvIGtleSBib29tLyk7XG4gICAgICBlcnIubWVzc2FnZS5zaG91bGQubWF0Y2goL2hhcyBiZWVuIGFyY2hpdmVkLyk7XG4gICAgICBlcnIubWVzc2FnZS5zaG91bGQubm90Lm1hdGNoKC9hcmNoaXZpbmcgdGhlIHNhZmUgYWxzbyBmYWlsZWQvKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5wb3N0LCAnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3NhZmUtMS9hcmNoaXZlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbm90ZXMgd2hlbiBhcmNoaXZpbmcgYWxzbyBmYWlscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHNvbCddID0gbWFrZUtleWNoYWlucygndHNvbCcpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0c29sJ10uY3JlYXRlTXBjID0gc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCdlZGRzYSBib29tJykpO1xuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ2FyY2hpdmUgNTAwJykpIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHNhZmVzXG4gICAgICAgIC5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2FyY2hpdmluZyB0aGUgc2FmZSBhbHNvIGZhaWxlZCBcXChhcmNoaXZlIDUwMFxcKS4qYXJjaGl2ZSBpdCBtYW51YWxseS8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmluYWxpemVTYWZlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvb3RLZXlzID0ge1xuICAgICAgaG90OiB7XG4gICAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiBbJ3UxJywgJ2IxJywgJ2cxJ10gYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgICBlY2RzYU1wYzogWyd1MicsICdiMicsICdnMiddIGFzIFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSxcbiAgICAgICAgZWRkc2FNcGM6IFsndTMnLCAnYjMnLCAnZzMnXSBhcyBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10sXG4gICAgICAgIGVkMjU1MTlNdWx0aXNpZzogWyd1NCcsICdiNCcsICdnNCddIGFzIFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGl0KCdQT1NUcyB0aGUgcm9vdEtleXMgdG8gdGhlIGZpbmFsaXplIFVSTCBhbmQgcmV0dXJucyB0aGUgYWN0aXZlIFNhZmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhzYWZlRGF0YVdpcmUpIH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7IHNlbmQgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmVzLmZpbmFsaXplU2FmZSgndGVzdC1zYWZlLWlkJywgeyByb290S2V5cyB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5pbnN0YW5jZW9mKFNhZmUpO1xuICAgICAgcmVzdWx0LnN0YXR1cygpLnNob3VsZC5lcXVhbCgnYWN0aXZlJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28ucG9zdCwgJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy90ZXN0LXNhZmUtaWQvZmluYWxpemUnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goc2VuZCwgeyByb290S2V5cyB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FyY2hpdmVTYWZlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdQT1NUcyB0byB0aGUgYXJjaGl2ZSBVUkwgYW5kIHJldHVybnMgdGhlIGFyY2hpdmVkIFNhZmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IC4uLnNhZmVEYXRhV2lyZSwgc3RhdHVzOiAnYXJjaGl2ZWQnIH0pIH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7IHNlbmQgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmVzLmFyY2hpdmVTYWZlKCd0ZXN0LXNhZmUtaWQnKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5pbnN0YW5jZW9mKFNhZmUpO1xuICAgICAgcmVzdWx0LnN0YXR1cygpLnNob3VsZC5lcXVhbCgnYXJjaGl2ZWQnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5wb3N0LCAnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3Rlc3Qtc2FmZS1pZC9hcmNoaXZlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZVNhZmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2NoYWlucyBpbml0aWFsaXplIOKGkiBjcmVhdGVTYWZlS2V5cyDihpIgZmluYWxpemUsIHRocmVhZGluZyB0aGUgc2FmZUlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5pdGlhbGl6aW5nID0gbmV3IFNhZmUobW9ja0JpdEdvLCB7IC4uLnNhZmVEYXRhV2lyZSwgc3RhdHVzOiAnaW5pdGlhbGl6aW5nJyB9IGFzIGFueSk7XG4gICAgICBjb25zdCByb290S2V5cyA9IHsgcm9vdEtleXM6IHsgaG90OiB7fSB9IH0gYXMgYW55O1xuICAgICAgY29uc3QgaW5pdFN0dWIgPSBzaW5vbi5zdHViKHNhZmVzLCAnaW5pdGlhbGl6ZVNhZmUnKS5yZXNvbHZlcyhpbml0aWFsaXppbmcpO1xuICAgICAgY29uc3Qga2V5c1N0dWIgPSBzaW5vbi5zdHViKHNhZmVzLCAnY3JlYXRlU2FmZUtleXMnKS5yZXNvbHZlcyhyb290S2V5cyk7XG4gICAgICBjb25zdCBmaW5hbGl6ZVN0dWIgPSBzaW5vbi5zdHViKHNhZmVzLCAnZmluYWxpemVTYWZlJykucmVzb2x2ZXMobmV3IFNhZmUobW9ja0JpdEdvLCBzYWZlRGF0YVdpcmUgYXMgYW55KSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmVzLmdlbmVyYXRlU2FmZSh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycgfSk7XG5cbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goaW5pdFN0dWIsIHsgbGFiZWw6ICdteSBzYWZlJyB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goa2V5c1N0dWIsIHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAndGVzdC1zYWZlLWlkJyB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKGZpbmFsaXplU3R1YiwgJ3Rlc3Qtc2FmZS1pZCcsIHJvb3RLZXlzKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsT3JkZXIoaW5pdFN0dWIsIGtleXNTdHViLCBmaW5hbGl6ZVN0dWIpO1xuICAgICAgcmVzdWx0LnN0YXR1cygpLnNob3VsZC5lcXVhbCgnYWN0aXZlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ0dFVHMgdGhlIHNhZmUgVVJMIGFuZCByZXR1cm5zIGEgU2FmZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCaXRHby5nZXQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHNhZmVEYXRhV2lyZSkgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmVzLmdldCh7IGlkOiAndGVzdC1zYWZlLWlkJyB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5pbnN0YW5jZW9mKFNhZmUpO1xuICAgICAgcmVzdWx0LmlkKCkuc2hvdWxkLmVxdWFsKCd0ZXN0LXNhZmUtaWQnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5nZXQsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdHRVRzIHRoZSBzYWZlcyBjb2xsZWN0aW9uIGFuZCBtYXBzIHRoZSByZXNwb25zZSB0byBTYWZlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gc2lub24uc3R1YigpLnJldHVybnNUaGlzKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzYWZlczogW3NhZmVEYXRhV2lyZV0sIG5leHRCYXRjaFByZXZJZDogJ25leHQtcGFnZS1pZCcgfSk7XG4gICAgICBtb2NrQml0R28uZ2V0ID0gc2lub24uc3R1YigpLnJldHVybnMoeyBxdWVyeSwgcmVzdWx0IH0pO1xuXG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgc2FmZXMubGlzdCgpO1xuXG4gICAgICBwYWdlLnNhZmVzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHBhZ2Uuc2FmZXNbMF0uc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZSk7XG4gICAgICBwYWdlLnNhZmVzWzBdLmlkKCkuc2hvdWxkLmVxdWFsKCd0ZXN0LXNhZmUtaWQnKTtcbiAgICAgIHBhZ2Uuc2hvdWxkLmhhdmUucHJvcGVydHkoJ25leHRDdXJzb3InLCAnbmV4dC1wYWdlLWlkJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28uZ2V0LCAnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzJyk7XG4gICAgICAvLyBubyBjdXJzb3IvbGltaXQgcGFzc2VkIOKGkiBlbXB0eSBxdWVyeVxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgocXVlcnksIHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXBzIGN1cnNvcuKGknByZXZJZCBhbmQgbGltaXQgb250byB0aGUgcXVlcnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zVGhpcygpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2FmZXM6IFtdIH0pO1xuICAgICAgbW9ja0JpdEdvLmdldCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcXVlcnksIHJlc3VsdCB9KTtcblxuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHNhZmVzLmxpc3QoeyBjdXJzb3I6ICdwcmV2LXBhZ2UtaWQnLCBsaW1pdDogNTAgfSk7XG5cbiAgICAgIHBhZ2Uuc2FmZXMuc2hvdWxkLmhhdmUubGVuZ3RoKDApO1xuICAgICAgLy8gYWJzZW50IG5leHRCYXRjaFByZXZJZCDihpIgdW5kZWZpbmVkIG5leHRDdXJzb3IgKGxhc3QgcGFnZSlcbiAgICAgIChwYWdlLm5leHRDdXJzb3IgPT09IHVuZGVmaW5lZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKHF1ZXJ5LCB7IGxpbWl0OiA1MCwgcHJldklkOiAncHJldi1wYWdlLWlkJyB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0VudGVycHJpc2Uuc2FmZXMoKSBhY2Nlc3NvcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncmV0dXJucyBhIFNhZmVzIGluc3RhbmNlIHNjb3BlZCB0byB0aGUgZW50ZXJwcmlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVudGVycHJpc2UgPSBuZXcgRW50ZXJwcmlzZShtb2NrQml0R28sIHt9IGFzIGFueSwgeyBpZDogJ2VudC1pZCcsIG5hbWU6ICdlbnQnIH0pO1xuICAgICAgZW50ZXJwcmlzZS5zYWZlcygpLnNob3VsZC5iZS5pbnN0YW5jZW9mKFNhZmVzKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==