@dollhousemcp/mcp-server 2.0.14 → 2.0.16

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/generated/version.d.ts +2 -2
  3. package/dist/generated/version.js +3 -3
  4. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  5. package/dist/handlers/ElementCRUDHandler.js +7 -3
  6. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  7. package/dist/handlers/mcp-aql/MCPAQLHandler.js +35 -19
  8. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  9. package/dist/handlers/mcp-aql/OperationSchema.js +4 -3
  10. package/dist/handlers/mcp-aql/evaluatePermission.d.ts +2 -1
  11. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
  12. package/dist/handlers/mcp-aql/evaluatePermission.js +22 -11
  13. package/dist/handlers/strategies/BaseActivationStrategy.d.ts.map +1 -1
  14. package/dist/handlers/strategies/BaseActivationStrategy.js +12 -3
  15. package/dist/handlers/strategies/PersonaActivationStrategy.js +2 -2
  16. package/dist/utils/permissionHooks.d.ts +38 -0
  17. package/dist/utils/permissionHooks.d.ts.map +1 -0
  18. package/dist/utils/permissionHooks.js +194 -0
  19. package/dist/web/public/index.html +12 -6
  20. package/dist/web/public/permissions.css +11 -0
  21. package/dist/web/public/permissions.js +43 -12
  22. package/dist/web/public/setup.css +172 -1
  23. package/dist/web/public/setup.js +353 -20
  24. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  25. package/dist/web/routes/permissionRoutes.js +64 -15
  26. package/dist/web/routes/setupRoutes.d.ts +3 -0
  27. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  28. package/dist/web/routes/setupRoutes.js +14 -3
  29. package/package.json +6 -1
  30. package/scripts/pretooluse-codex.sh +6 -0
  31. package/scripts/pretooluse-cursor.sh +6 -0
  32. package/scripts/pretooluse-dollhouse.sh +110 -0
  33. package/scripts/pretooluse-gemini.sh +6 -0
  34. package/scripts/pretooluse-windsurf.sh +6 -0
  35. package/server.json +2 -2
@@ -27,7 +27,7 @@ export interface EvaluatePermissionDeps {
27
27
  permissionPromptLimiter: RateLimiter;
28
28
  classifyTool: (toolName: string, toolInput: Record<string, unknown>) => ToolClassificationResult;
29
29
  evaluateCliToolPolicy: (toolName: string, toolInput: Record<string, unknown>, elements: ActiveElement[]) => CliToolPolicyResult;
30
- getActiveElements: () => Promise<ActiveElement[]>;
30
+ getActiveElements: (sessionId?: string) => Promise<ActiveElement[]>;
31
31
  }
32
32
  /** Known platform identifiers */
33
33
  export declare const SUPPORTED_PLATFORMS: string[];
@@ -49,5 +49,6 @@ export declare function evaluatePermission(params: {
49
49
  tool_name?: unknown;
50
50
  input?: unknown;
51
51
  platform?: unknown;
52
+ session_id?: unknown;
52
53
  }, deps: EvaluatePermissionDeps): Promise<Record<string, unknown>>;
53
54
  //# sourceMappingURL=evaluatePermission.d.ts.map
