@dollhousemcp/mcp-server 2.0.13 → 2.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +19 -9
- package/dist/elements/BaseElement.js +2 -2
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +3 -3
- package/dist/elements/skills/Skill.d.ts.map +1 -1
- package/dist/elements/skills/Skill.js +4 -4
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +4 -4
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ElementCRUDHandler.d.ts +10 -0
- package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
- package/dist/handlers/ElementCRUDHandler.js +123 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +31 -2
- package/dist/services/ActivationStore.d.ts +20 -0
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +104 -1
- package/dist/web/console/IngestRoutes.d.ts +1 -0
- package/dist/web/console/IngestRoutes.d.ts.map +1 -1
- package/dist/web/console/IngestRoutes.js +4 -1
- package/dist/web/console/UnifiedConsole.js +2 -1
- package/dist/web/public/permissions.css +224 -16
- package/dist/web/public/permissions.js +326 -63
- package/dist/web/public/sessions.js +218 -98
- package/dist/web/public/styles.css +15 -10
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +57 -19
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +2 -1
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -29,6 +29,11 @@ export interface PersistedActivation {
|
|
|
29
29
|
/** ISO-8601 timestamp of when activation was persisted */
|
|
30
30
|
activatedAt: string;
|
|
31
31
|
}
|
|
32
|
+
export interface PersistedActivationStateSnapshot {
|
|
33
|
+
sessionId: string;
|
|
34
|
+
lastUpdated: string;
|
|
35
|
+
activations: Record<string, PersistedActivation[]>;
|
|
36
|
+
}
|
|
32
37
|
/**
|
|
33
38
|
* Per-session activation state persistence.
|
|
34
39
|
*
|
|
@@ -82,6 +87,21 @@ export declare class ActivationStore {
|
|
|
82
87
|
* Get all persisted activations for a given element type.
|
|
83
88
|
*/
|
|
84
89
|
getActivations(elementType: string): PersistedActivation[];
|
|
90
|
+
/**
|
|
91
|
+
* Read persisted activation snapshots from disk for reporting/diagnostics.
|
|
92
|
+
*
|
|
93
|
+
* This intentionally does not mutate the store's in-memory state, and it is
|
|
94
|
+
* safe to call from the web console to inspect other sessions' persisted
|
|
95
|
+
* activations without changing live policy enforcement for the current
|
|
96
|
+
* process.
|
|
97
|
+
*/
|
|
98
|
+
listPersistedActivationStates(sessionId?: string): Promise<PersistedActivationStateSnapshot[]>;
|
|
99
|
+
private getPersistedActivationFilenames;
|
|
100
|
+
private readPersistedActivationState;
|
|
101
|
+
private isPersistedActivationState;
|
|
102
|
+
private normalizePersistedActivations;
|
|
103
|
+
private normalizePersistedActivation;
|
|
104
|
+
private logSnapshotReadError;
|
|
85
105
|
/**
|
|
86
106
|
* Get the session ID this store is scoped to.
|
|
87
107
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivationStore.d.ts","sourceRoot":"","sources":["../../src/services/ActivationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"ActivationStore.d.ts","sourceRoot":"","sources":["../../src/services/ActivationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAYD,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;CACpD;AA4ED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,KAAK,CAA2B;gBAE5B,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAU7D;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEjC;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA6B5E;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB3D;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9D;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAK1D;;;;;;;OAOG;IACG,6BAA6B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;YA6BtF,+BAA+B;YAS/B,4BAA4B;IAqB1C,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,4BAA4B;IAqBpC,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,OAAO;IAMrB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,mBAAmB;CAS5B"}
|
|
@@ -254,6 +254,109 @@ export class ActivationStore {
|
|
|
254
254
|
const type = normalizeType(elementType);
|
|
255
255
|
return this.state.activations[type] ? [...this.state.activations[type]] : [];
|
|
256
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Read persisted activation snapshots from disk for reporting/diagnostics.
|
|
259
|
+
*
|
|
260
|
+
* This intentionally does not mutate the store's in-memory state, and it is
|
|
261
|
+
* safe to call from the web console to inspect other sessions' persisted
|
|
262
|
+
* activations without changing live policy enforcement for the current
|
|
263
|
+
* process.
|
|
264
|
+
*/
|
|
265
|
+
async listPersistedActivationStates(sessionId) {
|
|
266
|
+
if (!this.enabled) {
|
|
267
|
+
return [];
|
|
268
|
+
}
|
|
269
|
+
const normalizedSessionId = typeof sessionId === 'string' && sessionId.trim()
|
|
270
|
+
? normalizeActivationIdentifier(sessionId)
|
|
271
|
+
: undefined;
|
|
272
|
+
try {
|
|
273
|
+
const filenames = await this.getPersistedActivationFilenames(normalizedSessionId);
|
|
274
|
+
const states = await Promise.all(filenames.map(filename => this.readPersistedActivationState(filename)));
|
|
275
|
+
return states
|
|
276
|
+
.flatMap((state) => (state ? [state] : []))
|
|
277
|
+
.sort((a, b) => a.sessionId.localeCompare(b.sessionId));
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
if (error.code !== 'ENOENT') {
|
|
281
|
+
logger.debug('[ActivationStore] Failed to enumerate activation snapshots for reporting', {
|
|
282
|
+
stateDir: this.stateDir,
|
|
283
|
+
error: error instanceof Error ? error.message : String(error),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
async getPersistedActivationFilenames(sessionId) {
|
|
290
|
+
if (sessionId) {
|
|
291
|
+
return [`activations-${sessionId}.json`];
|
|
292
|
+
}
|
|
293
|
+
const filenames = await fs.readdir(this.stateDir);
|
|
294
|
+
return filenames.filter(name => /^activations-[^.]+\.json$/u.test(name));
|
|
295
|
+
}
|
|
296
|
+
async readPersistedActivationState(filename) {
|
|
297
|
+
const filePath = path.join(this.stateDir, filename);
|
|
298
|
+
try {
|
|
299
|
+
const content = await this.fileOps.readFile(filePath);
|
|
300
|
+
const data = JSON.parse(content);
|
|
301
|
+
if (!this.isPersistedActivationState(data)) {
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
sessionId: data.sessionId,
|
|
306
|
+
lastUpdated: data.lastUpdated,
|
|
307
|
+
activations: this.normalizePersistedActivations(data.activations),
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
this.logSnapshotReadError(filePath, error);
|
|
312
|
+
return null;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
isPersistedActivationState(data) {
|
|
316
|
+
return data.version === 1
|
|
317
|
+
&& typeof data.sessionId === 'string'
|
|
318
|
+
&& Boolean(data.activations)
|
|
319
|
+
&& typeof data.activations === 'object';
|
|
320
|
+
}
|
|
321
|
+
normalizePersistedActivations(activations) {
|
|
322
|
+
const normalized = {};
|
|
323
|
+
for (const [type, entries] of Object.entries(activations)) {
|
|
324
|
+
if (!ACTIVATABLE_TYPES.has(type) || !Array.isArray(entries)) {
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
const normalizedEntries = entries.flatMap((entry) => this.normalizePersistedActivation(entry));
|
|
328
|
+
if (normalizedEntries.length > 0) {
|
|
329
|
+
normalized[type] = normalizedEntries;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return normalized;
|
|
333
|
+
}
|
|
334
|
+
normalizePersistedActivation(entry) {
|
|
335
|
+
if (!entry || typeof entry.name !== 'string') {
|
|
336
|
+
return [];
|
|
337
|
+
}
|
|
338
|
+
const normalizedName = normalizeActivationIdentifier(entry.name);
|
|
339
|
+
if (!normalizedName) {
|
|
340
|
+
return [];
|
|
341
|
+
}
|
|
342
|
+
const normalizedFilename = typeof entry.filename === 'string'
|
|
343
|
+
? normalizeActivationIdentifier(entry.filename)
|
|
344
|
+
: undefined;
|
|
345
|
+
return [{
|
|
346
|
+
...entry,
|
|
347
|
+
name: normalizedName,
|
|
348
|
+
...(normalizedFilename ? { filename: normalizedFilename } : {}),
|
|
349
|
+
}];
|
|
350
|
+
}
|
|
351
|
+
logSnapshotReadError(filePath, error) {
|
|
352
|
+
if (error.code === 'ENOENT') {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
logger.debug('[ActivationStore] Skipping unreadable activation snapshot during reporting', {
|
|
356
|
+
filePath,
|
|
357
|
+
error: error instanceof Error ? error.message : String(error),
|
|
358
|
+
});
|
|
359
|
+
}
|
|
257
360
|
/**
|
|
258
361
|
* Get the session ID this store is scoped to.
|
|
259
362
|
*/
|
|
@@ -336,4 +439,4 @@ export class ActivationStore {
|
|
|
336
439
|
return counts;
|
|
337
440
|
}
|
|
338
441
|
}
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aXZhdGlvblN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBd0I5RSw0RUFBNEU7QUFDNUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxRQUFRLEVBQUUsU0FBUztJQUNuQixNQUFNLEVBQUUsT0FBTztJQUNmLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLFFBQVE7SUFDbEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLFdBQW1CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FBQyxLQUFhO0lBQ2xELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGlC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U0FBUztZQUN6QixXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDckMsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUNqRCxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWN0aXZhdGlvbiBTdG9yZVxuICpcbiAqIFBlcnNpc3RzIHBlci1zZXNzaW9uIGVsZW1lbnQgYWN0aXZhdGlvbiBzdGF0ZSB0byBkaXNrLlxuICogRWFjaCBNQ1Agc2Vzc2lvbiAoaWRlbnRpZmllZCBieSBET0xMSE9VU0VfU0VTU0lPTl9JRCkgZ2V0cyBpdHMgb3duXG4gKiBhY3RpdmF0aW9uIGZpbGUgc28gY29uY3VycmVudCBzZXNzaW9ucyBtYWludGFpbiBpbmRlcGVuZGVudCBwcm9maWxlcy5cbiAqXG4gKiBGb2xsb3dzIHRoZSBEYW5nZXJab25lRW5mb3JjZXIgcGF0dGVybjpcbiAqIC0gREktbWFuYWdlZCBzaW5nbGV0b24gd2l0aCBGaWxlT3BlcmF0aW9uc1NlcnZpY2VcbiAqIC0gaW5pdGlhbGl6ZSgpIGxvYWRzIGZyb20gZGlzayAodG9sZXJhdGVzIG1pc3NpbmcvY29ycnVwdCBmaWxlcylcbiAqIC0gSW4tbWVtb3J5IHN0YXRlIGlzIHRoZSBob3QgcGF0aDsgZGlzayB3cml0ZXMgYXJlIGZpcmUtYW5kLWZvcmdldFxuICogLSBhdG9taWNXcml0ZUZpbGUgKHdyaXRlLXRvLXRlbXAgKyByZW5hbWUpIHByZXZlbnRzIHBhcnRpYWwgcmVhZHNcbiAqXG4gKiBGb3J3YXJkIGNvbXBhdGliaWxpdHk6IFRoZSB2ZXJzaW9uZWQgZmlsZSBmb3JtYXQgKHYxKSBjYW4gZXZvbHZlIHRvXG4gKiBpbmNsdWRlIHVzZXJJZCwgb3JnSWQsIGFuZCBhdWRpdCBmaWVsZHMgZm9yIG11bHRpLXVzZXIgSFRUUFMgbW9kZVxuICogd2l0aG91dCBicmVha2luZyBleGlzdGluZyBpbnN0YWxsYXRpb25zLlxuICpcbiAqIEBzaW5jZSB2Mi4wLjAgLSBJc3N1ZSAjNTk4XG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4vRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuXG4vKipcbiAqIEEgcGVyc2lzdGVkIGFjdGl2YXRpb24gcmVjb3JkIGZvciBhIHNpbmdsZSBlbGVtZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcnNpc3RlZEFjdGl2YXRpb24ge1xuICAvKiogRWxlbWVudCBuYW1lIChodW1hbi1yZWFkYWJsZSwgdXNlZCBmb3IgYWxsIHR5cGVzKSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBGb3IgcGVyc29uYXMgb25seTogdGhlIGZpbGVuYW1lIGtleSB1c2VkIGJ5IFBlcnNvbmFNYW5hZ2VyICovXG4gIGZpbGVuYW1lPzogc3RyaW5nO1xuICAvKiogSVNPLTg2MDEgdGltZXN0YW1wIG9mIHdoZW4gYWN0aXZhdGlvbiB3YXMgcGVyc2lzdGVkICovXG4gIGFjdGl2YXRlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyc2lzdGVkIGZpbGUgZm9ybWF0ICh2ZXJzaW9uZWQgZm9yIGZvcndhcmQgY29tcGF0aWJpbGl0eSkuXG4gKi9cbmludGVyZmFjZSBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUge1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogc3RyaW5nO1xuICBhY3RpdmF0aW9uczogUmVjb3JkPHN0cmluZywgUGVyc2lzdGVkQWN0aXZhdGlvbltdPjtcbn1cblxuLyoqIFZhbGlkIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IGFjdGl2YXRpb24gKHN0b3JlZCBpbiBzaW5ndWxhciBmb3JtKSAqL1xuY29uc3QgQUNUSVZBVEFCTEVfVFlQRVMgPSBuZXcgU2V0KFsncGVyc29uYScsICdza2lsbCcsICdhZ2VudCcsICdtZW1vcnknLCAnZW5zZW1ibGUnXSk7XG5cbi8qKlxuICogTm9ybWFsaXplIGVsZW1lbnQgdHlwZSB0byBzaW5ndWxhciBmb3JtIGZvciBjb25zaXN0ZW50IHN0b3JhZ2UuXG4gKiBFbGVtZW50VHlwZSBlbnVtIHVzZXMgcGx1cmFsICgncGVyc29uYXMnLCAnc2tpbGxzJywgZXRjLikgYnV0IHdlXG4gKiBzdG9yZSBpbiBzaW5ndWxhciBmb3JtIGZvciByZWFkYWJpbGl0eSBhbmQgZm9yd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5jb25zdCBQTFVSQUxfVE9fU0lOR1VMQVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsXG4gIHNraWxsczogJ3NraWxsJyxcbiAgYWdlbnRzOiAnYWdlbnQnLFxuICBtZW1vcmllczogJ21lbW9yeScsXG4gIGVuc2VtYmxlczogJ2Vuc2VtYmxlJyxcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVR5cGUoZWxlbWVudFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxvd2VyID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIFBMVVJBTF9UT19TSU5HVUxBUltsb3dlcl0gPz8gbG93ZXI7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodmFsdWUpLm5vcm1hbGl6ZWRDb250ZW50LnRyaW0oKTtcbn1cblxuLyoqIFNlc3Npb24gSUQgdmFsaWRhdGlvbjogbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyLCB0aGVuIGFscGhhbnVtZXJpYy9oeXBoZW5zL3VuZGVyc2NvcmVzLCAxLTY0IGNoYXJzICovXG5jb25zdCBTRVNTSU9OX0lEX1BBVFRFUk4gPSAvXlthLXpBLVpdW2EtekEtWjAtOV8tXXswLDYzfSQvO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgcmV0dXJucyB0aGUgc2Vzc2lvbiBJRCBmcm9tIGVudmlyb25tZW50IG9yIGRlZmF1bHQuXG4gKlxuICogRXhhbXBsZXMgb2YgdmFsaWQgc2Vzc2lvbiBJRHM6XG4gKiAtIGBjbGF1ZGUtY29kZWAg4oCUIENsYXVkZSBDb2RlIENMSSBzZXNzaW9uc1xuICogLSBgenVsaXAtYnJpZGdlYCDigJQgWnVsaXAgYnJpZGdlIGludGVncmF0aW9uXG4gKiAtIGBkZXYtbG9jYWxgIOKAlCBMb2NhbCBkZXZlbG9wbWVudFxuICogLSBgc3RhZ2luZy12MmAg4oCUIFN0YWdpbmcgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNlc3Npb25JZCgpOiBzdHJpbmcge1xuICBjb25zdCBlbnZWYWx1ZSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9TRVNTSU9OX0lEPy50cmltKCk7XG4gIGlmICghZW52VmFsdWUpIHtcbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBzZXNzaW9uIElEIHBlciBzZXJ2ZXIgaW5zdGFuY2UgdG8gcHJldmVudFxuICAgIC8vIGNyb3NzLXNlc3Npb24gYWN0aXZhdGlvbiBsZWFraW5nIChpc3N1ZSAjMzMpXG4gICAgY29uc3QgaWQgPSBgc2Vzc2lvbi0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke3JhbmRvbUJ5dGVzKDQpLnRvU3RyaW5nKCdoZXgnKX1gO1xuICAgIGxvZ2dlci5pbmZvKGBbQWN0aXZhdGlvblN0b3JlXSBObyBET0xMSE9VU0VfU0VTU0lPTl9JRCBzZXQg4oCUIGdlbmVyYXRlZCAnJHtpZH0nYCk7XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgaWYgKCFTRVNTSU9OX0lEX1BBVFRFUk4udGVzdChlbnZWYWx1ZSkpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGBJbnZhbGlkIERPTExIT1VTRV9TRVNTSU9OX0lEICcke2VudlZhbHVlfScg4oCUIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgdGhlbiBhbHBoYW51bWVyaWMvaHlwaGVucy91bmRlcnNjb3JlcywgMS02NCBjaGFycy4gRmFsbGluZyBiYWNrIHRvICdkZWZhdWx0Jy5gXG4gICAgKTtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9XG5cbiAgcmV0dXJuIGVudlZhbHVlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFjdGl2YXRpb24gcGVyc2lzdGVuY2UgaXMgZW5hYmxlZC5cbiAqL1xuZnVuY3Rpb24gaXNQZXJzaXN0ZW5jZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IGVudlZhbHVlID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0FDVElWQVRJT05fUEVSU0lTVEVOQ0U/LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZW52VmFsdWUgPT09ICdmYWxzZScgfHwgZW52VmFsdWUgPT09ICcwJyB8fCBlbnZWYWx1ZSA9PT0gJ25vJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIE1heGltdW0gbnVtYmVyIG9mIHJldHJ5IGF0dGVtcHRzIGZvciB0cmFuc2llbnQgZGlzayBmYWlsdXJlcyAqL1xuY29uc3QgUEVSU0lTVF9NQVhfUkVUUklFUyA9IDI7XG5cbi8qKiBEZWxheSBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzIGluIG1pbGxpc2Vjb25kcyAqL1xuY29uc3QgUEVSU0lTVF9SRVRSWV9ERUxBWV9NUyA9IDEwMDtcblxuLyoqXG4gKiBQZXItc2Vzc2lvbiBhY3RpdmF0aW9uIHN0YXRlIHBlcnNpc3RlbmNlLlxuICpcbiAqIFBlcnNpc3RzIGVsZW1lbnQgYWN0aXZhdGlvbiBzdGF0ZSB0byBgfi8uZG9sbGhvdXNlL3N0YXRlL2FjdGl2YXRpb25zLXtzZXNzaW9uSWR9Lmpzb25gLlxuICogRWFjaCBNQ1Agc2Vzc2lvbiBpcyBpZGVudGlmaWVkIGJ5IHRoZSBgRE9MTEhPVVNFX1NFU1NJT05fSURgIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICpcbiAqIFRocmVhZC1zYWZldHkgbm90ZTogTm9kZS5qcyBpcyBzaW5nbGUtdGhyZWFkZWQsIHNvIE1hcCBvcGVyYXRpb25zIGFyZSBzYWZlLlxuICogRm9yIG11bHRpLXByb2Nlc3MgZGVwbG95bWVudHMgKGZ1dHVyZSBIVFRQUyksIGNvbnNpZGVyIFJlZGlzIG9yIERCIGJhY2tpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBTZXNzaW9uIElEIHNldCB2aWEgZW52aXJvbm1lbnQ6XG4gKiAvLyBET0xMSE9VU0VfU0VTU0lPTl9JRD1jbGF1ZGUtY29kZVxuICpcbiAqIGNvbnN0IHN0b3JlID0gbmV3IEFjdGl2YXRpb25TdG9yZShmaWxlT3BzKTtcbiAqIGF3YWl0IHN0b3JlLmluaXRpYWxpemUoKTsgIC8vIGxvYWRzIH4vLmRvbGxob3VzZS9zdGF0ZS9hY3RpdmF0aW9ucy1jbGF1ZGUtY29kZS5qc29uXG4gKlxuICogc3RvcmUucmVjb3JkQWN0aXZhdGlvbignc2tpbGwnLCAnY29kZS1yZXZpZXdlcicpO1xuICogc3RvcmUucmVjb3JkQWN0aXZhdGlvbigncGVyc29uYScsICdDcmVhdGl2ZSBEZXYnLCAnY3JlYXRpdmUtZGV2Lm1kJyk7XG4gKlxuICogLy8gT24gbmV4dCBzZXJ2ZXIgc3RhcnQsIGluaXRpYWxpemUoKSByZXN0b3JlcyB0aGVzZSBhY3RpdmF0aW9uc1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3RpdmF0aW9uU3RvcmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVPcHM6IEZpbGVPcGVyYXRpb25zU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZURpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIHN0YXRlOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLCBzdGF0ZURpcj86IHN0cmluZykge1xuICAgIHRoaXMuZmlsZU9wcyA9IGZpbGVPcHM7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSByZXNvbHZlU2Vzc2lvbklkKCk7XG4gICAgdGhpcy5lbmFibGVkID0gaXNQZXJzaXN0ZW5jZUVuYWJsZWQoKTtcbiAgICB0aGlzLnN0YXRlRGlyID0gc3RhdGVEaXIgPz8gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnc3RhdGUnKTtcbiAgICB0aGlzLnBlcnNpc3RQYXRoID0gcGF0aC5qb2luKHRoaXMuc3RhdGVEaXIsIGBhY3RpdmF0aW9ucy0ke3RoaXMuc2Vzc2lvbklkfS5qc29uYCk7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5jcmVhdGVFbXB0eVN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBwZXJzaXN0ZWQgYWN0aXZhdGlvbnMgZnJvbSBkaXNrLlxuICAgKiBDYWxsIG9uY2UgYWZ0ZXIgY29uc3RydWN0aW9uIHRvIHJlc3RvcmUgc3RhdGUgZnJvbSBhIHByZXZpb3VzIHNlc3Npb24uXG4gICAqIElmIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgY29ycnVwdCwgc3RhcnRzIHdpdGggZW1wdHkgYWN0aXZhdGlvbnMuXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tBY3RpdmF0aW9uU3RvcmVdIFBlcnNpc3RlbmNlIGRpc2FibGVkIHZpYSBET0xMSE9VU0VfQUNUSVZBVElPTl9QRVJTSVNURU5DRScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BzLnJlYWRGaWxlKHRoaXMucGVyc2lzdFBhdGgpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlO1xuXG4gICAgICBpZiAoZGF0YS52ZXJzaW9uID09PSAxICYmIGRhdGEuYWN0aXZhdGlvbnMgJiYgdHlwZW9mIGRhdGEuYWN0aXZhdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGFuZCBsb2FkIG9ubHkga25vd24gZWxlbWVudCB0eXBlc1xuICAgICAgICBmb3IgKGNvbnN0IFt0eXBlLCBhY3RpdmF0aW9uc10gb2YgT2JqZWN0LmVudHJpZXMoZGF0YS5hY3RpdmF0aW9ucykpIHtcbiAgICAgICAgICBpZiAoQUNUSVZBVEFCTEVfVFlQRVMuaGFzKHR5cGUpICYmIEFycmF5LmlzQXJyYXkoYWN0aXZhdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdID0gYWN0aXZhdGlvbnMuZmxhdE1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWEgfHwgdHlwZW9mIGEubmFtZSAhPT0gJ3N0cmluZycpIHJldHVybiBbXTtcblxuICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGEubmFtZSk7XG4gICAgICAgICAgICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybiBbXTtcblxuICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgYS5maWxlbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGEuZmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICAgICAgLi4uYSxcbiAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgICAgICAgICAgICAuLi4obm9ybWFsaXplZEZpbGVuYW1lID8geyBmaWxlbmFtZTogbm9ybWFsaXplZEZpbGVuYW1lIH0gOiB7fSksXG4gICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMuZ2V0VG90YWxBY3RpdmF0aW9uQ291bnQoKTtcbiAgICAgICAgaWYgKHRvdGFsQ291bnQgPiAwKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgW0FjdGl2YXRpb25TdG9yZV0gUmVzdG9yZWQgJHt0b3RhbENvdW50fSBhY3RpdmF0aW9uKHMpIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfSdgXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdFTEVNRU5UX0FDVElWQVRFRCcsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICdBY3RpdmF0aW9uU3RvcmUuaW5pdGlhbGl6ZScsXG4gICAgICAgICAgICBkZXRhaWxzOiBgUmVzdG9yZWQgJHt0b3RhbENvdW50fSBhY3RpdmF0aW9uKHMpIGZyb20gZGlzayBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nYCxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGNvdW50czogdGhpcy5nZXRBY3RpdmF0aW9uQ291bnRzKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIE5vIGFjdGl2YXRpb24gZmlsZSBmb3VuZCBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nLCBzdGFydGluZyBmcmVzaGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFtBY3RpdmF0aW9uU3RvcmVdIEZhaWxlZCB0byBsb2FkIGFjdGl2YXRpb24gZmlsZSBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nLCBzdGFydGluZyBmcmVzaGAsIHsgZXJyb3IgfSk7XG5cbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdFTEVNRU5UX0FDVElWQVRFRCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5pbml0aWFsaXplJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIGxvYWQgYWN0aXZhdGlvbiBmaWxlIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScg4oCUIHN0YXJ0aW5nIGZyZXNoIChwb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24pYCxcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBlcnJvcjogU3RyaW5nKGVycm9yKSwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIGFuIGVsZW1lbnQgYWN0aXZhdGlvbi4gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QuXG4gICAqL1xuICByZWNvcmRBY3RpdmF0aW9uKGVsZW1lbnRUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZmlsZW5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdHlwZSA9IG5vcm1hbGl6ZVR5cGUoZWxlbWVudFR5cGUpO1xuICAgIGlmICghQUNUSVZBVEFCTEVfVFlQRVMuaGFzKHR5cGUpKSByZXR1cm47XG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihuYW1lKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWROYW1lKSByZXR1cm47XG4gICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gdHlwZW9mIGZpbGVuYW1lID09PSAnc3RyaW5nJ1xuICAgICAgPyBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdKSB7XG4gICAgICB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdID0gW107XG4gICAgfVxuXG4gICAgLy8gRGVkdXBsaWNhdGUg4oCUIGRvbid0IGFkZCBpZiBhbHJlYWR5IHByZXNlbnRcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hO1xuICAgIGNvbnN0IGFscmVhZHlBY3RpdmUgPSBleGlzdGluZy5zb21lKGEgPT4gYS5uYW1lID09PSBub3JtYWxpemVkTmFtZSk7XG4gICAgaWYgKGFscmVhZHlBY3RpdmUpIHJldHVybjtcblxuICAgIGV4aXN0aW5nLnB1c2goe1xuICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICAuLi4obm9ybWFsaXplZEZpbGVuYW1lID8geyBmaWxlbmFtZTogbm9ybWFsaXplZEZpbGVuYW1lIH0gOiB7fSksXG4gICAgICBhY3RpdmF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wZXJzaXN0QXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYW4gZWxlbWVudCBkZWFjdGl2YXRpb24uIEZpcmUtYW5kLWZvcmdldCBwZXJzaXN0LlxuICAgKi9cbiAgcmVjb3JkRGVhY3RpdmF0aW9uKGVsZW1lbnRUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybjtcblxuICAgIGNvbnN0IGFjdGl2YXRpb25zID0gdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXTtcbiAgICBpZiAoIWFjdGl2YXRpb25zKSByZXR1cm47XG5cbiAgICBjb25zdCBpbml0aWFsTGVuZ3RoID0gYWN0aXZhdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBhY3RpdmF0aW9ucy5maWx0ZXIoYSA9PiBhLm5hbWUgIT09IG5vcm1hbGl6ZWROYW1lKTtcblxuICAgIC8vIE9ubHkgcGVyc2lzdCBpZiBzb21ldGhpbmcgYWN0dWFsbHkgY2hhbmdlZFxuICAgIGlmICh0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdIS5sZW5ndGggIT09IGluaXRpYWxMZW5ndGgpIHtcbiAgICAgIHRoaXMucGVyc2lzdEFzeW5jKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNwZWNpZmljIGFjdGl2YXRpb24gYnkgbmFtZSAodXNlZCBkdXJpbmcgcmVzdG9yZSB0byBwcnVuZSBzdGFsZSBlbnRyaWVzKS5cbiAgICovXG4gIHJlbW92ZVN0YWxlQWN0aXZhdGlvbihlbGVtZW50VHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZERlYWN0aXZhdGlvbihlbGVtZW50VHlwZSwgbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBwZXJzaXN0ZWQgYWN0aXZhdGlvbnMgZm9yIGEgZ2l2ZW4gZWxlbWVudCB0eXBlLlxuICAgKi9cbiAgZ2V0QWN0aXZhdGlvbnMoZWxlbWVudFR5cGU6IHN0cmluZyk6IFBlcnNpc3RlZEFjdGl2YXRpb25bXSB7XG4gICAgY29uc3QgdHlwZSA9IG5vcm1hbGl6ZVR5cGUoZWxlbWVudFR5cGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdID8gWy4uLnRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hXSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vzc2lvbiBJRCB0aGlzIHN0b3JlIGlzIHNjb3BlZCB0by5cbiAgICovXG4gIGdldFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucy4gVXNlZCBmb3IgdGVzdGluZyBvciBhZG1pbiByZXNldC5cbiAgICovXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdGVuY2Ugd2l0aCByZXRyeSBmb3IgdHJhbnNpZW50IGRpc2sgZmFpbHVyZXMuXG4gICAqIFJldHJpZXMgdXAgdG8gUEVSU0lTVF9NQVhfUkVUUklFUyB0aW1lcyB3aXRoIGEgc2hvcnQgZGVsYXkuXG4gICAqIERpc2sgZmFpbHVyZSBkb2VzIG5vdCBibG9jayBhY3RpdmF0aW9uIG9wZXJhdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RBc3luYygpOiB2b2lkIHtcbiAgICB0aGlzLnBlcnNpc3RXaXRoUmV0cnkoMCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tBY3RpdmF0aW9uU3RvcmVdIEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgYWZ0ZXIgcmV0cmllcycsIHsgZXJyb3IgfSk7XG5cbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdBY3RpdmF0aW9uU3RvcmUucGVyc2lzdEFzeW5jJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyBhZnRlciAke1BFUlNJU1RfTUFYX1JFVFJJRVMgKyAxfSBhdHRlbXB0cyDigJQgc3RhdGUgY29udGludWVzIGluLW1lbW9yeSBvbmx5YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgZXJyb3I6IFN0cmluZyhlcnJvciksIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcGVyc2lzdCB3aXRoIHJldHJpZXMgZm9yIHRyYW5zaWVudCBmYWlsdXJlcyAoZS5nLiwgRUJVU1ksIEVBR0FJTikuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RXaXRoUmV0cnkoYXR0ZW1wdDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA8IFBFUlNJU1RfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFBFUlNJU1RfUkVUUllfREVMQVlfTVMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdFdpdGhSZXRyeShhdHRlbXB0ICsgMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgY3VycmVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLnN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB0aGlzLmZpbGVPcHMud3JpdGVGaWxlKHRoaXMucGVyc2lzdFBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUsIG51bGwsIDIpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW1wdHlTdGF0ZSgpOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhY3RpdmF0aW9uczoge30sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG90YWxBY3RpdmF0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKS5yZWR1Y2UoXG4gICAgICAoc3VtLCBhcnIpID0+IHN1bSArIChhcnI/Lmxlbmd0aCA/PyAwKSwgMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2YXRpb25Db3VudHMoKTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG4gICAgY29uc3QgY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBbdHlwZSwgYXJyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKGFyciAmJiBhcnIubGVuZ3RoID4gMCkge1xuICAgICAgICBjb3VudHNbdHlwZV0gPSBhcnIubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnRzO1xuICB9XG59XG4iXX0=
|
|
442
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aXZhdGlvblN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBOEI5RSw0RUFBNEU7QUFDNUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxRQUFRLEVBQUUsU0FBUztJQUNuQixNQUFNLEVBQUUsT0FBTztJQUNmLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLFFBQVE7SUFDbEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLFdBQW1CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FBQyxLQUFhO0lBQ2xELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGlC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LENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7UUFDMUMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBY3RpdmF0aW9uIFN0b3JlXG4gKlxuICogUGVyc2lzdHMgcGVyLXNlc3Npb24gZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gKiBFYWNoIE1DUCBzZXNzaW9uIChpZGVudGlmaWVkIGJ5IERPTExIT1VTRV9TRVNTSU9OX0lEKSBnZXRzIGl0cyBvd25cbiAqIGFjdGl2YXRpb24gZmlsZSBzbyBjb25jdXJyZW50IHNlc3Npb25zIG1haW50YWluIGluZGVwZW5kZW50IHByb2ZpbGVzLlxuICpcbiAqIEZvbGxvd3MgdGhlIERhbmdlclpvbmVFbmZvcmNlciBwYXR0ZXJuOlxuICogLSBESS1tYW5hZ2VkIHNpbmdsZXRvbiB3aXRoIEZpbGVPcGVyYXRpb25zU2VydmljZVxuICogLSBpbml0aWFsaXplKCkgbG9hZHMgZnJvbSBkaXNrICh0b2xlcmF0ZXMgbWlzc2luZy9jb3JydXB0IGZpbGVzKVxuICogLSBJbi1tZW1vcnkgc3RhdGUgaXMgdGhlIGhvdCBwYXRoOyBkaXNrIHdyaXRlcyBhcmUgZmlyZS1hbmQtZm9yZ2V0XG4gKiAtIGF0b21pY1dyaXRlRmlsZSAod3JpdGUtdG8tdGVtcCArIHJlbmFtZSkgcHJldmVudHMgcGFydGlhbCByZWFkc1xuICpcbiAqIEZvcndhcmQgY29tcGF0aWJpbGl0eTogVGhlIHZlcnNpb25lZCBmaWxlIGZvcm1hdCAodjEpIGNhbiBldm9sdmUgdG9cbiAqIGluY2x1ZGUgdXNlcklkLCBvcmdJZCwgYW5kIGF1ZGl0IGZpZWxkcyBmb3IgbXVsdGktdXNlciBIVFRQUyBtb2RlXG4gKiB3aXRob3V0IGJyZWFraW5nIGV4aXN0aW5nIGluc3RhbGxhdGlvbnMuXG4gKlxuICogQHNpbmNlIHYyLjAuMCAtIElzc3VlICM1OThcbiAqL1xuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5cbi8qKlxuICogQSBwZXJzaXN0ZWQgYWN0aXZhdGlvbiByZWNvcmQgZm9yIGEgc2luZ2xlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkQWN0aXZhdGlvbiB7XG4gIC8qKiBFbGVtZW50IG5hbWUgKGh1bWFuLXJlYWRhYmxlLCB1c2VkIGZvciBhbGwgdHlwZXMpICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIEZvciBwZXJzb25hcyBvbmx5OiB0aGUgZmlsZW5hbWUga2V5IHVzZWQgYnkgUGVyc29uYU1hbmFnZXIgKi9cbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIC8qKiBJU08tODYwMSB0aW1lc3RhbXAgb2Ygd2hlbiBhY3RpdmF0aW9uIHdhcyBwZXJzaXN0ZWQgKi9cbiAgYWN0aXZhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXJzaXN0ZWQgZmlsZSBmb3JtYXQgKHZlcnNpb25lZCBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5KS5cbiAqL1xuaW50ZXJmYWNlIFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSB7XG4gIHZlcnNpb246IG51bWJlcjtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG4gIGFjdGl2YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBQZXJzaXN0ZWRBY3RpdmF0aW9uW10+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVNuYXBzaG90IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG4gIGFjdGl2YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBQZXJzaXN0ZWRBY3RpdmF0aW9uW10+O1xufVxuXG4vKiogVmFsaWQgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgYWN0aXZhdGlvbiAoc3RvcmVkIGluIHNpbmd1bGFyIGZvcm0pICovXG5jb25zdCBBQ1RJVkFUQUJMRV9UWVBFUyA9IG5ldyBTZXQoWydwZXJzb25hJywgJ3NraWxsJywgJ2FnZW50JywgJ21lbW9yeScsICdlbnNlbWJsZSddKTtcblxuLyoqXG4gKiBOb3JtYWxpemUgZWxlbWVudCB0eXBlIHRvIHNpbmd1bGFyIGZvcm0gZm9yIGNvbnNpc3RlbnQgc3RvcmFnZS5cbiAqIEVsZW1lbnRUeXBlIGVudW0gdXNlcyBwbHVyYWwgKCdwZXJzb25hcycsICdza2lsbHMnLCBldGMuKSBidXQgd2VcbiAqIHN0b3JlIGluIHNpbmd1bGFyIGZvcm0gZm9yIHJlYWRhYmlsaXR5IGFuZCBmb3J3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbmNvbnN0IFBMVVJBTF9UT19TSU5HVUxBUjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgcGVyc29uYXM6ICdwZXJzb25hJyxcbiAgc2tpbGxzOiAnc2tpbGwnLFxuICBhZ2VudHM6ICdhZ2VudCcsXG4gIG1lbW9yaWVzOiAnbWVtb3J5JyxcbiAgZW5zZW1ibGVzOiAnZW5zZW1ibGUnLFxufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbG93ZXIgPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gUExVUkFMX1RPX1NJTkdVTEFSW2xvd2VyXSA/PyBsb3dlcjtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh2YWx1ZSkubm9ybWFsaXplZENvbnRlbnQudHJpbSgpO1xufVxuXG4vKiogU2Vzc2lvbiBJRCB2YWxpZGF0aW9uOiBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIHRoZW4gYWxwaGFudW1lcmljL2h5cGhlbnMvdW5kZXJzY29yZXMsIDEtNjQgY2hhcnMgKi9cbmNvbnN0IFNFU1NJT05fSURfUEFUVEVSTiA9IC9eW2EtekEtWl1bYS16QS1aMC05Xy1dezAsNjN9JC87XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCByZXR1cm5zIHRoZSBzZXNzaW9uIElEIGZyb20gZW52aXJvbm1lbnQgb3IgZGVmYXVsdC5cbiAqXG4gKiBFeGFtcGxlcyBvZiB2YWxpZCBzZXNzaW9uIElEczpcbiAqIC0gYGNsYXVkZS1jb2RlYCDigJQgQ2xhdWRlIENvZGUgQ0xJIHNlc3Npb25zXG4gKiAtIGB6dWxpcC1icmlkZ2VgIOKAlCBadWxpcCBicmlkZ2UgaW50ZWdyYXRpb25cbiAqIC0gYGRldi1sb2NhbGAg4oCUIExvY2FsIGRldmVsb3BtZW50XG4gKiAtIGBzdGFnaW5nLXYyYCDigJQgU3RhZ2luZyBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiByZXNvbHZlU2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gIGNvbnN0IGVudlZhbHVlID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1NFU1NJT05fSUQ/LnRyaW0oKTtcbiAgaWYgKCFlbnZWYWx1ZSkge1xuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIHNlc3Npb24gSUQgcGVyIHNlcnZlciBpbnN0YW5jZSB0byBwcmV2ZW50XG4gICAgLy8gY3Jvc3Mtc2Vzc2lvbiBhY3RpdmF0aW9uIGxlYWtpbmcgKGlzc3VlICMzMylcbiAgICBjb25zdCBpZCA9IGBzZXNzaW9uLSR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9LSR7cmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpfWA7XG4gICAgbG9nZ2VyLmluZm8oYFtBY3RpdmF0aW9uU3RvcmVdIE5vIERPTExIT1VTRV9TRVNTSU9OX0lEIHNldCDigJQgZ2VuZXJhdGVkICcke2lkfSdgKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBpZiAoIVNFU1NJT05fSURfUEFUVEVSTi50ZXN0KGVudlZhbHVlKSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgYEludmFsaWQgRE9MTEhPVVNFX1NFU1NJT05fSUQgJyR7ZW52VmFsdWV9JyDigJQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyLCB0aGVuIGFscGhhbnVtZXJpYy9oeXBoZW5zL3VuZGVyc2NvcmVzLCAxLTY0IGNoYXJzLiBGYWxsaW5nIGJhY2sgdG8gJ2RlZmF1bHQnLmBcbiAgICApO1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH1cblxuICByZXR1cm4gZW52VmFsdWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aXZhdGlvbiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICovXG5mdW5jdGlvbiBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgZW52VmFsdWUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQUNUSVZBVElPTl9QRVJTSVNURU5DRT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChlbnZWYWx1ZSA9PT0gJ2ZhbHNlJyB8fCBlbnZWYWx1ZSA9PT0gJzAnIHx8IGVudlZhbHVlID09PSAnbm8nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgZm9yIHRyYW5zaWVudCBkaXNrIGZhaWx1cmVzICovXG5jb25zdCBQRVJTSVNUX01BWF9SRVRSSUVTID0gMjtcblxuLyoqIERlbGF5IGJldHdlZW4gcmV0cnkgYXR0ZW1wdHMgaW4gbWlsbGlzZWNvbmRzICovXG5jb25zdCBQRVJTSVNUX1JFVFJZX0RFTEFZX01TID0gMTAwO1xuXG4vKipcbiAqIFBlci1zZXNzaW9uIGFjdGl2YXRpb24gc3RhdGUgcGVyc2lzdGVuY2UuXG4gKlxuICogUGVyc2lzdHMgZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGB+Ly5kb2xsaG91c2Uvc3RhdGUvYWN0aXZhdGlvbnMte3Nlc3Npb25JZH0uanNvbmAuXG4gKiBFYWNoIE1DUCBzZXNzaW9uIGlzIGlkZW50aWZpZWQgYnkgdGhlIGBET0xMSE9VU0VfU0VTU0lPTl9JRGAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogVGhyZWFkLXNhZmV0eSBub3RlOiBOb2RlLmpzIGlzIHNpbmdsZS10aHJlYWRlZCwgc28gTWFwIG9wZXJhdGlvbnMgYXJlIHNhZmUuXG4gKiBGb3IgbXVsdGktcHJvY2VzcyBkZXBsb3ltZW50cyAoZnV0dXJlIEhUVFBTKSwgY29uc2lkZXIgUmVkaXMgb3IgREIgYmFja2luZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFNlc3Npb24gSUQgc2V0IHZpYSBlbnZpcm9ubWVudDpcbiAqIC8vIERPTExIT1VTRV9TRVNTSU9OX0lEPWNsYXVkZS1jb2RlXG4gKlxuICogY29uc3Qgc3RvcmUgPSBuZXcgQWN0aXZhdGlvblN0b3JlKGZpbGVPcHMpO1xuICogYXdhaXQgc3RvcmUuaW5pdGlhbGl6ZSgpOyAgLy8gbG9hZHMgfi8uZG9sbGhvdXNlL3N0YXRlL2FjdGl2YXRpb25zLWNsYXVkZS1jb2RlLmpzb25cbiAqXG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdza2lsbCcsICdjb2RlLXJldmlld2VyJyk7XG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdwZXJzb25hJywgJ0NyZWF0aXZlIERldicsICdjcmVhdGl2ZS1kZXYubWQnKTtcbiAqXG4gKiAvLyBPbiBuZXh0IHNlcnZlciBzdGFydCwgaW5pdGlhbGl6ZSgpIHJlc3RvcmVzIHRoZXNlIGFjdGl2YXRpb25zXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2YXRpb25TdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgc3RhdGU6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZTtcblxuICBjb25zdHJ1Y3RvcihmaWxlT3BzOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2UsIHN0YXRlRGlyPzogc3RyaW5nKSB7XG4gICAgdGhpcy5maWxlT3BzID0gZmlsZU9wcztcbiAgICB0aGlzLnNlc3Npb25JZCA9IHJlc29sdmVTZXNzaW9uSWQoKTtcbiAgICB0aGlzLmVuYWJsZWQgPSBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpO1xuICAgIHRoaXMuc3RhdGVEaXIgPSBzdGF0ZURpciA/PyBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdzdGF0ZScpO1xuICAgIHRoaXMucGVyc2lzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgYGFjdGl2YXRpb25zLSR7dGhpcy5zZXNzaW9uSWR9Lmpzb25gKTtcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmcm9tIGRpc2suXG4gICAqIENhbGwgb25jZSBhZnRlciBjb25zdHJ1Y3Rpb24gdG8gcmVzdG9yZSBzdGF0ZSBmcm9tIGEgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICogSWYgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBjb3JydXB0LCBzdGFydHMgd2l0aCBlbXB0eSBhY3RpdmF0aW9ucy5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gUGVyc2lzdGVuY2UgZGlzYWJsZWQgdmlhIERPTExIT1VTRV9BQ1RJVkFUSU9OX1BFUlNJU1RFTkNFJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUodGhpcy5wZXJzaXN0UGF0aCk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgICAgIGlmIChkYXRhLnZlcnNpb24gPT09IDEgJiYgZGF0YS5hY3RpdmF0aW9ucyAmJiB0eXBlb2YgZGF0YS5hY3RpdmF0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgYW5kIGxvYWQgb25seSBrbm93biBlbGVtZW50IHR5cGVzXG4gICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGFjdGl2YXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhkYXRhLmFjdGl2YXRpb25zKSkge1xuICAgICAgICAgIGlmIChBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgJiYgQXJyYXkuaXNBcnJheShhY3RpdmF0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBhY3RpdmF0aW9ucy5mbGF0TWFwKChhKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYSB8fCB0eXBlb2YgYS5uYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5uYW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBhLmZpbGVuYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5maWxlbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5nZXRUb3RhbEFjdGl2YXRpb25Db3VudCgpO1xuICAgICAgICBpZiAodG90YWxDb3VudCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9J2BcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5pbml0aWFsaXplJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZnJvbSBkaXNrIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfSdgLFxuICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgY291bnRzOiB0aGlzLmdldEFjdGl2YXRpb25Db3VudHMoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gTm8gYWN0aXZhdGlvbiBmaWxlIGZvdW5kIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybihgW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGxvYWQgYWN0aXZhdGlvbiBmaWxlIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCwgeyBlcnJvciB9KTtcblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgICAgc291cmNlOiAnQWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUnLFxuICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gbG9hZCBhY3RpdmF0aW9uIGZpbGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyDigJQgc3RhcnRpbmcgZnJlc2ggKHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbilgLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpLCBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYW4gZWxlbWVudCBhY3RpdmF0aW9uLiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdC5cbiAgICovXG4gIHJlY29yZEFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0pIHtcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBEZWR1cGxpY2F0ZSDigJQgZG9uJ3QgYWRkIGlmIGFscmVhZHkgcHJlc2VudFxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSE7XG4gICAgY29uc3QgYWxyZWFkeUFjdGl2ZSA9IGV4aXN0aW5nLnNvbWUoYSA9PiBhLm5hbWUgPT09IG5vcm1hbGl6ZWROYW1lKTtcbiAgICBpZiAoYWxyZWFkeUFjdGl2ZSkgcmV0dXJuO1xuXG4gICAgZXhpc3RpbmcucHVzaCh7XG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgIGFjdGl2YXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGRlYWN0aXZhdGlvbi4gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QuXG4gICAqL1xuICByZWNvcmREZWFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHR5cGUgPSBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlKTtcbiAgICBpZiAoIUFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIobmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWN0aXZhdGlvbnMgPSB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdO1xuICAgIGlmICghYWN0aXZhdGlvbnMpIHJldHVybjtcblxuICAgIGNvbnN0IGluaXRpYWxMZW5ndGggPSBhY3RpdmF0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IGFjdGl2YXRpb25zLmZpbHRlcihhID0+IGEubmFtZSAhPT0gbm9ybWFsaXplZE5hbWUpO1xuXG4gICAgLy8gT25seSBwZXJzaXN0IGlmIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hLmxlbmd0aCAhPT0gaW5pdGlhbExlbmd0aCkge1xuICAgICAgdGhpcy5wZXJzaXN0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc3BlY2lmaWMgYWN0aXZhdGlvbiBieSBuYW1lICh1c2VkIGR1cmluZyByZXN0b3JlIHRvIHBydW5lIHN0YWxlIGVudHJpZXMpLlxuICAgKi9cbiAgcmVtb3ZlU3RhbGVBY3RpdmF0aW9uKGVsZW1lbnRUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVhY3RpdmF0aW9uKGVsZW1lbnRUeXBlLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmb3IgYSBnaXZlbiBlbGVtZW50IHR5cGUuXG4gICAqL1xuICBnZXRBY3RpdmF0aW9ucyhlbGVtZW50VHlwZTogc3RyaW5nKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPyBbLi4udGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSFdIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBwZXJzaXN0ZWQgYWN0aXZhdGlvbiBzbmFwc2hvdHMgZnJvbSBkaXNrIGZvciByZXBvcnRpbmcvZGlhZ25vc3RpY3MuXG4gICAqXG4gICAqIFRoaXMgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBtdXRhdGUgdGhlIHN0b3JlJ3MgaW4tbWVtb3J5IHN0YXRlLCBhbmQgaXQgaXNcbiAgICogc2FmZSB0byBjYWxsIGZyb20gdGhlIHdlYiBjb25zb2xlIHRvIGluc3BlY3Qgb3RoZXIgc2Vzc2lvbnMnIHBlcnNpc3RlZFxuICAgKiBhY3RpdmF0aW9ucyB3aXRob3V0IGNoYW5naW5nIGxpdmUgcG9saWN5IGVuZm9yY2VtZW50IGZvciB0aGUgY3VycmVudFxuICAgKiBwcm9jZXNzLlxuICAgKi9cbiAgYXN5bmMgbGlzdFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZXMoc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTxQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVTbmFwc2hvdFtdPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkU2Vzc2lvbklkID0gdHlwZW9mIHNlc3Npb25JZCA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvbklkLnRyaW0oKVxuICAgICAgPyBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihzZXNzaW9uSWQpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCB0aGlzLmdldFBlcnNpc3RlZEFjdGl2YXRpb25GaWxlbmFtZXMobm9ybWFsaXplZFNlc3Npb25JZCk7XG4gICAgICBjb25zdCBzdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsZW5hbWVzLm1hcChmaWxlbmFtZSA9PiB0aGlzLnJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWUpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGVzXG4gICAgICAgIC5mbGF0TWFwKChzdGF0ZSkgPT4gKHN0YXRlID8gW3N0YXRlXSA6IFtdKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc2Vzc2lvbklkLmxvY2FsZUNvbXBhcmUoYi5zZXNzaW9uSWQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGVudW1lcmF0ZSBhY3RpdmF0aW9uIHNuYXBzaG90cyBmb3IgcmVwb3J0aW5nJywge1xuICAgICAgICAgIHN0YXRlRGlyOiB0aGlzLnN0YXRlRGlyLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGVyc2lzdGVkQWN0aXZhdGlvbkZpbGVuYW1lcyhzZXNzaW9uSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIFtgYWN0aXZhdGlvbnMtJHtzZXNzaW9uSWR9Lmpzb25gXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMuc3RhdGVEaXIpO1xuICAgIHJldHVybiBmaWxlbmFtZXMuZmlsdGVyKG5hbWUgPT4gL15hY3RpdmF0aW9ucy1bXi5dK1xcLmpzb24kL3UudGVzdChuYW1lKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8UGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3QgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgZmlsZW5hbWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlO1xuICAgICAgaWYgKCF0aGlzLmlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbklkLFxuICAgICAgICBsYXN0VXBkYXRlZDogZGF0YS5sYXN0VXBkYXRlZCxcbiAgICAgICAgYWN0aXZhdGlvbnM6IHRoaXMubm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoZGF0YS5hY3RpdmF0aW9ucyksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ1NuYXBzaG90UmVhZEVycm9yKGZpbGVQYXRoLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGE6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRhLnZlcnNpb24gPT09IDFcbiAgICAgICYmIHR5cGVvZiBkYXRhLnNlc3Npb25JZCA9PT0gJ3N0cmluZydcbiAgICAgICYmIEJvb2xlYW4oZGF0YS5hY3RpdmF0aW9ucylcbiAgICAgICYmIHR5cGVvZiBkYXRhLmFjdGl2YXRpb25zID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoYWN0aXZhdGlvbnM6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVsnYWN0aXZhdGlvbnMnXSk6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW3R5cGUsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgfHwgIUFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzID0gZW50cmllcy5mbGF0TWFwKChlbnRyeSkgPT4gdGhpcy5ub3JtYWxpemVQZXJzaXN0ZWRBY3RpdmF0aW9uKGVudHJ5KSk7XG4gICAgICBpZiAobm9ybWFsaXplZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBub3JtYWxpemVkW3R5cGVdID0gbm9ybWFsaXplZEVudHJpZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb24oZW50cnk6IFBlcnNpc3RlZEFjdGl2YXRpb24gfCBudWxsIHwgdW5kZWZpbmVkKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkubmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBlbnRyeS5maWxlbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkuZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBbe1xuICAgICAgLi4uZW50cnksXG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICB9XTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nU25hcHNob3RSZWFkRXJyb3IoZmlsZVBhdGg6IHN0cmluZywgZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ1tBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIHVucmVhZGFibGUgYWN0aXZhdGlvbiBzbmFwc2hvdCBkdXJpbmcgcmVwb3J0aW5nJywge1xuICAgICAgZmlsZVBhdGgsXG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vzc2lvbiBJRCB0aGlzIHN0b3JlIGlzIHNjb3BlZCB0by5cbiAgICovXG4gIGdldFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucy4gVXNlZCBmb3IgdGVzdGluZyBvciBhZG1pbiByZXNldC5cbiAgICovXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdGVuY2Ugd2l0aCByZXRyeSBmb3IgdHJhbnNpZW50IGRpc2sgZmFpbHVyZXMuXG4gICAqIFJldHJpZXMgdXAgdG8gUEVSU0lTVF9NQVhfUkVUUklFUyB0aW1lcyB3aXRoIGEgc2hvcnQgZGVsYXkuXG4gICAqIERpc2sgZmFpbHVyZSBkb2VzIG5vdCBibG9jayBhY3RpdmF0aW9uIG9wZXJhdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RBc3luYygpOiB2b2lkIHtcbiAgICB0aGlzLnBlcnNpc3RXaXRoUmV0cnkoMCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tBY3RpdmF0aW9uU3RvcmVdIEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgYWZ0ZXIgcmV0cmllcycsIHsgZXJyb3IgfSk7XG5cbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdBY3RpdmF0aW9uU3RvcmUucGVyc2lzdEFzeW5jJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyBhZnRlciAke1BFUlNJU1RfTUFYX1JFVFJJRVMgKyAxfSBhdHRlbXB0cyDigJQgc3RhdGUgY29udGludWVzIGluLW1lbW9yeSBvbmx5YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgZXJyb3I6IFN0cmluZyhlcnJvciksIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcGVyc2lzdCB3aXRoIHJldHJpZXMgZm9yIHRyYW5zaWVudCBmYWlsdXJlcyAoZS5nLiwgRUJVU1ksIEVBR0FJTikuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RXaXRoUmV0cnkoYXR0ZW1wdDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA8IFBFUlNJU1RfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFBFUlNJU1RfUkVUUllfREVMQVlfTVMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdFdpdGhSZXRyeShhdHRlbXB0ICsgMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgY3VycmVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLnN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB0aGlzLmZpbGVPcHMud3JpdGVGaWxlKHRoaXMucGVyc2lzdFBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUsIG51bGwsIDIpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW1wdHlTdGF0ZSgpOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhY3RpdmF0aW9uczoge30sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG90YWxBY3RpdmF0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKS5yZWR1Y2UoXG4gICAgICAoc3VtLCBhcnIpID0+IHN1bSArIChhcnI/Lmxlbmd0aCA/PyAwKSwgMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2YXRpb25Db3VudHMoKTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG4gICAgY29uc3QgY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBbdHlwZSwgYXJyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKGFyciAmJiBhcnIubGVuZ3RoID4gMCkge1xuICAgICAgICBjb3VudHNbdHlwZV0gPSBhcnIubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnRzO1xuICB9XG59XG4iXX0=
|
|
@@ -72,6 +72,7 @@ export interface SessionEventPayload {
|
|
|
72
72
|
export interface IngestBroadcasts {
|
|
73
73
|
logBroadcast: (entry: UnifiedLogEntry) => void;
|
|
74
74
|
metricsOnSnapshot?: (snapshot: MetricSnapshot) => void;
|
|
75
|
+
storeMetricsSnapshot?: (snapshot: MetricSnapshot, sessionId: string) => void;
|
|
75
76
|
sessionBroadcast?: (event: SessionInfo) => void;
|
|
76
77
|
}
|
|
77
78
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA0B7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;IACvB,iGAAiG;IACjG,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;IACjC,uCAAuC;IACvC,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAOD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA0B7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;IACvB,iGAAiG;IACjG,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;IACjC,uCAAuC;IACvC,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAOD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,CAqanF"}
|
|
@@ -190,6 +190,9 @@ export function createIngestRoutes(broadcasts) {
|
|
|
190
190
|
if (broadcasts.metricsOnSnapshot) {
|
|
191
191
|
broadcasts.metricsOnSnapshot(payload.snapshot);
|
|
192
192
|
}
|
|
193
|
+
if (broadcasts.storeMetricsSnapshot) {
|
|
194
|
+
broadcasts.storeMetricsSnapshot(payload.snapshot, payload.sessionId);
|
|
195
|
+
}
|
|
193
196
|
// Update heartbeat, revive ended sessions, or auto-register orphans (#1870)
|
|
194
197
|
const session = ensureSession(payload.sessionId);
|
|
195
198
|
logger.debug(`[IngestRoutes] Metrics ingested from ${session?.displayName ?? payload.sessionId}`);
|
|
@@ -447,4 +450,4 @@ export function createIngestRoutes(broadcasts) {
|
|
|
447
450
|
}
|
|
448
451
|
return { router, getSessions, registerLeaderSession, registerConsoleSession };
|
|
449
452
|
}
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5nZXN0Um91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL0luZ2VzdFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUkxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxQyxrREFBa0Q7QUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFFL0IscURBQXFEO0FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQyxpREFBaUQ7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBRWhDLDZEQUE2RDtBQUM3RCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxrRUFBa0U7QUFDbEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFlBQVk7QUE2RS9DLDZEQUE2RDtBQUM3RCxTQUFTLGNBQWMsQ0FBQyxDQUFTO0lBQy9CLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0FBQ3pELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FB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QUFFLE9BQU87UUFDcEMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQ3RCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFdBQVc7WUFDWCxLQUFLLEVBQUUsU0FBUyxFQUFFLDZDQUE2QztZQUMvRCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN2QyxNQUFNLEVBQUUsUUFBUTtZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLGFBQWEsRUFBRSxJQUFJO1lBQ25CLElBQUksRUFBRSxTQUFTO1NBQ2hCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudCBpbmdlc3Rpb24gcm91dGVzIGZvciB0aGUgdW5pZmllZCB3ZWIgY29uc29sZS5cbiAqXG4gKiBUaGUgY29uc29sZSBsZWFkZXIgbW91bnRzIHRoZXNlIHJvdXRlcyBzbyBmb2xsb3dlciBNQ1Agc2VydmVycyBjYW5cbiAqIGZvcndhcmQgdGhlaXIgbG9ncywgbWV0cmljcywgYW5kIHNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cy4gQWxsIGluZ2VzdGVkXG4gKiBlbnRyaWVzIGFyZSBzdGFtcGVkIHdpdGggYF9zZXNzaW9uSWRgIGluIHRoZWlyIGRhdGEgZmllbGQgYW5kIHRoZW5cbiAqIGJyb2FkY2FzdCB0byBTU0UgY2xpZW50cyB2aWEgdGhlIGV4aXN0aW5nIGxvZy9tZXRyaWNzIGJyb2FkY2FzdCBob29rcy5cbiAqXG4gKiBSb3V0ZXM6XG4gKiAtIFBPU1QgL2FwaS9pbmdlc3QvbG9ncyAgICAg4oCUIEJhdGNoZWQgbG9nIGVudHJpZXMgZnJvbSBhIGZvbGxvd2VyXG4gKiAtIFBPU1QgL2FwaS9pbmdlc3QvbWV0cmljcyAg4oCUIE1ldHJpYyBzbmFwc2hvdHMgZnJvbSBhIGZvbGxvd2VyXG4gKiAtIFBPU1QgL2FwaS9pbmdlc3Qvc2Vzc2lvbiAg4oCUIFNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cyAoc3RhcnRlZC9zdG9wcGVkL2hlYXJ0YmVhdClcbiAqIC0gR0VUICAvYXBpL3Nlc3Npb25zICAgICAgICDigJQgQWN0aXZlIHNlc3Npb24gbGlzdCBmb3IgdGhlIFVJXG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgZXhwcmVzcywgeyBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0eXBlIHsgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgeyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9TbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZXNzaW9uTmFtZVBvb2wgfSBmcm9tICcuL1Nlc3Npb25OYW1lcy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vY29uZmlnL2Vudi5qcyc7XG5cbi8qKiBNYXhpbXVtIHBheWxvYWQgc2l6ZSBmb3IgaW5nZXN0aW9uIHJlcXVlc3RzICovXG5jb25zdCBNQVhfUEFZTE9BRF9TSVpFID0gJzFtYic7XG5cbi8qKiBSYXRlIGxpbWl0OiBtYXggcmVxdWVzdHMgcGVyIHdpbmRvdyBwZXIgc291cmNlICovXG5jb25zdCBSQVRFX0xJTUlUX01BWCA9IDEwMDA7XG5jb25zdCBSQVRFX0xJTUlUX1dJTkRPV19NUyA9IDYwXzAwMDtcblxuLyoqIEhvdyBvZnRlbiB0byBjaGVjayBmb3Igc3RhbGUgc2Vzc2lvbnMgKG1zKSAqL1xuY29uc3QgUkVBUEVSX0lOVEVSVkFMX01TID0gNV8wMDA7XG5cbi8qKiBIb3cgbG9uZyBzaW5jZSBsYXN0IGhlYXJ0YmVhdCBiZWZvcmUgYSBzZXNzaW9uIGlzIGNvbnNpZGVyZWQgZGVhZCAobXMpICovXG5jb25zdCBTRVNTSU9OX1NUQUxFX01TID0gMTVfMDAwO1xuXG4vKiogVGltZW91dCBmb3IgbGVnYWN5IHBvcnQgZmVkZXJhdGlvbi9wcm94eSByZXF1ZXN0cyAobXMpICovXG5jb25zdCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG4vKiogSG93IGxvbmcgYmVmb3JlIGVuZGVkIHNlc3Npb25zIGFyZSBwdXJnZWQgZnJvbSB0aGUgTWFwIChtcykgKi9cbmNvbnN0IEVOREVEX1BVUkdFX01TID0gNSAqIDYwXzAwMDsgLy8gNSBtaW51dGVzXG5cbi8qKlxuICogVHJhY2tlZCBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25JbmZvIHtcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHNlc3Npb24gKFVVSUQgb3IgYGNvbnNvbGUtPHBpZD5gKS4gKi9cbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBGcmllbmRseSBwdXBwZXQgbmFtZSAoZS5nLiwgXCJLZXJtaXRcIiwgXCJQdW5jaFwiKSBvciBcIldlYiBDb25zb2xlXCIuICovXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIC8qKiBDYW5vbmljYWwgaGV4IGNvbG9yIGZvciB0aGlzIHB1cHBldCBjaGFyYWN0ZXIuICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBPUyBwcm9jZXNzIElEIG9mIHRoZSBNQ1Agc2VydmVyIG9yIHdlYiBjb25zb2xlIHByb2Nlc3MuICovXG4gIHBpZDogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSBzZXNzaW9uIHN0YXJ0ZWQuICovXG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICAvKiogSVNPIHRpbWVzdGFtcCBvZiB0aGUgbW9zdCByZWNlbnQgaGVhcnRiZWF0IChmb2xsb3dlcnMpIG9yIHJlZ2lzdHJhdGlvbiAobGVhZGVyL2NvbnNvbGUpLiAqL1xuICBsYXN0SGVhcnRiZWF0OiBzdHJpbmc7XG4gIC8qKiBMaWZlY3ljbGUgc3RhdHVzIOKAlCAnYWN0aXZlJyB1bnRpbCBlbmRlZCBvciByZWFwZWQgZm9yIHN0YWxlbmVzcy4gKi9cbiAgc3RhdHVzOiAnYWN0aXZlJyB8ICdlbmRlZCc7XG4gIC8qKiBUcnVlIGlmIHRoaXMgc2Vzc2lvbiB3b24gbGVhZGVyIGVsZWN0aW9uIGFuZCBvd25zIHRoZSB0b2tlbiBmaWxlLiAqL1xuICBpc0xlYWRlcjogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBzZXNzaW9uIGNvbm5lY3RlZCB3aXRoIGEgdmFsaWQgQmVhcmVyIHRva2VuICgjMTgwNSkuICovXG4gIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKiBTZXNzaW9uIGtpbmQg4oCUICdtY3AnIGZvciBNQ1Agc3RkaW8gc2Vzc2lvbnMsICdjb25zb2xlJyBmb3IgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiAoIzE4MDUpLiAqL1xuICBraW5kOiAnbWNwJyB8ICdjb25zb2xlJztcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L2xvZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RMb2dQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGVudHJpZXM6IFVuaWZpZWRMb2dFbnRyeVtdO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3QvbWV0cmljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdE1ldHJpY3NQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRXZlbnRQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGV2ZW50OiAnc3RhcnRlZCcgfCAnc3RvcHBlZCcgfCAnaGVhcnRiZWF0JztcbiAgcGlkOiBudW1iZXI7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENhbGxiYWNrcyBwcm92aWRlZCBieSB0aGUgdW5pZmllZCBjb25zb2xlIG9yY2hlc3RyYXRvciBmb3IgYnJvYWRjYXN0aW5nXG4gKiBpbmdlc3RlZCBldmVudHMgdGhyb3VnaCB0aGUgZXhpc3RpbmcgU1NFIGluZnJhc3RydWN0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdEJyb2FkY2FzdHMge1xuICBsb2dCcm9hZGNhc3Q6IChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkO1xuICBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQ7XG4gIHNlc3Npb25Ccm9hZGNhc3Q/OiAoZXZlbnQ6IFNlc3Npb25JbmZvKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjcmVhdGluZyBpbmdlc3Qgcm91dGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdFJvdXRlc1Jlc3VsdCB7XG4gIHJvdXRlcjogUm91dGVyO1xuICAvKiogR2V0IGFsbCB0cmFja2VkIHNlc3Npb25zICovXG4gIGdldFNlc3Npb25zOiAoKSA9PiBTZXNzaW9uSW5mb1tdO1xuICAvKiogUmVnaXN0ZXIgdGhlIGxlYWRlciBhcyBhIHNlc3Npb24gKi9cbiAgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uOiAoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZDogbnVtYmVyKSA9PiB2b2lkO1xuICAvKiogUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGFzIGEgc2Vzc2lvbiBzbyB0aGUgaW5kaWNhdG9yIGlzIG5ldmVyIGVtcHR5ICgjMTgwNSkgKi9cbiAgcmVnaXN0ZXJDb25zb2xlU2Vzc2lvbjogKCkgPT4gdm9pZDtcbn1cblxuLyoqIE5vcm1hbGl6ZSBhIHN0cmluZyB2aWEgVW5pY29kZVZhbGlkYXRvciAoRE1DUC1TRUMtMDA0KSAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5wdXQoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHMpLm5vcm1hbGl6ZWRDb250ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgaW5nZXN0aW9uIHJvdXRlcyBhbmQgc2Vzc2lvbiByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0gYnJvYWRjYXN0cyAtIENhbGxiYWNrcyB0byBmb3J3YXJkIGluZ2VzdGVkIGV2ZW50cyB0byBTU0UgY2xpZW50c1xuICogQHJldHVybnMgUm91dGVyIGFuZCBzZXNzaW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbmdlc3RSb3V0ZXMoYnJvYWRjYXN0czogSW5nZXN0QnJvYWRjYXN0cyk6IEluZ2VzdFJvdXRlc1Jlc3VsdCB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuICBjb25zdCBzZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBTZXNzaW9uSW5mbz4oKTtcbiAgY29uc3QgbmFtZVBvb2wgPSBuZXcgU2Vzc2lvbk5hbWVQb29sKCk7XG4gIGNvbnN0IHJhdGVMaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcihSQVRFX0xJTUlUX01BWCwgUkFURV9MSU1JVF9XSU5ET1dfTVMpO1xuXG4gIC8vIFNlc3Npb25zIHRoZSB1c2VyIGV4cGxpY2l0bHkga2lsbGVkIOKAlCBuZXZlciBjb21lIGJhY2sgKCMxODcwKS5cbiAgLy8gQ2xlYXJlZCBvbmx5IG9uIHNlcnZlciByZXN0YXJ0LCB3aGljaCBpcyBhcHByb3ByaWF0ZSBzaW5jZSB0aGF0J3MgYSBuZXcgY29udGV4dC5cbiAgY29uc3Qga2lsbGVkU2Vzc2lvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvLyBTZXNzaW9ucyB3YWl0aW5nIGZvciBhIFBJRCBzbyB3ZSBjYW4gU0lHVEVSTSB0aGVtICgjMTg3MCkuXG4gIC8vIFdoZW4gdGhlIHVzZXIgZGlzbWlzc2VzIGEgcGlkPTAgb3JwaGFuLCB3ZSBhZGQgaXQgaGVyZS4gVGhlIG5leHQgaGVhcnRiZWF0XG4gIC8vIChldmVyeSAxMHMpIGNhcnJpZXMgdGhlIFBJRCDigJQgd2UgU0lHVEVSTSBpbW1lZGlhdGVseSBhbmQgbW92ZSB0byBraWxsZWRTZXNzaW9ucy5cbiAgY29uc3QgcGVuZGluZ0tpbGxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqIEV4ZWN1dGUgYSBkZWZlcnJlZCBraWxsIGlmIHdlIG5vdyBoYXZlIGEgUElELiAqL1xuICBmdW5jdGlvbiB0cnlFeGVjdXRlUGVuZGluZ0tpbGwoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGtpbGxQaWQgPSBwaWQgfHwgc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk/LnBpZDtcbiAgICBpZiAoIWtpbGxQaWQpIHJldHVybjtcbiAgICB0cnkgeyBwcm9jZXNzLmtpbGwoa2lsbFBpZCwgJ1NJR1RFUk0nKTsgfSBjYXRjaCB7IC8qIGFscmVhZHkgZGVhZCAqLyB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIERlZmVycmVkIGtpbGwgZXhlY3V0ZWQg4oCUIFBJRCBhcnJpdmVkJywge1xuICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nPy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQ6IGtpbGxQaWQsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUHJvbW90ZSBhIHBlbmRpbmcga2lsbCB0byBwZXJtYW5lbnQuICovXG4gIGZ1bmN0aW9uIGZpbmFsaXplUGVuZGluZ0tpbGwoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlcik6IHZvaWQge1xuICAgIHRyeUV4ZWN1dGVQZW5kaW5nS2lsbChzZXNzaW9uSWQsIHBpZCk7XG4gICAgcGVuZGluZ0tpbGxzLmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICB9XG5cbiAgLyoqIENyZWF0ZSBhIG5ldyBzZXNzaW9uIGVudHJ5IGZvciBhbiBvcnBoYW4uIFJldHVybnMgbnVsbCBvbiBmYWlsdXJlLiAqL1xuICBmdW5jdGlvbiBhdXRvUmVnaXN0ZXIoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlciwgYXV0aGVudGljYXRlZCA9IGZhbHNlKTogU2Vzc2lvbkluZm8gfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24oc2Vzc2lvbklkKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gbmFtZVBvb2wuZ2V0Q29sb3Ioc2Vzc2lvbklkKSA/PyAnIzNiODJmNic7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjb25zdCBpbmZvOiBTZXNzaW9uSW5mbyA9IHtcbiAgICAgICAgc2Vzc2lvbklkLCBkaXNwbGF5TmFtZSwgY29sb3IsXG4gICAgICAgIHBpZDogcGlkIHx8IDAsXG4gICAgICAgIHN0YXJ0ZWRBdDogbm93LCBsYXN0SGVhcnRiZWF0OiBub3csXG4gICAgICAgIHN0YXR1czogJ2FjdGl2ZScsIGlzTGVhZGVyOiBmYWxzZSwgYXV0aGVudGljYXRlZCwga2luZDogJ21jcCcsXG4gICAgICB9O1xuICAgICAgc2Vzc2lvbnMuc2V0KHNlc3Npb25JZCwgaW5mbyk7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQXV0by1yZWdpc3RlcmVkIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHNvdXJjZTogcGlkID8gJ2hlYXJ0YmVhdCcgOiAnaW5nZXN0aW9uJyxcbiAgICAgIH0pO1xuICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oaW5mbyk7XG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0luZ2VzdFJvdXRlc10gRmFpbGVkIHRvIGF1dG8tcmVnaXN0ZXIgb3JwaGFuZWQgc2Vzc2lvbicsIHtcbiAgICAgICAgc2Vzc2lvbklkLCBlcnJvcjogKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dG8tcmVnaXN0ZXIgb3IgdXBkYXRlIGFuIG9ycGhhbmVkIHNlc3Npb24gZnJvbSBpbmdlc3Rpb24gZGF0YS5cbiAgICogUmV0dXJucyB0aGUgc2Vzc2lvbiAoZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCksIG9yIG51bGwgaWYga2lsbGVkL3BlbmRpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBlbnN1cmVTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ/OiBudW1iZXIsIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZSk6IFNlc3Npb25JbmZvIHwgbnVsbCB7XG4gICAgaWYgKGtpbGxlZFNlc3Npb25zLmhhcyhzZXNzaW9uSWQpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAocGVuZGluZ0tpbGxzLmhhcyhzZXNzaW9uSWQpKSB7XG4gICAgICBmaW5hbGl6ZVBlbmRpbmdLaWxsKHNlc3Npb25JZCwgcGlkKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFleGlzdGluZykgcmV0dXJuIGF1dG9SZWdpc3RlcihzZXNzaW9uSWQsIHBpZCwgYXV0aGVudGljYXRlZCk7XG5cbiAgICBpZiAoZXhpc3Rpbmcuc3RhdHVzID09PSAnZW5kZWQnKSB7XG4gICAgICBleGlzdGluZy5zdGF0dXMgPSAnYWN0aXZlJztcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZXZpdmVkIGVuZGVkIHNlc3Npb24gc3RpbGwgc2VuZGluZyBkYXRhJywge1xuICAgICAgICBkaXNwbGF5TmFtZTogZXhpc3RpbmcuZGlzcGxheU5hbWUsIHNlc3Npb25JZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBleGlzdGluZy5sYXN0SGVhcnRiZWF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGlmIChwaWQgJiYgIWV4aXN0aW5nLnBpZCkge1xuICAgICAgZXhpc3RpbmcucGlkID0gcGlkO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFJlY292ZXJlZCBQSUQgZm9yIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBleGlzdGluZy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgLy8gSlNPTiBib2R5IHBhcnNpbmcgd2l0aCBzaXplIGxpbWl0XG4gIHJvdXRlci51c2UoZXhwcmVzcy5qc29uKHsgbGltaXQ6IE1BWF9QQVlMT0FEX1NJWkUgfSkpO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5nZXN0L2xvZ3Mg4oCUIFJlY2VpdmUgYmF0Y2hlZCBsb2cgZW50cmllcyBmcm9tIGEgZm9sbG93ZXIuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9pbmdlc3QvbG9ncycsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBpZiAoIXJhdGVMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1JhdGUgbGltaXQgZXhjZWVkZWQnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSByZXEuYm9keSBhcyBJbmdlc3RMb2dQYXlsb2FkO1xuICAgIGlmICghcGF5bG9hZD8uc2Vzc2lvbklkIHx8ICFBcnJheS5pc0FycmF5KHBheWxvYWQuZW50cmllcykpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVkID0gcGF5bG9hZCA/IE9iamVjdC5rZXlzKHBheWxvYWQpIDogW107XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gSW52YWxpZCBsb2cgcGF5bG9hZCcsIHsgcmVjZWl2ZWQsIGhhc1Nlc3Npb25JZDogISFwYXlsb2FkPy5zZXNzaW9uSWQsIGhhc0VudHJpZXM6IEFycmF5LmlzQXJyYXkocGF5bG9hZD8uZW50cmllcykgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXlsb2FkJywgcmVxdWlyZWQ6IFsnc2Vzc2lvbklkJywgJ2VudHJpZXMnXSwgcmVjZWl2ZWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBheWxvYWQuc2Vzc2lvbklkID0gbm9ybWFsaXplSW5wdXQocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBsZXQgc2tpcHBlZCA9IDA7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBwYXlsb2FkLmVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5Lm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7IHNraXBwZWQrKzsgY29udGludWU7IH1cbiAgICAgIGNvbnN0IHN0YW1wZWQ6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnksXG4gICAgICAgIGRhdGE6IHsgLi4uZW50cnkuZGF0YSwgX3Nlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQgfSxcbiAgICAgIH07XG4gICAgICBicm9hZGNhc3RzLmxvZ0Jyb2FkY2FzdChzdGFtcGVkKTtcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGhlYXJ0YmVhdCwgcmV2aXZlIGVuZGVkIHNlc3Npb25zLCBvciBhdXRvLXJlZ2lzdGVyIG9ycGhhbnMgKCMxODcwKVxuICAgIGNvbnN0IHNlc3Npb24gPSBlbnN1cmVTZXNzaW9uKHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGlmIChza2lwcGVkID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbSW5nZXN0Um91dGVzXSBMb2cgaW5nZXN0IGZyb20gJHtzZXNzaW9uPy5kaXNwbGF5TmFtZSA/PyBwYXlsb2FkLnNlc3Npb25JZH06IGFjY2VwdGVkPSR7Y291bnR9LCBza2lwcGVkPSR7c2tpcHBlZH1gKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IGFjY2VwdGVkOiBjb3VudCwgc2tpcHBlZCB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbmdlc3QvbWV0cmljcyDigJQgUmVjZWl2ZSBtZXRyaWMgc25hcHNob3RzIGZyb20gYSBmb2xsb3dlci5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9tZXRyaWNzJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUmF0ZSBsaW1pdCBleGNlZWRlZCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHJlcS5ib2R5IGFzIEluZ2VzdE1ldHJpY3NQYXlsb2FkO1xuICAgIGlmICghcGF5bG9hZD8uc2Vzc2lvbklkIHx8ICFwYXlsb2FkLnNuYXBzaG90KSB7XG4gICAgICBjb25zdCByZWNlaXZlZCA9IHBheWxvYWQgPyBPYmplY3Qua2V5cyhwYXlsb2FkKSA6IFtdO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEludmFsaWQgbWV0cmljcyBwYXlsb2FkJywgeyByZWNlaXZlZCB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnc25hcHNob3QnXSwgcmVjZWl2ZWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBheWxvYWQuc2Vzc2lvbklkID0gbm9ybWFsaXplSW5wdXQocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgaWYgKGJyb2FkY2FzdHMubWV0cmljc09uU25hcHNob3QpIHtcbiAgICAgIGJyb2FkY2FzdHMubWV0cmljc09uU25hcHNob3QocGF5bG9hZC5zbmFwc2hvdCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGhlYXJ0YmVhdCwgcmV2aXZlIGVuZGVkIHNlc3Npb25zLCBvciBhdXRvLXJlZ2lzdGVyIG9ycGhhbnMgKCMxODcwKVxuICAgIGNvbnN0IHNlc3Npb24gPSBlbnN1cmVTZXNzaW9uKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICBsb2dnZXIuZGVidWcoYFtJbmdlc3RSb3V0ZXNdIE1ldHJpY3MgaW5nZXN0ZWQgZnJvbSAke3Nlc3Npb24/LmRpc3BsYXlOYW1lID8/IHBheWxvYWQuc2Vzc2lvbklkfWApO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgYWNjZXB0ZWQ6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24g4oCUIFNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cy5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9zZXNzaW9uJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSByZXEuYm9keSBhcyBTZXNzaW9uRXZlbnRQYXlsb2FkO1xuICAgIGlmICghcGF5bG9hZD8uc2Vzc2lvbklkIHx8ICFwYXlsb2FkLmV2ZW50KSB7XG4gICAgICBjb25zdCByZWNlaXZlZCA9IHBheWxvYWQgPyBPYmplY3Qua2V5cyhwYXlsb2FkKSA6IFtdO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEludmFsaWQgc2Vzc2lvbiBldmVudCBwYXlsb2FkJywgeyByZWNlaXZlZCB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnZXZlbnQnXSwgcmVjZWl2ZWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBheWxvYWQuc2Vzc2lvbklkID0gbm9ybWFsaXplSW5wdXQocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgc3dpdGNoIChwYXlsb2FkLmV2ZW50KSB7XG4gICAgICBjYXNlICdzdGFydGVkJzoge1xuICAgICAgICAvLyBLaWxsZWQgc2Vzc2lvbnMgc3RheSBkZWFkOyBwZW5kaW5nIGtpbGxzIGdldCBmaW5hbGl6ZWQgKCMxODcwKVxuICAgICAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKHBheWxvYWQuc2Vzc2lvbklkKSkgYnJlYWs7XG4gICAgICAgIGlmIChwZW5kaW5nS2lsbHMuaGFzKHBheWxvYWQuc2Vzc2lvbklkKSkgeyBmaW5hbGl6ZVBlbmRpbmdLaWxsKHBheWxvYWQuc2Vzc2lvbklkLCBwYXlsb2FkLnBpZCk7IGJyZWFrOyB9XG5cbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24ocGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHBheWxvYWQuc2Vzc2lvbklkKSA/PyAnIzNiODJmNic7XG4gICAgICAgIGNvbnN0IGlzQXV0aGVudGljYXRlZCA9IEJvb2xlYW4oKHJlcyBhcyBhbnkpLmxvY2Fscz8udG9rZW5FbnRyeSk7XG4gICAgICAgIHNlc3Npb25zLnNldChwYXlsb2FkLnNlc3Npb25JZCwge1xuICAgICAgICAgIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIGRpc3BsYXlOYW1lLCBjb2xvcixcbiAgICAgICAgICBwaWQ6IHBheWxvYWQucGlkLCBzdGFydGVkQXQ6IHBheWxvYWQuc3RhcnRlZEF0IHx8IG5vdywgbGFzdEhlYXJ0YmVhdDogbm93LFxuICAgICAgICAgIHN0YXR1czogJ2FjdGl2ZScsIGlzTGVhZGVyOiBmYWxzZSwgYXV0aGVudGljYXRlZDogaXNBdXRoZW50aWNhdGVkLCBraW5kOiAnbWNwJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIHJlZ2lzdGVyZWQnLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWUsIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIHBpZDogcGF5bG9hZC5waWQsIGNvbG9yLFxuICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCkhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzdG9wcGVkJzoge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICAgICAgZXhpc3RpbmcubGFzdEhlYXJ0YmVhdCA9IG5vdztcbiAgICAgICAgICBuYW1lUG9vbC5yZWxlYXNlKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gU2Vzc2lvbiBzdG9wcGVkJywge1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLCBwaWQ6IGV4aXN0aW5nLnBpZCxcbiAgICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oZXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnaGVhcnRiZWF0Jzoge1xuICAgICAgICAvLyBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSDigJQgaGVhcnRiZWF0IGluY2x1ZGVzIFBJRCBmb3IgcmVjb3ZlcnkgKCMxODcwKVxuICAgICAgICBlbnN1cmVTZXNzaW9uKHBheWxvYWQuc2Vzc2lvbklkLCBwYXlsb2FkLnBpZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgb2s6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9zZXNzaW9ucyDigJQgTGlzdCBhbGwgdHJhY2tlZCBzZXNzaW9ucy5cbiAgICovXG4gIHJvdXRlci5nZXQoJy9hcGkvc2Vzc2lvbnMnLCBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIC8vIFNlcnZlci1zaWRlIGFjdGl2ZSBmaWx0ZXIg4oCUIHRoZSBmcm9udGVuZCBhbHNvIGZpbHRlcnMsIGJ1dCBlbmRlZCBzZXNzaW9uc1xuICAgIC8vIHNob3VsZCBuZXZlciBsZWF2ZSB0aGUgQVBJIHRvIHByZXZlbnQgc3RhbGUgVUkgKCMxODcwKS5cbiAgICBjb25zdCBsb2NhbFNlc3Npb25zID0gQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKTtcbiAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcblxuICAgIC8vIEZlZGVyYXRlIHdpdGggdGhlIGxlZ2FjeSBwb3J0ICgzOTM5KSB0byBzaG93IGFsbCBzZXNzaW9ucyBvbiB0aGVcbiAgICAvLyBtYWNoaW5lLCBpbmNsdWRpbmcgdW5hdXRoZW50aWNhdGVkIG9uZXMgZnJvbSBwcmUtYXV0aCBpbnN0YWxscy5cbiAgICAvLyBTZXJ2ZXItdG8tc2VydmVyIGF2b2lkcyBDT1JTIHJlc3RyaWN0aW9ucyAoIzE4MDUpLlxuICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgIGNvbnN0IGxlZ2FjeVJlcyA9IGF3YWl0IGZldGNoKCdodHRwOi8vMTI3LjAuMC4xOjM5MzkvYXBpL3Nlc3Npb25zJywge1xuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmIChsZWdhY3lSZXMub2spIHtcbiAgICAgICAgICBjb25zdCBsZWdhY3lEYXRhID0gYXdhaXQgbGVnYWN5UmVzLmpzb24oKSBhcyB7IHNlc3Npb25zOiBTZXNzaW9uSW5mb1tdIH07XG4gICAgICAgICAgY29uc3QgbG9jYWxJZHMgPSBuZXcgU2V0KGxvY2FsU2Vzc2lvbnMubWFwKHMgPT4gcy5zZXNzaW9uSWQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxzIG9mIChsZWdhY3lEYXRhLnNlc3Npb25zIHx8IFtdKSkge1xuICAgICAgICAgICAgaWYgKCFsb2NhbElkcy5oYXMobHMuc2Vzc2lvbklkKSAmJiBscy5zdGF0dXMgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAgIGxvY2FsU2Vzc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4ubHMsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAga2luZDogbHMua2luZCB8fCAnbWNwJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTGVnYWN5IGluc3RhbmNlIG5vdCBydW5uaW5nIG9yIHVucmVhY2hhYmxlIOKAlCB0aGF0J3MgZmluZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5qc29uKHsgc2Vzc2lvbnM6IGxvY2FsU2Vzc2lvbnMgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvc2Vzc2lvbnMvOnNlc3Npb25JZC9raWxsIOKAlCBUZXJtaW5hdGUgYSBzZXNzaW9uJ3Mgc2VydmVyIHByb2Nlc3MuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9zZXNzaW9ucy86c2Vzc2lvbklkL2tpbGwnLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gcmVxLnBhcmFtc1snc2Vzc2lvbklkJ10gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcblxuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgLy8gU2Vzc2lvbiBub3QgaW4gbG9jYWwgTWFwIOKAlCB0cnkgcHJveHlpbmcga2lsbCB0byBsZWdhY3kgcG9ydCAoIzE4NzApXG4gICAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcbiAgICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgICAgY29uc3QgcHJveHlSZXMgPSBhd2FpdCBmZXRjaChgaHR0cDovLzEyNy4wLjAuMTozOTM5L2FwaS9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfS9raWxsYCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICBpZiAocHJveHlSZXMub2spIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm94eVJlcy5qc29uKCk7XG4gICAgICAgICAgICByZXMuanNvbihkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIExlZ2FjeSBpbnN0YW5jZSBub3QgcnVubmluZyDigJQgZmFsbCB0aHJvdWdoIHRvIDQwNFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gS2lsbCByZXF1ZXN0ZWQgZm9yIHVua25vd24gc2Vzc2lvbicsIHsgc2Vzc2lvbklkIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ1Nlc3Npb24gbm90IGZvdW5kJywgc2Vzc2lvbklkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghc2Vzc2lvbi5waWQpIHtcbiAgICAgIC8vIEF1dG8tcmVnaXN0ZXJlZCBvcnBoYW4gd2l0aCB1bmtub3duIFBJRCDigJQgcXVldWUgZm9yIGRlZmVycmVkIGtpbGwgKCMxODcwKS5cbiAgICAgIC8vIFRoZSBuZXh0IGhlYXJ0YmVhdCAoZXZlcnkgfjEwcykgY2FycmllcyB0aGUgUElELiBlbnN1cmVTZXNzaW9uKCkgd2lsbFxuICAgICAgLy8gU0lHVEVSTSB0aGUgcHJvY2VzcyBhcyBzb29uIGFzIHRoZSBQSUQgYXJyaXZlcy4gU2Vzc2lvbiBpcyBnb25lIGZvciBnb29kLlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgPSAnZW5kZWQnO1xuICAgICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgICAgcGVuZGluZ0tpbGxzLmFkZChzZXNzaW9uSWQpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFF1ZXVlZCBkZWZlcnJlZCBraWxsIOKAlCB3YWl0aW5nIGZvciBQSUQgdmlhIGhlYXJ0YmVhdCcsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCxcbiAgICAgIH0pO1xuICAgICAgcmVzLmpzb24oeyBvazogdHJ1ZSwgZGlzbWlzc2VkOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCByZWFzb246ICdwZW5kaW5nLWtpbGwnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNJR1RFUk0gdGhlIHByb2Nlc3MuIEV2ZW4gaWYgaXQgZmFpbHMgKEVTUkNIID0gYWxyZWFkeSBkZWFkLCBFUEVSTSA9IG5vdCBvdXJzKSxcbiAgICAvLyBtYXJrIHRoZSBzZXNzaW9uIGFzIHBlcm1hbmVudGx5IGtpbGxlZCBzbyBpdCBuZXZlciByZWFwcGVhcnMgKCMxODcwKS5cbiAgICBsZXQga2lsbGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHByb2Nlc3Mua2lsbChzZXNzaW9uLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVyciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGU7XG4gICAgICBpZiAoY29kZSA9PT0gJ0VTUkNIJykge1xuICAgICAgICBraWxsZWQgPSB0cnVlOyAvLyBwcm9jZXNzIGFscmVhZHkgZGVhZCDigJQgdHJlYXQgYXMgc3VjY2Vzc2Z1bCBraWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBraWxsIHNlc3Npb24nLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkOiBzZXNzaW9uLnBpZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIGtpbGwgc2Vzc2lvbicsIHNlc3Npb25JZCwgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHBpZDogc2Vzc2lvbi5waWQsIGRldGFpbDogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIGtpbGxlZCcsIHtcbiAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICBhY3RpdmVTZXNzaW9uczogQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKS5sZW5ndGggLSAxLFxuICAgIH0pO1xuICAgIHJlcy5qc29uKHsgb2s6IHRydWUsIGtpbGxlZDogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcGlkOiBzZXNzaW9uLnBpZCB9KTtcbiAgfSk7XG5cbiAgLyoqIE1hcmsgc3RhbGUgYWN0aXZlIHNlc3Npb25zIGFzIGVuZGVkLiAqL1xuICBmdW5jdGlvbiByZWFwU3RhbGVTZXNzaW9ucyhub3c6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBzZXNzaW9uXSBvZiBzZXNzaW9ucykge1xuICAgICAgaWYgKHNlc3Npb24uc3RhdHVzICE9PSAnYWN0aXZlJykgY29udGludWU7XG4gICAgICBpZiAoc2Vzc2lvbi5pc0xlYWRlciB8fCBzZXNzaW9uLmtpbmQgPT09ICdjb25zb2xlJykgY29udGludWU7XG4gICAgICBjb25zdCBhZ2UgPSBub3cgLSBuZXcgRGF0ZShzZXNzaW9uLmxhc3RIZWFydGJlYXQpLmdldFRpbWUoKTtcbiAgICAgIGlmIChhZ2UgPD0gU0VTU0lPTl9TVEFMRV9NUykgY29udGludWU7XG4gICAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICBuYW1lUG9vbC5yZWxlYXNlKGlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZWFwZWQgc3RhbGUgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZDogaWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICAgIGxhc3RIZWFydGJlYXRBZ286IGAke01hdGgucm91bmQoYWdlIC8gMTAwMCl9c2AsXG4gICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZWxldGUgZW5kZWQgc2Vzc2lvbnMgdG8gYm91bmQgbWVtb3J5ICgjMTg3MCkuICovXG4gIGZ1bmN0aW9uIHB1cmdlU3RhbGVFbnRyaWVzKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIHNlc3Npb25dIG9mIHNlc3Npb25zKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgPT09ICdlbmRlZCcgJiYgbm93IC0gbmV3IERhdGUoc2Vzc2lvbi5sYXN0SGVhcnRiZWF0KS5nZXRUaW1lKCkgPiBFTkRFRF9QVVJHRV9NUykge1xuICAgICAgICBzZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYXBlckludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmVhcFN0YWxlU2Vzc2lvbnMobm93KTtcbiAgICBwdXJnZVN0YWxlRW50cmllcyhub3cpO1xuICB9LCBSRUFQRVJfSU5URVJWQUxfTVMpO1xuICByZWFwZXJJbnRlcnZhbC51bnJlZigpO1xuXG4gIGZ1bmN0aW9uIGdldFNlc3Npb25zKCk6IFNlc3Npb25JbmZvW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJMZWFkZXJTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCwgdHJ1ZSk7XG4gICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihzZXNzaW9uSWQpID8/ICcjM2I4MmY2JztcbiAgICBzZXNzaW9ucy5zZXQoc2Vzc2lvbklkLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yLFxuICAgICAgcGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IHRydWUsXG4gICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAga2luZDogJ21jcCcsXG4gICAgfSk7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIExlYWRlciBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCwgY29sb3IgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBhcyBhIHNlc3Npb24gKCMxODA1KS4gRW5zdXJlcyB0aGVcbiAgICogc2Vzc2lvbiBpbmRpY2F0b3IgYWx3YXlzIHNob3dzIGF0IGxlYXN0IG9uZSBlbnRyeSDigJQgdGhlIGNvbnNvbGUgdGhlXG4gICAqIHVzZXIgaXMgY3VycmVudGx5IGxvb2tpbmcgYXQuXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3RlckNvbnNvbGVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnNvbGVJZCA9IGBjb25zb2xlLSR7cHJvY2Vzcy5waWR9YDtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKGNvbnNvbGVJZCkpIHJldHVybjtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9ICdXZWIgQ29uc29sZSc7XG4gICAgc2Vzc2lvbnMuc2V0KGNvbnNvbGVJZCwge1xuICAgICAgc2Vzc2lvbklkOiBjb25zb2xlSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yOiAnIzYzNjZmMScsIC8vIGluZGlnbyDigJQgZGlzdGluY3QgZnJvbSBwdXBwZXQgZ3JlZW5zL2JsdWVzXG4gICAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IGZhbHNlLFxuICAgICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgIGtpbmQ6ICdjb25zb2xlJyxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQ29uc29sZSBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IHNlc3Npb25JZDogY29uc29sZUlkLCBwaWQ6IHByb2Nlc3MucGlkIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgcm91dGVyLCBnZXRTZXNzaW9ucywgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uLCByZWdpc3RlckNvbnNvbGVTZXNzaW9uIH07XG59XG4iXX0=
|
|
453
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5nZXN0Um91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL0luZ2VzdFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUkxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxQyxrREFBa0Q7QUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFFL0IscURBQXFEO0FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQyxpREFBaUQ7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBRWhDLDZEQUE2RDtBQUM3RCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxrRUFBa0U7QUFDbEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFlBQVk7QUE4RS9DLDZEQUE2RDtBQUM3RCxTQUFTLGNBQWMsQ0FBQyxDQUFTO0lBQy9CLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0FBQ3pELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FB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RUQ7Ozs7T0FJRztJQUNILFNBQVMsc0JBQXNCO1FBQzdCLE1BQU0sU0FBUyxHQUFHLFdBQVcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQztRQUNsQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUN0QixTQUFTLEVBQUUsU0FBUztZQUNwQixXQUFXO1lBQ1gsS0FBSyxFQUFFLFNBQVMsRUFBRSw2Q0FBNkM7WUFDL0QsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ2hCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUNuQyxhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdkMsTUFBTSxFQUFFLFFBQVE7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLENBQUM7QUFDaEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgaW5nZXN0aW9uIHJvdXRlcyBmb3IgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogVGhlIGNvbnNvbGUgbGVhZGVyIG1vdW50cyB0aGVzZSByb3V0ZXMgc28gZm9sbG93ZXIgTUNQIHNlcnZlcnMgY2FuXG4gKiBmb3J3YXJkIHRoZWlyIGxvZ3MsIG1ldHJpY3MsIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuIEFsbCBpbmdlc3RlZFxuICogZW50cmllcyBhcmUgc3RhbXBlZCB3aXRoIGBfc2Vzc2lvbklkYCBpbiB0aGVpciBkYXRhIGZpZWxkIGFuZCB0aGVuXG4gKiBicm9hZGNhc3QgdG8gU1NFIGNsaWVudHMgdmlhIHRoZSBleGlzdGluZyBsb2cvbWV0cmljcyBicm9hZGNhc3QgaG9va3MuXG4gKlxuICogUm91dGVzOlxuICogLSBQT1NUIC9hcGkvaW5nZXN0L2xvZ3MgICAgIOKAlCBCYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3MgIOKAlCBNZXRyaWMgc25hcHNob3RzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24gIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMgKHN0YXJ0ZWQvc3RvcHBlZC9oZWFydGJlYXQpXG4gKiAtIEdFVCAgL2FwaS9zZXNzaW9ucyAgICAgICAg4oCUIEFjdGl2ZSBzZXNzaW9uIGxpc3QgZm9yIHRoZSBVSVxuICpcbiAqIEBzaW5jZSB2Mi4xLjAg4oCUIElzc3VlICMxNzAwXG4gKi9cblxuaW1wb3J0IGV4cHJlc3MsIHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2Vzc2lvbk5hbWVQb29sIH0gZnJvbSAnLi9TZXNzaW9uTmFtZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuXG4vKiogTWF4aW11bSBwYXlsb2FkIHNpemUgZm9yIGluZ2VzdGlvbiByZXF1ZXN0cyAqL1xuY29uc3QgTUFYX1BBWUxPQURfU0laRSA9ICcxbWInO1xuXG4vKiogUmF0ZSBsaW1pdDogbWF4IHJlcXVlc3RzIHBlciB3aW5kb3cgcGVyIHNvdXJjZSAqL1xuY29uc3QgUkFURV9MSU1JVF9NQVggPSAxMDAwO1xuY29uc3QgUkFURV9MSU1JVF9XSU5ET1dfTVMgPSA2MF8wMDA7XG5cbi8qKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIHN0YWxlIHNlc3Npb25zIChtcykgKi9cbmNvbnN0IFJFQVBFUl9JTlRFUlZBTF9NUyA9IDVfMDAwO1xuXG4vKiogSG93IGxvbmcgc2luY2UgbGFzdCBoZWFydGJlYXQgYmVmb3JlIGEgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGRlYWQgKG1zKSAqL1xuY29uc3QgU0VTU0lPTl9TVEFMRV9NUyA9IDE1XzAwMDtcblxuLyoqIFRpbWVvdXQgZm9yIGxlZ2FjeSBwb3J0IGZlZGVyYXRpb24vcHJveHkgcmVxdWVzdHMgKG1zKSAqL1xuY29uc3QgTEVHQUNZX0ZFVENIX1RJTUVPVVRfTVMgPSAyXzAwMDtcblxuLyoqIEhvdyBsb25nIGJlZm9yZSBlbmRlZCBzZXNzaW9ucyBhcmUgcHVyZ2VkIGZyb20gdGhlIE1hcCAobXMpICovXG5jb25zdCBFTkRFRF9QVVJHRV9NUyA9IDUgKiA2MF8wMDA7IC8vIDUgbWludXRlc1xuXG4vKipcbiAqIFRyYWNrZWQgc2Vzc2lvbiBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uSW5mbyB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzZXNzaW9uIChVVUlEIG9yIGBjb25zb2xlLTxwaWQ+YCkuICovXG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICAvKiogRnJpZW5kbHkgcHVwcGV0IG5hbWUgKGUuZy4sIFwiS2VybWl0XCIsIFwiUHVuY2hcIikgb3IgXCJXZWIgQ29uc29sZVwiLiAqL1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAvKiogQ2Fub25pY2FsIGhleCBjb2xvciBmb3IgdGhpcyBwdXBwZXQgY2hhcmFjdGVyLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICAvKiogT1MgcHJvY2VzcyBJRCBvZiB0aGUgTUNQIHNlcnZlciBvciB3ZWIgY29uc29sZSBwcm9jZXNzLiAqL1xuICBwaWQ6IG51bWJlcjtcbiAgLyoqIElTTyB0aW1lc3RhbXAgd2hlbiB0aGUgc2Vzc2lvbiBzdGFydGVkLiAqL1xuICBzdGFydGVkQXQ6IHN0cmluZztcbiAgLyoqIElTTyB0aW1lc3RhbXAgb2YgdGhlIG1vc3QgcmVjZW50IGhlYXJ0YmVhdCAoZm9sbG93ZXJzKSBvciByZWdpc3RyYXRpb24gKGxlYWRlci9jb25zb2xlKS4gKi9cbiAgbGFzdEhlYXJ0YmVhdDogc3RyaW5nO1xuICAvKiogTGlmZWN5Y2xlIHN0YXR1cyDigJQgJ2FjdGl2ZScgdW50aWwgZW5kZWQgb3IgcmVhcGVkIGZvciBzdGFsZW5lc3MuICovXG4gIHN0YXR1czogJ2FjdGl2ZScgfCAnZW5kZWQnO1xuICAvKiogVHJ1ZSBpZiB0aGlzIHNlc3Npb24gd29uIGxlYWRlciBlbGVjdGlvbiBhbmQgb3ducyB0aGUgdG9rZW4gZmlsZS4gKi9cbiAgaXNMZWFkZXI6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoaXMgc2Vzc2lvbiBjb25uZWN0ZWQgd2l0aCBhIHZhbGlkIEJlYXJlciB0b2tlbiAoIzE4MDUpLiAqL1xuICBhdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAvKiogU2Vzc2lvbiBraW5kIOKAlCAnbWNwJyBmb3IgTUNQIHN0ZGlvIHNlc3Npb25zLCAnY29uc29sZScgZm9yIHRoZSB3ZWIgY29uc29sZSBpdHNlbGYgKCMxODA1KS4gKi9cbiAga2luZDogJ21jcCcgfCAnY29uc29sZSc7XG59XG5cbi8qKlxuICogUGF5bG9hZCBmb3IgUE9TVCAvYXBpL2luZ2VzdC9sb2dzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0TG9nUGF5bG9hZCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBlbnRyaWVzOiBVbmlmaWVkTG9nRW50cnlbXTtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RNZXRyaWNzUGF5bG9hZCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzbmFwc2hvdDogTWV0cmljU25hcHNob3Q7XG59XG5cbi8qKlxuICogUGF5bG9hZCBmb3IgUE9TVCAvYXBpL2luZ2VzdC9zZXNzaW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkV2ZW50UGF5bG9hZCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBldmVudDogJ3N0YXJ0ZWQnIHwgJ3N0b3BwZWQnIHwgJ2hlYXJ0YmVhdCc7XG4gIHBpZDogbnVtYmVyO1xuICBzdGFydGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDYWxsYmFja3MgcHJvdmlkZWQgYnkgdGhlIHVuaWZpZWQgY29uc29sZSBvcmNoZXN0cmF0b3IgZm9yIGJyb2FkY2FzdGluZ1xuICogaW5nZXN0ZWQgZXZlbnRzIHRocm91Z2ggdGhlIGV4aXN0aW5nIFNTRSBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RCcm9hZGNhc3RzIHtcbiAgbG9nQnJvYWRjYXN0OiAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDtcbiAgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KSA9PiB2b2lkO1xuICBzdG9yZU1ldHJpY3NTbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QsIHNlc3Npb25JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBzZXNzaW9uQnJvYWRjYXN0PzogKGV2ZW50OiBTZXNzaW9uSW5mbykgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgY3JlYXRpbmcgaW5nZXN0IHJvdXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RSb3V0ZXNSZXN1bHQge1xuICByb3V0ZXI6IFJvdXRlcjtcbiAgLyoqIEdldCBhbGwgdHJhY2tlZCBzZXNzaW9ucyAqL1xuICBnZXRTZXNzaW9uczogKCkgPT4gU2Vzc2lvbkluZm9bXTtcbiAgLyoqIFJlZ2lzdGVyIHRoZSBsZWFkZXIgYXMgYSBzZXNzaW9uICovXG4gIHJlZ2lzdGVyTGVhZGVyU2Vzc2lvbjogKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqIFJlZ2lzdGVyIHRoZSB3ZWIgY29uc29sZSBhcyBhIHNlc3Npb24gc28gdGhlIGluZGljYXRvciBpcyBuZXZlciBlbXB0eSAoIzE4MDUpICovXG4gIHJlZ2lzdGVyQ29uc29sZVNlc3Npb246ICgpID0+IHZvaWQ7XG59XG5cbi8qKiBOb3JtYWxpemUgYSBzdHJpbmcgdmlhIFVuaWNvZGVWYWxpZGF0b3IgKERNQ1AtU0VDLTAwNCkgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0KHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzKS5ub3JtYWxpemVkQ29udGVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIGluZ2VzdGlvbiByb3V0ZXMgYW5kIHNlc3Npb24gcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIGJyb2FkY2FzdHMgLSBDYWxsYmFja3MgdG8gZm9yd2FyZCBpbmdlc3RlZCBldmVudHMgdG8gU1NFIGNsaWVudHNcbiAqIEByZXR1cm5zIFJvdXRlciBhbmQgc2Vzc2lvbiBtYW5hZ2VtZW50IGZ1bmN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5nZXN0Um91dGVzKGJyb2FkY2FzdHM6IEluZ2VzdEJyb2FkY2FzdHMpOiBJbmdlc3RSb3V0ZXNSZXN1bHQge1xuICBjb25zdCByb3V0ZXIgPSBSb3V0ZXIoKTtcbiAgY29uc3Qgc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgU2Vzc2lvbkluZm8+KCk7XG4gIGNvbnN0IG5hbWVQb29sID0gbmV3IFNlc3Npb25OYW1lUG9vbCgpO1xuICBjb25zdCByYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoUkFURV9MSU1JVF9NQVgsIFJBVEVfTElNSVRfV0lORE9XX01TKTtcblxuICAvLyBTZXNzaW9ucyB0aGUgdXNlciBleHBsaWNpdGx5IGtpbGxlZCDigJQgbmV2ZXIgY29tZSBiYWNrICgjMTg3MCkuXG4gIC8vIENsZWFyZWQgb25seSBvbiBzZXJ2ZXIgcmVzdGFydCwgd2hpY2ggaXMgYXBwcm9wcmlhdGUgc2luY2UgdGhhdCdzIGEgbmV3IGNvbnRleHQuXG4gIGNvbnN0IGtpbGxlZFNlc3Npb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLy8gU2Vzc2lvbnMgd2FpdGluZyBmb3IgYSBQSUQgc28gd2UgY2FuIFNJR1RFUk0gdGhlbSAoIzE4NzApLlxuICAvLyBXaGVuIHRoZSB1c2VyIGRpc21pc3NlcyBhIHBpZD0wIG9ycGhhbiwgd2UgYWRkIGl0IGhlcmUuIFRoZSBuZXh0IGhlYXJ0YmVhdFxuICAvLyAoZXZlcnkgMTBzKSBjYXJyaWVzIHRoZSBQSUQg4oCUIHdlIFNJR1RFUk0gaW1tZWRpYXRlbHkgYW5kIG1vdmUgdG8ga2lsbGVkU2Vzc2lvbnMuXG4gIGNvbnN0IHBlbmRpbmdLaWxscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBFeGVjdXRlIGEgZGVmZXJyZWQga2lsbCBpZiB3ZSBub3cgaGF2ZSBhIFBJRC4gKi9cbiAgZnVuY3Rpb24gdHJ5RXhlY3V0ZVBlbmRpbmdLaWxsKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBraWxsUGlkID0gcGlkIHx8IHNlc3Npb25zLmdldChzZXNzaW9uSWQpPy5waWQ7XG4gICAgaWYgKCFraWxsUGlkKSByZXR1cm47XG4gICAgdHJ5IHsgcHJvY2Vzcy5raWxsKGtpbGxQaWQsICdTSUdURVJNJyk7IH0gY2F0Y2ggeyAvKiBhbHJlYWR5IGRlYWQgKi8gfVxuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5zdGF0dXMgPSAnZW5kZWQnO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBEZWZlcnJlZCBraWxsIGV4ZWN1dGVkIOKAlCBQSUQgYXJyaXZlZCcsIHtcbiAgICAgIGRpc3BsYXlOYW1lOiBleGlzdGluZz8uZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkOiBraWxsUGlkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFByb21vdGUgYSBwZW5kaW5nIGtpbGwgdG8gcGVybWFuZW50LiAqL1xuICBmdW5jdGlvbiBmaW5hbGl6ZVBlbmRpbmdLaWxsKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0cnlFeGVjdXRlUGVuZGluZ0tpbGwoc2Vzc2lvbklkLCBwaWQpO1xuICAgIHBlbmRpbmdLaWxscy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICBraWxsZWRTZXNzaW9ucy5hZGQoc2Vzc2lvbklkKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGUgYSBuZXcgc2Vzc2lvbiBlbnRyeSBmb3IgYW4gb3JwaGFuLiBSZXR1cm5zIG51bGwgb24gZmFpbHVyZS4gKi9cbiAgZnVuY3Rpb24gYXV0b1JlZ2lzdGVyKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ/OiBudW1iZXIsIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZSk6IFNlc3Npb25JbmZvIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCk7XG4gICAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgY29uc3QgaW5mbzogU2Vzc2lvbkluZm8gPSB7XG4gICAgICAgIHNlc3Npb25JZCwgZGlzcGxheU5hbWUsIGNvbG9yLFxuICAgICAgICBwaWQ6IHBpZCB8fCAwLFxuICAgICAgICBzdGFydGVkQXQ6IG5vdywgbGFzdEhlYXJ0YmVhdDogbm93LFxuICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLCBpc0xlYWRlcjogZmFsc2UsIGF1dGhlbnRpY2F0ZWQsIGtpbmQ6ICdtY3AnLFxuICAgICAgfTtcbiAgICAgIHNlc3Npb25zLnNldChzZXNzaW9uSWQsIGluZm8pO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIEF1dG8tcmVnaXN0ZXJlZCBvcnBoYW5lZCBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBzb3VyY2U6IHBpZCA/ICdoZWFydGJlYXQnIDogJ2luZ2VzdGlvbicsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKGluZm8pO1xuICAgICAgcmV0dXJuIGluZm87XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBhdXRvLXJlZ2lzdGVyIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIHNlc3Npb25JZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSBhbiBvcnBoYW5lZCBzZXNzaW9uIGZyb20gaW5nZXN0aW9uIGRhdGEuXG4gICAqIFJldHVybnMgdGhlIHNlc3Npb24gKGV4aXN0aW5nIG9yIG5ld2x5IGNyZWF0ZWQpLCBvciBudWxsIGlmIGtpbGxlZC9wZW5kaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZywgcGlkPzogbnVtYmVyLCBhdXRoZW50aWNhdGVkID0gZmFsc2UpOiBTZXNzaW9uSW5mbyB8IG51bGwge1xuICAgIGlmIChraWxsZWRTZXNzaW9ucy5oYXMoc2Vzc2lvbklkKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHBlbmRpbmdLaWxscy5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgZmluYWxpemVQZW5kaW5nS2lsbChzZXNzaW9uSWQsIHBpZCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghZXhpc3RpbmcpIHJldHVybiBhdXRvUmVnaXN0ZXIoc2Vzc2lvbklkLCBwaWQsIGF1dGhlbnRpY2F0ZWQpO1xuXG4gICAgaWYgKGV4aXN0aW5nLnN0YXR1cyA9PT0gJ2VuZGVkJykge1xuICAgICAgZXhpc3Rpbmcuc3RhdHVzID0gJ2FjdGl2ZSc7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUmV2aXZlZCBlbmRlZCBzZXNzaW9uIHN0aWxsIHNlbmRpbmcgZGF0YScsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhpc3RpbmcubGFzdEhlYXJ0YmVhdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBpZiAocGlkICYmICFleGlzdGluZy5waWQpIHtcbiAgICAgIGV4aXN0aW5nLnBpZCA9IHBpZDtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZWNvdmVyZWQgUElEIGZvciBvcnBoYW5lZCBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZTogZXhpc3RpbmcuZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIC8vIEpTT04gYm9keSBwYXJzaW5nIHdpdGggc2l6ZSBsaW1pdFxuICByb3V0ZXIudXNlKGV4cHJlc3MuanNvbih7IGxpbWl0OiBNQVhfUEFZTE9BRF9TSVpFIH0pKTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9sb2dzIOKAlCBSZWNlaXZlIGJhdGNoZWQgbG9nIGVudHJpZXMgZnJvbSBhIGZvbGxvd2VyLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvaW5nZXN0L2xvZ3MnLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgSW5nZXN0TG9nUGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhQXJyYXkuaXNBcnJheShwYXlsb2FkLmVudHJpZXMpKSB7XG4gICAgICBjb25zdCByZWNlaXZlZCA9IHBheWxvYWQgPyBPYmplY3Qua2V5cyhwYXlsb2FkKSA6IFtdO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEludmFsaWQgbG9nIHBheWxvYWQnLCB7IHJlY2VpdmVkLCBoYXNTZXNzaW9uSWQ6ICEhcGF5bG9hZD8uc2Vzc2lvbklkLCBoYXNFbnRyaWVzOiBBcnJheS5pc0FycmF5KHBheWxvYWQ/LmVudHJpZXMpIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgcGF5bG9hZCcsIHJlcXVpcmVkOiBbJ3Nlc3Npb25JZCcsICdlbnRyaWVzJ10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IHNraXBwZWQgPSAwO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGF5bG9hZC5lbnRyaWVzKSB7XG4gICAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5tZXNzYWdlICE9PSAnc3RyaW5nJykgeyBza2lwcGVkKys7IGNvbnRpbnVlOyB9XG4gICAgICBjb25zdCBzdGFtcGVkOiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBkYXRhOiB7IC4uLmVudHJ5LmRhdGEsIF9zZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkIH0sXG4gICAgICB9O1xuICAgICAgYnJvYWRjYXN0cy5sb2dCcm9hZGNhc3Qoc3RhbXBlZCk7XG4gICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoZWFydGJlYXQsIHJldml2ZSBlbmRlZCBzZXNzaW9ucywgb3IgYXV0by1yZWdpc3RlciBvcnBoYW5zICgjMTg3MClcbiAgICBjb25zdCBzZXNzaW9uID0gZW5zdXJlU2Vzc2lvbihwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBpZiAoc2tpcHBlZCA+IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0luZ2VzdFJvdXRlc10gTG9nIGluZ2VzdCBmcm9tICR7c2Vzc2lvbj8uZGlzcGxheU5hbWUgPz8gcGF5bG9hZC5zZXNzaW9uSWR9OiBhY2NlcHRlZD0ke2NvdW50fSwgc2tpcHBlZD0ke3NraXBwZWR9YCk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBhY2NlcHRlZDogY291bnQsIHNraXBwZWQgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3Mg4oCUIFJlY2VpdmUgbWV0cmljIHNuYXBzaG90cyBmcm9tIGEgZm9sbG93ZXIuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9pbmdlc3QvbWV0cmljcycsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBpZiAoIXJhdGVMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1JhdGUgbGltaXQgZXhjZWVkZWQnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSByZXEuYm9keSBhcyBJbmdlc3RNZXRyaWNzUGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhcGF5bG9hZC5zbmFwc2hvdCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIG1ldHJpY3MgcGF5bG9hZCcsIHsgcmVjZWl2ZWQgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXlsb2FkJywgcmVxdWlyZWQ6IFsnc2Vzc2lvbklkJywgJ3NuYXBzaG90J10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGlmIChicm9hZGNhc3RzLm1ldHJpY3NPblNuYXBzaG90KSB7XG4gICAgICBicm9hZGNhc3RzLm1ldHJpY3NPblNuYXBzaG90KHBheWxvYWQuc25hcHNob3QpO1xuICAgIH1cbiAgICBpZiAoYnJvYWRjYXN0cy5zdG9yZU1ldHJpY3NTbmFwc2hvdCkge1xuICAgICAgYnJvYWRjYXN0cy5zdG9yZU1ldHJpY3NTbmFwc2hvdChwYXlsb2FkLnNuYXBzaG90LCBwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGhlYXJ0YmVhdCwgcmV2aXZlIGVuZGVkIHNlc3Npb25zLCBvciBhdXRvLXJlZ2lzdGVyIG9ycGhhbnMgKCMxODcwKVxuICAgIGNvbnN0IHNlc3Npb24gPSBlbnN1cmVTZXNzaW9uKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICBsb2dnZXIuZGVidWcoYFtJbmdlc3RSb3V0ZXNdIE1ldHJpY3MgaW5nZXN0ZWQgZnJvbSAke3Nlc3Npb24/LmRpc3BsYXlOYW1lID8/IHBheWxvYWQuc2Vzc2lvbklkfWApO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgYWNjZXB0ZWQ6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24g4oCUIFNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cy5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9zZXNzaW9uJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSByZXEuYm9keSBhcyBTZXNzaW9uRXZlbnRQYXlsb2FkO1xuICAgIGlmICghcGF5bG9hZD8uc2Vzc2lvbklkIHx8ICFwYXlsb2FkLmV2ZW50KSB7XG4gICAgICBjb25zdCByZWNlaXZlZCA9IHBheWxvYWQgPyBPYmplY3Qua2V5cyhwYXlsb2FkKSA6IFtdO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEludmFsaWQgc2Vzc2lvbiBldmVudCBwYXlsb2FkJywgeyByZWNlaXZlZCB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnZXZlbnQnXSwgcmVjZWl2ZWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBheWxvYWQuc2Vzc2lvbklkID0gbm9ybWFsaXplSW5wdXQocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgc3dpdGNoIChwYXlsb2FkLmV2ZW50KSB7XG4gICAgICBjYXNlICdzdGFydGVkJzoge1xuICAgICAgICAvLyBLaWxsZWQgc2Vzc2lvbnMgc3RheSBkZWFkOyBwZW5kaW5nIGtpbGxzIGdldCBmaW5hbGl6ZWQgKCMxODcwKVxuICAgICAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKHBheWxvYWQuc2Vzc2lvbklkKSkgYnJlYWs7XG4gICAgICAgIGlmIChwZW5kaW5nS2lsbHMuaGFzKHBheWxvYWQuc2Vzc2lvbklkKSkgeyBmaW5hbGl6ZVBlbmRpbmdLaWxsKHBheWxvYWQuc2Vzc2lvbklkLCBwYXlsb2FkLnBpZCk7IGJyZWFrOyB9XG5cbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24ocGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHBheWxvYWQuc2Vzc2lvbklkKSA/PyAnIzNiODJmNic7XG4gICAgICAgIGNvbnN0IGlzQXV0aGVudGljYXRlZCA9IEJvb2xlYW4oKHJlcyBhcyBhbnkpLmxvY2Fscz8udG9rZW5FbnRyeSk7XG4gICAgICAgIHNlc3Npb25zLnNldChwYXlsb2FkLnNlc3Npb25JZCwge1xuICAgICAgICAgIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIGRpc3BsYXlOYW1lLCBjb2xvcixcbiAgICAgICAgICBwaWQ6IHBheWxvYWQucGlkLCBzdGFydGVkQXQ6IHBheWxvYWQuc3RhcnRlZEF0IHx8IG5vdywgbGFzdEhlYXJ0YmVhdDogbm93LFxuICAgICAgICAgIHN0YXR1czogJ2FjdGl2ZScsIGlzTGVhZGVyOiBmYWxzZSwgYXV0aGVudGljYXRlZDogaXNBdXRoZW50aWNhdGVkLCBraW5kOiAnbWNwJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIHJlZ2lzdGVyZWQnLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWUsIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIHBpZDogcGF5bG9hZC5waWQsIGNvbG9yLFxuICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCkhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzdG9wcGVkJzoge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICAgICAgZXhpc3RpbmcubGFzdEhlYXJ0YmVhdCA9IG5vdztcbiAgICAgICAgICBuYW1lUG9vbC5yZWxlYXNlKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gU2Vzc2lvbiBzdG9wcGVkJywge1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLCBwaWQ6IGV4aXN0aW5nLnBpZCxcbiAgICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oZXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnaGVhcnRiZWF0Jzoge1xuICAgICAgICAvLyBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSDigJQgaGVhcnRiZWF0IGluY2x1ZGVzIFBJRCBmb3IgcmVjb3ZlcnkgKCMxODcwKVxuICAgICAgICBlbnN1cmVTZXNzaW9uKHBheWxvYWQuc2Vzc2lvbklkLCBwYXlsb2FkLnBpZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgb2s6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9zZXNzaW9ucyDigJQgTGlzdCBhbGwgdHJhY2tlZCBzZXNzaW9ucy5cbiAgICovXG4gIHJvdXRlci5nZXQoJy9hcGkvc2Vzc2lvbnMnLCBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIC8vIFNlcnZlci1zaWRlIGFjdGl2ZSBmaWx0ZXIg4oCUIHRoZSBmcm9udGVuZCBhbHNvIGZpbHRlcnMsIGJ1dCBlbmRlZCBzZXNzaW9uc1xuICAgIC8vIHNob3VsZCBuZXZlciBsZWF2ZSB0aGUgQVBJIHRvIHByZXZlbnQgc3RhbGUgVUkgKCMxODcwKS5cbiAgICBjb25zdCBsb2NhbFNlc3Npb25zID0gQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKTtcbiAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcblxuICAgIC8vIEZlZGVyYXRlIHdpdGggdGhlIGxlZ2FjeSBwb3J0ICgzOTM5KSB0byBzaG93IGFsbCBzZXNzaW9ucyBvbiB0aGVcbiAgICAvLyBtYWNoaW5lLCBpbmNsdWRpbmcgdW5hdXRoZW50aWNhdGVkIG9uZXMgZnJvbSBwcmUtYXV0aCBpbnN0YWxscy5cbiAgICAvLyBTZXJ2ZXItdG8tc2VydmVyIGF2b2lkcyBDT1JTIHJlc3RyaWN0aW9ucyAoIzE4MDUpLlxuICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgIGNvbnN0IGxlZ2FjeVJlcyA9IGF3YWl0IGZldGNoKCdodHRwOi8vMTI3LjAuMC4xOjM5MzkvYXBpL3Nlc3Npb25zJywge1xuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmIChsZWdhY3lSZXMub2spIHtcbiAgICAgICAgICBjb25zdCBsZWdhY3lEYXRhID0gYXdhaXQgbGVnYWN5UmVzLmpzb24oKSBhcyB7IHNlc3Npb25zOiBTZXNzaW9uSW5mb1tdIH07XG4gICAgICAgICAgY29uc3QgbG9jYWxJZHMgPSBuZXcgU2V0KGxvY2FsU2Vzc2lvbnMubWFwKHMgPT4gcy5zZXNzaW9uSWQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxzIG9mIChsZWdhY3lEYXRhLnNlc3Npb25zIHx8IFtdKSkge1xuICAgICAgICAgICAgaWYgKCFsb2NhbElkcy5oYXMobHMuc2Vzc2lvbklkKSAmJiBscy5zdGF0dXMgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAgIGxvY2FsU2Vzc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4ubHMsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAga2luZDogbHMua2luZCB8fCAnbWNwJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTGVnYWN5IGluc3RhbmNlIG5vdCBydW5uaW5nIG9yIHVucmVhY2hhYmxlIOKAlCB0aGF0J3MgZmluZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5qc29uKHsgc2Vzc2lvbnM6IGxvY2FsU2Vzc2lvbnMgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvc2Vzc2lvbnMvOnNlc3Npb25JZC9raWxsIOKAlCBUZXJtaW5hdGUgYSBzZXNzaW9uJ3Mgc2VydmVyIHByb2Nlc3MuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9zZXNzaW9ucy86c2Vzc2lvbklkL2tpbGwnLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gcmVxLnBhcmFtc1snc2Vzc2lvbklkJ10gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcblxuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgLy8gU2Vzc2lvbiBub3QgaW4gbG9jYWwgTWFwIOKAlCB0cnkgcHJveHlpbmcga2lsbCB0byBsZWdhY3kgcG9ydCAoIzE4NzApXG4gICAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcbiAgICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgICAgY29uc3QgcHJveHlSZXMgPSBhd2FpdCBmZXRjaChgaHR0cDovLzEyNy4wLjAuMTozOTM5L2FwaS9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfS9raWxsYCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICBpZiAocHJveHlSZXMub2spIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm94eVJlcy5qc29uKCk7XG4gICAgICAgICAgICByZXMuanNvbihkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIExlZ2FjeSBpbnN0YW5jZSBub3QgcnVubmluZyDigJQgZmFsbCB0aHJvdWdoIHRvIDQwNFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gS2lsbCByZXF1ZXN0ZWQgZm9yIHVua25vd24gc2Vzc2lvbicsIHsgc2Vzc2lvbklkIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ1Nlc3Npb24gbm90IGZvdW5kJywgc2Vzc2lvbklkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghc2Vzc2lvbi5waWQpIHtcbiAgICAgIC8vIEF1dG8tcmVnaXN0ZXJlZCBvcnBoYW4gd2l0aCB1bmtub3duIFBJRCDigJQgcXVldWUgZm9yIGRlZmVycmVkIGtpbGwgKCMxODcwKS5cbiAgICAgIC8vIFRoZSBuZXh0IGhlYXJ0YmVhdCAoZXZlcnkgfjEwcykgY2FycmllcyB0aGUgUElELiBlbnN1cmVTZXNzaW9uKCkgd2lsbFxuICAgICAgLy8gU0lHVEVSTSB0aGUgcHJvY2VzcyBhcyBzb29uIGFzIHRoZSBQSUQgYXJyaXZlcy4gU2Vzc2lvbiBpcyBnb25lIGZvciBnb29kLlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgPSAnZW5kZWQnO1xuICAgICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgICAgcGVuZGluZ0tpbGxzLmFkZChzZXNzaW9uSWQpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFF1ZXVlZCBkZWZlcnJlZCBraWxsIOKAlCB3YWl0aW5nIGZvciBQSUQgdmlhIGhlYXJ0YmVhdCcsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCxcbiAgICAgIH0pO1xuICAgICAgcmVzLmpzb24oeyBvazogdHJ1ZSwgZGlzbWlzc2VkOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCByZWFzb246ICdwZW5kaW5nLWtpbGwnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNJR1RFUk0gdGhlIHByb2Nlc3MuIEV2ZW4gaWYgaXQgZmFpbHMgKEVTUkNIID0gYWxyZWFkeSBkZWFkLCBFUEVSTSA9IG5vdCBvdXJzKSxcbiAgICAvLyBtYXJrIHRoZSBzZXNzaW9uIGFzIHBlcm1hbmVudGx5IGtpbGxlZCBzbyBpdCBuZXZlciByZWFwcGVhcnMgKCMxODcwKS5cbiAgICBsZXQga2lsbGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHByb2Nlc3Mua2lsbChzZXNzaW9uLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVyciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGU7XG4gICAgICBpZiAoY29kZSA9PT0gJ0VTUkNIJykge1xuICAgICAgICBraWxsZWQgPSB0cnVlOyAvLyBwcm9jZXNzIGFscmVhZHkgZGVhZCDigJQgdHJlYXQgYXMgc3VjY2Vzc2Z1bCBraWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBraWxsIHNlc3Npb24nLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkOiBzZXNzaW9uLnBpZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIGtpbGwgc2Vzc2lvbicsIHNlc3Npb25JZCwgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHBpZDogc2Vzc2lvbi5waWQsIGRldGFpbDogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIGtpbGxlZCcsIHtcbiAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICBhY3RpdmVTZXNzaW9uczogQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKS5sZW5ndGggLSAxLFxuICAgIH0pO1xuICAgIHJlcy5qc29uKHsgb2s6IHRydWUsIGtpbGxlZDogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcGlkOiBzZXNzaW9uLnBpZCB9KTtcbiAgfSk7XG5cbiAgLyoqIE1hcmsgc3RhbGUgYWN0aXZlIHNlc3Npb25zIGFzIGVuZGVkLiAqL1xuICBmdW5jdGlvbiByZWFwU3RhbGVTZXNzaW9ucyhub3c6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBzZXNzaW9uXSBvZiBzZXNzaW9ucykge1xuICAgICAgaWYgKHNlc3Npb24uc3RhdHVzICE9PSAnYWN0aXZlJykgY29udGludWU7XG4gICAgICBpZiAoc2Vzc2lvbi5pc0xlYWRlciB8fCBzZXNzaW9uLmtpbmQgPT09ICdjb25zb2xlJykgY29udGludWU7XG4gICAgICBjb25zdCBhZ2UgPSBub3cgLSBuZXcgRGF0ZShzZXNzaW9uLmxhc3RIZWFydGJlYXQpLmdldFRpbWUoKTtcbiAgICAgIGlmIChhZ2UgPD0gU0VTU0lPTl9TVEFMRV9NUykgY29udGludWU7XG4gICAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICBuYW1lUG9vbC5yZWxlYXNlKGlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZWFwZWQgc3RhbGUgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZDogaWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICAgIGxhc3RIZWFydGJlYXRBZ286IGAke01hdGgucm91bmQoYWdlIC8gMTAwMCl9c2AsXG4gICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZWxldGUgZW5kZWQgc2Vzc2lvbnMgdG8gYm91bmQgbWVtb3J5ICgjMTg3MCkuICovXG4gIGZ1bmN0aW9uIHB1cmdlU3RhbGVFbnRyaWVzKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIHNlc3Npb25dIG9mIHNlc3Npb25zKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgPT09ICdlbmRlZCcgJiYgbm93IC0gbmV3IERhdGUoc2Vzc2lvbi5sYXN0SGVhcnRiZWF0KS5nZXRUaW1lKCkgPiBFTkRFRF9QVVJHRV9NUykge1xuICAgICAgICBzZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYXBlckludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmVhcFN0YWxlU2Vzc2lvbnMobm93KTtcbiAgICBwdXJnZVN0YWxlRW50cmllcyhub3cpO1xuICB9LCBSRUFQRVJfSU5URVJWQUxfTVMpO1xuICByZWFwZXJJbnRlcnZhbC51bnJlZigpO1xuXG4gIGZ1bmN0aW9uIGdldFNlc3Npb25zKCk6IFNlc3Npb25JbmZvW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJMZWFkZXJTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCwgdHJ1ZSk7XG4gICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihzZXNzaW9uSWQpID8/ICcjM2I4MmY2JztcbiAgICBzZXNzaW9ucy5zZXQoc2Vzc2lvbklkLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yLFxuICAgICAgcGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IHRydWUsXG4gICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAga2luZDogJ21jcCcsXG4gICAgfSk7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIExlYWRlciBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCwgY29sb3IgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBhcyBhIHNlc3Npb24gKCMxODA1KS4gRW5zdXJlcyB0aGVcbiAgICogc2Vzc2lvbiBpbmRpY2F0b3IgYWx3YXlzIHNob3dzIGF0IGxlYXN0IG9uZSBlbnRyeSDigJQgdGhlIGNvbnNvbGUgdGhlXG4gICAqIHVzZXIgaXMgY3VycmVudGx5IGxvb2tpbmcgYXQuXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3RlckNvbnNvbGVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnNvbGVJZCA9IGBjb25zb2xlLSR7cHJvY2Vzcy5waWR9YDtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKGNvbnNvbGVJZCkpIHJldHVybjtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9ICdXZWIgQ29uc29sZSc7XG4gICAgc2Vzc2lvbnMuc2V0KGNvbnNvbGVJZCwge1xuICAgICAgc2Vzc2lvbklkOiBjb25zb2xlSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yOiAnIzYzNjZmMScsIC8vIGluZGlnbyDigJQgZGlzdGluY3QgZnJvbSBwdXBwZXQgZ3JlZW5zL2JsdWVzXG4gICAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IGZhbHNlLFxuICAgICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgIGtpbmQ6ICdjb25zb2xlJyxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQ29uc29sZSBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IHNlc3Npb25JZDogY29uc29sZUlkLCBwaWQ6IHByb2Nlc3MucGlkIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgcm91dGVyLCBnZXRTZXNzaW9ucywgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uLCByZWdpc3RlckNvbnNvbGVTZXNzaW9uIH07XG59XG4iXX0=
|