@dollhousemcp/mcp-server 2.0.29 → 2.0.31
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 +10 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/mcp-aql/OperationSchema.js +2 -2
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/evaluatePermission.js +6 -3
- package/dist/services/BuildInfoService.d.ts +5 -0
- package/dist/services/BuildInfoService.d.ts.map +1 -1
- package/dist/services/BuildInfoService.js +44 -8
- 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 +165 -0
- package/dist/utils/permissionHookShared.d.ts.map +1 -0
- package/dist/utils/permissionHookShared.js +425 -0
- package/dist/utils/permissionHookStatus.d.ts +10 -0
- package/dist/utils/permissionHookStatus.d.ts.map +1 -0
- package/dist/utils/permissionHookStatus.js +260 -0
- package/dist/utils/permissionHooks.d.ts +3 -91
- package/dist/utils/permissionHooks.d.ts.map +1 -1
- package/dist/utils/permissionHooks.js +4 -947
- 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 +24 -2
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +21 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +9 -2
- package/package.json +3 -1
- package/scripts/permission-hook-config.sh +67 -0
- package/scripts/pretooluse-dollhouse.sh +185 -38
- package/scripts/pretooluse-vscode.sh +23 -10
- package/scripts/pretooluse-windsurf.sh +6 -6
- package/server.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluatePermission.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/evaluatePermission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAgB,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACpF,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAG/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,EACnE,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO;CAOlB;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,WAAW,CAAC;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,wBAAwB,CAAC;IACjG,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,mBAAmB,CAAC;IAChI,iBAAiB,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACrE;
|
|
1
|
+
{"version":3,"file":"evaluatePermission.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/evaluatePermission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAgB,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACpF,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAG/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,EACnE,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO;CAOlB;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,WAAW,CAAC;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,wBAAwB,CAAC;IACjG,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,mBAAmB,CAAC;IAChI,iBAAiB,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACrE;AAyDD,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,UAAkC,CAAC;AAiBnE;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,EAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1F,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiDlC"}
|
|
@@ -40,13 +40,16 @@ function formatCursor(decision, reason) {
|
|
|
40
40
|
function formatWindsurf(decision, reason) {
|
|
41
41
|
return withReason({ allowed: decision === 'allow' }, reason);
|
|
42
42
|
}
|
|
43
|
-
/** Codex
|
|
43
|
+
/** Codex PreToolUse currently supports block/deny only; allow is empty stdout. */
|
|
44
44
|
function formatCodex(decision, reason) {
|
|
45
|
+
if (decision === 'allow') {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
45
48
|
return {
|
|
46
49
|
hookSpecificOutput: {
|
|
47
50
|
hookEventName: 'PreToolUse',
|
|
48
51
|
permissionDecision: decision === 'ask' ? 'deny' : decision,
|
|
49
|
-
permissionDecisionReason: reason
|
|
52
|
+
...(reason ? { permissionDecisionReason: reason } : {}),
|
|
50
53
|
},
|
|
51
54
|
};
|
|
52
55
|
}
|
|
@@ -147,4 +150,4 @@ export async function evaluatePermission(params, deps) {
|
|
|
147
150
|
// Default: allow
|
|
148
151
|
return formatPermissionResponse('allow', platform, input);
|
|
149
152
|
}
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFT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T0FBTyxJQUFJLDBDQUEwQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVybWlzc2lvbiBldmFsdWF0aW9uIGZvciBQcmVUb29sVXNlIGhvb2tzIGFjcm9zcyBhbGwgQUkgcGxhdGZvcm1zLlxuICpcbiAqIFByb3ZpZGVzIHRoZSBgZXZhbHVhdGVfcGVybWlzc2lvbmAgTUNQLUFRTCBSRUFEIG9wZXJhdGlvbiwgZW5hYmxpbmdcbiAqIENsYXVkZSBDb2RlLCBDdXJzb3IsIEdlbWluaSBDTEksIFdpbmRzdXJmLCBhbmQgQ29kZXggdG8gdXNlXG4gKiBEb2xsaG91c2VNQ1AgYXMgdGhlaXIgcGVybWlzc2lvbiBldmFsdWF0aW9uIGJhY2tlbmQgdmlhIGhvb2tzLlxuICpcbiAqIFRocmVlLXN0YWdlIGV2YWx1YXRpb24gcGlwZWxpbmU6XG4gKiAxLiBSYXRlIGxpbWl0aW5nIOKAlCBwcmV2ZW50cyBhYnVzZVxuICogMi4gU3RhdGljIHRvb2wgY2xhc3NpZmljYXRpb24g4oCUIGJ1aWx0LWluIGFsbG93L2RlbnkgcnVsZXNcbiAqIDMuIEVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24g4oCUIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXNcbiAqXG4gKiBSZXR1cm5zIHBsYXRmb3JtLXNwZWNpZmljIHJlc3BvbnNlIGZvcm1hdHMgc28gZWFjaCBwbGF0Zm9ybSdzIGhvb2tcbiAqIHNjcmlwdCByZWNlaXZlcyB0aGUgSlNPTiBzaGFwZSBpdCBleHBlY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9SYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCwgQ2xpVG9vbFBvbGljeVJlc3VsdCB9IGZyb20gJy4vcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJy4vcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLmpzJztcblxuLyoqIEVycm9yIHRocm93biB3aGVuIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBmYWlscyBhdCBhIHNwZWNpZmljIHN0YWdlICovXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlOiAncmF0ZV9saW1pdCcgfCAnY2xhc3NpZmljYXRpb24nIHwgJ3BvbGljeScgfCAnZWxlbWVudF9mZXRjaCc7XG4gIHB1YmxpYyByZWFkb25seSB0b29sTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnLFxuICAgIHRvb2xOYW1lOiBzdHJpbmcsXG4gICAgY2F1c2U/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSA/IHsgY2F1c2UgfSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lID0gJ1Blcm1pc3Npb25FdmFsdWF0aW9uRXJyb3InO1xuICAgIHRoaXMuc3RhZ2UgPSBzdGFnZTtcbiAgICB0aGlzLnRvb2xOYW1lID0gdG9vbE5hbWU7XG4gIH1cbn1cblxuLyoqIERlcGVuZGVuY2llcyBpbmplY3RlZCBmcm9tIE1DUEFRTEhhbmRsZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyB7XG4gIHBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgY2xhc3NpZnlUb29sOiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0O1xuICBldmFsdWF0ZUNsaVRvb2xQb2xpY3k6ICh0b29sTmFtZTogc3RyaW5nLCB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKSA9PiBDbGlUb29sUG9saWN5UmVzdWx0O1xuICBnZXRBY3RpdmVFbGVtZW50czogKHNlc3Npb25JZD86IHN0cmluZykgPT4gUHJvbWlzZTxBY3RpdmVFbGVtZW50W10+O1xufVxuXG4vKiogT3B0aW9uYWwgcmVhc29uIGZpZWxkLCBvbmx5IGluY2x1ZGVkIHdoZW4gcmVhc29uIGlzIHByb3ZpZGVkICovXG5mdW5jdGlvbiB3aXRoUmVhc29uKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlYXNvbj86IHN0cmluZywga2V5ID0gJ3JlYXNvbicpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiByZWFzb24gPyB7IC4uLm9iaiwgW2tleV06IHJlYXNvbiB9IDogb2JqO1xufVxuXG4vKiogR2VtaW5pOiBtYXBzICdhc2snIHRvICdkZW55JyAobm8gaW50ZXJhY3RpdmUgc3VwcG9ydCkgKi9cbmZ1bmN0aW9uIGZvcm1hdEdlbWluaShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgZGVjaXNpb246IGRlY2lzaW9uID09PSAnYXNrJyA/ICdkZW55JyA6IGRlY2lzaW9uIH0sIHJlYXNvbik7XG59XG5cbi8qKiBDdXJzb3I6IHVzZXMgJ3Blcm1pc3Npb24nIGZpZWxkIGluc3RlYWQgb2YgJ2RlY2lzaW9uJyAqL1xuZnVuY3Rpb24gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBwZXJtaXNzaW9uOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogV2luZHN1cmY6IHVzZXMgYm9vbGVhbiAnYWxsb3dlZCcgZmllbGQgKi9cbmZ1bmN0aW9uIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBhbGxvd2VkOiBkZWNpc2lvbiA9PT0gJ2FsbG93JyB9LCByZWFzb24pO1xufVxuXG4vKiogQ29kZXg6IGV4cGxpY2l0IFByZVRvb2xVc2UgcGF5bG9hZCwgbWFwcyAnYXNrJyB0byAnZGVueScgKi9cbmZ1bmN0aW9uIGZvcm1hdENvZGV4KGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBob29rU3BlY2lmaWNPdXRwdXQ6IHtcbiAgICAgIGhvb2tFdmVudE5hbWU6ICdQcmVUb29sVXNlJyxcbiAgICAgIHBlcm1pc3Npb25EZWNpc2lvbjogZGVjaXNpb24gPT09ICdhc2snID8gJ2RlbnknIDogZGVjaXNpb24sXG4gICAgICBwZXJtaXNzaW9uRGVjaXNpb25SZWFzb246IHJlYXNvbiA/PyAnJyxcbiAgICB9LFxuICB9O1xufVxuXG4vKiogQ2xhdWRlIENvZGUgKGRlZmF1bHQpOiB1c2VzIGhvb2tTcGVjaWZpY091dHB1dC5wZXJtaXNzaW9uRGVjaXNpb24gZm9yIFByZVRvb2xVc2UgKi9cbmZ1bmN0aW9uIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIGhvb2tTcGVjaWZpY091dHB1dDogd2l0aFJlYXNvbih7XG4gICAgICBob29rRXZlbnROYW1lOiAnUHJlVG9vbFVzZScsXG4gICAgICBwZXJtaXNzaW9uRGVjaXNpb246IGRlY2lzaW9uLFxuICAgIH0sIHJlYXNvbiwgJ3Blcm1pc3Npb25EZWNpc2lvblJlYXNvbicpLFxuICB9O1xufVxuXG4vKiogUGxhdGZvcm0gZm9ybWF0dGVyIGxvb2t1cCAqL1xuY29uc3QgcGxhdGZvcm1Gb3JtYXR0ZXJzOiBSZWNvcmQ8c3RyaW5nLCAoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7XG4gIGdlbWluaTogZm9ybWF0R2VtaW5pLFxuICBjdXJzb3I6IGZvcm1hdEN1cnNvcixcbiAgd2luZHN1cmY6IGZvcm1hdFdpbmRzdXJmLFxuICBjb2RleDogZm9ybWF0Q29kZXgsXG4gIHZzY29kZTogZm9ybWF0Q2xhdWRlQ29kZSxcbiAgY2xhdWRlX2NvZGU6IGZvcm1hdENsYXVkZUNvZGUsXG59O1xuXG4vKiogS25vd24gcGxhdGZvcm0gaWRlbnRpZmllcnMgKi9cbmV4cG9ydCBjb25zdCBTVVBQT1JURURfUExBVEZPUk1TID0gT2JqZWN0LmtleXMocGxhdGZvcm1Gb3JtYXR0ZXJzKTtcblxuZnVuY3Rpb24gd2Fybk9uVW5rbm93blBsYXRmb3JtKHBsYXRmb3JtOiBzdHJpbmcpOiB2b2lkIHtcbiAgdm9pZCBpbXBvcnQoJy4uLy4uL3V0aWxzL2xvZ2dlci5qcycpXG4gICAgLnRoZW4oKHsgbG9nZ2VyIH0pID0+IHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgW2V2YWx1YXRlUGVybWlzc2lvbl0gVW5rbm93biBwbGF0Zm9ybSBcIiR7cGxhdGZvcm19XCIsIGRlZmF1bHRpbmcgdG8gY2xhdWRlX2NvZGUgZm9ybWF0LiBTdXBwb3J0ZWQ6ICR7U1VQUE9SVEVEX1BMQVRGT1JNUy5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2V2YWx1YXRlUGVybWlzc2lvbl0gRmFpbGVkIHRvIGxvYWQgbG9nZ2VyIHdoaWxlIGhhbmRsaW5nIHVua25vd24gcGxhdGZvcm0gXCIke3BsYXRmb3JtfVwiLmAsXG4gICAgICAgIGVycm9yLFxuICAgICAgKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgcGVybWlzc2lvbiBldmFsdWF0aW9uIHJlc3BvbnNlIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBob29rIHNjcmlwdHMuXG4gKiBFYWNoIHBsYXRmb3JtIGV4cGVjdHMgYSBkaWZmZXJlbnQgSlNPTiBzaGFwZSBmcm9tIGl0cyBob29rIHJlc3BvbnNlLlxuICpcbiAqIFVua25vd24gcGxhdGZvcm1zIGRlZmF1bHQgdG8gY2xhdWRlX2NvZGUgZm9ybWF0IHdpdGggYSB3YXJuaW5nIGxvZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZShcbiAgZGVjaXNpb246ICdhbGxvdycgfCAnZGVueScgfCAnYXNrJyxcbiAgcGxhdGZvcm06IHN0cmluZyxcbiAgX2lucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcmVhc29uPzogc3RyaW5nLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnZ2VtaW5pJzogcmV0dXJuIGZvcm1hdEdlbWluaShkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjdXJzb3InOiByZXR1cm4gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ3dpbmRzdXJmJzogcmV0dXJuIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2NvZGV4JzogcmV0dXJuIGZvcm1hdENvZGV4KGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2NsYXVkZV9jb2RlJzogcmV0dXJuIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEltcG9ydCBsYXppbHkgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBhdCBtb2R1bGUgbG9hZCB0aW1lXG4gICAgICB3YXJuT25Vbmtub3duUGxhdGZvcm0ocGxhdGZvcm0pO1xuICAgICAgcmV0dXJuIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb24sIHJlYXNvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBhIENMSSBwZXJtaXNzaW9uIHJlcXVlc3QgZm9yIFByZVRvb2xVc2UgaG9va3MuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRvb2wgbmFtZSwgaW5wdXQsIGFuZCB0YXJnZXQgcGxhdGZvcm1cbiAqIEBwYXJhbSBkZXBzIC0gSW5qZWN0ZWQgZGVwZW5kZW5jaWVzIGZyb20gTUNQQVFMSGFuZGxlclxuICogQHJldHVybnMgUGxhdGZvcm0tZm9ybWF0dGVkIHBlcm1pc3Npb24gZGVjaXNpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2YWx1YXRlUGVybWlzc2lvbihcbiAgcGFyYW1zOiB7IHRvb2xfbmFtZT86IHVua25vd247IGlucHV0PzogdW5rbm93bjsgcGxhdGZvcm0/OiB1bmtub3duOyBzZXNzaW9uX2lkPzogdW5rbm93biB9LFxuICBkZXBzOiBFdmFsdWF0ZVBlcm1pc3Npb25EZXBzLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCB0b29sTmFtZSA9IHR5cGVvZiBwYXJhbXMudG9vbF9uYW1lID09PSAnc3RyaW5nJyA/IHBhcmFtcy50b29sX25hbWUgOiAnJztcbiAgY29uc3QgaW5wdXRSYXcgPSBwYXJhbXMuaW5wdXQ7XG4gIGNvbnN0IGlucHV0ID0gKGlucHV0UmF3ICYmIHR5cGVvZiBpbnB1dFJhdyA9PT0gJ29iamVjdCcpXG4gICAgPyBpbnB1dFJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIDoge307XG4gIGNvbnN0IHBsYXRmb3JtID0gdHlwZW9mIHBhcmFtcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycgPyBwYXJhbXMucGxhdGZvcm0gOiAnY2xhdWRlX2NvZGUnO1xuICBjb25zdCBzZXNzaW9uSWQgPSB0eXBlb2YgcGFyYW1zLnNlc3Npb25faWQgPT09ICdzdHJpbmcnICYmIHBhcmFtcy5zZXNzaW9uX2lkLnRyaW0oKSAhPT0gJydcbiAgICA/IHBhcmFtcy5zZXNzaW9uX2lkXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgLy8gUmF0ZSBsaW1pdFxuICBjb25zdCByYXRlU3RhdHVzID0gZGVwcy5wZXJtaXNzaW9uUHJvbXB0TGltaXRlci5jaGVja0xpbWl0KCk7XG4gIGlmICghcmF0ZVN0YXR1cy5hbGxvd2VkKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgJ1JhdGUgbGltaXQgZXhjZWVkZWQnKTtcbiAgfVxuICBkZXBzLnBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyLmNvbnN1bWVUb2tlbigpO1xuXG4gIC8vIFN0YWdlIDE6IFN0YXRpYyBjbGFzc2lmaWNhdGlvblxuICBjb25zdCBjbGFzc2lmaWNhdGlvbiA9IGRlcHMuY2xhc3NpZnlUb29sKHRvb2xOYW1lLCBpbnB1dCk7XG4gIGlmIChjbGFzc2lmaWNhdGlvbi5iZWhhdmlvciA9PT0gJ2FsbG93Jykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIGlucHV0KTtcbiAgfVxuICBpZiAoY2xhc3NpZmljYXRpb24uYmVoYXZpb3IgPT09ICdkZW55Jykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsIGNsYXNzaWZpY2F0aW9uLnJlYXNvbik7XG4gIH1cblxuICAvLyBTdGFnZSAyOiBFbGVtZW50IHBvbGljeSBldmFsdWF0aW9uXG4gIGxldCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdO1xuICB0cnkge1xuICAgIGVsZW1lbnRzID0gYXdhaXQgZGVwcy5nZXRBY3RpdmVFbGVtZW50cyhzZXNzaW9uSWQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggYWN0aXZlIGVsZW1lbnRzIGZvciBwb2xpY3kgZXZhbHVhdGlvbjogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgICdlbGVtZW50X2ZldGNoJywgdG9vbE5hbWUsIGVycixcbiAgICApO1xuICB9XG4gIGNvbnN0IGRlY2lzaW9uID0gZGVwcy5ldmFsdWF0ZUNsaVRvb2xQb2xpY3kodG9vbE5hbWUsIGlucHV0LCBlbGVtZW50cyk7XG5cbiAgaWYgKGRlY2lzaW9uLmJlaGF2aW9yID09PSAnZGVueScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCBkZWNpc2lvbi5tZXNzYWdlKTtcbiAgfVxuICBpZiAoZGVjaXNpb24uYmVoYXZpb3IgPT09ICdjb25maXJtJykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FzaycsIHBsYXRmb3JtLCBpbnB1dCxcbiAgICAgIGRlY2lzaW9uLm1lc3NhZ2UgfHwgJ1JlcXVpcmVzIGNvbmZpcm1hdGlvbiBwZXIgZWxlbWVudCBwb2xpY3knKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQ6IGFsbG93XG4gIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIGlucHV0KTtcbn1cbiJdfQ==
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFT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O0lBQzdFLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDcEMsT0FBTyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFDcEQsUUFBUSxDQUFDLE9BQU8sSUFBSSwwQ0FBMEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsT0FBTyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcm1pc3Npb24gZXZhbHVhdGlvbiBmb3IgUHJlVG9vbFVzZSBob29rcyBhY3Jvc3MgYWxsIEFJIHBsYXRmb3Jtcy5cbiAqXG4gKiBQcm92aWRlcyB0aGUgYGV2YWx1YXRlX3Blcm1pc3Npb25gIE1DUC1BUUwgUkVBRCBvcGVyYXRpb24sIGVuYWJsaW5nXG4gKiBDbGF1ZGUgQ29kZSwgQ3Vyc29yLCBHZW1pbmkgQ0xJLCBXaW5kc3VyZiwgYW5kIENvZGV4IHRvIHVzZVxuICogRG9sbGhvdXNlTUNQIGFzIHRoZWlyIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBiYWNrZW5kIHZpYSBob29rcy5cbiAqXG4gKiBUaHJlZS1zdGFnZSBldmFsdWF0aW9uIHBpcGVsaW5lOlxuICogMS4gUmF0ZSBsaW1pdGluZyDigJQgcHJldmVudHMgYWJ1c2VcbiAqIDIuIFN0YXRpYyB0b29sIGNsYXNzaWZpY2F0aW9uIOKAlCBidWlsdC1pbiBhbGxvdy9kZW55IHJ1bGVzXG4gKiAzLiBFbGVtZW50IHBvbGljeSBldmFsdWF0aW9uIOKAlCBhY3RpdmUgZWxlbWVudCBnYXRla2VlcGVyIHBvbGljaWVzXG4gKlxuICogUmV0dXJucyBwbGF0Zm9ybS1zcGVjaWZpYyByZXNwb25zZSBmb3JtYXRzIHNvIGVhY2ggcGxhdGZvcm0ncyBob29rXG4gKiBzY3JpcHQgcmVjZWl2ZXMgdGhlIEpTT04gc2hhcGUgaXQgZXhwZWN0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvUmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBUb29sQ2xhc3NpZmljYXRpb25SZXN1bHQsIENsaVRvb2xQb2xpY3lSZXN1bHQgfSBmcm9tICcuL3BvbGljaWVzL1Rvb2xDbGFzc2lmaWNhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5cbi8qKiBFcnJvciB0aHJvd24gd2hlbiBwZXJtaXNzaW9uIGV2YWx1YXRpb24gZmFpbHMgYXQgYSBzcGVjaWZpYyBzdGFnZSAqL1xuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25FdmFsdWF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnO1xuICBwdWJsaWMgcmVhZG9ubHkgdG9vbE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhZ2U6ICdyYXRlX2xpbWl0JyB8ICdjbGFzc2lmaWNhdGlvbicgfCAncG9saWN5JyB8ICdlbGVtZW50X2ZldGNoJyxcbiAgICB0b29sTmFtZTogc3RyaW5nLFxuICAgIGNhdXNlPzogdW5rbm93bixcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgY2F1c2UgPyB7IGNhdXNlIH0gOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZSA9ICdQZXJtaXNzaW9uRXZhbHVhdGlvbkVycm9yJztcbiAgICB0aGlzLnN0YWdlID0gc3RhZ2U7XG4gICAgdGhpcy50b29sTmFtZSA9IHRvb2xOYW1lO1xuICB9XG59XG5cbi8qKiBEZXBlbmRlbmNpZXMgaW5qZWN0ZWQgZnJvbSBNQ1BBUUxIYW5kbGVyICovXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRlUGVybWlzc2lvbkRlcHMge1xuICBwZXJtaXNzaW9uUHJvbXB0TGltaXRlcjogUmF0ZUxpbWl0ZXI7XG4gIGNsYXNzaWZ5VG9vbDogKHRvb2xOYW1lOiBzdHJpbmcsIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdDtcbiAgZXZhbHVhdGVDbGlUb29sUG9saWN5OiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXSkgPT4gQ2xpVG9vbFBvbGljeVJlc3VsdDtcbiAgZ2V0QWN0aXZlRWxlbWVudHM6IChzZXNzaW9uSWQ/OiBzdHJpbmcpID0+IFByb21pc2U8QWN0aXZlRWxlbWVudFtdPjtcbn1cblxuLyoqIE9wdGlvbmFsIHJlYXNvbiBmaWVsZCwgb25seSBpbmNsdWRlZCB3aGVuIHJlYXNvbiBpcyBwcm92aWRlZCAqL1xuZnVuY3Rpb24gd2l0aFJlYXNvbihvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCByZWFzb24/OiBzdHJpbmcsIGtleSA9ICdyZWFzb24nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gcmVhc29uID8geyAuLi5vYmosIFtrZXldOiByZWFzb24gfSA6IG9iajtcbn1cblxuLyoqIEdlbWluaTogbWFwcyAnYXNrJyB0byAnZGVueScgKG5vIGludGVyYWN0aXZlIHN1cHBvcnQpICovXG5mdW5jdGlvbiBmb3JtYXRHZW1pbmkoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFJlYXNvbih7IGRlY2lzaW9uOiBkZWNpc2lvbiA9PT0gJ2FzaycgPyAnZGVueScgOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogQ3Vyc29yOiB1c2VzICdwZXJtaXNzaW9uJyBmaWVsZCBpbnN0ZWFkIG9mICdkZWNpc2lvbicgKi9cbmZ1bmN0aW9uIGZvcm1hdEN1cnNvcihkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgcGVybWlzc2lvbjogZGVjaXNpb24gfSwgcmVhc29uKTtcbn1cblxuLyoqIFdpbmRzdXJmOiB1c2VzIGJvb2xlYW4gJ2FsbG93ZWQnIGZpZWxkICovXG5mdW5jdGlvbiBmb3JtYXRXaW5kc3VyZihkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgYWxsb3dlZDogZGVjaXNpb24gPT09ICdhbGxvdycgfSwgcmVhc29uKTtcbn1cblxuLyoqIENvZGV4IFByZVRvb2xVc2UgY3VycmVudGx5IHN1cHBvcnRzIGJsb2NrL2Rlbnkgb25seTsgYWxsb3cgaXMgZW1wdHkgc3Rkb3V0LiAqL1xuZnVuY3Rpb24gZm9ybWF0Q29kZXgoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoZGVjaXNpb24gPT09ICdhbGxvdycpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhvb2tTcGVjaWZpY091dHB1dDoge1xuICAgICAgaG9va0V2ZW50TmFtZTogJ1ByZVRvb2xVc2UnLFxuICAgICAgcGVybWlzc2lvbkRlY2lzaW9uOiBkZWNpc2lvbiA9PT0gJ2FzaycgPyAnZGVueScgOiBkZWNpc2lvbixcbiAgICAgIC4uLihyZWFzb24gPyB7IHBlcm1pc3Npb25EZWNpc2lvblJlYXNvbjogcmVhc29uIH0gOiB7fSksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIENsYXVkZSBDb2RlIChkZWZhdWx0KTogdXNlcyBob29rU3BlY2lmaWNPdXRwdXQucGVybWlzc2lvbkRlY2lzaW9uIGZvciBQcmVUb29sVXNlICovXG5mdW5jdGlvbiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBob29rU3BlY2lmaWNPdXRwdXQ6IHdpdGhSZWFzb24oe1xuICAgICAgaG9va0V2ZW50TmFtZTogJ1ByZVRvb2xVc2UnLFxuICAgICAgcGVybWlzc2lvbkRlY2lzaW9uOiBkZWNpc2lvbixcbiAgICB9LCByZWFzb24sICdwZXJtaXNzaW9uRGVjaXNpb25SZWFzb24nKSxcbiAgfTtcbn1cblxuLyoqIFBsYXRmb3JtIGZvcm1hdHRlciBsb29rdXAgKi9cbmNvbnN0IHBsYXRmb3JtRm9ybWF0dGVyczogUmVjb3JkPHN0cmluZywgKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICBnZW1pbmk6IGZvcm1hdEdlbWluaSxcbiAgY3Vyc29yOiBmb3JtYXRDdXJzb3IsXG4gIHdpbmRzdXJmOiBmb3JtYXRXaW5kc3VyZixcbiAgY29kZXg6IGZvcm1hdENvZGV4LFxuICB2c2NvZGU6IGZvcm1hdENsYXVkZUNvZGUsXG4gIGNsYXVkZV9jb2RlOiBmb3JtYXRDbGF1ZGVDb2RlLFxufTtcblxuLyoqIEtub3duIHBsYXRmb3JtIGlkZW50aWZpZXJzICovXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX1BMQVRGT1JNUyA9IE9iamVjdC5rZXlzKHBsYXRmb3JtRm9ybWF0dGVycyk7XG5cbmZ1bmN0aW9uIHdhcm5PblVua25vd25QbGF0Zm9ybShwbGF0Zm9ybTogc3RyaW5nKTogdm9pZCB7XG4gIHZvaWQgaW1wb3J0KCcuLi8uLi91dGlscy9sb2dnZXIuanMnKVxuICAgIC50aGVuKCh7IGxvZ2dlciB9KSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYFtldmFsdWF0ZVBlcm1pc3Npb25dIFVua25vd24gcGxhdGZvcm0gXCIke3BsYXRmb3JtfVwiLCBkZWZhdWx0aW5nIHRvIGNsYXVkZV9jb2RlIGZvcm1hdC4gU3VwcG9ydGVkOiAke1NVUFBPUlRFRF9QTEFURk9STVMuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtldmFsdWF0ZVBlcm1pc3Npb25dIEZhaWxlZCB0byBsb2FkIGxvZ2dlciB3aGlsZSBoYW5kbGluZyB1bmtub3duIHBsYXRmb3JtIFwiJHtwbGF0Zm9ybX1cIi5gLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRm9ybWF0IHBlcm1pc3Npb24gZXZhbHVhdGlvbiByZXNwb25zZSBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgaG9vayBzY3JpcHRzLlxuICogRWFjaCBwbGF0Zm9ybSBleHBlY3RzIGEgZGlmZmVyZW50IEpTT04gc2hhcGUgZnJvbSBpdHMgaG9vayByZXNwb25zZS5cbiAqXG4gKiBVbmtub3duIHBsYXRmb3JtcyBkZWZhdWx0IHRvIGNsYXVkZV9jb2RlIGZvcm1hdCB3aXRoIGEgd2FybmluZyBsb2cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoXG4gIGRlY2lzaW9uOiAnYWxsb3cnIHwgJ2RlbnknIHwgJ2FzaycsXG4gIHBsYXRmb3JtOiBzdHJpbmcsXG4gIF9pbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHJlYXNvbj86IHN0cmluZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgIGNhc2UgJ2dlbWluaSc6IHJldHVybiBmb3JtYXRHZW1pbmkoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY3Vyc29yJzogcmV0dXJuIGZvcm1hdEN1cnNvcihkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICd3aW5kc3VyZic6IHJldHVybiBmb3JtYXRXaW5kc3VyZihkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjb2RleCc6IHJldHVybiBmb3JtYXRDb2RleChkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjbGF1ZGVfY29kZSc6IHJldHVybiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBJbXBvcnQgbGF6aWx5IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgYXQgbW9kdWxlIGxvYWQgdGltZVxuICAgICAgd2Fybk9uVW5rbm93blBsYXRmb3JtKHBsYXRmb3JtKTtcbiAgICAgIHJldHVybiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uLCByZWFzb24pO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBDTEkgcGVybWlzc2lvbiByZXF1ZXN0IGZvciBQcmVUb29sVXNlIGhvb2tzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUb29sIG5hbWUsIGlucHV0LCBhbmQgdGFyZ2V0IHBsYXRmb3JtXG4gKiBAcGFyYW0gZGVwcyAtIEluamVjdGVkIGRlcGVuZGVuY2llcyBmcm9tIE1DUEFRTEhhbmRsZXJcbiAqIEByZXR1cm5zIFBsYXRmb3JtLWZvcm1hdHRlZCBwZXJtaXNzaW9uIGRlY2lzaW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsdWF0ZVBlcm1pc3Npb24oXG4gIHBhcmFtczogeyB0b29sX25hbWU/OiB1bmtub3duOyBpbnB1dD86IHVua25vd247IHBsYXRmb3JtPzogdW5rbm93bjsgc2Vzc2lvbl9pZD86IHVua25vd24gfSxcbiAgZGVwczogRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgdG9vbE5hbWUgPSB0eXBlb2YgcGFyYW1zLnRvb2xfbmFtZSA9PT0gJ3N0cmluZycgPyBwYXJhbXMudG9vbF9uYW1lIDogJyc7XG4gIGNvbnN0IGlucHV0UmF3ID0gcGFyYW1zLmlucHV0O1xuICBjb25zdCBpbnB1dCA9IChpbnB1dFJhdyAmJiB0eXBlb2YgaW5wdXRSYXcgPT09ICdvYmplY3QnKVxuICAgID8gaW5wdXRSYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICA6IHt9O1xuICBjb25zdCBwbGF0Zm9ybSA9IHR5cGVvZiBwYXJhbXMucGxhdGZvcm0gPT09ICdzdHJpbmcnID8gcGFyYW1zLnBsYXRmb3JtIDogJ2NsYXVkZV9jb2RlJztcbiAgY29uc3Qgc2Vzc2lvbklkID0gdHlwZW9mIHBhcmFtcy5zZXNzaW9uX2lkID09PSAnc3RyaW5nJyAmJiBwYXJhbXMuc2Vzc2lvbl9pZC50cmltKCkgIT09ICcnXG4gICAgPyBwYXJhbXMuc2Vzc2lvbl9pZFxuICAgIDogdW5kZWZpbmVkO1xuXG4gIC8vIFJhdGUgbGltaXRcbiAgY29uc3QgcmF0ZVN0YXR1cyA9IGRlcHMucGVybWlzc2lvblByb21wdExpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuICBpZiAoIXJhdGVTdGF0dXMuYWxsb3dlZCkge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyk7XG4gIH1cbiAgZGVwcy5wZXJtaXNzaW9uUHJvbXB0TGltaXRlci5jb25zdW1lVG9rZW4oKTtcblxuICAvLyBTdGFnZSAxOiBTdGF0aWMgY2xhc3NpZmljYXRpb25cbiAgY29uc3QgY2xhc3NpZmljYXRpb24gPSBkZXBzLmNsYXNzaWZ5VG9vbCh0b29sTmFtZSwgaW5wdXQpO1xuICBpZiAoY2xhc3NpZmljYXRpb24uYmVoYXZpb3IgPT09ICdhbGxvdycpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG4gIH1cbiAgaWYgKGNsYXNzaWZpY2F0aW9uLmJlaGF2aW9yID09PSAnZGVueScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCBjbGFzc2lmaWNhdGlvbi5yZWFzb24pO1xuICB9XG5cbiAgLy8gU3RhZ2UgMjogRWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvblxuICBsZXQgZWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXTtcbiAgdHJ5IHtcbiAgICBlbGVtZW50cyA9IGF3YWl0IGRlcHMuZ2V0QWN0aXZlRWxlbWVudHMoc2Vzc2lvbklkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IFBlcm1pc3Npb25FdmFsdWF0aW9uRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGZldGNoIGFjdGl2ZSBlbGVtZW50cyBmb3IgcG9saWN5IGV2YWx1YXRpb246ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICAnZWxlbWVudF9mZXRjaCcsIHRvb2xOYW1lLCBlcnIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBkZWNpc2lvbiA9IGRlcHMuZXZhbHVhdGVDbGlUb29sUG9saWN5KHRvb2xOYW1lLCBpbnB1dCwgZWxlbWVudHMpO1xuXG4gIGlmIChkZWNpc2lvbi5iZWhhdmlvciA9PT0gJ2RlbnknKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgZGVjaXNpb24ubWVzc2FnZSk7XG4gIH1cbiAgaWYgKGRlY2lzaW9uLmJlaGF2aW9yID09PSAnY29uZmlybScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhc2snLCBwbGF0Zm9ybSwgaW5wdXQsXG4gICAgICBkZWNpc2lvbi5tZXNzYWdlIHx8ICdSZXF1aXJlcyBjb25maXJtYXRpb24gcGVyIGVsZW1lbnQgcG9saWN5Jyk7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBhbGxvd1xuICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG59XG4iXX0=
|
|
@@ -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 PermissionHookDiagnosticRecord, type PermissionHookHealthSummary, type PermissionHookStartupRepairSummary } from '../utils/permissionHooks.js';
|
|
13
14
|
export interface BuildInfo {
|
|
14
15
|
sessionId: string;
|
|
15
16
|
runtimeSessionId: string;
|
|
@@ -45,10 +46,14 @@ export interface BuildInfo {
|
|
|
45
46
|
mcpConnection: boolean;
|
|
46
47
|
};
|
|
47
48
|
permissionHooks?: {
|
|
49
|
+
health: PermissionHookHealthSummary;
|
|
48
50
|
installedHosts: string[];
|
|
49
51
|
currentHosts: string[];
|
|
50
52
|
repairedHosts: string[];
|
|
51
53
|
needsRepairHosts: string[];
|
|
54
|
+
diagnosticsPath: string;
|
|
55
|
+
lastDiagnostic: PermissionHookDiagnosticRecord | null;
|
|
56
|
+
lastStartupRepair: PermissionHookStartupRepairSummary | null;
|
|
52
57
|
};
|
|
53
58
|
/** Issue #706: Startup timing and readiness status. */
|
|
54
59
|
startup?: {
|
|
@@ -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,EAEL,KAAK,8BAA8B,EAEnC,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,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,8BAA8B,GAAG,IAAI,CAAC;QACtD,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;IAuG/C;;;;OAIG;IACI,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAoJ/C;;;OAGG;YACW,UAAU;IAcxB;;;OAGG;YACW,aAAa;IA+B3B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;CAIrB"}
|
|
@@ -12,7 +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 } from '../utils/permissionHooks.js';
|
|
15
|
+
import { getPermissionHookAuditSummary, summarizePermissionHookHealth, } from '../utils/permissionHooks.js';
|
|
16
16
|
export class BuildInfoService {
|
|
17
17
|
startTime;
|
|
18
18
|
fileOperations;
|
|
@@ -62,17 +62,27 @@ export class BuildInfoService {
|
|
|
62
62
|
: { isDocker: false, info: undefined };
|
|
63
63
|
const permissionHookInfo = results[2].status === 'fulfilled'
|
|
64
64
|
? results[2].value
|
|
65
|
-
: {
|
|
65
|
+
: {
|
|
66
|
+
installedHosts: [],
|
|
67
|
+
currentHosts: [],
|
|
68
|
+
repairedHosts: [],
|
|
69
|
+
needsRepairHosts: [],
|
|
70
|
+
diagnosticsPath: '',
|
|
71
|
+
lastDiagnostic: null,
|
|
72
|
+
lastStartupRepair: null,
|
|
73
|
+
};
|
|
74
|
+
const permissionHookHealth = summarizePermissionHookHealth(permissionHookInfo);
|
|
75
|
+
const formatSettledReason = (reason) => (reason instanceof Error ? `${reason.name}: ${reason.message}` : String(reason));
|
|
66
76
|
// Log any failures for diagnostics
|
|
67
77
|
const failures = [];
|
|
68
78
|
if (results[0].status === 'rejected') {
|
|
69
|
-
failures.push(`git info: ${results[0].reason}`);
|
|
79
|
+
failures.push(`git info: ${formatSettledReason(results[0].reason)}`);
|
|
70
80
|
}
|
|
71
81
|
if (results[1].status === 'rejected') {
|
|
72
|
-
failures.push(`docker info: ${results[1].reason}`);
|
|
82
|
+
failures.push(`docker info: ${formatSettledReason(results[1].reason)}`);
|
|
73
83
|
}
|
|
74
84
|
if (results[2].status === 'rejected') {
|
|
75
|
-
failures.push(`permission hook audit: ${results[2].reason}`);
|
|
85
|
+
failures.push(`permission hook audit: ${formatSettledReason(results[2].reason)}`);
|
|
76
86
|
}
|
|
77
87
|
if (failures.length > 0) {
|
|
78
88
|
logger.debug(`Build info collection had ${failures.length} failure(s): ${failures.join('; ')}`);
|
|
@@ -119,7 +129,10 @@ export class BuildInfoService {
|
|
|
119
129
|
uptime: Date.now() - this.startTime.getTime(),
|
|
120
130
|
mcpConnection: true // We're connected if this method is being called via MCP
|
|
121
131
|
},
|
|
122
|
-
permissionHooks:
|
|
132
|
+
permissionHooks: {
|
|
133
|
+
...permissionHookInfo,
|
|
134
|
+
health: permissionHookHealth,
|
|
135
|
+
},
|
|
123
136
|
startup: startupInfo,
|
|
124
137
|
};
|
|
125
138
|
}
|
|
@@ -194,7 +207,30 @@ export class BuildInfoService {
|
|
|
194
207
|
const needsRepairHosts = info.permissionHooks.needsRepairHosts.length > 0
|
|
195
208
|
? info.permissionHooks.needsRepairHosts.join(', ')
|
|
196
209
|
: 'None';
|
|
197
|
-
|
|
210
|
+
const lastStartupRepair = info.permissionHooks.lastStartupRepair;
|
|
211
|
+
const startupRepairIssues = lastStartupRepair
|
|
212
|
+
? lastStartupRepair.hostResults
|
|
213
|
+
.filter((result) => result.outcome === 'needs_repair' || result.outcome === 'error')
|
|
214
|
+
.map((result) => result.repairError ? `${result.host} (${result.repairError})` : result.host)
|
|
215
|
+
.join('; ')
|
|
216
|
+
: '';
|
|
217
|
+
lines.push('', '## 🔐 Permission Hooks', `- **Health**: ${info.permissionHooks.health.status.toUpperCase()} — ${info.permissionHooks.health.message}`, `- **Installed Hosts**: ${installedHosts}`, `- **Current Assets**: ${currentHosts}`, `- **Needs Repair**: ${needsRepairHosts}`);
|
|
218
|
+
if (info.permissionHooks.diagnosticsPath) {
|
|
219
|
+
lines.push(`- **Diagnostics Log**: ${info.permissionHooks.diagnosticsPath}`);
|
|
220
|
+
}
|
|
221
|
+
if (lastStartupRepair) {
|
|
222
|
+
lines.push(`- **Last Startup Audit**: ${lastStartupRepair.completedAt} (${lastStartupRepair.durationMs}ms)`, `- **Startup Repairs Applied**: ${lastStartupRepair.repairedCount}`, `- **Startup Repair Issues**: ${startupRepairIssues || 'None'}`);
|
|
223
|
+
}
|
|
224
|
+
if (info.permissionHooks.lastDiagnostic) {
|
|
225
|
+
const lastDiagnostic = info.permissionHooks.lastDiagnostic;
|
|
226
|
+
const diagnosticOutcome = lastDiagnostic.outcome
|
|
227
|
+
? `${lastDiagnostic.event} / ${lastDiagnostic.outcome}`
|
|
228
|
+
: lastDiagnostic.event;
|
|
229
|
+
lines.push(`- **Last Diagnostic Event**: ${lastDiagnostic.timestamp} (${diagnosticOutcome})`, `- **Last Diagnostic Stage**: ${lastDiagnostic.stage}`, `- **Last Diagnostic Input Bytes**: ${lastDiagnostic.rawInputLength ?? 0}`, `- **Last Diagnostic Normalized Bytes**: ${lastDiagnostic.normalizedResponseLength ?? 0}`, `- **Last Diagnostic Emitted Bytes**: ${lastDiagnostic.emittedResponseLength ?? 0}`);
|
|
230
|
+
if (lastDiagnostic.reason) {
|
|
231
|
+
lines.push(`- **Last Diagnostic Reason**: ${lastDiagnostic.reason}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
198
234
|
}
|
|
199
235
|
// Issue #706: Startup timing
|
|
200
236
|
if (info.startup) {
|
|
@@ -291,4 +327,4 @@ export class BuildInfoService {
|
|
|
291
327
|
return `${mb.toFixed(1)} MB`;
|
|
292
328
|
}
|
|
293
329
|
}
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVpbGRJbmZvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFtRDVFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDVixTQUFTLENBQU87SUFDaEIsY0FBYyxDQUF5QjtJQUN4RCxxRUFBcUU7SUFDN0QsWUFBWSxHQUF3QixJQUFJLENBQUM7SUFDakQsMkRBQTJEO0lBQ25ELG9CQUFvQixHQUEyQixJQUFJLENBQUM7SUFFNUQsWUFBWSxjQUFzQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxLQUFtQjtRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCx1QkFBdUIsQ0FBQyxPQUFzQjtRQUM1QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLFlBQVk7UUFDdkIsa0ZBQWtGO1FBQ2xGLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsNkJBQTZCLEVBQUU7U0FDaEMsQ0FBQyxDQUFDO1FBRUgseURBQXlEO1FBQ3pELE1BQU0sV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFFckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXO1lBQy9DLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUNsQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUU3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVc7WUFDbEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ2xCLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXO1lBQzFELENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUNsQixDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUV0RixtQ0FBbUM7UUFDbkMsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBQzlCLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsUUFBUSxDQUFDLE1BQU0sZ0JBQWdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFFRCw0REFBNEQ7UUFDNUQsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDO1FBRXZDLDJDQUEyQztRQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN4RixNQUFNLFdBQVcsR0FBeUI7WUFDeEMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWM7WUFDbkQscUJBQXFCLEVBQUUsZ0JBQWdCO1lBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7WUFDL0MsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFO1NBQ2hELENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBRWpELE9BQU87WUFDTCxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVM7WUFDcEMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLGdCQUFnQjtZQUNsRCxhQUFhLEVBQUUsZUFBZSxDQUFDLE1BQU07WUFDckMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsS0FBSyxFQUFFO2dCQUNMLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN6QixTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU07YUFDMUI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUM1QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFO2FBQ25DO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7Z0JBQzdCLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZO2dCQUNuRCxhQUFhLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssYUFBYTtnQkFDckQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxHQUFHO2dCQUNsRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7Z0JBQzdCLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSTthQUM1QjtZQUNELE1BQU0sRUFBRTtnQkFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzdDLGFBQWEsRUFBRSxJQUFJLENBQUMseURBQXlEO2FBQzlFO1lBQ0QsZUFBZSxFQUFFLGtCQUFrQjtZQUNuQyxPQUFPLEVBQUUsV0FBVztTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsSUFBZTtRQUNwQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFFM0IsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRXZDLGVBQWU7UUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFZixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSztZQUN0RCxDQUFDLENBQUMsc0JBQXNCO1lBQ3hCLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztRQUNyQyxNQUFNLFlBQVksR0FBRztZQUNuQixlQUFlO1lBQ2YscUJBQXFCLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDckMsMEJBQTBCLG1CQUFtQixFQUFFO1NBQ2hELENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0MsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUE2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLGFBQWE7UUFDYixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVmLGVBQWU7UUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RCxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkQsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUUsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNySixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsbUJBQW1CO1FBQ25CLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZJLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDaEYsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsY0FBYztRQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUVwRyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDbkUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDWCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDL0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDWCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxNQUFNLENBQUM7WUFFWCxLQUFLLENBQUMsSUFBSSxDQUNSLEVBQUUsRUFDRix3QkFBd0IsRUFDeEIsMEJBQTBCLGNBQWMsRUFBRSxFQUMxQyx5QkFBeUIsWUFBWSxFQUFFLEVBQ3ZDLHVCQUF1QixnQkFBZ0IsRUFBRSxDQUMxQyxDQUFDO1FBQ0osQ0FBQztRQUVELDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUN2RyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO2dCQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixNQUFNLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztnQkFDOUQsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7Z0JBQzFELEtBQUssQ0FBQyxJQUFJLENBQUMsd0JBQXdCLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLE1BQU0sQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzVCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNsQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQzt3QkFDckQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFVBQVUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUNsRSxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLFVBQVU7UUFDdEIsSUFBSSxDQUFDO1lBQ0gsNkVBQTZFO1lBQzdFLDRGQUE0RjtZQUM1RixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEcsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXZHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLCtDQUErQztZQUMvQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGFBQWE7UUFDekIsSUFBSSxDQUFDO1lBQ0gsOEZBQThGO1lBQzlGLGlGQUFpRjtZQUNqRixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFO2dCQUN6RSxNQUFNLEVBQUUsZ0NBQWdDO2FBQ3pDLENBQUMsQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUxRixJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLDBCQUEwQjtnQkFDMUIsTUFBTSxXQUFXLEdBQUcsYUFBYTtxQkFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0QyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ1gsR0FBRyxFQUFFO29CQUNOLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFckIsT0FBTztvQkFDTCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtpQkFDekUsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx1Q0FBdUM7WUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxPQUFlO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV0QyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxJQUFJLEdBQUcsQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU8sR0FBRyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDM0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRTNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWE7UUFDaEMsTUFBTSxFQUFFLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDL0IsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJ1aWxkSW5mb1NlcnZpY2UgLSBQcm92aWRlcyBidWlsZCBhbmQgcnVudGltZSBpbmZvcm1hdGlvblxuICogU2VwYXJhdGVkIGZyb20gbWFpbiBpbmRleC50cyB0byBhdm9pZCBtYWtpbmcgdGhhdCBmaWxlIGxhcmdlclxuICogXG4gKiBTRUNVUklUWSBGSVggKFBSICM2MTQpOlxuICogMS4gRE1DUC1TRUMtMDA0OiBGQUxTRSBQT1NJVElWRSBTVVBQUkVTU0lPTiAtIE5vIHVzZXIgaW5wdXQgVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZFxuICogICAgVGhpcyBzZXJ2aWNlIG9ubHkgcHJvY2Vzc2VzIHN5c3RlbSBpbmZvcm1hdGlvbiAoZ2l0LCBwYWNrYWdlLmpzb24sIGVudmlyb25tZW50IHZhcmlhYmxlcylcbiAqICAgIFRoZSBNQ1AgdG9vbCAnZ2V0X2J1aWxkX2luZm8nIHRha2VzIE5PIHBhcmFtZXRlcnMgKGVtcHR5IGlucHV0U2NoZW1hKVxuICogICAgTm8gdXNlci1wcm92aWRlZCBkYXRhIGZsb3dzIHRocm91Z2ggdGhpcyBzZXJ2aWNlIHRoYXQgcmVxdWlyZXMgVW5pY29kZSBub3JtYWxpemF0aW9uXG4gKi9cblxuaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBJRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1ZFUlNJT04sIEJVSUxEX1RJTUVTVEFNUCwgQlVJTERfVFlQRSB9IGZyb20gJy4uL2dlbmVyYXRlZC92ZXJzaW9uLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhcnR1cFRpbWVyLCBTdGFydHVwUmVwb3J0IH0gZnJvbSAnLi4vdGVsZW1ldHJ5L1N0YXJ0dXBUaW1lci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlU2Vzc2lvbklkZW50aXR5IH0gZnJvbSAnLi9zZXNzaW9uSWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkgfSBmcm9tICcuLi91dGlscy9wZXJtaXNzaW9uSG9va3MuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkSW5mbyB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBydW50aW1lU2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNlc3Npb25Tb3VyY2U6ICdlbnYnIHwgJ2Rlcml2ZWQnO1xuICBwYWNrYWdlOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgYnVpbGQ6IHtcbiAgICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gICAgdHlwZTogJ2dpdCcgfCAnbnBtJyB8ICd1bmtub3duJztcbiAgICBnaXRDb21taXQ/OiBzdHJpbmc7XG4gICAgZ2l0QnJhbmNoPzogc3RyaW5nO1xuICB9O1xuICBydW50aW1lOiB7XG4gICAgbm9kZVZlcnNpb246IHN0cmluZztcbiAgICBwbGF0Zm9ybTogc3RyaW5nO1xuICAgIGFyY2g6IHN0cmluZztcbiAgICB1cHRpbWU6IG51bWJlcjtcbiAgICBtZW1vcnlVc2FnZTogTm9kZUpTLk1lbW9yeVVzYWdlO1xuICB9O1xuICBlbnZpcm9ubWVudDoge1xuICAgIG5vZGVFbnY/OiBzdHJpbmc7XG4gICAgaXNQcm9kdWN0aW9uOiBib29sZWFuO1xuICAgIGlzRGV2ZWxvcG1lbnQ6IGJvb2xlYW47XG4gICAgaXNEZWJ1ZzogYm9vbGVhbjtcbiAgICBpc0RvY2tlcjogYm9vbGVhbjtcbiAgICBkb2NrZXJJbmZvPzogc3RyaW5nO1xuICB9O1xuICBzZXJ2ZXI6IHtcbiAgICBzdGFydFRpbWU6IERhdGU7XG4gICAgdXB0aW1lOiBudW1iZXI7XG4gICAgbWNwQ29ubmVjdGlvbjogYm9vbGVhbjtcbiAgfTtcbiAgcGVybWlzc2lvbkhvb2tzPzoge1xuICAgIGluc3RhbGxlZEhvc3RzOiBzdHJpbmdbXTtcbiAgICBjdXJyZW50SG9zdHM6IHN0cmluZ1tdO1xuICAgIHJlcGFpcmVkSG9zdHM6IHN0cmluZ1tdO1xuICAgIG5lZWRzUmVwYWlySG9zdHM6IHN0cmluZ1tdO1xuICB9O1xuICAvKiogSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgYW5kIHJlYWRpbmVzcyBzdGF0dXMuICovXG4gIHN0YXJ0dXA/OiB7XG4gICAgc3RhdHVzOiAncmVhZHknIHwgJ2luaXRpYWxpemluZyc7XG4gICAgZGVmZXJyZWRTZXR1cENvbXBsZXRlOiBib29sZWFuO1xuICAgIHVwdGltZU1zOiBudW1iZXI7XG4gICAgc3RhcnR1cFRpbWluZ01zPzogU3RhcnR1cFJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSW5mb1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0VGltZTogRGF0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BlcmF0aW9uczogSUZpbGVPcGVyYXRpb25zU2VydmljZTtcbiAgLyoqIElzc3VlICM3MDY6IE9wdGlvbmFsIHN0YXJ0dXAgdGltZXIgZm9yIHRpbWluZyBpbnN0cnVtZW50YXRpb24uICovXG4gIHByaXZhdGUgc3RhcnR1cFRpbWVyOiBTdGFydHVwVGltZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIElzc3VlICM3MDY6IENhbGxiYWNrIHRvIGNoZWNrIGRlZmVycmVkIHNldHVwIHN0YXR1cy4gKi9cbiAgcHJpdmF0ZSBkZWZlcnJlZFNldHVwQ2hlY2tlcjogKCgpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UpIHtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5maWxlT3BlcmF0aW9ucyA9IGZpbGVPcGVyYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gc3RhcnR1cCBpbnN0cnVtZW50YXRpb24gYWZ0ZXIgREkgaXMgcmVhZHkuXG4gICAqIENhbGxlZCBmcm9tIENvbnRhaW5lciB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxuICAgKi9cbiAgc2V0U3RhcnR1cFRpbWVyKHRpbWVyOiBTdGFydHVwVGltZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lciA9IHRpbWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gZGVmZXJyZWQgc2V0dXAgc3RhdHVzIGNoZWNrZXIuXG4gICAqL1xuICBzZXREZWZlcnJlZFNldHVwQ2hlY2tlcihjaGVja2VyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlciA9IGNoZWNrZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbXByZWhlbnNpdmUgYnVpbGQgaW5mb3JtYXRpb25cbiAgICogU0VDVVJJVFkgTk9URTogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIG9ubHkgc3lzdGVtLWdlbmVyYXRlZCBkYXRhXG4gICAqIE5vIHVzZXIgaW5wdXQgaXMgaW52b2x2ZWQgLSBhbGwgZGF0YSBjb21lcyBmcm9tIGZpbGVzeXN0ZW0sIGdpdCwgYW5kIE5vZGUuanMgcHJvY2Vzc1xuICAgKlxuICAgKiBVc2VzIFByb21pc2UuYWxsU2V0dGxlZCB0byBjb2xsZWN0IHBhcnRpYWwgcmVzdWx0cyBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsLFxuICAgKiBwcm92aWRpbmcgbWF4aW11bSBpbmZvcm1hdGlvbiBhdmFpbGFiaWxpdHkgd2l0aCBncmFjZWZ1bCBkZWdyYWRhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCdWlsZEluZm8oKTogUHJvbWlzZTxCdWlsZEluZm8+IHtcbiAgICAvLyBVc2UgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGNvbGxlY3QgYWxsIGF2YWlsYWJsZSBpbmZvLCBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICB0aGlzLmdldEdpdEluZm8oKSxcbiAgICAgIHRoaXMuZ2V0RG9ja2VySW5mbygpLFxuICAgICAgZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkoKSxcbiAgICBdKTtcblxuICAgIC8vIFBhY2thZ2UgaW5mbyBjb21lcyBmcm9tIGJ1aWxkLXRpbWUgZ2VuZXJhdGVkIGNvbnN0YW50c1xuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiBQQUNLQUdFX05BTUUsIHZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTiB9O1xuXG4gICAgY29uc3QgZ2l0SW5mbyA9IHJlc3VsdHNbMF0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzBdLnZhbHVlXG4gICAgICA6IHsgY29tbWl0OiB1bmRlZmluZWQsIGJyYW5jaDogdW5kZWZpbmVkIH07XG5cbiAgICBjb25zdCBkb2NrZXJJbmZvID0gcmVzdWx0c1sxXS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnXG4gICAgICA/IHJlc3VsdHNbMV0udmFsdWVcbiAgICAgIDogeyBpc0RvY2tlcjogZmFsc2UsIGluZm86IHVuZGVmaW5lZCB9O1xuICAgIGNvbnN0IHBlcm1pc3Npb25Ib29rSW5mbyA9IHJlc3VsdHNbMl0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzJdLnZhbHVlXG4gICAgICA6IHsgaW5zdGFsbGVkSG9zdHM6IFtdLCBjdXJyZW50SG9zdHM6IFtdLCByZXBhaXJlZEhvc3RzOiBbXSwgbmVlZHNSZXBhaXJIb3N0czogW10gfTtcblxuICAgIC8vIExvZyBhbnkgZmFpbHVyZXMgZm9yIGRpYWdub3N0aWNzXG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHJlc3VsdHNbMF0uc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICBmYWlsdXJlcy5wdXNoKGBnaXQgaW5mbzogJHtyZXN1bHRzWzBdLnJlYXNvbn1gKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdHNbMV0uc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICBmYWlsdXJlcy5wdXNoKGBkb2NrZXIgaW5mbzogJHtyZXN1bHRzWzFdLnJlYXNvbn1gKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdHNbMl0uc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICBmYWlsdXJlcy5wdXNoKGBwZXJtaXNzaW9uIGhvb2sgYXVkaXQ6ICR7cmVzdWx0c1syXS5yZWFzb259YCk7XG4gICAgfVxuXG4gICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQnVpbGQgaW5mbyBjb2xsZWN0aW9uIGhhZCAke2ZhaWx1cmVzLmxlbmd0aH0gZmFpbHVyZShzKTogJHtmYWlsdXJlcy5qb2luKCc7ICcpfWApO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHRpbWVzdGFtcCBjb21lcyBmcm9tIGJ1aWxkLXRpbWUgZ2VuZXJhdGVkIGNvbnN0YW50c1xuICAgIGNvbnN0IGJ1aWxkVGltZXN0YW1wID0gQlVJTERfVElNRVNUQU1QO1xuXG4gICAgLy8gSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgYW5kIHJlYWRpbmVzc1xuICAgIGNvbnN0IGRlZmVycmVkQ29tcGxldGUgPSB0aGlzLmRlZmVycmVkU2V0dXBDaGVja2VyID8gdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlcigpIDogdHJ1ZTtcbiAgICBjb25zdCBzdGFydHVwSW5mbzogQnVpbGRJbmZvWydzdGFydHVwJ10gPSB7XG4gICAgICBzdGF0dXM6IGRlZmVycmVkQ29tcGxldGUgPyAncmVhZHknIDogJ2luaXRpYWxpemluZycsXG4gICAgICBkZWZlcnJlZFNldHVwQ29tcGxldGU6IGRlZmVycmVkQ29tcGxldGUsXG4gICAgICB1cHRpbWVNczogRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lLmdldFRpbWUoKSxcbiAgICAgIHN0YXJ0dXBUaW1pbmdNczogdGhpcy5zdGFydHVwVGltZXI/LmdldFJlcG9ydCgpLFxuICAgIH07XG4gICAgY29uc3Qgc2Vzc2lvbklkZW50aXR5ID0gcmVzb2x2ZVNlc3Npb25JZGVudGl0eSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkZW50aXR5LnNlc3Npb25JZCxcbiAgICAgIHJ1bnRpbWVTZXNzaW9uSWQ6IHNlc3Npb25JZGVudGl0eS5ydW50aW1lU2Vzc2lvbklkLFxuICAgICAgc2Vzc2lvblNvdXJjZTogc2Vzc2lvbklkZW50aXR5LnNvdXJjZSxcbiAgICAgIHBhY2thZ2U6IHBhY2thZ2VJbmZvLFxuICAgICAgYnVpbGQ6IHtcbiAgICAgICAgdGltZXN0YW1wOiBidWlsZFRpbWVzdGFtcCxcbiAgICAgICAgdHlwZTogQlVJTERfVFlQRSxcbiAgICAgICAgZ2l0Q29tbWl0OiBnaXRJbmZvLmNvbW1pdCxcbiAgICAgICAgZ2l0QnJhbmNoOiBnaXRJbmZvLmJyYW5jaCxcbiAgICAgIH0sXG4gICAgICBydW50aW1lOiB7XG4gICAgICAgIG5vZGVWZXJzaW9uOiBwcm9jZXNzLnZlcnNpb24sXG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBhcmNoOiBwcm9jZXNzLmFyY2gsXG4gICAgICAgIHVwdGltZTogcHJvY2Vzcy51cHRpbWUoKSxcbiAgICAgICAgbWVtb3J5VXNhZ2U6IHByb2Nlc3MubWVtb3J5VXNhZ2UoKVxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIG5vZGVFbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuICAgICAgICBpc1Byb2R1Y3Rpb246IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicsXG4gICAgICAgIGlzRGV2ZWxvcG1lbnQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnLFxuICAgICAgICBpc0RlYnVnOiBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJ3RydWUnIHx8IHByb2Nlc3MuZW52LkRFQlVHID09PSAnMScsXG4gICAgICAgIGlzRG9ja2VyOiBkb2NrZXJJbmZvLmlzRG9ja2VyLFxuICAgICAgICBkb2NrZXJJbmZvOiBkb2NrZXJJbmZvLmluZm9cbiAgICAgIH0sXG4gICAgICBzZXJ2ZXI6IHtcbiAgICAgICAgc3RhcnRUaW1lOiB0aGlzLnN0YXJ0VGltZSxcbiAgICAgICAgdXB0aW1lOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpLFxuICAgICAgICBtY3BDb25uZWN0aW9uOiB0cnVlIC8vIFdlJ3JlIGNvbm5lY3RlZCBpZiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgdmlhIE1DUFxuICAgICAgfSxcbiAgICAgIHBlcm1pc3Npb25Ib29rczogcGVybWlzc2lvbkhvb2tJbmZvLFxuICAgICAgc3RhcnR1cDogc3RhcnR1cEluZm8sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYnVpbGQgaW5mbyBhcyB1c2VyLWZyaWVuZGx5IG1hcmtkb3duXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE9ubHkgZm9ybWF0cyBzeXN0ZW0tZ2VuZXJhdGVkIGRhdGEgLSBubyB1c2VyIGlucHV0IHByb2Nlc3NpbmdcbiAgICogQWxsIGlucHV0IGRhdGEgY29tZXMgZnJvbSBnZXRCdWlsZEluZm8oKSB3aGljaCBvbmx5IHJlYWRzIHN5c3RlbSBpbmZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIGZvcm1hdEJ1aWxkSW5mbyhpbmZvOiBCdWlsZEluZm8pOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIFxuICAgIGxpbmVzLnB1c2goJyMg8J+UpyBCdWlsZCBJbmZvcm1hdGlvblxcbicpO1xuICAgIFxuICAgIC8vIFBhY2thZ2UgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfk6YgUGFja2FnZScpO1xuICAgIGxpbmVzLnB1c2goYC0gKipOYW1lKio6ICR7aW5mby5wYWNrYWdlLm5hbWV9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKlZlcnNpb24qKjogJHtpbmZvLnBhY2thZ2UudmVyc2lvbn1gKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcblxuICAgIGNvbnN0IGlkZW50aXR5U291cmNlTGFiZWwgPSBpbmZvLnNlc3Npb25Tb3VyY2UgPT09ICdlbnYnXG4gICAgICA/ICdFeHBsaWNpdCBlbnZpcm9ubWVudCdcbiAgICAgIDogJ0Rlcml2ZWQgZnJvbSB3b3Jrc3BhY2UgY29udGV4dCc7XG4gICAgY29uc3Qgc2Vzc2lvbkxpbmVzID0gW1xuICAgICAgJyMjIPCfqqogU2Vzc2lvbicsXG4gICAgICBgLSAqKlNlc3Npb24gSUQqKjogJHtpbmZvLnNlc3Npb25JZH1gLFxuICAgICAgYC0gKipJZGVudGl0eSBTb3VyY2UqKjogJHtpZGVudGl0eVNvdXJjZUxhYmVsfWAsXG4gICAgXTtcbiAgICBpZiAoaW5mby5ydW50aW1lU2Vzc2lvbklkICE9PSBpbmZvLnNlc3Npb25JZCkge1xuICAgICAgc2Vzc2lvbkxpbmVzLnNwbGljZSgyLCAwLCBgLSAqKlJ1bnRpbWUgU2Vzc2lvbiBJRCoqOiAke2luZm8ucnVudGltZVNlc3Npb25JZH1gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCguLi5zZXNzaW9uTGluZXMsICcnKTtcbiAgICBcbiAgICAvLyBCdWlsZCBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+Pl++4jyBCdWlsZCcpO1xuICAgIGxpbmVzLnB1c2goYC0gKipUeXBlKio6ICR7aW5mby5idWlsZC50eXBlfWApO1xuICAgIGlmIChpbmZvLmJ1aWxkLnRpbWVzdGFtcCkge1xuICAgICAgbGluZXMucHVzaChgLSAqKlRpbWVzdGFtcCoqOiAke2luZm8uYnVpbGQudGltZXN0YW1wfWApO1xuICAgIH1cbiAgICBpZiAoaW5mby5idWlsZC5naXRDb21taXQpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipHaXQgQ29tbWl0Kio6IFxcYCR7aW5mby5idWlsZC5naXRDb21taXR9XFxgYCk7XG4gICAgfVxuICAgIGlmIChpbmZvLmJ1aWxkLmdpdEJyYW5jaCkge1xuICAgICAgbGluZXMucHVzaChgLSAqKkdpdCBCcmFuY2gqKjogJHtpbmZvLmJ1aWxkLmdpdEJyYW5jaH1gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgXG4gICAgLy8gUnVudGltZSBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+SuyBSdW50aW1lJyk7XG4gICAgbGluZXMucHVzaChgLSAqKk5vZGUuanMqKjogJHtpbmZvLnJ1bnRpbWUubm9kZVZlcnNpb259YCk7XG4gICAgbGluZXMucHVzaChgLSAqKlBsYXRmb3JtKio6ICR7aW5mby5ydW50aW1lLnBsYXRmb3JtfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipBcmNoaXRlY3R1cmUqKjogJHtpbmZvLnJ1bnRpbWUuYXJjaH1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqUHJvY2VzcyBVcHRpbWUqKjogJHt0aGlzLmZvcm1hdFVwdGltZShpbmZvLnJ1bnRpbWUudXB0aW1lKX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTWVtb3J5IFVzYWdlKio6ICR7dGhpcy5mb3JtYXRNZW1vcnkoaW5mby5ydW50aW1lLm1lbW9yeVVzYWdlLmhlYXBVc2VkKX0gLyAke3RoaXMuZm9ybWF0TWVtb3J5KGluZm8ucnVudGltZS5tZW1vcnlVc2FnZS5oZWFwVG90YWwpfWApO1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIEVudmlyb25tZW50IGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDimpnvuI8gRW52aXJvbm1lbnQnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTk9ERV9FTlYqKjogJHtpbmZvLmVudmlyb25tZW50Lm5vZGVFbnYgfHwgJ25vdCBzZXQnfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipNb2RlKio6ICR7aW5mby5lbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24gPyAnUHJvZHVjdGlvbicgOiBpbmZvLmVudmlyb25tZW50LmlzRGV2ZWxvcG1lbnQgPyAnRGV2ZWxvcG1lbnQnIDogJ1Vua25vd24nfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipEZWJ1ZyoqOiAke2luZm8uZW52aXJvbm1lbnQuaXNEZWJ1ZyA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKkRvY2tlcioqOiAke2luZm8uZW52aXJvbm1lbnQuaXNEb2NrZXIgPyAnWWVzJyA6ICdObyd9YCk7XG4gICAgaWYgKGluZm8uZW52aXJvbm1lbnQuZG9ja2VySW5mbykge1xuICAgICAgbGluZXMucHVzaChgLSAqKkNvbnRhaW5lcioqOiAke2luZm8uZW52aXJvbm1lbnQuZG9ja2VySW5mb31gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgXG4gICAgLy8gU2VydmVyIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn5qAIFNlcnZlcicpO1xuICAgIGxpbmVzLnB1c2goYC0gKipTdGFydGVkKio6ICR7aW5mby5zZXJ2ZXIuc3RhcnRUaW1lLnRvSVNPU3RyaW5nKCl9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKlVwdGltZSoqOiAke3RoaXMuZm9ybWF0VXB0aW1lKGluZm8uc2VydmVyLnVwdGltZSAvIDEwMDApfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipNQ1AgQ29ubmVjdGlvbioqOiAke2luZm8uc2VydmVyLm1jcENvbm5lY3Rpb24gPyAn4pyFIENvbm5lY3RlZCcgOiAn4p2MIERpc2Nvbm5lY3RlZCd9YCk7XG5cbiAgICBpZiAoaW5mby5wZXJtaXNzaW9uSG9va3MpIHtcbiAgICAgIGNvbnN0IGluc3RhbGxlZEhvc3RzID0gaW5mby5wZXJtaXNzaW9uSG9va3MuaW5zdGFsbGVkSG9zdHMubGVuZ3RoID4gMFxuICAgICAgICA/IGluZm8ucGVybWlzc2lvbkhvb2tzLmluc3RhbGxlZEhvc3RzLmpvaW4oJywgJylcbiAgICAgICAgOiAnTm9uZSc7XG4gICAgICBjb25zdCBjdXJyZW50SG9zdHMgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5jdXJyZW50SG9zdHMubGVuZ3RoID4gMFxuICAgICAgICA/IGluZm8ucGVybWlzc2lvbkhvb2tzLmN1cnJlbnRIb3N0cy5qb2luKCcsICcpXG4gICAgICAgIDogJ05vbmUnO1xuICAgICAgY29uc3QgbmVlZHNSZXBhaXJIb3N0cyA9IGluZm8ucGVybWlzc2lvbkhvb2tzLm5lZWRzUmVwYWlySG9zdHMubGVuZ3RoID4gMFxuICAgICAgICA/IGluZm8ucGVybWlzc2lvbkhvb2tzLm5lZWRzUmVwYWlySG9zdHMuam9pbignLCAnKVxuICAgICAgICA6ICdOb25lJztcblxuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgJycsXG4gICAgICAgICcjIyDwn5SQIFBlcm1pc3Npb24gSG9va3MnLFxuICAgICAgICBgLSAqKkluc3RhbGxlZCBIb3N0cyoqOiAke2luc3RhbGxlZEhvc3RzfWAsXG4gICAgICAgIGAtICoqQ3VycmVudCBBc3NldHMqKjogJHtjdXJyZW50SG9zdHN9YCxcbiAgICAgICAgYC0gKipOZWVkcyBSZXBhaXIqKjogJHtuZWVkc1JlcGFpckhvc3RzfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nXG4gICAgaWYgKGluZm8uc3RhcnR1cCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICBsaW5lcy5wdXNoKCcjIyDij7HvuI8gU3RhcnR1cCcpO1xuICAgICAgbGluZXMucHVzaChgLSAqKlN0YXR1cyoqOiAke2luZm8uc3RhcnR1cC5zdGF0dXMgPT09ICdyZWFkeScgPyAn4pyFIFJlYWR5JyA6ICfij7MgSW5pdGlhbGl6aW5nJ31gKTtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBTZXR1cCoqOiAke2luZm8uc3RhcnR1cC5kZWZlcnJlZFNldHVwQ29tcGxldGUgPyAnQ29tcGxldGUnIDogJ0luIFByb2dyZXNzJ31gKTtcbiAgICAgIGlmIChpbmZvLnN0YXJ0dXAuc3RhcnR1cFRpbWluZ01zKSB7XG4gICAgICAgIGNvbnN0IHRpbWluZyA9IGluZm8uc3RhcnR1cC5zdGFydHVwVGltaW5nTXM7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipDcml0aWNhbCBQYXRoKio6ICR7dGltaW5nLmNyaXRpY2FsUGF0aE1zfW1zYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBXb3JrKio6ICR7dGltaW5nLmRlZmVycmVkTXN9bXNgKTtcbiAgICAgICAgbGluZXMucHVzaChgLSAqKlRvdGFsIFN0YXJ0dXAqKjogJHt0aW1pbmcudG90YWxNc31tc2ApO1xuICAgICAgICBpZiAodGltaW5nLmNvbm5lY3RBdE1zICE9PSBudWxsKSB7XG4gICAgICAgICAgbGluZXMucHVzaChgLSAqKlRpbWUgdG8gQ29ubmVjdCoqOiAke3RpbWluZy5jb25uZWN0QXRNc31tc2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1pbmcucGhhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKCctICoqUGhhc2VzKio6Jyk7XG4gICAgICAgICAgZm9yIChjb25zdCBwaGFzZSBvZiB0aW1pbmcucGhhc2VzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBwaGFzZS5jcml0aWNhbCA/ICdjcml0aWNhbCcgOiAnZGVmZXJyZWQnO1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAtICR7cGhhc2UubmFtZX06ICR7cGhhc2UuZHVyYXRpb25Nc31tcyAoJHt0YWd9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRUNVUklUWSBOT1RFOiBObyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkIC0gZXhlY3V0ZXMgc3lzdGVtIGdpdCBjb21tYW5kc1xuICAgKiBEYXRhIHNvdXJjZTogR2l0IENMSSBvdXRwdXQgKHN5c3RlbS1jb250cm9sbGVkKSwgbm8gdXNlciBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRHaXRJbmZvKCk6IFByb21pc2U8eyBjb21taXQ/OiBzdHJpbmc7IGJyYW5jaD86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IEdpdCBjb21tYW5kcyByZXR1cm4gc3lzdGVtLWNvbnRyb2xsZWQgZGF0YSAtIG5vdCB1c2VyIGlucHV0XG4gICAgICAvLyBHaXQgY29tbWl0IGhhc2hlcyBhbmQgYnJhbmNoIG5hbWVzIGFyZSBjb250cm9sbGVkIGJ5IGdpdCwgbm8gVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZFxuICAgICAgY29uc3QgY29tbWl0ID0gY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29tbWl0LCBicmFuY2ggfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBhIGdpdCByZXBvc2l0b3J5IG9yIGdpdCBub3QgYXZhaWxhYmxlXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgLSByZWFkcyBjb250YWluZXIgcnVudGltZSBmaWxlc1xuICAgKiBEYXRhIHNvdXJjZTogU3lzdGVtIGNncm91cCBmaWxlcyAoY29udGFpbmVyLWNvbnRyb2xsZWQpLCBubyB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERvY2tlckluZm8oKTogUHJvbWlzZTx7IGlzRG9ja2VyOiBib29sZWFuOyBpbmZvPzogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU0VDVVJJVFkgTk9URTogUmVhZGluZyBzeXN0ZW0gY2dyb3VwIGZpbGUgLSBjb250cm9sbGVkIGJ5IGNvbnRhaW5lciBydW50aW1lLCBub3QgdXNlciBpbnB1dFxuICAgICAgLy8gQ29udGFpbmVyIHJ1bnRpbWUgZ2VuZXJhdGVzIHRoaXMgZmlsZSBjb250ZW50LCBubyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gICAgICBjb25zdCBjZ3JvdXBDb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5yZWFkRmlsZSgnL3Byb2MvMS9jZ3JvdXAnLCB7XG4gICAgICAgIHNvdXJjZTogJ0J1aWxkSW5mb1NlcnZpY2UuZ2V0RG9ja2VySW5mbydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNEb2NrZXIgPSBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdkb2NrZXInKSB8fCBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdjb250YWluZXJkJyk7XG4gICAgICBcbiAgICAgIGlmIChpc0RvY2tlcikge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IGNvbnRhaW5lciBJRFxuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNncm91cENvbnRlbnRcbiAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgLmZpbmQobGluZSA9PiBsaW5lLmluY2x1ZGVzKCdkb2NrZXInKSlcbiAgICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgICAucG9wKClcbiAgICAgICAgICA/LnN1YnN0cmluZygwLCAxMik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzRG9ja2VyOiB0cnVlLFxuICAgICAgICAgIGluZm86IGNvbnRhaW5lcklkID8gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZH1gIDogJ1J1bm5pbmcgaW4gRG9ja2VyJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4geyBpc0RvY2tlcjogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBEb2NrZXIgb3IgL3Byb2Mgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIHsgaXNEb2NrZXI6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVcHRpbWUoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gODY0MDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGF5cyA+IDApIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gICAgaWYgKGhvdXJzID4gMCkgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIGlmIChzZWNzID4gMCB8fCBwYXJ0cy5sZW5ndGggPT09IDApIHBhcnRzLnB1c2goYCR7c2Vjc31zYCk7XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWVtb3J5KGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1iID0gYnl0ZXMgLyAxMDI0IC8gMTAyNDtcbiAgICByZXR1cm4gYCR7bWIudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVpbGRJbmZvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUNMLDZCQUE2QixFQUU3Qiw2QkFBNkIsR0FHOUIsTUFBTSw2QkFBNkIsQ0FBQztBQXVEckMsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLFNBQVMsQ0FBTztJQUNoQixjQUFjLENBQXlCO0lBQ3hELHFFQUFxRTtJQUM3RCxZQUFZLEdBQXdCLElBQUksQ0FBQztJQUNqRCwyREFBMkQ7SUFDbkQsb0JBQW9CLEdBQTJCLElBQUksQ0FBQztJQUU1RCxZQUFZLGNBQXNDO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLE9BQXNCO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixrRkFBa0Y7UUFDbEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENB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LE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFFM0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVpbGRJbmZvU2VydmljZSAtIFByb3ZpZGVzIGJ1aWxkIGFuZCBydW50aW1lIGluZm9ybWF0aW9uXG4gKiBTZXBhcmF0ZWQgZnJvbSBtYWluIGluZGV4LnRzIHRvIGF2b2lkIG1ha2luZyB0aGF0IGZpbGUgbGFyZ2VyXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWCAoUFIgIzYxNCk6XG4gKiAxLiBETUNQLVNFQy0wMDQ6IEZBTFNFIFBPU0lUSVZFIFNVUFBSRVNTSU9OIC0gTm8gdXNlciBpbnB1dCBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gKiAgICBUaGlzIHNlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChnaXQsIHBhY2thZ2UuanNvbiwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICogICAgVGhlIE1DUCB0b29sICdnZXRfYnVpbGRfaW5mbycgdGFrZXMgTk8gcGFyYW1ldGVycyAoZW1wdHkgaW5wdXRTY2hlbWEpXG4gKiAgICBObyB1c2VyLXByb3ZpZGVkIGRhdGEgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UgdGhhdCByZXF1aXJlcyBVbmljb2RlIG5vcm1hbGl6YXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVkVSU0lPTiwgQlVJTERfVElNRVNUQU1QLCBCVUlMRF9UWVBFIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwVGltZXIsIFN0YXJ0dXBSZXBvcnQgfSBmcm9tICcuLi90ZWxlbWV0cnkvU3RhcnR1cFRpbWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkgfSBmcm9tICcuL3Nlc3Npb25JZGVudGl0eS5qcyc7XG5pbXBvcnQge1xuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va0RpYWdub3N0aWNSZWNvcmQsXG4gIHN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoLFxuICB0eXBlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5LFxufSBmcm9tICcuLi91dGlscy9wZXJtaXNzaW9uSG9va3MuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkSW5mbyB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBydW50aW1lU2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNlc3Npb25Tb3VyY2U6ICdlbnYnIHwgJ2Rlcml2ZWQnO1xuICBwYWNrYWdlOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgYnVpbGQ6IHtcbiAgICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gICAgdHlwZTogJ2dpdCcgfCAnbnBtJyB8ICd1bmtub3duJztcbiAgICBnaXRDb21taXQ/OiBzdHJpbmc7XG4gICAgZ2l0QnJhbmNoPzogc3RyaW5nO1xuICB9O1xuICBydW50aW1lOiB7XG4gICAgbm9kZVZlcnNpb246IHN0cmluZztcbiAgICBwbGF0Zm9ybTogc3RyaW5nO1xuICAgIGFyY2g6IHN0cmluZztcbiAgICB1cHRpbWU6IG51bWJlcjtcbiAgICBtZW1vcnlVc2FnZTogTm9kZUpTLk1lbW9yeVVzYWdlO1xuICB9O1xuICBlbnZpcm9ubWVudDoge1xuICAgIG5vZGVFbnY/OiBzdHJpbmc7XG4gICAgaXNQcm9kdWN0aW9uOiBib29sZWFuO1xuICAgIGlzRGV2ZWxvcG1lbnQ6IGJvb2xlYW47XG4gICAgaXNEZWJ1ZzogYm9vbGVhbjtcbiAgICBpc0RvY2tlcjogYm9vbGVhbjtcbiAgICBkb2NrZXJJbmZvPzogc3RyaW5nO1xuICB9O1xuICBzZXJ2ZXI6IHtcbiAgICBzdGFydFRpbWU6IERhdGU7XG4gICAgdXB0aW1lOiBudW1iZXI7XG4gICAgbWNwQ29ubmVjdGlvbjogYm9vbGVhbjtcbiAgfTtcbiAgcGVybWlzc2lvbkhvb2tzPzoge1xuICAgIGhlYWx0aDogUGVybWlzc2lvbkhvb2tIZWFsdGhTdW1tYXJ5O1xuICAgIGluc3RhbGxlZEhvc3RzOiBzdHJpbmdbXTtcbiAgICBjdXJyZW50SG9zdHM6IHN0cmluZ1tdO1xuICAgIHJlcGFpcmVkSG9zdHM6IHN0cmluZ1tdO1xuICAgIG5lZWRzUmVwYWlySG9zdHM6IHN0cmluZ1tdO1xuICAgIGRpYWdub3N0aWNzUGF0aDogc3RyaW5nO1xuICAgIGxhc3REaWFnbm9zdGljOiBQZXJtaXNzaW9uSG9va0RpYWdub3N0aWNSZWNvcmQgfCBudWxsO1xuICAgIGxhc3RTdGFydHVwUmVwYWlyOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbDtcbiAgfTtcbiAgLyoqIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGFuZCByZWFkaW5lc3Mgc3RhdHVzLiAqL1xuICBzdGFydHVwPzoge1xuICAgIHN0YXR1czogJ3JlYWR5JyB8ICdpbml0aWFsaXppbmcnO1xuICAgIGRlZmVycmVkU2V0dXBDb21wbGV0ZTogYm9vbGVhbjtcbiAgICB1cHRpbWVNczogbnVtYmVyO1xuICAgIHN0YXJ0dXBUaW1pbmdNcz86IFN0YXJ0dXBSZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEluZm9TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFydFRpbWU6IERhdGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2U7XG4gIC8qKiBJc3N1ZSAjNzA2OiBPcHRpb25hbCBzdGFydHVwIHRpbWVyIGZvciB0aW1pbmcgaW5zdHJ1bWVudGF0aW9uLiAqL1xuICBwcml2YXRlIHN0YXJ0dXBUaW1lcjogU3RhcnR1cFRpbWVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJc3N1ZSAjNzA2OiBDYWxsYmFjayB0byBjaGVjayBkZWZlcnJlZCBzZXR1cCBzdGF0dXMuICovXG4gIHByaXZhdGUgZGVmZXJyZWRTZXR1cENoZWNrZXI6ICgoKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGZpbGVPcGVyYXRpb25zOiBJRmlsZU9wZXJhdGlvbnNTZXJ2aWNlKSB7XG4gICAgdGhpcy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZmlsZU9wZXJhdGlvbnMgPSBmaWxlT3BlcmF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjNzA2OiBXaXJlIGluIHN0YXJ0dXAgaW5zdHJ1bWVudGF0aW9uIGFmdGVyIERJIGlzIHJlYWR5LlxuICAgKiBDYWxsZWQgZnJvbSBDb250YWluZXIgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBhdCByZWdpc3RyYXRpb24gdGltZS5cbiAgICovXG4gIHNldFN0YXJ0dXBUaW1lcih0aW1lcjogU3RhcnR1cFRpbWVyKTogdm9pZCB7XG4gICAgdGhpcy5zdGFydHVwVGltZXIgPSB0aW1lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjNzA2OiBXaXJlIGluIGRlZmVycmVkIHNldHVwIHN0YXR1cyBjaGVja2VyLlxuICAgKi9cbiAgc2V0RGVmZXJyZWRTZXR1cENoZWNrZXIoY2hlY2tlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIgPSBjaGVja2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21wcmVoZW5zaXZlIGJ1aWxkIGluZm9ybWF0aW9uXG4gICAqIFNFQ1VSSVRZIE5PVEU6IFRoaXMgbWV0aG9kIHByb2Nlc3NlcyBvbmx5IHN5c3RlbS1nZW5lcmF0ZWQgZGF0YVxuICAgKiBObyB1c2VyIGlucHV0IGlzIGludm9sdmVkIC0gYWxsIGRhdGEgY29tZXMgZnJvbSBmaWxlc3lzdGVtLCBnaXQsIGFuZCBOb2RlLmpzIHByb2Nlc3NcbiAgICpcbiAgICogVXNlcyBQcm9taXNlLmFsbFNldHRsZWQgdG8gY29sbGVjdCBwYXJ0aWFsIHJlc3VsdHMgZXZlbiBpZiBzb21lIHNvdXJjZXMgZmFpbCxcbiAgICogcHJvdmlkaW5nIG1heGltdW0gaW5mb3JtYXRpb24gYXZhaWxhYmlsaXR5IHdpdGggZ3JhY2VmdWwgZGVncmFkYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QnVpbGRJbmZvKCk6IFByb21pc2U8QnVpbGRJbmZvPiB7XG4gICAgLy8gVXNlIFByb21pc2UuYWxsU2V0dGxlZCB0byBjb2xsZWN0IGFsbCBhdmFpbGFibGUgaW5mbywgZXZlbiBpZiBzb21lIHNvdXJjZXMgZmFpbFxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgdGhpcy5nZXRHaXRJbmZvKCksXG4gICAgICB0aGlzLmdldERvY2tlckluZm8oKSxcbiAgICAgIGdldFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5KCksXG4gICAgXSk7XG5cbiAgICAvLyBQYWNrYWdlIGluZm8gY29tZXMgZnJvbSBidWlsZC10aW1lIGdlbmVyYXRlZCBjb25zdGFudHNcbiAgICBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogUEFDS0FHRV9OQU1FLCB2ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04gfTtcblxuICAgIGNvbnN0IGdpdEluZm8gPSByZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCdcbiAgICAgID8gcmVzdWx0c1swXS52YWx1ZVxuICAgICAgOiB7IGNvbW1pdDogdW5kZWZpbmVkLCBicmFuY2g6IHVuZGVmaW5lZCB9O1xuXG4gICAgY29uc3QgZG9ja2VySW5mbyA9IHJlc3VsdHNbMV0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzFdLnZhbHVlXG4gICAgICA6IHsgaXNEb2NrZXI6IGZhbHNlLCBpbmZvOiB1bmRlZmluZWQgfTtcbiAgICBjb25zdCBwZXJtaXNzaW9uSG9va0luZm8gPSByZXN1bHRzWzJdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCdcbiAgICAgID8gcmVzdWx0c1syXS52YWx1ZVxuICAgICAgOiB7XG4gICAgICAgIGluc3RhbGxlZEhvc3RzOiBbXSxcbiAgICAgICAgY3VycmVudEhvc3RzOiBbXSxcbiAgICAgICAgcmVwYWlyZWRIb3N0czogW10sXG4gICAgICAgIG5lZWRzUmVwYWlySG9zdHM6IFtdLFxuICAgICAgICBkaWFnbm9zdGljc1BhdGg6ICcnLFxuICAgICAgICBsYXN0RGlhZ25vc3RpYzogbnVsbCxcbiAgICAgICAgbGFzdFN0YXJ0dXBSZXBhaXI6IG51bGwsXG4gICAgICB9O1xuICAgIGNvbnN0IHBlcm1pc3Npb25Ib29rSGVhbHRoID0gc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgocGVybWlzc2lvbkhvb2tJbmZvKTtcblxuICAgIGNvbnN0IGZvcm1hdFNldHRsZWRSZWFzb24gPSAocmVhc29uOiB1bmtub3duKTogc3RyaW5nID0+IChcbiAgICAgIHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gYCR7cmVhc29uLm5hbWV9OiAke3JlYXNvbi5tZXNzYWdlfWAgOiBTdHJpbmcocmVhc29uKVxuICAgICk7XG5cbiAgICAvLyBMb2cgYW55IGZhaWx1cmVzIGZvciBkaWFnbm9zdGljc1xuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChyZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgZ2l0IGluZm86ICR7Zm9ybWF0U2V0dGxlZFJlYXNvbihyZXN1bHRzWzBdLnJlYXNvbil9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHRzWzFdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgZG9ja2VyIGluZm86ICR7Zm9ybWF0U2V0dGxlZFJlYXNvbihyZXN1bHRzWzFdLnJlYXNvbil9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHRzWzJdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgcGVybWlzc2lvbiBob29rIGF1ZGl0OiAke2Zvcm1hdFNldHRsZWRSZWFzb24ocmVzdWx0c1syXS5yZWFzb24pfWApO1xuICAgIH1cblxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEJ1aWxkIGluZm8gY29sbGVjdGlvbiBoYWQgJHtmYWlsdXJlcy5sZW5ndGh9IGZhaWx1cmUocyk6ICR7ZmFpbHVyZXMuam9pbignOyAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aW1lc3RhbXAgY29tZXMgZnJvbSBidWlsZC10aW1lIGdlbmVyYXRlZCBjb25zdGFudHNcbiAgICBjb25zdCBidWlsZFRpbWVzdGFtcCA9IEJVSUxEX1RJTUVTVEFNUDtcblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGFuZCByZWFkaW5lc3NcbiAgICBjb25zdCBkZWZlcnJlZENvbXBsZXRlID0gdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlciA/IHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIoKSA6IHRydWU7XG4gICAgY29uc3Qgc3RhcnR1cEluZm86IEJ1aWxkSW5mb1snc3RhcnR1cCddID0ge1xuICAgICAgc3RhdHVzOiBkZWZlcnJlZENvbXBsZXRlID8gJ3JlYWR5JyA6ICdpbml0aWFsaXppbmcnLFxuICAgICAgZGVmZXJyZWRTZXR1cENvbXBsZXRlOiBkZWZlcnJlZENvbXBsZXRlLFxuICAgICAgdXB0aW1lTXM6IERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZS5nZXRUaW1lKCksXG4gICAgICBzdGFydHVwVGltaW5nTXM6IHRoaXMuc3RhcnR1cFRpbWVyPy5nZXRSZXBvcnQoKSxcbiAgICB9O1xuICAgIGNvbnN0IHNlc3Npb25JZGVudGl0eSA9IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZGVudGl0eS5zZXNzaW9uSWQsXG4gICAgICBydW50aW1lU2Vzc2lvbklkOiBzZXNzaW9uSWRlbnRpdHkucnVudGltZVNlc3Npb25JZCxcbiAgICAgIHNlc3Npb25Tb3VyY2U6IHNlc3Npb25JZGVudGl0eS5zb3VyY2UsXG4gICAgICBwYWNrYWdlOiBwYWNrYWdlSW5mbyxcbiAgICAgIGJ1aWxkOiB7XG4gICAgICAgIHRpbWVzdGFtcDogYnVpbGRUaW1lc3RhbXAsXG4gICAgICAgIHR5cGU6IEJVSUxEX1RZUEUsXG4gICAgICAgIGdpdENvbW1pdDogZ2l0SW5mby5jb21taXQsXG4gICAgICAgIGdpdEJyYW5jaDogZ2l0SW5mby5icmFuY2gsXG4gICAgICB9LFxuICAgICAgcnVudGltZToge1xuICAgICAgICBub2RlVmVyc2lvbjogcHJvY2Vzcy52ZXJzaW9uLFxuICAgICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgICAgYXJjaDogcHJvY2Vzcy5hcmNoLFxuICAgICAgICB1cHRpbWU6IHByb2Nlc3MudXB0aW1lKCksXG4gICAgICAgIG1lbW9yeVVzYWdlOiBwcm9jZXNzLm1lbW9yeVVzYWdlKClcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBub2RlRW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcbiAgICAgICAgaXNQcm9kdWN0aW9uOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nLFxuICAgICAgICBpc0RldmVsb3BtZW50OiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyxcbiAgICAgICAgaXNEZWJ1ZzogcHJvY2Vzcy5lbnYuREVCVUcgPT09ICd0cnVlJyB8fCBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJzEnLFxuICAgICAgICBpc0RvY2tlcjogZG9ja2VySW5mby5pc0RvY2tlcixcbiAgICAgICAgZG9ja2VySW5mbzogZG9ja2VySW5mby5pbmZvXG4gICAgICB9LFxuICAgICAgc2VydmVyOiB7XG4gICAgICAgIHN0YXJ0VGltZTogdGhpcy5zdGFydFRpbWUsXG4gICAgICAgIHVwdGltZTogRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lLmdldFRpbWUoKSxcbiAgICAgICAgbWNwQ29ubmVjdGlvbjogdHJ1ZSAvLyBXZSdyZSBjb25uZWN0ZWQgaWYgdGhpcyBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIHZpYSBNQ1BcbiAgICAgIH0sXG4gICAgICBwZXJtaXNzaW9uSG9va3M6IHtcbiAgICAgICAgLi4ucGVybWlzc2lvbkhvb2tJbmZvLFxuICAgICAgICBoZWFsdGg6IHBlcm1pc3Npb25Ib29rSGVhbHRoLFxuICAgICAgfSxcbiAgICAgIHN0YXJ0dXA6IHN0YXJ0dXBJbmZvLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGJ1aWxkIGluZm8gYXMgdXNlci1mcmllbmRseSBtYXJrZG93blxuICAgKiBTRUNVUklUWSBOT1RFOiBPbmx5IGZvcm1hdHMgc3lzdGVtLWdlbmVyYXRlZCBkYXRhIC0gbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nXG4gICAqIEFsbCBpbnB1dCBkYXRhIGNvbWVzIGZyb20gZ2V0QnVpbGRJbmZvKCkgd2hpY2ggb25seSByZWFkcyBzeXN0ZW0gaW5mb3JtYXRpb25cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRCdWlsZEluZm8oaW5mbzogQnVpbGRJbmZvKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBsaW5lcy5wdXNoKCcjIPCflKcgQnVpbGQgSW5mb3JtYXRpb25cXG4nKTtcbiAgICBcbiAgICAvLyBQYWNrYWdlIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn5OmIFBhY2thZ2UnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTmFtZSoqOiAke2luZm8ucGFja2FnZS5uYW1lfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipWZXJzaW9uKio6ICR7aW5mby5wYWNrYWdlLnZlcnNpb259YCk7XG4gICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICBjb25zdCBpZGVudGl0eVNvdXJjZUxhYmVsID0gaW5mby5zZXNzaW9uU291cmNlID09PSAnZW52J1xuICAgICAgPyAnRXhwbGljaXQgZW52aXJvbm1lbnQnXG4gICAgICA6ICdEZXJpdmVkIGZyb20gd29ya3NwYWNlIGNvbnRleHQnO1xuICAgIGNvbnN0IHNlc3Npb25MaW5lcyA9IFtcbiAgICAgICcjIyDwn6qqIFNlc3Npb24nLFxuICAgICAgYC0gKipTZXNzaW9uIElEKio6ICR7aW5mby5zZXNzaW9uSWR9YCxcbiAgICAgIGAtICoqSWRlbnRpdHkgU291cmNlKio6ICR7aWRlbnRpdHlTb3VyY2VMYWJlbH1gLFxuICAgIF07XG4gICAgaWYgKGluZm8ucnVudGltZVNlc3Npb25JZCAhPT0gaW5mby5zZXNzaW9uSWQpIHtcbiAgICAgIHNlc3Npb25MaW5lcy5zcGxpY2UoMiwgMCwgYC0gKipSdW50aW1lIFNlc3Npb24gSUQqKjogJHtpbmZvLnJ1bnRpbWVTZXNzaW9uSWR9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goLi4uc2Vzc2lvbkxpbmVzLCAnJyk7XG4gICAgXG4gICAgLy8gQnVpbGQgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfj5fvuI8gQnVpbGQnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVHlwZSoqOiAke2luZm8uYnVpbGQudHlwZX1gKTtcbiAgICBpZiAoaW5mby5idWlsZC50aW1lc3RhbXApIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipUaW1lc3RhbXAqKjogJHtpbmZvLmJ1aWxkLnRpbWVzdGFtcH1gKTtcbiAgICB9XG4gICAgaWYgKGluZm8uYnVpbGQuZ2l0Q29tbWl0KSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqR2l0IENvbW1pdCoqOiBcXGAke2luZm8uYnVpbGQuZ2l0Q29tbWl0fVxcYGApO1xuICAgIH1cbiAgICBpZiAoaW5mby5idWlsZC5naXRCcmFuY2gpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipHaXQgQnJhbmNoKio6ICR7aW5mby5idWlsZC5naXRCcmFuY2h9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIFJ1bnRpbWUgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfkrsgUnVudGltZScpO1xuICAgIGxpbmVzLnB1c2goYC0gKipOb2RlLmpzKio6ICR7aW5mby5ydW50aW1lLm5vZGVWZXJzaW9ufWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipQbGF0Zm9ybSoqOiAke2luZm8ucnVudGltZS5wbGF0Zm9ybX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqQXJjaGl0ZWN0dXJlKio6ICR7aW5mby5ydW50aW1lLmFyY2h9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKlByb2Nlc3MgVXB0aW1lKio6ICR7dGhpcy5mb3JtYXRVcHRpbWUoaW5mby5ydW50aW1lLnVwdGltZSl9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1lbW9yeSBVc2FnZSoqOiAke3RoaXMuZm9ybWF0TWVtb3J5KGluZm8ucnVudGltZS5tZW1vcnlVc2FnZS5oZWFwVXNlZCl9IC8gJHt0aGlzLmZvcm1hdE1lbW9yeShpbmZvLnJ1bnRpbWUubWVtb3J5VXNhZ2UuaGVhcFRvdGFsKX1gKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBFbnZpcm9ubWVudCBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg4pqZ77iPIEVudmlyb25tZW50Jyk7XG4gICAgbGluZXMucHVzaChgLSAqKk5PREVfRU5WKio6ICR7aW5mby5lbnZpcm9ubWVudC5ub2RlRW52IHx8ICdub3Qgc2V0J31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTW9kZSoqOiAke2luZm8uZW52aXJvbm1lbnQuaXNQcm9kdWN0aW9uID8gJ1Byb2R1Y3Rpb24nIDogaW5mby5lbnZpcm9ubWVudC5pc0RldmVsb3BtZW50ID8gJ0RldmVsb3BtZW50JyA6ICdVbmtub3duJ31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqRGVidWcqKjogJHtpbmZvLmVudmlyb25tZW50LmlzRGVidWcgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipEb2NrZXIqKjogJHtpbmZvLmVudmlyb25tZW50LmlzRG9ja2VyID8gJ1llcycgOiAnTm8nfWApO1xuICAgIGlmIChpbmZvLmVudmlyb25tZW50LmRvY2tlckluZm8pIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipDb250YWluZXIqKjogJHtpbmZvLmVudmlyb25tZW50LmRvY2tlckluZm99YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIFNlcnZlciBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+agCBTZXJ2ZXInKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqU3RhcnRlZCoqOiAke2luZm8uc2VydmVyLnN0YXJ0VGltZS50b0lTT1N0cmluZygpfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipVcHRpbWUqKjogJHt0aGlzLmZvcm1hdFVwdGltZShpbmZvLnNlcnZlci51cHRpbWUgLyAxMDAwKX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTUNQIENvbm5lY3Rpb24qKjogJHtpbmZvLnNlcnZlci5tY3BDb25uZWN0aW9uID8gJ+KchSBDb25uZWN0ZWQnIDogJ+KdjCBEaXNjb25uZWN0ZWQnfWApO1xuXG4gICAgaWYgKGluZm8ucGVybWlzc2lvbkhvb2tzKSB7XG4gICAgICBjb25zdCBpbnN0YWxsZWRIb3N0cyA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmluc3RhbGxlZEhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5pbnN0YWxsZWRIb3N0cy5qb2luKCcsICcpXG4gICAgICAgIDogJ05vbmUnO1xuICAgICAgY29uc3QgY3VycmVudEhvc3RzID0gaW5mby5wZXJtaXNzaW9uSG9va3MuY3VycmVudEhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5jdXJyZW50SG9zdHMuam9pbignLCAnKVxuICAgICAgICA6ICdOb25lJztcbiAgICAgIGNvbnN0IG5lZWRzUmVwYWlySG9zdHMgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5uZWVkc1JlcGFpckhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5uZWVkc1JlcGFpckhvc3RzLmpvaW4oJywgJylcbiAgICAgICAgOiAnTm9uZSc7XG4gICAgICBjb25zdCBsYXN0U3RhcnR1cFJlcGFpciA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmxhc3RTdGFydHVwUmVwYWlyO1xuICAgICAgY29uc3Qgc3RhcnR1cFJlcGFpcklzc3VlcyA9IGxhc3RTdGFydHVwUmVwYWlyXG4gICAgICAgID8gbGFzdFN0YXJ0dXBSZXBhaXIuaG9zdFJlc3VsdHNcbiAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IHJlc3VsdC5vdXRjb21lID09PSAnbmVlZHNfcmVwYWlyJyB8fCByZXN1bHQub3V0Y29tZSA9PT0gJ2Vycm9yJylcbiAgICAgICAgICAubWFwKChyZXN1bHQpID0+IHJlc3VsdC5yZXBhaXJFcnJvciA/IGAke3Jlc3VsdC5ob3N0fSAoJHtyZXN1bHQucmVwYWlyRXJyb3J9KWAgOiByZXN1bHQuaG9zdClcbiAgICAgICAgICAuam9pbignOyAnKVxuICAgICAgICA6ICcnO1xuXG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAnJyxcbiAgICAgICAgJyMjIPCflJAgUGVybWlzc2lvbiBIb29rcycsXG4gICAgICAgIGAtICoqSGVhbHRoKio6ICR7aW5mby5wZXJtaXNzaW9uSG9va3MuaGVhbHRoLnN0YXR1cy50b1VwcGVyQ2FzZSgpfSDigJQgJHtpbmZvLnBlcm1pc3Npb25Ib29rcy5oZWFsdGgubWVzc2FnZX1gLFxuICAgICAgICBgLSAqKkluc3RhbGxlZCBIb3N0cyoqOiAke2luc3RhbGxlZEhvc3RzfWAsXG4gICAgICAgIGAtICoqQ3VycmVudCBBc3NldHMqKjogJHtjdXJyZW50SG9zdHN9YCxcbiAgICAgICAgYC0gKipOZWVkcyBSZXBhaXIqKjogJHtuZWVkc1JlcGFpckhvc3RzfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAoaW5mby5wZXJtaXNzaW9uSG9va3MuZGlhZ25vc3RpY3NQYXRoKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEaWFnbm9zdGljcyBMb2cqKjogJHtpbmZvLnBlcm1pc3Npb25Ib29rcy5kaWFnbm9zdGljc1BhdGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0U3RhcnR1cFJlcGFpcikge1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgIGAtICoqTGFzdCBTdGFydHVwIEF1ZGl0Kio6ICR7bGFzdFN0YXJ0dXBSZXBhaXIuY29tcGxldGVkQXR9ICgke2xhc3RTdGFydHVwUmVwYWlyLmR1cmF0aW9uTXN9bXMpYCxcbiAgICAgICAgICBgLSAqKlN0YXJ0dXAgUmVwYWlycyBBcHBsaWVkKio6ICR7bGFzdFN0YXJ0dXBSZXBhaXIucmVwYWlyZWRDb3VudH1gLFxuICAgICAgICAgIGAtICoqU3RhcnR1cCBSZXBhaXIgSXNzdWVzKio6ICR7c3RhcnR1cFJlcGFpcklzc3VlcyB8fCAnTm9uZSd9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZm8ucGVybWlzc2lvbkhvb2tzLmxhc3REaWFnbm9zdGljKSB7XG4gICAgICAgIGNvbnN0IGxhc3REaWFnbm9zdGljID0gaW5mby5wZXJtaXNzaW9uSG9va3MubGFzdERpYWdub3N0aWM7XG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNPdXRjb21lID0gbGFzdERpYWdub3N0aWMub3V0Y29tZVxuICAgICAgICAgID8gYCR7bGFzdERpYWdub3N0aWMuZXZlbnR9IC8gJHtsYXN0RGlhZ25vc3RpYy5vdXRjb21lfWBcbiAgICAgICAgICA6IGxhc3REaWFnbm9zdGljLmV2ZW50O1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgIGAtICoqTGFzdCBEaWFnbm9zdGljIEV2ZW50Kio6ICR7bGFzdERpYWdub3N0aWMudGltZXN0YW1wfSAoJHtkaWFnbm9zdGljT3V0Y29tZX0pYCxcbiAgICAgICAgICBgLSAqKkxhc3QgRGlhZ25vc3RpYyBTdGFnZSoqOiAke2xhc3REaWFnbm9zdGljLnN0YWdlfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgSW5wdXQgQnl0ZXMqKjogJHtsYXN0RGlhZ25vc3RpYy5yYXdJbnB1dExlbmd0aCA/PyAwfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgTm9ybWFsaXplZCBCeXRlcyoqOiAke2xhc3REaWFnbm9zdGljLm5vcm1hbGl6ZWRSZXNwb25zZUxlbmd0aCA/PyAwfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgRW1pdHRlZCBCeXRlcyoqOiAke2xhc3REaWFnbm9zdGljLmVtaXR0ZWRSZXNwb25zZUxlbmd0aCA/PyAwfWAsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsYXN0RGlhZ25vc3RpYy5yZWFzb24pIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGAtICoqTGFzdCBEaWFnbm9zdGljIFJlYXNvbioqOiAke2xhc3REaWFnbm9zdGljLnJlYXNvbn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nXG4gICAgaWYgKGluZm8uc3RhcnR1cCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICBsaW5lcy5wdXNoKCcjIyDij7HvuI8gU3RhcnR1cCcpO1xuICAgICAgbGluZXMucHVzaChgLSAqKlN0YXR1cyoqOiAke2luZm8uc3RhcnR1cC5zdGF0dXMgPT09ICdyZWFkeScgPyAn4pyFIFJlYWR5JyA6ICfij7MgSW5pdGlhbGl6aW5nJ31gKTtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBTZXR1cCoqOiAke2luZm8uc3RhcnR1cC5kZWZlcnJlZFNldHVwQ29tcGxldGUgPyAnQ29tcGxldGUnIDogJ0luIFByb2dyZXNzJ31gKTtcbiAgICAgIGlmIChpbmZvLnN0YXJ0dXAuc3RhcnR1cFRpbWluZ01zKSB7XG4gICAgICAgIGNvbnN0IHRpbWluZyA9IGluZm8uc3RhcnR1cC5zdGFydHVwVGltaW5nTXM7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipDcml0aWNhbCBQYXRoKio6ICR7dGltaW5nLmNyaXRpY2FsUGF0aE1zfW1zYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBXb3JrKio6ICR7dGltaW5nLmRlZmVycmVkTXN9bXNgKTtcbiAgICAgICAgbGluZXMucHVzaChgLSAqKlRvdGFsIFN0YXJ0dXAqKjogJHt0aW1pbmcudG90YWxNc31tc2ApO1xuICAgICAgICBpZiAodGltaW5nLmNvbm5lY3RBdE1zICE9PSBudWxsKSB7XG4gICAgICAgICAgbGluZXMucHVzaChgLSAqKlRpbWUgdG8gQ29ubmVjdCoqOiAke3RpbWluZy5jb25uZWN0QXRNc31tc2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1pbmcucGhhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKCctICoqUGhhc2VzKio6Jyk7XG4gICAgICAgICAgZm9yIChjb25zdCBwaGFzZSBvZiB0aW1pbmcucGhhc2VzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBwaGFzZS5jcml0aWNhbCA/ICdjcml0aWNhbCcgOiAnZGVmZXJyZWQnO1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAtICR7cGhhc2UubmFtZX06ICR7cGhhc2UuZHVyYXRpb25Nc31tcyAoJHt0YWd9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRUNVUklUWSBOT1RFOiBObyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkIC0gZXhlY3V0ZXMgc3lzdGVtIGdpdCBjb21tYW5kc1xuICAgKiBEYXRhIHNvdXJjZTogR2l0IENMSSBvdXRwdXQgKHN5c3RlbS1jb250cm9sbGVkKSwgbm8gdXNlciBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRHaXRJbmZvKCk6IFByb21pc2U8eyBjb21taXQ/OiBzdHJpbmc7IGJyYW5jaD86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IEdpdCBjb21tYW5kcyByZXR1cm4gc3lzdGVtLWNvbnRyb2xsZWQgZGF0YSAtIG5vdCB1c2VyIGlucHV0XG4gICAgICAvLyBHaXQgY29tbWl0IGhhc2hlcyBhbmQgYnJhbmNoIG5hbWVzIGFyZSBjb250cm9sbGVkIGJ5IGdpdCwgbm8gVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZFxuICAgICAgY29uc3QgY29tbWl0ID0gY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29tbWl0LCBicmFuY2ggfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBhIGdpdCByZXBvc2l0b3J5IG9yIGdpdCBub3QgYXZhaWxhYmxlXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgLSByZWFkcyBjb250YWluZXIgcnVudGltZSBmaWxlc1xuICAgKiBEYXRhIHNvdXJjZTogU3lzdGVtIGNncm91cCBmaWxlcyAoY29udGFpbmVyLWNvbnRyb2xsZWQpLCBubyB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERvY2tlckluZm8oKTogUHJvbWlzZTx7IGlzRG9ja2VyOiBib29sZWFuOyBpbmZvPzogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU0VDVVJJVFkgTk9URTogUmVhZGluZyBzeXN0ZW0gY2dyb3VwIGZpbGUgLSBjb250cm9sbGVkIGJ5IGNvbnRhaW5lciBydW50aW1lLCBub3QgdXNlciBpbnB1dFxuICAgICAgLy8gQ29udGFpbmVyIHJ1bnRpbWUgZ2VuZXJhdGVzIHRoaXMgZmlsZSBjb250ZW50LCBubyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gICAgICBjb25zdCBjZ3JvdXBDb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5yZWFkRmlsZSgnL3Byb2MvMS9jZ3JvdXAnLCB7XG4gICAgICAgIHNvdXJjZTogJ0J1aWxkSW5mb1NlcnZpY2UuZ2V0RG9ja2VySW5mbydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNEb2NrZXIgPSBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdkb2NrZXInKSB8fCBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdjb250YWluZXJkJyk7XG4gICAgICBcbiAgICAgIGlmIChpc0RvY2tlcikge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IGNvbnRhaW5lciBJRFxuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNncm91cENvbnRlbnRcbiAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgLmZpbmQobGluZSA9PiBsaW5lLmluY2x1ZGVzKCdkb2NrZXInKSlcbiAgICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgICAucG9wKClcbiAgICAgICAgICA/LnN1YnN0cmluZygwLCAxMik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzRG9ja2VyOiB0cnVlLFxuICAgICAgICAgIGluZm86IGNvbnRhaW5lcklkID8gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZH1gIDogJ1J1bm5pbmcgaW4gRG9ja2VyJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4geyBpc0RvY2tlcjogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBEb2NrZXIgb3IgL3Byb2Mgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIHsgaXNEb2NrZXI6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVcHRpbWUoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gODY0MDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGF5cyA+IDApIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gICAgaWYgKGhvdXJzID4gMCkgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIGlmIChzZWNzID4gMCB8fCBwYXJ0cy5sZW5ndGggPT09IDApIHBhcnRzLnB1c2goYCR7c2Vjc31zYCk7XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWVtb3J5KGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1iID0gYnl0ZXMgLyAxMDI0IC8gMTAyNDtcbiAgICByZXR1cm4gYCR7bWIudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type InstallPermissionHookOptions, type InstallPermissionHookResult } from './permissionHookShared.js';
|
|
2
|
+
export declare function ensureClaudePreToolUseHook(parsed: Record<string, unknown>, command: string): {
|
|
3
|
+
changed: boolean;
|
|
4
|
+
parsed: Record<string, unknown>;
|
|
5
|
+
};
|
|
6
|
+
export declare function ensureVsCodePreToolUseHook(parsed: Record<string, unknown>, command: string): {
|
|
7
|
+
changed: boolean;
|
|
8
|
+
parsed: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
export declare function ensureGeminiBeforeToolHook(parsed: Record<string, unknown>, command: string): {
|
|
11
|
+
changed: boolean;
|
|
12
|
+
parsed: Record<string, unknown>;
|
|
13
|
+
};
|
|
14
|
+
export declare function ensureCodexPreToolUseHook(parsed: Record<string, unknown>, command: string): {
|
|
15
|
+
changed: boolean;
|
|
16
|
+
parsed: Record<string, unknown>;
|
|
17
|
+
};
|
|
18
|
+
export declare function ensureCursorPreToolUseHook(parsed: Record<string, unknown>, command: string): {
|
|
19
|
+
changed: boolean;
|
|
20
|
+
parsed: Record<string, unknown>;
|
|
21
|
+
};
|
|
22
|
+
export declare function ensureWindsurfHooks(parsed: Record<string, unknown>, command: string): {
|
|
23
|
+
changed: boolean;
|
|
24
|
+
parsed: Record<string, unknown>;
|
|
25
|
+
};
|
|
26
|
+
export declare function installPermissionHook(client: string, options?: InstallPermissionHookOptions): Promise<InstallPermissionHookResult>;
|
|
27
|
+
//# sourceMappingURL=permissionHookInstallers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionHookInstallers.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookInstallers.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAkBjC,MAAM,2BAA2B,CAAC;AAQnC,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAEvD;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAEvD;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAEvD;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAIvD;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAyBvD;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CA4BvD;AA0cD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,2BAA2B,CAAC,CAwCtC"}
|