@@ -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,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACnD;AA2CD,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,UAAkC,CAAC;AAEnE;;;;;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,CAczB;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,CAAA;CAAE,EACpE,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA8ClC"}
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;AA8CD,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"}
@@ -44,13 +44,14 @@ function formatWindsurf(decision, reason) {
44
44
  function formatCodex(decision, reason) {
45
45
  return { hookSpecificOutput: withReason({ permissionDecision: decision === 'ask' ? 'deny' : decision }, reason) };
46
46
  }
47
- /** Claude Code (default): uses 'decision' with 'message' for ask, 'reason' for deny */
47
+ /** Claude Code (default): uses hookSpecificOutput.permissionDecision for PreToolUse */
48
48
  function formatClaudeCode(decision, reason) {
49
- if (decision === 'allow')
50
- return { decision: 'allow' };
51
- if (decision === 'ask')
52
- return withReason({ decision: 'ask' }, reason, 'message');
53
- return withReason({ decision: 'deny' }, reason);
49
+ return {
50
+ hookSpecificOutput: withReason({
51
+ hookEventName: 'PreToolUse',
52
+ permissionDecision: decision,
53
+ }, reason, 'permissionDecisionReason'),
54
+ };
54
55
  }
55
56
  /** Platform formatter lookup */
56
57
  const platformFormatters = {
@@ -62,6 +63,15 @@ const platformFormatters = {
62
63
  };
63
64
  /** Known platform identifiers */
64
65
  export const SUPPORTED_PLATFORMS = Object.keys(platformFormatters);
66
+ function warnOnUnknownPlatform(platform) {
67
+ void import('../../utils/logger.js')
68
+ .then(({ logger }) => {
69
+ logger.warn(`[evaluatePermission] Unknown platform "${platform}", defaulting to claude_code format. Supported: ${SUPPORTED_PLATFORMS.join(', ')}`);
70
+ })
71
+ .catch((error) => {
72
+ console.warn(`[evaluatePermission] Failed to load logger while handling unknown platform "${platform}".`, error);
73
+ });
74
+ }
65
75
  /**
66
76
  * Format permission evaluation response for platform-specific hook scripts.
67
77
  * Each platform expects a different JSON shape from its hook response.
@@ -77,9 +87,7 @@ export function formatPermissionResponse(decision, platform, _input, reason) {
77
87
  case 'claude_code': return formatClaudeCode(decision, reason);
78
88
  default:
79
89
  // Import lazily to avoid circular dependency at module load time
80
- import('../../utils/logger.js').then(({ logger }) => {
81
- logger.warn(`[evaluatePermission] Unknown platform "${platform}", defaulting to claude_code format. Supported: ${SUPPORTED_PLATFORMS.join(', ')}`);
82
- }).catch(() => { });
90
+ warnOnUnknownPlatform(platform);
83
91
  return formatClaudeCode(decision, reason);
84
92
  }
85
93
  }
@@ -97,6 +105,9 @@ export async function evaluatePermission(params, deps) {
97
105
  ? inputRaw
98
106
  : {};
99
107
  const platform = typeof params.platform === 'string' ? params.platform : 'claude_code';
108
+ const sessionId = typeof params.session_id === 'string' && params.session_id.trim() !== ''
109
+ ? params.session_id
110
+ : undefined;
100
111
  // Rate limit
101
112
  const rateStatus = deps.permissionPromptLimiter.checkLimit();
102
113
  if (!rateStatus.allowed) {
@@ -114,7 +125,7 @@ export async function evaluatePermission(params, deps) {
114
125
  // Stage 2: Element policy evaluation
115
126
  let elements;
116
127
  try {
117
- elements = await deps.getActiveElements();
128
+ elements = await deps.getActiveElements(sessionId);
118
129
  }
119
130
  catch (err) {
120
131
  throw new PermissionEvaluationError(`Failed to fetch active elements for policy evaluation: ${err instanceof Error ? err.message : String(err)}`, 'element_fetch', toolName, err);
@@ -129,4 +140,4 @@ export async function evaluatePermission(params, deps) {
129
140
  // Default: allow
130
141
  return formatPermissionResponse('allow', platform, input);
131
142
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFT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QUMsQ0FBQztJQUNsRixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLElBQUksUUFBeUIsQ0FBQztJQUM5QixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSx5QkFBeUIsQ0FDakMsMERBQTBELEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUM1RyxlQUFlLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV2RSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDakMsT0FBTyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxPQUFPLHdCQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUNwRCxRQUFRLENBQUMsT0FBTyxJQUFJLDBDQUEwQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVybWlzc2lvbiBldmFsdWF0aW9uIGZvciBQcmVUb29sVXNlIGhvb2tzIGFjcm9zcyBhbGwgQUkgcGxhdGZvcm1zLlxuICpcbiAqIFByb3ZpZGVzIHRoZSBgZXZhbHVhdGVfcGVybWlzc2lvbmAgTUNQLUFRTCBSRUFEIG9wZXJhdGlvbiwgZW5hYmxpbmdcbiAqIENsYXVkZSBDb2RlLCBDdXJzb3IsIEdlbWluaSBDTEksIFdpbmRzdXJmLCBhbmQgQ29kZXggdG8gdXNlXG4gKiBEb2xsaG91c2VNQ1AgYXMgdGhlaXIgcGVybWlzc2lvbiBldmFsdWF0aW9uIGJhY2tlbmQgdmlhIGhvb2tzLlxuICpcbiAqIFRocmVlLXN0YWdlIGV2YWx1YXRpb24gcGlwZWxpbmU6XG4gKiAxLiBSYXRlIGxpbWl0aW5nIOKAlCBwcmV2ZW50cyBhYnVzZVxuICogMi4gU3RhdGljIHRvb2wgY2xhc3NpZmljYXRpb24g4oCUIGJ1aWx0LWluIGFsbG93L2RlbnkgcnVsZXNcbiAqIDMuIEVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24g4oCUIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXNcbiAqXG4gKiBSZXR1cm5zIHBsYXRmb3JtLXNwZWNpZmljIHJlc3BvbnNlIGZvcm1hdHMgc28gZWFjaCBwbGF0Zm9ybSdzIGhvb2tcbiAqIHNjcmlwdCByZWNlaXZlcyB0aGUgSlNPTiBzaGFwZSBpdCBleHBlY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9SYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCwgQ2xpVG9vbFBvbGljeVJlc3VsdCB9IGZyb20gJy4vcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJy4vcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLmpzJztcblxuLyoqIEVycm9yIHRocm93biB3aGVuIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBmYWlscyBhdCBhIHNwZWNpZmljIHN0YWdlICovXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlOiAncmF0ZV9saW1pdCcgfCAnY2xhc3NpZmljYXRpb24nIHwgJ3BvbGljeScgfCAnZWxlbWVudF9mZXRjaCc7XG4gIHB1YmxpYyByZWFkb25seSB0b29sTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnLFxuICAgIHRvb2xOYW1lOiBzdHJpbmcsXG4gICAgY2F1c2U/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSA/IHsgY2F1c2UgfSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lID0gJ1Blcm1pc3Npb25FdmFsdWF0aW9uRXJyb3InO1xuICAgIHRoaXMuc3RhZ2UgPSBzdGFnZTtcbiAgICB0aGlzLnRvb2xOYW1lID0gdG9vbE5hbWU7XG4gIH1cbn1cblxuLyoqIERlcGVuZGVuY2llcyBpbmplY3RlZCBmcm9tIE1DUEFRTEhhbmRsZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyB7XG4gIHBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgY2xhc3NpZnlUb29sOiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0O1xuICBldmFsdWF0ZUNsaVRvb2xQb2xpY3k6ICh0b29sTmFtZTogc3RyaW5nLCB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKSA9PiBDbGlUb29sUG9saWN5UmVzdWx0O1xuICBnZXRBY3RpdmVFbGVtZW50czogKCkgPT4gUHJvbWlzZTxBY3RpdmVFbGVtZW50W10+O1xufVxuXG4vKiogT3B0aW9uYWwgcmVhc29uIGZpZWxkLCBvbmx5IGluY2x1ZGVkIHdoZW4gcmVhc29uIGlzIHByb3ZpZGVkICovXG5mdW5jdGlvbiB3aXRoUmVhc29uKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlYXNvbj86IHN0cmluZywga2V5ID0gJ3JlYXNvbicpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiByZWFzb24gPyB7IC4uLm9iaiwgW2tleV06IHJlYXNvbiB9IDogb2JqO1xufVxuXG4vKiogR2VtaW5pOiBtYXBzICdhc2snIHRvICdkZW55JyAobm8gaW50ZXJhY3RpdmUgc3VwcG9ydCkgKi9cbmZ1bmN0aW9uIGZvcm1hdEdlbWluaShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgZGVjaXNpb246IGRlY2lzaW9uID09PSAnYXNrJyA/ICdkZW55JyA6IGRlY2lzaW9uIH0sIHJlYXNvbik7XG59XG5cbi8qKiBDdXJzb3I6IHVzZXMgJ3Blcm1pc3Npb24nIGZpZWxkIGluc3RlYWQgb2YgJ2RlY2lzaW9uJyAqL1xuZnVuY3Rpb24gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBwZXJtaXNzaW9uOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogV2luZHN1cmY6IHVzZXMgYm9vbGVhbiAnYWxsb3dlZCcgZmllbGQgKi9cbmZ1bmN0aW9uIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBhbGxvd2VkOiBkZWNpc2lvbiA9PT0gJ2FsbG93JyB9LCByZWFzb24pO1xufVxuXG4vKiogQ29kZXg6IHdyYXBzIGluIGhvb2tTcGVjaWZpY091dHB1dCwgbWFwcyAnYXNrJyB0byAnZGVueScgKi9cbmZ1bmN0aW9uIGZvcm1hdENvZGV4KGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHsgaG9va1NwZWNpZmljT3V0cHV0OiB3aXRoUmVhc29uKHsgcGVybWlzc2lvbkRlY2lzaW9uOiBkZWNpc2lvbiA9PT0gJ2FzaycgPyAnZGVueScgOiBkZWNpc2lvbiB9LCByZWFzb24pIH07XG59XG5cbi8qKiBDbGF1ZGUgQ29kZSAoZGVmYXVsdCk6IHVzZXMgJ2RlY2lzaW9uJyB3aXRoICdtZXNzYWdlJyBmb3IgYXNrLCAncmVhc29uJyBmb3IgZGVueSAqL1xuZnVuY3Rpb24gZm9ybWF0Q2xhdWRlQ29kZShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmIChkZWNpc2lvbiA9PT0gJ2FsbG93JykgcmV0dXJuIHsgZGVjaXNpb246ICdhbGxvdycgfTtcbiAgaWYgKGRlY2lzaW9uID09PSAnYXNrJykgcmV0dXJuIHdpdGhSZWFzb24oeyBkZWNpc2lvbjogJ2FzaycgfSwgcmVhc29uLCAnbWVzc2FnZScpO1xuICByZXR1cm4gd2l0aFJlYXNvbih7IGRlY2lzaW9uOiAnZGVueScgfSwgcmVhc29uKTtcbn1cblxuLyoqIFBsYXRmb3JtIGZvcm1hdHRlciBsb29rdXAgKi9cbmNvbnN0IHBsYXRmb3JtRm9ybWF0dGVyczogUmVjb3JkPHN0cmluZywgKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICBnZW1pbmk6IGZvcm1hdEdlbWluaSxcbiAgY3Vyc29yOiBmb3JtYXRDdXJzb3IsXG4gIHdpbmRzdXJmOiBmb3JtYXRXaW5kc3VyZixcbiAgY29kZXg6IGZvcm1hdENvZGV4LFxuICBjbGF1ZGVfY29kZTogZm9ybWF0Q2xhdWRlQ29kZSxcbn07XG5cbi8qKiBLbm93biBwbGF0Zm9ybSBpZGVudGlmaWVycyAqL1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9QTEFURk9STVMgPSBPYmplY3Qua2V5cyhwbGF0Zm9ybUZvcm1hdHRlcnMpO1xuXG4vKipcbiAqIEZvcm1hdCBwZXJtaXNzaW9uIGV2YWx1YXRpb24gcmVzcG9uc2UgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGhvb2sgc2NyaXB0cy5cbiAqIEVhY2ggcGxhdGZvcm0gZXhwZWN0cyBhIGRpZmZlcmVudCBKU09OIHNoYXBlIGZyb20gaXRzIGhvb2sgcmVzcG9uc2UuXG4gKlxuICogVW5rbm93biBwbGF0Zm9ybXMgZGVmYXVsdCB0byBjbGF1ZGVfY29kZSBmb3JtYXQgd2l0aCBhIHdhcm5pbmcgbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKFxuICBkZWNpc2lvbjogJ2FsbG93JyB8ICdkZW55JyB8ICdhc2snLFxuICBwbGF0Zm9ybTogc3RyaW5nLFxuICBfaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICByZWFzb24/OiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdnZW1pbmknOiByZXR1cm4gZm9ybWF0R2VtaW5pKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2N1cnNvcic6IHJldHVybiBmb3JtYXRDdXJzb3IoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnd2luZHN1cmYnOiByZXR1cm4gZm9ybWF0V2luZHN1cmYoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY29kZXgnOiByZXR1cm4gZm9ybWF0Q29kZXgoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY2xhdWRlX2NvZGUnOiByZXR1cm4gZm9ybWF0Q2xhdWRlQ29kZShkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gSW1wb3J0IGxhemlseSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IG1vZHVsZSBsb2FkIHRpbWVcbiAgICAgIGltcG9ydCgnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJykudGhlbigoeyBsb2dnZXIgfSkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihgW2V2YWx1YXRlUGVybWlzc2lvbl0gVW5rbm93biBwbGF0Zm9ybSBcIiR7cGxhdGZvcm19XCIsIGRlZmF1bHRpbmcgdG8gY2xhdWRlX2NvZGUgZm9ybWF0LiBTdXBwb3J0ZWQ6ICR7U1VQUE9SVEVEX1BMQVRGT1JNUy5qb2luKCcsICcpfWApO1xuICAgICAgfSkuY2F0Y2goKCkgPT4geyAvKiBsb2dnZXIgbm90IGF2YWlsYWJsZSAqLyB9KTtcbiAgICAgIHJldHVybiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uLCByZWFzb24pO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBDTEkgcGVybWlzc2lvbiByZXF1ZXN0IGZvciBQcmVUb29sVXNlIGhvb2tzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUb29sIG5hbWUsIGlucHV0LCBhbmQgdGFyZ2V0IHBsYXRmb3JtXG4gKiBAcGFyYW0gZGVwcyAtIEluamVjdGVkIGRlcGVuZGVuY2llcyBmcm9tIE1DUEFRTEhhbmRsZXJcbiAqIEByZXR1cm5zIFBsYXRmb3JtLWZvcm1hdHRlZCBwZXJtaXNzaW9uIGRlY2lzaW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsdWF0ZVBlcm1pc3Npb24oXG4gIHBhcmFtczogeyB0b29sX25hbWU/OiB1bmtub3duOyBpbnB1dD86IHVua25vd247IHBsYXRmb3JtPzogdW5rbm93biB9LFxuICBkZXBzOiBFdmFsdWF0ZVBlcm1pc3Npb25EZXBzLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCB0b29sTmFtZSA9IHR5cGVvZiBwYXJhbXMudG9vbF9uYW1lID09PSAnc3RyaW5nJyA/IHBhcmFtcy50b29sX25hbWUgOiAnJztcbiAgY29uc3QgaW5wdXRSYXcgPSBwYXJhbXMuaW5wdXQ7XG4gIGNvbnN0IGlucHV0ID0gKGlucHV0UmF3ICYmIHR5cGVvZiBpbnB1dFJhdyA9PT0gJ29iamVjdCcpXG4gICAgPyBpbnB1dFJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIDoge307XG4gIGNvbnN0IHBsYXRmb3JtID0gdHlwZW9mIHBhcmFtcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycgPyBwYXJhbXMucGxhdGZvcm0gOiAnY2xhdWRlX2NvZGUnO1xuXG4gIC8vIFJhdGUgbGltaXRcbiAgY29uc3QgcmF0ZVN0YXR1cyA9IGRlcHMucGVybWlzc2lvblByb21wdExpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuICBpZiAoIXJhdGVTdGF0dXMuYWxsb3dlZCkge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyk7XG4gIH1cbiAgZGVwcy5wZXJtaXNzaW9uUHJvbXB0TGltaXRlci5jb25zdW1lVG9rZW4oKTtcblxuICAvLyBTdGFnZSAxOiBTdGF0aWMgY2xhc3NpZmljYXRpb25cbiAgY29uc3QgY2xhc3NpZmljYXRpb24gPSBkZXBzLmNsYXNzaWZ5VG9vbCh0b29sTmFtZSwgaW5wdXQpO1xuICBpZiAoY2xhc3NpZmljYXRpb24uYmVoYXZpb3IgPT09ICdhbGxvdycpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG4gIH1cbiAgaWYgKGNsYXNzaWZpY2F0aW9uLmJlaGF2aW9yID09PSAnZGVueScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCBjbGFzc2lmaWNhdGlvbi5yZWFzb24pO1xuICB9XG5cbiAgLy8gU3RhZ2UgMjogRWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvblxuICBsZXQgZWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXTtcbiAgdHJ5IHtcbiAgICBlbGVtZW50cyA9IGF3YWl0IGRlcHMuZ2V0QWN0aXZlRWxlbWVudHMoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IFBlcm1pc3Npb25FdmFsdWF0aW9uRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGZldGNoIGFjdGl2ZSBlbGVtZW50cyBmb3IgcG9saWN5IGV2YWx1YXRpb246ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICAnZWxlbWVudF9mZXRjaCcsIHRvb2xOYW1lLCBlcnIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBkZWNpc2lvbiA9IGRlcHMuZXZhbHVhdGVDbGlUb29sUG9saWN5KHRvb2xOYW1lLCBpbnB1dCwgZWxlbWVudHMpO1xuXG4gIGlmIChkZWNpc2lvbi5iZWhhdmlvciA9PT0gJ2RlbnknKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgZGVjaXNpb24ubWVzc2FnZSk7XG4gIH1cbiAgaWYgKGRlY2lzaW9uLmJlaGF2aW9yID09PSAnY29uZmlybScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhc2snLCBwbGF0Zm9ybSwgaW5wdXQsXG4gICAgICBkZWNpc2lvbi5tZXNzYWdlIHx8ICdSZXF1aXJlcyBjb25maXJtYXRpb24gcGVyIGVsZW1lbnQgcG9saWN5Jyk7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBhbGxvd1xuICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG59XG4iXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFTLFlBQVksQ0FBQyxRQUFnQixFQUFFLE1BQWU7SUFDckQsT0FBTyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELDZDQUE2QztBQUM3QyxTQUFTLGNBQWMsQ0FBQyxRQUFnQixFQUFFLE1BQWU7SUFDdkQsT0FBTyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxLQUFLLE9BQU8sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCwrREFBK0Q7QUFDL0QsU0FBUyxXQUFXLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDcEgsQ0FBQztBQUVELHVGQUF1RjtBQUN2RixTQUFTLGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsTUFBZTtJQUN6RCxPQUFPO1FBQ0wsa0JBQWtCLEVBQUUsVUFBVSxDQUFDO1lBQzdCLGFBQWEsRUFBRSxZQUFZO1lBQzNCLGtCQUFrQixFQUFFLFFBQVE7U0FDN0IsRUFBRSxNQUFNLEVBQUUsMEJBQTBCLENBQUM7S0FDdkMsQ0FBQztBQUNKLENBQUM7QUFFRCxnQ0FBZ0M7QUFDaEMsTUFBTSxrQkFBa0IsR0FBbUY7SUFDekcsTUFBTSxFQUFFLFlBQVk7SUFDcEIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsUUFBUSxFQUFFLGNBQWM7SUFDeEIsS0FBSyxFQUFFLFdBQVc7SUFDbEIsV0FBVyxFQUFFLGdCQUFnQjtDQUM5QixDQUFDO0FBRUYsaUNBQWlDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUVuRSxTQUFTLHFCQUFxQixDQUFDLFFBQWdCO0lBQzdDLEtBQUssTUFBTSxDQUFDLHVCQUF1QixDQUFDO1NBQ2pDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtRQUNuQixNQUFNLENBQUMsSUFBSSxDQUNULDBDQUEwQyxRQUFRLG1EQUFtRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdEksQ0FBQztJQUNKLENBQUMsQ0FBQztTQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FDViwrRUFBK0UsUUFBUSxJQUFJLEVBQzNGLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLFFBQWtDLEVBQ2xDLFFBQWdCLEVBQ2hCLE1BQStCLEVBQy9CLE1BQWU7SUFFZixRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELEtBQUssVUFBVSxDQUFDLENBQUMsT0FBTyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELEtBQUssYUFBYSxDQUFDLENBQUMsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUQ7WUFDRSxpRUFBaUU7WUFDakUscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEMsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxNQUEwRixFQUMxRixJQUE0QjtJQUU1QixNQUFNLFFBQVEsR0FBRyxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUM5QixNQUFNLEtBQUssR0FBRyxDQUFDLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUM7UUFDdEQsQ0FBQyxDQUFDLFFBQW1DO1FBQ3JDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxNQUFNLFFBQVEsR0FBRyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDdkYsTUFBTSxTQUFTLEdBQUcsT0FBTyxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDeEYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ25CLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFZCxhQUFhO0lBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsT0FBTyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUMsaUNBQWlDO0lBQ2pDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFELElBQUksY0FBYyxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN4QyxPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxPQUFPLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLElBQUksUUFBeUIsQ0FBQztJQUM5QixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUkseUJBQXlCLENBQ2pDLDBEQUEwRCxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFDNUcsZUFBZSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQy9CLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdkUsSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDcEMsT0FBTyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFDcEQsUUFBUSxDQUFDLE9BQU8sSUFBSSwwQ0FBMEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsT0FBTyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcm1pc3Npb24gZXZhbHVhdGlvbiBmb3IgUHJlVG9vbFVzZSBob29rcyBhY3Jvc3MgYWxsIEFJIHBsYXRmb3Jtcy5cbiAqXG4gKiBQcm92aWRlcyB0aGUgYGV2YWx1YXRlX3Blcm1pc3Npb25gIE1DUC1BUUwgUkVBRCBvcGVyYXRpb24sIGVuYWJsaW5nXG4gKiBDbGF1ZGUgQ29kZSwgQ3Vyc29yLCBHZW1pbmkgQ0xJLCBXaW5kc3VyZiwgYW5kIENvZGV4IHRvIHVzZVxuICogRG9sbGhvdXNlTUNQIGFzIHRoZWlyIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBiYWNrZW5kIHZpYSBob29rcy5cbiAqXG4gKiBUaHJlZS1zdGFnZSBldmFsdWF0aW9uIHBpcGVsaW5lOlxuICogMS4gUmF0ZSBsaW1pdGluZyDigJQgcHJldmVudHMgYWJ1c2VcbiAqIDIuIFN0YXRpYyB0b29sIGNsYXNzaWZpY2F0aW9uIOKAlCBidWlsdC1pbiBhbGxvdy9kZW55IHJ1bGVzXG4gKiAzLiBFbGVtZW50IHBvbGljeSBldmFsdWF0aW9uIOKAlCBhY3RpdmUgZWxlbWVudCBnYXRla2VlcGVyIHBvbGljaWVzXG4gKlxuICogUmV0dXJucyBwbGF0Zm9ybS1zcGVjaWZpYyByZXNwb25zZSBmb3JtYXRzIHNvIGVhY2ggcGxhdGZvcm0ncyBob29rXG4gKiBzY3JpcHQgcmVjZWl2ZXMgdGhlIEpTT04gc2hhcGUgaXQgZXhwZWN0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvUmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBUb29sQ2xhc3NpZmljYXRpb25SZXN1bHQsIENsaVRvb2xQb2xpY3lSZXN1bHQgfSBmcm9tICcuL3BvbGljaWVzL1Rvb2xDbGFzc2lmaWNhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5cbi8qKiBFcnJvciB0aHJvd24gd2hlbiBwZXJtaXNzaW9uIGV2YWx1YXRpb24gZmFpbHMgYXQgYSBzcGVjaWZpYyBzdGFnZSAqL1xuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25FdmFsdWF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnO1xuICBwdWJsaWMgcmVhZG9ubHkgdG9vbE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhZ2U6ICdyYXRlX2xpbWl0JyB8ICdjbGFzc2lmaWNhdGlvbicgfCAncG9saWN5JyB8ICdlbGVtZW50X2ZldGNoJyxcbiAgICB0b29sTmFtZTogc3RyaW5nLFxuICAgIGNhdXNlPzogdW5rbm93bixcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgY2F1c2UgPyB7IGNhdXNlIH0gOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZSA9ICdQZXJtaXNzaW9uRXZhbHVhdGlvbkVycm9yJztcbiAgICB0aGlzLnN0YWdlID0gc3RhZ2U7XG4gICAgdGhpcy50b29sTmFtZSA9IHRvb2xOYW1lO1xuICB9XG59XG5cbi8qKiBEZXBlbmRlbmNpZXMgaW5qZWN0ZWQgZnJvbSBNQ1BBUUxIYW5kbGVyICovXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRlUGVybWlzc2lvbkRlcHMge1xuICBwZXJtaXNzaW9uUHJvbXB0TGltaXRlcjogUmF0ZUxpbWl0ZXI7XG4gIGNsYXNzaWZ5VG9vbDogKHRvb2xOYW1lOiBzdHJpbmcsIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdDtcbiAgZXZhbHVhdGVDbGlUb29sUG9saWN5OiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXSkgPT4gQ2xpVG9vbFBvbGljeVJlc3VsdDtcbiAgZ2V0QWN0aXZlRWxlbWVudHM6IChzZXNzaW9uSWQ/OiBzdHJpbmcpID0+IFByb21pc2U8QWN0aXZlRWxlbWVudFtdPjtcbn1cblxuLyoqIE9wdGlvbmFsIHJlYXNvbiBmaWVsZCwgb25seSBpbmNsdWRlZCB3aGVuIHJlYXNvbiBpcyBwcm92aWRlZCAqL1xuZnVuY3Rpb24gd2l0aFJlYXNvbihvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCByZWFzb24/OiBzdHJpbmcsIGtleSA9ICdyZWFzb24nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gcmVhc29uID8geyAuLi5vYmosIFtrZXldOiByZWFzb24gfSA6IG9iajtcbn1cblxuLyoqIEdlbWluaTogbWFwcyAnYXNrJyB0byAnZGVueScgKG5vIGludGVyYWN0aXZlIHN1cHBvcnQpICovXG5mdW5jdGlvbiBmb3JtYXRHZW1pbmkoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFJlYXNvbih7IGRlY2lzaW9uOiBkZWNpc2lvbiA9PT0gJ2FzaycgPyAnZGVueScgOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogQ3Vyc29yOiB1c2VzICdwZXJtaXNzaW9uJyBmaWVsZCBpbnN0ZWFkIG9mICdkZWNpc2lvbicgKi9cbmZ1bmN0aW9uIGZvcm1hdEN1cnNvcihkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgcGVybWlzc2lvbjogZGVjaXNpb24gfSwgcmVhc29uKTtcbn1cblxuLyoqIFdpbmRzdXJmOiB1c2VzIGJvb2xlYW4gJ2FsbG93ZWQnIGZpZWxkICovXG5mdW5jdGlvbiBmb3JtYXRXaW5kc3VyZihkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgYWxsb3dlZDogZGVjaXNpb24gPT09ICdhbGxvdycgfSwgcmVhc29uKTtcbn1cblxuLyoqIENvZGV4OiB3cmFwcyBpbiBob29rU3BlY2lmaWNPdXRwdXQsIG1hcHMgJ2FzaycgdG8gJ2RlbnknICovXG5mdW5jdGlvbiBmb3JtYXRDb2RleChkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7IGhvb2tTcGVjaWZpY091dHB1dDogd2l0aFJlYXNvbih7IHBlcm1pc3Npb25EZWNpc2lvbjogZGVjaXNpb24gPT09ICdhc2snID8gJ2RlbnknIDogZGVjaXNpb24gfSwgcmVhc29uKSB9O1xufVxuXG4vKiogQ2xhdWRlIENvZGUgKGRlZmF1bHQpOiB1c2VzIGhvb2tTcGVjaWZpY091dHB1dC5wZXJtaXNzaW9uRGVjaXNpb24gZm9yIFByZVRvb2xVc2UgKi9cbmZ1bmN0aW9uIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIGhvb2tTcGVjaWZpY091dHB1dDogd2l0aFJlYXNvbih7XG4gICAgICBob29rRXZlbnROYW1lOiAnUHJlVG9vbFVzZScsXG4gICAgICBwZXJtaXNzaW9uRGVjaXNpb246IGRlY2lzaW9uLFxuICAgIH0sIHJlYXNvbiwgJ3Blcm1pc3Npb25EZWNpc2lvblJlYXNvbicpLFxuICB9O1xufVxuXG4vKiogUGxhdGZvcm0gZm9ybWF0dGVyIGxvb2t1cCAqL1xuY29uc3QgcGxhdGZvcm1Gb3JtYXR0ZXJzOiBSZWNvcmQ8c3RyaW5nLCAoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7XG4gIGdlbWluaTogZm9ybWF0R2VtaW5pLFxuICBjdXJzb3I6IGZvcm1hdEN1cnNvcixcbiAgd2luZHN1cmY6IGZvcm1hdFdpbmRzdXJmLFxuICBjb2RleDogZm9ybWF0Q29kZXgsXG4gIGNsYXVkZV9jb2RlOiBmb3JtYXRDbGF1ZGVDb2RlLFxufTtcblxuLyoqIEtub3duIHBsYXRmb3JtIGlkZW50aWZpZXJzICovXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX1BMQVRGT1JNUyA9IE9iamVjdC5rZXlzKHBsYXRmb3JtRm9ybWF0dGVycyk7XG5cbmZ1bmN0aW9uIHdhcm5PblVua25vd25QbGF0Zm9ybShwbGF0Zm9ybTogc3RyaW5nKTogdm9pZCB7XG4gIHZvaWQgaW1wb3J0KCcuLi8uLi91dGlscy9sb2dnZXIuanMnKVxuICAgIC50aGVuKCh7IGxvZ2dlciB9KSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYFtldmFsdWF0ZVBlcm1pc3Npb25dIFVua25vd24gcGxhdGZvcm0gXCIke3BsYXRmb3JtfVwiLCBkZWZhdWx0aW5nIHRvIGNsYXVkZV9jb2RlIGZvcm1hdC4gU3VwcG9ydGVkOiAke1NVUFBPUlRFRF9QTEFURk9STVMuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtldmFsdWF0ZVBlcm1pc3Npb25dIEZhaWxlZCB0byBsb2FkIGxvZ2dlciB3aGlsZSBoYW5kbGluZyB1bmtub3duIHBsYXRmb3JtIFwiJHtwbGF0Zm9ybX1cIi5gLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRm9ybWF0IHBlcm1pc3Npb24gZXZhbHVhdGlvbiByZXNwb25zZSBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgaG9vayBzY3JpcHRzLlxuICogRWFjaCBwbGF0Zm9ybSBleHBlY3RzIGEgZGlmZmVyZW50IEpTT04gc2hhcGUgZnJvbSBpdHMgaG9vayByZXNwb25zZS5cbiAqXG4gKiBVbmtub3duIHBsYXRmb3JtcyBkZWZhdWx0IHRvIGNsYXVkZV9jb2RlIGZvcm1hdCB3aXRoIGEgd2FybmluZyBsb2cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoXG4gIGRlY2lzaW9uOiAnYWxsb3cnIHwgJ2RlbnknIHwgJ2FzaycsXG4gIHBsYXRmb3JtOiBzdHJpbmcsXG4gIF9pbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHJlYXNvbj86IHN0cmluZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgIGNhc2UgJ2dlbWluaSc6IHJldHVybiBmb3JtYXRHZW1pbmkoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY3Vyc29yJzogcmV0dXJuIGZvcm1hdEN1cnNvcihkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICd3aW5kc3VyZic6IHJldHVybiBmb3JtYXRXaW5kc3VyZihkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjb2RleCc6IHJldHVybiBmb3JtYXRDb2RleChkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjbGF1ZGVfY29kZSc6IHJldHVybiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBJbXBvcnQgbGF6aWx5IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgYXQgbW9kdWxlIGxvYWQgdGltZVxuICAgICAgd2Fybk9uVW5rbm93blBsYXRmb3JtKHBsYXRmb3JtKTtcbiAgICAgIHJldHVybiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uLCByZWFzb24pO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBDTEkgcGVybWlzc2lvbiByZXF1ZXN0IGZvciBQcmVUb29sVXNlIGhvb2tzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUb29sIG5hbWUsIGlucHV0LCBhbmQgdGFyZ2V0IHBsYXRmb3JtXG4gKiBAcGFyYW0gZGVwcyAtIEluamVjdGVkIGRlcGVuZGVuY2llcyBmcm9tIE1DUEFRTEhhbmRsZXJcbiAqIEByZXR1cm5zIFBsYXRmb3JtLWZvcm1hdHRlZCBwZXJtaXNzaW9uIGRlY2lzaW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsdWF0ZVBlcm1pc3Npb24oXG4gIHBhcmFtczogeyB0b29sX25hbWU/OiB1bmtub3duOyBpbnB1dD86IHVua25vd247IHBsYXRmb3JtPzogdW5rbm93bjsgc2Vzc2lvbl9pZD86IHVua25vd24gfSxcbiAgZGVwczogRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgdG9vbE5hbWUgPSB0eXBlb2YgcGFyYW1zLnRvb2xfbmFtZSA9PT0gJ3N0cmluZycgPyBwYXJhbXMudG9vbF9uYW1lIDogJyc7XG4gIGNvbnN0IGlucHV0UmF3ID0gcGFyYW1zLmlucHV0O1xuICBjb25zdCBpbnB1dCA9IChpbnB1dFJhdyAmJiB0eXBlb2YgaW5wdXRSYXcgPT09ICdvYmplY3QnKVxuICAgID8gaW5wdXRSYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICA6IHt9O1xuICBjb25zdCBwbGF0Zm9ybSA9IHR5cGVvZiBwYXJhbXMucGxhdGZvcm0gPT09ICdzdHJpbmcnID8gcGFyYW1zLnBsYXRmb3JtIDogJ2NsYXVkZV9jb2RlJztcbiAgY29uc3Qgc2Vzc2lvbklkID0gdHlwZW9mIHBhcmFtcy5zZXNzaW9uX2lkID09PSAnc3RyaW5nJyAmJiBwYXJhbXMuc2Vzc2lvbl9pZC50cmltKCkgIT09ICcnXG4gICAgPyBwYXJhbXMuc2Vzc2lvbl9pZFxuICAgIDogdW5kZWZpbmVkO1xuXG4gIC8vIFJhdGUgbGltaXRcbiAgY29uc3QgcmF0ZVN0YXR1cyA9IGRlcHMucGVybWlzc2lvblByb21wdExpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuICBpZiAoIXJhdGVTdGF0dXMuYWxsb3dlZCkge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyk7XG4gIH1cbiAgZGVwcy5wZXJtaXNzaW9uUHJvbXB0TGltaXRlci5jb25zdW1lVG9rZW4oKTtcblxuICAvLyBTdGFnZSAxOiBTdGF0aWMgY2xhc3NpZmljYXRpb25cbiAgY29uc3QgY2xhc3NpZmljYXRpb24gPSBkZXBzLmNsYXNzaWZ5VG9vbCh0b29sTmFtZSwgaW5wdXQpO1xuICBpZiAoY2xhc3NpZmljYXRpb24uYmVoYXZpb3IgPT09ICdhbGxvdycpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG4gIH1cbiAgaWYgKGNsYXNzaWZpY2F0aW9uLmJlaGF2aW9yID09PSAnZGVueScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCBjbGFzc2lmaWNhdGlvbi5yZWFzb24pO1xuICB9XG5cbiAgLy8gU3RhZ2UgMjogRWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvblxuICBsZXQgZWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXTtcbiAgdHJ5IHtcbiAgICBlbGVtZW50cyA9IGF3YWl0IGRlcHMuZ2V0QWN0aXZlRWxlbWVudHMoc2Vzc2lvbklkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IFBlcm1pc3Npb25FdmFsdWF0aW9uRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGZldGNoIGFjdGl2ZSBlbGVtZW50cyBmb3IgcG9saWN5IGV2YWx1YXRpb246ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICAnZWxlbWVudF9mZXRjaCcsIHRvb2xOYW1lLCBlcnIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBkZWNpc2lvbiA9IGRlcHMuZXZhbHVhdGVDbGlUb29sUG9saWN5KHRvb2xOYW1lLCBpbnB1dCwgZWxlbWVudHMpO1xuXG4gIGlmIChkZWNpc2lvbi5iZWhhdmlvciA9PT0gJ2RlbnknKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgZGVjaXNpb24ubWVzc2FnZSk7XG4gIH1cbiAgaWYgKGRlY2lzaW9uLmJlaGF2aW9yID09PSAnY29uZmlybScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhc2snLCBwbGF0Zm9ybSwgaW5wdXQsXG4gICAgICBkZWNpc2lvbi5tZXNzYWdlIHx8ICdSZXF1aXJlcyBjb25maXJtYXRpb24gcGVyIGVsZW1lbnQgcG9saWN5Jyk7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBhbGxvd1xuICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"BaseActivationStrategy.d.ts","sourceRoot":"","sources":["../../../src/handlers/strategies/BaseActivationStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D;;GAEG;AACH,8BAAsB,sBAAsB;IAC1C;;;;;OAKG;cACa,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAInF;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAS3D;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAS7D;;;;;;;;;;OAUG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK;IAI/D;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW;IAKzE;;;;;;;;OAQG;IACH,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CA4B9E"}
1
+ {"version":3,"file":"BaseActivationStrategy.d.ts","sourceRoot":"","sources":["../../../src/handlers/strategies/BaseActivationStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAG7D;;GAEG;AACH,8BAAsB,sBAAsB;IAC1C;;;;;OAKG;cACa,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAInF;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAS3D;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAS7D;;;;;;;;;;OAUG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK;IAI/D;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW;IAKzE;;;;;;;;OAQG;IACH,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAsC9E"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { findElementFlexibly as findHelper } from '../element-crud/helpers.js';
9
9
  import { ElementNotFoundError } from '../../utils/ErrorHandler.js';
10
+ import { getPermissionHookStatus } from '../../utils/permissionHooks.js';
10
11
  /**
11
12
  * Base class with shared utilities for activation strategies
12
13
  */
@@ -83,7 +84,10 @@ export class BaseActivationStrategy {
83
84
  const restrictions = gatekeeper?.externalRestrictions;
84
85
  if (!restrictions)
85
86
  return '';
86
- const parts = ['\n---\n**CLI Restrictions Active:**'];
87
+ const hookStatus = getPermissionHookStatus();
88
+ const parts = [hookStatus.installed
89
+ ? '\n---\n**CLI Policies Loaded:**'
90
+ : '\n---\n**CLI Policies Loaded (Hook Not Detected):**'];
87
91
  if (restrictions.description) {
88
92
  parts.push(`> ${restrictions.description}`);
89
93
  }
@@ -103,8 +107,13 @@ export class BaseActivationStrategy {
103
107
  parts.push(`> Requires approval for: ${requireApproval.join(', ')} risk tools`);
104
108
  }
105
109
  parts.push('> Use `get_effective_cli_policies` to see combined policy state.');
106
- parts.push('> NOTE: These restrictions require the CLI client to be launched with `--permission-prompt-tool` to be enforced.');
110
+ if (hookStatus.installed) {
111
+ parts.push(`> Permission hook detected for ${hookStatus.host ?? 'this client'}. Enforcement depends on using that client configuration.`);
112
+ }
113
+ else {
114
+ parts.push('> No permission hook detected. These policies are not automatically enforced unless the CLI is launched with `--permission-prompt-tool`.', '> Run `open_setup` and reinstall to wire automatic enforcement.');
115
+ }
107
116
  return parts.join('\n');
108
117
  }
109
118
  }
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUFjdGl2YXRpb25TdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9zdHJhdGVnaWVzL0Jhc2VBY3RpdmF0aW9uU3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixJQUFJLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR25FOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixzQkFBc0I7SUFDMUM7Ozs7O09BS0c7SUFDTyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBWSxFQUFFLFdBQWtCO1FBQ2xFLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLG1CQUFtQixDQUFDLE9BQWU7UUFDM0MsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxPQUFPO2lCQUNkLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxxQkFBcUIsQ0FBQyxPQUFlO1FBQzdDLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsT0FBTztpQkFDZCxDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ08sa0JBQWtCLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDckQsTUFBTSxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLHNCQUFzQixDQUFDLElBQVksRUFBRSxJQUFZO1FBQ3pELHNGQUFzRjtRQUN0RixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLGFBQWEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLHdCQUF3QixDQUFDLFFBQWlDO1FBQ2xFLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxVQUFpRCxDQUFDO1FBQy9FLE1BQU0sWUFBWSxHQUFHLFVBQVUsRUFBRSxvQkFBMkQsQ0FBQztRQUM3RixJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTdCLE1BQU0sS0FBSyxHQUFhLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxZQUFvQyxDQUFDO1FBQ3ZFLElBQUksWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFxQyxDQUFDO1FBQ3pFLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRCxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixLQUFLLEdBQUcsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLGNBQXFELENBQUM7UUFDMUYsTUFBTSxlQUFlLEdBQUcsY0FBYyxFQUFFLGVBQXVDLENBQUM7UUFDaEYsSUFBSSxlQUFlLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztRQUMvRSxLQUFLLENBQUMsSUFBSSxDQUFDLGtIQUFrSCxDQUFDLENBQUM7UUFDL0gsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQmFzZUFjdGl2YXRpb25TdHJhdGVneSAtIFNoYXJlZCBmdW5jdGlvbmFsaXR5IGZvciBhbGwgYWN0aXZhdGlvbiBzdHJhdGVnaWVzXG4gKlxuICogUHJvdmlkZXMgY29tbW9uIGhlbHBlciBtZXRob2RzIHVzZWQgYnkgbXVsdGlwbGUgc3RyYXRlZ3kgaW1wbGVtZW50YXRpb25zOlxuICogLSBGbGV4aWJsZSBlbGVtZW50IGZpbmRpbmcgKGJ5IG5hbWUgb3IgZmlsZW5hbWUpXG4gKiAtIEVycm9yIHJlc3BvbnNlIGZvcm1hdHRpbmdcbiAqL1xuXG5pbXBvcnQgeyBmaW5kRWxlbWVudEZsZXhpYmx5IGFzIGZpbmRIZWxwZXIgfSBmcm9tICcuLi9lbGVtZW50LWNydWQvaGVscGVycy5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Tm90Rm91bmRFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBNQ1BSZXNwb25zZSB9IGZyb20gJy4vRWxlbWVudEFjdGl2YXRpb25TdHJhdGVneS5qcyc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyB3aXRoIHNoYXJlZCB1dGlsaXRpZXMgZm9yIGFjdGl2YXRpb24gc3RyYXRlZ2llc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUFjdGl2YXRpb25TdHJhdGVneSB7XG4gIC8qKlxuICAgKiBGaW5kIGFuIGVsZW1lbnQgYnkgbmFtZSwgc3VwcG9ydGluZyBib3RoIGV4YWN0IGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWUgKHNsdWcpIG1hdGNoaW5nXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb3IgZmlsZW5hbWUgdG8gc2VhcmNoIGZvclxuICAgKiBAcGFyYW0gZWxlbWVudExpc3QgLSBMaXN0IG9mIGVsZW1lbnRzIHRvIHNlYXJjaCB0aHJvdWdoXG4gICAqIEByZXR1cm5zIFRoZSBmb3VuZCBlbGVtZW50IG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGZpbmRFbGVtZW50RmxleGlibHkobmFtZTogc3RyaW5nLCBlbGVtZW50TGlzdDogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBmaW5kSGVscGVyKG5hbWUsIGVsZW1lbnRMaXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFuZGFyZCBlcnJvciByZXNwb25zZVxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlXG4gICAqIEByZXR1cm5zIE1DUC1mb3JtYXR0ZWQgZXJyb3IgcmVzcG9uc2VcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVFcnJvclJlc3BvbnNlKG1lc3NhZ2U6IHN0cmluZyk6IE1DUFJlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2VcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFuZGFyZCBzdWNjZXNzIHJlc3BvbnNlXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIHN1Y2Nlc3MgbWVzc2FnZVxuICAgKiBAcmV0dXJucyBNQ1AtZm9ybWF0dGVkIHN1Y2Nlc3MgcmVzcG9uc2VcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVTdWNjZXNzUmVzcG9uc2UobWVzc2FnZTogc3RyaW5nKTogTUNQUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogbWVzc2FnZVxuICAgICAgfV1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93IGFuIEVsZW1lbnROb3RGb3VuZEVycm9yIGZvciBtaXNzaW5nIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUaGlzIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBjcmVhdGVOb3RGb3VuZFJlc3BvbnNlIHdoaWNoIHJldHVybmVkIGEgc3VjY2Vzc1xuICAgKiByZXNwb25zZSB3aXRoIGVycm9yIHRleHQuIE5vdyB3ZSB0aHJvdyB0byBlbnN1cmUgTUNQLUFRTCByZXR1cm5zIHN1Y2Nlc3M9ZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdGhhdCB3YXNuJ3QgZm91bmRcbiAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiBlbGVtZW50IChmb3IgZXJyb3IgbWVzc2FnZSlcbiAgICogQHRocm93cyB7RWxlbWVudE5vdEZvdW5kRXJyb3J9IEFsd2F5cyB0aHJvd3NcbiAgICogQHNlZSBJc3N1ZSAjMjc1IC0gSGFuZGxlcnMgcmV0dXJuIHN1Y2Nlc3M9dHJ1ZSBmb3IgbWlzc2luZyBlbGVtZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHRocm93Tm90Rm91bmRFcnJvcihuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRWxlbWVudE5vdEZvdW5kRXJyb3IodHlwZSwgbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRocm93Tm90Rm91bmRFcnJvciBpbnN0ZWFkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdWNjZXNzIHJlc3BvbnNlIHdoaWNoIGNhdXNlcyBNQ1AtQVFMIHRvIHJldHVybiBzdWNjZXNzPXRydWUuXG4gICAqIEBzZWUgSXNzdWUgIzI3NSAtIEhhbmRsZXJzIHJldHVybiBzdWNjZXNzPXRydWUgZm9yIG1pc3NpbmcgZWxlbWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVOb3RGb3VuZFJlc3BvbnNlKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogTUNQUmVzcG9uc2Uge1xuICAgIC8vIEtlZXAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYnV0IHN0cmF0ZWdpZXMgc2hvdWxkIG1pZ3JhdGUgdG8gdGhyb3dOb3RGb3VuZEVycm9yXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRXJyb3JSZXNwb25zZShg4p2MICR7dHlwZX0gJyR7bmFtZX0nIG5vdCBmb3VuZGApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBhIGZhaWwtc2FmZSB3YXJuaW5nIGZvciBlbGVtZW50cyB3aXRoIENMSSBleHRlcm5hbCByZXN0cmljdGlvbnMuXG4gICAqIEFwcGVuZGVkIHRvIGFjdGl2YXRpb24gdGV4dCBzbyB1c2VycyBhcmUgYXdhcmUgb2YgcmVzdHJpY3Rpb25zIGV2ZW4gd2hlblxuICAgKiBwZXJtaXNzaW9uX3Byb21wdCBpcyBub3QgYXZhaWxhYmxlIChub24tQ2xhdWRlLUNvZGUgY2xpZW50cykuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRhZGF0YSAtIEVsZW1lbnQgbWV0YWRhdGEgKG1heSBjb250YWluIGdhdGVrZWVwZXIuZXh0ZXJuYWxSZXN0cmljdGlvbnMpXG4gICAqIEByZXR1cm5zIFdhcm5pbmcgdGV4dCBvciBlbXB0eSBzdHJpbmcgaWYgbm8gcmVzdHJpY3Rpb25zXG4gICAqIEBzZWUgSXNzdWUgIzY0MiDigJQgRmFpbC1zYWZlIGVuZm9yY2VtZW50IGZvciBleHRlcm5hbFJlc3RyaWN0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdFJlc3RyaWN0aW9uV2FybmluZyhtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGdhdGVrZWVwZXIgPSBtZXRhZGF0YT8uZ2F0ZWtlZXBlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN0cmljdGlvbnMgPSBnYXRla2VlcGVyPy5leHRlcm5hbFJlc3RyaWN0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXJlc3RyaWN0aW9ucykgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gWydcXG4tLS1cXG4qKkNMSSBSZXN0cmljdGlvbnMgQWN0aXZlOioqJ107XG4gICAgaWYgKHJlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbikge1xuICAgICAgcGFydHMucHVzaChgPiAke3Jlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbn1gKTtcbiAgICB9XG4gICAgY29uc3QgZGVueVBhdHRlcm5zID0gcmVzdHJpY3Rpb25zLmRlbnlQYXR0ZXJucyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZGVueVBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNob3duID0gZGVueVBhdHRlcm5zLnNsaWNlKDAsIDUpLmpvaW4oJywgJyk7XG4gICAgICBwYXJ0cy5wdXNoKGA+IERlbmllZDogJHtzaG93bn0ke2RlbnlQYXR0ZXJucy5sZW5ndGggPiA1ID8gJy4uLicgOiAnJ31gKTtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IHJlc3RyaWN0aW9ucy5hbGxvd1BhdHRlcm5zIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGlmIChhbGxvd1BhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNob3duID0gYWxsb3dQYXR0ZXJucy5zbGljZSgwLCA1KS5qb2luKCcsICcpO1xuICAgICAgcGFydHMucHVzaChgPiBBbGxvd2VkIG9ubHk6ICR7c2hvd259JHthbGxvd1BhdHRlcm5zLmxlbmd0aCA+IDUgPyAnLi4uJyA6ICcnfWApO1xuICAgIH1cbiAgICBjb25zdCBhcHByb3ZhbFBvbGljeSA9IHJlc3RyaWN0aW9ucy5hcHByb3ZhbFBvbGljeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXF1aXJlQXBwcm92YWwgPSBhcHByb3ZhbFBvbGljeT8ucmVxdWlyZUFwcHJvdmFsIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1aXJlQXBwcm92YWw/Lmxlbmd0aCkge1xuICAgICAgcGFydHMucHVzaChgPiBSZXF1aXJlcyBhcHByb3ZhbCBmb3I6ICR7cmVxdWlyZUFwcHJvdmFsLmpvaW4oJywgJyl9IHJpc2sgdG9vbHNgKTtcbiAgICB9XG4gICAgcGFydHMucHVzaCgnPiBVc2UgYGdldF9lZmZlY3RpdmVfY2xpX3BvbGljaWVzYCB0byBzZWUgY29tYmluZWQgcG9saWN5IHN0YXRlLicpO1xuICAgIHBhcnRzLnB1c2goJz4gTk9URTogVGhlc2UgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhlIENMSSBjbGllbnQgdG8gYmUgbGF1bmNoZWQgd2l0aCBgLS1wZXJtaXNzaW9uLXByb21wdC10b29sYCB0byBiZSBlbmZvcmNlZC4nKTtcbiAgICByZXR1cm4gcGFydHMuam9pbignXFxuJyk7XG4gIH1cbn1cbiJdfQ==
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUFjdGl2YXRpb25TdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9zdHJhdGVnaWVzL0Jhc2VBY3RpdmF0aW9uU3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixJQUFJLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRW5FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpFOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixzQkFBc0I7SUFDMUM7Ozs7O09BS0c7SUFDTyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBWSxFQUFFLFdBQWtCO1FBQ2xFLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLG1CQUFtQixDQUFDLE9BQWU7UUFDM0MsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxPQUFPO2lCQUNkLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxxQkFBcUIsQ0FBQyxPQUFlO1FBQzdDLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsT0FBTztpQkFDZCxDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ08sa0JBQWtCLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDckQsTUFBTSxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLHNCQUFzQixDQUFDLElBQVksRUFBRSxJQUFZO1FBQ3pELHNGQUFzRjtRQUN0RixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLGFBQWEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLHdCQUF3QixDQUFDLFFBQWlDO1FBQ2xFLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxVQUFpRCxDQUFDO1FBQy9FLE1BQU0sWUFBWSxHQUFHLFVBQVUsRUFBRSxvQkFBMkQsQ0FBQztRQUM3RixJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTdCLE1BQU0sVUFBVSxHQUFHLHVCQUF1QixFQUFFLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUztnQkFDM0MsQ0FBQyxDQUFDLGlDQUFpQztnQkFDbkMsQ0FBQyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDM0QsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBb0MsQ0FBQztRQUN2RSxJQUFJLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBcUMsQ0FBQztRQUN6RSxJQUFJLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMxQixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxjQUFxRCxDQUFDO1FBQzFGLE1BQU0sZUFBZSxHQUFHLGNBQWMsRUFBRSxlQUF1QyxDQUFDO1FBQ2hGLElBQUksZUFBZSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7UUFDL0UsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsVUFBVSxDQUFDLElBQUksSUFBSSxhQUFhLDJEQUEyRCxDQUFDLENBQUM7UUFDNUksQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsSUFBSSxDQUNSLDBJQUEwSSxFQUMxSSxpRUFBaUUsQ0FDbEUsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCYXNlQWN0aXZhdGlvblN0cmF0ZWd5IC0gU2hhcmVkIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCBhY3RpdmF0aW9uIHN0cmF0ZWdpZXNcbiAqXG4gKiBQcm92aWRlcyBjb21tb24gaGVscGVyIG1ldGhvZHMgdXNlZCBieSBtdWx0aXBsZSBzdHJhdGVneSBpbXBsZW1lbnRhdGlvbnM6XG4gKiAtIEZsZXhpYmxlIGVsZW1lbnQgZmluZGluZyAoYnkgbmFtZSBvciBmaWxlbmFtZSlcbiAqIC0gRXJyb3IgcmVzcG9uc2UgZm9ybWF0dGluZ1xuICovXG5cbmltcG9ydCB7IGZpbmRFbGVtZW50RmxleGlibHkgYXMgZmluZEhlbHBlciB9IGZyb20gJy4uL2VsZW1lbnQtY3J1ZC9oZWxwZXJzLmpzJztcbmltcG9ydCB7IEVsZW1lbnROb3RGb3VuZEVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IE1DUFJlc3BvbnNlIH0gZnJvbSAnLi9FbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5LmpzJztcbmltcG9ydCB7IGdldFBlcm1pc3Npb25Ib29rU3RhdHVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcGVybWlzc2lvbkhvb2tzLmpzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIHdpdGggc2hhcmVkIHV0aWxpdGllcyBmb3IgYWN0aXZhdGlvbiBzdHJhdGVnaWVzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQWN0aXZhdGlvblN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIEZpbmQgYW4gZWxlbWVudCBieSBuYW1lLCBzdXBwb3J0aW5nIGJvdGggZXhhY3QgZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZSAoc2x1ZykgbWF0Y2hpbmdcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvciBmaWxlbmFtZSB0byBzZWFyY2ggZm9yXG4gICAqIEBwYXJhbSBlbGVtZW50TGlzdCAtIExpc3Qgb2YgZWxlbWVudHMgdG8gc2VhcmNoIHRocm91Z2hcbiAgICogQHJldHVybnMgVGhlIGZvdW5kIGVsZW1lbnQgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZmluZEVsZW1lbnRGbGV4aWJseShuYW1lOiBzdHJpbmcsIGVsZW1lbnRMaXN0OiBhbnlbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGZpbmRIZWxwZXIobmFtZSwgZWxlbWVudExpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHN0YW5kYXJkIGVycm9yIHJlc3BvbnNlXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGVycm9yIG1lc3NhZ2VcbiAgICogQHJldHVybnMgTUNQLWZvcm1hdHRlZCBlcnJvciByZXNwb25zZVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUVycm9yUmVzcG9uc2UobWVzc2FnZTogc3RyaW5nKTogTUNQUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogbWVzc2FnZVxuICAgICAgfV1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHN0YW5kYXJkIHN1Y2Nlc3MgcmVzcG9uc2VcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgc3VjY2VzcyBtZXNzYWdlXG4gICAqIEByZXR1cm5zIE1DUC1mb3JtYXR0ZWQgc3VjY2VzcyByZXNwb25zZVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1Y2Nlc3NSZXNwb25zZShtZXNzYWdlOiBzdHJpbmcpOiBNQ1BSZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlXG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhyb3cgYW4gRWxlbWVudE5vdEZvdW5kRXJyb3IgZm9yIG1pc3NpbmcgZWxlbWVudHMuXG4gICAqXG4gICAqIFRoaXMgcmVwbGFjZXMgdGhlIHByZXZpb3VzIGNyZWF0ZU5vdEZvdW5kUmVzcG9uc2Ugd2hpY2ggcmV0dXJuZWQgYSBzdWNjZXNzXG4gICAqIHJlc3BvbnNlIHdpdGggZXJyb3IgdGV4dC4gTm93IHdlIHRocm93IHRvIGVuc3VyZSBNQ1AtQVFMIHJldHVybnMgc3VjY2Vzcz1mYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0aGF0IHdhc24ndCBmb3VuZFxuICAgKiBAcGFyYW0gdHlwZSAtIFRoZSB0eXBlIG9mIGVsZW1lbnQgKGZvciBlcnJvciBtZXNzYWdlKVxuICAgKiBAdGhyb3dzIHtFbGVtZW50Tm90Rm91bmRFcnJvcn0gQWx3YXlzIHRocm93c1xuICAgKiBAc2VlIElzc3VlICMyNzUgLSBIYW5kbGVycyByZXR1cm4gc3VjY2Vzcz10cnVlIGZvciBtaXNzaW5nIGVsZW1lbnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgdGhyb3dOb3RGb3VuZEVycm9yKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFbGVtZW50Tm90Rm91bmRFcnJvcih0eXBlLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhyb3dOb3RGb3VuZEVycm9yIGluc3RlYWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy5cbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHN1Y2Nlc3MgcmVzcG9uc2Ugd2hpY2ggY2F1c2VzIE1DUC1BUUwgdG8gcmV0dXJuIHN1Y2Nlc3M9dHJ1ZS5cbiAgICogQHNlZSBJc3N1ZSAjMjc1IC0gSGFuZGxlcnMgcmV0dXJuIHN1Y2Nlc3M9dHJ1ZSBmb3IgbWlzc2luZyBlbGVtZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZU5vdEZvdW5kUmVzcG9uc2UobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBNQ1BSZXNwb25zZSB7XG4gICAgLy8gS2VlcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgc3RyYXRlZ2llcyBzaG91bGQgbWlncmF0ZSB0byB0aHJvd05vdEZvdW5kRXJyb3JcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVFcnJvclJlc3BvbnNlKGDinYwgJHt0eXBlfSAnJHtuYW1lfScgbm90IGZvdW5kYCk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGEgZmFpbC1zYWZlIHdhcm5pbmcgZm9yIGVsZW1lbnRzIHdpdGggQ0xJIGV4dGVybmFsIHJlc3RyaWN0aW9ucy5cbiAgICogQXBwZW5kZWQgdG8gYWN0aXZhdGlvbiB0ZXh0IHNvIHVzZXJzIGFyZSBhd2FyZSBvZiByZXN0cmljdGlvbnMgZXZlbiB3aGVuXG4gICAqIHBlcm1pc3Npb25fcHJvbXB0IGlzIG5vdCBhdmFpbGFibGUgKG5vbi1DbGF1ZGUtQ29kZSBjbGllbnRzKS5cbiAgICpcbiAgICogQHBhcmFtIG1ldGFkYXRhIC0gRWxlbWVudCBtZXRhZGF0YSAobWF5IGNvbnRhaW4gZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucylcbiAgICogQHJldHVybnMgV2FybmluZyB0ZXh0IG9yIGVtcHR5IHN0cmluZyBpZiBubyByZXN0cmljdGlvbnNcbiAgICogQHNlZSBJc3N1ZSAjNjQyIOKAlCBGYWlsLXNhZmUgZW5mb3JjZW1lbnQgZm9yIGV4dGVybmFsUmVzdHJpY3Rpb25zXG4gICAqL1xuICBwcm90ZWN0ZWQgZm9ybWF0UmVzdHJpY3Rpb25XYXJuaW5nKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gICAgY29uc3QgZ2F0ZWtlZXBlciA9IG1ldGFkYXRhPy5nYXRla2VlcGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc3RyaWN0aW9ucyA9IGdhdGVrZWVwZXI/LmV4dGVybmFsUmVzdHJpY3Rpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGlmICghcmVzdHJpY3Rpb25zKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBob29rU3RhdHVzID0gZ2V0UGVybWlzc2lvbkhvb2tTdGF0dXMoKTtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbaG9va1N0YXR1cy5pbnN0YWxsZWRcbiAgICAgID8gJ1xcbi0tLVxcbioqQ0xJIFBvbGljaWVzIExvYWRlZDoqKidcbiAgICAgIDogJ1xcbi0tLVxcbioqQ0xJIFBvbGljaWVzIExvYWRlZCAoSG9vayBOb3QgRGV0ZWN0ZWQpOioqJ107XG4gICAgaWYgKHJlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbikge1xuICAgICAgcGFydHMucHVzaChgPiAke3Jlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbn1gKTtcbiAgICB9XG4gICAgY29uc3QgZGVueVBhdHRlcm5zID0gcmVzdHJpY3Rpb25zLmRlbnlQYXR0ZXJucyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZGVueVBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNob3duID0gZGVueVBhdHRlcm5zLnNsaWNlKDAsIDUpLmpvaW4oJywgJyk7XG4gICAgICBwYXJ0cy5wdXNoKGA+IERlbmllZDogJHtzaG93bn0ke2RlbnlQYXR0ZXJucy5sZW5ndGggPiA1ID8gJy4uLicgOiAnJ31gKTtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IHJlc3RyaWN0aW9ucy5hbGxvd1BhdHRlcm5zIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGlmIChhbGxvd1BhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNob3duID0gYWxsb3dQYXR0ZXJucy5zbGljZSgwLCA1KS5qb2luKCcsICcpO1xuICAgICAgcGFydHMucHVzaChgPiBBbGxvd2VkIG9ubHk6ICR7c2hvd259JHthbGxvd1BhdHRlcm5zLmxlbmd0aCA+IDUgPyAnLi4uJyA6ICcnfWApO1xuICAgIH1cbiAgICBjb25zdCBhcHByb3ZhbFBvbGljeSA9IHJlc3RyaWN0aW9ucy5hcHByb3ZhbFBvbGljeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXF1aXJlQXBwcm92YWwgPSBhcHByb3ZhbFBvbGljeT8ucmVxdWlyZUFwcHJvdmFsIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1aXJlQXBwcm92YWw/Lmxlbmd0aCkge1xuICAgICAgcGFydHMucHVzaChgPiBSZXF1aXJlcyBhcHByb3ZhbCBmb3I6ICR7cmVxdWlyZUFwcHJvdmFsLmpvaW4oJywgJyl9IHJpc2sgdG9vbHNgKTtcbiAgICB9XG4gICAgcGFydHMucHVzaCgnPiBVc2UgYGdldF9lZmZlY3RpdmVfY2xpX3BvbGljaWVzYCB0byBzZWUgY29tYmluZWQgcG9saWN5IHN0YXRlLicpO1xuICAgIGlmIChob29rU3RhdHVzLmluc3RhbGxlZCkge1xuICAgICAgcGFydHMucHVzaChgPiBQZXJtaXNzaW9uIGhvb2sgZGV0ZWN0ZWQgZm9yICR7aG9va1N0YXR1cy5ob3N0ID8/ICd0aGlzIGNsaWVudCd9LiBFbmZvcmNlbWVudCBkZXBlbmRzIG9uIHVzaW5nIHRoYXQgY2xpZW50IGNvbmZpZ3VyYXRpb24uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzLnB1c2goXG4gICAgICAgICc+IE5vIHBlcm1pc3Npb24gaG9vayBkZXRlY3RlZC4gVGhlc2UgcG9saWNpZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGVuZm9yY2VkIHVubGVzcyB0aGUgQ0xJIGlzIGxhdW5jaGVkIHdpdGggYC0tcGVybWlzc2lvbi1wcm9tcHQtdG9vbGAuJyxcbiAgICAgICAgJz4gUnVuIGBvcGVuX3NldHVwYCBhbmQgcmVpbnN0YWxsIHRvIHdpcmUgYXV0b21hdGljIGVuZm9yY2VtZW50LicsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignXFxuJyk7XG4gIH1cbn1cbiJdfQ==
@@ -118,7 +118,7 @@ export class PersonaActivationStrategy extends BaseActivationStrategy {
118
118
  const r = gk.externalRestrictions;
119
119
  return ` **${p.metadata.name}**: ${r.description}`;
120
120
  }).join('\n');
