@dollhousemcp/mcp-server 2.0.28 → 2.0.30
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 +13 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/services/BuildInfoService.d.ts +9 -1
- package/dist/services/BuildInfoService.d.ts.map +1 -1
- package/dist/services/BuildInfoService.js +37 -3
- package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -1
- package/dist/tools/portfolio/submitToPortfolioTool.js +4 -3
- package/dist/utils/permissionHookInstallers.d.ts +27 -0
- package/dist/utils/permissionHookInstallers.d.ts.map +1 -0
- package/dist/utils/permissionHookInstallers.js +465 -0
- package/dist/utils/permissionHookShared.d.ts +126 -0
- package/dist/utils/permissionHookShared.d.ts.map +1 -0
- package/dist/utils/permissionHookShared.js +388 -0
- package/dist/utils/permissionHookStatus.d.ts +10 -0
- package/dist/utils/permissionHookStatus.d.ts.map +1 -0
- package/dist/utils/permissionHookStatus.js +256 -0
- package/dist/utils/permissionHooks.d.ts +3 -73
- package/dist/utils/permissionHooks.d.ts.map +1 -1
- package/dist/utils/permissionHooks.js +4 -780
- package/dist/web/public/permissions.js +10 -0
- package/dist/web/public/setup.js +36 -0
- package/dist/web/routes/healthRoutes.d.ts +3 -0
- package/dist/web/routes/healthRoutes.d.ts.map +1 -1
- package/dist/web/routes/healthRoutes.js +22 -2
- package/dist/web/routes/permissionRoutes.d.ts +1 -0
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +28 -7
- package/dist/web/routes/setupRoutes.d.ts +5 -1
- package/dist/web/routes/setupRoutes.d.ts.map +1 -1
- package/dist/web/routes/setupRoutes.js +28 -14
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +12 -1
- package/package.json +3 -1
- package/scripts/permission-hook-config.sh +67 -0
- package/scripts/pretooluse-dollhouse.sh +42 -13
- package/scripts/pretooluse-vscode.sh +23 -10
- package/scripts/pretooluse-windsurf.sh +6 -6
- package/server.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.0.30] - 2026-04-21
|
|
4
|
+
|
|
5
|
+
- Improve hook reliability across Codex and other supported clients, including fail-open JSON behavior.
|
|
6
|
+
- Automatically refresh stale local hook assets and surface repair outcomes in status/build info.
|
|
7
|
+
- Add session platform metadata, update-available labeling, and cleaner dropdown alignment in the web console.
|
|
8
|
+
|
|
9
|
+
## [2.0.29] - 2026-04-21
|
|
10
|
+
|
|
11
|
+
- Added explicit session platform metadata and update-available status in the web console session dropdown
|
|
12
|
+
- Improved dropdown alignment for session status, platform, and uptime columns
|
|
13
|
+
- Fixed Codex pre-tool-use hook JSON output and expanded hook contract coverage across supported clients
|
|
14
|
+
- Automatically verify and refresh installed local permission hook assets when they go stale
|
|
15
|
+
|
|
3
16
|
## [2.0.28] - 2026-04-21
|
|
4
17
|
|
|
5
18
|
- Add explicit session client metadata and update-available status in the web console dropdown, with improved layout alignment.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export declare const PACKAGE_VERSION = "2.0.
|
|
6
|
-
export declare const BUILD_TIMESTAMP = "2026-04-
|
|
5
|
+
export declare const PACKAGE_VERSION = "2.0.30";
|
|
6
|
+
export declare const BUILD_TIMESTAMP = "2026-04-21T21:44:37.532Z";
|
|
7
7
|
export declare const BUILD_TYPE: 'npm' | 'git';
|
|
8
8
|
export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
|
|
9
9
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export const PACKAGE_VERSION = '2.0.
|
|
6
|
-
export const BUILD_TIMESTAMP = '2026-04-
|
|
5
|
+
export const PACKAGE_VERSION = '2.0.30';
|
|
6
|
+
export const BUILD_TIMESTAMP = '2026-04-21T21:44:37.532Z';
|
|
7
7
|
export const BUILD_TYPE = 'npm';
|
|
8
8
|
export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMzAnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI2LTA0LTIxVDIxOjQ0OjM3LjUzMlonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { IFileOperationsService } from './FileOperationsService.js';
|
|
12
12
|
import type { StartupTimer, StartupReport } from '../telemetry/StartupTimer.js';
|
|
13
|
+
import { type PermissionHookHealthSummary, type PermissionHookStartupRepairSummary } from '../utils/permissionHooks.js';
|
|
13
14
|
export interface BuildInfo {
|
|
14
15
|
sessionId: string;
|
|
15
16
|
runtimeSessionId: string;
|
|
@@ -23,7 +24,6 @@ export interface BuildInfo {
|
|
|
23
24
|
type: 'git' | 'npm' | 'unknown';
|
|
24
25
|
gitCommit?: string;
|
|
25
26
|
gitBranch?: string;
|
|
26
|
-
collectionFix?: string;
|
|
27
27
|
};
|
|
28
28
|
runtime: {
|
|
29
29
|
nodeVersion: string;
|
|
@@ -45,6 +45,14 @@ export interface BuildInfo {
|
|
|
45
45
|
uptime: number;
|
|
46
46
|
mcpConnection: boolean;
|
|
47
47
|
};
|
|
48
|
+
permissionHooks?: {
|
|
49
|
+
health: PermissionHookHealthSummary;
|
|
50
|
+
installedHosts: string[];
|
|
51
|
+
currentHosts: string[];
|
|
52
|
+
repairedHosts: string[];
|
|
53
|
+
needsRepairHosts: string[];
|
|
54
|
+
lastStartupRepair: PermissionHookStartupRepairSummary | null;
|
|
55
|
+
};
|
|
48
56
|
/** Issue #706: Startup timing and readiness status. */
|
|
49
57
|
startup?: {
|
|
50
58
|
status: 'ready' | 'initializing';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildInfoService.d.ts","sourceRoot":"","sources":["../../src/services/BuildInfoService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"BuildInfoService.d.ts","sourceRoot":"","sources":["../../src/services/BuildInfoService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACxC,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;KACjC,CAAC;IACF,WAAW,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,MAAM,EAAE,2BAA2B,CAAC;QACpC,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,EAAE,kCAAkC,GAAG,IAAI,CAAC;KAC9D,CAAC;IACF,uDAAuD;IACvD,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;QACjC,qBAAqB,EAAE,OAAO,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,aAAa,CAAC;KACjC,CAAC;CACH;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,qEAAqE;IACrE,OAAO,CAAC,YAAY,CAA6B;IACjD,2DAA2D;IAC3D,OAAO,CAAC,oBAAoB,CAAgC;gBAEhD,cAAc,EAAE,sBAAsB;IAKlD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAI1C;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI;IAIrD;;;;;;;OAOG;IACU,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IA2F/C;;;;OAIG;IACI,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IA+H/C;;;OAGG;YACW,UAAU;IAcxB;;;OAGG;YACW,aAAa;IA+B3B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;CAIrB"}
|
|
@@ -12,6 +12,7 @@ import * as child_process from 'child_process';
|
|
|
12
12
|
import { logger } from '../utils/logger.js';
|
|
13
13
|
import { PACKAGE_NAME, PACKAGE_VERSION, BUILD_TIMESTAMP, BUILD_TYPE } from '../generated/version.js';
|
|
14
14
|
import { resolveSessionIdentity } from './sessionIdentity.js';
|
|
15
|
+
import { getPermissionHookAuditSummary, summarizePermissionHookHealth, } from '../utils/permissionHooks.js';
|
|
15
16
|
export class BuildInfoService {
|
|
16
17
|
startTime;
|
|
17
18
|
fileOperations;
|
|
@@ -48,7 +49,8 @@ export class BuildInfoService {
|
|
|
48
49
|
// Use Promise.allSettled to collect all available info, even if some sources fail
|
|
49
50
|
const results = await Promise.allSettled([
|
|
50
51
|
this.getGitInfo(),
|
|
51
|
-
this.getDockerInfo()
|
|
52
|
+
this.getDockerInfo(),
|
|
53
|
+
getPermissionHookAuditSummary(),
|
|
52
54
|
]);
|
|
53
55
|
// Package info comes from build-time generated constants
|
|
54
56
|
const packageInfo = { name: PACKAGE_NAME, version: PACKAGE_VERSION };
|
|
@@ -58,6 +60,10 @@ export class BuildInfoService {
|
|
|
58
60
|
const dockerInfo = results[1].status === 'fulfilled'
|
|
59
61
|
? results[1].value
|
|
60
62
|
: { isDocker: false, info: undefined };
|
|
63
|
+
const permissionHookInfo = results[2].status === 'fulfilled'
|
|
64
|
+
? results[2].value
|
|
65
|
+
: { installedHosts: [], currentHosts: [], repairedHosts: [], needsRepairHosts: [], lastStartupRepair: null };
|
|
66
|
+
const permissionHookHealth = summarizePermissionHookHealth(permissionHookInfo);
|
|
61
67
|
// Log any failures for diagnostics
|
|
62
68
|
const failures = [];
|
|
63
69
|
if (results[0].status === 'rejected') {
|
|
@@ -66,6 +72,9 @@ export class BuildInfoService {
|
|
|
66
72
|
if (results[1].status === 'rejected') {
|
|
67
73
|
failures.push(`docker info: ${results[1].reason}`);
|
|
68
74
|
}
|
|
75
|
+
if (results[2].status === 'rejected') {
|
|
76
|
+
failures.push(`permission hook audit: ${results[2].reason}`);
|
|
77
|
+
}
|
|
69
78
|
if (failures.length > 0) {
|
|
70
79
|
logger.debug(`Build info collection had ${failures.length} failure(s): ${failures.join('; ')}`);
|
|
71
80
|
}
|
|
@@ -90,7 +99,6 @@ export class BuildInfoService {
|
|
|
90
99
|
type: BUILD_TYPE,
|
|
91
100
|
gitCommit: gitInfo.commit,
|
|
92
101
|
gitBranch: gitInfo.branch,
|
|
93
|
-
collectionFix: 'v1.6.9-beta1-collection-fix' // Version identifier for verification
|
|
94
102
|
},
|
|
95
103
|
runtime: {
|
|
96
104
|
nodeVersion: process.version,
|
|
@@ -112,6 +120,10 @@ export class BuildInfoService {
|
|
|
112
120
|
uptime: Date.now() - this.startTime.getTime(),
|
|
113
121
|
mcpConnection: true // We're connected if this method is being called via MCP
|
|
114
122
|
},
|
|
123
|
+
permissionHooks: {
|
|
124
|
+
...permissionHookInfo,
|
|
125
|
+
health: permissionHookHealth,
|
|
126
|
+
},
|
|
115
127
|
startup: startupInfo,
|
|
116
128
|
};
|
|
117
129
|
}
|
|
@@ -176,6 +188,28 @@ export class BuildInfoService {
|
|
|
176
188
|
lines.push(`- **Started**: ${info.server.startTime.toISOString()}`);
|
|
177
189
|
lines.push(`- **Uptime**: ${this.formatUptime(info.server.uptime / 1000)}`);
|
|
178
190
|
lines.push(`- **MCP Connection**: ${info.server.mcpConnection ? '✅ Connected' : '❌ Disconnected'}`);
|
|
191
|
+
if (info.permissionHooks) {
|
|
192
|
+
const installedHosts = info.permissionHooks.installedHosts.length > 0
|
|
193
|
+
? info.permissionHooks.installedHosts.join(', ')
|
|
194
|
+
: 'None';
|
|
195
|
+
const currentHosts = info.permissionHooks.currentHosts.length > 0
|
|
196
|
+
? info.permissionHooks.currentHosts.join(', ')
|
|
197
|
+
: 'None';
|
|
198
|
+
const needsRepairHosts = info.permissionHooks.needsRepairHosts.length > 0
|
|
199
|
+
? info.permissionHooks.needsRepairHosts.join(', ')
|
|
200
|
+
: 'None';
|
|
201
|
+
const lastStartupRepair = info.permissionHooks.lastStartupRepair;
|
|
202
|
+
const startupRepairIssues = lastStartupRepair
|
|
203
|
+
? lastStartupRepair.hostResults
|
|
204
|
+
.filter((result) => result.outcome === 'needs_repair' || result.outcome === 'error')
|
|
205
|
+
.map((result) => result.repairError ? `${result.host} (${result.repairError})` : result.host)
|
|
206
|
+
.join('; ')
|
|
207
|
+
: '';
|
|
208
|
+
lines.push('', '## 🔐 Permission Hooks', `- **Health**: ${info.permissionHooks.health.status.toUpperCase()} — ${info.permissionHooks.health.message}`, `- **Installed Hosts**: ${installedHosts}`, `- **Current Assets**: ${currentHosts}`, `- **Needs Repair**: ${needsRepairHosts}`);
|
|
209
|
+
if (lastStartupRepair) {
|
|
210
|
+
lines.push(`- **Last Startup Audit**: ${lastStartupRepair.completedAt} (${lastStartupRepair.durationMs}ms)`, `- **Startup Repairs Applied**: ${lastStartupRepair.repairedCount}`, `- **Startup Repair Issues**: ${startupRepairIssues || 'None'}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
179
213
|
// Issue #706: Startup timing
|
|
180
214
|
if (info.startup) {
|
|
181
215
|
lines.push('');
|
|
@@ -271,4 +305,4 @@ export class BuildInfoService {
|
|
|
271
305
|
return `${mb.toFixed(1)} MB`;
|
|
272
306
|
}
|
|
273
307
|
}
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVpbGRJbmZvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUE4QzlELE1BQU0sT0FBTyxnQkFBZ0I7SUFDVixTQUFTLENBQU87SUFDaEIsY0FBYyxDQUF5QjtJQUN4RCxxRUFBcUU7SUFDN0QsWUFBWSxHQUF3QixJQUFJLENBQUM7SUFDakQsMkRBQTJEO0lBQ25ELG9CQUFvQixHQUEyQixJQUFJLENBQUM7SUFFNUQsWUFBWSxjQUFzQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxLQUFtQjtRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCx1QkFBdUIsQ0FBQyxPQUFzQjtRQUM1QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLFlBQVk7UUFDdkIsa0ZBQWtGO1FBQ2xGLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxhQUFh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LElBQUksR0FBRyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFFM0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVpbGRJbmZvU2VydmljZSAtIFByb3ZpZGVzIGJ1aWxkIGFuZCBydW50aW1lIGluZm9ybWF0aW9uXG4gKiBTZXBhcmF0ZWQgZnJvbSBtYWluIGluZGV4LnRzIHRvIGF2b2lkIG1ha2luZyB0aGF0IGZpbGUgbGFyZ2VyXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWCAoUFIgIzYxNCk6XG4gKiAxLiBETUNQLVNFQy0wMDQ6IEZBTFNFIFBPU0lUSVZFIFNVUFBSRVNTSU9OIC0gTm8gdXNlciBpbnB1dCBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gKiAgICBUaGlzIHNlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChnaXQsIHBhY2thZ2UuanNvbiwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICogICAgVGhlIE1DUCB0b29sICdnZXRfYnVpbGRfaW5mbycgdGFrZXMgTk8gcGFyYW1ldGVycyAoZW1wdHkgaW5wdXRTY2hlbWEpXG4gKiAgICBObyB1c2VyLXByb3ZpZGVkIGRhdGEgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UgdGhhdCByZXF1aXJlcyBVbmljb2RlIG5vcm1hbGl6YXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVkVSU0lPTiwgQlVJTERfVElNRVNUQU1QLCBCVUlMRF9UWVBFIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwVGltZXIsIFN0YXJ0dXBSZXBvcnQgfSBmcm9tICcuLi90ZWxlbWV0cnkvU3RhcnR1cFRpbWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkgfSBmcm9tICcuL3Nlc3Npb25JZGVudGl0eS5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRJbmZvIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTZXNzaW9uSWQ6IHN0cmluZztcbiAgc2Vzc2lvblNvdXJjZTogJ2VudicgfCAnZGVyaXZlZCc7XG4gIHBhY2thZ2U6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICB9O1xuICBidWlsZDoge1xuICAgIHRpbWVzdGFtcD86IHN0cmluZztcbiAgICB0eXBlOiAnZ2l0JyB8ICducG0nIHwgJ3Vua25vd24nO1xuICAgIGdpdENvbW1pdD86IHN0cmluZztcbiAgICBnaXRCcmFuY2g/OiBzdHJpbmc7XG4gICAgY29sbGVjdGlvbkZpeD86IHN0cmluZzsgIC8vIFZlcnNpb24gaWRlbnRpZmllciBmb3IgdmVyaWZpY2F0aW9uXG4gIH07XG4gIHJ1bnRpbWU6IHtcbiAgICBub2RlVmVyc2lvbjogc3RyaW5nO1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgYXJjaDogc3RyaW5nO1xuICAgIHVwdGltZTogbnVtYmVyO1xuICAgIG1lbW9yeVVzYWdlOiBOb2RlSlMuTWVtb3J5VXNhZ2U7XG4gIH07XG4gIGVudmlyb25tZW50OiB7XG4gICAgbm9kZUVudj86IHN0cmluZztcbiAgICBpc1Byb2R1Y3Rpb246IGJvb2xlYW47XG4gICAgaXNEZXZlbG9wbWVudDogYm9vbGVhbjtcbiAgICBpc0RlYnVnOiBib29sZWFuO1xuICAgIGlzRG9ja2VyOiBib29sZWFuO1xuICAgIGRvY2tlckluZm8/OiBzdHJpbmc7XG4gIH07XG4gIHNlcnZlcjoge1xuICAgIHN0YXJ0VGltZTogRGF0ZTtcbiAgICB1cHRpbWU6IG51bWJlcjtcbiAgICBtY3BDb25uZWN0aW9uOiBib29sZWFuO1xuICB9O1xuICAvKiogSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgYW5kIHJlYWRpbmVzcyBzdGF0dXMuICovXG4gIHN0YXJ0dXA/OiB7XG4gICAgc3RhdHVzOiAncmVhZHknIHwgJ2luaXRpYWxpemluZyc7XG4gICAgZGVmZXJyZWRTZXR1cENvbXBsZXRlOiBib29sZWFuO1xuICAgIHVwdGltZU1zOiBudW1iZXI7XG4gICAgc3RhcnR1cFRpbWluZ01zPzogU3RhcnR1cFJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSW5mb1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0VGltZTogRGF0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BlcmF0aW9uczogSUZpbGVPcGVyYXRpb25zU2VydmljZTtcbiAgLyoqIElzc3VlICM3MDY6IE9wdGlvbmFsIHN0YXJ0dXAgdGltZXIgZm9yIHRpbWluZyBpbnN0cnVtZW50YXRpb24uICovXG4gIHByaXZhdGUgc3RhcnR1cFRpbWVyOiBTdGFydHVwVGltZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIElzc3VlICM3MDY6IENhbGxiYWNrIHRvIGNoZWNrIGRlZmVycmVkIHNldHVwIHN0YXR1cy4gKi9cbiAgcHJpdmF0ZSBkZWZlcnJlZFNldHVwQ2hlY2tlcjogKCgpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UpIHtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5maWxlT3BlcmF0aW9ucyA9IGZpbGVPcGVyYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gc3RhcnR1cCBpbnN0cnVtZW50YXRpb24gYWZ0ZXIgREkgaXMgcmVhZHkuXG4gICAqIENhbGxlZCBmcm9tIENvbnRhaW5lciB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxuICAgKi9cbiAgc2V0U3RhcnR1cFRpbWVyKHRpbWVyOiBTdGFydHVwVGltZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lciA9IHRpbWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gZGVmZXJyZWQgc2V0dXAgc3RhdHVzIGNoZWNrZXIuXG4gICAqL1xuICBzZXREZWZlcnJlZFNldHVwQ2hlY2tlcihjaGVja2VyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlciA9IGNoZWNrZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbXByZWhlbnNpdmUgYnVpbGQgaW5mb3JtYXRpb25cbiAgICogU0VDVVJJVFkgTk9URTogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIG9ubHkgc3lzdGVtLWdlbmVyYXRlZCBkYXRhXG4gICAqIE5vIHVzZXIgaW5wdXQgaXMgaW52b2x2ZWQgLSBhbGwgZGF0YSBjb21lcyBmcm9tIGZpbGVzeXN0ZW0sIGdpdCwgYW5kIE5vZGUuanMgcHJvY2Vzc1xuICAgKlxuICAgKiBVc2VzIFByb21pc2UuYWxsU2V0dGxlZCB0byBjb2xsZWN0IHBhcnRpYWwgcmVzdWx0cyBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsLFxuICAgKiBwcm92aWRpbmcgbWF4aW11bSBpbmZvcm1hdGlvbiBhdmFpbGFiaWxpdHkgd2l0aCBncmFjZWZ1bCBkZWdyYWRhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCdWlsZEluZm8oKTogUHJvbWlzZTxCdWlsZEluZm8+IHtcbiAgICAvLyBVc2UgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGNvbGxlY3QgYWxsIGF2YWlsYWJsZSBpbmZvLCBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICB0aGlzLmdldEdpdEluZm8oKSxcbiAgICAgIHRoaXMuZ2V0RG9ja2VySW5mbygpXG4gICAgXSk7XG5cbiAgICAvLyBQYWNrYWdlIGluZm8gY29tZXMgZnJvbSBidWlsZC10aW1lIGdlbmVyYXRlZCBjb25zdGFudHNcbiAgICBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogUEFDS0FHRV9OQU1FLCB2ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04gfTtcblxuICAgIGNvbnN0IGdpdEluZm8gPSByZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCdcbiAgICAgID8gcmVzdWx0c1swXS52YWx1ZVxuICAgICAgOiB7IGNvbW1pdDogdW5kZWZpbmVkLCBicmFuY2g6IHVuZGVmaW5lZCB9O1xuXG4gICAgY29uc3QgZG9ja2VySW5mbyA9IHJlc3VsdHNbMV0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzFdLnZhbHVlXG4gICAgICA6IHsgaXNEb2NrZXI6IGZhbHNlLCBpbmZvOiB1bmRlZmluZWQgfTtcblxuICAgIC8vIExvZyBhbnkgZmFpbHVyZXMgZm9yIGRpYWdub3N0aWNzXG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHJlc3VsdHNbMF0uc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICBmYWlsdXJlcy5wdXNoKGBnaXQgaW5mbzogJHtyZXN1bHRzWzBdLnJlYXNvbn1gKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdHNbMV0uc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICBmYWlsdXJlcy5wdXNoKGBkb2NrZXIgaW5mbzogJHtyZXN1bHRzWzFdLnJlYXNvbn1gKTtcbiAgICB9XG5cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBCdWlsZCBpbmZvIGNvbGxlY3Rpb24gaGFkICR7ZmFpbHVyZXMubGVuZ3RofSBmYWlsdXJlKHMpOiAke2ZhaWx1cmVzLmpvaW4oJzsgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGltZXN0YW1wIGNvbWVzIGZyb20gYnVpbGQtdGltZSBnZW5lcmF0ZWQgY29uc3RhbnRzXG4gICAgY29uc3QgYnVpbGRUaW1lc3RhbXAgPSBCVUlMRF9USU1FU1RBTVA7XG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBTdGFydHVwIHRpbWluZyBhbmQgcmVhZGluZXNzXG4gICAgY29uc3QgZGVmZXJyZWRDb21wbGV0ZSA9IHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIgPyB0aGlzLmRlZmVycmVkU2V0dXBDaGVja2VyKCkgOiB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0dXBJbmZvOiBCdWlsZEluZm9bJ3N0YXJ0dXAnXSA9IHtcbiAgICAgIHN0YXR1czogZGVmZXJyZWRDb21wbGV0ZSA/ICdyZWFkeScgOiAnaW5pdGlhbGl6aW5nJyxcbiAgICAgIGRlZmVycmVkU2V0dXBDb21wbGV0ZTogZGVmZXJyZWRDb21wbGV0ZSxcbiAgICAgIHVwdGltZU1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpLFxuICAgICAgc3RhcnR1cFRpbWluZ01zOiB0aGlzLnN0YXJ0dXBUaW1lcj8uZ2V0UmVwb3J0KCksXG4gICAgfTtcbiAgICBjb25zdCBzZXNzaW9uSWRlbnRpdHkgPSByZXNvbHZlU2Vzc2lvbklkZW50aXR5KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRlbnRpdHkuc2Vzc2lvbklkLFxuICAgICAgcnVudGltZVNlc3Npb25JZDogc2Vzc2lvbklkZW50aXR5LnJ1bnRpbWVTZXNzaW9uSWQsXG4gICAgICBzZXNzaW9uU291cmNlOiBzZXNzaW9uSWRlbnRpdHkuc291cmNlLFxuICAgICAgcGFja2FnZTogcGFja2FnZUluZm8sXG4gICAgICBidWlsZDoge1xuICAgICAgICB0aW1lc3RhbXA6IGJ1aWxkVGltZXN0YW1wLFxuICAgICAgICB0eXBlOiBCVUlMRF9UWVBFLFxuICAgICAgICBnaXRDb21taXQ6IGdpdEluZm8uY29tbWl0LFxuICAgICAgICBnaXRCcmFuY2g6IGdpdEluZm8uYnJhbmNoLFxuICAgICAgICBjb2xsZWN0aW9uRml4OiAndjEuNi45LWJldGExLWNvbGxlY3Rpb24tZml4JyAgLy8gVmVyc2lvbiBpZGVudGlmaWVyIGZvciB2ZXJpZmljYXRpb25cbiAgICAgIH0sXG4gICAgICBydW50aW1lOiB7XG4gICAgICAgIG5vZGVWZXJzaW9uOiBwcm9jZXNzLnZlcnNpb24sXG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBhcmNoOiBwcm9jZXNzLmFyY2gsXG4gICAgICAgIHVwdGltZTogcHJvY2Vzcy51cHRpbWUoKSxcbiAgICAgICAgbWVtb3J5VXNhZ2U6IHByb2Nlc3MubWVtb3J5VXNhZ2UoKVxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIG5vZGVFbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuICAgICAgICBpc1Byb2R1Y3Rpb246IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicsXG4gICAgICAgIGlzRGV2ZWxvcG1lbnQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnLFxuICAgICAgICBpc0RlYnVnOiBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJ3RydWUnIHx8IHByb2Nlc3MuZW52LkRFQlVHID09PSAnMScsXG4gICAgICAgIGlzRG9ja2VyOiBkb2NrZXJJbmZvLmlzRG9ja2VyLFxuICAgICAgICBkb2NrZXJJbmZvOiBkb2NrZXJJbmZvLmluZm9cbiAgICAgIH0sXG4gICAgICBzZXJ2ZXI6IHtcbiAgICAgICAgc3RhcnRUaW1lOiB0aGlzLnN0YXJ0VGltZSxcbiAgICAgICAgdXB0aW1lOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpLFxuICAgICAgICBtY3BDb25uZWN0aW9uOiB0cnVlIC8vIFdlJ3JlIGNvbm5lY3RlZCBpZiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgdmlhIE1DUFxuICAgICAgfSxcbiAgICAgIHN0YXJ0dXA6IHN0YXJ0dXBJbmZvLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGJ1aWxkIGluZm8gYXMgdXNlci1mcmllbmRseSBtYXJrZG93blxuICAgKiBTRUNVUklUWSBOT1RFOiBPbmx5IGZvcm1hdHMgc3lzdGVtLWdlbmVyYXRlZCBkYXRhIC0gbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nXG4gICAqIEFsbCBpbnB1dCBkYXRhIGNvbWVzIGZyb20gZ2V0QnVpbGRJbmZvKCkgd2hpY2ggb25seSByZWFkcyBzeXN0ZW0gaW5mb3JtYXRpb25cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRCdWlsZEluZm8oaW5mbzogQnVpbGRJbmZvKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBsaW5lcy5wdXNoKCcjIPCflKcgQnVpbGQgSW5mb3JtYXRpb25cXG4nKTtcbiAgICBcbiAgICAvLyBQYWNrYWdlIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn5OmIFBhY2thZ2UnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTmFtZSoqOiAke2luZm8ucGFja2FnZS5uYW1lfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipWZXJzaW9uKio6ICR7aW5mby5wYWNrYWdlLnZlcnNpb259YCk7XG4gICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICBjb25zdCBpZGVudGl0eVNvdXJjZUxhYmVsID0gaW5mby5zZXNzaW9uU291cmNlID09PSAnZW52J1xuICAgICAgPyAnRXhwbGljaXQgZW52aXJvbm1lbnQnXG4gICAgICA6ICdEZXJpdmVkIGZyb20gd29ya3NwYWNlIGNvbnRleHQnO1xuICAgIGNvbnN0IHNlc3Npb25MaW5lcyA9IFtcbiAgICAgICcjIyDwn6qqIFNlc3Npb24nLFxuICAgICAgYC0gKipTZXNzaW9uIElEKio6ICR7aW5mby5zZXNzaW9uSWR9YCxcbiAgICAgIGAtICoqSWRlbnRpdHkgU291cmNlKio6ICR7aWRlbnRpdHlTb3VyY2VMYWJlbH1gLFxuICAgIF07XG4gICAgaWYgKGluZm8ucnVudGltZVNlc3Npb25JZCAhPT0gaW5mby5zZXNzaW9uSWQpIHtcbiAgICAgIHNlc3Npb25MaW5lcy5zcGxpY2UoMiwgMCwgYC0gKipSdW50aW1lIFNlc3Npb24gSUQqKjogJHtpbmZvLnJ1bnRpbWVTZXNzaW9uSWR9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goLi4uc2Vzc2lvbkxpbmVzLCAnJyk7XG4gICAgXG4gICAgLy8gQnVpbGQgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfj5fvuI8gQnVpbGQnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVHlwZSoqOiAke2luZm8uYnVpbGQudHlwZX1gKTtcbiAgICBpZiAoaW5mby5idWlsZC50aW1lc3RhbXApIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipUaW1lc3RhbXAqKjogJHtpbmZvLmJ1aWxkLnRpbWVzdGFtcH1gKTtcbiAgICB9XG4gICAgaWYgKGluZm8uYnVpbGQuZ2l0Q29tbWl0KSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqR2l0IENvbW1pdCoqOiBcXGAke2luZm8uYnVpbGQuZ2l0Q29tbWl0fVxcYGApO1xuICAgIH1cbiAgICBpZiAoaW5mby5idWlsZC5naXRCcmFuY2gpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipHaXQgQnJhbmNoKio6ICR7aW5mby5idWlsZC5naXRCcmFuY2h9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIFJ1bnRpbWUgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfkrsgUnVudGltZScpO1xuICAgIGxpbmVzLnB1c2goYC0gKipOb2RlLmpzKio6ICR7aW5mby5ydW50aW1lLm5vZGVWZXJzaW9ufWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipQbGF0Zm9ybSoqOiAke2luZm8ucnVudGltZS5wbGF0Zm9ybX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqQXJjaGl0ZWN0dXJlKio6ICR7aW5mby5ydW50aW1lLmFyY2h9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKlByb2Nlc3MgVXB0aW1lKio6ICR7dGhpcy5mb3JtYXRVcHRpbWUoaW5mby5ydW50aW1lLnVwdGltZSl9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1lbW9yeSBVc2FnZSoqOiAke3RoaXMuZm9ybWF0TWVtb3J5KGluZm8ucnVudGltZS5tZW1vcnlVc2FnZS5oZWFwVXNlZCl9IC8gJHt0aGlzLmZvcm1hdE1lbW9yeShpbmZvLnJ1bnRpbWUubWVtb3J5VXNhZ2UuaGVhcFRvdGFsKX1gKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBFbnZpcm9ubWVudCBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg4pqZ77iPIEVudmlyb25tZW50Jyk7XG4gICAgbGluZXMucHVzaChgLSAqKk5PREVfRU5WKio6ICR7aW5mby5lbnZpcm9ubWVudC5ub2RlRW52IHx8ICdub3Qgc2V0J31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTW9kZSoqOiAke2luZm8uZW52aXJvbm1lbnQuaXNQcm9kdWN0aW9uID8gJ1Byb2R1Y3Rpb24nIDogaW5mby5lbnZpcm9ubWVudC5pc0RldmVsb3BtZW50ID8gJ0RldmVsb3BtZW50JyA6ICdVbmtub3duJ31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqRGVidWcqKjogJHtpbmZvLmVudmlyb25tZW50LmlzRGVidWcgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipEb2NrZXIqKjogJHtpbmZvLmVudmlyb25tZW50LmlzRG9ja2VyID8gJ1llcycgOiAnTm8nfWApO1xuICAgIGlmIChpbmZvLmVudmlyb25tZW50LmRvY2tlckluZm8pIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipDb250YWluZXIqKjogJHtpbmZvLmVudmlyb25tZW50LmRvY2tlckluZm99YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIFNlcnZlciBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+agCBTZXJ2ZXInKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqU3RhcnRlZCoqOiAke2luZm8uc2VydmVyLnN0YXJ0VGltZS50b0lTT1N0cmluZygpfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipVcHRpbWUqKjogJHt0aGlzLmZvcm1hdFVwdGltZShpbmZvLnNlcnZlci51cHRpbWUgLyAxMDAwKX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTUNQIENvbm5lY3Rpb24qKjogJHtpbmZvLnNlcnZlci5tY3BDb25uZWN0aW9uID8gJ+KchSBDb25uZWN0ZWQnIDogJ+KdjCBEaXNjb25uZWN0ZWQnfWApO1xuXG4gICAgLy8gSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmdcbiAgICBpZiAoaW5mby5zdGFydHVwKSB7XG4gICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICAgIGxpbmVzLnB1c2goJyMjIOKPse+4jyBTdGFydHVwJyk7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqU3RhdHVzKio6ICR7aW5mby5zdGFydHVwLnN0YXR1cyA9PT0gJ3JlYWR5JyA/ICfinIUgUmVhZHknIDogJ+KPsyBJbml0aWFsaXppbmcnfWApO1xuICAgICAgbGluZXMucHVzaChgLSAqKkRlZmVycmVkIFNldHVwKio6ICR7aW5mby5zdGFydHVwLmRlZmVycmVkU2V0dXBDb21wbGV0ZSA/ICdDb21wbGV0ZScgOiAnSW4gUHJvZ3Jlc3MnfWApO1xuICAgICAgaWYgKGluZm8uc3RhcnR1cC5zdGFydHVwVGltaW5nTXMpIHtcbiAgICAgICAgY29uc3QgdGltaW5nID0gaW5mby5zdGFydHVwLnN0YXJ0dXBUaW1pbmdNcztcbiAgICAgICAgbGluZXMucHVzaChgLSAqKkNyaXRpY2FsIFBhdGgqKjogJHt0aW1pbmcuY3JpdGljYWxQYXRoTXN9bXNgKTtcbiAgICAgICAgbGluZXMucHVzaChgLSAqKkRlZmVycmVkIFdvcmsqKjogJHt0aW1pbmcuZGVmZXJyZWRNc31tc2ApO1xuICAgICAgICBsaW5lcy5wdXNoKGAtICoqVG90YWwgU3RhcnR1cCoqOiAke3RpbWluZy50b3RhbE1zfW1zYCk7XG4gICAgICAgIGlmICh0aW1pbmcuY29ubmVjdEF0TXMgIT09IG51bGwpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGAtICoqVGltZSB0byBDb25uZWN0Kio6ICR7dGltaW5nLmNvbm5lY3RBdE1zfW1zYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWluZy5waGFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxpbmVzLnB1c2goJy0gKipQaGFzZXMqKjonKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBoYXNlIG9mIHRpbWluZy5waGFzZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IHBoYXNlLmNyaXRpY2FsID8gJ2NyaXRpY2FsJyA6ICdkZWZlcnJlZCc7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKGAgIC0gJHtwaGFzZS5uYW1lfTogJHtwaGFzZS5kdXJhdGlvbk1zfW1zICgke3RhZ30pYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgLSBleGVjdXRlcyBzeXN0ZW0gZ2l0IGNvbW1hbmRzXG4gICAqIERhdGEgc291cmNlOiBHaXQgQ0xJIG91dHB1dCAoc3lzdGVtLWNvbnRyb2xsZWQpLCBubyB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldEdpdEluZm8oKTogUHJvbWlzZTx7IGNvbW1pdD86IHN0cmluZzsgYnJhbmNoPzogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU0VDVVJJVFkgTk9URTogR2l0IGNvbW1hbmRzIHJldHVybiBzeXN0ZW0tY29udHJvbGxlZCBkYXRhIC0gbm90IHVzZXIgaW5wdXRcbiAgICAgIC8vIEdpdCBjb21taXQgaGFzaGVzIGFuZCBicmFuY2ggbmFtZXMgYXJlIGNvbnRyb2xsZWQgYnkgZ2l0LCBubyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gICAgICBjb25zdCBjb21taXQgPSBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKCdnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCcsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkudHJpbSgpO1xuICAgICAgY29uc3QgYnJhbmNoID0gY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLWFiYnJldi1yZWYgSEVBRCcsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkudHJpbSgpO1xuICAgICAgXG4gICAgICByZXR1cm4geyBjb21taXQsIGJyYW5jaCB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTm90IGluIGEgZ2l0IHJlcG9zaXRvcnkgb3IgZ2l0IG5vdCBhdmFpbGFibGVcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU0VDVVJJVFkgTk9URTogTm8gVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZCAtIHJlYWRzIGNvbnRhaW5lciBydW50aW1lIGZpbGVzXG4gICAqIERhdGEgc291cmNlOiBTeXN0ZW0gY2dyb3VwIGZpbGVzIChjb250YWluZXItY29udHJvbGxlZCksIG5vIHVzZXIgaW5wdXRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RG9ja2VySW5mbygpOiBQcm9taXNlPHsgaXNEb2NrZXI6IGJvb2xlYW47IGluZm8/OiBzdHJpbmcgfT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBTRUNVUklUWSBOT1RFOiBSZWFkaW5nIHN5c3RlbSBjZ3JvdXAgZmlsZSAtIGNvbnRyb2xsZWQgYnkgY29udGFpbmVyIHJ1bnRpbWUsIG5vdCB1c2VyIGlucHV0XG4gICAgICAvLyBDb250YWluZXIgcnVudGltZSBnZW5lcmF0ZXMgdGhpcyBmaWxlIGNvbnRlbnQsIG5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWRcbiAgICAgIGNvbnN0IGNncm91cENvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcGVyYXRpb25zLnJlYWRGaWxlKCcvcHJvYy8xL2Nncm91cCcsIHtcbiAgICAgICAgc291cmNlOiAnQnVpbGRJbmZvU2VydmljZS5nZXREb2NrZXJJbmZvJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBpc0RvY2tlciA9IGNncm91cENvbnRlbnQuaW5jbHVkZXMoJ2RvY2tlcicpIHx8IGNncm91cENvbnRlbnQuaW5jbHVkZXMoJ2NvbnRhaW5lcmQnKTtcbiAgICAgIFxuICAgICAgaWYgKGlzRG9ja2VyKSB7XG4gICAgICAgIC8vIFRyeSB0byBnZXQgY29udGFpbmVyIElEXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcklkID0gY2dyb3VwQ29udGVudFxuICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAuZmluZChsaW5lID0+IGxpbmUuaW5jbHVkZXMoJ2RvY2tlcicpKVxuICAgICAgICAgID8uc3BsaXQoJy8nKVxuICAgICAgICAgIC5wb3AoKVxuICAgICAgICAgID8uc3Vic3RyaW5nKDAsIDEyKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNEb2NrZXI6IHRydWUsXG4gICAgICAgICAgaW5mbzogY29udGFpbmVySWQgPyBgQ29udGFpbmVyIElEOiAke2NvbnRhaW5lcklkfWAgOiAnUnVubmluZyBpbiBEb2NrZXInXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7IGlzRG9ja2VyOiBmYWxzZSB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTm90IGluIERvY2tlciBvciAvcHJvYyBub3QgYXZhaWxhYmxlXG4gICAgICByZXR1cm4geyBpc0RvY2tlcjogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFVwdGltZShzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA4NjQwMCk7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgODY0MDApIC8gMzYwMCk7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHNlY29uZHMgJSAzNjAwKSAvIDYwKTtcbiAgICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihzZWNvbmRzICUgNjApO1xuICAgIFxuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChkYXlzID4gMCkgcGFydHMucHVzaChgJHtkYXlzfWRgKTtcbiAgICBpZiAoaG91cnMgPiAwKSBwYXJ0cy5wdXNoKGAke2hvdXJzfWhgKTtcbiAgICBpZiAobWludXRlcyA+IDApIHBhcnRzLnB1c2goYCR7bWludXRlc31tYCk7XG4gICAgaWYgKHNlY3MgPiAwIHx8IHBhcnRzLmxlbmd0aCA9PT0gMCkgcGFydHMucHVzaChgJHtzZWNzfXNgKTtcbiAgICBcbiAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNZW1vcnkoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbWIgPSBieXRlcyAvIDEwMjQgLyAxMDI0O1xuICAgIHJldHVybiBgJHttYi50b0ZpeGVkKDEpfSBNQmA7XG4gIH1cbn1cbiJdfQ==
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVpbGRJbmZvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FHOUIsTUFBTSw2QkFBNkIsQ0FBQztBQXFEckMsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLFNBQVMsQ0FBTztJQUNoQixjQUFjLENBQXlCO0lBQ3hELHFFQUFxRTtJQUM3RCxZQUFZLEdBQXdCLElBQUksQ0FBQztJQUNqRCwyREFBMkQ7SUFDbkQsb0JBQW9CLEdBQTJCLElBQUksQ0FBQztJQUU1RCxZQUFZLGNBQXNDO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLE9BQXNCO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixrRkFBa0Y7UUFDbEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENB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QUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFFM0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVpbGRJbmZvU2VydmljZSAtIFByb3ZpZGVzIGJ1aWxkIGFuZCBydW50aW1lIGluZm9ybWF0aW9uXG4gKiBTZXBhcmF0ZWQgZnJvbSBtYWluIGluZGV4LnRzIHRvIGF2b2lkIG1ha2luZyB0aGF0IGZpbGUgbGFyZ2VyXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWCAoUFIgIzYxNCk6XG4gKiAxLiBETUNQLVNFQy0wMDQ6IEZBTFNFIFBPU0lUSVZFIFNVUFBSRVNTSU9OIC0gTm8gdXNlciBpbnB1dCBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gKiAgICBUaGlzIHNlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChnaXQsIHBhY2thZ2UuanNvbiwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICogICAgVGhlIE1DUCB0b29sICdnZXRfYnVpbGRfaW5mbycgdGFrZXMgTk8gcGFyYW1ldGVycyAoZW1wdHkgaW5wdXRTY2hlbWEpXG4gKiAgICBObyB1c2VyLXByb3ZpZGVkIGRhdGEgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UgdGhhdCByZXF1aXJlcyBVbmljb2RlIG5vcm1hbGl6YXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVkVSU0lPTiwgQlVJTERfVElNRVNUQU1QLCBCVUlMRF9UWVBFIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwVGltZXIsIFN0YXJ0dXBSZXBvcnQgfSBmcm9tICcuLi90ZWxlbWV0cnkvU3RhcnR1cFRpbWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkgfSBmcm9tICcuL3Nlc3Npb25JZGVudGl0eS5qcyc7XG5pbXBvcnQge1xuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgsXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tIZWFsdGhTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnksXG59IGZyb20gJy4uL3V0aWxzL3Blcm1pc3Npb25Ib29rcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRJbmZvIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTZXNzaW9uSWQ6IHN0cmluZztcbiAgc2Vzc2lvblNvdXJjZTogJ2VudicgfCAnZGVyaXZlZCc7XG4gIHBhY2thZ2U6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICB9O1xuICBidWlsZDoge1xuICAgIHRpbWVzdGFtcD86IHN0cmluZztcbiAgICB0eXBlOiAnZ2l0JyB8ICducG0nIHwgJ3Vua25vd24nO1xuICAgIGdpdENvbW1pdD86IHN0cmluZztcbiAgICBnaXRCcmFuY2g/OiBzdHJpbmc7XG4gIH07XG4gIHJ1bnRpbWU6IHtcbiAgICBub2RlVmVyc2lvbjogc3RyaW5nO1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgYXJjaDogc3RyaW5nO1xuICAgIHVwdGltZTogbnVtYmVyO1xuICAgIG1lbW9yeVVzYWdlOiBOb2RlSlMuTWVtb3J5VXNhZ2U7XG4gIH07XG4gIGVudmlyb25tZW50OiB7XG4gICAgbm9kZUVudj86IHN0cmluZztcbiAgICBpc1Byb2R1Y3Rpb246IGJvb2xlYW47XG4gICAgaXNEZXZlbG9wbWVudDogYm9vbGVhbjtcbiAgICBpc0RlYnVnOiBib29sZWFuO1xuICAgIGlzRG9ja2VyOiBib29sZWFuO1xuICAgIGRvY2tlckluZm8/OiBzdHJpbmc7XG4gIH07XG4gIHNlcnZlcjoge1xuICAgIHN0YXJ0VGltZTogRGF0ZTtcbiAgICB1cHRpbWU6IG51bWJlcjtcbiAgICBtY3BDb25uZWN0aW9uOiBib29sZWFuO1xuICB9O1xuICBwZXJtaXNzaW9uSG9va3M/OiB7XG4gICAgaGVhbHRoOiBQZXJtaXNzaW9uSG9va0hlYWx0aFN1bW1hcnk7XG4gICAgaW5zdGFsbGVkSG9zdHM6IHN0cmluZ1tdO1xuICAgIGN1cnJlbnRIb3N0czogc3RyaW5nW107XG4gICAgcmVwYWlyZWRIb3N0czogc3RyaW5nW107XG4gICAgbmVlZHNSZXBhaXJIb3N0czogc3RyaW5nW107XG4gICAgbGFzdFN0YXJ0dXBSZXBhaXI6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsO1xuICB9O1xuICAvKiogSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgYW5kIHJlYWRpbmVzcyBzdGF0dXMuICovXG4gIHN0YXJ0dXA/OiB7XG4gICAgc3RhdHVzOiAncmVhZHknIHwgJ2luaXRpYWxpemluZyc7XG4gICAgZGVmZXJyZWRTZXR1cENvbXBsZXRlOiBib29sZWFuO1xuICAgIHVwdGltZU1zOiBudW1iZXI7XG4gICAgc3RhcnR1cFRpbWluZ01zPzogU3RhcnR1cFJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSW5mb1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0VGltZTogRGF0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BlcmF0aW9uczogSUZpbGVPcGVyYXRpb25zU2VydmljZTtcbiAgLyoqIElzc3VlICM3MDY6IE9wdGlvbmFsIHN0YXJ0dXAgdGltZXIgZm9yIHRpbWluZyBpbnN0cnVtZW50YXRpb24uICovXG4gIHByaXZhdGUgc3RhcnR1cFRpbWVyOiBTdGFydHVwVGltZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIElzc3VlICM3MDY6IENhbGxiYWNrIHRvIGNoZWNrIGRlZmVycmVkIHNldHVwIHN0YXR1cy4gKi9cbiAgcHJpdmF0ZSBkZWZlcnJlZFNldHVwQ2hlY2tlcjogKCgpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UpIHtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5maWxlT3BlcmF0aW9ucyA9IGZpbGVPcGVyYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gc3RhcnR1cCBpbnN0cnVtZW50YXRpb24gYWZ0ZXIgREkgaXMgcmVhZHkuXG4gICAqIENhbGxlZCBmcm9tIENvbnRhaW5lciB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxuICAgKi9cbiAgc2V0U3RhcnR1cFRpbWVyKHRpbWVyOiBTdGFydHVwVGltZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lciA9IHRpbWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gZGVmZXJyZWQgc2V0dXAgc3RhdHVzIGNoZWNrZXIuXG4gICAqL1xuICBzZXREZWZlcnJlZFNldHVwQ2hlY2tlcihjaGVja2VyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlciA9IGNoZWNrZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbXByZWhlbnNpdmUgYnVpbGQgaW5mb3JtYXRpb25cbiAgICogU0VDVVJJVFkgTk9URTogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIG9ubHkgc3lzdGVtLWdlbmVyYXRlZCBkYXRhXG4gICAqIE5vIHVzZXIgaW5wdXQgaXMgaW52b2x2ZWQgLSBhbGwgZGF0YSBjb21lcyBmcm9tIGZpbGVzeXN0ZW0sIGdpdCwgYW5kIE5vZGUuanMgcHJvY2Vzc1xuICAgKlxuICAgKiBVc2VzIFByb21pc2UuYWxsU2V0dGxlZCB0byBjb2xsZWN0IHBhcnRpYWwgcmVzdWx0cyBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsLFxuICAgKiBwcm92aWRpbmcgbWF4aW11bSBpbmZvcm1hdGlvbiBhdmFpbGFiaWxpdHkgd2l0aCBncmFjZWZ1bCBkZWdyYWRhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCdWlsZEluZm8oKTogUHJvbWlzZTxCdWlsZEluZm8+IHtcbiAgICAvLyBVc2UgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGNvbGxlY3QgYWxsIGF2YWlsYWJsZSBpbmZvLCBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICB0aGlzLmdldEdpdEluZm8oKSxcbiAgICAgIHRoaXMuZ2V0RG9ja2VySW5mbygpLFxuICAgICAgZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkoKSxcbiAgICBdKTtcblxuICAgIC8vIFBhY2thZ2UgaW5mbyBjb21lcyBmcm9tIGJ1aWxkLXRpbWUgZ2VuZXJhdGVkIGNvbnN0YW50c1xuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiBQQUNLQUdFX05BTUUsIHZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTiB9O1xuXG4gICAgY29uc3QgZ2l0SW5mbyA9IHJlc3VsdHNbMF0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzBdLnZhbHVlXG4gICAgICA6IHsgY29tbWl0OiB1bmRlZmluZWQsIGJyYW5jaDogdW5kZWZpbmVkIH07XG5cbiAgICBjb25zdCBkb2NrZXJJbmZvID0gcmVzdWx0c1sxXS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnXG4gICAgICA/IHJlc3VsdHNbMV0udmFsdWVcbiAgICAgIDogeyBpc0RvY2tlcjogZmFsc2UsIGluZm86IHVuZGVmaW5lZCB9O1xuICAgIGNvbnN0IHBlcm1pc3Npb25Ib29rSW5mbyA9IHJlc3VsdHNbMl0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzJdLnZhbHVlXG4gICAgICA6IHsgaW5zdGFsbGVkSG9zdHM6IFtdLCBjdXJyZW50SG9zdHM6IFtdLCByZXBhaXJlZEhvc3RzOiBbXSwgbmVlZHNSZXBhaXJIb3N0czogW10sIGxhc3RTdGFydHVwUmVwYWlyOiBudWxsIH07XG4gICAgY29uc3QgcGVybWlzc2lvbkhvb2tIZWFsdGggPSBzdW1tYXJpemVQZXJtaXNzaW9uSG9va0hlYWx0aChwZXJtaXNzaW9uSG9va0luZm8pO1xuXG4gICAgLy8gTG9nIGFueSBmYWlsdXJlcyBmb3IgZGlhZ25vc3RpY3NcbiAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocmVzdWx0c1swXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYGdpdCBpbmZvOiAke3Jlc3VsdHNbMF0ucmVhc29ufWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0c1sxXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYGRvY2tlciBpbmZvOiAke3Jlc3VsdHNbMV0ucmVhc29ufWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0c1syXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYHBlcm1pc3Npb24gaG9vayBhdWRpdDogJHtyZXN1bHRzWzJdLnJlYXNvbn1gKTtcbiAgICB9XG5cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBCdWlsZCBpbmZvIGNvbGxlY3Rpb24gaGFkICR7ZmFpbHVyZXMubGVuZ3RofSBmYWlsdXJlKHMpOiAke2ZhaWx1cmVzLmpvaW4oJzsgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGltZXN0YW1wIGNvbWVzIGZyb20gYnVpbGQtdGltZSBnZW5lcmF0ZWQgY29uc3RhbnRzXG4gICAgY29uc3QgYnVpbGRUaW1lc3RhbXAgPSBCVUlMRF9USU1FU1RBTVA7XG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBTdGFydHVwIHRpbWluZyBhbmQgcmVhZGluZXNzXG4gICAgY29uc3QgZGVmZXJyZWRDb21wbGV0ZSA9IHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIgPyB0aGlzLmRlZmVycmVkU2V0dXBDaGVja2VyKCkgOiB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0dXBJbmZvOiBCdWlsZEluZm9bJ3N0YXJ0dXAnXSA9IHtcbiAgICAgIHN0YXR1czogZGVmZXJyZWRDb21wbGV0ZSA/ICdyZWFkeScgOiAnaW5pdGlhbGl6aW5nJyxcbiAgICAgIGRlZmVycmVkU2V0dXBDb21wbGV0ZTogZGVmZXJyZWRDb21wbGV0ZSxcbiAgICAgIHVwdGltZU1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpLFxuICAgICAgc3RhcnR1cFRpbWluZ01zOiB0aGlzLnN0YXJ0dXBUaW1lcj8uZ2V0UmVwb3J0KCksXG4gICAgfTtcbiAgICBjb25zdCBzZXNzaW9uSWRlbnRpdHkgPSByZXNvbHZlU2Vzc2lvbklkZW50aXR5KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRlbnRpdHkuc2Vzc2lvbklkLFxuICAgICAgcnVudGltZVNlc3Npb25JZDogc2Vzc2lvbklkZW50aXR5LnJ1bnRpbWVTZXNzaW9uSWQsXG4gICAgICBzZXNzaW9uU291cmNlOiBzZXNzaW9uSWRlbnRpdHkuc291cmNlLFxuICAgICAgcGFja2FnZTogcGFja2FnZUluZm8sXG4gICAgICBidWlsZDoge1xuICAgICAgICB0aW1lc3RhbXA6IGJ1aWxkVGltZXN0YW1wLFxuICAgICAgICB0eXBlOiBCVUlMRF9UWVBFLFxuICAgICAgICBnaXRDb21taXQ6IGdpdEluZm8uY29tbWl0LFxuICAgICAgICBnaXRCcmFuY2g6IGdpdEluZm8uYnJhbmNoLFxuICAgICAgfSxcbiAgICAgIHJ1bnRpbWU6IHtcbiAgICAgICAgbm9kZVZlcnNpb246IHByb2Nlc3MudmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICAgIGFyY2g6IHByb2Nlc3MuYXJjaCxcbiAgICAgICAgdXB0aW1lOiBwcm9jZXNzLnVwdGltZSgpLFxuICAgICAgICBtZW1vcnlVc2FnZTogcHJvY2Vzcy5tZW1vcnlVc2FnZSgpXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbm9kZUVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG4gICAgICAgIGlzUHJvZHVjdGlvbjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyxcbiAgICAgICAgaXNEZXZlbG9wbWVudDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcsXG4gICAgICAgIGlzRGVidWc6IHByb2Nlc3MuZW52LkRFQlVHID09PSAndHJ1ZScgfHwgcHJvY2Vzcy5lbnYuREVCVUcgPT09ICcxJyxcbiAgICAgICAgaXNEb2NrZXI6IGRvY2tlckluZm8uaXNEb2NrZXIsXG4gICAgICAgIGRvY2tlckluZm86IGRvY2tlckluZm8uaW5mb1xuICAgICAgfSxcbiAgICAgIHNlcnZlcjoge1xuICAgICAgICBzdGFydFRpbWU6IHRoaXMuc3RhcnRUaW1lLFxuICAgICAgICB1cHRpbWU6IERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZS5nZXRUaW1lKCksXG4gICAgICAgIG1jcENvbm5lY3Rpb246IHRydWUgLy8gV2UncmUgY29ubmVjdGVkIGlmIHRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCB2aWEgTUNQXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbkhvb2tzOiB7XG4gICAgICAgIC4uLnBlcm1pc3Npb25Ib29rSW5mbyxcbiAgICAgICAgaGVhbHRoOiBwZXJtaXNzaW9uSG9va0hlYWx0aCxcbiAgICAgIH0sXG4gICAgICBzdGFydHVwOiBzdGFydHVwSW5mbyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBidWlsZCBpbmZvIGFzIHVzZXItZnJpZW5kbHkgbWFya2Rvd25cbiAgICogU0VDVVJJVFkgTk9URTogT25seSBmb3JtYXRzIHN5c3RlbS1nZW5lcmF0ZWQgZGF0YSAtIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZ1xuICAgKiBBbGwgaW5wdXQgZGF0YSBjb21lcyBmcm9tIGdldEJ1aWxkSW5mbygpIHdoaWNoIG9ubHkgcmVhZHMgc3lzdGVtIGluZm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0QnVpbGRJbmZvKGluZm86IEJ1aWxkSW5mbyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgbGluZXMucHVzaCgnIyDwn5SnIEJ1aWxkIEluZm9ybWF0aW9uXFxuJyk7XG4gICAgXG4gICAgLy8gUGFja2FnZSBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+TpiBQYWNrYWdlJyk7XG4gICAgbGluZXMucHVzaChgLSAqKk5hbWUqKjogJHtpbmZvLnBhY2thZ2UubmFtZX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVmVyc2lvbioqOiAke2luZm8ucGFja2FnZS52ZXJzaW9ufWApO1xuICAgIGxpbmVzLnB1c2goJycpO1xuXG4gICAgY29uc3QgaWRlbnRpdHlTb3VyY2VMYWJlbCA9IGluZm8uc2Vzc2lvblNvdXJjZSA9PT0gJ2VudidcbiAgICAgID8gJ0V4cGxpY2l0IGVudmlyb25tZW50J1xuICAgICAgOiAnRGVyaXZlZCBmcm9tIHdvcmtzcGFjZSBjb250ZXh0JztcbiAgICBjb25zdCBzZXNzaW9uTGluZXMgPSBbXG4gICAgICAnIyMg8J+qqiBTZXNzaW9uJyxcbiAgICAgIGAtICoqU2Vzc2lvbiBJRCoqOiAke2luZm8uc2Vzc2lvbklkfWAsXG4gICAgICBgLSAqKklkZW50aXR5IFNvdXJjZSoqOiAke2lkZW50aXR5U291cmNlTGFiZWx9YCxcbiAgICBdO1xuICAgIGlmIChpbmZvLnJ1bnRpbWVTZXNzaW9uSWQgIT09IGluZm8uc2Vzc2lvbklkKSB7XG4gICAgICBzZXNzaW9uTGluZXMuc3BsaWNlKDIsIDAsIGAtICoqUnVudGltZSBTZXNzaW9uIElEKio6ICR7aW5mby5ydW50aW1lU2Vzc2lvbklkfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKC4uLnNlc3Npb25MaW5lcywgJycpO1xuICAgIFxuICAgIC8vIEJ1aWxkIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn4+X77iPIEJ1aWxkJyk7XG4gICAgbGluZXMucHVzaChgLSAqKlR5cGUqKjogJHtpbmZvLmJ1aWxkLnR5cGV9YCk7XG4gICAgaWYgKGluZm8uYnVpbGQudGltZXN0YW1wKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqVGltZXN0YW1wKio6ICR7aW5mby5idWlsZC50aW1lc3RhbXB9YCk7XG4gICAgfVxuICAgIGlmIChpbmZvLmJ1aWxkLmdpdENvbW1pdCkge1xuICAgICAgbGluZXMucHVzaChgLSAqKkdpdCBDb21taXQqKjogXFxgJHtpbmZvLmJ1aWxkLmdpdENvbW1pdH1cXGBgKTtcbiAgICB9XG4gICAgaWYgKGluZm8uYnVpbGQuZ2l0QnJhbmNoKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqR2l0IEJyYW5jaCoqOiAke2luZm8uYnVpbGQuZ2l0QnJhbmNofWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBSdW50aW1lIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn5K7IFJ1bnRpbWUnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTm9kZS5qcyoqOiAke2luZm8ucnVudGltZS5ub2RlVmVyc2lvbn1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqUGxhdGZvcm0qKjogJHtpbmZvLnJ1bnRpbWUucGxhdGZvcm19YCk7XG4gICAgbGluZXMucHVzaChgLSAqKkFyY2hpdGVjdHVyZSoqOiAke2luZm8ucnVudGltZS5hcmNofWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipQcm9jZXNzIFVwdGltZSoqOiAke3RoaXMuZm9ybWF0VXB0aW1lKGluZm8ucnVudGltZS51cHRpbWUpfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipNZW1vcnkgVXNhZ2UqKjogJHt0aGlzLmZvcm1hdE1lbW9yeShpbmZvLnJ1bnRpbWUubWVtb3J5VXNhZ2UuaGVhcFVzZWQpfSAvICR7dGhpcy5mb3JtYXRNZW1vcnkoaW5mby5ydW50aW1lLm1lbW9yeVVzYWdlLmhlYXBUb3RhbCl9YCk7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgXG4gICAgLy8gRW52aXJvbm1lbnQgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIOKame+4jyBFbnZpcm9ubWVudCcpO1xuICAgIGxpbmVzLnB1c2goYC0gKipOT0RFX0VOVioqOiAke2luZm8uZW52aXJvbm1lbnQubm9kZUVudiB8fCAnbm90IHNldCd9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1vZGUqKjogJHtpbmZvLmVudmlyb25tZW50LmlzUHJvZHVjdGlvbiA/ICdQcm9kdWN0aW9uJyA6IGluZm8uZW52aXJvbm1lbnQuaXNEZXZlbG9wbWVudCA/ICdEZXZlbG9wbWVudCcgOiAnVW5rbm93bid9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKkRlYnVnKio6ICR7aW5mby5lbnZpcm9ubWVudC5pc0RlYnVnID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJ31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqRG9ja2VyKio6ICR7aW5mby5lbnZpcm9ubWVudC5pc0RvY2tlciA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICBpZiAoaW5mby5lbnZpcm9ubWVudC5kb2NrZXJJbmZvKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqQ29udGFpbmVyKio6ICR7aW5mby5lbnZpcm9ubWVudC5kb2NrZXJJbmZvfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBTZXJ2ZXIgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfmoAgU2VydmVyJyk7XG4gICAgbGluZXMucHVzaChgLSAqKlN0YXJ0ZWQqKjogJHtpbmZvLnNlcnZlci5zdGFydFRpbWUudG9JU09TdHJpbmcoKX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVXB0aW1lKio6ICR7dGhpcy5mb3JtYXRVcHRpbWUoaW5mby5zZXJ2ZXIudXB0aW1lIC8gMTAwMCl9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1DUCBDb25uZWN0aW9uKio6ICR7aW5mby5zZXJ2ZXIubWNwQ29ubmVjdGlvbiA/ICfinIUgQ29ubmVjdGVkJyA6ICfinYwgRGlzY29ubmVjdGVkJ31gKTtcblxuICAgIGlmIChpbmZvLnBlcm1pc3Npb25Ib29rcykge1xuICAgICAgY29uc3QgaW5zdGFsbGVkSG9zdHMgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5pbnN0YWxsZWRIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MuaW5zdGFsbGVkSG9zdHMuam9pbignLCAnKVxuICAgICAgICA6ICdOb25lJztcbiAgICAgIGNvbnN0IGN1cnJlbnRIb3N0cyA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmN1cnJlbnRIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MuY3VycmVudEhvc3RzLmpvaW4oJywgJylcbiAgICAgICAgOiAnTm9uZSc7XG4gICAgICBjb25zdCBuZWVkc1JlcGFpckhvc3RzID0gaW5mby5wZXJtaXNzaW9uSG9va3MubmVlZHNSZXBhaXJIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MubmVlZHNSZXBhaXJIb3N0cy5qb2luKCcsICcpXG4gICAgICAgIDogJ05vbmUnO1xuICAgICAgY29uc3QgbGFzdFN0YXJ0dXBSZXBhaXIgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5sYXN0U3RhcnR1cFJlcGFpcjtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXBhaXJJc3N1ZXMgPSBsYXN0U3RhcnR1cFJlcGFpclxuICAgICAgICA/IGxhc3RTdGFydHVwUmVwYWlyLmhvc3RSZXN1bHRzXG4gICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQub3V0Y29tZSA9PT0gJ25lZWRzX3JlcGFpcicgfHwgcmVzdWx0Lm91dGNvbWUgPT09ICdlcnJvcicpXG4gICAgICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucmVwYWlyRXJyb3IgPyBgJHtyZXN1bHQuaG9zdH0gKCR7cmVzdWx0LnJlcGFpckVycm9yfSlgIDogcmVzdWx0Lmhvc3QpXG4gICAgICAgICAgLmpvaW4oJzsgJylcbiAgICAgICAgOiAnJztcblxuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgJycsXG4gICAgICAgICcjIyDwn5SQIFBlcm1pc3Npb24gSG9va3MnLFxuICAgICAgICBgLSAqKkhlYWx0aCoqOiAke2luZm8ucGVybWlzc2lvbkhvb2tzLmhlYWx0aC5zdGF0dXMudG9VcHBlckNhc2UoKX0g4oCUICR7aW5mby5wZXJtaXNzaW9uSG9va3MuaGVhbHRoLm1lc3NhZ2V9YCxcbiAgICAgICAgYC0gKipJbnN0YWxsZWQgSG9zdHMqKjogJHtpbnN0YWxsZWRIb3N0c31gLFxuICAgICAgICBgLSAqKkN1cnJlbnQgQXNzZXRzKio6ICR7Y3VycmVudEhvc3RzfWAsXG4gICAgICAgIGAtICoqTmVlZHMgUmVwYWlyKio6ICR7bmVlZHNSZXBhaXJIb3N0c31gLFxuICAgICAgKTtcblxuICAgICAgaWYgKGxhc3RTdGFydHVwUmVwYWlyKSB7XG4gICAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICAgYC0gKipMYXN0IFN0YXJ0dXAgQXVkaXQqKjogJHtsYXN0U3RhcnR1cFJlcGFpci5jb21wbGV0ZWRBdH0gKCR7bGFzdFN0YXJ0dXBSZXBhaXIuZHVyYXRpb25Nc31tcylgLFxuICAgICAgICAgIGAtICoqU3RhcnR1cCBSZXBhaXJzIEFwcGxpZWQqKjogJHtsYXN0U3RhcnR1cFJlcGFpci5yZXBhaXJlZENvdW50fWAsXG4gICAgICAgICAgYC0gKipTdGFydHVwIFJlcGFpciBJc3N1ZXMqKjogJHtzdGFydHVwUmVwYWlySXNzdWVzIHx8ICdOb25lJ31gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nXG4gICAgaWYgKGluZm8uc3RhcnR1cCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICBsaW5lcy5wdXNoKCcjIyDij7HvuI8gU3RhcnR1cCcpO1xuICAgICAgbGluZXMucHVzaChgLSAqKlN0YXR1cyoqOiAke2luZm8uc3RhcnR1cC5zdGF0dXMgPT09ICdyZWFkeScgPyAn4pyFIFJlYWR5JyA6ICfij7MgSW5pdGlhbGl6aW5nJ31gKTtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBTZXR1cCoqOiAke2luZm8uc3RhcnR1cC5kZWZlcnJlZFNldHVwQ29tcGxldGUgPyAnQ29tcGxldGUnIDogJ0luIFByb2dyZXNzJ31gKTtcbiAgICAgIGlmIChpbmZvLnN0YXJ0dXAuc3RhcnR1cFRpbWluZ01zKSB7XG4gICAgICAgIGNvbnN0IHRpbWluZyA9IGluZm8uc3RhcnR1cC5zdGFydHVwVGltaW5nTXM7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipDcml0aWNhbCBQYXRoKio6ICR7dGltaW5nLmNyaXRpY2FsUGF0aE1zfW1zYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBXb3JrKio6ICR7dGltaW5nLmRlZmVycmVkTXN9bXNgKTtcbiAgICAgICAgbGluZXMucHVzaChgLSAqKlRvdGFsIFN0YXJ0dXAqKjogJHt0aW1pbmcudG90YWxNc31tc2ApO1xuICAgICAgICBpZiAodGltaW5nLmNvbm5lY3RBdE1zICE9PSBudWxsKSB7XG4gICAgICAgICAgbGluZXMucHVzaChgLSAqKlRpbWUgdG8gQ29ubmVjdCoqOiAke3RpbWluZy5jb25uZWN0QXRNc31tc2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1pbmcucGhhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKCctICoqUGhhc2VzKio6Jyk7XG4gICAgICAgICAgZm9yIChjb25zdCBwaGFzZSBvZiB0aW1pbmcucGhhc2VzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBwaGFzZS5jcml0aWNhbCA/ICdjcml0aWNhbCcgOiAnZGVmZXJyZWQnO1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAtICR7cGhhc2UubmFtZX06ICR7cGhhc2UuZHVyYXRpb25Nc31tcyAoJHt0YWd9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRUNVUklUWSBOT1RFOiBObyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkIC0gZXhlY3V0ZXMgc3lzdGVtIGdpdCBjb21tYW5kc1xuICAgKiBEYXRhIHNvdXJjZTogR2l0IENMSSBvdXRwdXQgKHN5c3RlbS1jb250cm9sbGVkKSwgbm8gdXNlciBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRHaXRJbmZvKCk6IFByb21pc2U8eyBjb21taXQ/OiBzdHJpbmc7IGJyYW5jaD86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IEdpdCBjb21tYW5kcyByZXR1cm4gc3lzdGVtLWNvbnRyb2xsZWQgZGF0YSAtIG5vdCB1c2VyIGlucHV0XG4gICAgICAvLyBHaXQgY29tbWl0IGhhc2hlcyBhbmQgYnJhbmNoIG5hbWVzIGFyZSBjb250cm9sbGVkIGJ5IGdpdCwgbm8gVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZFxuICAgICAgY29uc3QgY29tbWl0ID0gY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29tbWl0LCBicmFuY2ggfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBhIGdpdCByZXBvc2l0b3J5IG9yIGdpdCBub3QgYXZhaWxhYmxlXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgLSByZWFkcyBjb250YWluZXIgcnVudGltZSBmaWxlc1xuICAgKiBEYXRhIHNvdXJjZTogU3lzdGVtIGNncm91cCBmaWxlcyAoY29udGFpbmVyLWNvbnRyb2xsZWQpLCBubyB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERvY2tlckluZm8oKTogUHJvbWlzZTx7IGlzRG9ja2VyOiBib29sZWFuOyBpbmZvPzogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU0VDVVJJVFkgTk9URTogUmVhZGluZyBzeXN0ZW0gY2dyb3VwIGZpbGUgLSBjb250cm9sbGVkIGJ5IGNvbnRhaW5lciBydW50aW1lLCBub3QgdXNlciBpbnB1dFxuICAgICAgLy8gQ29udGFpbmVyIHJ1bnRpbWUgZ2VuZXJhdGVzIHRoaXMgZmlsZSBjb250ZW50LCBubyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gICAgICBjb25zdCBjZ3JvdXBDb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5yZWFkRmlsZSgnL3Byb2MvMS9jZ3JvdXAnLCB7XG4gICAgICAgIHNvdXJjZTogJ0J1aWxkSW5mb1NlcnZpY2UuZ2V0RG9ja2VySW5mbydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNEb2NrZXIgPSBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdkb2NrZXInKSB8fCBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdjb250YWluZXJkJyk7XG4gICAgICBcbiAgICAgIGlmIChpc0RvY2tlcikge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IGNvbnRhaW5lciBJRFxuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNncm91cENvbnRlbnRcbiAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgLmZpbmQobGluZSA9PiBsaW5lLmluY2x1ZGVzKCdkb2NrZXInKSlcbiAgICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgICAucG9wKClcbiAgICAgICAgICA/LnN1YnN0cmluZygwLCAxMik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzRG9ja2VyOiB0cnVlLFxuICAgICAgICAgIGluZm86IGNvbnRhaW5lcklkID8gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZH1gIDogJ1J1bm5pbmcgaW4gRG9ja2VyJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4geyBpc0RvY2tlcjogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBEb2NrZXIgb3IgL3Byb2Mgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIHsgaXNEb2NrZXI6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVcHRpbWUoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gODY0MDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGF5cyA+IDApIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gICAgaWYgKGhvdXJzID4gMCkgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIGlmIChzZWNzID4gMCB8fCBwYXJ0cy5sZW5ndGggPT09IDApIHBhcnRzLnB1c2goYCR7c2Vjc31zYCk7XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWVtb3J5KGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1iID0gYnl0ZXMgLyAxMDI0IC8gMTAyNDtcbiAgICByZXR1cm4gYCR7bWIudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submitToPortfolioTool.d.ts","sourceRoot":"","sources":["../../../src/tools/portfolio/submitToPortfolioTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAA2B,MAAM,qCAAqC,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAGhG,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAKhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"submitToPortfolioTool.d.ts","sourceRoot":"","sources":["../../../src/tools/portfolio/submitToPortfolioTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAA2B,MAAM,qCAAqC,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAGhG,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAKhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAMjF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,iCAAiC;IAChD,WAAW,EAAE,iBAAiB,CAAC;IAC/B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,WAAW,EAAE,YAAY,CAAC;IAC1B,cAAc,EAAE,sBAAsB,CAAC;IACvC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,YAAY,CAAe;gBAEvB,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,iCAAiC;IA0B/E;;;;OAIG;YACW,0BAA0B;IA8BxC;;;OAGG;YACW,mBAAmB;IA2BjC;;;;;;OAMG;YACW,gCAAgC;IAsH9C;;;;OAIG;YACW,sBAAsB;IA+DpC;;;;;;OAMG;YACW,sBAAsB;IA2EpC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;;;;;OAMG;YACW,sBAAsB;IAiEpC;;;;;OAKG;YACW,wBAAwB;IAsItC;;;;;OAKG;YACW,qBAAqB;IA6NnC;;;;;;;;;OASG;YACW,2BAA2B;IA6GzC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAwBlC;;;;OAIG;YACW,qBAAqB;IA+CnC;;;;;;;OAOG;YACW,oBAAoB;IA8DlC;;;;;;OAMG;YACW,kBAAkB;IAkDhC;;;;;;;;OAQG;YACW,8BAA8B;IAyJtC,OAAO,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAoJhF;;;OAGG;YACW,6BAA6B;IAuE3C;;;OAGG;YACW,qBAAqB;YAwRrB,gBAAgB;IA6I9B;;;;;;;OAOG;YACW,iBAAiB;IAoH/B;;;;OAIG;YACW,uBAAuB;IA6HrC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;;OAGG;YACW,oBAAoB;IAyElC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;CAmDzB"}
|