@dollhousemcp/mcp-server 1.9.13 → 1.9.15

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 (79) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.github.md +54 -0
  3. package/README.md.backup +1241 -49
  4. package/dist/cache/CollectionCache.js +2 -2
  5. package/dist/collection/CollectionIndexManager.js +3 -3
  6. package/dist/config/ConfigWizard.js +3 -3
  7. package/dist/config/indicator-config.js +2 -2
  8. package/dist/config/portfolio-constants.js +12 -12
  9. package/dist/elements/BaseElement.js +7 -7
  10. package/dist/elements/FeedbackProcessor.d.ts +7 -0
  11. package/dist/elements/FeedbackProcessor.d.ts.map +1 -1
  12. package/dist/elements/FeedbackProcessor.js +67 -14
  13. package/dist/elements/agents/AgentManager.js +6 -6
  14. package/dist/elements/memories/Memory.js +4 -4
  15. package/dist/elements/memories/MemoryManager.js +3 -3
  16. package/dist/elements/memories/utils.js +3 -3
  17. package/dist/elements/skills/Skill.js +2 -2
  18. package/dist/elements/skills/SkillManager.js +2 -2
  19. package/dist/elements/templates/Template.d.ts.map +1 -1
  20. package/dist/elements/templates/Template.js +38 -14
  21. package/dist/elements/templates/TemplateManager.js +2 -2
  22. package/dist/generated/version.d.ts +2 -2
  23. package/dist/generated/version.js +3 -3
  24. package/dist/handlers/ConfigHandler.js +3 -3
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +20 -16
  27. package/dist/persona/PersonaElementManager.js +3 -3
  28. package/dist/persona/PersonaManager.js +2 -2
  29. package/dist/persona/export-import/PersonaImporter.js +3 -3
  30. package/dist/portfolio/DefaultElementProvider.d.ts +12 -0
  31. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  32. package/dist/portfolio/DefaultElementProvider.js +23 -6
  33. package/dist/portfolio/GitHubPortfolioIndexer.js +2 -2
  34. package/dist/portfolio/MigrationManager.js +2 -2
  35. package/dist/portfolio/NLPScoringManager.js +2 -2
  36. package/dist/portfolio/PortfolioManager.d.ts +5 -0
  37. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  38. package/dist/portfolio/PortfolioManager.js +8 -1
  39. package/dist/portfolio/PortfolioRepoManager.js +2 -2
  40. package/dist/portfolio/PortfolioSyncManager.js +5 -5
  41. package/dist/portfolio/RelationshipManager.js +4 -4
  42. package/dist/portfolio/UnifiedIndexManager.js +4 -4
  43. package/dist/portfolio/types/RelationshipTypes.js +2 -2
  44. package/dist/security/InputValidator.d.ts +12 -0
  45. package/dist/security/InputValidator.d.ts.map +1 -1
  46. package/dist/security/InputValidator.js +38 -18
  47. package/dist/security/audit/config/suppressions.js +10 -10
  48. package/dist/security/commandValidator.js +2 -2
  49. package/dist/security/dosProtection.d.ts +123 -0
  50. package/dist/security/dosProtection.d.ts.map +1 -0
  51. package/dist/security/dosProtection.js +392 -0
  52. package/dist/security/pathValidator.js +2 -2
  53. package/dist/security/secureYamlParser.d.ts.map +1 -1
  54. package/dist/security/secureYamlParser.js +4 -3
  55. package/dist/security/tokenManager.js +10 -10
  56. package/dist/security/validators/unicodeValidator.js +2 -2
  57. package/dist/security/yamlValidator.js +3 -3
  58. package/dist/sync/PortfolioDownloader.js +2 -2
  59. package/dist/sync/PortfolioSyncComparer.js +2 -2
  60. package/dist/tools/portfolio/PortfolioElementAdapter.js +3 -3
  61. package/dist/tools/portfolio/submitToPortfolioTool.js +14 -14
  62. package/dist/utils/EarlyTerminationSearch.d.ts +1 -1
  63. package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -1
  64. package/dist/utils/EarlyTerminationSearch.js +3 -3
  65. package/dist/utils/ElementFormatter.d.ts +1 -0
  66. package/dist/utils/ElementFormatter.d.ts.map +1 -1
  67. package/dist/utils/ElementFormatter.js +21 -13
  68. package/dist/utils/GitHubRateLimiter.d.ts +6 -0
  69. package/dist/utils/GitHubRateLimiter.d.ts.map +1 -1
  70. package/dist/utils/GitHubRateLimiter.js +20 -5
  71. package/dist/utils/RateLimiter.js +2 -2
  72. package/dist/utils/SecureDownloader.js +2 -2
  73. package/dist/utils/fileOperations.d.ts +6 -1
  74. package/dist/utils/fileOperations.d.ts.map +1 -1
  75. package/dist/utils/fileOperations.js +29 -5
  76. package/dist/utils/filesystem.js +6 -6
  77. package/dist/utils/searchUtils.js +2 -2
  78. package/dist/utils/version.js +3 -3
  79. package/package.json +1 -1
@@ -710,16 +710,16 @@ function globToRegex(glob) {
710
710
  }
711
711
  // Escape all regex special characters except * and /
712
712
  // Fixed: Properly escape backslashes and other special regex characters
713
- let pattern = processedGlob.replace(/[\\^$.()+?{}[\]|]/g, '\\$&');
713
+ let pattern = processedGlob.replaceAll(/[\\^$.()+?{}[\]|]/g, '\\$&');
714
714
  // Handle glob patterns in correct order
715
715
  // Replace ** before * to avoid conflicts
716
716
  pattern = pattern
