@dollhousemcp/mcp-server 2.0.16 → 2.0.17

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 (40) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md.backup +18 -0
  3. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  4. package/dist/elements/base/BaseElementManager.js +17 -1
  5. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  6. package/dist/elements/memories/MemoryManager.js +13 -2
  7. package/dist/generated/version.d.ts +2 -2
  8. package/dist/generated/version.js +3 -3
  9. package/dist/handlers/element-crud/createElement.d.ts.map +1 -1
  10. package/dist/handlers/element-crud/createElement.js +6 -2
  11. package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
  12. package/dist/handlers/element-crud/editElement.js +6 -2
  13. package/dist/handlers/element-crud/helpers.d.ts +2 -0
  14. package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
  15. package/dist/handlers/element-crud/helpers.js +21 -2
  16. package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts.map +1 -1
  17. package/dist/handlers/mcp-aql/IntrospectionResolver.js +34 -7
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  19. package/dist/handlers/mcp-aql/MCPAQLHandler.js +19 -4
  20. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  21. package/dist/handlers/mcp-aql/OperationSchema.js +3 -2
  22. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
  23. package/dist/handlers/mcp-aql/evaluatePermission.js +2 -1
  24. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +8 -0
  25. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  26. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +26 -1
  27. package/dist/utils/permissionHooks.d.ts +39 -3
  28. package/dist/utils/permissionHooks.d.ts.map +1 -1
  29. package/dist/utils/permissionHooks.js +651 -74
  30. package/dist/web/public/permissions.js +38 -26
  31. package/dist/web/public/setup.js +367 -94
  32. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  33. package/dist/web/routes/permissionRoutes.js +32 -13
  34. package/dist/web/routes/setupRoutes.d.ts +1 -0
  35. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  36. package/dist/web/routes/setupRoutes.js +113 -41
  37. package/package.json +3 -1
  38. package/scripts/pretooluse-vscode.sh +163 -0
  39. package/scripts/pretooluse-windsurf.sh +166 -4
  40. package/server.json +2 -2
@@ -9,7 +9,7 @@ import { ElementType } from '../../portfolio/PortfolioManager.js';
9
9
  import { logger } from '../../utils/logger.js';
10
10
  import { SecurityMonitor } from '../../security/securityMonitor.js';
11
11
  import { ELEMENT_TYPE_MAP, ALL_ELEMENT_TYPES, formatElementTypesList as sharedFormatElementTypesList, } from '../../utils/elementTypeNormalization.js';
12
- import { parseElementPolicy, analyzePatternSyntax } from '../mcp-aql/policies/ElementPolicies.js';
12
+ import { parseElementPolicy, analyzePatternSyntax, getGatekeeperAuthoringErrors } from '../mcp-aql/policies/ElementPolicies.js';
13
13
  import { findPatternConflicts } from '../../utils/patternMatcher.js';