121
- text += `\n\n**Active CLI Restrictions:**\n${summary}\n> Use \`get_effective_cli_policies\` for full details.`;
121
+ text += `\n\n**Loaded CLI Restrictions:**\n${summary}\n> Use \`get_effective_cli_policies\` for full details.`;
122
122
  }
123
123
  return {
124
124
  content: [{
@@ -156,4 +156,4 @@ export class PersonaActivationStrategy extends BaseActivationStrategy {
156
156
  };
157
157
  }
158
158
  }
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9zdHJhdGVnaWVzL1BlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFJSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdyRSxNQUFNLE9BQU8seUJBQTBCLFNBQVEsc0JBQXNCO0lBRWhEO0lBQ0E7SUFGbkIsWUFDbUIsY0FBOEIsRUFDOUIsZ0JBQXlDO1FBRTFELEtBQUssRUFBRSxDQUFDO1FBSFMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7SUFHNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLENBQUM7d0JBQ1IsSUFBSSxFQUFFLE1BQU07d0JBQ1osSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRTtxQkFDekQsQ0FBQzthQUNILENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMvQixN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QUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSAtIFN0cmF0ZWd5IGZvciBwZXJzb25hIGVsZW1lbnQgYWN0aXZhdGlvblxuICpcbiAqIEhhbmRsZXMgYWN0aXZhdGlvbiwgZGVhY3RpdmF0aW9uLCBhbmQgc3RhdHVzIHRyYWNraW5nIGZvciBwZXJzb25hIGVsZW1lbnRzLlxuICogVXNlcyB0aGUgUGVyc29uYU1hbmFnZXIncyB1bmlxdWUgQVBJIGFuZCBQZXJzb25hSW5kaWNhdG9yU2VydmljZSBmb3IgZm9ybWF0dGluZy5cbiAqL1xuXG5pbXBvcnQgeyBQZXJzb25hTWFuYWdlciB9IGZyb20gJy4uLy4uL3BlcnNvbmEvUGVyc29uYU1hbmFnZXIuanMnO1xuaW1wb3J0IHsgUGVyc29uYUluZGljYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9QZXJzb25hSW5kaWNhdG9yU2VydmljZS5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Tm90Rm91bmRFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBCYXNlQWN0aXZhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9CYXNlQWN0aXZhdGlvblN0cmF0ZWd5LmpzJztcbmltcG9ydCB7IEVsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3ksIE1DUFJlc3BvbnNlIH0gZnJvbSAnLi9FbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5LmpzJztcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBCYXNlQWN0aXZhdGlvblN0cmF0ZWd5IGltcGxlbWVudHMgRWxlbWVudEFjdGl2YXRpb25TdHJhdGVneSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVyc29uYU1hbmFnZXI6IFBlcnNvbmFNYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5kaWNhdG9yU2VydmljZTogUGVyc29uYUluZGljYXRvclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBlcnNvbmEgaW5kaWNhdG9yIHByZWZpeFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQZXJzb25hSW5kaWNhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGUgYSBwZXJzb25hXG4gICAqIEV4dHJhY3RlZCBmcm9tIEVsZW1lbnRDUlVESGFuZGxlci50cyBsaW5lcyAxNjEtMTgyXG4gICAqL1xuICBhc3luYyBhY3RpdmF0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzb25hTWFuYWdlci5hY3RpdmF0ZVBlcnNvbmEobmFtZSk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzIHx8ICFyZXN1bHQucGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgJHtyZXN1bHQubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBlcnNvbmEgPSByZXN1bHQucGVyc29uYTtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBwZXJzb25hLmluc3RydWN0aW9ucz8udHJpbSgpIHx8IHBlcnNvbmEuY29udGVudD8udHJpbSgpIHx8ICdObyBpbnN0cnVjdGlvbnMgcHJvdmlkZWQuJztcbiAgICBjb25zdCByZWZlcmVuY2VDb250ZW50ID0gcGVyc29uYS5pbnN0cnVjdGlvbnM/LnRyaW0oKSA/IHBlcnNvbmEuY29udGVudD8udHJpbSgpIDogJyc7XG5cbiAgICBsZXQgdGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfVBlcnNvbmEgQWN0aXZhdGVkOiAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqXFxuXFxuJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcblxcbioqSW5zdHJ1Y3Rpb25zOioqXFxuJHtpbnN0cnVjdGlvbnN9YDtcbiAgICBpZiAocmVmZXJlbmNlQ29udGVudCkge1xuICAgICAgdGV4dCArPSBgXFxuXFxuKipSZWZlcmVuY2U6KipcXG4ke3JlZmVyZW5jZUNvbnRlbnR9YDtcbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjQyOiBGYWlsLXNhZmUgd2FybmluZyBmb3IgQ0xJIHJlc3RyaWN0aW9uc1xuICAgIGNvbnN0IHJlc3RyaWN0aW9uV2FybmluZyA9IHRoaXMuZm9ybWF0UmVzdHJpY3Rpb25XYXJuaW5nKHBlcnNvbmEubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgaWYgKHJlc3RyaWN0aW9uV2FybmluZykge1xuICAgICAgdGV4dCArPSByZXN0cmljdGlvbldhcm5pbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0XG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSBhIHNwZWNpZmljIHBlcnNvbmFcbiAgICogSXNzdWUgIzI4MTogVXBkYXRlZCB0byBzdXBwb3J0IG11bHRpcGxlIGFjdGl2ZSBwZXJzb25hc1xuICAgKlxuICAgKiBAdGhyb3dzIHtFbGVtZW50Tm90Rm91bmRFcnJvcn0gV2hlbiBuYW1lZCBwZXJzb25hIGRvZXMgbm90IGV4aXN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIG5hbWUgcGFyYW1ldGVyIGlzIG1pc3NpbmdcbiAgICogQHNlZSBJc3N1ZSAjMjc1IC0gSGFuZGxlcnMgcmV0dXJuIHN1Y2Nlc3M9dHJ1ZSBmb3IgbWlzc2luZyBlbGVtZW50c1xuICAgKi9cbiAgYXN5bmMgZGVhY3RpdmF0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgLy8gSXNzdWUgIzI3NTogUmVxdWlyZSBuYW1lIHBhcmFtZXRlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIGlmICghbmFtZSB8fCBuYW1lID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYW1lIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgZGVhY3RpdmF0ZSBvcGVyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjMjc1OiBWZXJpZnkgdGhlIG5hbWVkIHBlcnNvbmEgZXhpc3RzIGJlZm9yZSBkZWFjdGl2YXRpbmdcbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hTWFuYWdlci5maW5kUGVyc29uYShuYW1lKTtcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRocm93IG5ldyBFbGVtZW50Tm90Rm91bmRFcnJvcignUGVyc29uYScsIG5hbWUpO1xuICAgIH1cblxuICAgIC8vIElzc3VlICMyODE6IFBhc3MgdGhlIG5hbWUgdG8gZGVhY3RpdmF0ZSB0aGUgc3BlY2lmaWMgcGVyc29uYVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYU1hbmFnZXIuZGVhY3RpdmF0ZVBlcnNvbmEobmFtZSk7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgJHtyZXN1bHQubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKchSAke3Jlc3VsdC5tZXNzYWdlfWBcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGFjdGl2ZSBwZXJzb25hc1xuICAgKiBJc3N1ZSAjMjgxOiBVcGRhdGVkIHRvIHNob3cgYWxsIGFjdGl2ZSBwZXJzb25hcyAoc3VwcG9ydHMgbXVsdGlwbGUpXG4gICAqL1xuICBhc3luYyBnZXRBY3RpdmVFbGVtZW50cygpOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgY29uc3QgYWN0aXZlUGVyc29uYXMgPSB0aGlzLnBlcnNvbmFNYW5hZ2VyLmdldEFjdGl2ZVBlcnNvbmFzKCk7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG5cbiAgICBpZiAoYWN0aXZlUGVyc29uYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn1ObyBwZXJzb25hcyBhcmUgY3VycmVudGx5IGFjdGl2ZS5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBlcnNvbmFMaXN0ID0gYWN0aXZlUGVyc29uYXMubWFwKHAgPT5cbiAgICAgIGDwn5S5ICoqJHtwLm1ldGFkYXRhLm5hbWV9KiogKCR7cC51bmlxdWVfaWR9KVxcbiAgICR7cC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICDwn5OBICR7cC5tZXRhZGF0YS5jYXRlZ29yeSB8fCAnZ2VuZXJhbCd9IHwg8J+OrSAke3AubWV0YWRhdGEuYXV0aG9yIHx8ICdVbmtub3duJ31gXG4gICAgKS5qb2luKCdcXG5cXG4nKTtcblxuICAgIGNvbnN0IGhlYWRlciA9IGFjdGl2ZVBlcnNvbmFzLmxlbmd0aCA9PT0gMVxuICAgICAgPyBgJHtpbmRpY2F0b3J9QWN0aXZlIFBlcnNvbmE6YFxuICAgICAgOiBgJHtpbmRpY2F0b3J9QWN0aXZlIFBlcnNvbmFzICgke2FjdGl2ZVBlcnNvbmFzLmxlbmd0aH0pOmA7XG5cbiAgICBsZXQgdGV4dCA9IGAke2hlYWRlcn1cXG5cXG4ke3BlcnNvbmFMaXN0fWA7XG5cbiAgICAvLyBJc3N1ZSAjNjQyOiBSZXN0cmljdGlvbiBzdW1tYXJ5IGZvciBhY3RpdmUgcGVyc29uYXMgd2l0aCBleHRlcm5hbFJlc3RyaWN0aW9uc1xuICAgIGNvbnN0IHJlc3RyaWN0ZWRQZXJzb25hcyA9IGFjdGl2ZVBlcnNvbmFzLmZpbHRlcihcbiAgICAgIHAgPT4gKHAubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmdhdGVrZWVwZXIgJiZcbiAgICAgICAgKChwLm1ldGFkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmdhdGVrZWVwZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy5leHRlcm5hbFJlc3RyaWN0aW9uc1xuICAgICk7XG4gICAgaWYgKHJlc3RyaWN0ZWRQZXJzb25hcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzdW1tYXJ5ID0gcmVzdHJpY3RlZFBlcnNvbmFzLm1hcChwID0+IHtcbiAgICAgICAgY29uc3QgZ2sgPSAocC5tZXRhZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5nYXRla2VlcGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBjb25zdCByID0gZ2suZXh0ZXJuYWxSZXN0cmljdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHJldHVybiBgICAqKiR7cC5tZXRhZGF0YS5uYW1lfSoqOiAke3IuZGVzY3JpcHRpb259YDtcbiAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgdGV4dCArPSBgXFxuXFxuKipBY3RpdmUgQ0xJIFJlc3RyaWN0aW9uczoqKlxcbiR7c3VtbWFyeX1cXG4+IFVzZSBcXGBnZXRfZWZmZWN0aXZlX2NsaV9wb2xpY2llc1xcYCBmb3IgZnVsbCBkZXRhaWxzLmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0XG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGEgcGVyc29uYVxuICAgKiBFeHRyYWN0ZWQgZnJvbSBFbGVtZW50Q1JVREhhbmRsZXIudHMgbGluZXMgNjIwLTY0OFxuICAgKlxuICAgKiBAdGhyb3dzIHtFbGVtZW50Tm90Rm91bmRFcnJvcn0gV2hlbiBwZXJzb25hIGRvZXMgbm90IGV4aXN0XG4gICAqIEBzZWUgSXNzdWUgIzI3NSAtIEhhbmRsZXJzIHJldHVybiBzdWNjZXNzPXRydWUgZm9yIG1pc3NpbmcgZWxlbWVudHNcbiAgICovXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TUNQUmVzcG9uc2U+IHtcbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hTWFuYWdlci5maW5kUGVyc29uYShuYW1lKTtcbiAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKTtcblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhyb3cgbmV3IEVsZW1lbnROb3RGb3VuZEVycm9yKCdQZXJzb25hJywgbmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZ2dlcnMgPSBwZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzPy5qb2luKCcsICcpIHx8ICdOb25lJztcbiAgICBjb25zdCBjb250ZW50ID0gcGVyc29uYS5jb250ZW50Py50cmltKCkgfHwgJ05vIGluc3RydWN0aW9ucyBwcm92aWRlZC4nO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J98J+TiyAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqIERldGFpbHNcXG5cXG5gICtcbiAgICAgICAgICBgKipEZXNjcmlwdGlvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuYCArXG4gICAgICAgICAgYCoqRmlsZToqKiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICAgICAgYCoqVmVyc2lvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJ31cXG5gICtcbiAgICAgICAgICBgKipBdXRob3I6KiogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCArXG4gICAgICAgICAgYCoqVHJpZ2dlcnM6KiogJHt0cmlnZ2Vyc31cXG5cXG5gICtcbiAgICAgICAgICBgKipGdWxsIEluc3RydWN0aW9uczoqKlxcblxcYFxcYFxcYFxcbiR7Y29udGVudH1cXG5cXGBcXGBcXGBgXG4gICAgICB9XVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9zdHJhdGVnaWVzL1BlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFJSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdyRSxNQUFNLE9BQU8seUJBQTBCLFNBQVEsc0JBQXNCO0lBRWhEO0lBQ0E7SUFGbkIsWUFDbUIsY0FBOEIsRUFDOUIsZ0JBQXlDO1FBRTFELEtBQUssRUFBRSxDQUFDO1FBSFMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7SUFHNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLENBQUM7d0JBQ1IsSUFBSSxFQUFFLE1BQU07d0JBQ1osSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRTtxQkFDekQsQ0FBQzthQUNILENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMvQixN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QUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSAtIFN0cmF0ZWd5IGZvciBwZXJzb25hIGVsZW1lbnQgYWN0aXZhdGlvblxuICpcbiAqIEhhbmRsZXMgYWN0aXZhdGlvbiwgZGVhY3RpdmF0aW9uLCBhbmQgc3RhdHVzIHRyYWNraW5nIGZvciBwZXJzb25hIGVsZW1lbnRzLlxuICogVXNlcyB0aGUgUGVyc29uYU1hbmFnZXIncyB1bmlxdWUgQVBJIGFuZCBQZXJzb25hSW5kaWNhdG9yU2VydmljZSBmb3IgZm9ybWF0dGluZy5cbiAqL1xuXG5pbXBvcnQgeyBQZXJzb25hTWFuYWdlciB9IGZyb20gJy4uLy4uL3BlcnNvbmEvUGVyc29uYU1hbmFnZXIuanMnO1xuaW1wb3J0IHsgUGVyc29uYUluZGljYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9QZXJzb25hSW5kaWNhdG9yU2VydmljZS5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Tm90Rm91bmRFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBCYXNlQWN0aXZhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9CYXNlQWN0aXZhdGlvblN0cmF0ZWd5LmpzJztcbmltcG9ydCB7IEVsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3ksIE1DUFJlc3BvbnNlIH0gZnJvbSAnLi9FbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5LmpzJztcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBCYXNlQWN0aXZhdGlvblN0cmF0ZWd5IGltcGxlbWVudHMgRWxlbWVudEFjdGl2YXRpb25TdHJhdGVneSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVyc29uYU1hbmFnZXI6IFBlcnNvbmFNYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5kaWNhdG9yU2VydmljZTogUGVyc29uYUluZGljYXRvclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBlcnNvbmEgaW5kaWNhdG9yIHByZWZpeFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQZXJzb25hSW5kaWNhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGUgYSBwZXJzb25hXG4gICAqIEV4dHJhY3RlZCBmcm9tIEVsZW1lbnRDUlVESGFuZGxlci50cyBsaW5lcyAxNjEtMTgyXG4gICAqL1xuICBhc3luYyBhY3RpdmF0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzb25hTWFuYWdlci5hY3RpdmF0ZVBlcnNvbmEobmFtZSk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzIHx8ICFyZXN1bHQucGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgJHtyZXN1bHQubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBlcnNvbmEgPSByZXN1bHQucGVyc29uYTtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBwZXJzb25hLmluc3RydWN0aW9ucz8udHJpbSgpIHx8IHBlcnNvbmEuY29udGVudD8udHJpbSgpIHx8ICdObyBpbnN0cnVjdGlvbnMgcHJvdmlkZWQuJztcbiAgICBjb25zdCByZWZlcmVuY2VDb250ZW50ID0gcGVyc29uYS5pbnN0cnVjdGlvbnM/LnRyaW0oKSA/IHBlcnNvbmEuY29udGVudD8udHJpbSgpIDogJyc7XG5cbiAgICBsZXQgdGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfVBlcnNvbmEgQWN0aXZhdGVkOiAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqXFxuXFxuJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcblxcbioqSW5zdHJ1Y3Rpb25zOioqXFxuJHtpbnN0cnVjdGlvbnN9YDtcbiAgICBpZiAocmVmZXJlbmNlQ29udGVudCkge1xuICAgICAgdGV4dCArPSBgXFxuXFxuKipSZWZlcmVuY2U6KipcXG4ke3JlZmVyZW5jZUNvbnRlbnR9YDtcbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjQyOiBGYWlsLXNhZmUgd2FybmluZyBmb3IgQ0xJIHJlc3RyaWN0aW9uc1xuICAgIGNvbnN0IHJlc3RyaWN0aW9uV2FybmluZyA9IHRoaXMuZm9ybWF0UmVzdHJpY3Rpb25XYXJuaW5nKHBlcnNvbmEubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgaWYgKHJlc3RyaWN0aW9uV2FybmluZykge1xuICAgICAgdGV4dCArPSByZXN0cmljdGlvbldhcm5pbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0XG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSBhIHNwZWNpZmljIHBlcnNvbmFcbiAgICogSXNzdWUgIzI4MTogVXBkYXRlZCB0byBzdXBwb3J0IG11bHRpcGxlIGFjdGl2ZSBwZXJzb25hc1xuICAgKlxuICAgKiBAdGhyb3dzIHtFbGVtZW50Tm90Rm91bmRFcnJvcn0gV2hlbiBuYW1lZCBwZXJzb25hIGRvZXMgbm90IGV4aXN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIG5hbWUgcGFyYW1ldGVyIGlzIG1pc3NpbmdcbiAgICogQHNlZSBJc3N1ZSAjMjc1IC0gSGFuZGxlcnMgcmV0dXJuIHN1Y2Nlc3M9dHJ1ZSBmb3IgbWlzc2luZyBlbGVtZW50c1xuICAgKi9cbiAgYXN5bmMgZGVhY3RpdmF0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgLy8gSXNzdWUgIzI3NTogUmVxdWlyZSBuYW1lIHBhcmFtZXRlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIGlmICghbmFtZSB8fCBuYW1lID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYW1lIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgZGVhY3RpdmF0ZSBvcGVyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjMjc1OiBWZXJpZnkgdGhlIG5hbWVkIHBlcnNvbmEgZXhpc3RzIGJlZm9yZSBkZWFjdGl2YXRpbmdcbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hTWFuYWdlci5maW5kUGVyc29uYShuYW1lKTtcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRocm93IG5ldyBFbGVtZW50Tm90Rm91bmRFcnJvcignUGVyc29uYScsIG5hbWUpO1xuICAgIH1cblxuICAgIC8vIElzc3VlICMyODE6IFBhc3MgdGhlIG5hbWUgdG8gZGVhY3RpdmF0ZSB0aGUgc3BlY2lmaWMgcGVyc29uYVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYU1hbmFnZXIuZGVhY3RpdmF0ZVBlcnNvbmEobmFtZSk7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgJHtyZXN1bHQubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKchSAke3Jlc3VsdC5tZXNzYWdlfWBcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGFjdGl2ZSBwZXJzb25hc1xuICAgKiBJc3N1ZSAjMjgxOiBVcGRhdGVkIHRvIHNob3cgYWxsIGFjdGl2ZSBwZXJzb25hcyAoc3VwcG9ydHMgbXVsdGlwbGUpXG4gICAqL1xuICBhc3luYyBnZXRBY3RpdmVFbGVtZW50cygpOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgY29uc3QgYWN0aXZlUGVyc29uYXMgPSB0aGlzLnBlcnNvbmFNYW5hZ2VyLmdldEFjdGl2ZVBlcnNvbmFzKCk7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG5cbiAgICBpZiAoYWN0aXZlUGVyc29uYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke2luZGljYXRvcn1ObyBwZXJzb25hcyBhcmUgY3VycmVudGx5IGFjdGl2ZS5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBlcnNvbmFMaXN0ID0gYWN0aXZlUGVyc29uYXMubWFwKHAgPT5cbiAgICAgIGDwn5S5ICoqJHtwLm1ldGFkYXRhLm5hbWV9KiogKCR7cC51bmlxdWVfaWR9KVxcbiAgICR7cC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICDwn5OBICR7cC5tZXRhZGF0YS5jYXRlZ29yeSB8fCAnZ2VuZXJhbCd9IHwg8J+OrSAke3AubWV0YWRhdGEuYXV0aG9yIHx8ICdVbmtub3duJ31gXG4gICAgKS5qb2luKCdcXG5cXG4nKTtcblxuICAgIGNvbnN0IGhlYWRlciA9IGFjdGl2ZVBlcnNvbmFzLmxlbmd0aCA9PT0gMVxuICAgICAgPyBgJHtpbmRpY2F0b3J9QWN0aXZlIFBlcnNvbmE6YFxuICAgICAgOiBgJHtpbmRpY2F0b3J9QWN0aXZlIFBlcnNvbmFzICgke2FjdGl2ZVBlcnNvbmFzLmxlbmd0aH0pOmA7XG5cbiAgICBsZXQgdGV4dCA9IGAke2hlYWRlcn1cXG5cXG4ke3BlcnNvbmFMaXN0fWA7XG5cbiAgICAvLyBJc3N1ZSAjNjQyOiBSZXN0cmljdGlvbiBzdW1tYXJ5IGZvciBhY3RpdmUgcGVyc29uYXMgd2l0aCBleHRlcm5hbFJlc3RyaWN0aW9uc1xuICAgIGNvbnN0IHJlc3RyaWN0ZWRQZXJzb25hcyA9IGFjdGl2ZVBlcnNvbmFzLmZpbHRlcihcbiAgICAgIHAgPT4gKHAubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmdhdGVrZWVwZXIgJiZcbiAgICAgICAgKChwLm1ldGFkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmdhdGVrZWVwZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy5leHRlcm5hbFJlc3RyaWN0aW9uc1xuICAgICk7XG4gICAgaWYgKHJlc3RyaWN0ZWRQZXJzb25hcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzdW1tYXJ5ID0gcmVzdHJpY3RlZFBlcnNvbmFzLm1hcChwID0+IHtcbiAgICAgICAgY29uc3QgZ2sgPSAocC5tZXRhZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5nYXRla2VlcGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBjb25zdCByID0gZ2suZXh0ZXJuYWxSZXN0cmljdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHJldHVybiBgICAqKiR7cC5tZXRhZGF0YS5uYW1lfSoqOiAke3IuZGVzY3JpcHRpb259YDtcbiAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgdGV4dCArPSBgXFxuXFxuKipMb2FkZWQgQ0xJIFJlc3RyaWN0aW9uczoqKlxcbiR7c3VtbWFyeX1cXG4+IFVzZSBcXGBnZXRfZWZmZWN0aXZlX2NsaV9wb2xpY2llc1xcYCBmb3IgZnVsbCBkZXRhaWxzLmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0XG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGEgcGVyc29uYVxuICAgKiBFeHRyYWN0ZWQgZnJvbSBFbGVtZW50Q1JVREhhbmRsZXIudHMgbGluZXMgNjIwLTY0OFxuICAgKlxuICAgKiBAdGhyb3dzIHtFbGVtZW50Tm90Rm91bmRFcnJvcn0gV2hlbiBwZXJzb25hIGRvZXMgbm90IGV4aXN0XG4gICAqIEBzZWUgSXNzdWUgIzI3NSAtIEhhbmRsZXJzIHJldHVybiBzdWNjZXNzPXRydWUgZm9yIG1pc3NpbmcgZWxlbWVudHNcbiAgICovXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TUNQUmVzcG9uc2U+IHtcbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hTWFuYWdlci5maW5kUGVyc29uYShuYW1lKTtcbiAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKTtcblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhyb3cgbmV3IEVsZW1lbnROb3RGb3VuZEVycm9yKCdQZXJzb25hJywgbmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZ2dlcnMgPSBwZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzPy5qb2luKCcsICcpIHx8ICdOb25lJztcbiAgICBjb25zdCBjb250ZW50ID0gcGVyc29uYS5jb250ZW50Py50cmltKCkgfHwgJ05vIGluc3RydWN0aW9ucyBwcm92aWRlZC4nO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J98J+TiyAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqIERldGFpbHNcXG5cXG5gICtcbiAgICAgICAgICBgKipEZXNjcmlwdGlvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuYCArXG4gICAgICAgICAgYCoqRmlsZToqKiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICAgICAgYCoqVmVyc2lvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJ31cXG5gICtcbiAgICAgICAgICBgKipBdXRob3I6KiogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCArXG4gICAgICAgICAgYCoqVHJpZ2dlcnM6KiogJHt0cmlnZ2Vyc31cXG5cXG5gICtcbiAgICAgICAgICBgKipGdWxsIEluc3RydWN0aW9uczoqKlxcblxcYFxcYFxcYFxcbiR7Y29udGVudH1cXG5cXGBcXGBcXGBgXG4gICAgICB9XVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,38 @@
1
+ export interface PermissionHookMarker {
2
+ host: string;
3
+ scriptPath: string;
4
+ settingsPath: string;
5
+ installedAt: string;
6
+ }
7
+ export interface PermissionHookStatus {
8
+ installed: boolean;
9
+ host?: string;
10
+ scriptPath?: string;
11
+ settingsPath?: string;
12
+ }
13
+ export interface InstallPermissionHookResult {
14
+ supported: boolean;
15
+ installed: boolean;
16
+ configured: boolean;
17
+ host: string;
18
+ scriptPath?: string;
19
+ settingsPath?: string;
20
+ markerPath?: string;
21
+ backupPath?: string;
22
+ message: string;
23
+ }
24
+ export interface InstallPermissionHookOptions {
25
+ homeDir?: string;
26
+ sourceScriptPath?: string;
27
+ now?: Date;
28
+ }
29
+ export declare function getPermissionHookScriptPath(homeDir?: string): string;
30
+ export declare function getPermissionHookMarkerPath(homeDir?: string): string;
31
+ export declare function getClaudeHookSettingsPath(homeDir?: string): string;
32
+ export declare function getPermissionHookStatus(homeDir?: string): PermissionHookStatus;
33
+ export declare function ensureClaudePreToolUseHook(parsed: Record<string, unknown>, command: string): {
34
+ changed: boolean;
35
+ parsed: Record<string, unknown>;
36
+ };
37
+ export declare function installPermissionHook(client: string, options?: InstallPermissionHookOptions): Promise<InstallPermissionHookResult>;
38
+ //# sourceMappingURL=permissionHooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissionHooks.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHooks.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AA4BD,wBAAgB,2BAA2B,CAAC,OAAO,SAAY,GAAG,MAAM,CAEvE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,SAAY,GAAG,MAAM,CAEvE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,SAAY,GAAG,MAAM,CAErE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,SAAY,GAAG,oBAAoB,CA0BjF;AAUD,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,CAsCvD;AAsDD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,2BAA2B,CAAC,CAiDtC"}
@@ -0,0 +1,194 @@
1
+ import { accessSync, constants as fsConstants, copyFileSync, existsSync, readFileSync, statSync, writeFileSync } from 'node:fs';
2
+ import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { homedir } from 'node:os';
6
+ function repoRootFromModule() {
7
+ const currentFile = fileURLToPath(import.meta.url);
8
+ return dirname(dirname(dirname(currentFile)));
9
+ }
10
+ function isMissingFileError(error) {
11
+ return Boolean(error
12
+ && typeof error === 'object'
13
+ && 'code' in error
14
+ && error.code === 'ENOENT');
15
+ }
16
+ function detectIndent(raw) {
17
+ for (const line of raw.split('\n')) {
18
+ if (line.length === 0 || line.startsWith('{') || line.startsWith('}'))
19
+ continue;
20
+ if (line.startsWith('\t'))
21
+ return '\t';
22
+ if (line.startsWith(' ')) {
23
+ const spaces = line.length - line.trimStart().length;
24
+ if (spaces >= 2)
25
+ return spaces;
26
+ }
27
+ }
28
+ return 2;
29
+ }
30
+ export function getPermissionHookScriptPath(homeDir = homedir()) {
31
+ return join(homeDir, '.dollhouse', 'hooks', 'pretooluse-dollhouse.sh');
32
+ }
33
+ export function getPermissionHookMarkerPath(homeDir = homedir()) {
34
+ return join(homeDir, '.dollhouse', 'run', 'hook-installed.json');
35
+ }
36
+ export function getClaudeHookSettingsPath(homeDir = homedir()) {
37
+ return join(homeDir, '.claude', 'settings.json');
38
+ }
39
+ export function getPermissionHookStatus(homeDir = homedir()) {
40
+ const markerPath = getPermissionHookMarkerPath(homeDir);
41
+ try {
42
+ const raw = readFileSync(markerPath, 'utf-8');
43
+ const parsed = JSON.parse(raw);
44
+ if (typeof parsed.host !== 'string' ||
45
+ typeof parsed.scriptPath !== 'string' ||
46
+ typeof parsed.settingsPath !== 'string') {
47
+ return { installed: false };
48
+ }
49
+ if (!existsSync(parsed.scriptPath) || !existsSync(parsed.settingsPath)) {
50
+ return { installed: false };
51
+ }
52
+ return {
53
+ installed: true,
54
+ host: parsed.host,
55
+ scriptPath: parsed.scriptPath,
56
+ settingsPath: parsed.settingsPath,
57
+ };
58
+ }
59
+ catch {
60
+ return { installed: false };
61
+ }
62
+ }
63
+ function normalizeHooksRoot(parsed) {
64
+ const hooksValue = parsed.hooks;
65
+ if (!hooksValue || typeof hooksValue !== 'object' || Array.isArray(hooksValue)) {
66
+ parsed.hooks = {};
67
+ }
68
+ return parsed.hooks;
69
+ }
70
+ export function ensureClaudePreToolUseHook(parsed, command) {
71
+ const hooksRoot = normalizeHooksRoot(parsed);
72
+ const existingEntries = Array.isArray(hooksRoot.PreToolUse)
73
+ ? hooksRoot.PreToolUse.filter((entry) => typeof entry === 'object' && entry !== null)
74
+ : [];
75
+ hooksRoot.PreToolUse = existingEntries;
76
+ const commandExists = existingEntries.some((entry) => {
77
+ const hooks = Array.isArray(entry?.hooks) ? entry.hooks : [];
78
+ return hooks.some((hook) => hook?.type === 'command' && hook?.command === command);
79
+ });
80
+ if (commandExists) {
81
+ return { changed: false, parsed };
82
+ }
83
+ const wildcardEntry = existingEntries.find((entry) => (entry?.matcher === '*' || entry?.matcher === undefined) && Array.isArray(entry?.hooks));
84
+ if (wildcardEntry) {
85
+ const hooks = wildcardEntry.hooks;
86
+ hooks.push({
87
+ type: 'command',
88
+ command,
89
+ });
90
+ }
91
+ else {
92
+ existingEntries.push({
93
+ matcher: '*',
94
+ hooks: [
95
+ {
96
+ type: 'command',
97
+ command,
98
+ },
99
+ ],
100
+ });
101
+ }
102
+ return { changed: true, parsed };
103
+ }
104
+ async function copyHookScript(sourcePath, targetPath) {
105
+ await mkdir(dirname(targetPath), { recursive: true });
106
+ const sourceRaw = await readFile(sourcePath, 'utf-8');
107
+ let targetRaw;
108
+ try {
109
+ targetRaw = await readFile(targetPath, 'utf-8');
110
+ }
111
+ catch (error) {
112
+ if (!isMissingFileError(error)) {
113
+ throw error;
114
+ }
115
+ }
116
+ const changed = targetRaw === undefined || sourceRaw !== targetRaw;
117
+ if (changed) {
118
+ copyFileSync(sourcePath, targetPath);
119
+ }
120
+ else {
121
+ accessSync(targetPath, fsConstants.F_OK);
122
+ }
123
+ await chmod(targetPath, 0o755);
124
+ return changed;
125
+ }
126
+ async function mergeClaudeSettings(settingsPath, command) {
127
+ await mkdir(dirname(settingsPath), { recursive: true });
128
+ let raw = '{}\n';
129
+ try {
130
+ raw = await readFile(settingsPath, 'utf-8');
131
+ }
132
+ catch {
133
+ raw = '{}\n';
134
+ }
135
+ const indent = detectIndent(raw);
136
+ const parsed = raw.trim().length === 0 ? {} : JSON.parse(raw);
137
+ const { changed, parsed: updated } = ensureClaudePreToolUseHook(parsed, command);
138
+ if (!changed) {
139
+ return { changed: false };
140
+ }
141
+ let backupPath;
142
+ if (existsSync(settingsPath)) {
143
+ backupPath = `${settingsPath}.dollhouse.bak`;
144
+ writeFileSync(backupPath, raw, 'utf-8');
145
+ }
146
+ await writeFile(settingsPath, JSON.stringify(updated, null, indent) + '\n', 'utf-8');
147
+ return { changed: true, backupPath };
148
+ }
149
+ export async function installPermissionHook(client, options = {}) {
150
+ const normalizedClient = client.normalize('NFC').trim().toLowerCase();
151
+ if (normalizedClient !== 'claude-code') {
152
+ return {
153
+ supported: false,
154
+ installed: false,
155
+ configured: false,
156
+ host: normalizedClient,
157
+ message: `Automatic permission hook wiring is not yet supported for ${normalizedClient}.`,
158
+ };
159
+ }
160
+ const homeDir = options.homeDir ?? homedir();
161
+ const sourceScriptPath = options.sourceScriptPath
162
+ ?? join(repoRootFromModule(), 'scripts', 'pretooluse-dollhouse.sh');
163
+ const targetScriptPath = getPermissionHookScriptPath(homeDir);
164
+ const settingsPath = getClaudeHookSettingsPath(homeDir);
165
+ const markerPath = getPermissionHookMarkerPath(homeDir);
166
+ const command = `bash ${targetScriptPath}`;
167
+ const sourceStat = statSync(sourceScriptPath);
168
+ if (!sourceStat.isFile()) {
169
+ throw new Error(`Permission hook source script not found: ${sourceScriptPath}`);
170
+ }
171
+ await copyHookScript(sourceScriptPath, targetScriptPath);
172
+ const settingsResult = await mergeClaudeSettings(settingsPath, command);
173
+ await mkdir(dirname(markerPath), { recursive: true });
174
+ const installedAt = (options.now ?? new Date()).toISOString();
175
+ const marker = {
176
+ host: normalizedClient,
177
+ scriptPath: targetScriptPath,
178
+ settingsPath,
179
+ installedAt,
180
+ };
181
+ await writeFile(markerPath, JSON.stringify(marker, null, 2) + '\n', 'utf-8');
182
+ return {
183
+ supported: true,
184
+ installed: true,
185
+ configured: true,
186
+ host: normalizedClient,
187
+ scriptPath: targetScriptPath,
188
+ settingsPath,
189
+ markerPath,
190
+ backupPath: settingsResult.backupPath,
191
+ message: 'Installed Claude Code permission hook and updated settings.json.',
192
+ };
193
+ }
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3Blcm1pc3Npb25Ib29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsSUFBSSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoSSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBa0NsQyxTQUFTLGtCQUFrQjtJQUN6QixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFjO0lBQ3hDLE9BQU8sT0FBTyxDQUNaLEtBQUs7V0FDRixPQUFPLEtBQUssS0FBSyxRQUFRO1dBQ3pCLE1BQU0sSUFBSSxLQUFLO1dBQ2QsS0FBMkIsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEdBQVc7SUFDL0IsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMs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SUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsTUFBTSxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RCxNQUFNLGNBQWMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV4RSxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RCxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlELE1BQU0sTUFBTSxHQUF5QjtRQUNuQyxJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsWUFBWTtRQUNaLFdBQVc7S0FDWixDQUFDO0lBQ0YsTUFBTSxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFN0UsT0FBTztRQUNMLFNBQVMsRUFBRSxJQUFJO1FBQ2YsU0FBUyxFQUFFLElBQUk7UUFDZixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsWUFBWTtRQUNaLFVBQVU7UUFDVixVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7UUFDckMsT0FBTyxFQUFFLGtFQUFrRTtLQUM1RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjY2Vzc1N5bmMsIGNvbnN0YW50cyBhcyBmc0NvbnN0YW50cywgY29weUZpbGVTeW5jLCBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjaG1vZCwgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uSG9va01hcmtlciB7XG4gIGhvc3Q6IHN0cmluZztcbiAgc2NyaXB0UGF0aDogc3RyaW5nO1xuICBzZXR0aW5nc1BhdGg6IHN0cmluZztcbiAgaW5zdGFsbGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGluc3RhbGxlZDogYm9vbGVhbjtcbiAgaG9zdD86IHN0cmluZztcbiAgc2NyaXB0UGF0aD86IHN0cmluZztcbiAgc2V0dGluZ3NQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbGxQZXJtaXNzaW9uSG9va1Jlc3VsdCB7XG4gIHN1cHBvcnRlZDogYm9vbGVhbjtcbiAgaW5zdGFsbGVkOiBib29sZWFuO1xuICBjb25maWd1cmVkOiBib29sZWFuO1xuICBob3N0OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIHNldHRpbmdzUGF0aD86IHN0cmluZztcbiAgbWFya2VyUGF0aD86IHN0cmluZztcbiAgYmFja3VwUGF0aD86IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbGxQZXJtaXNzaW9uSG9va09wdGlvbnMge1xuICBob21lRGlyPzogc3RyaW5nO1xuICBzb3VyY2VTY3JpcHRQYXRoPzogc3RyaW5nO1xuICBub3c/OiBEYXRlO1xufVxuXG5mdW5jdGlvbiByZXBvUm9vdEZyb21Nb2R1bGUoKTogc3RyaW5nIHtcbiAgY29uc3QgY3VycmVudEZpbGUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG4gIHJldHVybiBkaXJuYW1lKGRpcm5hbWUoZGlybmFtZShjdXJyZW50RmlsZSkpKTtcbn1cblxuZnVuY3Rpb24gaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGVycm9yXG4gICAgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0J1xuICAgICYmICdjb2RlJyBpbiBlcnJvclxuICAgICYmIChlcnJvciBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSA9PT0gJ0VOT0VOVCcsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdEluZGVudChyYXc6IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbGluZSBvZiByYXcuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwIHx8IGxpbmUuc3RhcnRzV2l0aCgneycpIHx8IGxpbmUuc3RhcnRzV2l0aCgnfScpKSBjb250aW51ZTtcbiAgICBpZiAobGluZS5zdGFydHNXaXRoKCdcXHQnKSkgcmV0dXJuICdcXHQnO1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyAnKSkge1xuICAgICAgY29uc3Qgc3BhY2VzID0gbGluZS5sZW5ndGggLSBsaW5lLnRyaW1TdGFydCgpLmxlbmd0aDtcbiAgICAgIGlmIChzcGFjZXMgPj0gMikgcmV0dXJuIHNwYWNlcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va1NjcmlwdFBhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuZG9sbGhvdXNlJywgJ2hvb2tzJywgJ3ByZXRvb2x1c2UtZG9sbGhvdXNlLnNoJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuZG9sbGhvdXNlJywgJ3J1bicsICdob29rLWluc3RhbGxlZC5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGF1ZGVIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNsYXVkZScsICdzZXR0aW5ncy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va1N0YXR1cyhob21lRGlyID0gaG9tZWRpcigpKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBjb25zdCBtYXJrZXJQYXRoID0gZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIpO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IHJlYWRGaWxlU3luYyhtYXJrZXJQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUGVybWlzc2lvbkhvb2tNYXJrZXI7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHBhcnNlZC5ob3N0ICE9PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZW9mIHBhcnNlZC5zY3JpcHRQYXRoICE9PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZW9mIHBhcnNlZC5zZXR0aW5nc1BhdGggIT09ICdzdHJpbmcnXG4gICAgKSB7XG4gICAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgaWYgKCFleGlzdHNTeW5jKHBhcnNlZC5zY3JpcHRQYXRoKSB8fCAhZXhpc3RzU3luYyhwYXJzZWQuc2V0dGluZ3NQYXRoKSkge1xuICAgICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnN0YWxsZWQ6IHRydWUsXG4gICAgICBob3N0OiBwYXJzZWQuaG9zdCxcbiAgICAgIHNjcmlwdFBhdGg6IHBhcnNlZC5zY3JpcHRQYXRoLFxuICAgICAgc2V0dGluZ3NQYXRoOiBwYXJzZWQuc2V0dGluZ3NQYXRoLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IGluc3RhbGxlZDogZmFsc2UgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVIb29rc1Jvb3QocGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT4ge1xuICBjb25zdCBob29rc1ZhbHVlID0gcGFyc2VkLmhvb2tzO1xuICBpZiAoIWhvb2tzVmFsdWUgfHwgdHlwZW9mIGhvb2tzVmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoaG9va3NWYWx1ZSkpIHtcbiAgICBwYXJzZWQuaG9va3MgPSB7fTtcbiAgfVxuICByZXR1cm4gcGFyc2VkLmhvb2tzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd25bXT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDbGF1ZGVQcmVUb29sVXNlSG9vayhcbiAgcGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29tbWFuZDogc3RyaW5nLFxuKTogeyBjaGFuZ2VkOiBib29sZWFuOyBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICBjb25zdCBob29rc1Jvb3QgPSBub3JtYWxpemVIb29rc1Jvb3QocGFyc2VkKTtcbiAgY29uc3QgZXhpc3RpbmdFbnRyaWVzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBBcnJheS5pc0FycmF5KGhvb2tzUm9vdC5QcmVUb29sVXNlKVxuICAgID8gaG9va3NSb290LlByZVRvb2xVc2UuZmlsdGVyKChlbnRyeSk6IGVudHJ5IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwpXG4gICAgOiBbXTtcbiAgaG9va3NSb290LlByZVRvb2xVc2UgPSBleGlzdGluZ0VudHJpZXM7XG5cbiAgY29uc3QgY29tbWFuZEV4aXN0cyA9IGV4aXN0aW5nRW50cmllcy5zb21lKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gQXJyYXkuaXNBcnJheShlbnRyeT8uaG9va3MpID8gZW50cnkuaG9va3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IDogW107XG4gICAgcmV0dXJuIGhvb2tzLnNvbWUoKGhvb2spID0+IGhvb2s/LnR5cGUgPT09ICdjb21tYW5kJyAmJiBob29rPy5jb21tYW5kID09PSBjb21tYW5kKTtcbiAgfSk7XG4gIGlmIChjb21tYW5kRXhpc3RzKSB7XG4gICAgcmV0dXJuIHsgY2hhbmdlZDogZmFsc2UsIHBhcnNlZCB9O1xuICB9XG5cbiAgY29uc3Qgd2lsZGNhcmRFbnRyeSA9IGV4aXN0aW5nRW50cmllcy5maW5kKChlbnRyeSk6IGVudHJ5IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+XG4gICAgKGVudHJ5Py5tYXRjaGVyID09PSAnKicgfHwgZW50cnk/Lm1hdGNoZXIgPT09IHVuZGVmaW5lZCkgJiYgQXJyYXkuaXNBcnJheShlbnRyeT8uaG9va3MpLFxuICApO1xuXG4gIGlmICh3aWxkY2FyZEVudHJ5KSB7XG4gICAgY29uc3QgaG9va3MgPSB3aWxkY2FyZEVudHJ5Lmhvb2tzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgICBob29rcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdjb21tYW5kJyxcbiAgICAgIGNvbW1hbmQsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZXhpc3RpbmdFbnRyaWVzLnB1c2goe1xuICAgICAgbWF0Y2hlcjogJyonLFxuICAgICAgaG9va3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb21tYW5kJyxcbiAgICAgICAgICBjb21tYW5kLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7IGNoYW5nZWQ6IHRydWUsIHBhcnNlZCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5SG9va1NjcmlwdChzb3VyY2VQYXRoOiBzdHJpbmcsIHRhcmdldFBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBhd2FpdCBta2RpcihkaXJuYW1lKHRhcmdldFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBzb3VyY2VSYXcgPSBhd2FpdCByZWFkRmlsZShzb3VyY2VQYXRoLCAndXRmLTgnKTtcblxuICBsZXQgdGFyZ2V0UmF3OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgdGFyZ2V0UmF3ID0gYXdhaXQgcmVhZEZpbGUodGFyZ2V0UGF0aCwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hhbmdlZCA9IHRhcmdldFJhdyA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZVJhdyAhPT0gdGFyZ2V0UmF3O1xuXG4gIGlmIChjaGFuZ2VkKSB7XG4gICAgY29weUZpbGVTeW5jKHNvdXJjZVBhdGgsIHRhcmdldFBhdGgpO1xuICB9IGVsc2Uge1xuICAgIGFjY2Vzc1N5bmModGFyZ2V0UGF0aCwgZnNDb25zdGFudHMuRl9PSyk7XG4gIH1cblxuICBhd2FpdCBjaG1vZCh0YXJnZXRQYXRoLCAwbzc1NSk7XG4gIHJldHVybiBjaGFuZ2VkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtZXJnZUNsYXVkZVNldHRpbmdzKHNldHRpbmdzUGF0aDogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcpOiBQcm9taXNlPHsgY2hhbmdlZDogYm9vbGVhbjsgYmFja3VwUGF0aD86IHN0cmluZyB9PiB7XG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUoc2V0dGluZ3NQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgbGV0IHJhdyA9ICd7fVxcbic7XG4gIHRyeSB7XG4gICAgcmF3ID0gYXdhaXQgcmVhZEZpbGUoc2V0dGluZ3NQYXRoLCAndXRmLTgnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmF3ID0gJ3t9XFxuJztcbiAgfVxuXG4gIGNvbnN0IGluZGVudCA9IGRldGVjdEluZGVudChyYXcpO1xuICBjb25zdCBwYXJzZWQgPSByYXcudHJpbSgpLmxlbmd0aCA9PT0gMCA/IHt9IDogSlNPTi5wYXJzZShyYXcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCB7IGNoYW5nZWQsIHBhcnNlZDogdXBkYXRlZCB9ID0gZW5zdXJlQ2xhdWRlUHJlVG9vbFVzZUhvb2socGFyc2VkLCBjb21tYW5kKTtcbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHsgY2hhbmdlZDogZmFsc2UgfTtcbiAgfVxuXG4gIGxldCBiYWNrdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChleGlzdHNTeW5jKHNldHRpbmdzUGF0aCkpIHtcbiAgICBiYWNrdXBQYXRoID0gYCR7c2V0dGluZ3NQYXRofS5kb2xsaG91c2UuYmFrYDtcbiAgICB3cml0ZUZpbGVTeW5jKGJhY2t1cFBhdGgsIHJhdywgJ3V0Zi04Jyk7XG4gIH1cblxuICBhd2FpdCB3cml0ZUZpbGUoc2V0dGluZ3NQYXRoLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCBpbmRlbnQpICsgJ1xcbicsICd1dGYtOCcpO1xuICByZXR1cm4geyBjaGFuZ2VkOiB0cnVlLCBiYWNrdXBQYXRoIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsUGVybWlzc2lvbkhvb2soXG4gIGNsaWVudDogc3RyaW5nLFxuICBvcHRpb25zOiBJbnN0YWxsUGVybWlzc2lvbkhvb2tPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPEluc3RhbGxQZXJtaXNzaW9uSG9va1Jlc3VsdD4ge1xuICBjb25zdCBub3JtYWxpemVkQ2xpZW50ID0gY2xpZW50Lm5vcm1hbGl6ZSgnTkZDJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChub3JtYWxpemVkQ2xpZW50ICE9PSAnY2xhdWRlLWNvZGUnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1cHBvcnRlZDogZmFsc2UsXG4gICAgICBpbnN0YWxsZWQ6IGZhbHNlLFxuICAgICAgY29uZmlndXJlZDogZmFsc2UsXG4gICAgICBob3N0OiBub3JtYWxpemVkQ2xpZW50LFxuICAgICAgbWVzc2FnZTogYEF1dG9tYXRpYyBwZXJtaXNzaW9uIGhvb2sgd2lyaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciAke25vcm1hbGl6ZWRDbGllbnR9LmAsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGhvbWVEaXIgPSBvcHRpb25zLmhvbWVEaXIgPz8gaG9tZWRpcigpO1xuICBjb25zdCBzb3VyY2VTY3JpcHRQYXRoID0gb3B0aW9ucy5zb3VyY2VTY3JpcHRQYXRoXG4gICAgPz8gam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncHJldG9vbHVzZS1kb2xsaG91c2Uuc2gnKTtcbiAgY29uc3QgdGFyZ2V0U2NyaXB0UGF0aCA9IGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKTtcbiAgY29uc3Qgc2V0dGluZ3NQYXRoID0gZ2V0Q2xhdWRlSG9va1NldHRpbmdzUGF0aChob21lRGlyKTtcbiAgY29uc3QgbWFya2VyUGF0aCA9IGdldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyKTtcbiAgY29uc3QgY29tbWFuZCA9IGBiYXNoICR7dGFyZ2V0U2NyaXB0UGF0aH1gO1xuXG4gIGNvbnN0IHNvdXJjZVN0YXQgPSBzdGF0U3luYyhzb3VyY2VTY3JpcHRQYXRoKTtcbiAgaWYgKCFzb3VyY2VTdGF0LmlzRmlsZSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQZXJtaXNzaW9uIGhvb2sgc291cmNlIHNjcmlwdCBub3QgZm91bmQ6ICR7c291cmNlU2NyaXB0UGF0aH1gKTtcbiAgfVxuXG4gIGF3YWl0IGNvcHlIb29rU2NyaXB0KHNvdXJjZVNjcmlwdFBhdGgsIHRhcmdldFNjcmlwdFBhdGgpO1xuICBjb25zdCBzZXR0aW5nc1Jlc3VsdCA9IGF3YWl0IG1lcmdlQ2xhdWRlU2V0dGluZ3Moc2V0dGluZ3NQYXRoLCBjb21tYW5kKTtcblxuICBhd2FpdCBta2RpcihkaXJuYW1lKG1hcmtlclBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgaW5zdGFsbGVkQXQgPSAob3B0aW9ucy5ub3cgPz8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgbWFya2VyOiBQZXJtaXNzaW9uSG9va01hcmtlciA9IHtcbiAgICBob3N0OiBub3JtYWxpemVkQ2xpZW50LFxuICAgIHNjcmlwdFBhdGg6IHRhcmdldFNjcmlwdFBhdGgsXG4gICAgc2V0dGluZ3NQYXRoLFxuICAgIGluc3RhbGxlZEF0LFxuICB9O1xuICBhd2FpdCB3cml0ZUZpbGUobWFya2VyUGF0aCwgSlNPTi5zdHJpbmdpZnkobWFya2VyLCBudWxsLCAyKSArICdcXG4nLCAndXRmLTgnKTtcblxuICByZXR1cm4ge1xuICAgIHN1cHBvcnRlZDogdHJ1ZSxcbiAgICBpbnN0YWxsZWQ6IHRydWUsXG4gICAgY29uZmlndXJlZDogdHJ1ZSxcbiAgICBob3N0OiBub3JtYWxpemVkQ2xpZW50LFxuICAgIHNjcmlwdFBhdGg6IHRhcmdldFNjcmlwdFBhdGgsXG4gICAgc2V0dGluZ3NQYXRoLFxuICAgIG1hcmtlclBhdGgsXG4gICAgYmFja3VwUGF0aDogc2V0dGluZ3NSZXN1bHQuYmFja3VwUGF0aCxcbiAgICBtZXNzYWdlOiAnSW5zdGFsbGVkIENsYXVkZSBDb2RlIHBlcm1pc3Npb24gaG9vayBhbmQgdXBkYXRlZCBzZXR0aW5ncy5qc29uLicsXG4gIH07XG59XG4iXX0=