717
- .replace(/\*\*/g, '<<GLOBSTAR>>') // Temporary placeholder for **
718
- .replace(/\*/g, '<<STAR>>') // Temporary placeholder for *
719
- .replace(/<<GLOBSTAR>>\//g, '(?:.*/)?') // **/ matches any number of directories including none
720
- .replace(/<<GLOBSTAR>>/g, '.*') // ** matches anything
721
- .replace(/<<STAR>>/g, '[^/]*') // * matches anything except directory separator
722
- .replace(/\//g, '\\/'); // Escape forward slashes
717
+ .replaceAll('**', '<<GLOBSTAR>>') // Temporary placeholder for **
718
+ .replaceAll('*', '<<STAR>>') // Temporary placeholder for *
719
+ .replaceAll('<<GLOBSTAR>>/', '(?:.*/)?') // **/ matches any number of directories including none
720
+ .replaceAll('<<GLOBSTAR>>', '.*') // ** matches anything
721
+ .replaceAll('<<STAR>>', '[^/]*') // * matches anything except directory separator
722
+ .replaceAll('/', '\\/'); // Escape forward slashes
723
723
  // Combine prefix and pattern
724
724
  const fullPattern = prefix + pattern;
725
725
  // Add anchors to ensure full path match
@@ -734,9 +734,9 @@ function globToRegex(glob) {
734
734
  */
735
735
  function normalizePath(filePath) {
736
736
  // Convert backslashes to forward slashes for Windows paths
737
- let normalized = filePath.replace(/\\/g, '/');
737
+ let normalized = filePath.replaceAll('\\', '/');
738
738
  // Remove duplicate slashes
739
- normalized = normalized.replace(/\/+/g, '/');
739
+ normalized = normalized.replaceAll(/\/+/g, '/');
740
740
  // Remove trailing slash if present
741
741
  if (normalized.endsWith('/') && normalized.length > 1) {
742
742
  normalized = normalized.slice(0, -1);
@@ -894,4 +894,4 @@ const validationErrors = validateSuppressions();
894
894
  if (validationErrors.length > 0) {
895
895
  logger.warn('Suppression configuration warnings:', validationErrors);
896
896
  }
897
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcHJlc3Npb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1ZGl0L2NvbmZpZy9zdXBwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRbEQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQjtJQUNaLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFL0MsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUMxQyxPQUFPLEdBQUcsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLEtBQWM7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENB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RyxDQUFDLENBQUM7UUFFM0UsK0NBQStDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztBQUNoRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VjdXJpdHkgQXVkaXQgU3VwcHJlc3Npb24gQ29uZmlndXJhdGlvblxuICogXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgc3VwcHJlc3Npb24gcnVsZXMgZm9yIGZhbHNlIHBvc2l0aXZlcyBpbiB0aGUgc2VjdXJpdHkgYXVkaXQuXG4gKiBFYWNoIHN1cHByZXNzaW9uIHNob3VsZCBiZSB3ZWxsLWRvY3VtZW50ZWQgd2l0aCBhIGNsZWFyIHJlYXNvbi5cbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbiB7XG4gIHJ1bGU6IHN0cmluZztcbiAgZmlsZT86IHN0cmluZztcbiAgcmVhc29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3VwcHJlc3Npb24gY2FjaGUgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICovXG5jbGFzcyBTdXBwcmVzc2lvbkNhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICBwcml2YXRlIHJlZ2V4Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUmVnRXhwPigpO1xuICBcbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgIHRoaXMucmVnZXhDYWNoZS5jbGVhcigpO1xuICB9XG4gIFxuICBnZXRDYWNoZUtleShydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3J1bGVJZH06OiR7ZmlsZVBhdGh9YDtcbiAgfVxuICBcbiAgZ2V0KHJ1bGVJZDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHRoaXMuZ2V0Q2FjaGVLZXkocnVsZUlkLCBmaWxlUGF0aCkpO1xuICB9XG4gIFxuICBzZXQocnVsZUlkOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5zZXQodGhpcy5nZXRDYWNoZUtleShydWxlSWQsIGZpbGVQYXRoKSwgdmFsdWUpO1xuICB9XG4gIFxuICBnZXRSZWdleChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlZ2V4Q2FjaGUuZ2V0KHBhdHRlcm4pO1xuICB9XG4gIFxuICBzZXRSZWdleChwYXR0ZXJuOiBzdHJpbmcsIHJlZ2V4OiBSZWdFeHApOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2V4Q2FjaGUuc2V0KHBhdHRlcm4sIHJlZ2V4KTtcbiAgfVxufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBTdXBwcmVzc2lvbkNhY2hlKCk7XG5cbmV4cG9ydCBjb25zdCBzdXBwcmVzc2lvbnM6IFN1cHByZXNzaW9uW10gPSBbXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU1FMIEluamVjdGlvbiBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0NXRS04OS0wMDEnLFxuICAgIGZpbGU6ICdzcmMvdXBkYXRlL1VwZGF0ZU1hbmFnZXIudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gXCJVcGRhdGUgRmFpbGVkXCIgaXMgYSBVSSBtZXNzYWdlLCBub3QgU1FMLiBUaGUgY29kZWJhc2UgZG9lcyBub3QgdXNlIFNRTC4nXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRlc3QgRmlsZSBTdXBwcmVzc2lvbnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBtYXkgY29udGFpbiBpbnRlbnRpb25hbCBzZWN1cml0eSBwYXR0ZXJucyBmb3IgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi50ZXN0LnRzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIG1heSBjb250YWluIGludGVudGlvbmFsIHNlY3VyaXR5IHBhdHRlcm5zIGZvciB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLnNwZWMudHMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgbWF5IGNvbnRhaW4gaW50ZW50aW9uYWwgc2VjdXJpdHkgcGF0dGVybnMgZm9yIHRlc3RpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAndGVzdC8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdGllcyBhbmQgRTJFIHRlc3RzIGRvIG5vdCBwcm9jZXNzIHVudHJ1c3RlZCB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3Rlc3QvKiovKicsXG4gICAgcmVhc29uOiAnQXVkaXQgbG9nZ2luZyBub3QgcmVxdWlyZWQgZm9yIHRlc3QgdXRpbGl0aWVzIGFuZCBFMkUgdGVzdHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMycsXG4gICAgZmlsZTogJ3Rlc3QvZTJlL2NsZWFudXAtdGVzdC1kYXRhLnRzJyxcbiAgICByZWFzb246ICdGYWxzZSBwb3NpdGl2ZSAtIGNvbnNvbGUubG9nIG1lc3NhZ2Ugc3RyaW5nIGxpdGVyYWwsIG5vdCBhIHBhdGggb3BlcmF0aW9uJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMS0wMDEnLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyB1c2UgZmFrZSB0b2tlbnMgYW5kIHNlY3JldHMgZm9yIHRlc3Rpbmcgc2VjdXJpdHkgZmVhdHVyZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAxLTAwMScsXG4gICAgZmlsZTogJ3Rlc3QvX19maXh0dXJlc19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZml4dHVyZXMgY29udGFpbiBpbnRlbnRpb25hbCBtb2NrIGNyZWRlbnRpYWxzIGNsZWFybHkgbWFya2VkIGFzIEZBS0UvVEVTVC9OT1RfUkVBTCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAndGVzdC9fX2ZpeHR1cmVzX18vdGVzdENyZWRlbnRpYWxzLnRzJyxcbiAgICByZWFzb246ICdDZW50cmFsaXplZCB0ZXN0IGNyZWRlbnRpYWxzIGZpbGUgd2l0aCBpbnRlbnRpb25hbGx5IGZha2UgdmFsdWVzIGZvciB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0NXRS04OS0wMDEnLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIFNRTCBpbmplY3Rpb24gcGF0dGVybnMgZm9yIHNlY3VyaXR5IHRlc3RpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMicsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIGNvbnRhaW4gY29tbWFuZCBpbmplY3Rpb24gcGF0dGVybnMgZm9yIHNlY3VyaXR5IHRlc3RpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMycsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIGNvbnRhaW4gcGF0aCB0cmF2ZXJzYWwgcGF0dGVybnMgZm9yIHNlY3VyaXR5IHRlc3RpbmcnXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFlBTUwgUGFyc2luZyBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9zZWN1cml0eS95YW1sVmFsaWRhdG9yLnRzJyxcbiAgICByZWFzb246ICdZYW1sVmFsaWRhdG9yIGlzIHRoZSBzZWN1cml0eSB2YWxpZGF0aW9uIGxheWVyIGl0c2VsZiAtIGl0IG5lZWRzIGRpcmVjdCB5YW1sLmxvYWQgYWNjZXNzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLnRzJyxcbiAgICByZWFzb246ICdTZWN1cmVZYW1sUGFyc2VyIGlzIHRoZSBzZWN1cml0eSB3cmFwcGVyIHRoYXQgdmFsaWRhdGVzIFlBTUwgYmVmb3JlIHBhcnNpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL2VsZW1lbnRzL3NraWxscy9Ta2lsbE1hbmFnZXIudHMnLFxuICAgIHJlYXNvbjogJ1VzZXMgeWFtbC5sb2FkIHdpdGggRkFJTFNBRkVfU0NIRU1BIGFuZCBzaXplIHZhbGlkYXRpb24gLSBlcXVpdmFsZW50IHNlY3VyaXR5IHRvIFNlY3VyZVlhbWxQYXJzZXIgZm9yIHJhdyBZQU1MIGltcG9ydCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvcG9ydGZvbGlvL3N1Ym1pdFRvUG9ydGZvbGlvVG9vbC50cycsXG4gICAgcmVhc29uOiAnRmFsc2UgcG9zaXRpdmUgLSBVc2VzIFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoKSB3aGljaCBpcyB0aGUgc2VjdXJlIGltcGxlbWVudGF0aW9uIGRlc2lnbmVkIHRvIHByZXZlbnQgWUFNTCB2dWxuZXJhYmlsaXRpZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL2NvbmZpZy9Db25maWdNYW5hZ2VyLnRzJyxcbiAgICByZWFzb246ICdJTlRFTlRJT05BTDogVXNlcyBqcy15YW1sIHdpdGggRkFJTFNBRkVfU0NIRU1BIGZvciBwdXJlIFlBTUwgY29uZmlnIGZpbGVzLiBUaGlzIHByZXZlbnRzIGNvZGUgZXhlY3V0aW9uIGFuZCBpcyB0aGUgYXBwcm9wcmlhdGUgc2VjdXJpdHkgbWVhc3VyZSBmb3IgY29uZmlnIGZpbGVzIHRoYXQgYXJlIE5PVCBtYXJrZG93biB3aXRoIGZyb250bWF0dGVyLiBSZWdyZXNzaW9uIHRlc3QgZW5zdXJlcyB3ZSBkbyBub3QgdXNlIFNlY3VyZVlhbWxQYXJzZXIgaGVyZSB3aGljaCB3b3VsZCByZXNldCBjb25maWcgdmFsdWVzLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvcG9ydGZvbGlvL1BvcnRmb2xpb0luZGV4TWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnSU5URU5USU9OQUw6IE1lbW9yeSBmaWxlcyBhcmUgcHVyZSBZQU1MIChub3QgTWFya2Rvd24gd2l0aCBmcm9udG1hdHRlciksIHNvIFNlY3VyZVlhbWxQYXJzZXIgY2Fubm90IGJlIHVzZWQuIFVzZXMgeWFtbC5sb2FkIHdpdGggRkFJTFNBRkVfU0NIRU1BICsgc2l6ZSB2YWxpZGF0aW9uICsgdHlwZSBjaGVja2luZyBmb3Igc2VjdXJpdHkuIFRoZXNlIGFyZSB0cnVzdGVkIGxvY2FsIHVzZXIgZmlsZXMuIEZpeCBmb3IgaXNzdWUgIzExOTYuJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDbGVhci10ZXh0IExvZ2dpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMTAnLFxuICAgIGZpbGU6ICdzcmMvdXRpbHMvbG9nZ2VyLnRzJyxcbiAgICByZWFzb246ICdGQUxTRSBQT1NJVElWRTogVGhlIGxvZ2dlciBhbHJlYWR5IHNhbml0aXplcyBhbGwgc2Vuc2l0aXZlIGRhdGEgdGhyb3VnaCBzYW5pdGl6ZU1lc3NhZ2UoKSBhbmQgc2FuaXRpemVPYmplY3QoKSBtZXRob2RzLiBBbGwgc2Vuc2l0aXZlIGZpZWxkcyAodG9rZW5zLCBrZXlzLCBwYXNzd29yZHMsIGV0Yy4pIGFyZSByZXBsYWNlZCB3aXRoIFtSRURBQ1RFRF0gYmVmb3JlIGFueSBjb25zb2xlIG91dHB1dC4gTGluZXMgMjg4LCAyOTEsIGFuZCAyOTUgb25seSBsb2cgcHJlLXNhbml0aXplZCBzYWZlIG1lc3NhZ2VzLidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU2VjdXJpdHkgUnVsZSBEZWZpbml0aW9uIEZpbGVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5L2F1ZGl0L3J1bGVzL1NlY3VyaXR5UnVsZXMudHMnLFxuICAgIHJlYXNvbjogJ1RoaXMgaXMgYSByZWdleCBwYXR0ZXJuIGRlZmluaXRpb24gZm9yIGRldGVjdGluZyBpbm5lckhUTUwgdXNhZ2UsIG5vdCBhY3R1YWwgdXNhZ2UnXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBlcnNvbmEgTG9hZGluZyBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwMScsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hL1BlcnNvbmFMb2FkZXIudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmFMb2FkZXIgdmFsaWRhdGVzIHBlcnNvbmFzIHRocm91Z2ggU2VjdXJlWWFtbFBhcnNlciBhbmQgQ29udGVudFZhbGlkYXRvcidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVW5pY29kZSBOb3JtYWxpemF0aW9uIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzLyoudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlcyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy90eXBlcy9lbGVtZW50cy8qLnRzJyxcbiAgICByZWFzb246ICdFbGVtZW50IGludGVyZmFjZSBmaWxlcyBhcmUgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2Vycm9ycy8qLnRzJyxcbiAgICByZWFzb246ICdFcnJvciBjbGFzc2VzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2NvbmZpZy8qLnRzJyxcbiAgICByZWFzb246ICdDb25maWd1cmF0aW9uIGZpbGVzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQgZGlyZWN0bHknXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2NvbnN0YW50cy8qLnRzJyxcbiAgICByZWFzb246ICdDb25zdGFudCBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2VsZW1lbnRzL21lbW9yaWVzL2NvbnN0YW50cy50cycsXG4gICAgcmVhc29uOiAnQ29uc3RhbnRzIGZpbGUgLSBjb250YWlucyBvbmx5IHR5cGUgZGVmaW5pdGlvbnMgYW5kIGNvbnN0YW50cywgbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL3NyYy9lbGVtZW50cy9tZW1vcmllcy9jb25zdGFudHMudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50cyBmaWxlIC0gY29udGFpbnMgb25seSB0eXBlIGRlZmluaXRpb25zIGFuZCBjb25zdGFudHMsIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi9lbGVtZW50cy9tZW1vcmllcy9jb25zdGFudHMudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50cyBmaWxlIC0gQ0kgZW52aXJvbm1lbnRzIG1heSBoYXZlIGRpZmZlcmVudCBwYXRoIHN0cnVjdHVyZXMsIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdlbGVtZW50cy9tZW1vcmllcy9jb25zdGFudHMudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50cyBmaWxlIC0gaGFuZGxlcyBjYXNlIHdoZXJlIHNyYy8gcHJlZml4IGlzIHN0cmlwcGVkLCBubyB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2VsZW1lbnRzL21lbW9yaWVzL3V0aWxzLnRzJyxcbiAgICByZWFzb246ICdNZW1vcnkgdXRpbGl0aWVzIC0gYWxsIGV4dGVybmFsIGlucHV0IGlzIG5vcm1hbGl6ZWQgdmlhIFVuaWNvZGVWYWxpZGF0b3IgaW4gdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL3NyYy9lbGVtZW50cy9tZW1vcmllcy91dGlscy50cycsXG4gICAgcmVhc29uOiAnTWVtb3J5IHV0aWxpdGllcyAtIGFsbCBleHRlcm5hbCBpbnB1dCBpcyBub3JtYWxpemVkIHZpYSBVbmljb2RlVmFsaWRhdG9yIGluIHRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi9lbGVtZW50cy9tZW1vcmllcy91dGlscy50cycsXG4gICAgcmVhc29uOiAnTWVtb3J5IHV0aWxpdGllcyAtIENJIHBhdGggdmFyaWFudCwgYWxsIGV4dGVybmFsIGlucHV0IGlzIG5vcm1hbGl6ZWQgdmlhIFVuaWNvZGVWYWxpZGF0b3InXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnZWxlbWVudHMvbWVtb3JpZXMvdXRpbHMudHMnLFxuICAgIHJlYXNvbjogJ01lbW9yeSB1dGlsaXRpZXMgLSBzcmMtc3RyaXBwZWQgcGF0aCB2YXJpYW50LCBhbGwgZXh0ZXJuYWwgaW5wdXQgaXMgbm9ybWFsaXplZCB2aWEgVW5pY29kZVZhbGlkYXRvcidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi9tZW1vcmllcy8qLnRzJyxcbiAgICByZWFzb246ICdNZW1vcnkgZWxlbWVudCBmaWxlcyAtIGFsbCB1c2VyIGlucHV0IGlzIHByb3Blcmx5IG5vcm1hbGl6ZWQgaW4gTWVtb3J5LnRzIGFuZCBNZW1vcnlNYW5hZ2VyLnRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9lbGVtZW50cy9tZW1vcmllcy8qLnRzJyxcbiAgICByZWFzb246ICdNZW1vcnkgZWxlbWVudCBmaWxlcyAtIGFsbCB1c2VyIGlucHV0IGlzIHByb3Blcmx5IG5vcm1hbGl6ZWQgaW4gTWVtb3J5LnRzIGFuZCBNZW1vcnlNYW5hZ2VyLnRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy91dGlscy92ZXJzaW9uLnRzJyxcbiAgICByZWFzb246ICdWZXJzaW9uIHV0aWxpdHkgb25seSBoYW5kbGVzIGludGVybmFsIHZlcnNpb24gc3RyaW5ncywgbm90IHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2NhY2hlLyoudHMnLFxuICAgIHJlYXNvbjogJ0NhY2hlIGxheWVyIHJlY2VpdmVzIGFscmVhZHktbm9ybWFsaXplZCBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvKiovKi50cycsXG4gICAgcmVhc29uOiAnU2VjdXJpdHkgbW9kdWxlcyBoYW5kbGUgdmFsaWRhdGlvbiBhbmQgbm9ybWFsaXphdGlvbiB0aGVtc2VsdmVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9pbmRleC50cycsXG4gICAgcmVhc29uOiAnTWFpbiBlbnRyeSBwb2ludCBkZWxlZ2F0ZXMgdG8gU2VydmVyU2V0dXAgd2hpY2ggbm9ybWFsaXplcyBhbGwgaW5wdXRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvU2VydmVyU2V0dXAudHMnLFxuICAgIHJlYXNvbjogJ1RoaXMgaXMgd2hlcmUgVW5pY29kZSBub3JtYWxpemF0aW9uIGlzIGltcGxlbWVudGVkIGZvciBhbGwgdG9vbCBpbnB1dHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2NvbGxlY3Rpb24vKi50cycsXG4gICAgcmVhc29uOiAnTWFya2V0cGxhY2UgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jb2xsZWN0aW9uLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ01hcmtldHBsYWNlIG1vZHVsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gdG9vbCBoYW5kbGVycydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvcGVyc29uYS8qLnRzJyxcbiAgICByZWFzb246ICdQZXJzb25hIG1vZHVsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gdG9vbCBoYW5kbGVycydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvcGVyc29uYS8qKi8qLnRzJyxcbiAgICByZWFzb246ICdQZXJzb25hIG1vZHVsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gdG9vbCBoYW5kbGVycydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdXBkYXRlLyoudHMnLFxuICAgIHJlYXNvbjogJ1VwZGF0ZSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzLyoudHMnLFxuICAgIHJlYXNvbjogJ1Rvb2wgZmlsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gU2VydmVyU2V0dXAnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci90eXBlcy50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGUgZG9lcyBub3QgcHJvY2VzcyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdG9vbHMvKi50cycsXG4gICAgcmVhc29uOiAnU2VydmVyIHRvb2xzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIFNlcnZlclNldHVwJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NjcmlwdHMvKiovKicsXG4gICAgcmVhc29uOiAnQnVpbGQgYW5kIHV0aWxpdHkgc2NyaXB0cyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy90b29scy9wb3J0Zm9saW8vdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlIGNvbnRhaW5pbmcgb25seSBUeXBlU2NyaXB0IGludGVyZmFjZXMgLSBubyBydW50aW1lIGNvZGUgb3IgdXNlciBpbnB1dCBwcm9jZXNzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy90b29scy8qKi90eXBlcy50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQgLSBjb21waWxlLXRpbWUgb25seSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmljZXMvQnVpbGRJbmZvU2VydmljZS50cycsXG4gICAgcmVhc29uOiAnQnVpbGRJbmZvU2VydmljZSBvbmx5IHByb2Nlc3NlcyBzeXN0ZW0gaW5mb3JtYXRpb24gKHBhY2thZ2UuanNvbiwgZ2l0IGNvbW1hbmRzLCBEb2NrZXIgcnVudGltZSkgLSB0aGUgTUNQIHRvb2wgdGFrZXMgbm8gcGFyYW1ldGVycyBhbmQgbm8gdXNlciBpbnB1dCBmbG93cyB0aHJvdWdoIHRoaXMgc2VydmljZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvaGFuZGxlcnMvU3luY0hhbmRsZXJWMi50cycsXG4gICAgcmVhc29uOiAnU3luY0hhbmRsZXJWMiByZWNlaXZlcyBhbHJlYWR5LW5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0aGUgTUNQIHJlcXVlc3QgbGF5ZXIuIEFsbCB1c2VyIGlucHV0IGlzIG5vcm1hbGl6ZWQgaW4gU2VydmVyU2V0dXAgYmVmb3JlIHJlYWNoaW5nIGhhbmRsZXJzLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvaGFuZGxlcnMvQ29uZmlnSGFuZGxlci50cycsXG4gICAgcmVhc29uOiAnQ29uZmlnSGFuZGxlciByZWNlaXZlcyBhbHJlYWR5LW5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0aGUgTUNQIHJlcXVlc3QgbGF5ZXIuIEFsbCB1c2VyIGlucHV0IGlzIG5vcm1hbGl6ZWQgaW4gU2VydmVyU2V0dXAgYmVmb3JlIHJlYWNoaW5nIGhhbmRsZXJzLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICd0ZXN0LXN5bmMtb3BlcmF0aW9ucy5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXR5IGZpbGUgZm9yIGRldmVsb3BtZW50IHRlc3RpbmcuIERvZXMgbm90IHByb2Nlc3MgcHJvZHVjdGlvbiB1c2VyIGlucHV0LidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi90ZXN0LXN5bmMtb3BlcmF0aW9ucy5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXR5IGZpbGUgZm9yIGRldmVsb3BtZW50IHRlc3RpbmcuIERvZXMgbm90IHByb2Nlc3MgcHJvZHVjdGlvbiB1c2VyIGlucHV0LidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICd0ZXN0LSouanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBmaWxlcyBpbiByb290IGRpcmVjdG9yeSBmb3IgZGV2ZWxvcG1lbnQgdGVzdGluZy4gRG8gbm90IHByb2Nlc3MgcHJvZHVjdGlvbiB1c2VyIGlucHV0LidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICd0ZXN0LSouanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBmaWxlcyBpbiByb290IGRpcmVjdG9yeS4gQXVkaXQgbG9nZ2luZyBub3QgcmVxdWlyZWQgZm9yIGRldmVsb3BtZW50IHRlc3Qgc2NyaXB0cy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMicsXG4gICAgZmlsZTogJ3Rlc3QtKi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXR5IGZpbGVzIHVzaW5nIHNwYXduIHdpdGggYXJyYXkgYXJndW1lbnRzIHdoaWNoIGlzIHNhZmUgZnJvbSBpbmplY3Rpb24uJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICcqKi90ZXN0LWVsZW1lbnQtbGlmZWN5Y2xlLmpzJyxcbiAgICByZWFzb246ICdGQUxTRSBQT1NJVElWRTogc3Bhd24gd2l0aCBhcnJheSBhcmd1bWVudHMgaXMgc2FmZSAobm8gc2hlbGwgaW52b2NhdGlvbikuIEdpdEh1YiB0b2tlbiBwYXNzZWQgYXMgYXJyYXkgZWxlbWVudCwgbm90IGNvbmNhdGVuYXRlZCBpbnRvIGNvbW1hbmQgc3RyaW5nLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi90ZXN0LWVsZW1lbnQtbGlmZWN5Y2xlLmpzJyxcbiAgICByZWFzb246ICdGQUxTRSBQT1NJVElWRTogVGVzdCBoYXJuZXNzIHdpdGggbm8gdXNlciBpbnB1dCBtZWNoYW5pc21zLiBBbGwgZGF0YSBpcyBoYXJkY29kZWQgdGVzdCBzY2VuYXJpb3Mgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAndGVzdC1mdWxsLXZhbGlkYXRpb24uanMnLFxuICAgIHJlYXNvbjogJ0ZBTFNFIFBPU0lUSVZFOiBzcGF3biB3aXRoIGFycmF5IGFyZ3VtZW50cyBpcyBzYWZlLiBEb2NrZXIgY29tbWFuZCB1c2VzIGFycmF5IGFyZ3MgcHJldmVudGluZyBzaGVsbCBpbmplY3Rpb24uIExpbmUgMzcyLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAnKiovdGVzdC1mdWxsLXZhbGlkYXRpb24uanMnLFxuICAgIHJlYXNvbjogJ0ZBTFNFIFBPU0lUSVZFOiBzcGF3biB3aXRoIGFycmF5IGFyZ3VtZW50cyBpcyBzYWZlLiBEb2NrZXIgY29tbWFuZCB1c2VzIGFycmF5IGFyZ3MgcHJldmVudGluZyBzaGVsbCBpbmplY3Rpb24uJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3Rlc3QtZnVsbC12YWxpZGF0aW9uLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHZhbGlkYXRpb24gc2NyaXB0IC0gbm90IHByb2R1Y3Rpb24gY29kZS4gTm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nLCBvbmx5IHRlc3Qgc2NlbmFyaW9zLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi90ZXN0LWZ1bGwtdmFsaWRhdGlvbi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB2YWxpZGF0aW9uIHNjcmlwdCAtIG5vdCBwcm9kdWN0aW9uIGNvZGUuIE5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZywgb25seSB0ZXN0IHNjZW5hcmlvcy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAndGVzdC12ZXJzaW9uLXZhbGlkYXRpb24uanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBzY3JpcHQgLSBub3QgcHJvZHVjdGlvbiBjb2RlLiBBdWRpdCBsb2dnaW5nIG5vdCByZXF1aXJlZCBmb3IgdGVzdCB1dGlsaXRpZXMuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJyoqL3Rlc3QtdmVyc2lvbi12YWxpZGF0aW9uLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgc2NyaXB0IC0gbm90IHByb2R1Y3Rpb24gY29kZS4gQXVkaXQgbG9nZ2luZyBub3QgcmVxdWlyZWQgZm9yIHRlc3QgdXRpbGl0aWVzLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICd0ZXN0LW1lbW9yeS1kZWxldGlvbi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlIC0gTm8gdXNlciBpbnB1dCBwcm9jZXNzZWQsIGFsbCB0ZXN0IGRhdGEgaXMgaW50ZXJuYWxseSBnZW5lcmF0ZWQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovdGVzdC1tZW1vcnktZGVsZXRpb24uanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSAtIE5vIHVzZXIgaW5wdXQgcHJvY2Vzc2VkLCBhbGwgdGVzdCBkYXRhIGlzIGludGVybmFsbHkgZ2VuZXJhdGVkJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3Rlc3QtbWVtb3J5LWRlbGV0aW9uLmpzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGUgLSBBdWRpdCBsb2dnaW5nIGhhcHBlbnMgaW4gdGhlIHNlcnZlciBkZWxldGVFbGVtZW50IG1ldGhvZCwgbm90IGluIHRlc3QnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnKiovdGVzdC1tZW1vcnktZGVsZXRpb24uanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSAtIEF1ZGl0IGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgc2VydmVyIGRlbGV0ZUVsZW1lbnQgbWV0aG9kLCBub3QgaW4gdGVzdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdDV0UtODktMDAxJyxcbiAgICBmaWxlOiAndGVzdC1tZW1vcnktZGVsZXRpb24uanMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gVGVtcGxhdGUgbGl0ZXJhbHMgaW4gZXJyb3IgbWVzc2FnZXMgYXJlIG5vdCBTUUwgcXVlcmllcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdDV0UtODktMDAxJyxcbiAgICBmaWxlOiAnKiovdGVzdC1tZW1vcnktZGVsZXRpb24uanMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gVGVtcGxhdGUgbGl0ZXJhbHMgaW4gZXJyb3IgbWVzc2FnZXMgYXJlIG5vdCBTUUwgcXVlcmllcydcbiAgfSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEF1ZGl0IExvZ2dpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvdHlwZXMvKi50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzL2VsZW1lbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0VsZW1lbnQgaW50ZXJmYWNlIGZpbGVzIGFyZSB0eXBlIGRlZmluaXRpb25zIHRoYXQgZG8gbm90IHBlcmZvcm0gc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29uc3RhbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50IGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbmZpZy8qLnRzJyxcbiAgICByZWFzb246ICdDb25maWd1cmF0aW9uIGZpbGVzIGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2Vycm9ycy8qLnRzJyxcbiAgICByZWFzb246ICdFcnJvciBjbGFzc2VzIGFyZSBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucyByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnKiovKi5qc29uJyxcbiAgICByZWFzb246ICdKU09OIGZpbGVzIGNhbm5vdCBjb250YWluIGV4ZWN1dGFibGUgY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvKiovKi50cycsXG4gICAgcmVhc29uOiAnU2VjdXJpdHkgbW9kdWxlcyBhcmUgaW5mcmFzdHJ1Y3R1cmUsIG5vdCBvcGVyYXRpb25zIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBvcGVyYXRpb25zIGFyZSBub3Qgc2VjdXJpdHktc2Vuc2l0aXZlIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qKi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBvcGVyYXRpb25zIGFyZSBub3Qgc2VjdXJpdHktc2Vuc2l0aXZlIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvcGVyc29uYS8qLnRzJyxcbiAgICByZWFzb246ICdQZXJzb25hIG9wZXJhdGlvbnMgYXJlIHZhbGlkYXRlZCBhdCBlbnRyeSBwb2ludCwgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKiovKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBvcGVyYXRpb25zIGFyZSB2YWxpZGF0ZWQgYXQgZW50cnkgcG9pbnQsIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdG9vbHMvKiovKi50cycsXG4gICAgcmVhc29uOiAnVG9vbCBpbXBsZW1lbnRhdGlvbnMgZGVsZWdhdGUgdG8gc2VydmljZXMgdGhhdCBoYW5kbGUgc2VjdXJpdHknXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2luZGV4LnRzJyxcbiAgICByZWFzb246ICdNYWluIGVudHJ5IHBvaW50IGRlbGVnYXRlcyBzZWN1cml0eSBvcGVyYXRpb25zIHRvIHNwZWNpYWxpemVkIG1vZHVsZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3V0aWxzLyoudHMnLFxuICAgIHJlYXNvbjogJ1V0aWxpdHkgZnVuY3Rpb25zIGFyZSBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucyByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3VwZGF0ZS8qKi8qLnRzJyxcbiAgICByZWFzb246ICdVcGRhdGUgc3lzdGVtIGhhcyBpdHMgb3duIGxvZ2dpbmcgYW5kIGlzIG5vdCBhIGRpcmVjdCBzZWN1cml0eSBvcGVyYXRpb24nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci90eXBlcy50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGUgZG9lcyBub3QgcGVyZm9ybSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NjcmlwdHMvKiovKicsXG4gICAgcmVhc29uOiAnQnVpbGQgc2NyaXB0cyBkbyBub3QgcGVyZm9ybSBydW50aW1lIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3BvcnRmb2xpby9Qb3J0Zm9saW9TeW5jTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnUG9ydGZvbGlvIHN5bmMgb3BlcmF0aW9ucyBhcmUgZmlsZSBtYW5hZ2VtZW50IHRhc2tzLCBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucy4gU2VjdXJpdHkgdmFsaWRhdGlvbiBoYXBwZW5zIGF0IHRoZSBNQ1AgcmVxdWVzdCBsYXllci4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIudHMnLFxuICAgIHJlYXNvbjogJ1N5bmMgaGFuZGxlciBkZWxlZ2F0ZXMgdG8gUG9ydGZvbGlvU3luY01hbmFnZXIgd2hpY2ggaGFuZGxlcyBpdHMgb3duIGxvZ2dpbmcuIFNlY3VyaXR5IHZhbGlkYXRpb24gaGFwcGVucyBhdCB0aGUgTUNQIHJlcXVlc3QgbGF5ZXIuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9oYW5kbGVycy9Db25maWdIYW5kbGVyLnRzJyxcbiAgICByZWFzb246ICdDb25maWcgaGFuZGxlciBvcGVyYXRpb25zIGFyZSBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQsIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zLiBDb25maWdNYW5hZ2VyIGhhbmRsZXMgaXRzIG93biBsb2dnaW5nLidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ292ZXJhZ2UgUmVwb3J0IEZpbGVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAndGVzdC9jb3ZlcmFnZS8qKi8qJyxcbiAgICByZWFzb246ICdDb3ZlcmFnZSByZXBvcnQgZmlsZXMgYXJlIGF1dG8tZ2VuZXJhdGVkIGFuZCBub3QgcGFydCBvZiB0aGUgYXBwbGljYXRpb24gY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovbGNvdi1yZXBvcnQvKiovKicsXG4gICAgcmVhc29uOiAnTENPViBjb3ZlcmFnZSByZXBvcnQgZmlsZXMgYXJlIGF1dG8tZ2VuZXJhdGVkIGFuZCBub3QgcGFydCBvZiB0aGUgYXBwbGljYXRpb24gY29kZSdcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRG9jdW1lbnRhdGlvbiBhbmQgTm9uLUNvZGUgRmlsZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICdkb2NzLyoqLyonLFxuICAgIHJlYXNvbjogJ0RvY3VtZW50YXRpb24gZmlsZXMgaW5jbHVkaW5nIFFBIG1ldHJpY3MgYW5kIHJlcG9ydHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyoubWQnLFxuICAgIHJlYXNvbjogJ01hcmtkb3duIGRvY3VtZW50YXRpb24gZmlsZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyouanNvbicsXG4gICAgcmVhc29uOiAnSlNPTiBjb25maWd1cmF0aW9uIGFuZCBkYXRhIGZpbGVzIGRvIG5vdCBleGVjdXRlIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ0xJQ0VOU0UnLFxuICAgIHJlYXNvbjogJ0xpY2Vuc2UgZmlsZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnLmdpdGlnbm9yZScsXG4gICAgcmVhc29uOiAnR2l0IGNvbmZpZ3VyYXRpb24gZmlsZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAncGFja2FnZS1sb2NrLmpzb24nLFxuICAgIHJlYXNvbjogJ05QTSBsb2NrIGZpbGUgLSBhdXRvLWdlbmVyYXRlZCwgbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLnltbCcsXG4gICAgcmVhc29uOiAnWUFNTCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBkYXRhLCBub3QgY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi55YW1sJyxcbiAgICByZWFzb246ICdZQU1MIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGRhdGEsIG5vdCBjb2RlJ1xuICB9LFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU2VwdGVtYmVyIDIyIFNlc3Npb24gRG9jcyBSZXN0b3JhdGlvbiAtIFBSICMxMDgyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAnc2NyaXB0cy90ZXN0LWNhcGFiaWxpdHktaW5kZXguanMnLFxuICAgIHJlYXNvbjogJ1Rlc3Qgc2NyaXB0IHVzaW5nIHNwYXduIHdpdGggaGFyZGNvZGVkIGFycmF5IGFyZ3VtZW50cyAtIG5vIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMicsXG4gICAgZmlsZTogJyoqL3NjcmlwdHMvdGVzdC1jYXBhYmlsaXR5LWluZGV4LmpzJyxcbiAgICByZWFzb246ICdUZXN0IHNjcmlwdCB1c2luZyBzcGF3biB3aXRoIGhhcmRjb2RlZCBhcnJheSBhcmd1bWVudHMgLSBubyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICd0ZXN0L2V4cGVyaW1lbnRzL2NhcGFiaWxpdHktaW5kZXgtY29tcHJlaGVuc2l2ZS10ZXN0LmpzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGUgdXNpbmcgc3Bhd24gd2l0aCBoYXJkY29kZWQgYXJyYXkgYXJndW1lbnRzIC0gbm8gdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAnKiovdGVzdC9leHBlcmltZW50cy9jYXBhYmlsaXR5LWluZGV4LWNvbXByZWhlbnNpdmUtdGVzdC5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlIHVzaW5nIHNwYXduIHdpdGggaGFyZGNvZGVkIGFycmF5IGFyZ3VtZW50cyAtIG5vIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDAzJyxcbiAgICBmaWxlOiAnc2NyaXB0cy90ZXN0LWNhcGFiaWxpdHktaW5kZXguanMnLFxuICAgIHJlYXNvbjogJ1Rlc3Qgc2NyaXB0IHdpdGggaGFyZGNvZGVkIHRlc3QgcGVyc29uYSBwYXRocyAtIG5vdCBwcm9kdWN0aW9uIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDAzJyxcbiAgICBmaWxlOiAnKiovc2NyaXB0cy90ZXN0LWNhcGFiaWxpdHktaW5kZXguanMnLFxuICAgIHJlYXNvbjogJ1Rlc3Qgc2NyaXB0IHdpdGggaGFyZGNvZGVkIHRlc3QgcGVyc29uYSBwYXRocyAtIG5vdCBwcm9kdWN0aW9uIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnQ1dFLTIyLTAwMScsXG4gICAgZmlsZTogJ3Rlc3QvZXhwZXJpbWVudHMvY2FwYWJpbGl0eS1pbmRleC1kb2NrZXItdGVzdC5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlIHVzaW5nIGhhcmRjb2RlZCB0ZXN0IHBhdGhzIC0gbm8gdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdDV0UtMjItMDAxJyxcbiAgICBmaWxlOiAnKiovdGVzdC9leHBlcmltZW50cy9jYXBhYmlsaXR5LWluZGV4LWRvY2tlci10ZXN0LmpzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGUgdXNpbmcgaGFyZGNvZGVkIHRlc3QgcGF0aHMgLSBubyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3Rlc3QtbWVtb3J5LWVkaXQuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSBmb3IgbWVtb3J5IGVkaXRpbmcgLSBubyB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovdGVzdC1tZW1vcnktZWRpdC5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlIGZvciBtZW1vcnkgZWRpdGluZyAtIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcblxuICAvLyBBZGRpdGlvbmFsIHN1cHByZXNzaW9ucyBmb3IgcmVtYWluaW5nIGlzc3Vlc1xuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICd0ZXN0L2V4cGVyaW1lbnRzL2NhcGFiaWxpdHktaW5kZXgtZG9ja2VyLXRlc3QuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSB1c2luZyBzcGF3biB3aXRoIGhhcmRjb2RlZCBhcnJheSBhcmd1bWVudHMgYXQgbGluZSAyNzkgLSBubyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICcqKi90ZXN0L2V4cGVyaW1lbnRzL2NhcGFiaWxpdHktaW5kZXgtZG9ja2VyLXRlc3QuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSB1c2luZyBzcGF3biB3aXRoIGhhcmRjb2RlZCBhcnJheSBhcmd1bWVudHMgYXQgbGluZSAyNzkgLSBubyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwMScsXG4gICAgZmlsZTogJ3NjcmlwdHMvdGVzdC1jYXBhYmlsaXR5LWluZGV4LmpzJyxcbiAgICByZWFzb246ICdUZXN0IHNjcmlwdCBsb2FkaW5nIHRlc3QgcGVyc29uYXMgd2l0aCBoYXJkY29kZWQgcGF0aHMgLSBub3QgcHJvZHVjdGlvbiBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwMScsXG4gICAgZmlsZTogJyoqL3NjcmlwdHMvdGVzdC1jYXBhYmlsaXR5LWluZGV4LmpzJyxcbiAgICByZWFzb246ICdUZXN0IHNjcmlwdCBsb2FkaW5nIHRlc3QgcGVyc29uYXMgd2l0aCBoYXJkY29kZWQgcGF0aHMgLSBub3QgcHJvZHVjdGlvbiBjb2RlJ1xuICB9XG5dO1xuXG4vKipcbiAqIFZhbGlkYXRlIHN1cHByZXNzaW9uIGNvbmZpZ3VyYXRpb24gYXQgc3RhcnR1cFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTdXBwcmVzc2lvbnMoKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNlZW5QYXR0ZXJucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBcbiAgZm9yIChjb25zdCBzdXBwcmVzc2lvbiBvZiBzdXBwcmVzc2lvbnMpIHtcbiAgICAvLyBDaGVjayBmb3IgZW1wdHkgcmVhc29uc1xuICAgIGlmICghc3VwcHJlc3Npb24ucmVhc29uIHx8IHN1cHByZXNzaW9uLnJlYXNvbi50cmltKCkubGVuZ3RoIDwgMTApIHtcbiAgICAgIGVycm9ycy5wdXNoKGBTdXBwcmVzc2lvbiBmb3IgJHtzdXBwcmVzc2lvbi5ydWxlfSBoYXMgaW5zdWZmaWNpZW50IHJlYXNvbmApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgdmFsaWQgcnVsZSBwYXR0ZXJuc1xuICAgIGNvbnN0IHJ1bGVQYXR0ZXJuID0gL14oRE1DUC1TRUMtXFxkezN9fE9XQVNQLVtBLVpdXFxkezJ9LVxcZHszfXxDV0UtXFxkKy1cXGR7M318XFwqKSQvO1xuICAgIGlmICghc3VwcHJlc3Npb24ucnVsZS5tYXRjaChydWxlUGF0dGVybikpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBJbnZhbGlkIHJ1bGUgcGF0dGVybjogJHtzdXBwcmVzc2lvbi5ydWxlfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIHN1cHByZXNzaW9uc1xuICAgIGNvbnN0IGtleSA9IGAke3N1cHByZXNzaW9uLnJ1bGV9OiR7c3VwcHJlc3Npb24uZmlsZSB8fCAnKid9YDtcbiAgICBpZiAoc2VlblBhdHRlcm5zLmhhcyhrZXkpKSB7XG4gICAgICBlcnJvcnMucHVzaChgRHVwbGljYXRlIHN1cHByZXNzaW9uOiAke2tleX1gKTtcbiAgICB9XG4gICAgc2VlblBhdHRlcm5zLmFkZChrZXkpO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIGdsb2IgcGF0dGVybnNcbiAgICBpZiAoc3VwcHJlc3Npb24uZmlsZT8uaW5jbHVkZXMoJyoqJykgJiYgIXN1cHByZXNzaW9uLmZpbGUuaW5jbHVkZXMoJyoqLycpKSB7XG4gICAgICBlcnJvcnMucHVzaChgSW52YWxpZCBnbG9iIHBhdHRlcm4gaW4gJHtzdXBwcmVzc2lvbi5maWxlfSAtICoqIG11c3QgYmUgZm9sbG93ZWQgYnkgL2ApO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGdsb2IgcGF0dGVybiB0byByZWdleCBwYXR0ZXJuIHNhZmVseVxuICogVXNpbmcgYSBwcm9wZXIgZ2xvYi10by1yZWdleCBjb252ZXJzaW9uIHRoYXQgaGFuZGxlcyBhbGwgZWRnZSBjYXNlc1xuICovXG5mdW5jdGlvbiBnbG9iVG9SZWdleChnbG9iOiBzdHJpbmcpOiBSZWdFeHAge1xuICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXRSZWdleChnbG9iKTtcbiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcbiAgXG4gIC8vIFNwZWNpYWwgY2FzZTogaWYgZ2xvYiBzdGFydHMgd2l0aCAqLCBpdCBzaG91bGQgbWF0Y2ggYW55dGhpbmcgYXQgdGhlIGJlZ2lubmluZ1xuICBsZXQgcHJvY2Vzc2VkR2xvYiA9IGdsb2I7XG4gIGxldCBwcmVmaXggPSAnJztcbiAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnKicpICYmICFnbG9iLnN0YXJ0c1dpdGgoJyoqJykpIHtcbiAgICBwcmVmaXggPSAnKD86LiovKT8nOyAgLy8gT3B0aW9uYWwgcGF0aCBwcmVmaXhcbiAgICBwcm9jZXNzZWRHbG9iID0gZ2xvYi5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgXG4gIC8vIEVzY2FwZSBhbGwgcmVnZXggc3BlY2lhbCBjaGFyYWN0ZXJzIGV4Y2VwdCAqIGFuZCAvXG4gIC8vIEZpeGVkOiBQcm9wZXJseSBlc2NhcGUgYmFja3NsYXNoZXMgYW5kIG90aGVyIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVyc1xuICBsZXQgcGF0dGVybiA9IHByb2Nlc3NlZEdsb2IucmVwbGFjZSgvW1xcXFxeJC4oKSs/e31bXFxdfF0vZywgJ1xcXFwkJicpO1xuICBcbiAgLy8gSGFuZGxlIGdsb2IgcGF0dGVybnMgaW4gY29ycmVjdCBvcmRlclxuICAvLyBSZXBsYWNlICoqIGJlZm9yZSAqIHRvIGF2b2lkIGNvbmZsaWN0c1xuICBwYXR0ZXJuID0gcGF0dGVyblxuICAgIC5yZXBsYWNlKC9cXCpcXCovZywgJzw8R0xPQlNUQVI+PicpICAgICAvLyBUZW1wb3JhcnkgcGxhY2Vob2xkZXIgZm9yICoqXG4gICAgLnJlcGxhY2UoL1xcKi9nLCAnPDxTVEFSPj4nKSAgICAgICAgICAgIC8vIFRlbXBvcmFyeSBwbGFjZWhvbGRlciBmb3IgKlxuICAgIC5yZXBsYWNlKC88PEdMT0JTVEFSPj5cXC8vZywgJyg/Oi4qLyk/JykgLy8gKiovIG1hdGNoZXMgYW55IG51bWJlciBvZiBkaXJlY3RvcmllcyBpbmNsdWRpbmcgbm9uZVxuICAgIC5yZXBsYWNlKC88PEdMT0JTVEFSPj4vZywgJy4qJykgICAgICAgLy8gKiogbWF0Y2hlcyBhbnl0aGluZ1xuICAgIC5yZXBsYWNlKC88PFNUQVI+Pi9nLCAnW14vXSonKSAgICAgICAgLy8gKiBtYXRjaGVzIGFueXRoaW5nIGV4Y2VwdCBkaXJlY3Rvcnkgc2VwYXJhdG9yXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXFxcXC8nKTsgICAgICAgICAgICAgICAgLy8gRXNjYXBlIGZvcndhcmQgc2xhc2hlc1xuICBcbiAgLy8gQ29tYmluZSBwcmVmaXggYW5kIHBhdHRlcm5cbiAgY29uc3QgZnVsbFBhdHRlcm4gPSBwcmVmaXggKyBwYXR0ZXJuO1xuICBcbiAgLy8gQWRkIGFuY2hvcnMgdG8gZW5zdXJlIGZ1bGwgcGF0aCBtYXRjaFxuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF4ke2Z1bGxQYXR0ZXJufSRgKTtcbiAgXG4gIC8vIENhY2hlIHRoZSBjb21waWxlZCByZWdleFxuICBjYWNoZS5zZXRSZWdleChnbG9iLCByZWdleCk7XG4gIFxuICByZXR1cm4gcmVnZXg7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGZpbGUgcGF0aCBmb3IgY29uc2lzdGVudCBtYXRjaGluZ1xuICogSGFuZGxlcyBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBwYXRocyBhY3Jvc3MgZGlmZmVyZW50IHBsYXRmb3Jtc1xuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBDb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcyBmb3IgV2luZG93cyBwYXRoc1xuICBsZXQgbm9ybWFsaXplZCA9IGZpbGVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgXG4gIC8vIFJlbW92ZSBkdXBsaWNhdGUgc2xhc2hlc1xuICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5yZXBsYWNlKC9cXC8rL2csICcvJyk7XG4gIFxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2ggaWYgcHJlc2VudFxuICBpZiAobm9ybWFsaXplZC5lbmRzV2l0aCgnLycpICYmIG5vcm1hbGl6ZWQubGVuZ3RoID4gMSkge1xuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnNsaWNlKDAsIC0xKTtcbiAgfVxuICBcbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogRXh0cmFjdCByZWxhdGl2ZSBwYXRoIGZyb20gYWJzb2x1dGUgcGF0aFxuICogSGFuZGxlcyB2YXJpb3VzIENJL0NEIGFuZCBsb2NhbCBkZXZlbG9wbWVudCBwYXRoIGZvcm1hdHNcbiAqL1xuZnVuY3Rpb24gZ2V0UmVsYXRpdmVQYXRoKGFic29sdXRlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgoYWJzb2x1dGVQYXRoKTtcbiAgXG4gIC8vIElmIGFscmVhZHkgYSByZWxhdGl2ZSBwYXRoLCByZXR1cm4gYXMtaXNcbiAgaWYgKCFub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy8nKSAmJiAhbm9ybWFsaXplZC5tYXRjaCgvXltBLVpdOi9pKSkge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG4gIFxuICAvLyBEZWZpbmUgY29tbW9uIHByb2plY3Qgc291cmNlIGRpcmVjdG9yaWVzXG4gIGNvbnN0IHByb2plY3REaXJzID0gWydzcmMvJywgJ19fdGVzdHNfXy8nLCAnc2NyaXB0cy8nLCAnZG9jcy8nLCAndGVzdC8nLCAndGVzdHMvJywgJ2xpYi8nXTtcbiAgXG4gIC8vIEZpbmQgdGhlIHBvc2l0aW9uIG9mIGNvbW1vbiBwcm9qZWN0IGRpcmVjdG9yaWVzIGluIHRoZSBwYXRoXG4gIGxldCBiZXN0TWF0Y2ggPSB7IGluZGV4OiAtMSwgZGlyOiAnJywgcmVsYXRpdmVQYXRoOiAnJyB9O1xuICBcbiAgZm9yIChjb25zdCBkaXIgb2YgcHJvamVjdERpcnMpIHtcbiAgICAvLyBMb29rIGZvciAvZGlyIHBhdHRlcm4gKHdpdGggbGVhZGluZyBzbGFzaCB0byBhdm9pZCBmYWxzZSBtYXRjaGVzKVxuICAgIGNvbnN0IHNlYXJjaFBhdHRlcm4gPSBgLyR7ZGlyfWA7XG4gICAgY29uc3QgaW5kZXggPSBub3JtYWxpemVkLmxhc3RJbmRleE9mKHNlYXJjaFBhdHRlcm4pO1xuICAgIFxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAvLyBFeHRyYWN0IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHBhcmVudCBvZiB0aGlzIGRpcmVjdG9yeVxuICAgICAgLy8gRm9yIGV4YW1wbGU6IC9ob21lL3VzZXIvcHJvamVjdC9zcmMvZmlsZS50cyAtPiBzcmMvZmlsZS50c1xuICAgICAgY29uc3QgZGlyU3RhcnRJbmRleCA9IGluZGV4ICsgMTsgLy8gU2tpcCB0aGUgbGVhZGluZyBzbGFzaFxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoZGlyU3RhcnRJbmRleCk7XG4gICAgICBcbiAgICAgIC8vIFZlcmlmeSB0aGlzIGxvb2tzIGxpa2UgYSB2YWxpZCBwcm9qZWN0IGZpbGVcbiAgICAgIGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChkaXIpICYmIHJlbGF0aXZlUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIG1hdGNoIHRoYXQgYXBwZWFycyBsYXRlc3QgaW4gdGhlIHBhdGggKG1vc3Qgc3BlY2lmaWMpXG4gICAgICAgIGlmIChpbmRleCA+IGJlc3RNYXRjaC5pbmRleCkge1xuICAgICAgICAgIGJlc3RNYXRjaCA9IHsgaW5kZXgsIGRpciwgcmVsYXRpdmVQYXRoIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8vIElmIHdlIGZvdW5kIGEgbWF0Y2gsIHJldHVybiBpdFxuICBpZiAoYmVzdE1hdGNoLmluZGV4ID49IDApIHtcbiAgICByZXR1cm4gYmVzdE1hdGNoLnJlbGF0aXZlUGF0aDtcbiAgfVxuICBcbiAgLy8gRmFsbGJhY2s6IFRyeSB0byBmaW5kIGNvbW1vbiBmaWxlIHBhdHRlcm5zIHRoYXQgaW5kaWNhdGUgcHJvamVjdCBmaWxlc1xuICBjb25zdCBmaWxlUGF0dGVybnMgPSBbXG4gICAgL1xcLyhzcmN8X190ZXN0c19ffHNjcmlwdHN8dGVzdHx0ZXN0c3xsaWIpXFwvLipcXC5banRdc3g/JC8sXG4gICAgL1xcLyhzcmN8X190ZXN0c19ffHNjcmlwdHN8dGVzdHx0ZXN0c3xsaWIpXFwvLipcXC5qc29uJC8sXG4gICAgL1xcLyhzcmN8X190ZXN0c19ffHNjcmlwdHN8dGVzdHx0ZXN0c3xsaWIpXFwvLipcXC55YT9tbCQvLFxuICAgIC9cXC9wYWNrYWdlXFwuanNvbiQvLFxuICAgIC9cXC9wYWNrYWdlLWxvY2tcXC5qc29uJC8sXG4gICAgL1xcL3RzY29uZmlnLipcXC5qc29uJC8sXG4gICAgL1xcL1xcLi4qcmNcXC5qc29uJC8gIC8vIC5lc2xpbnRyYy5qc29uLCBldGMuXG4gIF07XG4gIFxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgZmlsZVBhdHRlcm5zKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKHBhdHRlcm4pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gRmluZCB3aGVyZSB0aGUgbWF0Y2ggc3RhcnRzIGFuZCBleHRyYWN0IGZyb20gdGhlcmVcbiAgICAgIGNvbnN0IG1hdGNoSW5kZXggPSBub3JtYWxpemVkLmluZGV4T2YobWF0Y2hbMF0pO1xuICAgICAgaWYgKG1hdGNoSW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZC5zdWJzdHJpbmcobWF0Y2hJbmRleCArIDEpOyAvLyBTa2lwIGxlYWRpbmcgL1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gTGFzdCByZXNvcnQ6IGlmIHBhdGggY29udGFpbnMgY29tbW9uIGV4dGVuc2lvbnMsIHRyeSB0byBleHRyYWN0IGEgcmVhc29uYWJsZSByZWxhdGl2ZSBwYXRoXG4gIGlmIChub3JtYWxpemVkLm1hdGNoKC9cXC4odHN8anN8dHN4fGpzeHxqc29ufHlhbWx8eW1sKSQvKSkge1xuICAgIC8vIEZpbmQgdGhlIGxhc3Qgc2VnbWVudCB0aGF0IGxvb2tzIGxpa2UgYSBwcm9qZWN0IGRpcmVjdG9yeVxuICAgIGNvbnN0IHNlZ21lbnRzID0gbm9ybWFsaXplZC5zcGxpdCgnLycpO1xuICAgIGZvciAobGV0IGkgPSBzZWdtZW50cy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHByb2plY3REaXJzLnNvbWUoZGlyID0+IGRpci5zdGFydHNXaXRoKHNlZ21lbnRzW2ldKSkpIHtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzLnNsaWNlKGkpLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIHJvb3QtbGV2ZWwgZmlsZXMgbGlrZSBwYWNrYWdlLWxvY2suanNvbiwganVzdCByZXR1cm4gdGhlIGZpbGVuYW1lXG4gICAgY29uc3QgZmlsZW5hbWUgPSBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXTtcbiAgICBpZiAoZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgcmV0dXJuIGZpbGVuYW1lO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gUmV0dXJuIHRoZSBub3JtYWxpemVkIHBhdGggaWYgd2UgY2FuJ3QgZXh0cmFjdCByZWxhdGl2ZVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGZpbmRpbmcgc2hvdWxkIGJlIHN1cHByZXNzZWRcbiAqIE9wdGltaXplZCB3aXRoIGNhY2hpbmcgYW5kIGVhcmx5IHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFN1cHByZXNzKHJ1bGVJZDogc3RyaW5nLCBmaWxlUGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWZpbGVQYXRoKSByZXR1cm4gZmFsc2U7XG4gIFxuICAvLyBOb3JtYWxpemUgcGF0aHMgZm9yIGNvbnNpc3RlbnQgbWF0Y2hpbmdcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKGZpbGVQYXRoKTtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgXG4gIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChydWxlSWQsIHJlbGF0aXZlUGF0aCk7XG4gIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhY2hlZDtcbiAgXG4gIC8vIFByb2Nlc3Mgc3VwcHJlc3Npb25zIHdpdGggZWFybHkgcmV0dXJuc1xuICBmb3IgKGNvbnN0IHN1cHByZXNzaW9uIG9mIHN1cHByZXNzaW9ucykge1xuICAgIC8vIFNraXAgaWYgcnVsZSBkb2Vzbid0IG1hdGNoXG4gICAgaWYgKHN1cHByZXNzaW9uLnJ1bGUgIT09ICcqJyAmJiBzdXBwcmVzc2lvbi5ydWxlICE9PSBydWxlSWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBIYW5kbGUgZ2xvYmFsIHN1cHByZXNzaW9ucyAobm8gZmlsZSBzcGVjaWZpZWQpXG4gICAgaWYgKCFzdXBwcmVzc2lvbi5maWxlKSB7XG4gICAgICBjYWNoZS5zZXQocnVsZUlkLCByZWxhdGl2ZVBhdGgsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGV4YWN0IGZpbGUgbWF0Y2ggKG1vc3QgY29tbW9uIGNhc2UpXG4gICAgaWYgKHN1cHByZXNzaW9uLmZpbGUgPT09IHJlbGF0aXZlUGF0aCB8fCBzdXBwcmVzc2lvbi5maWxlID09PSBub3JtYWxpemVkUGF0aCkge1xuICAgICAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBwYXR0ZXJuIG1hdGNoIG9ubHkgaWYgZmlsZSBjb250YWlucyB3aWxkY2FyZHNcbiAgICBpZiAoc3VwcHJlc3Npb24uZmlsZS5pbmNsdWRlcygnKicpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWdleCA9IGdsb2JUb1JlZ2V4KHN1cHByZXNzaW9uLmZpbGUpO1xuICAgICAgICBpZiAocmVnZXgudGVzdChyZWxhdGl2ZVBhdGgpIHx8IHJlZ2V4LnRlc3Qobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCB0cnVlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBJbnZhbGlkIHN1cHByZXNzaW9uIHBhdHRlcm4gXCIke3N1cHByZXNzaW9uLmZpbGV9XCI6YCwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gTm90IHN1cHByZXNzZWRcbiAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCBmYWxzZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDbGVhciBzdXBwcmVzc2lvbiBjYWNoZSAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTdXBwcmVzc2lvbkNhY2hlKCk6IHZvaWQge1xuICBjYWNoZS5jbGVhcigpO1xufVxuXG4vKipcbiAqIEdldCBzdXBwcmVzc2lvbiBzdGF0aXN0aWNzIGZvciByZXBvcnRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN1cHByZXNzaW9uU3RhdHMoKTogeyBcbiAgdG90YWw6IG51bWJlcjsgXG4gIGJ5UnVsZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgYnlDYXRlZ29yeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbn0ge1xuICBjb25zdCBzdGF0cyA9IHtcbiAgICB0b3RhbDogc3VwcHJlc3Npb25zLmxlbmd0aCxcbiAgICBieVJ1bGU6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICAgYnlDYXRlZ29yeToge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuICB9O1xuICBcbiAgZm9yIChjb25zdCBzdXBwcmVzc2lvbiBvZiBzdXBwcmVzc2lvbnMpIHtcbiAgICAvLyBDb3VudCBieSBydWxlXG4gICAgc3RhdHMuYnlSdWxlW3N1cHByZXNzaW9uLnJ1bGVdID0gKHN0YXRzLmJ5UnVsZVtzdXBwcmVzc2lvbi5ydWxlXSB8fCAwKSArIDE7XG4gICAgXG4gICAgLy8gQ291bnQgYnkgY2F0ZWdvcnkgKGV4dHJhY3QgZnJvbSBydWxlIHByZWZpeClcbiAgICBjb25zdCBjYXRlZ29yeSA9IHN1cHByZXNzaW9uLnJ1bGUuc3BsaXQoJy0nKVswXTtcbiAgICBzdGF0cy5ieUNhdGVnb3J5W2NhdGVnb3J5XSA9IChzdGF0cy5ieUNhdGVnb3J5W2NhdGVnb3J5XSB8fCAwKSArIDE7XG4gIH1cbiAgXG4gIHJldHVybiBzdGF0cztcbn1cblxuLy8gVmFsaWRhdGUgc3VwcHJlc3Npb25zIG9uIG1vZHVsZSBsb2FkXG5jb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVTdXBwcmVzc2lvbnMoKTtcbmlmICh2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgbG9nZ2VyLndhcm4oJ1N1cHByZXNzaW9uIGNvbmZpZ3VyYXRpb24gd2FybmluZ3M6JywgdmFsaWRhdGlvbkVycm9ycyk7XG59Il19
897
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcHJlc3Npb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1ZGl0L2NvbmZpZy9zdXBwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRbEQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQjtJQUNaLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFL0MsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUMxQyxPQUFPLEdBQUcsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLEtBQWM7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENB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Q0FBQyxDQUFDO1FBRTNFLCtDQUErQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELHVDQUF1QztBQUN2QyxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixFQUFFLENBQUM7QUFDaEQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyaXR5IEF1ZGl0IFN1cHByZXNzaW9uIENvbmZpZ3VyYXRpb25cbiAqIFxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHN1cHByZXNzaW9uIHJ1bGVzIGZvciBmYWxzZSBwb3NpdGl2ZXMgaW4gdGhlIHNlY3VyaXR5IGF1ZGl0LlxuICogRWFjaCBzdXBwcmVzc2lvbiBzaG91bGQgYmUgd2VsbC1kb2N1bWVudGVkIHdpdGggYSBjbGVhciByZWFzb24uXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb24ge1xuICBydWxlOiBzdHJpbmc7XG4gIGZpbGU/OiBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN1cHByZXNzaW9uIGNhY2hlIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAqL1xuY2xhc3MgU3VwcHJlc3Npb25DYWNoZSB7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWdleENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFJlZ0V4cD4oKTtcbiAgXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLnJlZ2V4Q2FjaGUuY2xlYXIoKTtcbiAgfVxuICBcbiAgZ2V0Q2FjaGVLZXkocnVsZUlkOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtydWxlSWR9Ojoke2ZpbGVQYXRofWA7XG4gIH1cbiAgXG4gIGdldChydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldCh0aGlzLmdldENhY2hlS2V5KHJ1bGVJZCwgZmlsZVBhdGgpKTtcbiAgfVxuICBcbiAgc2V0KHJ1bGVJZDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuc2V0KHRoaXMuZ2V0Q2FjaGVLZXkocnVsZUlkLCBmaWxlUGF0aCksIHZhbHVlKTtcbiAgfVxuICBcbiAgZ2V0UmVnZXgocGF0dGVybjogc3RyaW5nKTogUmVnRXhwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWdleENhY2hlLmdldChwYXR0ZXJuKTtcbiAgfVxuICBcbiAgc2V0UmVnZXgocGF0dGVybjogc3RyaW5nLCByZWdleDogUmVnRXhwKTogdm9pZCB7XG4gICAgdGhpcy5yZWdleENhY2hlLnNldChwYXR0ZXJuLCByZWdleCk7XG4gIH1cbn1cblxuY29uc3QgY2FjaGUgPSBuZXcgU3VwcHJlc3Npb25DYWNoZSgpO1xuXG5leHBvcnQgY29uc3Qgc3VwcHJlc3Npb25zOiBTdXBwcmVzc2lvbltdID0gW1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNRTCBJbmplY3Rpb24gRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdDV0UtODktMDAxJyxcbiAgICBmaWxlOiAnc3JjL3VwZGF0ZS9VcGRhdGVNYW5hZ2VyLnRzJyxcbiAgICByZWFzb246ICdGYWxzZSBwb3NpdGl2ZSAtIFwiVXBkYXRlIEZhaWxlZFwiIGlzIGEgVUkgbWVzc2FnZSwgbm90IFNRTC4gVGhlIGNvZGViYXNlIGRvZXMgbm90IHVzZSBTUUwuJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUZXN0IEZpbGUgU3VwcHJlc3Npb25zXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnX190ZXN0c19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgbWF5IGNvbnRhaW4gaW50ZW50aW9uYWwgc2VjdXJpdHkgcGF0dGVybnMgZm9yIHRlc3RpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyoudGVzdC50cycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBtYXkgY29udGFpbiBpbnRlbnRpb25hbCBzZWN1cml0eSBwYXR0ZXJucyBmb3IgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi5zcGVjLnRzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIG1heSBjb250YWluIGludGVudGlvbmFsIHNlY3VyaXR5IHBhdHRlcm5zIGZvciB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3Rlc3QvKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXRpZXMgYW5kIEUyRSB0ZXN0cyBkbyBub3QgcHJvY2VzcyB1bnRydXN0ZWQgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICd0ZXN0LyoqLyonLFxuICAgIHJlYXNvbjogJ0F1ZGl0IGxvZ2dpbmcgbm90IHJlcXVpcmVkIGZvciB0ZXN0IHV0aWxpdGllcyBhbmQgRTJFIHRlc3RzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDMnLFxuICAgIGZpbGU6ICd0ZXN0L2UyZS9jbGVhbnVwLXRlc3QtZGF0YS50cycsXG4gICAgcmVhc29uOiAnRmFsc2UgcG9zaXRpdmUgLSBjb25zb2xlLmxvZyBtZXNzYWdlIHN0cmluZyBsaXRlcmFsLCBub3QgYSBwYXRoIG9wZXJhdGlvbidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDEtMDAxJyxcbiAgICBmaWxlOiAnX190ZXN0c19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgdXNlIGZha2UgdG9rZW5zIGFuZCBzZWNyZXRzIGZvciB0ZXN0aW5nIHNlY3VyaXR5IGZlYXR1cmVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMS0wMDEnLFxuICAgIGZpbGU6ICd0ZXN0L19fZml4dHVyZXNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpeHR1cmVzIGNvbnRhaW4gaW50ZW50aW9uYWwgbW9jayBjcmVkZW50aWFscyBjbGVhcmx5IG1hcmtlZCBhcyBGQUtFL1RFU1QvTk9UX1JFQUwnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ3Rlc3QvX19maXh0dXJlc19fL3Rlc3RDcmVkZW50aWFscy50cycsXG4gICAgcmVhc29uOiAnQ2VudHJhbGl6ZWQgdGVzdCBjcmVkZW50aWFscyBmaWxlIHdpdGggaW50ZW50aW9uYWxseSBmYWtlIHZhbHVlcyBmb3IgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdDV0UtODktMDAxJyxcbiAgICBmaWxlOiAnX190ZXN0c19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgY29udGFpbiBTUUwgaW5qZWN0aW9uIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIGNvbW1hbmQgaW5qZWN0aW9uIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDMnLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIHBhdGggdHJhdmVyc2FsIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBZQU1MIFBhcnNpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkveWFtbFZhbGlkYXRvci50cycsXG4gICAgcmVhc29uOiAnWWFtbFZhbGlkYXRvciBpcyB0aGUgc2VjdXJpdHkgdmFsaWRhdGlvbiBsYXllciBpdHNlbGYgLSBpdCBuZWVkcyBkaXJlY3QgeWFtbC5sb2FkIGFjY2VzcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci50cycsXG4gICAgcmVhc29uOiAnU2VjdXJlWWFtbFBhcnNlciBpcyB0aGUgc2VjdXJpdHkgd3JhcHBlciB0aGF0IHZhbGlkYXRlcyBZQU1MIGJlZm9yZSBwYXJzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9lbGVtZW50cy9za2lsbHMvU2tpbGxNYW5hZ2VyLnRzJyxcbiAgICByZWFzb246ICdVc2VzIHlhbWwubG9hZCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBhbmQgc2l6ZSB2YWxpZGF0aW9uIC0gZXF1aXZhbGVudCBzZWN1cml0eSB0byBTZWN1cmVZYW1sUGFyc2VyIGZvciByYXcgWUFNTCBpbXBvcnQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzL3BvcnRmb2xpby9zdWJtaXRUb1BvcnRmb2xpb1Rvb2wudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gVXNlcyBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKCkgd2hpY2ggaXMgdGhlIHNlY3VyZSBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCB0byBwcmV2ZW50IFlBTUwgdnVsbmVyYWJpbGl0aWVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9jb25maWcvQ29uZmlnTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnSU5URU5USU9OQUw6IFVzZXMganMteWFtbCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBmb3IgcHVyZSBZQU1MIGNvbmZpZyBmaWxlcy4gVGhpcyBwcmV2ZW50cyBjb2RlIGV4ZWN1dGlvbiBhbmQgaXMgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IG1lYXN1cmUgZm9yIGNvbmZpZyBmaWxlcyB0aGF0IGFyZSBOT1QgbWFya2Rvd24gd2l0aCBmcm9udG1hdHRlci4gUmVncmVzc2lvbiB0ZXN0IGVuc3VyZXMgd2UgZG8gbm90IHVzZSBTZWN1cmVZYW1sUGFyc2VyIGhlcmUgd2hpY2ggd291bGQgcmVzZXQgY29uZmlnIHZhbHVlcy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL3BvcnRmb2xpby9Qb3J0Zm9saW9JbmRleE1hbmFnZXIudHMnLFxuICAgIHJlYXNvbjogJ0lOVEVOVElPTkFMOiBNZW1vcnkgZmlsZXMgYXJlIHB1cmUgWUFNTCAobm90IE1hcmtkb3duIHdpdGggZnJvbnRtYXR0ZXIpLCBzbyBTZWN1cmVZYW1sUGFyc2VyIGNhbm5vdCBiZSB1c2VkLiBVc2VzIHlhbWwubG9hZCB3aXRoIEZBSUxTQUZFX1NDSEVNQSArIHNpemUgdmFsaWRhdGlvbiArIHR5cGUgY2hlY2tpbmcgZm9yIHNlY3VyaXR5LiBUaGVzZSBhcmUgdHJ1c3RlZCBsb2NhbCB1c2VyIGZpbGVzLiBGaXggZm9yIGlzc3VlICMxMTk2LidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ2xlYXItdGV4dCBMb2dnaW5nIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDEwJyxcbiAgICBmaWxlOiAnc3JjL3V0aWxzL2xvZ2dlci50cycsXG4gICAgcmVhc29uOiAnRkFMU0UgUE9TSVRJVkU6IFRoZSBsb2dnZXIgYWxyZWFkeSBzYW5pdGl6ZXMgYWxsIHNlbnNpdGl2ZSBkYXRhIHRocm91Z2ggc2FuaXRpemVNZXNzYWdlKCkgYW5kIHNhbml0aXplT2JqZWN0KCkgbWV0aG9kcy4gQWxsIHNlbnNpdGl2ZSBmaWVsZHMgKHRva2Vucywga2V5cywgcGFzc3dvcmRzLCBldGMuKSBhcmUgcmVwbGFjZWQgd2l0aCBbUkVEQUNURURdIGJlZm9yZSBhbnkgY29uc29sZSBvdXRwdXQuIExpbmVzIDI4OCwgMjkxLCBhbmQgMjk1IG9ubHkgbG9nIHByZS1zYW5pdGl6ZWQgc2FmZSBtZXNzYWdlcy4nXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlY3VyaXR5IFJ1bGUgRGVmaW5pdGlvbiBGaWxlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZWN1cml0eS9hdWRpdC9ydWxlcy9TZWN1cml0eVJ1bGVzLnRzJyxcbiAgICByZWFzb246ICdUaGlzIGlzIGEgcmVnZXggcGF0dGVybiBkZWZpbml0aW9uIGZvciBkZXRlY3RpbmcgaW5uZXJIVE1MIHVzYWdlLCBub3QgYWN0dWFsIHVzYWdlJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQZXJzb25hIExvYWRpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDEnLFxuICAgIGZpbGU6ICdzcmMvcGVyc29uYS9QZXJzb25hTG9hZGVyLnRzJyxcbiAgICByZWFzb246ICdQZXJzb25hTG9hZGVyIHZhbGlkYXRlcyBwZXJzb25hcyB0aHJvdWdoIFNlY3VyZVlhbWxQYXJzZXIgYW5kIENvbnRlbnRWYWxpZGF0b3InXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVuaWNvZGUgTm9ybWFsaXphdGlvbiBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy90eXBlcy8qLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdHlwZXMvZWxlbWVudHMvKi50cycsXG4gICAgcmVhc29uOiAnRWxlbWVudCBpbnRlcmZhY2UgZmlsZXMgYXJlIHR5cGUgZGVmaW5pdGlvbnMgdGhhdCBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9lcnJvcnMvKi50cycsXG4gICAgcmVhc29uOiAnRXJyb3IgY2xhc3NlcyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jb25maWcvKi50cycsXG4gICAgcmVhc29uOiAnQ29uZmlndXJhdGlvbiBmaWxlcyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0IGRpcmVjdGx5J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jb25zdGFudHMvKi50cycsXG4gICAgcmVhc29uOiAnQ29uc3RhbnQgZGVmaW5pdGlvbiBmaWxlcyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9lbGVtZW50cy9tZW1vcmllcy9jb25zdGFudHMudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50cyBmaWxlIC0gY29udGFpbnMgb25seSB0eXBlIGRlZmluaXRpb25zIGFuZCBjb25zdGFudHMsIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi9zcmMvZWxlbWVudHMvbWVtb3JpZXMvY29uc3RhbnRzLnRzJyxcbiAgICByZWFzb246ICdDb25zdGFudHMgZmlsZSAtIGNvbnRhaW5zIG9ubHkgdHlwZSBkZWZpbml0aW9ucyBhbmQgY29uc3RhbnRzLCBubyB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovZWxlbWVudHMvbWVtb3JpZXMvY29uc3RhbnRzLnRzJyxcbiAgICByZWFzb246ICdDb25zdGFudHMgZmlsZSAtIENJIGVudmlyb25tZW50cyBtYXkgaGF2ZSBkaWZmZXJlbnQgcGF0aCBzdHJ1Y3R1cmVzLCBubyB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnZWxlbWVudHMvbWVtb3JpZXMvY29uc3RhbnRzLnRzJyxcbiAgICByZWFzb246ICdDb25zdGFudHMgZmlsZSAtIGhhbmRsZXMgY2FzZSB3aGVyZSBzcmMvIHByZWZpeCBpcyBzdHJpcHBlZCwgbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9lbGVtZW50cy9tZW1vcmllcy91dGlscy50cycsXG4gICAgcmVhc29uOiAnTWVtb3J5IHV0aWxpdGllcyAtIGFsbCBleHRlcm5hbCBpbnB1dCBpcyBub3JtYWxpemVkIHZpYSBVbmljb2RlVmFsaWRhdG9yIGluIHRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi9zcmMvZWxlbWVudHMvbWVtb3JpZXMvdXRpbHMudHMnLFxuICAgIHJlYXNvbjogJ01lbW9yeSB1dGlsaXRpZXMgLSBhbGwgZXh0ZXJuYWwgaW5wdXQgaXMgbm9ybWFsaXplZCB2aWEgVW5pY29kZVZhbGlkYXRvciBpbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovZWxlbWVudHMvbWVtb3JpZXMvdXRpbHMudHMnLFxuICAgIHJlYXNvbjogJ01lbW9yeSB1dGlsaXRpZXMgLSBDSSBwYXRoIHZhcmlhbnQsIGFsbCBleHRlcm5hbCBpbnB1dCBpcyBub3JtYWxpemVkIHZpYSBVbmljb2RlVmFsaWRhdG9yJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ2VsZW1lbnRzL21lbW9yaWVzL3V0aWxzLnRzJyxcbiAgICByZWFzb246ICdNZW1vcnkgdXRpbGl0aWVzIC0gc3JjLXN0cmlwcGVkIHBhdGggdmFyaWFudCwgYWxsIGV4dGVybmFsIGlucHV0IGlzIG5vcm1hbGl6ZWQgdmlhIFVuaWNvZGVWYWxpZGF0b3InXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovbWVtb3JpZXMvKi50cycsXG4gICAgcmVhc29uOiAnTWVtb3J5IGVsZW1lbnQgZmlsZXMgLSBhbGwgdXNlciBpbnB1dCBpcyBwcm9wZXJseSBub3JtYWxpemVkIGluIE1lbW9yeS50cyBhbmQgTWVtb3J5TWFuYWdlci50cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvZWxlbWVudHMvbWVtb3JpZXMvKi50cycsXG4gICAgcmVhc29uOiAnTWVtb3J5IGVsZW1lbnQgZmlsZXMgLSBhbGwgdXNlciBpbnB1dCBpcyBwcm9wZXJseSBub3JtYWxpemVkIGluIE1lbW9yeS50cyBhbmQgTWVtb3J5TWFuYWdlci50cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdXRpbHMvdmVyc2lvbi50cycsXG4gICAgcmVhc29uOiAnVmVyc2lvbiB1dGlsaXR5IG9ubHkgaGFuZGxlcyBpbnRlcm5hbCB2ZXJzaW9uIHN0cmluZ3MsIG5vdCB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jYWNoZS8qLnRzJyxcbiAgICByZWFzb246ICdDYWNoZSBsYXllciByZWNlaXZlcyBhbHJlYWR5LW5vcm1hbGl6ZWQgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5LyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1NlY3VyaXR5IG1vZHVsZXMgaGFuZGxlIHZhbGlkYXRpb24gYW5kIG5vcm1hbGl6YXRpb24gdGhlbXNlbHZlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvaW5kZXgudHMnLFxuICAgIHJlYXNvbjogJ01haW4gZW50cnkgcG9pbnQgZGVsZWdhdGVzIHRvIFNlcnZlclNldHVwIHdoaWNoIG5vcm1hbGl6ZXMgYWxsIGlucHV0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL1NlcnZlclNldHVwLnRzJyxcbiAgICByZWFzb246ICdUaGlzIGlzIHdoZXJlIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgYWxsIHRvb2wgaW5wdXRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9jb2xsZWN0aW9uLyoudHMnLFxuICAgIHJlYXNvbjogJ01hcmtldHBsYWNlIG1vZHVsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gdG9vbCBoYW5kbGVycydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qKi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKiovKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3VwZGF0ZS8qLnRzJyxcbiAgICByZWFzb246ICdVcGRhdGUgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy90b29scy8qLnRzJyxcbiAgICByZWFzb246ICdUb29sIGZpbGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIFNlcnZlclNldHVwJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlIGRvZXMgbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL3Rvb2xzLyoudHMnLFxuICAgIHJlYXNvbjogJ1NlcnZlciB0b29scyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSBTZXJ2ZXJTZXR1cCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzY3JpcHRzLyoqLyonLFxuICAgIHJlYXNvbjogJ0J1aWxkIGFuZCB1dGlsaXR5IHNjcmlwdHMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvcG9ydGZvbGlvL3R5cGVzLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZSBjb250YWluaW5nIG9ubHkgVHlwZVNjcmlwdCBpbnRlcmZhY2VzIC0gbm8gcnVudGltZSBjb2RlIG9yIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvKiovdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlcyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0IC0gY29tcGlsZS10aW1lIG9ubHknXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZpY2VzL0J1aWxkSW5mb1NlcnZpY2UudHMnLFxuICAgIHJlYXNvbjogJ0J1aWxkSW5mb1NlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChwYWNrYWdlLmpzb24sIGdpdCBjb21tYW5kcywgRG9ja2VyIHJ1bnRpbWUpIC0gdGhlIE1DUCB0b29sIHRha2VzIG5vIHBhcmFtZXRlcnMgYW5kIG5vIHVzZXIgaW5wdXQgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIudHMnLFxuICAgIHJlYXNvbjogJ1N5bmNIYW5kbGVyVjIgcmVjZWl2ZXMgYWxyZWFkeS1ub3JtYWxpemVkIGlucHV0IGZyb20gdGhlIE1DUCByZXF1ZXN0IGxheWVyLiBBbGwgdXNlciBpbnB1dCBpcyBub3JtYWxpemVkIGluIFNlcnZlclNldHVwIGJlZm9yZSByZWFjaGluZyBoYW5kbGVycy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIudHMnLFxuICAgIHJlYXNvbjogJ0NvbmZpZ0hhbmRsZXIgcmVjZWl2ZXMgYWxyZWFkeS1ub3JtYWxpemVkIGlucHV0IGZyb20gdGhlIE1DUCByZXF1ZXN0IGxheWVyLiBBbGwgdXNlciBpbnB1dCBpcyBub3JtYWxpemVkIGluIFNlcnZlclNldHVwIGJlZm9yZSByZWFjaGluZyBoYW5kbGVycy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAndGVzdC1zeW5jLW9wZXJhdGlvbnMuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBmaWxlIGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nLiBEb2VzIG5vdCBwcm9jZXNzIHByb2R1Y3Rpb24gdXNlciBpbnB1dC4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovdGVzdC1zeW5jLW9wZXJhdGlvbnMuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBmaWxlIGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nLiBEb2VzIG5vdCBwcm9jZXNzIHByb2R1Y3Rpb24gdXNlciBpbnB1dC4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAndGVzdC0qLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgZmlsZXMgaW4gcm9vdCBkaXJlY3RvcnkgZm9yIGRldmVsb3BtZW50IHRlc3RpbmcuIERvIG5vdCBwcm9jZXNzIHByb2R1Y3Rpb24gdXNlciBpbnB1dC4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAndGVzdC0qLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgZmlsZXMgaW4gcm9vdCBkaXJlY3RvcnkuIEF1ZGl0IGxvZ2dpbmcgbm90IHJlcXVpcmVkIGZvciBkZXZlbG9wbWVudCB0ZXN0IHNjcmlwdHMuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICd0ZXN0LSouanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBmaWxlcyB1c2luZyBzcGF3biB3aXRoIGFycmF5IGFyZ3VtZW50cyB3aGljaCBpcyBzYWZlIGZyb20gaW5qZWN0aW9uLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAnKiovdGVzdC1lbGVtZW50LWxpZmVjeWNsZS5qcycsXG4gICAgcmVhc29uOiAnRkFMU0UgUE9TSVRJVkU6IHNwYXduIHdpdGggYXJyYXkgYXJndW1lbnRzIGlzIHNhZmUgKG5vIHNoZWxsIGludm9jYXRpb24pLiBHaXRIdWIgdG9rZW4gcGFzc2VkIGFzIGFycmF5IGVsZW1lbnQsIG5vdCBjb25jYXRlbmF0ZWQgaW50byBjb21tYW5kIHN0cmluZy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovdGVzdC1lbGVtZW50LWxpZmVjeWNsZS5qcycsXG4gICAgcmVhc29uOiAnRkFMU0UgUE9TSVRJVkU6IFRlc3QgaGFybmVzcyB3aXRoIG5vIHVzZXIgaW5wdXQgbWVjaGFuaXNtcy4gQWxsIGRhdGEgaXMgaGFyZGNvZGVkIHRlc3Qgc2NlbmFyaW9zIG9yIGVudmlyb25tZW50IHZhcmlhYmxlcy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMicsXG4gICAgZmlsZTogJ3Rlc3QtZnVsbC12YWxpZGF0aW9uLmpzJyxcbiAgICByZWFzb246ICdGQUxTRSBQT1NJVElWRTogc3Bhd24gd2l0aCBhcnJheSBhcmd1bWVudHMgaXMgc2FmZS4gRG9ja2VyIGNvbW1hbmQgdXNlcyBhcnJheSBhcmdzIHByZXZlbnRpbmcgc2hlbGwgaW5qZWN0aW9uLiBMaW5lIDM3Mi4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMicsXG4gICAgZmlsZTogJyoqL3Rlc3QtZnVsbC12YWxpZGF0aW9uLmpzJyxcbiAgICByZWFzb246ICdGQUxTRSBQT1NJVElWRTogc3Bhd24gd2l0aCBhcnJheSBhcmd1bWVudHMgaXMgc2FmZS4gRG9ja2VyIGNvbW1hbmQgdXNlcyBhcnJheSBhcmdzIHByZXZlbnRpbmcgc2hlbGwgaW5qZWN0aW9uLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICd0ZXN0LWZ1bGwtdmFsaWRhdGlvbi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB2YWxpZGF0aW9uIHNjcmlwdCAtIG5vdCBwcm9kdWN0aW9uIGNvZGUuIE5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZywgb25seSB0ZXN0IHNjZW5hcmlvcy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovdGVzdC1mdWxsLXZhbGlkYXRpb24uanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdmFsaWRhdGlvbiBzY3JpcHQgLSBub3QgcHJvZHVjdGlvbiBjb2RlLiBObyB1c2VyIGlucHV0IHByb2Nlc3NpbmcsIG9ubHkgdGVzdCBzY2VuYXJpb3MuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3Rlc3QtdmVyc2lvbi12YWxpZGF0aW9uLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgc2NyaXB0IC0gbm90IHByb2R1Y3Rpb24gY29kZS4gQXVkaXQgbG9nZ2luZyBub3QgcmVxdWlyZWQgZm9yIHRlc3QgdXRpbGl0aWVzLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICcqKi90ZXN0LXZlcnNpb24tdmFsaWRhdGlvbi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXR5IHNjcmlwdCAtIG5vdCBwcm9kdWN0aW9uIGNvZGUuIEF1ZGl0IGxvZ2dpbmcgbm90IHJlcXVpcmVkIGZvciB0ZXN0IHV0aWxpdGllcy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAndGVzdC1tZW1vcnktZGVsZXRpb24uanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSAtIE5vIHVzZXIgaW5wdXQgcHJvY2Vzc2VkLCBhbGwgdGVzdCBkYXRhIGlzIGludGVybmFsbHkgZ2VuZXJhdGVkJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL3Rlc3QtbWVtb3J5LWRlbGV0aW9uLmpzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGUgLSBObyB1c2VyIGlucHV0IHByb2Nlc3NlZCwgYWxsIHRlc3QgZGF0YSBpcyBpbnRlcm5hbGx5IGdlbmVyYXRlZCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICd0ZXN0LW1lbW9yeS1kZWxldGlvbi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlIC0gQXVkaXQgbG9nZ2luZyBoYXBwZW5zIGluIHRoZSBzZXJ2ZXIgZGVsZXRlRWxlbWVudCBtZXRob2QsIG5vdCBpbiB0ZXN0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJyoqL3Rlc3QtbWVtb3J5LWRlbGV0aW9uLmpzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGUgLSBBdWRpdCBsb2dnaW5nIGhhcHBlbnMgaW4gdGhlIHNlcnZlciBkZWxldGVFbGVtZW50IG1ldGhvZCwgbm90IGluIHRlc3QnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnQ1dFLTg5LTAwMScsXG4gICAgZmlsZTogJ3Rlc3QtbWVtb3J5LWRlbGV0aW9uLmpzJyxcbiAgICByZWFzb246ICdGYWxzZSBwb3NpdGl2ZSAtIFRlbXBsYXRlIGxpdGVyYWxzIGluIGVycm9yIG1lc3NhZ2VzIGFyZSBub3QgU1FMIHF1ZXJpZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnQ1dFLTg5LTAwMScsXG4gICAgZmlsZTogJyoqL3Rlc3QtbWVtb3J5LWRlbGV0aW9uLmpzJyxcbiAgICByZWFzb246ICdGYWxzZSBwb3NpdGl2ZSAtIFRlbXBsYXRlIGxpdGVyYWxzIGluIGVycm9yIG1lc3NhZ2VzIGFyZSBub3QgU1FMIHF1ZXJpZXMnXG4gIH0sXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBdWRpdCBMb2dnaW5nIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzLyoudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlcyBkbyBub3QgcGVyZm9ybSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy90eXBlcy9lbGVtZW50cy8qLnRzJyxcbiAgICByZWFzb246ICdFbGVtZW50IGludGVyZmFjZSBmaWxlcyBhcmUgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbnN0YW50cy8qLnRzJyxcbiAgICByZWFzb246ICdDb25zdGFudCBmaWxlcyBkbyBub3QgcGVyZm9ybSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9jb25maWcvKi50cycsXG4gICAgcmVhc29uOiAnQ29uZmlndXJhdGlvbiBmaWxlcyBkbyBub3QgcGVyZm9ybSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9lcnJvcnMvKi50cycsXG4gICAgcmVhc29uOiAnRXJyb3IgY2xhc3NlcyBhcmUgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMgcmVxdWlyaW5nIGF1ZGl0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJyoqLyouanNvbicsXG4gICAgcmVhc29uOiAnSlNPTiBmaWxlcyBjYW5ub3QgY29udGFpbiBleGVjdXRhYmxlIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5LyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1NlY3VyaXR5IG1vZHVsZXMgYXJlIGluZnJhc3RydWN0dXJlLCBub3Qgb3BlcmF0aW9ucyByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbGxlY3Rpb24vKi50cycsXG4gICAgcmVhc29uOiAnTWFya2V0cGxhY2Ugb3BlcmF0aW9ucyBhcmUgbm90IHNlY3VyaXR5LXNlbnNpdGl2ZSByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbGxlY3Rpb24vKiovKi50cycsXG4gICAgcmVhc29uOiAnTWFya2V0cGxhY2Ugb3BlcmF0aW9ucyBhcmUgbm90IHNlY3VyaXR5LXNlbnNpdGl2ZSByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBvcGVyYXRpb25zIGFyZSB2YWxpZGF0ZWQgYXQgZW50cnkgcG9pbnQsIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmEgb3BlcmF0aW9ucyBhcmUgdmFsaWRhdGVkIGF0IGVudHJ5IHBvaW50LCBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL3Rvb2xzLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1Rvb2wgaW1wbGVtZW50YXRpb25zIGRlbGVnYXRlIHRvIHNlcnZpY2VzIHRoYXQgaGFuZGxlIHNlY3VyaXR5J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9pbmRleC50cycsXG4gICAgcmVhc29uOiAnTWFpbiBlbnRyeSBwb2ludCBkZWxlZ2F0ZXMgc2VjdXJpdHkgb3BlcmF0aW9ucyB0byBzcGVjaWFsaXplZCBtb2R1bGVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy91dGlscy8qLnRzJyxcbiAgICByZWFzb246ICdVdGlsaXR5IGZ1bmN0aW9ucyBhcmUgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMgcmVxdWlyaW5nIGF1ZGl0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy91cGRhdGUvKiovKi50cycsXG4gICAgcmVhc29uOiAnVXBkYXRlIHN5c3RlbSBoYXMgaXRzIG93biBsb2dnaW5nIGFuZCBpcyBub3QgYSBkaXJlY3Qgc2VjdXJpdHkgb3BlcmF0aW9uJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlIGRvZXMgbm90IHBlcmZvcm0gb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzY3JpcHRzLyoqLyonLFxuICAgIHJlYXNvbjogJ0J1aWxkIHNjcmlwdHMgZG8gbm90IHBlcmZvcm0gcnVudGltZSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9wb3J0Zm9saW8vUG9ydGZvbGlvU3luY01hbmFnZXIudHMnLFxuICAgIHJlYXNvbjogJ1BvcnRmb2xpbyBzeW5jIG9wZXJhdGlvbnMgYXJlIGZpbGUgbWFuYWdlbWVudCB0YXNrcywgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMuIFNlY3VyaXR5IHZhbGlkYXRpb24gaGFwcGVucyBhdCB0aGUgTUNQIHJlcXVlc3QgbGF5ZXIuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9oYW5kbGVycy9TeW5jSGFuZGxlclYyLnRzJyxcbiAgICByZWFzb246ICdTeW5jIGhhbmRsZXIgZGVsZWdhdGVzIHRvIFBvcnRmb2xpb1N5bmNNYW5hZ2VyIHdoaWNoIGhhbmRsZXMgaXRzIG93biBsb2dnaW5nLiBTZWN1cml0eSB2YWxpZGF0aW9uIGhhcHBlbnMgYXQgdGhlIE1DUCByZXF1ZXN0IGxheWVyLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvaGFuZGxlcnMvQ29uZmlnSGFuZGxlci50cycsXG4gICAgcmVhc29uOiAnQ29uZmlnIGhhbmRsZXIgb3BlcmF0aW9ucyBhcmUgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50LCBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucy4gQ29uZmlnTWFuYWdlciBoYW5kbGVzIGl0cyBvd24gbG9nZ2luZy4nXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENvdmVyYWdlIFJlcG9ydCBGaWxlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ3Rlc3QvY292ZXJhZ2UvKiovKicsXG4gICAgcmVhc29uOiAnQ292ZXJhZ2UgcmVwb3J0IGZpbGVzIGFyZSBhdXRvLWdlbmVyYXRlZCBhbmQgbm90IHBhcnQgb2YgdGhlIGFwcGxpY2F0aW9uIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqL2xjb3YtcmVwb3J0LyoqLyonLFxuICAgIHJlYXNvbjogJ0xDT1YgY292ZXJhZ2UgcmVwb3J0IGZpbGVzIGFyZSBhdXRvLWdlbmVyYXRlZCBhbmQgbm90IHBhcnQgb2YgdGhlIGFwcGxpY2F0aW9uIGNvZGUnXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERvY3VtZW50YXRpb24gYW5kIE5vbi1Db2RlIEZpbGVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnZG9jcy8qKi8qJyxcbiAgICByZWFzb246ICdEb2N1bWVudGF0aW9uIGZpbGVzIGluY2x1ZGluZyBRQSBtZXRyaWNzIGFuZCByZXBvcnRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLm1kJyxcbiAgICByZWFzb246ICdNYXJrZG93biBkb2N1bWVudGF0aW9uIGZpbGVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLmpzb24nLFxuICAgIHJlYXNvbjogJ0pTT04gY29uZmlndXJhdGlvbiBhbmQgZGF0YSBmaWxlcyBkbyBub3QgZXhlY3V0ZSBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICdMSUNFTlNFJyxcbiAgICByZWFzb246ICdMaWNlbnNlIGZpbGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJy5naXRpZ25vcmUnLFxuICAgIHJlYXNvbjogJ0dpdCBjb25maWd1cmF0aW9uIGZpbGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ3BhY2thZ2UtbG9jay5qc29uJyxcbiAgICByZWFzb246ICdOUE0gbG9jayBmaWxlIC0gYXV0by1nZW5lcmF0ZWQsIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi55bWwnLFxuICAgIHJlYXNvbjogJ1lBTUwgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgZGF0YSwgbm90IGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyoueWFtbCcsXG4gICAgcmVhc29uOiAnWUFNTCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBkYXRhLCBub3QgY29kZSdcbiAgfSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlcHRlbWJlciAyMiBTZXNzaW9uIERvY3MgUmVzdG9yYXRpb24gLSBQUiAjMTA4MlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMicsXG4gICAgZmlsZTogJ3NjcmlwdHMvdGVzdC1jYXBhYmlsaXR5LWluZGV4LmpzJyxcbiAgICByZWFzb246ICdUZXN0IHNjcmlwdCB1c2luZyBzcGF3biB3aXRoIGhhcmRjb2RlZCBhcnJheSBhcmd1bWVudHMgLSBubyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICcqKi9zY3JpcHRzL3Rlc3QtY2FwYWJpbGl0eS1pbmRleC5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBzY3JpcHQgdXNpbmcgc3Bhd24gd2l0aCBoYXJkY29kZWQgYXJyYXkgYXJndW1lbnRzIC0gbm8gdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAndGVzdC9leHBlcmltZW50cy9jYXBhYmlsaXR5LWluZGV4LWNvbXByZWhlbnNpdmUtdGVzdC5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlIHVzaW5nIHNwYXduIHdpdGggaGFyZGNvZGVkIGFycmF5IGFyZ3VtZW50cyAtIG5vIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMicsXG4gICAgZmlsZTogJyoqL3Rlc3QvZXhwZXJpbWVudHMvY2FwYWJpbGl0eS1pbmRleC1jb21wcmVoZW5zaXZlLXRlc3QuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSB1c2luZyBzcGF3biB3aXRoIGhhcmRjb2RlZCBhcnJheSBhcmd1bWVudHMgLSBubyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwMycsXG4gICAgZmlsZTogJ3NjcmlwdHMvdGVzdC1jYXBhYmlsaXR5LWluZGV4LmpzJyxcbiAgICByZWFzb246ICdUZXN0IHNjcmlwdCB3aXRoIGhhcmRjb2RlZCB0ZXN0IHBlcnNvbmEgcGF0aHMgLSBub3QgcHJvZHVjdGlvbiBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwMycsXG4gICAgZmlsZTogJyoqL3NjcmlwdHMvdGVzdC1jYXBhYmlsaXR5LWluZGV4LmpzJyxcbiAgICByZWFzb246ICdUZXN0IHNjcmlwdCB3aXRoIGhhcmRjb2RlZCB0ZXN0IHBlcnNvbmEgcGF0aHMgLSBub3QgcHJvZHVjdGlvbiBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0NXRS0yMi0wMDEnLFxuICAgIGZpbGU6ICd0ZXN0L2V4cGVyaW1lbnRzL2NhcGFiaWxpdHktaW5kZXgtZG9ja2VyLXRlc3QuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSB1c2luZyBoYXJkY29kZWQgdGVzdCBwYXRocyAtIG5vIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnQ1dFLTIyLTAwMScsXG4gICAgZmlsZTogJyoqL3Rlc3QvZXhwZXJpbWVudHMvY2FwYWJpbGl0eS1pbmRleC1kb2NrZXItdGVzdC5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlIHVzaW5nIGhhcmRjb2RlZCB0ZXN0IHBhdGhzIC0gbm8gdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICd0ZXN0LW1lbW9yeS1lZGl0LmpzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGUgZm9yIG1lbW9yeSBlZGl0aW5nIC0gbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL3Rlc3QtbWVtb3J5LWVkaXQuanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZSBmb3IgbWVtb3J5IGVkaXRpbmcgLSBubyB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG5cbiAgLy8gQWRkaXRpb25hbCBzdXBwcmVzc2lvbnMgZm9yIHJlbWFpbmluZyBpc3N1ZXNcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAndGVzdC9leHBlcmltZW50cy9jYXBhYmlsaXR5LWluZGV4LWRvY2tlci10ZXN0LmpzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGUgdXNpbmcgc3Bhd24gd2l0aCBoYXJkY29kZWQgYXJyYXkgYXJndW1lbnRzIGF0IGxpbmUgMjc5IC0gbm8gdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAnKiovdGVzdC9leHBlcmltZW50cy9jYXBhYmlsaXR5LWluZGV4LWRvY2tlci10ZXN0LmpzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGUgdXNpbmcgc3Bhd24gd2l0aCBoYXJkY29kZWQgYXJyYXkgYXJndW1lbnRzIGF0IGxpbmUgMjc5IC0gbm8gdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDEnLFxuICAgIGZpbGU6ICdzY3JpcHRzL3Rlc3QtY2FwYWJpbGl0eS1pbmRleC5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBzY3JpcHQgbG9hZGluZyB0ZXN0IHBlcnNvbmFzIHdpdGggaGFyZGNvZGVkIHBhdGhzIC0gbm90IHByb2R1Y3Rpb24gY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDEnLFxuICAgIGZpbGU6ICcqKi9zY3JpcHRzL3Rlc3QtY2FwYWJpbGl0eS1pbmRleC5qcycsXG4gICAgcmVhc29uOiAnVGVzdCBzY3JpcHQgbG9hZGluZyB0ZXN0IHBlcnNvbmFzIHdpdGggaGFyZGNvZGVkIHBhdGhzIC0gbm90IHByb2R1Y3Rpb24gY29kZSdcbiAgfVxuXTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBzdXBwcmVzc2lvbiBjb25maWd1cmF0aW9uIGF0IHN0YXJ0dXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU3VwcHJlc3Npb25zKCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzZWVuUGF0dGVybnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgXG4gIGZvciAoY29uc3Qgc3VwcHJlc3Npb24gb2Ygc3VwcHJlc3Npb25zKSB7XG4gICAgLy8gQ2hlY2sgZm9yIGVtcHR5IHJlYXNvbnNcbiAgICBpZiAoIXN1cHByZXNzaW9uLnJlYXNvbiB8fCBzdXBwcmVzc2lvbi5yZWFzb24udHJpbSgpLmxlbmd0aCA8IDEwKSB7XG4gICAgICBlcnJvcnMucHVzaChgU3VwcHJlc3Npb24gZm9yICR7c3VwcHJlc3Npb24ucnVsZX0gaGFzIGluc3VmZmljaWVudCByZWFzb25gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHZhbGlkIHJ1bGUgcGF0dGVybnNcbiAgICBjb25zdCBydWxlUGF0dGVybiA9IC9eKERNQ1AtU0VDLVxcZHszfXxPV0FTUC1bQS1aXVxcZHsyfS1cXGR7M318Q1dFLVxcZCstXFxkezN9fFxcKikkLztcbiAgICBpZiAoIXN1cHByZXNzaW9uLnJ1bGUubWF0Y2gocnVsZVBhdHRlcm4pKSB7XG4gICAgICBlcnJvcnMucHVzaChgSW52YWxpZCBydWxlIHBhdHRlcm46ICR7c3VwcHJlc3Npb24ucnVsZX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBzdXBwcmVzc2lvbnNcbiAgICBjb25zdCBrZXkgPSBgJHtzdXBwcmVzc2lvbi5ydWxlfToke3N1cHByZXNzaW9uLmZpbGUgfHwgJyonfWA7XG4gICAgaWYgKHNlZW5QYXR0ZXJucy5oYXMoa2V5KSkge1xuICAgICAgZXJyb3JzLnB1c2goYER1cGxpY2F0ZSBzdXBwcmVzc2lvbjogJHtrZXl9YCk7XG4gICAgfVxuICAgIHNlZW5QYXR0ZXJucy5hZGQoa2V5KTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBnbG9iIHBhdHRlcm5zXG4gICAgaWYgKHN1cHByZXNzaW9uLmZpbGU/LmluY2x1ZGVzKCcqKicpICYmICFzdXBwcmVzc2lvbi5maWxlLmluY2x1ZGVzKCcqKi8nKSkge1xuICAgICAgZXJyb3JzLnB1c2goYEludmFsaWQgZ2xvYiBwYXR0ZXJuIGluICR7c3VwcHJlc3Npb24uZmlsZX0gLSAqKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IC9gKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogQ29udmVydCBnbG9iIHBhdHRlcm4gdG8gcmVnZXggcGF0dGVybiBzYWZlbHlcbiAqIFVzaW5nIGEgcHJvcGVyIGdsb2ItdG8tcmVnZXggY29udmVyc2lvbiB0aGF0IGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXNcbiAqL1xuZnVuY3Rpb24gZ2xvYlRvUmVnZXgoZ2xvYjogc3RyaW5nKTogUmVnRXhwIHtcbiAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0UmVnZXgoZ2xvYik7XG4gIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gIFxuICAvLyBTcGVjaWFsIGNhc2U6IGlmIGdsb2Igc3RhcnRzIHdpdGggKiwgaXQgc2hvdWxkIG1hdGNoIGFueXRoaW5nIGF0IHRoZSBiZWdpbm5pbmdcbiAgbGV0IHByb2Nlc3NlZEdsb2IgPSBnbG9iO1xuICBsZXQgcHJlZml4ID0gJyc7XG4gIGlmIChnbG9iLnN0YXJ0c1dpdGgoJyonKSAmJiAhZ2xvYi5zdGFydHNXaXRoKCcqKicpKSB7XG4gICAgcHJlZml4ID0gJyg/Oi4qLyk/JzsgIC8vIE9wdGlvbmFsIHBhdGggcHJlZml4XG4gICAgcHJvY2Vzc2VkR2xvYiA9IGdsb2Iuc3Vic3RyaW5nKDEpO1xuICB9XG4gIFxuICAvLyBFc2NhcGUgYWxsIHJlZ2V4IHNwZWNpYWwgY2hhcmFjdGVycyBleGNlcHQgKiBhbmQgL1xuICAvLyBGaXhlZDogUHJvcGVybHkgZXNjYXBlIGJhY2tzbGFzaGVzIGFuZCBvdGhlciBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnNcbiAgbGV0IHBhdHRlcm4gPSBwcm9jZXNzZWRHbG9iLnJlcGxhY2VBbGwoL1tcXFxcXiQuKCkrP3t9W1xcXXxdL2csICdcXFxcJCYnKTtcblxuICAvLyBIYW5kbGUgZ2xvYiBwYXR0ZXJucyBpbiBjb3JyZWN0IG9yZGVyXG4gIC8vIFJlcGxhY2UgKiogYmVmb3JlICogdG8gYXZvaWQgY29uZmxpY3RzXG4gIHBhdHRlcm4gPSBwYXR0ZXJuXG4gICAgLnJlcGxhY2VBbGwoJyoqJywgJzw8R0xPQlNUQVI+PicpICAgICAvLyBUZW1wb3JhcnkgcGxhY2Vob2xkZXIgZm9yICoqXG4gICAgLnJlcGxhY2VBbGwoJyonLCAnPDxTVEFSPj4nKSAgICAgICAgICAgIC8vIFRlbXBvcmFyeSBwbGFjZWhvbGRlciBmb3IgKlxuICAgIC5yZXBsYWNlQWxsKCc8PEdMT0JTVEFSPj4vJywgJyg/Oi4qLyk/JykgLy8gKiovIG1hdGNoZXMgYW55IG51bWJlciBvZiBkaXJlY3RvcmllcyBpbmNsdWRpbmcgbm9uZVxuICAgIC5yZXBsYWNlQWxsKCc8PEdMT0JTVEFSPj4nLCAnLionKSAgICAgICAvLyAqKiBtYXRjaGVzIGFueXRoaW5nXG4gICAgLnJlcGxhY2VBbGwoJzw8U1RBUj4+JywgJ1teL10qJykgICAgICAgIC8vICogbWF0Y2hlcyBhbnl0aGluZyBleGNlcHQgZGlyZWN0b3J5IHNlcGFyYXRvclxuICAgIC5yZXBsYWNlQWxsKCcvJywgJ1xcXFwvJyk7ICAgICAgICAgICAgICAgIC8vIEVzY2FwZSBmb3J3YXJkIHNsYXNoZXNcbiAgXG4gIC8vIENvbWJpbmUgcHJlZml4IGFuZCBwYXR0ZXJuXG4gIGNvbnN0IGZ1bGxQYXR0ZXJuID0gcHJlZml4ICsgcGF0dGVybjtcbiAgXG4gIC8vIEFkZCBhbmNob3JzIHRvIGVuc3VyZSBmdWxsIHBhdGggbWF0Y2hcbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtmdWxsUGF0dGVybn0kYCk7XG4gIFxuICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgcmVnZXhcbiAgY2FjaGUuc2V0UmVnZXgoZ2xvYiwgcmVnZXgpO1xuICBcbiAgcmV0dXJuIHJlZ2V4O1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBmaWxlIHBhdGggZm9yIGNvbnNpc3RlbnQgbWF0Y2hpbmdcbiAqIEhhbmRsZXMgYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgcGF0aHMgYWNyb3NzIGRpZmZlcmVudCBwbGF0Zm9ybXNcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMgZm9yIFdpbmRvd3MgcGF0aHNcbiAgbGV0IG5vcm1hbGl6ZWQgPSBmaWxlUGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcblxuICAvLyBSZW1vdmUgZHVwbGljYXRlIHNsYXNoZXNcbiAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQucmVwbGFjZUFsbCgvXFwvKy9nLCAnLycpO1xuICBcbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIHByZXNlbnRcbiAgaWYgKG5vcm1hbGl6ZWQuZW5kc1dpdGgoJy8nKSAmJiBub3JtYWxpemVkLmxlbmd0aCA+IDEpIHtcbiAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zbGljZSgwLCAtMSk7XG4gIH1cbiAgXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgcmVsYXRpdmUgcGF0aCBmcm9tIGFic29sdXRlIHBhdGhcbiAqIEhhbmRsZXMgdmFyaW91cyBDSS9DRCBhbmQgbG9jYWwgZGV2ZWxvcG1lbnQgcGF0aCBmb3JtYXRzXG4gKi9cbmZ1bmN0aW9uIGdldFJlbGF0aXZlUGF0aChhYnNvbHV0ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGFic29sdXRlUGF0aCk7XG4gIFxuICAvLyBJZiBhbHJlYWR5IGEgcmVsYXRpdmUgcGF0aCwgcmV0dXJuIGFzLWlzXG4gIGlmICghbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvJykgJiYgIW5vcm1hbGl6ZWQubWF0Y2goL15bQS1aXTovaSkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuICBcbiAgLy8gRGVmaW5lIGNvbW1vbiBwcm9qZWN0IHNvdXJjZSBkaXJlY3Rvcmllc1xuICBjb25zdCBwcm9qZWN0RGlycyA9IFsnc3JjLycsICdfX3Rlc3RzX18vJywgJ3NjcmlwdHMvJywgJ2RvY3MvJywgJ3Rlc3QvJywgJ3Rlc3RzLycsICdsaWIvJ107XG4gIFxuICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiBjb21tb24gcHJvamVjdCBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aFxuICBsZXQgYmVzdE1hdGNoID0geyBpbmRleDogLTEsIGRpcjogJycsIHJlbGF0aXZlUGF0aDogJycgfTtcbiAgXG4gIGZvciAoY29uc3QgZGlyIG9mIHByb2plY3REaXJzKSB7XG4gICAgLy8gTG9vayBmb3IgL2RpciBwYXR0ZXJuICh3aXRoIGxlYWRpbmcgc2xhc2ggdG8gYXZvaWQgZmFsc2UgbWF0Y2hlcylcbiAgICBjb25zdCBzZWFyY2hQYXR0ZXJuID0gYC8ke2Rpcn1gO1xuICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplZC5sYXN0SW5kZXhPZihzZWFyY2hQYXR0ZXJuKTtcbiAgICBcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgLy8gRXh0cmFjdCBldmVyeXRoaW5nIGFmdGVyIHRoZSBwYXJlbnQgb2YgdGhpcyBkaXJlY3RvcnlcbiAgICAgIC8vIEZvciBleGFtcGxlOiAvaG9tZS91c2VyL3Byb2plY3Qvc3JjL2ZpbGUudHMgLT4gc3JjL2ZpbGUudHNcbiAgICAgIGNvbnN0IGRpclN0YXJ0SW5kZXggPSBpbmRleCArIDE7IC8vIFNraXAgdGhlIGxlYWRpbmcgc2xhc2hcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKGRpclN0YXJ0SW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBWZXJpZnkgdGhpcyBsb29rcyBsaWtlIGEgdmFsaWQgcHJvamVjdCBmaWxlXG4gICAgICBpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoZGlyKSAmJiByZWxhdGl2ZVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAvLyBLZWVwIHRoZSBtYXRjaCB0aGF0IGFwcGVhcnMgbGF0ZXN0IGluIHRoZSBwYXRoIChtb3N0IHNwZWNpZmljKVxuICAgICAgICBpZiAoaW5kZXggPiBiZXN0TWF0Y2guaW5kZXgpIHtcbiAgICAgICAgICBiZXN0TWF0Y2ggPSB7IGluZGV4LCBkaXIsIHJlbGF0aXZlUGF0aCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvLyBJZiB3ZSBmb3VuZCBhIG1hdGNoLCByZXR1cm4gaXRcbiAgaWYgKGJlc3RNYXRjaC5pbmRleCA+PSAwKSB7XG4gICAgcmV0dXJuIGJlc3RNYXRjaC5yZWxhdGl2ZVBhdGg7XG4gIH1cbiAgXG4gIC8vIEZhbGxiYWNrOiBUcnkgdG8gZmluZCBjb21tb24gZmlsZSBwYXR0ZXJucyB0aGF0IGluZGljYXRlIHByb2plY3QgZmlsZXNcbiAgY29uc3QgZmlsZVBhdHRlcm5zID0gW1xuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwuW2p0XXN4PyQvLFxuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwuanNvbiQvLFxuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwueWE/bWwkLyxcbiAgICAvXFwvcGFja2FnZVxcLmpzb24kLyxcbiAgICAvXFwvcGFja2FnZS1sb2NrXFwuanNvbiQvLFxuICAgIC9cXC90c2NvbmZpZy4qXFwuanNvbiQvLFxuICAgIC9cXC9cXC4uKnJjXFwuanNvbiQvICAvLyAuZXNsaW50cmMuanNvbiwgZXRjLlxuICBdO1xuICBcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGZpbGVQYXR0ZXJucykge1xuICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaChwYXR0ZXJuKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIEZpbmQgd2hlcmUgdGhlIG1hdGNoIHN0YXJ0cyBhbmQgZXh0cmFjdCBmcm9tIHRoZXJlXG4gICAgICBjb25zdCBtYXRjaEluZGV4ID0gbm9ybWFsaXplZC5pbmRleE9mKG1hdGNoWzBdKTtcbiAgICAgIGlmIChtYXRjaEluZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQuc3Vic3RyaW5nKG1hdGNoSW5kZXggKyAxKTsgLy8gU2tpcCBsZWFkaW5nIC9cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8vIExhc3QgcmVzb3J0OiBpZiBwYXRoIGNvbnRhaW5zIGNvbW1vbiBleHRlbnNpb25zLCB0cnkgdG8gZXh0cmFjdCBhIHJlYXNvbmFibGUgcmVsYXRpdmUgcGF0aFxuICBpZiAobm9ybWFsaXplZC5tYXRjaCgvXFwuKHRzfGpzfHRzeHxqc3h8anNvbnx5YW1sfHltbCkkLykpIHtcbiAgICAvLyBGaW5kIHRoZSBsYXN0IHNlZ21lbnQgdGhhdCBsb29rcyBsaWtlIGEgcHJvamVjdCBkaXJlY3RvcnlcbiAgICBjb25zdCBzZWdtZW50cyA9IG5vcm1hbGl6ZWQuc3BsaXQoJy8nKTtcbiAgICBmb3IgKGxldCBpID0gc2VnbWVudHMubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChwcm9qZWN0RGlycy5zb21lKGRpciA9PiBkaXIuc3RhcnRzV2l0aChzZWdtZW50c1tpXSkpKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50cy5zbGljZShpKS5qb2luKCcvJyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciByb290LWxldmVsIGZpbGVzIGxpa2UgcGFja2FnZS1sb2NrLmpzb24sIGp1c3QgcmV0dXJuIHRoZSBmaWxlbmFtZVxuICAgIGNvbnN0IGZpbGVuYW1lID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiBmaWxlbmFtZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFJldHVybiB0aGUgbm9ybWFsaXplZCBwYXRoIGlmIHdlIGNhbid0IGV4dHJhY3QgcmVsYXRpdmVcbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBmaW5kaW5nIHNob3VsZCBiZSBzdXBwcmVzc2VkXG4gKiBPcHRpbWl6ZWQgd2l0aCBjYWNoaW5nIGFuZCBlYXJseSByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRTdXBwcmVzcyhydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFmaWxlUGF0aCkgcmV0dXJuIGZhbHNlO1xuICBcbiAgLy8gTm9ybWFsaXplIHBhdGhzIGZvciBjb25zaXN0ZW50IG1hdGNoaW5nXG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChmaWxlUGF0aCk7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aChub3JtYWxpemVkUGF0aCk7XG4gIFxuICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQocnVsZUlkLCByZWxhdGl2ZVBhdGgpO1xuICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHJldHVybiBjYWNoZWQ7XG4gIFxuICAvLyBQcm9jZXNzIHN1cHByZXNzaW9ucyB3aXRoIGVhcmx5IHJldHVybnNcbiAgZm9yIChjb25zdCBzdXBwcmVzc2lvbiBvZiBzdXBwcmVzc2lvbnMpIHtcbiAgICAvLyBTa2lwIGlmIHJ1bGUgZG9lc24ndCBtYXRjaFxuICAgIGlmIChzdXBwcmVzc2lvbi5ydWxlICE9PSAnKicgJiYgc3VwcHJlc3Npb24ucnVsZSAhPT0gcnVsZUlkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIGdsb2JhbCBzdXBwcmVzc2lvbnMgKG5vIGZpbGUgc3BlY2lmaWVkKVxuICAgIGlmICghc3VwcHJlc3Npb24uZmlsZSkge1xuICAgICAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBleGFjdCBmaWxlIG1hdGNoIChtb3N0IGNvbW1vbiBjYXNlKVxuICAgIGlmIChzdXBwcmVzc2lvbi5maWxlID09PSByZWxhdGl2ZVBhdGggfHwgc3VwcHJlc3Npb24uZmlsZSA9PT0gbm9ybWFsaXplZFBhdGgpIHtcbiAgICAgIGNhY2hlLnNldChydWxlSWQsIHJlbGF0aXZlUGF0aCwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgcGF0dGVybiBtYXRjaCBvbmx5IGlmIGZpbGUgY29udGFpbnMgd2lsZGNhcmRzXG4gICAgaWYgKHN1cHByZXNzaW9uLmZpbGUuaW5jbHVkZXMoJyonKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBnbG9iVG9SZWdleChzdXBwcmVzc2lvbi5maWxlKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QocmVsYXRpdmVQYXRoKSB8fCByZWdleC50ZXN0KG5vcm1hbGl6ZWRQYXRoKSkge1xuICAgICAgICAgIGNhY2hlLnNldChydWxlSWQsIHJlbGF0aXZlUGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgSW52YWxpZCBzdXBwcmVzc2lvbiBwYXR0ZXJuIFwiJHtzdXBwcmVzc2lvbi5maWxlfVwiOmAsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8vIE5vdCBzdXBwcmVzc2VkXG4gIGNhY2hlLnNldChydWxlSWQsIHJlbGF0aXZlUGF0aCwgZmFsc2UpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2xlYXIgc3VwcHJlc3Npb24gY2FjaGUgKHVzZWZ1bCBmb3IgdGVzdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU3VwcHJlc3Npb25DYWNoZSgpOiB2b2lkIHtcbiAgY2FjaGUuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBHZXQgc3VwcHJlc3Npb24gc3RhdGlzdGljcyBmb3IgcmVwb3J0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdXBwcmVzc2lvblN0YXRzKCk6IHsgXG4gIHRvdGFsOiBudW1iZXI7IFxuICBieVJ1bGU6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIGJ5Q2F0ZWdvcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG59IHtcbiAgY29uc3Qgc3RhdHMgPSB7XG4gICAgdG90YWw6IHN1cHByZXNzaW9ucy5sZW5ndGgsXG4gICAgYnlSdWxlOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LFxuICAgIGJ5Q2F0ZWdvcnk6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj5cbiAgfTtcbiAgXG4gIGZvciAoY29uc3Qgc3VwcHJlc3Npb24gb2Ygc3VwcHJlc3Npb25zKSB7XG4gICAgLy8gQ291bnQgYnkgcnVsZVxuICAgIHN0YXRzLmJ5UnVsZVtzdXBwcmVzc2lvbi5ydWxlXSA9IChzdGF0cy5ieVJ1bGVbc3VwcHJlc3Npb24ucnVsZV0gfHwgMCkgKyAxO1xuICAgIFxuICAgIC8vIENvdW50IGJ5IGNhdGVnb3J5IChleHRyYWN0IGZyb20gcnVsZSBwcmVmaXgpXG4gICAgY29uc3QgY2F0ZWdvcnkgPSBzdXBwcmVzc2lvbi5ydWxlLnNwbGl0KCctJylbMF07XG4gICAgc3RhdHMuYnlDYXRlZ29yeVtjYXRlZ29yeV0gPSAoc3RhdHMuYnlDYXRlZ29yeVtjYXRlZ29yeV0gfHwgMCkgKyAxO1xuICB9XG4gIFxuICByZXR1cm4gc3RhdHM7XG59XG5cbi8vIFZhbGlkYXRlIHN1cHByZXNzaW9ucyBvbiBtb2R1bGUgbG9hZFxuY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IHZhbGlkYXRlU3VwcHJlc3Npb25zKCk7XG5pZiAodmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gIGxvZ2dlci53YXJuKCdTdXBwcmVzc2lvbiBjb25maWd1cmF0aW9uIHdhcm5pbmdzOicsIHZhbGlkYXRpb25FcnJvcnMpO1xufSJdfQ==
@@ -73,9 +73,9 @@ export class CommandValidator {
73
73
  }
74
74
  });
75
75
  proc.on('error', (error) => {
76
- complete(() => reject(error));
76
+ complete(() => reject(error instanceof Error ? error : new Error(String(error))));
77
77
  });
78
78
  });
79
79
  }