14
14
  export function findElementFlexibly(name, elementList) {
15
15
  if (!name || !Array.isArray(elementList) || elementList.length === 0) {
@@ -61,6 +61,25 @@ export function sanitizeMetadata(metadata) {
61
61
  }
62
62
  return sanitized;
63
63
  }
64
+ function asMetadataRecord(value) {
65
+ return value && typeof value === 'object' && !Array.isArray(value)
66
+ ? value
67
+ : undefined;
68
+ }
69
+ export function collectGatekeeperAuthoringErrors(input, metadata) {
70
+ const normalizeGatekeeperError = (error) => error.replace(/^Invalid gatekeeper policy:\s*/, '').trim();
71
+ return [...new Set([
72
+ ...getGatekeeperAuthoringErrors(input),
73
+ ...getGatekeeperAuthoringErrors(asMetadataRecord(metadata)),
74
+ ].map(normalizeGatekeeperError))];
75
+ }
76
+ export function formatGatekeeperValidationMessage(errors) {
77
+ const uniqueErrors = [...new Set(errors)];
78
+ return [
79
+ 'Gatekeeper policy validation failed:',
80
+ ...uniqueErrors.map(error => ` • ${error}`),
81
+ ].join('\n');
82
+ }
64
83
  // Delegate to shared normalization utility (Issue #433)
65
84
  const ELEMENT_TYPE_ALIASES = ELEMENT_TYPE_MAP;
66
85
  const ELEMENT_TYPE_LABELS = {
@@ -440,4 +459,4 @@ export async function resolveElementByName(manager, type, name) {
440
459
  logger.debug(`[ElementCRUD] Unable to locate ${type}:${name} via available manager operations.`);
441
460
  return undefined;
442
461
  }
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixzQkFBc0IsSUFBSSw0QkFBNEIsR0FDdkQsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRSxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLElBQVksRUFDWixXQUFnQjtJQUVoQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJDLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQzVCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQzNELENBQUM7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YSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxhQUFhLEtBQUssSUFBSSxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN2QyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO2dCQUNuRSxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUM5RCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLElBQUksSUFBSSxJQUFJLG9DQUFvQyxDQUFDLENBQUM7SUFDakcsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRklYOiBETUNQLVNFQy0wMDYgLSBTZWN1cml0eSBhdWRpdCBzdXBwcmVzc2lvblxuICogVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgaGVscGVyIHV0aWxpdGllcyBmb3IgZWxlbWVudCBvcGVyYXRpb25zLlxuICogTm8gYXVkaXQgbG9nZ2luZyBpcyByZXF1aXJlZCAtIGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgY2FsbGluZyBoYW5kbGVycy5cbiAqIEBzZWN1cml0eS1hdWRpdC1zdXBwcmVzcyBETUNQLVNFQy0wMDZcbiAqL1xuXG5pbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHtcbiAgRUxFTUVOVF9UWVBFX01BUCxcbiAgQUxMX0VMRU1FTlRfVFlQRVMsXG4gIGZvcm1hdEVsZW1lbnRUeXBlc0xpc3QgYXMgc2hhcmVkRm9ybWF0RWxlbWVudFR5cGVzTGlzdCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZWxlbWVudFR5cGVOb3JtYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IHBhcnNlRWxlbWVudFBvbGljeSwgYW5hbHl6ZVBhdHRlcm5TeW50YXggfSBmcm9tICcuLi9tY3AtYXFsL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5pbXBvcnQgeyBmaW5kUGF0dGVybkNvbmZsaWN0cyB9IGZyb20gJy4uLy4uL3V0aWxzL3BhdHRlcm5NYXRjaGVyLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbGVtZW50RmxleGlibHk8VCBleHRlbmRzIHsgbWV0YWRhdGE/OiB7IG5hbWU/OiBzdHJpbmcgfSB9PihcbiAgbmFtZTogc3RyaW5nLFxuICBlbGVtZW50TGlzdDogVFtdXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFuYW1lIHx8ICFBcnJheS5pc0FycmF5KGVsZW1lbnRMaXN0KSB8fCBlbGVtZW50TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2VhcmNoTmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBzZWFyY2hOYW1lU2x1ZyA9IHNsdWdpZnkobmFtZSk7XG5cbiAgbGV0IGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKFxuICAgIChlKSA9PiBlLm1ldGFkYXRhPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hOYW1lTG93ZXJcbiAgKTtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudExpc3QuZmluZCgoZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFNsdWcgPSBzbHVnaWZ5KGUubWV0YWRhdGE/Lm5hbWUgfHwgJycpO1xuICAgICAgcmV0dXJuIGVsZW1lbnRTbHVnID09PSBzZWFyY2hOYW1lU2x1ZyB8fCBlbGVtZW50U2x1ZyA9PT0gc2VhcmNoTmFtZUxvd2VyO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoKGUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZS5tZXRhZGF0YT8ubmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IGVsZW1lbnRTbHVnID0gc2x1Z2lmeShlbGVtZW50TmFtZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBlbGVtZW50U2x1Zy5pbmNsdWRlcyhzZWFyY2hOYW1lU2x1ZykgfHxcbiAgICAgICAgZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hOYW1lTG93ZXIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgZm9yIHNhbml0aXphdGlvblxuICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgdHlwZTogJ0VMRU1FTlRfVkFMSURBVEVEJyxcbiAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgc291cmNlOiAnaGVscGVycy5zYW5pdGl6ZU1ldGFkYXRhJyxcbiAgICBkZXRhaWxzOiAnTWV0YWRhdGEgc2FuaXRpemVkIGZvciBlbGVtZW50IGNyZWF0aW9uL3VwZGF0ZScsXG4gICAgYWRkaXRpb25hbERhdGE6IHsgZmllbGRDb3VudDogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCB9XG4gIH0pO1xuXG4gIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgY29uc3Qgc2FuaXRpemVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgaWYgKGRhbmdlcm91c1Byb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzYW5pdGl6ZWRba2V5XSA9IHNhbml0aXplTWV0YWRhdGEodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55Pik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNhbml0aXplZFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplZDtcbn1cblxuLy8gRGVsZWdhdGUgdG8gc2hhcmVkIG5vcm1hbGl6YXRpb24gdXRpbGl0eSAoSXNzdWUgIzQzMylcbmNvbnN0IEVMRU1FTlRfVFlQRV9BTElBU0VTID0gRUxFTUVOVF9UWVBFX01BUDtcblxuY29uc3QgRUxFTUVOVF9UWVBFX0xBQkVMUzogUmVjb3JkPEVsZW1lbnRUeXBlLCB7IHNpbmd1bGFyOiBzdHJpbmc7IHBsdXJhbDogc3RyaW5nIH0+ID0ge1xuICBbRWxlbWVudFR5cGUuUEVSU09OQV06IHsgc2luZ3VsYXI6ICdwZXJzb25hJywgcGx1cmFsOiAncGVyc29uYXMnIH0sXG4gIFtFbGVtZW50VHlwZS5TS0lMTF06IHsgc2luZ3VsYXI6ICdza2lsbCcsIHBsdXJhbDogJ3NraWxscycgfSxcbiAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogeyBzaW5ndWxhcjogJ3RlbXBsYXRlJywgcGx1cmFsOiAndGVtcGxhdGVzJyB9LFxuICBbRWxlbWVudFR5cGUuQUdFTlRdOiB7IHNpbmd1bGFyOiAnYWdlbnQnLCBwbHVyYWw6ICdhZ2VudHMnIH0sXG4gIFtFbGVtZW50VHlwZS5NRU1PUlldOiB7IHNpbmd1bGFyOiAnbWVtb3J5JywgcGx1cmFsOiAnbWVtb3JpZXMnIH0sXG4gIFtFbGVtZW50VHlwZS5FTlNFTUJMRV06IHsgc2luZ3VsYXI6ICdlbnNlbWJsZScsIHBsdXJhbDogJ2Vuc2VtYmxlcycgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQocmF3VHlwZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgdHlwZTogRWxlbWVudFR5cGUgfCBudWxsOyBhbGlhc1VzZWQ6IGJvb2xlYW4gfSB7XG4gIGlmICghcmF3VHlwZSB8fCB0eXBlb2YgcmF3VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhbGlhc1VzZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkS2V5ID0gcmF3VHlwZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRUeXBlID0gRUxFTUVOVF9UWVBFX0FMSUFTRVNbbm9ybWFsaXplZEtleV07XG5cbiAgaWYgKCFyZXNvbHZlZFR5cGUpIHtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhbGlhc1VzZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBhbGlhc1VzZWQgPSAhQUxMX0VMRU1FTlRfVFlQRVMuaW5jbHVkZXMocmF3VHlwZSBhcyBFbGVtZW50VHlwZSkgJiYgbm9ybWFsaXplZEtleSAhPT0gcmVzb2x2ZWRUeXBlO1xuICBpZiAoYWxpYXNVc2VkKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVzaW5nIHNpbmd1bGFyIGVsZW1lbnQgdHlwZSAnJHtyYXdUeXBlfScgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnJHtyZXNvbHZlZFR5cGV9JyBpbnN0ZWFkLmApO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogcmVzb2x2ZWRUeXBlLCBhbGlhc1VzZWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpOiBzdHJpbmcge1xuICByZXR1cm4gc2hhcmVkRm9ybWF0RWxlbWVudFR5cGVzTGlzdCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFR5cGVMYWJlbCh0eXBlOiBFbGVtZW50VHlwZSwgb3B0aW9uczogeyBwbHVyYWw/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IGxhYmVsID0gRUxFTUVOVF9UWVBFX0xBQkVMU1t0eXBlXTtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiBvcHRpb25zLnBsdXJhbCA/IHR5cGUgOiB0eXBlLnJlcGxhY2UoL3MkLywgJycpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnBsdXJhbCA/IGxhYmVsLnBsdXJhbCA6IGxhYmVsLnNpbmd1bGFyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEZpbGVuYW1lKHR5cGU6IEVsZW1lbnRUeXBlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYWZlU2x1ZyA9IHNsdWdpZnkobmFtZSB8fCAnJykgfHwgJ3VudGl0bGVkJztcbiAgY29uc3QgZXh0ZW5zaW9uID0gdHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZID8gJy55YW1sJyA6ICcubWQnO1xuICByZXR1cm4gYCR7c2FmZVNsdWd9JHtleHRlbnNpb259YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50TWFuYWdlck9wZXJhdGlvbnM8VD4ge1xuICBsaXN0PzogKCkgPT4gUHJvbWlzZTxUW10+O1xuICBmaW5kPzogKHByZWRpY2F0ZTogKGNhbmRpZGF0ZTogVCkgPT4gYm9vbGVhbikgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgbG9hZD86IChmaWxlUGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPFQ+O1xufVxuXG4vKipcbiAqIEtub3duIG1ldGFkYXRhIHByb3BlcnRpZXMgZm9yIGVhY2ggZWxlbWVudCB0eXBlLlxuICogVXNlZCBieSBib3RoIGBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzKClgIChjcmVhdGUvZWRpdCB3YXJuaW5ncylcbiAqIGFuZCBgZWRpdEVsZW1lbnQoKWAgKGZpZWxkIHJvdXRpbmcgdG8gbWV0YWRhdGEgdnMgZWxlbWVudCBvYmplY3QpLlxuICpcbiAqIElNUE9SVEFOVDogQm90aCBjYW1lbENhc2UgYW5kIHNuYWtlX2Nhc2UgdmFyaWFudHMgbXVzdCBiZSBsaXN0ZWQgd2hlcmVcbiAqIGFwcGxpY2FibGUsIHNpbmNlIExMTXMgbWF5IHNlbmQgZWl0aGVyIGZvcm0uIFRoZSBsb29rdXAgdXNlcyBleGFjdFxuICogc3RyaW5nIG1hdGNoaW5nIHZpYSBgU2V0LmhhcygpYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29tbW9uIHByb3BlcnRpZXMgc2hhcmVkIGFjcm9zcyBhbGwgdHlwZXM6XG4gKiAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2dhdGVrZWVwZXInXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFR5cGUtc3BlY2lmaWMgcHJvcGVydGllcyAob25seSB2YWxpZCBmb3IgdGhhdCBlbGVtZW50IHR5cGUpOlxuICogQWdlbnQ6ICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdhdXRvbm9teScsICdyZXNpbGllbmNlJ1xuICogU2tpbGw6ICdkb21haW5zJywgJ2NhdGVnb3J5JywgJ3ByZXJlcXVpc2l0ZXMnXG4gKiBFbnNlbWJsZTogJ2VsZW1lbnRzJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdhY3RpdmF0aW9uX3N0cmF0ZWd5J1xuICovXG5leHBvcnQgY29uc3QgS05PV05fTUVUQURBVEFfUFJPUEVSVElFUzogUmVjb3JkPEVsZW1lbnRUeXBlLCBTZXQ8c3RyaW5nPj4gPSB7XG4gIFtFbGVtZW50VHlwZS5QRVJTT05BXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIFBlcnNvbmEtc3BlY2lmaWNcbiAgICAndHJpZ2dlcnMnLCAndG9uZScsICd2b2ljZScsICdkb21haW4nLCAnY29udGV4dCcsICdzdHlsZScsICdpbnN0cnVjdGlvbnMnLFxuICAgICdwZXJzb25hbGl0eScsICdleHBlcnRpc2UnLCAnY29tbXVuaWNhdGlvbl9zdHlsZScsICdjb21tdW5pY2F0aW9uU3R5bGUnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuU0tJTExdOiBuZXcgU2V0KFtcbiAgICAvLyBDb21tb24gbWV0YWRhdGFcbiAgICAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLFxuICAgIC8vIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICAnZ2F0ZWtlZXBlcicsXG4gICAgLy8gU2tpbGwtc3BlY2lmaWNcbiAgICAndHJpZ2dlcnMnLCAnZG9tYWluJywgJ2RvbWFpbnMnLCAnY2F0ZWdvcnknLCAnZXhhbXBsZXMnLCAncHJlcmVxdWlzaXRlcycsXG4gICAgJ2NvbnRlbnQnLCAnaW5zdHJ1Y3Rpb25zJywgJ3VzYWdlJywgJ2NhcGFiaWxpdGllcydcbiAgXSksXG4gIFtFbGVtZW50VHlwZS5URU1QTEFURV06IG5ldyBTZXQoW1xuICAgIC8vIENvbW1vbiBtZXRhZGF0YVxuICAgICduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2F1dGhvcicsICd2ZXJzaW9uJywgJ3RhZ3MnLCAnY3JlYXRlZCcsICdtb2RpZmllZCcsXG4gICAgLy8gR2F0ZWtlZXBlciBwb2xpY3kgKGFsbCBlbGVtZW50IHR5cGVzKVxuICAgICdnYXRla2VlcGVyJyxcbiAgICAvLyBUZW1wbGF0ZS1zcGVjaWZpY1xuICAgICd2YXJpYWJsZXMnLCAndGVtcGxhdGUnLCAnY2F0ZWdvcnknLCAnb3V0cHV0Rm9ybWF0JywgJ291dHB1dF9mb3JtYXQnLFxuICAgICdjb250ZW50JywgJ2luc3RydWN0aW9ucycsICdmb3JtYXQnLCAnc2NoZW1hJ1xuICBdKSxcbiAgW0VsZW1lbnRUeXBlLkFHRU5UXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIEFnZW50IFYxIGZpZWxkcyAobGVnYWN5LCBzdGlsbCBzdXBwb3J0ZWQpXG4gICAgJ2dvYWxzJywgJ2NvbnN0cmFpbnRzJywgJ2NhcGFiaWxpdGllcycsICd0cmlnZ2VycycsICdzdGF0ZScsICdhY3Rpb25zJyxcbiAgICAnZGVjaXNpb25GcmFtZXdvcmsnLCAnZGVjaXNpb25fZnJhbWV3b3JrJywgJ3NraWxscycsXG4gICAgLy8gQWdlbnQgVjIgZmllbGRzICh2Mi4wLjAgQWdlbnRpYyBMb29wIFJlZGVzaWduKVxuICAgICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdzeXN0ZW1Qcm9tcHQnLCAnc3lzdGVtX3Byb21wdCcsXG4gICAgJ2F1dG9ub215JywgJ3Jlc2lsaWVuY2UnLCAnc3VjY2Vzc0NyaXRlcmlhJywgJ3N1Y2Nlc3NfY3JpdGVyaWEnLFxuICAgIC8vIElzc3VlICM1ODU6IEJvZHkgY29udGVudCBmaWVsZHMgKHN0b3JlZCBpbiBleHRlbnNpb25zLmluc3RydWN0aW9ucylcbiAgICAnY29udGVudCcsICdpbnN0cnVjdGlvbnMnLFxuICAgIC8vIFYxIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAnc3BlY2lhbGl6YXRpb25zJywgJ3Jpc2tUb2xlcmFuY2UnLCAncmlza190b2xlcmFuY2UnLFxuICAgICdsZWFybmluZ0VuYWJsZWQnLCAnbGVhcm5pbmdfZW5hYmxlZCcsICdtYXhDb25jdXJyZW50R29hbHMnLCAnbWF4X2NvbmN1cnJlbnRfZ29hbHMnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuTUVNT1JZXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIE1lbW9yeS1zcGVjaWZpY1xuICAgICdpZCcsICdlbnRyaWVzJywgJ2luc3RydWN0aW9ucycsICdyZXRlbnRpb25Qb2xpY3knLCAncmV0ZW50aW9uX3BvbGljeScsICdtYXhFbnRyaWVzJyxcbiAgICAnbWF4X2VudHJpZXMnLCAnY2F0ZWdvcnknLCAnc2NvcGUnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiBuZXcgU2V0KFtcbiAgICAvLyBDb21tb24gbWV0YWRhdGFcbiAgICAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLFxuICAgIC8vIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICAnZ2F0ZWtlZXBlcicsXG4gICAgLy8gRW5zZW1ibGUtc3BlY2lmaWMgLSBOT1RFOiAnZWxlbWVudHMnIGlzIGNvcnJlY3QsIE5PVCAnbWVtYmVycydcbiAgICAnZWxlbWVudHMnLCAnaW5zdHJ1Y3Rpb25zJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdhY3RpdmF0aW9uX3N0cmF0ZWd5JyxcbiAgICAnY29uZmxpY3RSZXNvbHV0aW9uJywgJ2NvbmZsaWN0X3Jlc29sdXRpb24nLFxuICAgICdjb250ZXh0U2hhcmluZycsICdjb250ZXh0X3NoYXJpbmcnLFxuICAgICdyZXNvdXJjZUxpbWl0cycsICdyZXNvdXJjZV9saW1pdHMnLFxuICAgICdhbGxvd05lc3RlZCcsICdhbGxvd19uZXN0ZWQnLFxuICAgICdtYXhOZXN0aW5nRGVwdGgnLCAnbWF4X25lc3RpbmdfZGVwdGgnXG4gIF0pXG59O1xuXG4vKipcbiAqIENvbW1vbiB0eXBvcyBhbmQgdGhlaXIgY29ycmVjdGlvbnMgZm9yIGJldHRlciBMTE0gZmVlZGJhY2suXG4gKlxuICogSU1QT1JUQU5UOiBBbGwga2V5cyBNVVNUIGJlIGxvd2VyY2FzZS4gVGhlIGxvb2t1cCB1c2VzIGBrZXkudG9Mb3dlckNhc2UoKWBcbiAqIHRvIGVuc3VyZSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHbG9iYWwgY29ycmVjdGlvbiAoYXBwbGllcyB0byBhbGwgZWxlbWVudCB0eXBlcyk6XG4gKiAnZGlzY3JpcHRpb24nOiB7IGNvcnJlY3Q6ICdkZXNjcmlwdGlvbicgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUeXBlLXNwZWNpZmljIGNvcnJlY3Rpb24gKG9ubHkgYXBwbGllcyB0byBzcGVjaWZpZWQgdHlwZXMpOlxuICogJ21lbWJlcnMnOiB7IGNvcnJlY3Q6ICdlbGVtZW50cycsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9XG4gKi9cbmNvbnN0IFBST1BFUlRZX0NPUlJFQ1RJT05TOiBSZWNvcmQ8c3RyaW5nLCB7IGNvcnJlY3Q6IHN0cmluZzsgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXSB9PiA9IHtcbiAgLy8gRW5zZW1ibGU6ICdtZW1iZXJzJyBpcyBhIGNvbW1vbiBtaXN0YWtlIC0gc2hvdWxkIGJlICdlbGVtZW50cydcbiAgJ21lbWJlcnMnOiB7IGNvcnJlY3Q6ICdlbGVtZW50cycsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9LFxuICAnbWVtYmVyJzogeyBjb3JyZWN0OiAnZWxlbWVudHMnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5FTlNFTUJMRV0gfSxcbiAgLy8gQ29tbW9uIHR5cG9zXG4gICdkaXNjcmlwdGlvbic6IHsgY29ycmVjdDogJ2Rlc2NyaXB0aW9uJyB9LFxuICAnZGVzY2lwdGlvbic6IHsgY29ycmVjdDogJ2Rlc2NyaXB0aW9uJyB9LFxuICAnYXV0aGVyJzogeyBjb3JyZWN0OiAnYXV0aG9yJyB9LFxuICAndGFnZXMnOiB7IGNvcnJlY3Q6ICd0YWdzJyB9LFxuICAndmFyaWJsZXMnOiB7IGNvcnJlY3Q6ICd2YXJpYWJsZXMnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5URU1QTEFURV0gfSxcbiAgJ2FjdGl2aWF0aW9uJzogeyBjb3JyZWN0OiAnYWN0aXZhdGlvbicgfSxcbiAgJ3N0cmF0ZXJneSc6IHsgY29ycmVjdDogJ3N0cmF0ZWd5JyB9LFxuICAnZWxlbWV0cyc6IHsgY29ycmVjdDogJ2VsZW1lbnRzJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH0sXG4gIC8vIFNuYWtlX2Nhc2UgdnMgY2FtZWxDYXNlIG1pc21hdGNoZXNcbiAgJ2FjdGl2YXRpb25zdHJhdGVneSc6IHsgY29ycmVjdDogJ2FjdGl2YXRpb25TdHJhdGVneScsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9LFxuICAnY29uZmxpY3RyZXNvbHV0aW9uJzogeyBjb3JyZWN0OiAnY29uZmxpY3RSZXNvbHV0aW9uJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH0sXG4gICdjb250ZXh0c2hhcmluZyc6IHsgY29ycmVjdDogJ2NvbnRleHRTaGFyaW5nJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH1cbn07XG5cbi8qKlxuICogUmVzdWx0IG9mIGNoZWNraW5nIG1ldGFkYXRhIGZvciB1bmtub3duIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5rbm93blByb3BlcnR5V2FybmluZyB7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb24/OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGdhdGVrZWVwZXIgcG9saWN5IGluIGVsZW1lbnQgbWV0YWRhdGEuXG4gKiBSZXR1cm5zIHdhcm5pbmdzIChub3QgdGhyb3dzKSBmb3IgaW52YWxpZCBwb2xpY3kgc3RydWN0dXJlcyxcbiAqIHNvIExMTXMgZ2V0IGltbWVkaWF0ZSBmZWVkYmFjayBhYm91dCBtYWxmb3JtZWQgcG9saWNpZXMuXG4gKlxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIG9iamVjdCBjb250YWluaW5nIHRoZSBnYXRla2VlcGVyIHBvbGljeVxuICogQHJldHVybnMgQXJyYXkgb2Ygd2FybmluZ3MgZm9yIGludmFsaWQgcG9saWN5IHN0cnVjdHVyZSAoZW1wdHkgaWYgdmFsaWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUdhdGVrZWVwZXJQb2xpY3koXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVW5rbm93blByb3BlcnR5V2FybmluZ1tdIHtcbiAgaWYgKCFtZXRhZGF0YS5nYXRla2VlcGVyKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwb2xpY3kgPSBwYXJzZUVsZW1lbnRQb2xpY3kobWV0YWRhdGEpO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10gPSBbXTtcblxuICAgIC8vIElzc3VlICM2NzQ6IFdhcm4gd2hlbiBhbiBvcGVyYXRpb24gYXBwZWFycyBpbiBib3RoIGFsbG93IGFuZCBjb25maXJtIGxpc3RzXG4gICAgLy8gVGhlIG1vc3QgcmVzdHJpY3RpdmUgcG9saWN5IChjb25maXJtKSB3aWxsIGFwcGx5LCBidXQgdGhlIG92ZXJsYXAgaXMgbGlrZWx5IGEgbWlzdGFrZVxuICAgIGlmIChwb2xpY3k/LmFsbG93Py5sZW5ndGggJiYgcG9saWN5Py5jb25maXJtPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbG93U2V0ID0gbmV3IFNldChwb2xpY3kuYWxsb3cpO1xuICAgICAgZm9yIChjb25zdCBvcCBvZiBwb2xpY3kuY29uZmlybSkge1xuICAgICAgICBpZiAoYWxsb3dTZXQuaGFzKG9wKSkge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydHk6ICdnYXRla2VlcGVyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBPcGVyYXRpb24gJyR7b3B9JyBhcHBlYXJzIGluIGJvdGggYWxsb3cgYW5kIGNvbmZpcm0g4oCUIG1vc3QgcmVzdHJpY3RpdmUgcG9saWN5IChjb25maXJtKSB3aWxsIGFwcGx5LmAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjI1IFBoYXNlIDI6IERldGVjdCBhbGxvdy9kZW55IHBhdHRlcm4gY29uZmxpY3RzXG4gICAgaWYgKHBvbGljeT8uZXh0ZXJuYWxSZXN0cmljdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgYWxsb3dQYXR0ZXJucywgZGVueVBhdHRlcm5zLCBjb25maXJtUGF0dGVybnMgfSA9IHBvbGljeS5leHRlcm5hbFJlc3RyaWN0aW9ucztcbiAgICAgIGlmIChhbGxvd1BhdHRlcm5zPy5sZW5ndGggJiYgZGVueVBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29uZmxpY3RzID0gZmluZFBhdHRlcm5Db25mbGljdHMoZGVueVBhdHRlcm5zLCBhbGxvd1BhdHRlcm5zKTtcbiAgICAgICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBjb25mbGljdHMpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUGF0dGVybiBjb25mbGljdCAoZGVueSB0YWtlcyBwcmVjZWRlbmNlKTogJHtjb25mbGljdH1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICMxNjYwOiBEZXRlY3QgY29uZmlybS9kZW55IHBhdHRlcm4gY29uZmxpY3RzXG4gICAgICBpZiAoY29uZmlybVBhdHRlcm5zPy5sZW5ndGggJiYgZGVueVBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29uZmxpY3RzID0gZmluZFBhdHRlcm5Db25mbGljdHMoZGVueVBhdHRlcm5zLCBjb25maXJtUGF0dGVybnMpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIGNvbmZsaWN0cykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydHk6ICdnYXRla2VlcGVyLmV4dGVybmFsUmVzdHJpY3Rpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBQYXR0ZXJuIGNvbmZsaWN0IChkZW55IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBjb25maXJtKTogJHtjb25mbGljdH1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICMxNjY0OiBFbmhhbmNlZCBwYXR0ZXJuIHN5bnRheCB2YWxpZGF0aW9uXG4gICAgICBjb25zdCBhbGxQYXR0ZXJuQXJyYXlzOiBbc3RyaW5nW10gfCB1bmRlZmluZWQsIHN0cmluZ11bXSA9IFtcbiAgICAgICAgW2RlbnlQYXR0ZXJucywgJ2RlbnlQYXR0ZXJucyddLFxuICAgICAgICBbY29uZmlybVBhdHRlcm5zLCAnY29uZmlybVBhdHRlcm5zJ10sXG4gICAgICAgIFthbGxvd1BhdHRlcm5zLCAnYWxsb3dQYXR0ZXJucyddLFxuICAgICAgXTtcbiAgICAgIGZvciAoY29uc3QgW3BhdHRlcm5zLCBmaWVsZE5hbWVdIG9mIGFsbFBhdHRlcm5BcnJheXMpIHtcbiAgICAgICAgaWYgKHBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBzeW50YXhXYXJuaW5ncyA9IGFuYWx5emVQYXR0ZXJuU3ludGF4KHBhdHRlcm5zLCBmaWVsZE5hbWUpO1xuICAgICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBzeW50YXhXYXJuaW5ncykge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7XG4gICAgICAgICAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHdhcm5pbmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd2FybmluZ3M7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlcicsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIH1dO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgbWV0YWRhdGEgZm9yIHVua25vd24gcHJvcGVydGllcyBhbmQgcmV0dXJuIHdhcm5pbmdzLlxuICogVGhpcyBoZWxwcyBMTE1zIGNvcnJlY3QgdGhlaXIgYmVoYXZpb3IgaW4gcmVhbC10aW1lIHdoZW4gdGhleSB1c2Ugd3JvbmcgcHJvcGVydHkgbmFtZXMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gVGhlIHR5cGUgb2YgZWxlbWVudCBiZWluZyBjcmVhdGVkL2VkaXRlZFxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIG9iamVjdCB0byBjaGVja1xuICogQHJldHVybnMgQXJyYXkgb2Ygd2FybmluZ3MgZm9yIHVua25vd24gcHJvcGVydGllc1xuICovXG4vLyBGaWVsZHMgaGFuZGxlZCBieSBkZWRpY2F0ZWQgYnJhbmNoZXMgaW4gZWRpdEVsZW1lbnQsIG5vdCBtZXRhZGF0YSByb3V0aW5nLlxuLy8gVGhlc2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIFwidW5rbm93biBwcm9wZXJ0eVwiIHdhcm5pbmdzIHNpbmNlIHRoZXkgQVJFIHByb2Nlc3NlZC5cbmNvbnN0IFNQRUNJQUxfUk9VVEVfRklFTERTID0gbmV3IFNldChbXG4gICdpbnN0cnVjdGlvbnMnLCAnY29udGVudCcsICdlbGVtZW50cycsICdtZXRhZGF0YScsICdlbnRyaWVzJywgJ3ZlcnNpb24nXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMoXG4gIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10ge1xuICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBrbm93blByb3BlcnRpZXMgPSBLTk9XTl9NRVRBREFUQV9QUk9QRVJUSUVTW2VsZW1lbnRUeXBlXTtcbiAgaWYgKCFrbm93blByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB3YXJuaW5nczogVW5rbm93blByb3BlcnR5V2FybmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YWRhdGEpKSB7XG4gICAgLy8gU2tpcCBpZiBpdCdzIGEga25vd24gcHJvcGVydHlcbiAgICBpZiAoa25vd25Qcm9wZXJ0aWVzLmhhcyhrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIHNwZWNpYWwgcm91dGUgZmllbGRzIOKAlCB0aGVzZSBhcmUgaGFuZGxlZCBieSBkZWRpY2F0ZWQgY29kZSBwYXRoc1xuICAgIC8vIGluIGVkaXRFbGVtZW50IChub3QgbWV0YWRhdGEgcm91dGluZyksIHNvIHdhcm5pbmcgaXMgbWlzbGVhZGluZ1xuICAgIGlmIChTUEVDSUFMX1JPVVRFX0ZJRUxEUy5oYXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGtub3duIHR5cG8gd2l0aCBhIGNvcnJlY3Rpb25cbiAgICBjb25zdCBjb3JyZWN0aW9uID0gUFJPUEVSVFlfQ09SUkVDVElPTlNba2V5LnRvTG93ZXJDYXNlKCldO1xuICAgIGlmIChjb3JyZWN0aW9uKSB7XG4gICAgICAvLyBDaGVjayBpZiBjb3JyZWN0aW9uIGFwcGxpZXMgdG8gdGhpcyBlbGVtZW50IHR5cGVcbiAgICAgIGNvbnN0IGFwcGxpZXNUb1R5cGUgPSAhY29ycmVjdGlvbi5lbGVtZW50VHlwZXMgfHxcbiAgICAgICAgY29ycmVjdGlvbi5lbGVtZW50VHlwZXMuaW5jbHVkZXMoZWxlbWVudFR5cGUpO1xuXG4gICAgICBpZiAoYXBwbGllc1RvVHlwZSkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICBwcm9wZXJ0eToga2V5LFxuICAgICAgICAgIHN1Z2dlc3Rpb246IGNvcnJlY3Rpb24uY29ycmVjdCxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5rbm93biBwcm9wZXJ0eSAnJHtrZXl9JyAtIGRpZCB5b3UgbWVhbiAnJHtjb3JyZWN0aW9uLmNvcnJlY3R9Jz9gXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmljIHVua25vd24gcHJvcGVydHkgd2FybmluZ1xuICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgcHJvcGVydHk6IGtleSxcbiAgICAgIG1lc3NhZ2U6IGBVbmtub3duIHByb3BlcnR5ICcke2tleX0nIGZvciAke2dldEVsZW1lbnRUeXBlTGFiZWwoZWxlbWVudFR5cGUpfSAtIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkYFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZ2F0ZWtlZXBlciBwb2xpY3kgc3RydWN0dXJlIGlmIHByZXNlbnRcbiAgaWYgKG1ldGFkYXRhLmdhdGVrZWVwZXIpIHtcbiAgICB3YXJuaW5ncy5wdXNoKC4uLnZhbGlkYXRlR2F0ZWtlZXBlclBvbGljeShtZXRhZGF0YSkpO1xuICB9XG5cbiAgcmV0dXJuIHdhcm5pbmdzO1xufVxuXG4vKipcbiAqIEZvcm1hdCB1bmtub3duIHByb3BlcnR5IHdhcm5pbmdzIGZvciBNQ1AgcmVzcG9uc2UuXG4gKiBSZXR1cm5zIGEgd2FybmluZyBibG9jayB0aGF0IGNhbiBiZSBwcmVwZW5kZWQgdG8gc3VjY2VzcyBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFVua25vd25Qcm9wZXJ0eVdhcm5pbmdzKHdhcm5pbmdzOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10pOiBzdHJpbmcge1xuICBpZiAod2FybmluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBbJ+KaoO+4jyAqKk1ldGFkYXRhIFdhcm5pbmdzOioqJ107XG4gIGZvciAoY29uc3Qgd2FybmluZyBvZiB3YXJuaW5ncykge1xuICAgIGlmICh3YXJuaW5nLnN1Z2dlc3Rpb24pIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgIOKAoiAke3dhcm5pbmcubWVzc2FnZX0gVXNlICcke3dhcm5pbmcuc3VnZ2VzdGlvbn0nIGluc3RlYWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgIOKAoiAke3dhcm5pbmcubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgbGluZXMucHVzaCgnJyk7IC8vIEVtcHR5IGxpbmUgYWZ0ZXIgd2FybmluZ3NcblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRm9ybWF0IGVsZW1lbnQgcmVzb2x1dGlvbiB3YXJuaW5ncyBmb3IgTUNQIHJlc3BvbnNlLlxuICogU3VyZmFjZXMgZGlzYW1iaWd1YXRpb24gYW5kIG5vdC1mb3VuZCBpbmZvIGZyb20gcmVzb2x2ZUVsZW1lbnRUeXBlcygpXG4gKiBzbyB0aGUgdXNlciBjYW4gZml4IG1pc3NpbmcgZWxlbWVudF90eXBlIGZpZWxkcy5cbiAqXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MoKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3MocmVzdWx0OiB7IGFtYmlndW91czogQXJyYXk8eyBlbGVtZW50X25hbWU6IHN0cmluZzsgZm91bmRfaW46IHN0cmluZ1tdIH0+OyBub3RGb3VuZDogc3RyaW5nW10gfSk6IHN0cmluZyB7XG4gIGlmIChyZXN1bHQuYW1iaWd1b3VzLmxlbmd0aCA9PT0gMCAmJiByZXN1bHQubm90Rm91bmQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBbJ+KaoO+4jyAqKkVsZW1lbnQgUmVzb2x1dGlvbiBXYXJuaW5nczoqKiddO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiByZXN1bHQuYW1iaWd1b3VzKSB7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGAgICDigKIgJyR7aXRlbS5lbGVtZW50X25hbWV9JyBleGlzdHMgYXMgbXVsdGlwbGUgdHlwZXMgKCR7aXRlbS5mb3VuZF9pbi5qb2luKCcsICcpfSkg4oCUIHNwZWNpZnkgZWxlbWVudF90eXBlIHRvIGRpc2FtYmlndWF0ZWBcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdC5ub3RGb3VuZCkge1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAg4oCiICcke25hbWV9JyBub3QgZm91bmQgaW4gcG9ydGZvbGlvIOKAlCBwcm92aWRlIGVsZW1lbnRfdHlwZSBleHBsaWNpdGx5IG9yIGVuc3VyZSB0aGUgZWxlbWVudCBleGlzdHNgXG4gICAgKTtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpOyAvLyBFbXB0eSBsaW5lIGFmdGVyIHdhcm5pbmdzXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVFbGVtZW50QnlOYW1lPFQ+KFxuICBtYW5hZ2VyOiBFbGVtZW50TWFuYWdlck9wZXJhdGlvbnM8VD4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICB0eXBlOiBFbGVtZW50VHlwZSxcbiAgbmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWFuYWdlci5saXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBtYW5hZ2VyLmxpc3QoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50cykgJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZm91bmQgPSBmaW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGVsZW1lbnRzIGFzIGFueVtdKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQgYXMgVDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG1hbmFnZXIuZmluZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGxvd2VyZWQgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgc2x1ZyA9IHNsdWdpZnkobmFtZSk7XG4gICAgY29uc3QgZm91bmQgPSBhd2FpdCBtYW5hZ2VyLmZpbmQoKGNhbmRpZGF0ZTogYW55KSA9PiB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVOYW1lID0gY2FuZGlkYXRlPy5tZXRhZGF0YT8ubmFtZTtcbiAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FuZGlkYXRlU2x1ZyA9IHNsdWdpZnkoY2FuZGlkYXRlTmFtZSk7XG4gICAgICByZXR1cm4gY2FuZGlkYXRlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBsb3dlcmVkIHx8IGNhbmRpZGF0ZVNsdWcgPT09IHNsdWc7XG4gICAgfSk7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBtYW5hZ2VyLmxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVGaWxlbmFtZSA9IGdldEVsZW1lbnRGaWxlbmFtZSh0eXBlLCBuYW1lKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG1hbmFnZXIubG9hZChjYW5kaWRhdGVGaWxlbmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0VsZW1lbnRDUlVEXSBEaXJlY3QgbG9hZCBmYWlsZWQgZm9yICR7dHlwZX06JHtuYW1lfWAsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBbRWxlbWVudENSVURdIFVuYWJsZSB0byBsb2NhdGUgJHt0eXBlfToke25hbWV9IHZpYSBhdmFpbGFibGUgbWFuYWdlciBvcGVyYXRpb25zLmApO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixzQkFBc0IsSUFBSSw0QkFBNEIsR0FDdkQsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoSSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRSxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLElBQVksRUFDWixXQUFnQjtJQUVoQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJDLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQzVCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxlQUFl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LE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN2QyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO2dCQUNuRSxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUM5RCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLElBQUksSUFBSSxJQUFJLG9DQUFvQyxDQUFDLENBQUM7SUFDakcsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRklYOiBETUNQLVNFQy0wMDYgLSBTZWN1cml0eSBhdWRpdCBzdXBwcmVzc2lvblxuICogVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgaGVscGVyIHV0aWxpdGllcyBmb3IgZWxlbWVudCBvcGVyYXRpb25zLlxuICogTm8gYXVkaXQgbG9nZ2luZyBpcyByZXF1aXJlZCAtIGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgY2FsbGluZyBoYW5kbGVycy5cbiAqIEBzZWN1cml0eS1hdWRpdC1zdXBwcmVzcyBETUNQLVNFQy0wMDZcbiAqL1xuXG5pbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHtcbiAgRUxFTUVOVF9UWVBFX01BUCxcbiAgQUxMX0VMRU1FTlRfVFlQRVMsXG4gIGZvcm1hdEVsZW1lbnRUeXBlc0xpc3QgYXMgc2hhcmVkRm9ybWF0RWxlbWVudFR5cGVzTGlzdCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZWxlbWVudFR5cGVOb3JtYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IHBhcnNlRWxlbWVudFBvbGljeSwgYW5hbHl6ZVBhdHRlcm5TeW50YXgsIGdldEdhdGVrZWVwZXJBdXRob3JpbmdFcnJvcnMgfSBmcm9tICcuLi9tY3AtYXFsL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5pbXBvcnQgeyBmaW5kUGF0dGVybkNvbmZsaWN0cyB9IGZyb20gJy4uLy4uL3V0aWxzL3BhdHRlcm5NYXRjaGVyLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbGVtZW50RmxleGlibHk8VCBleHRlbmRzIHsgbWV0YWRhdGE/OiB7IG5hbWU/OiBzdHJpbmcgfSB9PihcbiAgbmFtZTogc3RyaW5nLFxuICBlbGVtZW50TGlzdDogVFtdXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFuYW1lIHx8ICFBcnJheS5pc0FycmF5KGVsZW1lbnRMaXN0KSB8fCBlbGVtZW50TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2VhcmNoTmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBzZWFyY2hOYW1lU2x1ZyA9IHNsdWdpZnkobmFtZSk7XG5cbiAgbGV0IGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKFxuICAgIChlKSA9PiBlLm1ldGFkYXRhPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hOYW1lTG93ZXJcbiAgKTtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudExpc3QuZmluZCgoZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFNsdWcgPSBzbHVnaWZ5KGUubWV0YWRhdGE/Lm5hbWUgfHwgJycpO1xuICAgICAgcmV0dXJuIGVsZW1lbnRTbHVnID09PSBzZWFyY2hOYW1lU2x1ZyB8fCBlbGVtZW50U2x1ZyA9PT0gc2VhcmNoTmFtZUxvd2VyO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoKGUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZS5tZXRhZGF0YT8ubmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IGVsZW1lbnRTbHVnID0gc2x1Z2lmeShlbGVtZW50TmFtZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBlbGVtZW50U2x1Zy5pbmNsdWRlcyhzZWFyY2hOYW1lU2x1ZykgfHxcbiAgICAgICAgZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hOYW1lTG93ZXIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgZm9yIHNhbml0aXphdGlvblxuICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgdHlwZTogJ0VMRU1FTlRfVkFMSURBVEVEJyxcbiAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgc291cmNlOiAnaGVscGVycy5zYW5pdGl6ZU1ldGFkYXRhJyxcbiAgICBkZXRhaWxzOiAnTWV0YWRhdGEgc2FuaXRpemVkIGZvciBlbGVtZW50IGNyZWF0aW9uL3VwZGF0ZScsXG4gICAgYWRkaXRpb25hbERhdGE6IHsgZmllbGRDb3VudDogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCB9XG4gIH0pO1xuXG4gIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgY29uc3Qgc2FuaXRpemVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgaWYgKGRhbmdlcm91c1Byb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzYW5pdGl6ZWRba2V5XSA9IHNhbml0aXplTWV0YWRhdGEodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55Pik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNhbml0aXplZFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplZDtcbn1cblxuZnVuY3Rpb24gYXNNZXRhZGF0YVJlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEdhdGVrZWVwZXJBdXRob3JpbmdFcnJvcnMoXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgbWV0YWRhdGE/OiB1bmtub3duXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZUdhdGVrZWVwZXJFcnJvciA9IChlcnJvcjogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgZXJyb3IucmVwbGFjZSgvXkludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6XFxzKi8sICcnKS50cmltKCk7XG5cbiAgcmV0dXJuIFsuLi5uZXcgU2V0KFtcbiAgICAuLi5nZXRHYXRla2VlcGVyQXV0aG9yaW5nRXJyb3JzKGlucHV0KSxcbiAgICAuLi5nZXRHYXRla2VlcGVyQXV0aG9yaW5nRXJyb3JzKGFzTWV0YWRhdGFSZWNvcmQobWV0YWRhdGEpKSxcbiAgXS5tYXAobm9ybWFsaXplR2F0ZWtlZXBlckVycm9yKSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0R2F0ZWtlZXBlclZhbGlkYXRpb25NZXNzYWdlKGVycm9yczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCB1bmlxdWVFcnJvcnMgPSBbLi4ubmV3IFNldChlcnJvcnMpXTtcbiAgcmV0dXJuIFtcbiAgICAnR2F0ZWtlZXBlciBwb2xpY3kgdmFsaWRhdGlvbiBmYWlsZWQ6JyxcbiAgICAuLi51bmlxdWVFcnJvcnMubWFwKGVycm9yID0+IGAgIOKAoiAke2Vycm9yfWApLFxuICBdLmpvaW4oJ1xcbicpO1xufVxuLy8gRGVsZWdhdGUgdG8gc2hhcmVkIG5vcm1hbGl6YXRpb24gdXRpbGl0eSAoSXNzdWUgIzQzMylcbmNvbnN0IEVMRU1FTlRfVFlQRV9BTElBU0VTID0gRUxFTUVOVF9UWVBFX01BUDtcblxuY29uc3QgRUxFTUVOVF9UWVBFX0xBQkVMUzogUmVjb3JkPEVsZW1lbnRUeXBlLCB7IHNpbmd1bGFyOiBzdHJpbmc7IHBsdXJhbDogc3RyaW5nIH0+ID0ge1xuICBbRWxlbWVudFR5cGUuUEVSU09OQV06IHsgc2luZ3VsYXI6ICdwZXJzb25hJywgcGx1cmFsOiAncGVyc29uYXMnIH0sXG4gIFtFbGVtZW50VHlwZS5TS0lMTF06IHsgc2luZ3VsYXI6ICdza2lsbCcsIHBsdXJhbDogJ3NraWxscycgfSxcbiAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogeyBzaW5ndWxhcjogJ3RlbXBsYXRlJywgcGx1cmFsOiAndGVtcGxhdGVzJyB9LFxuICBbRWxlbWVudFR5cGUuQUdFTlRdOiB7IHNpbmd1bGFyOiAnYWdlbnQnLCBwbHVyYWw6ICdhZ2VudHMnIH0sXG4gIFtFbGVtZW50VHlwZS5NRU1PUlldOiB7IHNpbmd1bGFyOiAnbWVtb3J5JywgcGx1cmFsOiAnbWVtb3JpZXMnIH0sXG4gIFtFbGVtZW50VHlwZS5FTlNFTUJMRV06IHsgc2luZ3VsYXI6ICdlbnNlbWJsZScsIHBsdXJhbDogJ2Vuc2VtYmxlcycgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQocmF3VHlwZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgdHlwZTogRWxlbWVudFR5cGUgfCBudWxsOyBhbGlhc1VzZWQ6IGJvb2xlYW4gfSB7XG4gIGlmICghcmF3VHlwZSB8fCB0eXBlb2YgcmF3VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhbGlhc1VzZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkS2V5ID0gcmF3VHlwZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRUeXBlID0gRUxFTUVOVF9UWVBFX0FMSUFTRVNbbm9ybWFsaXplZEtleV07XG5cbiAgaWYgKCFyZXNvbHZlZFR5cGUpIHtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhbGlhc1VzZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBhbGlhc1VzZWQgPSAhQUxMX0VMRU1FTlRfVFlQRVMuaW5jbHVkZXMocmF3VHlwZSBhcyBFbGVtZW50VHlwZSkgJiYgbm9ybWFsaXplZEtleSAhPT0gcmVzb2x2ZWRUeXBlO1xuICBpZiAoYWxpYXNVc2VkKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVzaW5nIHNpbmd1bGFyIGVsZW1lbnQgdHlwZSAnJHtyYXdUeXBlfScgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnJHtyZXNvbHZlZFR5cGV9JyBpbnN0ZWFkLmApO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogcmVzb2x2ZWRUeXBlLCBhbGlhc1VzZWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpOiBzdHJpbmcge1xuICByZXR1cm4gc2hhcmVkRm9ybWF0RWxlbWVudFR5cGVzTGlzdCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFR5cGVMYWJlbCh0eXBlOiBFbGVtZW50VHlwZSwgb3B0aW9uczogeyBwbHVyYWw/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IGxhYmVsID0gRUxFTUVOVF9UWVBFX0xBQkVMU1t0eXBlXTtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiBvcHRpb25zLnBsdXJhbCA/IHR5cGUgOiB0eXBlLnJlcGxhY2UoL3MkLywgJycpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnBsdXJhbCA/IGxhYmVsLnBsdXJhbCA6IGxhYmVsLnNpbmd1bGFyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEZpbGVuYW1lKHR5cGU6IEVsZW1lbnRUeXBlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYWZlU2x1ZyA9IHNsdWdpZnkobmFtZSB8fCAnJykgfHwgJ3VudGl0bGVkJztcbiAgY29uc3QgZXh0ZW5zaW9uID0gdHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZID8gJy55YW1sJyA6ICcubWQnO1xuICByZXR1cm4gYCR7c2FmZVNsdWd9JHtleHRlbnNpb259YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50TWFuYWdlck9wZXJhdGlvbnM8VD4ge1xuICBsaXN0PzogKCkgPT4gUHJvbWlzZTxUW10+O1xuICBmaW5kPzogKHByZWRpY2F0ZTogKGNhbmRpZGF0ZTogVCkgPT4gYm9vbGVhbikgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgbG9hZD86IChmaWxlUGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPFQ+O1xufVxuXG4vKipcbiAqIEtub3duIG1ldGFkYXRhIHByb3BlcnRpZXMgZm9yIGVhY2ggZWxlbWVudCB0eXBlLlxuICogVXNlZCBieSBib3RoIGBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzKClgIChjcmVhdGUvZWRpdCB3YXJuaW5ncylcbiAqIGFuZCBgZWRpdEVsZW1lbnQoKWAgKGZpZWxkIHJvdXRpbmcgdG8gbWV0YWRhdGEgdnMgZWxlbWVudCBvYmplY3QpLlxuICpcbiAqIElNUE9SVEFOVDogQm90aCBjYW1lbENhc2UgYW5kIHNuYWtlX2Nhc2UgdmFyaWFudHMgbXVzdCBiZSBsaXN0ZWQgd2hlcmVcbiAqIGFwcGxpY2FibGUsIHNpbmNlIExMTXMgbWF5IHNlbmQgZWl0aGVyIGZvcm0uIFRoZSBsb29rdXAgdXNlcyBleGFjdFxuICogc3RyaW5nIG1hdGNoaW5nIHZpYSBgU2V0LmhhcygpYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29tbW9uIHByb3BlcnRpZXMgc2hhcmVkIGFjcm9zcyBhbGwgdHlwZXM6XG4gKiAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2dhdGVrZWVwZXInXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFR5cGUtc3BlY2lmaWMgcHJvcGVydGllcyAob25seSB2YWxpZCBmb3IgdGhhdCBlbGVtZW50IHR5cGUpOlxuICogQWdlbnQ6ICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdhdXRvbm9teScsICdyZXNpbGllbmNlJ1xuICogU2tpbGw6ICdkb21haW5zJywgJ2NhdGVnb3J5JywgJ3ByZXJlcXVpc2l0ZXMnXG4gKiBFbnNlbWJsZTogJ2VsZW1lbnRzJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdhY3RpdmF0aW9uX3N0cmF0ZWd5J1xuICovXG5leHBvcnQgY29uc3QgS05PV05fTUVUQURBVEFfUFJPUEVSVElFUzogUmVjb3JkPEVsZW1lbnRUeXBlLCBTZXQ8c3RyaW5nPj4gPSB7XG4gIFtFbGVtZW50VHlwZS5QRVJTT05BXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIFBlcnNvbmEtc3BlY2lmaWNcbiAgICAndHJpZ2dlcnMnLCAndG9uZScsICd2b2ljZScsICdkb21haW4nLCAnY29udGV4dCcsICdzdHlsZScsICdpbnN0cnVjdGlvbnMnLFxuICAgICdwZXJzb25hbGl0eScsICdleHBlcnRpc2UnLCAnY29tbXVuaWNhdGlvbl9zdHlsZScsICdjb21tdW5pY2F0aW9uU3R5bGUnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuU0tJTExdOiBuZXcgU2V0KFtcbiAgICAvLyBDb21tb24gbWV0YWRhdGFcbiAgICAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLFxuICAgIC8vIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICAnZ2F0ZWtlZXBlcicsXG4gICAgLy8gU2tpbGwtc3BlY2lmaWNcbiAgICAndHJpZ2dlcnMnLCAnZG9tYWluJywgJ2RvbWFpbnMnLCAnY2F0ZWdvcnknLCAnZXhhbXBsZXMnLCAncHJlcmVxdWlzaXRlcycsXG4gICAgJ2NvbnRlbnQnLCAnaW5zdHJ1Y3Rpb25zJywgJ3VzYWdlJywgJ2NhcGFiaWxpdGllcydcbiAgXSksXG4gIFtFbGVtZW50VHlwZS5URU1QTEFURV06IG5ldyBTZXQoW1xuICAgIC8vIENvbW1vbiBtZXRhZGF0YVxuICAgICduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2F1dGhvcicsICd2ZXJzaW9uJywgJ3RhZ3MnLCAnY3JlYXRlZCcsICdtb2RpZmllZCcsXG4gICAgLy8gR2F0ZWtlZXBlciBwb2xpY3kgKGFsbCBlbGVtZW50IHR5cGVzKVxuICAgICdnYXRla2VlcGVyJyxcbiAgICAvLyBUZW1wbGF0ZS1zcGVjaWZpY1xuICAgICd2YXJpYWJsZXMnLCAndGVtcGxhdGUnLCAnY2F0ZWdvcnknLCAnb3V0cHV0Rm9ybWF0JywgJ291dHB1dF9mb3JtYXQnLFxuICAgICdjb250ZW50JywgJ2luc3RydWN0aW9ucycsICdmb3JtYXQnLCAnc2NoZW1hJ1xuICBdKSxcbiAgW0VsZW1lbnRUeXBlLkFHRU5UXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIEFnZW50IFYxIGZpZWxkcyAobGVnYWN5LCBzdGlsbCBzdXBwb3J0ZWQpXG4gICAgJ2dvYWxzJywgJ2NvbnN0cmFpbnRzJywgJ2NhcGFiaWxpdGllcycsICd0cmlnZ2VycycsICdzdGF0ZScsICdhY3Rpb25zJyxcbiAgICAnZGVjaXNpb25GcmFtZXdvcmsnLCAnZGVjaXNpb25fZnJhbWV3b3JrJywgJ3NraWxscycsXG4gICAgLy8gQWdlbnQgVjIgZmllbGRzICh2Mi4wLjAgQWdlbnRpYyBMb29wIFJlZGVzaWduKVxuICAgICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdzeXN0ZW1Qcm9tcHQnLCAnc3lzdGVtX3Byb21wdCcsXG4gICAgJ2F1dG9ub215JywgJ3Jlc2lsaWVuY2UnLCAnc3VjY2Vzc0NyaXRlcmlhJywgJ3N1Y2Nlc3NfY3JpdGVyaWEnLFxuICAgIC8vIElzc3VlICM1ODU6IEJvZHkgY29udGVudCBmaWVsZHMgKHN0b3JlZCBpbiBleHRlbnNpb25zLmluc3RydWN0aW9ucylcbiAgICAnY29udGVudCcsICdpbnN0cnVjdGlvbnMnLFxuICAgIC8vIFYxIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAnc3BlY2lhbGl6YXRpb25zJywgJ3Jpc2tUb2xlcmFuY2UnLCAncmlza190b2xlcmFuY2UnLFxuICAgICdsZWFybmluZ0VuYWJsZWQnLCAnbGVhcm5pbmdfZW5hYmxlZCcsICdtYXhDb25jdXJyZW50R29hbHMnLCAnbWF4X2NvbmN1cnJlbnRfZ29hbHMnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuTUVNT1JZXTogbmV3IFNldChbXG4gICAgLy8gQ29tbW9uIG1ldGFkYXRhXG4gICAgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAndGFncycsICdjcmVhdGVkJywgJ21vZGlmaWVkJyxcbiAgICAvLyBHYXRla2VlcGVyIHBvbGljeSAoYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgJ2dhdGVrZWVwZXInLFxuICAgIC8vIE1lbW9yeS1zcGVjaWZpY1xuICAgICdpZCcsICdlbnRyaWVzJywgJ2luc3RydWN0aW9ucycsICdyZXRlbnRpb25Qb2xpY3knLCAncmV0ZW50aW9uX3BvbGljeScsICdtYXhFbnRyaWVzJyxcbiAgICAnbWF4X2VudHJpZXMnLCAnY2F0ZWdvcnknLCAnc2NvcGUnXG4gIF0pLFxuICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiBuZXcgU2V0KFtcbiAgICAvLyBDb21tb24gbWV0YWRhdGFcbiAgICAnbmFtZScsICdkZXNjcmlwdGlvbicsICdhdXRob3InLCAndmVyc2lvbicsICd0YWdzJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLFxuICAgIC8vIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICAnZ2F0ZWtlZXBlcicsXG4gICAgLy8gRW5zZW1ibGUtc3BlY2lmaWMgLSBOT1RFOiAnZWxlbWVudHMnIGlzIGNvcnJlY3QsIE5PVCAnbWVtYmVycydcbiAgICAnZWxlbWVudHMnLCAnaW5zdHJ1Y3Rpb25zJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdhY3RpdmF0aW9uX3N0cmF0ZWd5JyxcbiAgICAnY29uZmxpY3RSZXNvbHV0aW9uJywgJ2NvbmZsaWN0X3Jlc29sdXRpb24nLFxuICAgICdjb250ZXh0U2hhcmluZycsICdjb250ZXh0X3NoYXJpbmcnLFxuICAgICdyZXNvdXJjZUxpbWl0cycsICdyZXNvdXJjZV9saW1pdHMnLFxuICAgICdhbGxvd05lc3RlZCcsICdhbGxvd19uZXN0ZWQnLFxuICAgICdtYXhOZXN0aW5nRGVwdGgnLCAnbWF4X25lc3RpbmdfZGVwdGgnXG4gIF0pXG59O1xuXG4vKipcbiAqIENvbW1vbiB0eXBvcyBhbmQgdGhlaXIgY29ycmVjdGlvbnMgZm9yIGJldHRlciBMTE0gZmVlZGJhY2suXG4gKlxuICogSU1QT1JUQU5UOiBBbGwga2V5cyBNVVNUIGJlIGxvd2VyY2FzZS4gVGhlIGxvb2t1cCB1c2VzIGBrZXkudG9Mb3dlckNhc2UoKWBcbiAqIHRvIGVuc3VyZSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHbG9iYWwgY29ycmVjdGlvbiAoYXBwbGllcyB0byBhbGwgZWxlbWVudCB0eXBlcyk6XG4gKiAnZGlzY3JpcHRpb24nOiB7IGNvcnJlY3Q6ICdkZXNjcmlwdGlvbicgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUeXBlLXNwZWNpZmljIGNvcnJlY3Rpb24gKG9ubHkgYXBwbGllcyB0byBzcGVjaWZpZWQgdHlwZXMpOlxuICogJ21lbWJlcnMnOiB7IGNvcnJlY3Q6ICdlbGVtZW50cycsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9XG4gKi9cbmNvbnN0IFBST1BFUlRZX0NPUlJFQ1RJT05TOiBSZWNvcmQ8c3RyaW5nLCB7IGNvcnJlY3Q6IHN0cmluZzsgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXSB9PiA9IHtcbiAgLy8gRW5zZW1ibGU6ICdtZW1iZXJzJyBpcyBhIGNvbW1vbiBtaXN0YWtlIC0gc2hvdWxkIGJlICdlbGVtZW50cydcbiAgJ21lbWJlcnMnOiB7IGNvcnJlY3Q6ICdlbGVtZW50cycsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9LFxuICAnbWVtYmVyJzogeyBjb3JyZWN0OiAnZWxlbWVudHMnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5FTlNFTUJMRV0gfSxcbiAgLy8gQ29tbW9uIHR5cG9zXG4gICdkaXNjcmlwdGlvbic6IHsgY29ycmVjdDogJ2Rlc2NyaXB0aW9uJyB9LFxuICAnZGVzY2lwdGlvbic6IHsgY29ycmVjdDogJ2Rlc2NyaXB0aW9uJyB9LFxuICAnYXV0aGVyJzogeyBjb3JyZWN0OiAnYXV0aG9yJyB9LFxuICAndGFnZXMnOiB7IGNvcnJlY3Q6ICd0YWdzJyB9LFxuICAndmFyaWJsZXMnOiB7IGNvcnJlY3Q6ICd2YXJpYWJsZXMnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5URU1QTEFURV0gfSxcbiAgJ2FjdGl2aWF0aW9uJzogeyBjb3JyZWN0OiAnYWN0aXZhdGlvbicgfSxcbiAgJ3N0cmF0ZXJneSc6IHsgY29ycmVjdDogJ3N0cmF0ZWd5JyB9LFxuICAnZWxlbWV0cyc6IHsgY29ycmVjdDogJ2VsZW1lbnRzJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH0sXG4gIC8vIFNuYWtlX2Nhc2UgdnMgY2FtZWxDYXNlIG1pc21hdGNoZXNcbiAgJ2FjdGl2YXRpb25zdHJhdGVneSc6IHsgY29ycmVjdDogJ2FjdGl2YXRpb25TdHJhdGVneScsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkVOU0VNQkxFXSB9LFxuICAnY29uZmxpY3RyZXNvbHV0aW9uJzogeyBjb3JyZWN0OiAnY29uZmxpY3RSZXNvbHV0aW9uJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH0sXG4gICdjb250ZXh0c2hhcmluZyc6IHsgY29ycmVjdDogJ2NvbnRleHRTaGFyaW5nJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuRU5TRU1CTEVdIH1cbn07XG5cbi8qKlxuICogUmVzdWx0IG9mIGNoZWNraW5nIG1ldGFkYXRhIGZvciB1bmtub3duIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5rbm93blByb3BlcnR5V2FybmluZyB7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb24/OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGdhdGVrZWVwZXIgcG9saWN5IGluIGVsZW1lbnQgbWV0YWRhdGEuXG4gKiBSZXR1cm5zIHdhcm5pbmdzIChub3QgdGhyb3dzKSBmb3IgaW52YWxpZCBwb2xpY3kgc3RydWN0dXJlcyxcbiAqIHNvIExMTXMgZ2V0IGltbWVkaWF0ZSBmZWVkYmFjayBhYm91dCBtYWxmb3JtZWQgcG9saWNpZXMuXG4gKlxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIG9iamVjdCBjb250YWluaW5nIHRoZSBnYXRla2VlcGVyIHBvbGljeVxuICogQHJldHVybnMgQXJyYXkgb2Ygd2FybmluZ3MgZm9yIGludmFsaWQgcG9saWN5IHN0cnVjdHVyZSAoZW1wdHkgaWYgdmFsaWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUdhdGVrZWVwZXJQb2xpY3koXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVW5rbm93blByb3BlcnR5V2FybmluZ1tdIHtcbiAgaWYgKCFtZXRhZGF0YS5nYXRla2VlcGVyKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwb2xpY3kgPSBwYXJzZUVsZW1lbnRQb2xpY3kobWV0YWRhdGEpO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10gPSBbXTtcblxuICAgIC8vIElzc3VlICM2NzQ6IFdhcm4gd2hlbiBhbiBvcGVyYXRpb24gYXBwZWFycyBpbiBib3RoIGFsbG93IGFuZCBjb25maXJtIGxpc3RzXG4gICAgLy8gVGhlIG1vc3QgcmVzdHJpY3RpdmUgcG9saWN5IChjb25maXJtKSB3aWxsIGFwcGx5LCBidXQgdGhlIG92ZXJsYXAgaXMgbGlrZWx5IGEgbWlzdGFrZVxuICAgIGlmIChwb2xpY3k/LmFsbG93Py5sZW5ndGggJiYgcG9saWN5Py5jb25maXJtPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbG93U2V0ID0gbmV3IFNldChwb2xpY3kuYWxsb3cpO1xuICAgICAgZm9yIChjb25zdCBvcCBvZiBwb2xpY3kuY29uZmlybSkge1xuICAgICAgICBpZiAoYWxsb3dTZXQuaGFzKG9wKSkge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydHk6ICdnYXRla2VlcGVyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBPcGVyYXRpb24gJyR7b3B9JyBhcHBlYXJzIGluIGJvdGggYWxsb3cgYW5kIGNvbmZpcm0g4oCUIG1vc3QgcmVzdHJpY3RpdmUgcG9saWN5IChjb25maXJtKSB3aWxsIGFwcGx5LmAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjI1IFBoYXNlIDI6IERldGVjdCBhbGxvdy9kZW55IHBhdHRlcm4gY29uZmxpY3RzXG4gICAgaWYgKHBvbGljeT8uZXh0ZXJuYWxSZXN0cmljdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgYWxsb3dQYXR0ZXJucywgZGVueVBhdHRlcm5zLCBjb25maXJtUGF0dGVybnMgfSA9IHBvbGljeS5leHRlcm5hbFJlc3RyaWN0aW9ucztcbiAgICAgIGlmIChhbGxvd1BhdHRlcm5zPy5sZW5ndGggJiYgZGVueVBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29uZmxpY3RzID0gZmluZFBhdHRlcm5Db25mbGljdHMoZGVueVBhdHRlcm5zLCBhbGxvd1BhdHRlcm5zKTtcbiAgICAgICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBjb25mbGljdHMpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUGF0dGVybiBjb25mbGljdCAoZGVueSB0YWtlcyBwcmVjZWRlbmNlKTogJHtjb25mbGljdH1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICMxNjYwOiBEZXRlY3QgY29uZmlybS9kZW55IHBhdHRlcm4gY29uZmxpY3RzXG4gICAgICBpZiAoY29uZmlybVBhdHRlcm5zPy5sZW5ndGggJiYgZGVueVBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29uZmxpY3RzID0gZmluZFBhdHRlcm5Db25mbGljdHMoZGVueVBhdHRlcm5zLCBjb25maXJtUGF0dGVybnMpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIGNvbmZsaWN0cykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydHk6ICdnYXRla2VlcGVyLmV4dGVybmFsUmVzdHJpY3Rpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBQYXR0ZXJuIGNvbmZsaWN0IChkZW55IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBjb25maXJtKTogJHtjb25mbGljdH1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICMxNjY0OiBFbmhhbmNlZCBwYXR0ZXJuIHN5bnRheCB2YWxpZGF0aW9uXG4gICAgICBjb25zdCBhbGxQYXR0ZXJuQXJyYXlzOiBbc3RyaW5nW10gfCB1bmRlZmluZWQsIHN0cmluZ11bXSA9IFtcbiAgICAgICAgW2RlbnlQYXR0ZXJucywgJ2RlbnlQYXR0ZXJucyddLFxuICAgICAgICBbY29uZmlybVBhdHRlcm5zLCAnY29uZmlybVBhdHRlcm5zJ10sXG4gICAgICAgIFthbGxvd1BhdHRlcm5zLCAnYWxsb3dQYXR0ZXJucyddLFxuICAgICAgXTtcbiAgICAgIGZvciAoY29uc3QgW3BhdHRlcm5zLCBmaWVsZE5hbWVdIG9mIGFsbFBhdHRlcm5BcnJheXMpIHtcbiAgICAgICAgaWYgKHBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBzeW50YXhXYXJuaW5ncyA9IGFuYWx5emVQYXR0ZXJuU3ludGF4KHBhdHRlcm5zLCBmaWVsZE5hbWUpO1xuICAgICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBzeW50YXhXYXJuaW5ncykge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7XG4gICAgICAgICAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHdhcm5pbmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd2FybmluZ3M7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHByb3BlcnR5OiAnZ2F0ZWtlZXBlcicsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIH1dO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgbWV0YWRhdGEgZm9yIHVua25vd24gcHJvcGVydGllcyBhbmQgcmV0dXJuIHdhcm5pbmdzLlxuICogVGhpcyBoZWxwcyBMTE1zIGNvcnJlY3QgdGhlaXIgYmVoYXZpb3IgaW4gcmVhbC10aW1lIHdoZW4gdGhleSB1c2Ugd3JvbmcgcHJvcGVydHkgbmFtZXMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gVGhlIHR5cGUgb2YgZWxlbWVudCBiZWluZyBjcmVhdGVkL2VkaXRlZFxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIG9iamVjdCB0byBjaGVja1xuICogQHJldHVybnMgQXJyYXkgb2Ygd2FybmluZ3MgZm9yIHVua25vd24gcHJvcGVydGllc1xuICovXG4vLyBGaWVsZHMgaGFuZGxlZCBieSBkZWRpY2F0ZWQgYnJhbmNoZXMgaW4gZWRpdEVsZW1lbnQsIG5vdCBtZXRhZGF0YSByb3V0aW5nLlxuLy8gVGhlc2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIFwidW5rbm93biBwcm9wZXJ0eVwiIHdhcm5pbmdzIHNpbmNlIHRoZXkgQVJFIHByb2Nlc3NlZC5cbmNvbnN0IFNQRUNJQUxfUk9VVEVfRklFTERTID0gbmV3IFNldChbXG4gICdpbnN0cnVjdGlvbnMnLCAnY29udGVudCcsICdlbGVtZW50cycsICdtZXRhZGF0YScsICdlbnRyaWVzJywgJ3ZlcnNpb24nXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMoXG4gIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10ge1xuICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBrbm93blByb3BlcnRpZXMgPSBLTk9XTl9NRVRBREFUQV9QUk9QRVJUSUVTW2VsZW1lbnRUeXBlXTtcbiAgaWYgKCFrbm93blByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB3YXJuaW5nczogVW5rbm93blByb3BlcnR5V2FybmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YWRhdGEpKSB7XG4gICAgLy8gU2tpcCBpZiBpdCdzIGEga25vd24gcHJvcGVydHlcbiAgICBpZiAoa25vd25Qcm9wZXJ0aWVzLmhhcyhrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIHNwZWNpYWwgcm91dGUgZmllbGRzIOKAlCB0aGVzZSBhcmUgaGFuZGxlZCBieSBkZWRpY2F0ZWQgY29kZSBwYXRoc1xuICAgIC8vIGluIGVkaXRFbGVtZW50IChub3QgbWV0YWRhdGEgcm91dGluZyksIHNvIHdhcm5pbmcgaXMgbWlzbGVhZGluZ1xuICAgIGlmIChTUEVDSUFMX1JPVVRFX0ZJRUxEUy5oYXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGtub3duIHR5cG8gd2l0aCBhIGNvcnJlY3Rpb25cbiAgICBjb25zdCBjb3JyZWN0aW9uID0gUFJPUEVSVFlfQ09SUkVDVElPTlNba2V5LnRvTG93ZXJDYXNlKCldO1xuICAgIGlmIChjb3JyZWN0aW9uKSB7XG4gICAgICAvLyBDaGVjayBpZiBjb3JyZWN0aW9uIGFwcGxpZXMgdG8gdGhpcyBlbGVtZW50IHR5cGVcbiAgICAgIGNvbnN0IGFwcGxpZXNUb1R5cGUgPSAhY29ycmVjdGlvbi5lbGVtZW50VHlwZXMgfHxcbiAgICAgICAgY29ycmVjdGlvbi5lbGVtZW50VHlwZXMuaW5jbHVkZXMoZWxlbWVudFR5cGUpO1xuXG4gICAgICBpZiAoYXBwbGllc1RvVHlwZSkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICBwcm9wZXJ0eToga2V5LFxuICAgICAgICAgIHN1Z2dlc3Rpb246IGNvcnJlY3Rpb24uY29ycmVjdCxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5rbm93biBwcm9wZXJ0eSAnJHtrZXl9JyAtIGRpZCB5b3UgbWVhbiAnJHtjb3JyZWN0aW9uLmNvcnJlY3R9Jz9gXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmljIHVua25vd24gcHJvcGVydHkgd2FybmluZ1xuICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgcHJvcGVydHk6IGtleSxcbiAgICAgIG1lc3NhZ2U6IGBVbmtub3duIHByb3BlcnR5ICcke2tleX0nIGZvciAke2dldEVsZW1lbnRUeXBlTGFiZWwoZWxlbWVudFR5cGUpfSAtIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkYFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZ2F0ZWtlZXBlciBwb2xpY3kgc3RydWN0dXJlIGlmIHByZXNlbnRcbiAgaWYgKG1ldGFkYXRhLmdhdGVrZWVwZXIpIHtcbiAgICB3YXJuaW5ncy5wdXNoKC4uLnZhbGlkYXRlR2F0ZWtlZXBlclBvbGljeShtZXRhZGF0YSkpO1xuICB9XG5cbiAgcmV0dXJuIHdhcm5pbmdzO1xufVxuXG4vKipcbiAqIEZvcm1hdCB1bmtub3duIHByb3BlcnR5IHdhcm5pbmdzIGZvciBNQ1AgcmVzcG9uc2UuXG4gKiBSZXR1cm5zIGEgd2FybmluZyBibG9jayB0aGF0IGNhbiBiZSBwcmVwZW5kZWQgdG8gc3VjY2VzcyBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFVua25vd25Qcm9wZXJ0eVdhcm5pbmdzKHdhcm5pbmdzOiBVbmtub3duUHJvcGVydHlXYXJuaW5nW10pOiBzdHJpbmcge1xuICBpZiAod2FybmluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBbJ+KaoO+4jyAqKk1ldGFkYXRhIFdhcm5pbmdzOioqJ107XG4gIGZvciAoY29uc3Qgd2FybmluZyBvZiB3YXJuaW5ncykge1xuICAgIGlmICh3YXJuaW5nLnN1Z2dlc3Rpb24pIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgIOKAoiAke3dhcm5pbmcubWVzc2FnZX0gVXNlICcke3dhcm5pbmcuc3VnZ2VzdGlvbn0nIGluc3RlYWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgIOKAoiAke3dhcm5pbmcubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgbGluZXMucHVzaCgnJyk7IC8vIEVtcHR5IGxpbmUgYWZ0ZXIgd2FybmluZ3NcblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRm9ybWF0IGVsZW1lbnQgcmVzb2x1dGlvbiB3YXJuaW5ncyBmb3IgTUNQIHJlc3BvbnNlLlxuICogU3VyZmFjZXMgZGlzYW1iaWd1YXRpb24gYW5kIG5vdC1mb3VuZCBpbmZvIGZyb20gcmVzb2x2ZUVsZW1lbnRUeXBlcygpXG4gKiBzbyB0aGUgdXNlciBjYW4gZml4IG1pc3NpbmcgZWxlbWVudF90eXBlIGZpZWxkcy5cbiAqXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MoKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3MocmVzdWx0OiB7IGFtYmlndW91czogQXJyYXk8eyBlbGVtZW50X25hbWU6IHN0cmluZzsgZm91bmRfaW46IHN0cmluZ1tdIH0+OyBub3RGb3VuZDogc3RyaW5nW10gfSk6IHN0cmluZyB7XG4gIGlmIChyZXN1bHQuYW1iaWd1b3VzLmxlbmd0aCA9PT0gMCAmJiByZXN1bHQubm90Rm91bmQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBbJ+KaoO+4jyAqKkVsZW1lbnQgUmVzb2x1dGlvbiBXYXJuaW5nczoqKiddO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiByZXN1bHQuYW1iaWd1b3VzKSB7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGAgICDigKIgJyR7aXRlbS5lbGVtZW50X25hbWV9JyBleGlzdHMgYXMgbXVsdGlwbGUgdHlwZXMgKCR7aXRlbS5mb3VuZF9pbi5qb2luKCcsICcpfSkg4oCUIHNwZWNpZnkgZWxlbWVudF90eXBlIHRvIGRpc2FtYmlndWF0ZWBcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdC5ub3RGb3VuZCkge1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAg4oCiICcke25hbWV9JyBub3QgZm91bmQgaW4gcG9ydGZvbGlvIOKAlCBwcm92aWRlIGVsZW1lbnRfdHlwZSBleHBsaWNpdGx5IG9yIGVuc3VyZSB0aGUgZWxlbWVudCBleGlzdHNgXG4gICAgKTtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpOyAvLyBFbXB0eSBsaW5lIGFmdGVyIHdhcm5pbmdzXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVFbGVtZW50QnlOYW1lPFQ+KFxuICBtYW5hZ2VyOiBFbGVtZW50TWFuYWdlck9wZXJhdGlvbnM8VD4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICB0eXBlOiBFbGVtZW50VHlwZSxcbiAgbmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWFuYWdlci5saXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBtYW5hZ2VyLmxpc3QoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50cykgJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZm91bmQgPSBmaW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGVsZW1lbnRzIGFzIGFueVtdKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQgYXMgVDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG1hbmFnZXIuZmluZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGxvd2VyZWQgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgc2x1ZyA9IHNsdWdpZnkobmFtZSk7XG4gICAgY29uc3QgZm91bmQgPSBhd2FpdCBtYW5hZ2VyLmZpbmQoKGNhbmRpZGF0ZTogYW55KSA9PiB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVOYW1lID0gY2FuZGlkYXRlPy5tZXRhZGF0YT8ubmFtZTtcbiAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FuZGlkYXRlU2x1ZyA9IHNsdWdpZnkoY2FuZGlkYXRlTmFtZSk7XG4gICAgICByZXR1cm4gY2FuZGlkYXRlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBsb3dlcmVkIHx8IGNhbmRpZGF0ZVNsdWcgPT09IHNsdWc7XG4gICAgfSk7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBtYW5hZ2VyLmxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVGaWxlbmFtZSA9IGdldEVsZW1lbnRGaWxlbmFtZSh0eXBlLCBuYW1lKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG1hbmFnZXIubG9hZChjYW5kaWRhdGVGaWxlbmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0VsZW1lbnRDUlVEXSBEaXJlY3QgbG9hZCBmYWlsZWQgZm9yICR7dHlwZX06JHtuYW1lfWAsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBbRWxlbWVudENSVURdIFVuYWJsZSB0byBsb2NhdGUgJHt0eXBlfToke25hbWV9IHZpYSBhdmFpbGFibGUgbWFuYWdlciBvcGVyYXRpb25zLmApO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"IntrospectionResolver.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/IntrospectionResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IntrospectionResolver.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/IntrospectionResolver.ts"],"names":[],"mappings":"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"}