80
80
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb21tYW5kVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxNQUFNLGdCQUFnQixHQUE2QjtJQUNqRCx1REFBdUQ7SUFDdkQscUZBQXFGO0lBQ3JGLHVFQUF1RTtJQUN2RSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDO0lBQzFILEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDO0lBQzVELElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUNuQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7Q0FDbkIsQ0FBQztBQUVGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFXLEVBQUUsSUFBYztRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElB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Q0FBQyxDQUFDO2dCQUN6QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN6QixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduLCBTcGF3bk9wdGlvbnMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tICcuL3JlZ2V4VmFsaWRhdG9yLmpzJztcblxuY29uc3QgQUxMT1dFRF9DT01NQU5EUzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAvLyBTRUNVUklUWSBGSVg6IEFkZGVkICdjbG9uZScgY29tbWFuZCB0byBnaXQgYWxsb3dsaXN0XG4gIC8vIFByZXZpb3VzbHk6IG5wbSBpbnN0YWxsYXRpb24gZmVhdHVyZSB3b3VsZCBmYWlsIHdpdGggXCJBcmd1bWVudCBub3QgYWxsb3dlZDogY2xvbmVcIlxuICAvLyBOb3c6IGdpdCBjbG9uZSBjb21tYW5kIGlzIGFsbG93ZWQgZm9yIG5wbSBpbnN0YWxsYXRpb24gZnVuY3Rpb25hbGl0eVxuICBnaXQ6IFsncHVsbCcsICdzdGF0dXMnLCAnbG9nJywgJ3Jldi1wYXJzZScsICdicmFuY2gnLCAnY2hlY2tvdXQnLCAnZmV0Y2gnLCAnY2xvbmUnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnLCAnLS1wb3JjZWxhaW4nXSxcbiAgbnBtOiBbJ2luc3RhbGwnLCAncnVuJywgJ2F1ZGl0JywgJ2NpJywgJy0tdmVyc2lvbicsICdidWlsZCddLFxuICBub2RlOiBbJy0tdmVyc2lvbiddLFxuICBucHg6IFsnLS12ZXJzaW9uJ11cbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kVmFsaWRhdG9yIHtcbiAgc3RhdGljIHNhbml0aXplQ29tbWFuZChjbWQ6IHN0cmluZywgYXJnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIUFMTE9XRURfQ09NTUFORFNbY21kXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21tYW5kIG5vdCBhbGxvd2VkOiAke2NtZH1gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgYWxsb3dlZEFyZ3MgPSBBTExPV0VEX0NPTU1BTkRTW2NtZF07XG4gICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBpbiBhbGxvd2VkIGxpc3Qgb3IgbWF0Y2hlcyBzYWZlIHBhdHRlcm5cbiAgICAgIGlmICghYWxsb3dlZEFyZ3MuaW5jbHVkZXMoYXJnKSAmJiAhdGhpcy5pc1NhZmVBcmd1bWVudChhcmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJndW1lbnQgbm90IGFsbG93ZWQ6ICR7YXJnfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzU2FmZUFyZ3VtZW50KGFyZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gQWxsb3cgYWxwaGFudW1lcmljLCBkYXNoLCB1bmRlcnNjb3JlLCBkb3QsIGFuZCBmb3J3YXJkIHNsYXNoXG4gICAgcmV0dXJuIFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKGFyZywgL15bYS16QS1aMC05XFwtXy5cXC9dKyQvLCB7IG1heExlbmd0aDogMTAwMCB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzZWN1cmVFeGVjKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMuc2FuaXRpemVDb21tYW5kKGNvbW1hbmQsIGFyZ3MpO1xuICAgIFxuICAgIGNvbnN0IHNhZmVPcHRpb25zOiBTcGF3bk9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBQQVRIOiAnL3Vzci9iaW46L2JpbjovdXNyL2xvY2FsL2JpbicgLy8gUmVzdHJpY3QgUEFUSFxuICAgICAgfSxcbiAgICAgIGN3ZDogb3B0aW9ucz8uY3dkIHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICB0aW1lb3V0OiBvcHRpb25zPy50aW1lb3V0IHx8IDMwMDAwIC8vIDMwIHNlY29uZCBkZWZhdWx0XG4gICAgfTtcbiAgICBcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHNhZmVPcHRpb25zKTtcbiAgICAgIFxuICAgICAgbGV0IHN0ZG91dCA9ICcnO1xuICAgICAgbGV0IHN0ZGVyciA9ICcnO1xuICAgICAgbGV0IHRpbWVvdXRIYW5kbGU6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGlzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICBcbiAgICAgIC8vIEhlbHBlciB0byBzYWZlbHkgcmVzb2x2ZS9yZWplY3Qgb25seSBvbmNlXG4gICAgICBjb25zdCBjb21wbGV0ZSA9IChmbjogKCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICBpZiAoIWlzQ29tcGxldGVkKSB7XG4gICAgICAgICAgaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aW1lb3V0SGFuZGxlKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCkge1xuICAgICAgICB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcHJvYy5raWxsKCdTSUdURVJNJyk7XG4gICAgICAgICAgY29tcGxldGUoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtvcHRpb25zLnRpbWVvdXR9bXNgKSkpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgICB0aW1lb3V0SGFuZGxlLnVucmVmKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHByb2Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiBzdGRvdXQgKz0gZGF0YSk7XG4gICAgICBwcm9jLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YSkgPT4gc3RkZXJyICs9IGRhdGEpO1xuICAgICAgXG4gICAgICBwcm9jLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgICBjb21wbGV0ZSgoKSA9PiByZXNvbHZlKHN0ZG91dC50cmltKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wbGV0ZSgoKSA9PiByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIGZhaWxlZCAoJHtjb2RlfSk6ICR7c3RkZXJyfWApKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBwcm9jLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBjb21wbGV0ZSgoKSA9PiByZWplY3QoZXJyb3IpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59Il19
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb21tYW5kVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxNQUFNLGdCQUFnQixHQUE2QjtJQUNqRCx1REFBdUQ7SUFDdkQscUZBQXFGO0lBQ3JGLHVFQUF1RTtJQUN2RSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDO0lBQzFILEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDO0lBQzVELElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUNuQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7Q0FDbkIsQ0FBQztBQUVGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFXLEVBQUUsSUFBYztRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElB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Q0FBQyxDQUFDO2dCQUN6QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN6QixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgU3Bhd25PcHRpb25zIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yIH0gZnJvbSAnLi9yZWdleFZhbGlkYXRvci5qcyc7XG5cbmNvbnN0IEFMTE9XRURfQ09NTUFORFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgLy8gU0VDVVJJVFkgRklYOiBBZGRlZCAnY2xvbmUnIGNvbW1hbmQgdG8gZ2l0IGFsbG93bGlzdFxuICAvLyBQcmV2aW91c2x5OiBucG0gaW5zdGFsbGF0aW9uIGZlYXR1cmUgd291bGQgZmFpbCB3aXRoIFwiQXJndW1lbnQgbm90IGFsbG93ZWQ6IGNsb25lXCJcbiAgLy8gTm93OiBnaXQgY2xvbmUgY29tbWFuZCBpcyBhbGxvd2VkIGZvciBucG0gaW5zdGFsbGF0aW9uIGZ1bmN0aW9uYWxpdHlcbiAgZ2l0OiBbJ3B1bGwnLCAnc3RhdHVzJywgJ2xvZycsICdyZXYtcGFyc2UnLCAnYnJhbmNoJywgJ2NoZWNrb3V0JywgJ2ZldGNoJywgJ2Nsb25lJywgJy0tYWJicmV2LXJlZicsICdIRUFEJywgJy0tcG9yY2VsYWluJ10sXG4gIG5wbTogWydpbnN0YWxsJywgJ3J1bicsICdhdWRpdCcsICdjaScsICctLXZlcnNpb24nLCAnYnVpbGQnXSxcbiAgbm9kZTogWyctLXZlcnNpb24nXSxcbiAgbnB4OiBbJy0tdmVyc2lvbiddXG59O1xuXG5leHBvcnQgY2xhc3MgQ29tbWFuZFZhbGlkYXRvciB7XG4gIHN0YXRpYyBzYW5pdGl6ZUNvbW1hbmQoY21kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCFBTExPV0VEX0NPTU1BTkRTW2NtZF0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBub3QgYWxsb3dlZDogJHtjbWR9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGFsbG93ZWRBcmdzID0gQUxMT1dFRF9DT01NQU5EU1tjbWRdO1xuICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgaW4gYWxsb3dlZCBsaXN0IG9yIG1hdGNoZXMgc2FmZSBwYXR0ZXJuXG4gICAgICBpZiAoIWFsbG93ZWRBcmdzLmluY2x1ZGVzKGFyZykgJiYgIXRoaXMuaXNTYWZlQXJndW1lbnQoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFyZ3VtZW50IG5vdCBhbGxvd2VkOiAke2FyZ31gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1NhZmVBcmd1bWVudChhcmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIEFsbG93IGFscGhhbnVtZXJpYywgZGFzaCwgdW5kZXJzY29yZSwgZG90LCBhbmQgZm9yd2FyZCBzbGFzaFxuICAgIHJldHVybiBSZWdleFZhbGlkYXRvci52YWxpZGF0ZShhcmcsIC9eW2EtekEtWjAtOVxcLV8uXFwvXSskLywgeyBtYXhMZW5ndGg6IDEwMDAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgc2VjdXJlRXhlYyhjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aGlzLnNhbml0aXplQ29tbWFuZChjb21tYW5kLCBhcmdzKTtcbiAgICBcbiAgICBjb25zdCBzYWZlT3B0aW9uczogU3Bhd25PcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgUEFUSDogJy91c3IvYmluOi9iaW46L3Vzci9sb2NhbC9iaW4nIC8vIFJlc3RyaWN0IFBBVEhcbiAgICAgIH0sXG4gICAgICBjd2Q6IG9wdGlvbnM/LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgdGltZW91dDogb3B0aW9ucz8udGltZW91dCB8fCAzMDAwMCAvLyAzMCBzZWNvbmQgZGVmYXVsdFxuICAgIH07XG4gICAgXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCBzYWZlT3B0aW9ucyk7XG4gICAgICBcbiAgICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgIGxldCB0aW1lb3V0SGFuZGxlOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBpc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgXG4gICAgICAvLyBIZWxwZXIgdG8gc2FmZWx5IHJlc29sdmUvcmVqZWN0IG9ubHkgb25jZVxuICAgICAgY29uc3QgY29tcGxldGUgPSAoZm46ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgaWYgKCFpc0NvbXBsZXRlZCkge1xuICAgICAgICAgIGlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGltZW91dEhhbmRsZSkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQpIHtcbiAgICAgICAgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHByb2Mua2lsbCgnU0lHVEVSTScpO1xuICAgICAgICAgIGNvbXBsZXRlKCgpID0+IHJlamVjdChuZXcgRXJyb3IoYENvbW1hbmQgdGltZWQgb3V0IGFmdGVyICR7b3B0aW9ucy50aW1lb3V0fW1zYCkpKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgICAgdGltZW91dEhhbmRsZS51bnJlZigpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBwcm9jLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4gc3Rkb3V0ICs9IGRhdGEpO1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHN0ZGVyciArPSBkYXRhKTtcbiAgICAgIFxuICAgICAgcHJvYy5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgICAgY29tcGxldGUoKCkgPT4gcmVzb2x2ZShzdGRvdXQudHJpbSgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcGxldGUoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQgKCR7Y29kZX0pOiAke3N0ZGVycn1gKSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcHJvYy5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgY29tcGxldGUoKCkgPT4gcmVqZWN0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,123 @@
1
+ /**
2
+ * DOS Protection Utilities
3
+ *
4
+ * Centralized protection against Denial of Service attacks, particularly ReDoS
5
+ * (Regular Expression Denial of Service) vulnerabilities.
6
+ *
7
+ * SECURITY: This module provides comprehensive protection mechanisms for all
8
+ * regex operations in the codebase to prevent catastrophic backtracking.
9
+ */
10
+ export interface RegexExecutionOptions {
11
+ /**
12
+ * Maximum time allowed for regex execution (milliseconds)
13
+ * Default: 100ms for user input, 1000ms for system operations
14
+ */
15
+ timeout?: number;
16
+ /**
17
+ * Maximum input length to process
18
+ * Default: 10000 characters
19
+ */
20
+ maxLength?: number;
21
+ /**
22
+ * Whether to cache compiled regex patterns
23
+ * Default: true for static patterns, false for dynamic
24
+ */
25
+ cache?: boolean;
26
+ /**
27
+ * Context for logging/monitoring
28
+ */
29
+ context?: string;
30
+ }
31
+ /**
32
+ * Safe regex execution with timeout protection
33
+ * Prevents ReDoS attacks by limiting execution time
34
+ */
35
+ export declare class SafeRegex {
36
+ private static readonly patternCache;
37
+ /**
38
+ * Safely test a regex pattern against input with timeout protection
39
+ */
40
+ static test(pattern: string | RegExp, input: string, options?: RegexExecutionOptions): boolean;
41
+ /**
42
+ * Safely execute regex match with timeout protection
43
+ */
44
+ static match(input: string, pattern: string | RegExp, options?: RegexExecutionOptions): RegExpMatchArray | null;
45
+ /**
46
+ * Escape user input for safe use in regex patterns
47
+ * Prevents injection of regex special characters
48
+ */
49
+ static escape(input: string): string;
50
+ /**
51
+ * Convert glob pattern to safe regex pattern
52
+ * Prevents ReDoS from malicious glob patterns
53
+ */
54
+ static globToRegex(glob: string): RegExp | null;
55
+ /**
56
+ * Compile and validate a regex pattern
57
+ */
58
+ private static compilePattern;
59
+ /**
60
+ * Check for nested quantifiers in pattern
61
+ * Reviewer recommendation: Break down complex functions
62
+ */
63
+ private static hasNestedQuantifiers;
64
+ /**
65
+ * Check for complex alternation patterns that can cause backtracking
66
+ */
67
+ private static hasComplexAlternation;
68
+ /**
69
+ * Check if pattern complexity exceeds safe thresholds
70
+ */
71
+ private static exceedsComplexityThreshold;
72
+ /**
73
+ * Check if a regex pattern is potentially dangerous (ReDoS)
74
+ * Based on OWASP recommendations
75
+ * Refactored for clarity (Reviewer recommendation)
76
+ */
77
+ private static isDangerous;
78
+ /**
79
+ * Clear the pattern cache
80
+ */
81
+ static clearCache(): void;
82
+ }
83
+ /**
84
+ * DOS Protection middleware for various operations
85
+ */
86
+ export declare class DOSProtection {
87
+ /**
88
+ * Split with regex separator using SafeRegex protection
89
+ * Extracted to reduce cognitive complexity
90
+ */
91
+ private static splitWithRegex;
92
+ /**
93
+ * Split with string separator preserving remainder
94
+ * Extracted to reduce cognitive complexity
95
+ */
96
+ private static splitWithString;
97
+ /**
98
+ * Protect string split operations from ReDoS
99
+ * REFACTORED: Reduced cognitive complexity by extracting helpers
100
+ */
101
+ static safeSplit(input: string, separator: string | RegExp, limit?: number): string[];
102
+ /**
103
+ * Protect replace operations from ReDoS
104
+ */
105
+ static safeReplace(input: string, pattern: string | RegExp, replacement: string | ((match: string, ...args: any[]) => string)): string;
106
+ /**
107
+ * Rate limiting for expensive operations
108
+ */
109
+ private static readonly operationCounts;
110
+ private static resetInterval;
111
+ static rateLimit(operation: string, maxPerMinute?: number): boolean;
112
+ /**
113
+ * Cleanup resources
114
+ */
115
+ static cleanup(): void;
116
+ }
117
+ export declare const safeTest: typeof SafeRegex.test;
118
+ export declare const safeMatch: typeof SafeRegex.match;
119
+ export declare const escapeRegex: typeof SafeRegex.escape;
120
+ export declare const globToRegex: typeof SafeRegex.globToRegex;
121
+ export declare const safeSplit: typeof DOSProtection.safeSplit;
122
+ export declare const safeReplace: typeof DOSProtection.safeReplace;
123
+ //# sourceMappingURL=dosProtection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dosProtection.d.ts","sourceRoot":"","sources":["../../src/security/dosProtection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAEjE;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,qBAA0B,GAClC,OAAO;IA+CV;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,GAAE,qBAA0B,GAClC,gBAAgB,GAAG,IAAI;IAgD1B;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAUpC;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkC/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA8B7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA8BnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAWpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAQzC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAM1B;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;CAG1B;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAmC7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmC9B;;;OAGG;IACH,MAAM,CAAC,SAAS,CACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,EAAE;IAmBX;;OAEG;IACH,MAAM,CAAC,WAAW,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GAChE,MAAM;IA0BT;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA6B;IACpE,OAAO,CAAC,MAAM,CAAC,aAAa,CAA+B;IAE3D,MAAM,CAAC,SAAS,CACd,SAAS,EAAE,MAAM,EACjB,YAAY,GAAE,MAAY,GACzB,OAAO;IAgBV;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,IAAI;CAQvB;AAGD,eAAO,MAAM,QAAQ,uBAAiC,CAAC;AACvD,eAAO,MAAM,SAAS,wBAAkC,CAAC;AACzD,eAAO,MAAM,WAAW,yBAAmC,CAAC;AAC5D,eAAO,MAAM,WAAW,8BAAwC,CAAC;AACjE,eAAO,MAAM,SAAS,gCAA8C,CAAC;AACrE,eAAO,MAAM,WAAW,kCAAgD,CAAC"}