@dollhousemcp/mcp-server 2.0.11 → 2.0.12-rc.2

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 (93) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/config/ConfigManager.d.ts +34 -0
  3. package/dist/config/ConfigManager.d.ts.map +1 -1
  4. package/dist/config/ConfigManager.js +46 -1
  5. package/dist/config/env.d.ts +18 -0
  6. package/dist/config/env.d.ts.map +1 -1
  7. package/dist/config/env.js +89 -2
  8. package/dist/di/Container.d.ts +1 -0
  9. package/dist/di/Container.d.ts.map +1 -1
  10. package/dist/di/Container.js +38 -2
  11. package/dist/elements/agents/AgentManager.js +2 -2
  12. package/dist/generated/version.d.ts +2 -2
  13. package/dist/generated/version.d.ts.map +1 -1
  14. package/dist/generated/version.js +3 -3
  15. package/dist/handlers/mcp-aql/GatekeeperSession.d.ts.map +1 -1
  16. package/dist/handlers/mcp-aql/GatekeeperSession.js +3 -2
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +11 -3
  19. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  20. package/dist/handlers/mcp-aql/OperationSchema.js +11 -6
  21. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  22. package/dist/handlers/mcp-aql/policies/ToolClassification.js +8 -1
  23. package/dist/index.js +53 -3
  24. package/dist/security/InputNormalizer.d.ts +4 -6
  25. package/dist/security/InputNormalizer.d.ts.map +1 -1
  26. package/dist/security/InputNormalizer.js +10 -16
  27. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  28. package/dist/security/audit/config/suppressions.js +26 -1
  29. package/dist/security/constants.d.ts +7 -0
  30. package/dist/security/constants.d.ts.map +1 -1
  31. package/dist/security/constants.js +10 -1
  32. package/dist/security/contentValidator.d.ts.map +1 -1
  33. package/dist/security/contentValidator.js +14 -6
  34. package/dist/security/encryption/PatternEncryptor.d.ts.map +1 -1
  35. package/dist/security/encryption/PatternEncryptor.js +18 -10
  36. package/dist/security/securityMonitor.d.ts +1 -1
  37. package/dist/security/securityMonitor.d.ts.map +1 -1
  38. package/dist/security/securityMonitor.js +1 -1
  39. package/dist/security/tokenManager.d.ts +18 -2
  40. package/dist/security/tokenManager.d.ts.map +1 -1
  41. package/dist/security/tokenManager.js +47 -15
  42. package/dist/security/validators/unicodeValidator.d.ts +4 -5
  43. package/dist/security/validators/unicodeValidator.d.ts.map +1 -1
  44. package/dist/security/validators/unicodeValidator.js +19 -20
  45. package/dist/services/VerificationNotifier.d.ts.map +1 -1
  46. package/dist/services/VerificationNotifier.js +15 -13
  47. package/dist/services/validation/GenericElementValidator.js +5 -5
  48. package/dist/web/console/IngestRoutes.d.ts +14 -2
  49. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  50. package/dist/web/console/IngestRoutes.js +69 -5
  51. package/dist/web/console/LeaderElection.d.ts +37 -3
  52. package/dist/web/console/LeaderElection.d.ts.map +1 -1
  53. package/dist/web/console/LeaderElection.js +67 -7
  54. package/dist/web/console/LeaderForwardingSink.d.ts +19 -3
  55. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
  56. package/dist/web/console/LeaderForwardingSink.js +44 -9
  57. package/dist/web/console/PromotionManager.d.ts +29 -0
  58. package/dist/web/console/PromotionManager.d.ts.map +1 -0
  59. package/dist/web/console/PromotionManager.js +94 -0
  60. package/dist/web/console/SessionNames.d.ts +7 -0
  61. package/dist/web/console/SessionNames.d.ts.map +1 -1
  62. package/dist/web/console/SessionNames.js +10 -1
  63. package/dist/web/console/UnifiedConsole.d.ts +26 -1
  64. package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
  65. package/dist/web/console/UnifiedConsole.js +143 -20
  66. package/dist/web/portDiscovery.d.ts +4 -3
  67. package/dist/web/portDiscovery.d.ts.map +1 -1
  68. package/dist/web/portDiscovery.js +7 -5
  69. package/dist/web/public/app.js +35 -18
  70. package/dist/web/public/consoleAuth.js +152 -0
  71. package/dist/web/public/index.html +243 -9
  72. package/dist/web/public/logs.js +1 -1
  73. package/dist/web/public/metrics.js +3 -3
  74. package/dist/web/public/permissions.js +1 -1
  75. package/dist/web/public/security.css +396 -0
  76. package/dist/web/public/security.js +393 -0
  77. package/dist/web/public/sessions.css +54 -4
  78. package/dist/web/public/sessions.js +46 -6
  79. package/dist/web/public/setup.css +439 -0
  80. package/dist/web/public/setup.js +490 -18
  81. package/dist/web/public/styles.css +10 -0
  82. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  83. package/dist/web/routes/permissionRoutes.js +8 -3
  84. package/dist/web/routes/setupRoutes.d.ts +4 -0
  85. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  86. package/dist/web/routes/setupRoutes.js +418 -7
  87. package/dist/web/routes.d.ts.map +1 -1
  88. package/dist/web/routes.js +9 -5
  89. package/dist/web/server.d.ts +49 -3
  90. package/dist/web/server.d.ts.map +1 -1
  91. package/dist/web/server.js +282 -82
  92. package/package.json +11 -2
  93. package/server.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ToolClassification.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/ToolClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,aAAa,CAAC;IACzB,wFAAwF;IACxF,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;QAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC;AA0OD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,wBAAwB,CAsC1B;AAiHD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,wBAAwB,GACvC,cAAc,CA0ChB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;EAYlC;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,aAAa,EAAE,GAC9B,mBAAmB,CA2JrB"}
1
+ {"version":3,"file":"ToolClassification.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/ToolClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,aAAa,CAAC;IACzB,wFAAwF;IACxF,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;QAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC;AAiPD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,wBAAwB,CAsC1B;AAiHD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,wBAAwB,GACvC,cAAc,CA0ChB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;EAYlC;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,aAAa,EAAE,GAC9B,mBAAmB,CA2JrB"}
@@ -160,6 +160,13 @@ const DANGEROUS_BASH_PATTERNS = [
160
160
  'doas *',
161
161
  'su -*',
162
162
  'eval *',
163
+ // Inline interpreter execution (#1782) — arbitrary code via -c/-e flags
164
+ 'python -c *',
165
+ 'python3 -c *',
166
+ 'node -e *',
167
+ 'node --eval *',
168
+ 'perl -e *',
169
+ 'ruby -e *',
163
170
  // Pipe-to-shell patterns (with and without spaces, multiple shells)
164
171
  '*| sh',
165
172
  '*| sh *',
@@ -658,4 +665,4 @@ function buildMatchTargets(toolName, toolInput) {
658
665
  }
659
666
  return targets;
660
667
  }
661
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbENsYXNzaWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBaUNsRCx3RUFBd0U7QUFFeEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDOUMsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFRLHFCQUFxQjtJQUNyRCwyQkFBMkIsRUFBSyxxQkFBcUI7Q0FDdEQsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMsZUFBZTtJQUNmLGFBQWE7SUFDYixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIsd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osZUFBZTtJQUNmLHVCQUF1QjtJQUN2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QUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVG9vbCBDbGFzc2lmaWNhdGlvbiBmb3IgQ0xJLUxldmVsIFBlcm1pc3Npb24gUHJvbXB0c1xuICpcbiAqIFByb3ZpZGVzIHN0YXRpYyBjbGFzc2lmaWNhdGlvbiBvZiBDbGF1ZGUgQ29kZSBDTEkgdG9vbCBjYWxscyBhbmRcbiAqIGV2YWx1YXRpb24gYWdhaW5zdCBhY3RpdmUgZWxlbWVudCBnYXRla2VlcGVyIHBvbGljaWVzLlxuICpcbiAqIFVzZWQgYnkgdGhlIHBlcm1pc3Npb25fcHJvbXB0IG9wZXJhdGlvbiAoSXNzdWUgIzYyNSkgdG8gZXZhbHVhdGVcbiAqIC0tcGVybWlzc2lvbi1wcm9tcHQtdG9vbCByZXF1ZXN0cyB3aXRob3V0IHJlcXVpcmluZyBMTE0gZXZhbHVhdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hlc1BhdHRlcm4gfSBmcm9tICcuLi8uLi8uLi91dGlscy9wYXR0ZXJuTWF0Y2hlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi9FbGVtZW50UG9saWNpZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSaXNrQXNzZXNzbWVudCB9IGZyb20gJy4uL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgVG9vbFJpc2tMZXZlbCA9ICdzYWZlJyB8ICdtb2RlcmF0ZScgfCAnZGFuZ2Vyb3VzJyB8ICdibG9ja2VkJztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICByaXNrTGV2ZWw6IFRvb2xSaXNrTGV2ZWw7XG4gIC8qKiAnYWxsb3cnID0gYXV0by1hcHByb3ZlLCAnZGVueScgPSBhdXRvLXJlamVjdCwgJ2V2YWx1YXRlJyA9IGNoZWNrIGVsZW1lbnQgcG9saWNpZXMgKi9cbiAgYmVoYXZpb3I6ICdhbGxvdycgfCAnZGVueScgfCAnZXZhbHVhdGUnO1xuICByZWFzb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lFdmFsdWF0aW9uQ29udGV4dCB7XG4gIGV2YWx1YXRlZEVsZW1lbnRzOiBBcnJheTx7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBtYXRjaGVkPzogJ2FsbG93UGF0dGVybnMnIHwgJ2NvbmZpcm1QYXR0ZXJucycgfCAnZGVueVBhdHRlcm5zJztcbiAgICBtYXRjaGVkUGF0dGVybj86IHN0cmluZztcbiAgICBtYXRjaGVkVGFyZ2V0Pzogc3RyaW5nO1xuICB9PjtcbiAgZGVjaXNpb25DaGFpbjogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpVG9vbFBvbGljeVJlc3VsdCB7XG4gIGJlaGF2aW9yOiAnYWxsb3cnIHwgJ2RlbnknIHwgJ2V2YWx1YXRlJyB8ICdjb25maXJtJztcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgY29uZmlybVNvdXJjZT86IHN0cmluZztcbiAgcG9saWN5Q29udGV4dD86IFBvbGljeUV2YWx1YXRpb25Db250ZXh0O1xufVxuXG4vLyDilIDilIAgR2F0ZWtlZXBlci1Fc3NlbnRpYWwgT3BlcmF0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBNQ1AtQVFMIG9wZXJhdGlvbnMgdGhhdCBtdXN0IE5FVkVSIGJlIGJsb2NrZWQgYnkgcGVybWlzc2lvbl9wcm9tcHQsXG4gKiBldmVuIGlmIGVsZW1lbnQgZGVueVBhdHRlcm5zIHdvdWxkIG1hdGNoIHRoZSBNQ1AgdG9vbCBuYW1lLlxuICpcbiAqIFRoZXNlIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBHYXRla2VlcGVyIGZsb3cgaXRzZWxmLiBCbG9ja2luZyB0aGVtXG4gKiB3b3VsZCBwcmV2ZW50IHRoZSBodW1hbi1pbi10aGUtbG9vcCBhcHByb3ZhbCBwYXRoIGZyb20gZnVuY3Rpb25pbmdcbiAqIChlLmcuLCBhIGRlbnlQYXR0ZXJuIG9mICdtY3BfX0RvbGxob3VzZU1DUConIHdvdWxkIGJsb2NrIGNvbmZpcm1fb3BlcmF0aW9uKS5cbiAqL1xuY29uc3QgR0FURUtFRVBFUl9FU1NFTlRJQUxfT1BFUkFUSU9OUyA9IG5ldyBTZXQoW1xuICAnY29uZmlybV9vcGVyYXRpb24nLFxuICAndmVyaWZ5X2NoYWxsZW5nZScsXG4gICdwZXJtaXNzaW9uX3Byb21wdCcsXG4gICdpbnRyb3NwZWN0JyxcbiAgJ2dldF9hY3RpdmVfZWxlbWVudHMnLFxuICAnZ2V0X2V4ZWN1dGlvbl9zdGF0ZScsXG4gICdnZXRfZ2F0aGVyZWRfZGF0YScsXG4gICdhcHByb3ZlX2NsaV9wZXJtaXNzaW9uJywgICAgICAgLy8gSXNzdWUgIzYyNSBQaGFzZSAzXG4gICdnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzJywgICAgLy8gSXNzdWUgIzYyNSBQaGFzZSAzXG5dKTtcblxuLyoqXG4gKiBNQ1AtQVFMIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW5oZXJlbnRseSByZWFkLW9ubHkuXG4gKlxuICogVGhlc2UgYXV0by1hbGxvdyBpbiBwZXJtaXNzaW9uX3Byb21wdCAobm8gZWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvbikuXG4gKiBUaGUgR2F0ZWtlZXBlciAoTGF5ZXIgMikgc3RpbGwgYXBwbGllcyBpdHMgb3duIHBlci1vcGVyYXRpb24gcG9saWNpZXMsXG4gKiBzbyB0aGlzIGRvZXNuJ3QgYnlwYXNzIHNlcnZlci1zaWRlIGFjY2VzcyBjb250cm9sIOKAlCBpdCBqdXN0IGF2b2lkc1xuICogdW5uZWNlc3NhcnkgJ2V2YWx1YXRlJyByb3VuZC10cmlwcyBmb3Igb3BlcmF0aW9ucyB0aGF0IGNhbid0IG1vZGlmeSBzdGF0ZS5cbiAqL1xuY29uc3QgU0FGRV9NQ1BfT1BFUkFUSU9OUyA9IG5ldyBTZXQoW1xuICAnbGlzdF9lbGVtZW50cycsXG4gICdnZXRfZWxlbWVudCcsXG4gICdnZXRfZWxlbWVudF9kZXRhaWxzJyxcbiAgJ3NlYXJjaF9lbGVtZW50cycsXG4gICdxdWVyeV9lbGVtZW50cycsXG4gICdnZXRfYWN0aXZlX2VsZW1lbnRzJyxcbiAgJ3ZhbGlkYXRlX2VsZW1lbnQnLFxuICAncmVuZGVyJyxcbiAgJ2V4cG9ydF9lbGVtZW50JyxcbiAgJ2ludHJvc3BlY3QnLFxuICAnZ2V0X2V4ZWN1dGlvbl9zdGF0ZScsXG4gICdnZXRfZ2F0aGVyZWRfZGF0YScsXG4gICdicm93c2VfY29sbGVjdGlvbicsXG4gICdzZWFyY2hfY29sbGVjdGlvbicsXG4gICdzZWFyY2hfY29sbGVjdGlvbl9lbmhhbmNlZCcsXG4gICdnZXRfY29sbGVjdGlvbl9jb250ZW50JyxcbiAgJ2dldF9jb2xsZWN0aW9uX2NhY2hlX2hlYWx0aCcsXG4gICdwb3J0Zm9saW9fc3RhdHVzJyxcbiAgJ3BvcnRmb2xpb19jb25maWcnLFxuICAnc2VhcmNoX3BvcnRmb2xpbycsXG4gICdzZWFyY2hfYWxsJyxcbiAgJ2NoZWNrX2dpdGh1Yl9hdXRoJyxcbiAgJ29hdXRoX2hlbHBlcl9zdGF0dXMnLFxuICAnZG9sbGhvdXNlX2NvbmZpZycsXG4gICdnZXRfYnVpbGRfaW5mbycsXG4gICdnZXRfY2FjaGVfYnVkZ2V0X3JlcG9ydCcsXG4gICdxdWVyeV9sb2dzJyxcbiAgJ3F1ZXJ5X21ldHJpY3MnLFxuICAnZmluZF9zaW1pbGFyX2VsZW1lbnRzJyxcbiAgJ2dldF9lbGVtZW50X3JlbGF0aW9uc2hpcHMnLFxuICAnc2VhcmNoX2J5X3ZlcmInLFxuICAnZ2V0X3JlbGF0aW9uc2hpcF9zdGF0cycsXG4gICdnZXRfZWZmZWN0aXZlX2NsaV9wb2xpY2llcycsXG4gICdnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzJyxcbl0pO1xuXG4vLyDilIDilIAgU3RhdGljIENsYXNzaWZpY2F0aW9uIExpc3RzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRvb2xzIHRoYXQgYXJlIGFsd2F5cyBzYWZlIChyZWFkLW9ubHksIG5vIHNpZGUgZWZmZWN0cykuXG4gKlxuICogTk9URTogXCJTYWZlXCIgaGVyZSBtZWFucyBubyBkZXN0cnVjdGl2ZSBzaWRlIGVmZmVjdHMg4oCUIGl0IGRvZXMgTk9UIG1lYW5cbiAqIHVucmVzdHJpY3RlZC4gUmVhZC1vbmx5IHRvb2xzIGNhbiBzdGlsbCBwb3NlIGluZm9ybWF0aW9uLWxlYWthZ2Ugb3JcbiAqIHNjb3BlLWNyZWVwIHJpc2tzIHdoZW4gdXNlZCB0byBhY2Nlc3MgZmlsZXMgb3V0c2lkZSB0aGUgcHJvamVjdCB3b3JraW5nXG4gKiBkaXJlY3RvcnkgKGUuZy4sIH4vLnNzaC8qLCAvZXRjL3Bhc3N3ZCwgY3JlZGVudGlhbHMgaW4gaG9tZSBkaXJlY3RvcmllcykuXG4gKiBNb3N0IExMTSBjbGllbnRzIChDbGF1ZGUgQ29kZSwgQ3Vyc29yLCBldGMuKSBhbHJlYWR5IGVuZm9yY2UgZGlyZWN0b3J5XG4gKiBzY29waW5nIGF0IHRoZSBjbGllbnQgbGV2ZWwuIFRoZSBgYXNzZXNzUmlzaygpYCBmdW5jdGlvbiBhcHBsaWVzIGEgc21hbGxcbiAqIHNjb3JlIGJ1bXAgZm9yIHJlYWQgb3BlcmF0aW9ucyB0YXJnZXRpbmcgb3V0LW9mLXNjb3BlIHBhdGhzIGFzIGFuXG4gKiBhZGRpdGlvbmFsIHNpZ25hbCBmb3IgYXBwcm92YWwgcG9saWNpZXMuXG4gKi9cbmNvbnN0IFNBRkVfVE9PTFMgPSBuZXcgU2V0KFtcbiAgJ1JlYWQnLFxuICAnR3JlcCcsXG4gICdHbG9iJyxcbiAgJ1dlYkZldGNoJyxcbiAgJ1dlYlNlYXJjaCcsXG4gICdUYXNrQ3JlYXRlJyxcbiAgJ1Rhc2tVcGRhdGUnLFxuICAnVGFza0dldCcsXG4gICdUYXNrTGlzdCcsXG4gICdUYXNrT3V0cHV0JyxcbiAgJ0Fza1VzZXJRdWVzdGlvbicsXG4gICdFbnRlclBsYW5Nb2RlJyxcbiAgJ0V4aXRQbGFuTW9kZScsXG4gICdUb2RvUmVhZCcsXG4gICdUb2RvV3JpdGUnLFxuXSk7XG5cbi8qKiBCYXNoIGNvbW1hbmQgcHJlZml4ZXMvcGF0dGVybnMgdGhhdCBhcmUgc2FmZSAqL1xuY29uc3QgU0FGRV9CQVNIX1BBVFRFUk5TID0gW1xuICAnZ2l0IHN0YXR1cyonLFxuICAnZ2l0IGxvZyonLFxuICAnZ2l0IGRpZmYqJyxcbiAgJ2dpdCBicmFuY2gqJyxcbiAgJ2dpdCBzaG93KicsXG4gICdnaXQgcmVtb3RlKicsXG4gICdnaXQgc3Rhc2ggbGlzdConLFxuICAnbHMqJyxcbiAgJ3B3ZCcsXG4gICdjYXQgKicsXG4gICdoZWFkIConLFxuICAndGFpbCAqJyxcbiAgJ3djIConLFxuICAnZWNobyAqJyxcbiAgJ25wbSB0ZXN0KicsXG4gICducG0gcnVuIGxpbnQqJyxcbiAgJ25wbSBydW4gYnVpbGQqJyxcbiAgJ25wbSBydW4gdGVzdConLFxuICAnbnBtIHJ1biBjaGVjayonLFxuICAnbnBtIHJ1biB0eXBlY2hlY2sqJyxcbiAgJ25wbSBydW4gZm9ybWF0KicsXG4gICducG0gbHMqJyxcbiAgJ25wbSBpbmZvKicsXG4gICducG0gb3V0ZGF0ZWQqJyxcbiAgJ25weCBqZXN0KicsXG4gICducHggdHNjIC0tbm9FbWl0KicsXG4gICdub2RlIC0tdmVyc2lvbionLFxuICAnd2hpY2ggKicsXG4gICd0eXBlIConLFxuICAnZ2ggaXNzdWUgbGlzdConLFxuICAnZ2ggaXNzdWUgdmlldyonLFxuICAnZ2ggcHIgbGlzdConLFxuICAnZ2ggcHIgdmlldyonLFxuICAnZ2ggcHIgY2hlY2tzKicsXG5dO1xuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGRhbmdlcm91cyAqL1xuY29uc3QgREFOR0VST1VTX0JBU0hfUEFUVEVSTlMgPSBbXG4gICdybSAtcmYgKicsXG4gICdybSAtZnIgKicsXG4gICdnaXQgcHVzaCAtLWZvcmNlKicsXG4gICdnaXQgcHVzaCAtZiAqJyxcbiAgJ2dpdCByZXNldCAtLWhhcmQqJyxcbiAgJ2dpdCBjbGVhbiAtZionLFxuICAnZ2l0IGNoZWNrb3V0IC0tIConLFxuICAnZ2l0IGJyYW5jaCAtRCAqJyxcbiAgJ2NobW9kIDc3NyonLFxuICAnY2htb2QgLVIgNzc3KicsXG4gICdjaG1vZCArcyAqJyxcbiAgJ2Nob3duIHJvb3QgKicsXG4gICdzdWRvIConLFxuICAnZG9hcyAqJyxcbiAgJ3N1IC0qJyxcbiAgJ2V2YWwgKicsXG4gIC8vIFBpcGUtdG8tc2hlbGwgcGF0dGVybnMgKHdpdGggYW5kIHdpdGhvdXQgc3BhY2VzLCBtdWx0aXBsZSBzaGVsbHMpXG4gICcqfCBzaCcsXG4gICcqfCBzaCAqJyxcbiAgJyp8c2gnLFxuICAnKnxzaCAqJyxcbiAgJyp8IGJhc2gnLFxuICAnKnwgYmFzaCAqJyxcbiAgJyp8YmFzaCcsXG4gICcqfGJhc2ggKicsXG4gICcqfCB6c2gnLFxuICAnKnx6c2gnLFxuICAnY3VybCAqIHwgKicsXG4gICd3Z2V0ICogfCAqJyxcbiAgLy8gUGFja2FnZSBtYW5hZ2VyIGluc3RhbGxzIChjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgcG9zdC1pbnN0YWxsIHNjcmlwdHMpXG4gICducG0gaW5zdGFsbCAqJyxcbiAgJ25wbSBpbnN0YWxsJyxcbiAgJ25wbSBpIConLFxuICAnbnBtIGknLFxuICAneWFybiBhZGQgKicsXG4gICd5YXJuIGluc3RhbGwqJyxcbiAgJ3BpcCBpbnN0YWxsIConLFxuICAnZ2VtIGluc3RhbGwgKicsXG4gIC8vIEVudmlyb25tZW50IG1hbmlwdWxhdGlvbiAocGF0aCBwb2lzb25pbmcsIGxpYnJhcnkgaW5qZWN0aW9uLCB2YXJpYWJsZSBkZXN0cnVjdGlvbilcbiAgJ2V4cG9ydCBQQVRIPSonLFxuICAnZXhwb3J0IExEX1BSRUxPQUQ9KicsXG4gICdleHBvcnQgTERfTElCUkFSWV9QQVRIPSonLFxuICAnZW52IC1pIConLFxuICAndW5zZXQgKicsXG4gIC8vIFByb2Nlc3MgY29udHJvbCAoY2FuIHRlcm1pbmF0ZSBhZ2VudHMgb3Igc3lzdGVtIHByb2Nlc3NlcylcbiAgJ2tpbGwgKicsXG4gICdraWxsIC0qJyxcbiAgJ3BraWxsIConLFxuICAna2lsbGFsbCAqJyxcbiAgLy8gTmV0d29yayB0b29scyAoZXhmaWx0cmF0aW9uLCByZXZlcnNlIHNoZWxscylcbiAgJ25jIConLFxuICAnbmMgLSonLFxuICAnbmV0Y2F0IConLFxuICAnbmNhdCAqJyxcbiAgJ3NvY2F0IConLFxuICAvLyBBcmNoaXZlIG9wZXJhdGlvbnMgKGFyY2hpdmUgYm9tYnMsIHJvb3QgZGlyZWN0b3J5IGV4ZmlsdHJhdGlvbi9yYW5zb213YXJlKVxuICAndGFyIC14ZiAqJyxcbiAgJ3RhciB4ZiAqJyxcbiAgJ3ppcCAtciAqIC8nLFxuICAvLyBDb21tYW5kIGNoYWluaW5nIHdpdGggZGFuZ2Vyb3VzIHN1YmNvbW1hbmRzXG4gICcqOyBybSAtcmYgKicsXG4gICcqJiYgcm0gLXJmIConLFxuICAnKnx8IHJtIC1yZiAqJyxcbiAgJyo7IHN1ZG8gKicsXG4gICcqJiYgc3VkbyAqJyxcbiAgJyp8fCBzdWRvIConLFxuICAnKjsgZXZhbCAqJyxcbiAgJyomJiBldmFsIConLFxuICAvLyBTdWJwcm9jZXNzIGV4ZWN1dGlvbiB3cmFwcGVycyAoYnlwYXNzIG91dGVyIGNvbW1hbmQgY2xhc3NpZmljYXRpb24pXG4gICdiYXNoIC1jIConLFxuICAnc2ggLWMgKicsXG4gICd6c2ggLWMgKicsXG4gICcvYmluL2Jhc2ggLWMgKicsXG4gICcvYmluL3NoIC1jIConLFxuICAvLyBQcm9jZXNzIHN1YnN0aXR1dGlvbiAoY2FuIGluamVjdCBhcmJpdHJhcnkgY29tbWFuZCBvdXRwdXQpXG4gICcqPCgqJyxcbiAgLy8gRW5jb2RlZCBwYXlsb2FkIGV4ZWN1dGlvbiAoYmFzZTY0LWRlY29kZSBwaXBlZCB0byBzaGVsbClcbiAgJypiYXNlNjQgLWQqfConLFxuICAnKmJhc2U2NCAtLWRlY29kZSp8KicsXG4gICcqYmFzZTY0IC1EKnwqJyxcbl07XG5cbi8qKiBCYXNoIGNvbW1hbmQgcGF0dGVybnMgdGhhdCBhcmUgYWx3YXlzIGJsb2NrZWQgKi9cbmNvbnN0IEJMT0NLRURfQkFTSF9QQVRURVJOUyA9IFtcbiAgJ21rZnMqJyxcbiAgJ2RkIGlmPSonLFxuICAnOigpezp8OiZ9OzonLFxuICAnZm9ybWF0IConLFxuICAnKigpeyAqJyxcbl07XG5cbi8vIOKUgOKUgCBTdGF0aWMgQ2xhc3NpZmljYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQ2xhc3NpZnkgYSBDTEkgdG9vbCBjYWxsIGJ5IHJpc2sgbGV2ZWwgdXNpbmcgc3RhdGljIHJ1bGVzLlxuICpcbiAqIFJldHVybnMgJ2FsbG93JyBmb3Iga25vd24tc2FmZSB0b29scywgJ2RlbnknIGZvciBrbm93bi1kYW5nZXJvdXMgcGF0dGVybnMsXG4gKiBhbmQgJ2V2YWx1YXRlJyBmb3IgYW55dGhpbmcgdGhhdCBuZWVkcyBmdXJ0aGVyIHBvbGljeSBjaGVja2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5VG9vbChcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0IHtcbiAgLy8gS25vd24tc2FmZSB0b29sczogYXV0by1hbGxvd1xuICBpZiAoU0FGRV9UT09MUy5oYXModG9vbE5hbWUpKSB7XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnc2FmZScsIGJlaGF2aW9yOiAnYWxsb3cnLCByZWFzb246IGAke3Rvb2xOYW1lfSBpcyBhIHJlYWQtb25seSB0b29sYCB9O1xuICB9XG5cbiAgLy8gQmFzaDogc3ViLWNsYXNzaWZ5IGJ5IGNvbW1hbmQgY29udGVudFxuICBpZiAodG9vbE5hbWUgPT09ICdCYXNoJykge1xuICAgIHJldHVybiBjbGFzc2lmeUJhc2hDb21tYW5kKHRvb2xJbnB1dCk7XG4gIH1cblxuICAvLyBNQ1AgdG9vbCBjYWxsczogYXV0by1hbGxvdyBnYXRla2VlcGVyLWVzc2VudGlhbCBhbmQgc2FmZSByZWFkLW9ubHkgb3BlcmF0aW9ucywgZXZhbHVhdGUgb3RoZXJzXG4gIGlmICh0b29sTmFtZS5zdGFydHNXaXRoKCdtY3BfXycpKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdHlwZW9mIHRvb2xJbnB1dC5vcGVyYXRpb24gPT09ICdzdHJpbmcnID8gdG9vbElucHV0Lm9wZXJhdGlvbiA6ICcnO1xuICAgIGlmIChvcGVyYXRpb24gJiYgR0FURUtFRVBFUl9FU1NFTlRJQUxfT1BFUkFUSU9OUy5oYXMob3BlcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmlza0xldmVsOiAnc2FmZScsXG4gICAgICAgIGJlaGF2aW9yOiAnYWxsb3cnLFxuICAgICAgICByZWFzb246IGBHYXRla2VlcGVyLWVzc2VudGlhbCBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScg4oCUIGNhbm5vdCBiZSBibG9ja2VkIGJ5IHBlcm1pc3Npb25fcHJvbXB0YCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChvcGVyYXRpb24gJiYgU0FGRV9NQ1BfT1BFUkFUSU9OUy5oYXMob3BlcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmlza0xldmVsOiAnc2FmZScsXG4gICAgICAgIGJlaGF2aW9yOiAnYWxsb3cnLFxuICAgICAgICByZWFzb246IGBSZWFkLW9ubHkgTUNQIG9wZXJhdGlvbiAnJHtvcGVyYXRpb259J2AsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdNQ1AgdG9vbCBjYWxsIHJlcXVpcmVzIHBvbGljeSBldmFsdWF0aW9uJyB9O1xuICB9XG5cbiAgLy8gRWRpdCwgV3JpdGUsIEFnZW50LCBOb3RlYm9va0VkaXQsIGV0Yy46IG1vZGVyYXRlIHJpc2tcbiAgaWYgKFsnRWRpdCcsICdXcml0ZScsICdBZ2VudCcsICdOb3RlYm9va0VkaXQnXS5pbmNsdWRlcyh0b29sTmFtZSkpIHtcbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246IGAke3Rvb2xOYW1lfSBtb2RpZmllcyBzdGF0ZSwgcmVxdWlyZXMgcG9saWN5IGV2YWx1YXRpb25gIH07XG4gIH1cblxuICAvLyBVbmtub3duIHRvb2w6IGV2YWx1YXRlIChwZXJtaXNzaXZlIGRlZmF1bHQgZm9yIFBoYXNlIDEpXG4gIHJldHVybiB7IHJpc2tMZXZlbDogJ21vZGVyYXRlJywgYmVoYXZpb3I6ICdldmFsdWF0ZScsIHJlYXNvbjogYFVua25vd24gdG9vbCAnJHt0b29sTmFtZX0nLCByZXF1aXJlcyBwb2xpY3kgZXZhbHVhdGlvbmAgfTtcbn1cblxuLyoqXG4gKiBTdWItY2xhc3NpZnkgQmFzaCBjb21tYW5kcyBieSBtYXRjaGluZyBhZ2FpbnN0IGtub3duIHBhdHRlcm5zLlxuICovXG5mdW5jdGlvbiBjbGFzc2lmeUJhc2hDb21tYW5kKFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBUb29sQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICBjb25zdCBjb21tYW5kID0gdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJyA/IHRvb2xJbnB1dC5jb21tYW5kLnRyaW0oKSA6ICcnO1xuXG4gIGlmICghY29tbWFuZCkge1xuICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ21vZGVyYXRlJywgYmVoYXZpb3I6ICdldmFsdWF0ZScsIHJlYXNvbjogJ0VtcHR5IEJhc2ggY29tbWFuZCcgfTtcbiAgfVxuXG4gIC8vIENoZWNrIGJsb2NrZWQgcGF0dGVybnMgZmlyc3QgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBCTE9DS0VEX0JBU0hfUEFUVEVSTlMpIHtcbiAgICBpZiAobWF0Y2hlc1BhdHRlcm4oY29tbWFuZCwgcGF0dGVybikpIHtcbiAgICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ2Jsb2NrZWQnLCBiZWhhdmlvcjogJ2RlbnknLCByZWFzb246IGBCbG9ja2VkIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBkYW5nZXJvdXMgcGF0dGVybnNcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIERBTkdFUk9VU19CQVNIX1BBVFRFUk5TKSB7XG4gICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdkYW5nZXJvdXMnLCBiZWhhdmlvcjogJ2RlbnknLCByZWFzb246IGBEYW5nZXJvdXMgY29tbWFuZCBwYXR0ZXJuOiAke3BhdHRlcm59YCB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIHNhZmUgcGF0dGVybnNcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIFNBRkVfQkFTSF9QQVRURVJOUykge1xuICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHsgcmlza0xldmVsOiAnc2FmZScsIGJlaGF2aW9yOiAnYWxsb3cnLCByZWFzb246IGBTYWZlIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBVbmNsYXNzaWZpZWQ6IGV2YWx1YXRlIGFnYWluc3QgZWxlbWVudCBwb2xpY2llc1xuICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdCYXNoIGNvbW1hbmQgbm90IHN0YXRpY2FsbHkgY2xhc3NpZmllZCcgfTtcbn1cblxuLy8g4pSA4pSAIFJpc2sgQXNzZXNzbWVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCYXNlIHJpc2sgc2NvcmVzIGJ5IGNsYXNzaWZpY2F0aW9uIGxldmVsICgwLTEwMCBzY2FsZSkuXG4gKlxuICogU2NvcmUgcmFuZ2VzOlxuICogLSAgMDogICAgIHNhZmUg4oCUIHJlYWQtb25seSB0b29scywgbm8gc2lkZSBlZmZlY3RzXG4gKiAtICAxLTM5OiAgbG93IOKAlCBtaW5vciBzaWRlIGVmZmVjdHMsIGVhc2lseSByZXZlcnNpYmxlXG4gKiAtIDQwLTU5OiAgbW9kZXJhdGUg4oCUIGZpbGUgd3JpdGVzLCBwYWNrYWdlIGluc3RhbGxzLCB1bmNsYXNzaWZpZWQgY29tbWFuZHNcbiAqIC0gNjAtNzk6ICBlbGV2YXRlZCDigJQgbW9kZXJhdGUgKyBhZ2dyYXZhdGluZyBmYWN0b3JzIChuZXR3b3JrLCBmaWxlIGNyZWF0aW9uKVxuICogLSA4MC05OTogIGRhbmdlcm91cyDigJQgZGVzdHJ1Y3RpdmUgY29tbWFuZHMsIHByaXZpbGVnZSBlc2NhbGF0aW9uXG4gKiAtIDEwMDogICAgYmxvY2tlZCDigJQgYWx3YXlzIGRlbmllZCAoZS5nLiwgcmV2ZXJzZSBzaGVsbHMsIGRpc2sgd2lwZSlcbiAqXG4gKiBBZGp1c3RtZW50cyBhcHBsaWVkIG9uIHRvcCBvZiBiYXNlOiBpcnJldmVyc2libGUgcGF0dGVybiAoKzEwKSxcbiAqIG5ldHdvcmsgb3BlcmF0aW9uICgrMTApLCBvdXQtb2Ytc2NvcGUgcmVhZCAoKzEwKSwgZmlsZSBjcmVhdGlvbiAoKzUpLlxuICogU2NvcmUgaXMgY2FwcGVkIGF0IDEwMC5cbiAqL1xuY29uc3QgUklTS19TQ09SRVM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gIHNhZmU6IDAsXG4gIG1vZGVyYXRlOiA0MCxcbiAgZGFuZ2Vyb3VzOiA4MCxcbiAgYmxvY2tlZDogMTAwLFxufTtcblxuLyoqIFJlYWQtb25seSB0b29scyB0aGF0IG1heSByZWZlcmVuY2UgZmlsZSBwYXRocyAqL1xuY29uc3QgU0FGRV9SRUFEX1RPT0xTID0gbmV3IFNldChbJ1JlYWQnLCAnR3JlcCcsICdHbG9iJ10pO1xuXG4vKiogU2Vuc2l0aXZlIHBhdGggcHJlZml4ZXMgdGhhdCBpbmRpY2F0ZSBvdXQtb2Ytc2NvcGUgcmVhZHMgKi9cbmNvbnN0IFNFTlNJVElWRV9QQVRIX1BSRUZJWEVTID0gW1xuICAnfi8uc3NoLycsICd+Ly5nbnVwZy8nLCAnfi8uYXdzLycsICd+Ly5jb25maWcvJyxcbiAgJ34vLmVudicsICd+Ly5uZXRyYycsICd+Ly5ucG1yYycsXG4gICcvZXRjL3NoYWRvdycsICcvZXRjL3Bhc3N3ZCcsICcvZXRjL3N1ZG9lcnMnLFxuICAnL3Byb2MvJywgJy9zeXMvJyxcbl07XG5cbi8qKlxuICogSGV1cmlzdGljOiBkb2VzIGEgcGF0aCBsb29rIGxpa2UgaXQgdGFyZ2V0cyBmaWxlcyBvdXRzaWRlIHRoZSBwcm9qZWN0IHNjb3BlP1xuICogQ2hlY2tzIGZvciBob21lLWRpcmVjdG9yeSBzZW5zaXRpdmUgcGF0aHMsIHN5c3RlbSBwYXRocywgYW5kIHBhcmVudCB0cmF2ZXJzYWxzLlxuICovXG5mdW5jdGlvbiBpc091dE9mU2NvcGVQYXRoKHRhcmdldFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkID0gdGFyZ2V0UGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgLy8gRXhwbGljaXQgc2Vuc2l0aXZlIHBhdGhzXG4gIGZvciAoY29uc3QgcHJlZml4IG9mIFNFTlNJVElWRV9QQVRIX1BSRUZJWEVTKSB7XG4gICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aChwcmVmaXgpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoYC8ke3ByZWZpeH1gKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gSG9tZSBkaXJlY3RvcnkgcmVmZXJlbmNlcyAofi8uLi4pIHRoYXQgYXJlbid0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0XG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ34vJykgfHwgbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvVXNlcnMvJykgfHwgbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvaG9tZS8nKSkge1xuICAgIC8vIEhldXJpc3RpYzogcmVhZGluZyBzZW5zaXRpdmUgZG90ZmlsZXMvZGlycyBvdXRzaWRlIGEgcHJvamVjdC5cbiAgICAvLyBUYXJnZXRzIGtub3duIGNyZWRlbnRpYWwvY29uZmlnIHN0b3JlcyDigJQgYXZvaWRzIGZhbHNlIHBvc2l0aXZlcyBmb3JcbiAgICAvLyBjb21tb24gcHJvamVjdCBkb3RmaWxlcyBsaWtlIC5naXRodWIvLCAudnNjb2RlLywgLmVzbGludHJjLCBldGMuXG4gICAgaWYgKC9cXC9cXC4oc3NofGdudXBnfGF3c3xhenVyZXxnY2xvdWR8a3ViZXxkb2NrZXJ8bnBtcmN8bmV0cmN8ZW52fGJhc2hfaGlzdG9yeXx6c2hfaGlzdG9yeXxjcmVkZW50aWFsc3xwYXNzd29yZHxzZWNyZXQpL2kudGVzdChub3JtYWxpemVkKSkgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBCYXNoIGNvbW1hbmQgcGF0dGVybnMgdGhhdCBhcmUgaXJyZXZlcnNpYmxlICovXG5jb25zdCBJUlJFVkVSU0lCTEVfUEFUVEVSTlMgPSBbXG4gICdybSAtcmYgKicsXG4gICdybSAtZnIgKicsXG4gICdnaXQgcHVzaCAtLWZvcmNlKicsXG4gICdnaXQgcHVzaCAtZiAqJyxcbiAgJ2dpdCByZXNldCAtLWhhcmQqJyxcbiAgJ2dpdCBjbGVhbiAtZionLFxuICAnbWtmcyonLFxuICAnZGQgaWY9KicsXG4gICdkcm9wIConLFxuICAndHJ1bmNhdGUgKicsXG5dO1xuXG4vKipcbiAqIEFzc2VzcyB0aGUgcmlzayBvZiBhIENMSSB0b29sIGNhbGwuXG4gKlxuICogUmV0dXJucyBhIG51bWVyaWMgc2NvcmUgKDAtMTAwKSBhbmQgaXJyZXZlcnNpYmlsaXR5IGluZGljYXRvciBiYXNlZCBvblxuICogdGhlIHN0YXRpYyBjbGFzc2lmaWNhdGlvbiBhbmQgdG9vbC1zcGVjaWZpYyBoZXVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB0b29sTmFtZSAtIFRoZSB0b29sIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHRvb2xJbnB1dCAtIFRoZSB0b29sIGlucHV0IHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjbGFzc2lmaWNhdGlvbiAtIFRoZSByZXN1bHQgZnJvbSBjbGFzc2lmeVRvb2woKVxuICogQHJldHVybnMgUmlzayBhc3Nlc3NtZW50IHdpdGggc2NvcmUsIGlycmV2ZXJzaWJpbGl0eSwgYW5kIGNvbnRyaWJ1dGluZyBmYWN0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3Nlc3NSaXNrKFxuICB0b29sTmFtZTogc3RyaW5nLFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjbGFzc2lmaWNhdGlvbjogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0XG4pOiBSaXNrQXNzZXNzbWVudCB7XG4gIGxldCBzY29yZSA9IFJJU0tfU0NPUkVTW2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbF0gPz8gNDA7XG4gIGNvbnN0IGZhY3RvcnM6IHN0cmluZ1tdID0gW2BCYXNlOiAke2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbH0gKCR7UklTS19TQ09SRVNbY2xhc3NpZmljYXRpb24ucmlza0xldmVsXSA/PyA0MH0pYF07XG4gIGxldCBpcnJldmVyc2libGUgPSBmYWxzZTtcblxuICAvLyBDaGVjayBmb3IgaXJyZXZlcnNpYmxlIHBhdHRlcm5zIGluIEJhc2ggY29tbWFuZHNcbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcgJiYgdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGNvbW1hbmQgPSB0b29sSW5wdXQuY29tbWFuZC50cmltKCk7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIElSUkVWRVJTSUJMRV9QQVRURVJOUykge1xuICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICAgIGlycmV2ZXJzaWJsZSA9IHRydWU7XG4gICAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgICAgZmFjdG9ycy5wdXNoKGBJcnJldmVyc2libGUgcGF0dGVybjogJHtwYXR0ZXJufSAoKzEwKWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOZXR3b3JrIG9wZXJhdGlvbnMgaW5jcmVhc2Ugcmlza1xuICAgIGlmICgvXFxiKGN1cmx8d2dldHxmZXRjaHxuY3xuZXRjYXR8bmNhdHxzb2NhdClcXGIvLnRlc3QoY29tbWFuZCkpIHtcbiAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgIGZhY3RvcnMucHVzaCgnTmV0d29yayBvcGVyYXRpb24gKCsxMCknKTtcbiAgICB9XG4gIH1cblxuICAvLyBXcml0ZS9FZGl0IG9wZXJhdGlvbnM6IGZpbGUgY3JlYXRpb24gaW5jcmVhc2VzIHJpc2sgc2xpZ2h0bHlcbiAgaWYgKHRvb2xOYW1lID09PSAnV3JpdGUnKSB7XG4gICAgc2NvcmUgPSBNYXRoLm1pbigxMDAsIHNjb3JlICsgNSk7XG4gICAgZmFjdG9ycy5wdXNoKCdGaWxlIGNyZWF0aW9uICgrNSknKTtcbiAgfVxuXG4gIC8vIFJlYWQtb25seSB0b29scyB0YXJnZXRpbmcgcGF0aHMgb3V0c2lkZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG4gIC8vIE1vc3QgY2xpZW50cyBhbHJlYWR5IGVuZm9yY2UgZGlyZWN0b3J5IHNjb3BpbmcsIGJ1dCB0aGlzIHByb3ZpZGVzIGFuXG4gIC8vIGFkZGl0aW9uYWwgc2lnbmFsIGZvciBhcHByb3ZhbCBwb2xpY2llcyB0byBhY3Qgb24uXG4gIGlmIChTQUZFX1JFQURfVE9PTFMuaGFzKHRvb2xOYW1lKSkge1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSAodG9vbElucHV0LmZpbGVfcGF0aCA/PyB0b29sSW5wdXQucGF0aCA/PyAnJykgYXMgc3RyaW5nO1xuICAgIGlmICh0YXJnZXRQYXRoICYmIGlzT3V0T2ZTY29wZVBhdGgodGFyZ2V0UGF0aCkpIHtcbiAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgIGZhY3RvcnMucHVzaCgnT3V0LW9mLXNjb3BlIHJlYWQgcGF0aCAoKzEwKScpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHNjb3JlLCBpcnJldmVyc2libGUsIGZhY3RvcnMgfTtcbn1cblxuLy8g4pSA4pSAIFN0YXRpYyBQb2xpY3kgRGF0YSBFeHBvcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuIGFsbCBzdGF0aWMgY2xhc3NpZmljYXRpb24gZGF0YSBmb3IgYnJpZGdlIHBvbGljeSBleHBvcnQuXG4gKlxuICogVXNlZCBieSBQb2xpY3lFeHBvcnRTZXJ2aWNlIHRvIHdyaXRlIHRoZSBicmlkZ2UtY29tcGF0aWJsZSBwb2xpY3kgZmlsZS5cbiAqIEFsbCBkYXRhIGlzIHJldHVybmVkIGFzIHBsYWluIGFycmF5cy9vYmplY3RzIChubyBTZXRzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY1BvbGljeURhdGEoKSB7XG4gIHJldHVybiB7XG4gICAgc2FmZV90b29sczogWy4uLlNBRkVfVE9PTFNdLFxuICAgIHNhZmVfYmFzaF9wYXR0ZXJuczogWy4uLlNBRkVfQkFTSF9QQVRURVJOU10sXG4gICAgZGFuZ2Vyb3VzX2Jhc2hfcGF0dGVybnM6IFsuLi5EQU5HRVJPVVNfQkFTSF9QQVRURVJOU10sXG4gICAgYmxvY2tlZF9iYXNoX3BhdHRlcm5zOiBbLi4uQkxPQ0tFRF9CQVNIX1BBVFRFUk5TXSxcbiAgICBpcnJldmVyc2libGVfcGF0dGVybnM6IFsuLi5JUlJFVkVSU0lCTEVfUEFUVEVSTlNdLFxuICAgIHNlbnNpdGl2ZV9wYXRoX3ByZWZpeGVzOiBbLi4uU0VOU0lUSVZFX1BBVEhfUFJFRklYRVNdLFxuICAgIGdhdGVrZWVwZXJfZXNzZW50aWFsX29wZXJhdGlvbnM6IFsuLi5HQVRFS0VFUEVSX0VTU0VOVElBTF9PUEVSQVRJT05TXSxcbiAgICBzYWZlX21jcF9vcGVyYXRpb25zOiBbLi4uU0FGRV9NQ1BfT1BFUkFUSU9OU10sXG4gICAgcmlza19zY29yZXM6IHsgLi4uUklTS19TQ09SRVMgfSxcbiAgfTtcbn1cblxuLy8g4pSA4pSAIEVsZW1lbnQgUG9saWN5IEV2YWx1YXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXZhbHVhdGUgYSBDTEkgdG9vbCBjYWxsIGFnYWluc3QgYWN0aXZlIGVsZW1lbnQgZ2F0ZWtlZXBlciBwb2xpY2llcy5cbiAqXG4gKiBGb3VyLXN0ZXAgZXZhbHVhdGlvbiBwZXIgZWxlbWVudCAoSXNzdWUgIzYyNSBQaGFzZSAyLCBJc3N1ZSAjMTY2MCk6XG4gKiAxLiBkZW55UGF0dGVybnMgKGhpZ2hlc3QgcHJpb3JpdHkpIOKAlCBmaXJzdCBtYXRjaCA9IGltbWVkaWF0ZSBkZW55XG4gKiAxLjUuIGNvbmZpcm1QYXR0ZXJucyDigJQgZmlyc3QgbWF0Y2ggPSBpbW1lZGlhdGUgY29uZmlybSAocmVxdWlyZXMgYXBwcm92YWwpXG4gKiAyLiBhbGxvd1BhdHRlcm5zIOKAlCBpZiBlbGVtZW50IGRlZmluZXMgdGhlbSwgcmVjb3JkIHdoZXRoZXIgdG9vbCBtYXRjaGVkXG4gKiAzLiBBZnRlciBhbGwgZWxlbWVudHM6IGlmIGFueSBoYWQgYWxsb3dQYXR0ZXJucyBidXQgdG9vbCB3YXNuJ3QgYWxsb3dlZCBieSBhbnkgPSBkZW55XG4gKlxuICogVW5pb24gc2VtYW50aWNzOiB0b29sIG11c3QgbWF0Y2ggYXQgbGVhc3QgT05FIGVsZW1lbnQncyBhbGxvd1BhdHRlcm5zIChub3QgYWxsKS5cbiAqIEVsZW1lbnRzIHdpdGhvdXQgYWxsb3dQYXR0ZXJucyBkb24ndCByZXN0cmljdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVG9vbCBtYXRjaGVzIGFsbG93UGF0dGVybnMgaW4gZWxlbWVudCBBIGJ1dCBub3QgQiDihpIgQUxMT1dFRCAodW5pb24gc2VtYW50aWNzKVxuICogLy8gVG9vbCBtYXRjaGVzIGRlbnlQYXR0ZXJucyBpbiBhbnkgZWxlbWVudCDihpIgREVOSUVEIChkZW55IGFsd2F5cyB3aW5zKVxuICogLy8gVG9vbCBtYXRjaGVzIG5vIGFsbG93UGF0dGVybnMgYnV0IHNvbWUgZXhpc3Qg4oaSIERFTklFRCAoXCJub3QgaW4gYW55IGFsbG93bGlzdFwiKVxuICogLy8gTm8gYWxsb3dQYXR0ZXJucyBkZWZpbmVkIGFueXdoZXJlIOKGkiBQaGFzZSAxIGJlaGF2aW9yIChmYWxsIHRocm91Z2ggdG8gZGVmYXVsdClcbiAqXG4gKiBAcmV0dXJucyAnZGVueScgaWYgYmxvY2tlZCwgJ2V2YWx1YXRlJyBpZiBwZXJtaXR0ZWQgdG8gZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQ2xpVG9vbFBvbGljeShcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgYWN0aXZlRWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXVxuKTogQ2xpVG9vbFBvbGljeVJlc3VsdCB7XG4gIGNvbnN0IGV2YWx1YXRlZEVsZW1lbnRzOiBQb2xpY3lFdmFsdWF0aW9uQ29udGV4dFsnZXZhbHVhdGVkRWxlbWVudHMnXSA9IFtdO1xuICBjb25zdCBkZWNpc2lvbkNoYWluOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIGlmICghYWN0aXZlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdObyBhY3RpdmUgZWxlbWVudHMg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0Jyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSAke3Rvb2xOYW1lfTogbm8gYWN0aXZlIGVsZW1lbnRzLCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdGApO1xuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcjogJ2V2YWx1YXRlJyxcbiAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIHN0cmluZ3MgdG8gbWF0Y2ggYWdhaW5zdCBwYXR0ZXJuc1xuICBjb25zdCBtYXRjaFRhcmdldHMgPSBidWlsZE1hdGNoVGFyZ2V0cyh0b29sTmFtZSwgdG9vbElucHV0KTtcbiAgY29uc3QgZWxlbWVudFR5cGVTdW1tYXJ5ID0gc3VtbWFyaXplRWxlbWVudFR5cGVzKGFjdGl2ZUVsZW1lbnRzKTtcbiAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBFdmFsdWF0aW5nICR7dG9vbE5hbWV9IGFnYWluc3QgJHthY3RpdmVFbGVtZW50cy5sZW5ndGh9IGVsZW1lbnRzICgke2VsZW1lbnRUeXBlU3VtbWFyeX0pLCBtYXRjaFRhcmdldHM6IFske21hdGNoVGFyZ2V0cy5qb2luKCcsICcpfV1gKTtcblxuICBsZXQgYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgPSBmYWxzZTtcbiAgbGV0IHRvb2xBbGxvd2VkQnlBbnlFbGVtZW50ID0gZmFsc2U7XG4gIGNvbnN0IGVsZW1lbnRzV2l0aEFsbG93UGF0dGVybnM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgY29uc3QgcmVzdHJpY3Rpb25zID0gZWxlbWVudC5tZXRhZGF0YT8uZ2F0ZWtlZXBlcj8uZXh0ZXJuYWxSZXN0cmljdGlvbnM7XG4gICAgY29uc3QgZGVueVBhdHRlcm5zID0gcmVzdHJpY3Rpb25zPy5kZW55UGF0dGVybnM7XG4gICAgY29uc3QgY29uZmlybVBhdHRlcm5zID0gcmVzdHJpY3Rpb25zPy5jb25maXJtUGF0dGVybnM7XG4gICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uYWxsb3dQYXR0ZXJucztcblxuICAgIGNvbnN0IGhhc1Jlc3RyaWN0aW9ucyA9IChBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykgJiYgZGVueVBhdHRlcm5zLmxlbmd0aCA+IDApXG4gICAgICB8fCAoQXJyYXkuaXNBcnJheShjb25maXJtUGF0dGVybnMpICYmIGNvbmZpcm1QYXR0ZXJucy5sZW5ndGggPiAwKVxuICAgICAgfHwgKEFycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgJiYgYWxsb3dQYXR0ZXJucy5sZW5ndGggPiAwKTtcblxuICAgIGlmICghaGFzUmVzdHJpY3Rpb25zKSB7XG4gICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9Jzogbm8gZXh0ZXJuYWxSZXN0cmljdGlvbnNgKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBubyBleHRlcm5hbFJlc3RyaWN0aW9ucywgc2tpcHBpbmdgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBldmFsdWF0aW5nIChkZW55OiAke0FycmF5LmlzQXJyYXkoZGVueVBhdHRlcm5zKSA/IGRlbnlQYXR0ZXJucy5sZW5ndGggOiAwfSwgY29uZmlybTogJHtBcnJheS5pc0FycmF5KGNvbmZpcm1QYXR0ZXJucykgPyBjb25maXJtUGF0dGVybnMubGVuZ3RoIDogMH0sIGFsbG93OiAke0FycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgPyBhbGxvd1BhdHRlcm5zLmxlbmd0aCA6IDB9IHBhdHRlcm5zKWApO1xuXG4gICAgLy8gU3RlcCAxOiBDaGVjayBkZW55UGF0dGVybnMgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVueVBhdHRlcm5zKSkge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGRlbnlQYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2RlbnlQYXR0ZXJucycsXG4gICAgICAgICAgICAgIG1hdGNoZWRQYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgICBtYXRjaGVkVGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgREVOWTogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGRlbnlQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIERFTlk6ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBkZW55UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9JyAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmVoYXZpb3I6ICdkZW55JyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERlbmllZCBieSAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgcG9saWN5OiBwYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCxcbiAgICAgICAgICAgICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdGVwIDEuNTogQ2hlY2sgY29uZmlybVBhdHRlcm5zIChyZXF1aXJlcyBhcHByb3ZhbCDigJQgSXNzdWUgIzE2NjApXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlybVBhdHRlcm5zKSAmJiBjb25maXJtUGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGNvbmZpcm1QYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2NvbmZpcm1QYXR0ZXJucycsXG4gICAgICAgICAgICAgIG1hdGNoZWRQYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgICBtYXRjaGVkVGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgQ09ORklSTTogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGNvbmZpcm1QYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIENPTkZJUk06ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBjb25maXJtUGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9JyAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmVoYXZpb3I6ICdjb25maXJtJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFJlcXVpcmVzIGFwcHJvdmFsOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgcG9saWN5IHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3IgcGF0dGVybiAnJHtwYXR0ZXJufSdgLFxuICAgICAgICAgICAgICBjb25maXJtU291cmNlOiBgJHtlbGVtZW50LnR5cGV9OiR7ZWxlbWVudC5uYW1lfWAsXG4gICAgICAgICAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBDaGVjayBhbGxvd1BhdHRlcm5zXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgJiYgYWxsb3dQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICBhbnlFbGVtZW50SGFzQWxsb3dQYXR0ZXJucyA9IHRydWU7XG4gICAgICBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9J2ApO1xuICAgICAgbGV0IG1hdGNoZWRBbGxvdyA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgYWxsb3dQYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2FsbG93UGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogYWxsb3dQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIEFMTE9XOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgYWxsb3dQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVkICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICB0b29sQWxsb3dlZEJ5QW55RWxlbWVudCA9IHRydWU7XG4gICAgICAgICAgICBtYXRjaGVkQWxsb3cgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaGVkQWxsb3cpIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1hdGNoZWRBbGxvdykge1xuICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBhbGxvd1BhdHRlcm5zIGRlZmluZWQgYnV0IG5vIG1hdGNoYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5hbWU6IGVsZW1lbnQubmFtZSB9KTtcbiAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBkZW55UGF0dGVybnMgY2hlY2tlZCwgbm8gbWF0Y2hgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDM6IElmIGFueSBlbGVtZW50IGhhZCBhbGxvd1BhdHRlcm5zLCB0b29sIG11c3QgaGF2ZSBtYXRjaGVkIGF0IGxlYXN0IG9uZVxuICBpZiAoYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgJiYgIXRvb2xBbGxvd2VkQnlBbnlFbGVtZW50KSB7XG4gICAgY29uc3QgcmVzdHJpY3RvcnMgPSBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zLmpvaW4oJywgJyk7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKGBERU5ZOiB0b29sIG5vdCBpbiBhbnkgZWxlbWVudCBhbGxvd2xpc3QgKHJlc3RyaWN0ZWQgYnk6ICR7cmVzdHJpY3RvcnN9KWApO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gREVOWTogJHt0b29sTmFtZX0gbm90IGluIGFueSBhbGxvd2xpc3QgKHJlc3RyaWN0ZWQgYnk6ICR7cmVzdHJpY3RvcnN9KSAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcjogJ2RlbnknLFxuICAgICAgbWVzc2FnZTogYFRvb2wgJyR7dG9vbE5hbWV9JyBub3QgcGVybWl0dGVkIGJ5IGFsbG93bGlzdHMgZGVmaW5lZCBpbjogJHtyZXN0cmljdG9yc30uIEVpdGhlciBkZWFjdGl2YXRlIHRoZXNlIGVsZW1lbnRzIG9yIGFkZCBhbGxvd1BhdHRlcm5zIHRvIG1hdGNoIHRoaXMgdG9vbC5gLFxuICAgICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMpIHtcbiAgICBkZWNpc2lvbkNoYWluLnB1c2goJ1Rvb2wgbWF0Y2hlZCBhbGxvd2xpc3Qg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0Jyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSAke3Rvb2xOYW1lfTogbWF0Y2hlZCBhbGxvd2xpc3QsIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICgke2VsYXBzZWQoc3RhcnRUaW1lKX0pYCk7XG4gIH0gZWxzZSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdObyBhbGxvd1BhdHRlcm5zIGRlZmluZWQg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IChQaGFzZSAxIGJlaGF2aW9yKScpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG5vIGFsbG93UGF0dGVybnMgZGVmaW5lZCwgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmVoYXZpb3I6ICdldmFsdWF0ZScsXG4gICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICB9O1xufVxuXG4vKiogRm9ybWF0IGVsYXBzZWQgdGltZSBzaW5jZSBzdGFydFRpbWUgaW4gbWlsbGlzZWNvbmRzLiAqL1xuZnVuY3Rpb24gZWxhcHNlZChzdGFydFRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHsocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUpLnRvRml4ZWQoMil9bXNgO1xufVxuXG4vKiogU3VtbWFyaXplIGFjdGl2ZSBlbGVtZW50IHR5cGVzIGZvciB0aGUgZW50cnkgbG9nIChlLmcuLCBcIjMgcGVyc29uYXMsIDIgc2tpbGxzLCAxIGVuc2VtYmxlXCIpLiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplRWxlbWVudFR5cGVzKGVsZW1lbnRzOiBBY3RpdmVFbGVtZW50W10pOiBzdHJpbmcge1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzKSB7XG4gICAgY291bnRzLnNldChlbC50eXBlLCAoY291bnRzLmdldChlbC50eXBlKSA/PyAwKSArIDEpO1xuICB9XG4gIHJldHVybiBbLi4uY291bnRzLmVudHJpZXMoKV0ubWFwKChbdHlwZSwgY291bnRdKSA9PiBgJHtjb3VudH0gJHt0eXBlfSR7Y291bnQgPiAxID8gJ3MnIDogJyd9YCkuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgcGF0dGVybiBtYXRjaGluZyB0YXJnZXRzLlxuICogVHJ1bmNhdGVzIGxvbmcgY29tbWFuZHMvcGF0aHMgdG8gcHJldmVudCBEb1MgdmlhIHBhdGhvbG9naWNhbCBnbG9iIG1hdGNoaW5nLlxuICovXG5jb25zdCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIID0gMTAwMDtcblxuLyoqXG4gKiBTdHJpcCBudWxsIGJ5dGVzLCBjb250cm9sIGNoYXJhY3RlcnMsIGFuZCBub3JtYWxpemUgVW5pY29kZSBmb3IgbWF0Y2ggaW5wdXQuXG4gKiBQcmVzZXJ2ZXMgdGFiIChcXHgwOSksIG5ld2xpbmUgKFxceDBBKSwgY2FycmlhZ2UgcmV0dXJuIChcXHgwRCkuXG4gKiBQcmV2ZW50cyBwYXR0ZXJuIGJ5cGFzcyB2aWEgaW5qZWN0ZWQgY29udHJvbCBjaGFyYWN0ZXJzIG9yIFVuaWNvZGVcbiAqIG5vcm1hbGl6YXRpb24gYXR0YWNrcyAoZS5nLiwgY29tYmluaW5nIGNoYXJhY3RlcnMgdGhhdCBsb29rIGxpa2UgQVNDSUkpLlxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZU1hdGNoSW5wdXQoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIE5vcm1hbGl6ZSBVbmljb2RlIHRvIE5GQyAoY2Fub25pY2FsIGRlY29tcG9zaXRpb24gdGhlbiBjb21wb3NpdGlvbikuXG4gIC8vIFRoaXMgcHJldmVudHMgYnlwYXNzIHZpYSBjb21iaW5pbmcgY2hhcmFjdGVycyBvciBhbHRlcm5hdGl2ZSByZXByZXNlbnRhdGlvbnMuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBpbnB1dC5ub3JtYWxpemUoJ05GQycpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICByZXR1cm4gbm9ybWFsaXplZC5yZXBsYWNlKC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgJycpO1xufVxuXG4vKipcbiAqIEJ1aWxkIG1hdGNoIHRhcmdldCBzdHJpbmdzIGZvciBhIHRvb2wgY2FsbC5cbiAqXG4gKiBGb3IgQmFzaDogbWF0Y2hlcyBhZ2FpbnN0IHRoZSB0b29sIG5hbWUgYW5kIFwiQmFzaDo8Y29tbWFuZD5cIlxuICogRm9yIEVkaXQvV3JpdGU6IG1hdGNoZXMgYWdhaW5zdCB0aGUgdG9vbCBuYW1lIGFuZCBcIkVkaXQ6PGZpbGVfcGF0aD5cIlxuICogRm9yIE1DUCB0b29sczogbWF0Y2hlcyBhZ2FpbnN0IHRoZSBmdWxsIHRvb2wgbmFtZVxuICpcbiAqIElucHV0cyBhcmUgdHJ1bmNhdGVkIHRvIE1BWF9NQVRDSF9JTlBVVF9MRU5HVEggYW5kIHNhbml0aXplZCB0byBwcmV2ZW50XG4gKiBEb1MgdmlhIHBhdGhvbG9naWNhbCBnbG9iIG1hdGNoaW5nIGFuZCBwYXR0ZXJuIGJ5cGFzcyB2aWEgY29udHJvbCBjaGFycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRNYXRjaFRhcmdldHMoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgdGFyZ2V0cyA9IFt0b29sTmFtZV07XG5cbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcgJiYgdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplTWF0Y2hJbnB1dCh0b29sSW5wdXQuY29tbWFuZC5zbGljZSgwLCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIKSk7XG4gICAgdGFyZ2V0cy5wdXNoKGBCYXNoOiR7c2FuaXRpemVkfWApO1xuICB9IGVsc2UgaWYgKCh0b29sTmFtZSA9PT0gJ0VkaXQnIHx8IHRvb2xOYW1lID09PSAnV3JpdGUnKSAmJiB0eXBlb2YgdG9vbElucHV0LmZpbGVfcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZU1hdGNoSW5wdXQodG9vbElucHV0LmZpbGVfcGF0aC5zbGljZSgwLCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIKSk7XG4gICAgdGFyZ2V0cy5wdXNoKGAke3Rvb2xOYW1lfToke3Nhbml0aXplZH1gKTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRzO1xufVxuIl19
668
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbENsYXNzaWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBaUNsRCx3RUFBd0U7QUFFeEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDOUMsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFRLHFCQUFxQjtJQUNyRCwyQkFBMkIsRUFBSyxxQkFBcUI7Q0FDdEQsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMsZUFBZTtJQUNmLGFBQWE7SUFDYixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIsd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osZUFBZTtJQUNmLHVCQUF1QjtJQUN2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QUM7UUFDcEcsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUMzRixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvb2wgQ2xhc3NpZmljYXRpb24gZm9yIENMSS1MZXZlbCBQZXJtaXNzaW9uIFByb21wdHNcbiAqXG4gKiBQcm92aWRlcyBzdGF0aWMgY2xhc3NpZmljYXRpb24gb2YgQ2xhdWRlIENvZGUgQ0xJIHRvb2wgY2FsbHMgYW5kXG4gKiBldmFsdWF0aW9uIGFnYWluc3QgYWN0aXZlIGVsZW1lbnQgZ2F0ZWtlZXBlciBwb2xpY2llcy5cbiAqXG4gKiBVc2VkIGJ5IHRoZSBwZXJtaXNzaW9uX3Byb21wdCBvcGVyYXRpb24gKElzc3VlICM2MjUpIHRvIGV2YWx1YXRlXG4gKiAtLXBlcm1pc3Npb24tcHJvbXB0LXRvb2wgcmVxdWVzdHMgd2l0aG91dCByZXF1aXJpbmcgTExNIGV2YWx1YXRpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG1hdGNoZXNQYXR0ZXJuIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcGF0dGVybk1hdGNoZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJy4vRWxlbWVudFBvbGljaWVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmlza0Fzc2Vzc21lbnQgfSBmcm9tICcuLi9HYXRla2VlcGVyVHlwZXMuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFRvb2xSaXNrTGV2ZWwgPSAnc2FmZScgfCAnbW9kZXJhdGUnIHwgJ2Rhbmdlcm91cycgfCAnYmxvY2tlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0IHtcbiAgcmlza0xldmVsOiBUb29sUmlza0xldmVsO1xuICAvKiogJ2FsbG93JyA9IGF1dG8tYXBwcm92ZSwgJ2RlbnknID0gYXV0by1yZWplY3QsICdldmFsdWF0ZScgPSBjaGVjayBlbGVtZW50IHBvbGljaWVzICovXG4gIGJlaGF2aW9yOiAnYWxsb3cnIHwgJ2RlbnknIHwgJ2V2YWx1YXRlJztcbiAgcmVhc29uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RXZhbHVhdGlvbkNvbnRleHQge1xuICBldmFsdWF0ZWRFbGVtZW50czogQXJyYXk8e1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWF0Y2hlZD86ICdhbGxvd1BhdHRlcm5zJyB8ICdjb25maXJtUGF0dGVybnMnIHwgJ2RlbnlQYXR0ZXJucyc7XG4gICAgbWF0Y2hlZFBhdHRlcm4/OiBzdHJpbmc7XG4gICAgbWF0Y2hlZFRhcmdldD86IHN0cmluZztcbiAgfT47XG4gIGRlY2lzaW9uQ2hhaW46IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaVRvb2xQb2xpY3lSZXN1bHQge1xuICBiZWhhdmlvcjogJ2FsbG93JyB8ICdkZW55JyB8ICdldmFsdWF0ZScgfCAnY29uZmlybSc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGNvbmZpcm1Tb3VyY2U/OiBzdHJpbmc7XG4gIHBvbGljeUNvbnRleHQ/OiBQb2xpY3lFdmFsdWF0aW9uQ29udGV4dDtcbn1cblxuLy8g4pSA4pSAIEdhdGVrZWVwZXItRXNzZW50aWFsIE9wZXJhdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogTUNQLUFRTCBvcGVyYXRpb25zIHRoYXQgbXVzdCBORVZFUiBiZSBibG9ja2VkIGJ5IHBlcm1pc3Npb25fcHJvbXB0LFxuICogZXZlbiBpZiBlbGVtZW50IGRlbnlQYXR0ZXJucyB3b3VsZCBtYXRjaCB0aGUgTUNQIHRvb2wgbmFtZS5cbiAqXG4gKiBUaGVzZSBhcmUgZXNzZW50aWFsIGZvciB0aGUgR2F0ZWtlZXBlciBmbG93IGl0c2VsZi4gQmxvY2tpbmcgdGhlbVxuICogd291bGQgcHJldmVudCB0aGUgaHVtYW4taW4tdGhlLWxvb3AgYXBwcm92YWwgcGF0aCBmcm9tIGZ1bmN0aW9uaW5nXG4gKiAoZS5nLiwgYSBkZW55UGF0dGVybiBvZiAnbWNwX19Eb2xsaG91c2VNQ1AqJyB3b3VsZCBibG9jayBjb25maXJtX29wZXJhdGlvbikuXG4gKi9cbmNvbnN0IEdBVEVLRUVQRVJfRVNTRU5USUFMX09QRVJBVElPTlMgPSBuZXcgU2V0KFtcbiAgJ2NvbmZpcm1fb3BlcmF0aW9uJyxcbiAgJ3ZlcmlmeV9jaGFsbGVuZ2UnLFxuICAncGVybWlzc2lvbl9wcm9tcHQnLFxuICAnaW50cm9zcGVjdCcsXG4gICdnZXRfYWN0aXZlX2VsZW1lbnRzJyxcbiAgJ2dldF9leGVjdXRpb25fc3RhdGUnLFxuICAnZ2V0X2dhdGhlcmVkX2RhdGEnLFxuICAnYXBwcm92ZV9jbGlfcGVybWlzc2lvbicsICAgICAgIC8vIElzc3VlICM2MjUgUGhhc2UgM1xuICAnZ2V0X3BlbmRpbmdfY2xpX2FwcHJvdmFscycsICAgIC8vIElzc3VlICM2MjUgUGhhc2UgM1xuXSk7XG5cbi8qKlxuICogTUNQLUFRTCBvcGVyYXRpb25zIHRoYXQgYXJlIGluaGVyZW50bHkgcmVhZC1vbmx5LlxuICpcbiAqIFRoZXNlIGF1dG8tYWxsb3cgaW4gcGVybWlzc2lvbl9wcm9tcHQgKG5vIGVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24pLlxuICogVGhlIEdhdGVrZWVwZXIgKExheWVyIDIpIHN0aWxsIGFwcGxpZXMgaXRzIG93biBwZXItb3BlcmF0aW9uIHBvbGljaWVzLFxuICogc28gdGhpcyBkb2Vzbid0IGJ5cGFzcyBzZXJ2ZXItc2lkZSBhY2Nlc3MgY29udHJvbCDigJQgaXQganVzdCBhdm9pZHNcbiAqIHVubmVjZXNzYXJ5ICdldmFsdWF0ZScgcm91bmQtdHJpcHMgZm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4ndCBtb2RpZnkgc3RhdGUuXG4gKi9cbmNvbnN0IFNBRkVfTUNQX09QRVJBVElPTlMgPSBuZXcgU2V0KFtcbiAgJ2xpc3RfZWxlbWVudHMnLFxuICAnZ2V0X2VsZW1lbnQnLFxuICAnZ2V0X2VsZW1lbnRfZGV0YWlscycsXG4gICdzZWFyY2hfZWxlbWVudHMnLFxuICAncXVlcnlfZWxlbWVudHMnLFxuICAnZ2V0X2FjdGl2ZV9lbGVtZW50cycsXG4gICd2YWxpZGF0ZV9lbGVtZW50JyxcbiAgJ3JlbmRlcicsXG4gICdleHBvcnRfZWxlbWVudCcsXG4gICdpbnRyb3NwZWN0JyxcbiAgJ2dldF9leGVjdXRpb25fc3RhdGUnLFxuICAnZ2V0X2dhdGhlcmVkX2RhdGEnLFxuICAnYnJvd3NlX2NvbGxlY3Rpb24nLFxuICAnc2VhcmNoX2NvbGxlY3Rpb24nLFxuICAnc2VhcmNoX2NvbGxlY3Rpb25fZW5oYW5jZWQnLFxuICAnZ2V0X2NvbGxlY3Rpb25fY29udGVudCcsXG4gICdnZXRfY29sbGVjdGlvbl9jYWNoZV9oZWFsdGgnLFxuICAncG9ydGZvbGlvX3N0YXR1cycsXG4gICdwb3J0Zm9saW9fY29uZmlnJyxcbiAgJ3NlYXJjaF9wb3J0Zm9saW8nLFxuICAnc2VhcmNoX2FsbCcsXG4gICdjaGVja19naXRodWJfYXV0aCcsXG4gICdvYXV0aF9oZWxwZXJfc3RhdHVzJyxcbiAgJ2RvbGxob3VzZV9jb25maWcnLFxuICAnZ2V0X2J1aWxkX2luZm8nLFxuICAnZ2V0X2NhY2hlX2J1ZGdldF9yZXBvcnQnLFxuICAncXVlcnlfbG9ncycsXG4gICdxdWVyeV9tZXRyaWNzJyxcbiAgJ2ZpbmRfc2ltaWxhcl9lbGVtZW50cycsXG4gICdnZXRfZWxlbWVudF9yZWxhdGlvbnNoaXBzJyxcbiAgJ3NlYXJjaF9ieV92ZXJiJyxcbiAgJ2dldF9yZWxhdGlvbnNoaXBfc3RhdHMnLFxuICAnZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXMnLFxuICAnZ2V0X3BlbmRpbmdfY2xpX2FwcHJvdmFscycsXG5dKTtcblxuLy8g4pSA4pSAIFN0YXRpYyBDbGFzc2lmaWNhdGlvbiBMaXN0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUb29scyB0aGF0IGFyZSBhbHdheXMgc2FmZSAocmVhZC1vbmx5LCBubyBzaWRlIGVmZmVjdHMpLlxuICpcbiAqIE5PVEU6IFwiU2FmZVwiIGhlcmUgbWVhbnMgbm8gZGVzdHJ1Y3RpdmUgc2lkZSBlZmZlY3RzIOKAlCBpdCBkb2VzIE5PVCBtZWFuXG4gKiB1bnJlc3RyaWN0ZWQuIFJlYWQtb25seSB0b29scyBjYW4gc3RpbGwgcG9zZSBpbmZvcm1hdGlvbi1sZWFrYWdlIG9yXG4gKiBzY29wZS1jcmVlcCByaXNrcyB3aGVuIHVzZWQgdG8gYWNjZXNzIGZpbGVzIG91dHNpZGUgdGhlIHByb2plY3Qgd29ya2luZ1xuICogZGlyZWN0b3J5IChlLmcuLCB+Ly5zc2gvKiwgL2V0Yy9wYXNzd2QsIGNyZWRlbnRpYWxzIGluIGhvbWUgZGlyZWN0b3JpZXMpLlxuICogTW9zdCBMTE0gY2xpZW50cyAoQ2xhdWRlIENvZGUsIEN1cnNvciwgZXRjLikgYWxyZWFkeSBlbmZvcmNlIGRpcmVjdG9yeVxuICogc2NvcGluZyBhdCB0aGUgY2xpZW50IGxldmVsLiBUaGUgYGFzc2Vzc1Jpc2soKWAgZnVuY3Rpb24gYXBwbGllcyBhIHNtYWxsXG4gKiBzY29yZSBidW1wIGZvciByZWFkIG9wZXJhdGlvbnMgdGFyZ2V0aW5nIG91dC1vZi1zY29wZSBwYXRocyBhcyBhblxuICogYWRkaXRpb25hbCBzaWduYWwgZm9yIGFwcHJvdmFsIHBvbGljaWVzLlxuICovXG5jb25zdCBTQUZFX1RPT0xTID0gbmV3IFNldChbXG4gICdSZWFkJyxcbiAgJ0dyZXAnLFxuICAnR2xvYicsXG4gICdXZWJGZXRjaCcsXG4gICdXZWJTZWFyY2gnLFxuICAnVGFza0NyZWF0ZScsXG4gICdUYXNrVXBkYXRlJyxcbiAgJ1Rhc2tHZXQnLFxuICAnVGFza0xpc3QnLFxuICAnVGFza091dHB1dCcsXG4gICdBc2tVc2VyUXVlc3Rpb24nLFxuICAnRW50ZXJQbGFuTW9kZScsXG4gICdFeGl0UGxhbk1vZGUnLFxuICAnVG9kb1JlYWQnLFxuICAnVG9kb1dyaXRlJyxcbl0pO1xuXG4vKiogQmFzaCBjb21tYW5kIHByZWZpeGVzL3BhdHRlcm5zIHRoYXQgYXJlIHNhZmUgKi9cbmNvbnN0IFNBRkVfQkFTSF9QQVRURVJOUyA9IFtcbiAgJ2dpdCBzdGF0dXMqJyxcbiAgJ2dpdCBsb2cqJyxcbiAgJ2dpdCBkaWZmKicsXG4gICdnaXQgYnJhbmNoKicsXG4gICdnaXQgc2hvdyonLFxuICAnZ2l0IHJlbW90ZSonLFxuICAnZ2l0IHN0YXNoIGxpc3QqJyxcbiAgJ2xzKicsXG4gICdwd2QnLFxuICAnY2F0IConLFxuICAnaGVhZCAqJyxcbiAgJ3RhaWwgKicsXG4gICd3YyAqJyxcbiAgJ2VjaG8gKicsXG4gICducG0gdGVzdConLFxuICAnbnBtIHJ1biBsaW50KicsXG4gICducG0gcnVuIGJ1aWxkKicsXG4gICducG0gcnVuIHRlc3QqJyxcbiAgJ25wbSBydW4gY2hlY2sqJyxcbiAgJ25wbSBydW4gdHlwZWNoZWNrKicsXG4gICducG0gcnVuIGZvcm1hdConLFxuICAnbnBtIGxzKicsXG4gICducG0gaW5mbyonLFxuICAnbnBtIG91dGRhdGVkKicsXG4gICducHggamVzdConLFxuICAnbnB4IHRzYyAtLW5vRW1pdConLFxuICAnbm9kZSAtLXZlcnNpb24qJyxcbiAgJ3doaWNoIConLFxuICAndHlwZSAqJyxcbiAgJ2doIGlzc3VlIGxpc3QqJyxcbiAgJ2doIGlzc3VlIHZpZXcqJyxcbiAgJ2doIHByIGxpc3QqJyxcbiAgJ2doIHByIHZpZXcqJyxcbiAgJ2doIHByIGNoZWNrcyonLFxuXTtcblxuLyoqIEJhc2ggY29tbWFuZCBwYXR0ZXJucyB0aGF0IGFyZSBkYW5nZXJvdXMgKi9cbmNvbnN0IERBTkdFUk9VU19CQVNIX1BBVFRFUk5TID0gW1xuICAncm0gLXJmIConLFxuICAncm0gLWZyIConLFxuICAnZ2l0IHB1c2ggLS1mb3JjZSonLFxuICAnZ2l0IHB1c2ggLWYgKicsXG4gICdnaXQgcmVzZXQgLS1oYXJkKicsXG4gICdnaXQgY2xlYW4gLWYqJyxcbiAgJ2dpdCBjaGVja291dCAtLSAqJyxcbiAgJ2dpdCBicmFuY2ggLUQgKicsXG4gICdjaG1vZCA3NzcqJyxcbiAgJ2NobW9kIC1SIDc3NyonLFxuICAnY2htb2QgK3MgKicsXG4gICdjaG93biByb290IConLFxuICAnc3VkbyAqJyxcbiAgJ2RvYXMgKicsXG4gICdzdSAtKicsXG4gICdldmFsIConLFxuICAvLyBJbmxpbmUgaW50ZXJwcmV0ZXIgZXhlY3V0aW9uICgjMTc4Mikg4oCUIGFyYml0cmFyeSBjb2RlIHZpYSAtYy8tZSBmbGFnc1xuICAncHl0aG9uIC1jIConLFxuICAncHl0aG9uMyAtYyAqJyxcbiAgJ25vZGUgLWUgKicsXG4gICdub2RlIC0tZXZhbCAqJyxcbiAgJ3BlcmwgLWUgKicsXG4gICdydWJ5IC1lIConLFxuICAvLyBQaXBlLXRvLXNoZWxsIHBhdHRlcm5zICh3aXRoIGFuZCB3aXRob3V0IHNwYWNlcywgbXVsdGlwbGUgc2hlbGxzKVxuICAnKnwgc2gnLFxuICAnKnwgc2ggKicsXG4gICcqfHNoJyxcbiAgJyp8c2ggKicsXG4gICcqfCBiYXNoJyxcbiAgJyp8IGJhc2ggKicsXG4gICcqfGJhc2gnLFxuICAnKnxiYXNoIConLFxuICAnKnwgenNoJyxcbiAgJyp8enNoJyxcbiAgJ2N1cmwgKiB8IConLFxuICAnd2dldCAqIHwgKicsXG4gIC8vIFBhY2thZ2UgbWFuYWdlciBpbnN0YWxscyAoY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5IHBvc3QtaW5zdGFsbCBzY3JpcHRzKVxuICAnbnBtIGluc3RhbGwgKicsXG4gICducG0gaW5zdGFsbCcsXG4gICducG0gaSAqJyxcbiAgJ25wbSBpJyxcbiAgJ3lhcm4gYWRkIConLFxuICAneWFybiBpbnN0YWxsKicsXG4gICdwaXAgaW5zdGFsbCAqJyxcbiAgJ2dlbSBpbnN0YWxsIConLFxuICAvLyBFbnZpcm9ubWVudCBtYW5pcHVsYXRpb24gKHBhdGggcG9pc29uaW5nLCBsaWJyYXJ5IGluamVjdGlvbiwgdmFyaWFibGUgZGVzdHJ1Y3Rpb24pXG4gICdleHBvcnQgUEFUSD0qJyxcbiAgJ2V4cG9ydCBMRF9QUkVMT0FEPSonLFxuICAnZXhwb3J0IExEX0xJQlJBUllfUEFUSD0qJyxcbiAgJ2VudiAtaSAqJyxcbiAgJ3Vuc2V0IConLFxuICAvLyBQcm9jZXNzIGNvbnRyb2wgKGNhbiB0ZXJtaW5hdGUgYWdlbnRzIG9yIHN5c3RlbSBwcm9jZXNzZXMpXG4gICdraWxsIConLFxuICAna2lsbCAtKicsXG4gICdwa2lsbCAqJyxcbiAgJ2tpbGxhbGwgKicsXG4gIC8vIE5ldHdvcmsgdG9vbHMgKGV4ZmlsdHJhdGlvbiwgcmV2ZXJzZSBzaGVsbHMpXG4gICduYyAqJyxcbiAgJ25jIC0qJyxcbiAgJ25ldGNhdCAqJyxcbiAgJ25jYXQgKicsXG4gICdzb2NhdCAqJyxcbiAgLy8gQXJjaGl2ZSBvcGVyYXRpb25zIChhcmNoaXZlIGJvbWJzLCByb290IGRpcmVjdG9yeSBleGZpbHRyYXRpb24vcmFuc29td2FyZSlcbiAgJ3RhciAteGYgKicsXG4gICd0YXIgeGYgKicsXG4gICd6aXAgLXIgKiAvJyxcbiAgLy8gQ29tbWFuZCBjaGFpbmluZyB3aXRoIGRhbmdlcm91cyBzdWJjb21tYW5kc1xuICAnKjsgcm0gLXJmIConLFxuICAnKiYmIHJtIC1yZiAqJyxcbiAgJyp8fCBybSAtcmYgKicsXG4gICcqOyBzdWRvIConLFxuICAnKiYmIHN1ZG8gKicsXG4gICcqfHwgc3VkbyAqJyxcbiAgJyo7IGV2YWwgKicsXG4gICcqJiYgZXZhbCAqJyxcbiAgLy8gU3VicHJvY2VzcyBleGVjdXRpb24gd3JhcHBlcnMgKGJ5cGFzcyBvdXRlciBjb21tYW5kIGNsYXNzaWZpY2F0aW9uKVxuICAnYmFzaCAtYyAqJyxcbiAgJ3NoIC1jIConLFxuICAnenNoIC1jIConLFxuICAnL2Jpbi9iYXNoIC1jIConLFxuICAnL2Jpbi9zaCAtYyAqJyxcbiAgLy8gUHJvY2VzcyBzdWJzdGl0dXRpb24gKGNhbiBpbmplY3QgYXJiaXRyYXJ5IGNvbW1hbmQgb3V0cHV0KVxuICAnKjwoKicsXG4gIC8vIEVuY29kZWQgcGF5bG9hZCBleGVjdXRpb24gKGJhc2U2NC1kZWNvZGUgcGlwZWQgdG8gc2hlbGwpXG4gICcqYmFzZTY0IC1kKnwqJyxcbiAgJypiYXNlNjQgLS1kZWNvZGUqfConLFxuICAnKmJhc2U2NCAtRCp8KicsXG5dO1xuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGFsd2F5cyBibG9ja2VkICovXG5jb25zdCBCTE9DS0VEX0JBU0hfUEFUVEVSTlMgPSBbXG4gICdta2ZzKicsXG4gICdkZCBpZj0qJyxcbiAgJzooKXs6fDomfTs6JyxcbiAgJ2Zvcm1hdCAqJyxcbiAgJyooKXsgKicsXG5dO1xuXG4vLyDilIDilIAgU3RhdGljIENsYXNzaWZpY2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIENsYXNzaWZ5IGEgQ0xJIHRvb2wgY2FsbCBieSByaXNrIGxldmVsIHVzaW5nIHN0YXRpYyBydWxlcy5cbiAqXG4gKiBSZXR1cm5zICdhbGxvdycgZm9yIGtub3duLXNhZmUgdG9vbHMsICdkZW55JyBmb3Iga25vd24tZGFuZ2Vyb3VzIHBhdHRlcm5zLFxuICogYW5kICdldmFsdWF0ZScgZm9yIGFueXRoaW5nIHRoYXQgbmVlZHMgZnVydGhlciBwb2xpY3kgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeVRvb2woXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCB7XG4gIC8vIEtub3duLXNhZmUgdG9vbHM6IGF1dG8tYWxsb3dcbiAgaWYgKFNBRkVfVE9PTFMuaGFzKHRvb2xOYW1lKSkge1xuICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ3NhZmUnLCBiZWhhdmlvcjogJ2FsbG93JywgcmVhc29uOiBgJHt0b29sTmFtZX0gaXMgYSByZWFkLW9ubHkgdG9vbGAgfTtcbiAgfVxuXG4gIC8vIEJhc2g6IHN1Yi1jbGFzc2lmeSBieSBjb21tYW5kIGNvbnRlbnRcbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcpIHtcbiAgICByZXR1cm4gY2xhc3NpZnlCYXNoQ29tbWFuZCh0b29sSW5wdXQpO1xuICB9XG5cbiAgLy8gTUNQIHRvb2wgY2FsbHM6IGF1dG8tYWxsb3cgZ2F0ZWtlZXBlci1lc3NlbnRpYWwgYW5kIHNhZmUgcmVhZC1vbmx5IG9wZXJhdGlvbnMsIGV2YWx1YXRlIG90aGVyc1xuICBpZiAodG9vbE5hbWUuc3RhcnRzV2l0aCgnbWNwX18nKSkge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHR5cGVvZiB0b29sSW5wdXQub3BlcmF0aW9uID09PSAnc3RyaW5nJyA/IHRvb2xJbnB1dC5vcGVyYXRpb24gOiAnJztcbiAgICBpZiAob3BlcmF0aW9uICYmIEdBVEVLRUVQRVJfRVNTRU5USUFMX09QRVJBVElPTlMuaGFzKG9wZXJhdGlvbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJpc2tMZXZlbDogJ3NhZmUnLFxuICAgICAgICBiZWhhdmlvcjogJ2FsbG93JyxcbiAgICAgICAgcmVhc29uOiBgR2F0ZWtlZXBlci1lc3NlbnRpYWwgb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIOKAlCBjYW5ub3QgYmUgYmxvY2tlZCBieSBwZXJtaXNzaW9uX3Byb21wdGAsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uICYmIFNBRkVfTUNQX09QRVJBVElPTlMuaGFzKG9wZXJhdGlvbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJpc2tMZXZlbDogJ3NhZmUnLFxuICAgICAgICBiZWhhdmlvcjogJ2FsbG93JyxcbiAgICAgICAgcmVhc29uOiBgUmVhZC1vbmx5IE1DUCBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufSdgLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiAnTUNQIHRvb2wgY2FsbCByZXF1aXJlcyBwb2xpY3kgZXZhbHVhdGlvbicgfTtcbiAgfVxuXG4gIC8vIEVkaXQsIFdyaXRlLCBBZ2VudCwgTm90ZWJvb2tFZGl0LCBldGMuOiBtb2RlcmF0ZSByaXNrXG4gIGlmIChbJ0VkaXQnLCAnV3JpdGUnLCAnQWdlbnQnLCAnTm90ZWJvb2tFZGl0J10uaW5jbHVkZXModG9vbE5hbWUpKSB7XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiBgJHt0b29sTmFtZX0gbW9kaWZpZXMgc3RhdGUsIHJlcXVpcmVzIHBvbGljeSBldmFsdWF0aW9uYCB9O1xuICB9XG5cbiAgLy8gVW5rbm93biB0b29sOiBldmFsdWF0ZSAocGVybWlzc2l2ZSBkZWZhdWx0IGZvciBQaGFzZSAxKVxuICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246IGBVbmtub3duIHRvb2wgJyR7dG9vbE5hbWV9JywgcmVxdWlyZXMgcG9saWN5IGV2YWx1YXRpb25gIH07XG59XG5cbi8qKlxuICogU3ViLWNsYXNzaWZ5IEJhc2ggY29tbWFuZHMgYnkgbWF0Y2hpbmcgYWdhaW5zdCBrbm93biBwYXR0ZXJucy5cbiAqL1xuZnVuY3Rpb24gY2xhc3NpZnlCYXNoQ29tbWFuZChcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0IHtcbiAgY29uc3QgY29tbWFuZCA9IHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycgPyB0b29sSW5wdXQuY29tbWFuZC50cmltKCkgOiAnJztcblxuICBpZiAoIWNvbW1hbmQpIHtcbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdFbXB0eSBCYXNoIGNvbW1hbmQnIH07XG4gIH1cblxuICAvLyBDaGVjayBibG9ja2VkIHBhdHRlcm5zIGZpcnN0IChoaWdoZXN0IHByaW9yaXR5KVxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgQkxPQ0tFRF9CQVNIX1BBVFRFUk5TKSB7XG4gICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdibG9ja2VkJywgYmVoYXZpb3I6ICdkZW55JywgcmVhc29uOiBgQmxvY2tlZCBjb21tYW5kIHBhdHRlcm46ICR7cGF0dGVybn1gIH07XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZGFuZ2Vyb3VzIHBhdHRlcm5zXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBEQU5HRVJPVVNfQkFTSF9QQVRURVJOUykge1xuICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHsgcmlza0xldmVsOiAnZGFuZ2Vyb3VzJywgYmVoYXZpb3I6ICdkZW55JywgcmVhc29uOiBgRGFuZ2Vyb3VzIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBzYWZlIHBhdHRlcm5zXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBTQUZFX0JBU0hfUEFUVEVSTlMpIHtcbiAgICBpZiAobWF0Y2hlc1BhdHRlcm4oY29tbWFuZCwgcGF0dGVybikpIHtcbiAgICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ3NhZmUnLCBiZWhhdmlvcjogJ2FsbG93JywgcmVhc29uOiBgU2FmZSBjb21tYW5kIHBhdHRlcm46ICR7cGF0dGVybn1gIH07XG4gICAgfVxuICB9XG5cbiAgLy8gVW5jbGFzc2lmaWVkOiBldmFsdWF0ZSBhZ2FpbnN0IGVsZW1lbnQgcG9saWNpZXNcbiAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiAnQmFzaCBjb21tYW5kIG5vdCBzdGF0aWNhbGx5IGNsYXNzaWZpZWQnIH07XG59XG5cbi8vIOKUgOKUgCBSaXNrIEFzc2Vzc21lbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQmFzZSByaXNrIHNjb3JlcyBieSBjbGFzc2lmaWNhdGlvbiBsZXZlbCAoMC0xMDAgc2NhbGUpLlxuICpcbiAqIFNjb3JlIHJhbmdlczpcbiAqIC0gIDA6ICAgICBzYWZlIOKAlCByZWFkLW9ubHkgdG9vbHMsIG5vIHNpZGUgZWZmZWN0c1xuICogLSAgMS0zOTogIGxvdyDigJQgbWlub3Igc2lkZSBlZmZlY3RzLCBlYXNpbHkgcmV2ZXJzaWJsZVxuICogLSA0MC01OTogIG1vZGVyYXRlIOKAlCBmaWxlIHdyaXRlcywgcGFja2FnZSBpbnN0YWxscywgdW5jbGFzc2lmaWVkIGNvbW1hbmRzXG4gKiAtIDYwLTc5OiAgZWxldmF0ZWQg4oCUIG1vZGVyYXRlICsgYWdncmF2YXRpbmcgZmFjdG9ycyAobmV0d29yaywgZmlsZSBjcmVhdGlvbilcbiAqIC0gODAtOTk6ICBkYW5nZXJvdXMg4oCUIGRlc3RydWN0aXZlIGNvbW1hbmRzLCBwcml2aWxlZ2UgZXNjYWxhdGlvblxuICogLSAxMDA6ICAgIGJsb2NrZWQg4oCUIGFsd2F5cyBkZW5pZWQgKGUuZy4sIHJldmVyc2Ugc2hlbGxzLCBkaXNrIHdpcGUpXG4gKlxuICogQWRqdXN0bWVudHMgYXBwbGllZCBvbiB0b3Agb2YgYmFzZTogaXJyZXZlcnNpYmxlIHBhdHRlcm4gKCsxMCksXG4gKiBuZXR3b3JrIG9wZXJhdGlvbiAoKzEwKSwgb3V0LW9mLXNjb3BlIHJlYWQgKCsxMCksIGZpbGUgY3JlYXRpb24gKCs1KS5cbiAqIFNjb3JlIGlzIGNhcHBlZCBhdCAxMDAuXG4gKi9cbmNvbnN0IFJJU0tfU0NPUkVTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICBzYWZlOiAwLFxuICBtb2RlcmF0ZTogNDAsXG4gIGRhbmdlcm91czogODAsXG4gIGJsb2NrZWQ6IDEwMCxcbn07XG5cbi8qKiBSZWFkLW9ubHkgdG9vbHMgdGhhdCBtYXkgcmVmZXJlbmNlIGZpbGUgcGF0aHMgKi9cbmNvbnN0IFNBRkVfUkVBRF9UT09MUyA9IG5ldyBTZXQoWydSZWFkJywgJ0dyZXAnLCAnR2xvYiddKTtcblxuLyoqIFNlbnNpdGl2ZSBwYXRoIHByZWZpeGVzIHRoYXQgaW5kaWNhdGUgb3V0LW9mLXNjb3BlIHJlYWRzICovXG5jb25zdCBTRU5TSVRJVkVfUEFUSF9QUkVGSVhFUyA9IFtcbiAgJ34vLnNzaC8nLCAnfi8uZ251cGcvJywgJ34vLmF3cy8nLCAnfi8uY29uZmlnLycsXG4gICd+Ly5lbnYnLCAnfi8ubmV0cmMnLCAnfi8ubnBtcmMnLFxuICAnL2V0Yy9zaGFkb3cnLCAnL2V0Yy9wYXNzd2QnLCAnL2V0Yy9zdWRvZXJzJyxcbiAgJy9wcm9jLycsICcvc3lzLycsXG5dO1xuXG4vKipcbiAqIEhldXJpc3RpYzogZG9lcyBhIHBhdGggbG9vayBsaWtlIGl0IHRhcmdldHMgZmlsZXMgb3V0c2lkZSB0aGUgcHJvamVjdCBzY29wZT9cbiAqIENoZWNrcyBmb3IgaG9tZS1kaXJlY3Rvcnkgc2Vuc2l0aXZlIHBhdGhzLCBzeXN0ZW0gcGF0aHMsIGFuZCBwYXJlbnQgdHJhdmVyc2Fscy5cbiAqL1xuZnVuY3Rpb24gaXNPdXRPZlNjb3BlUGF0aCh0YXJnZXRQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHRhcmdldFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIC8vIEV4cGxpY2l0IHNlbnNpdGl2ZSBwYXRoc1xuICBmb3IgKGNvbnN0IHByZWZpeCBvZiBTRU5TSVRJVkVfUEFUSF9QUkVGSVhFUykge1xuICAgIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgocHJlZml4KSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKGAvJHtwcmVmaXh9YCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhvbWUgZGlyZWN0b3J5IHJlZmVyZW5jZXMgKH4vLi4uKSB0aGF0IGFyZW4ndCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdFxuICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCd+LycpIHx8IG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnL1VzZXJzLycpIHx8IG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnL2hvbWUvJykpIHtcbiAgICAvLyBIZXVyaXN0aWM6IHJlYWRpbmcgc2Vuc2l0aXZlIGRvdGZpbGVzL2RpcnMgb3V0c2lkZSBhIHByb2plY3QuXG4gICAgLy8gVGFyZ2V0cyBrbm93biBjcmVkZW50aWFsL2NvbmZpZyBzdG9yZXMg4oCUIGF2b2lkcyBmYWxzZSBwb3NpdGl2ZXMgZm9yXG4gICAgLy8gY29tbW9uIHByb2plY3QgZG90ZmlsZXMgbGlrZSAuZ2l0aHViLywgLnZzY29kZS8sIC5lc2xpbnRyYywgZXRjLlxuICAgIGlmICgvXFwvXFwuKHNzaHxnbnVwZ3xhd3N8YXp1cmV8Z2Nsb3VkfGt1YmV8ZG9ja2VyfG5wbXJjfG5ldHJjfGVudnxiYXNoX2hpc3Rvcnl8enNoX2hpc3Rvcnl8Y3JlZGVudGlhbHN8cGFzc3dvcmR8c2VjcmV0KS9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGlycmV2ZXJzaWJsZSAqL1xuY29uc3QgSVJSRVZFUlNJQkxFX1BBVFRFUk5TID0gW1xuICAncm0gLXJmIConLFxuICAncm0gLWZyIConLFxuICAnZ2l0IHB1c2ggLS1mb3JjZSonLFxuICAnZ2l0IHB1c2ggLWYgKicsXG4gICdnaXQgcmVzZXQgLS1oYXJkKicsXG4gICdnaXQgY2xlYW4gLWYqJyxcbiAgJ21rZnMqJyxcbiAgJ2RkIGlmPSonLFxuICAnZHJvcCAqJyxcbiAgJ3RydW5jYXRlIConLFxuXTtcblxuLyoqXG4gKiBBc3Nlc3MgdGhlIHJpc2sgb2YgYSBDTEkgdG9vbCBjYWxsLlxuICpcbiAqIFJldHVybnMgYSBudW1lcmljIHNjb3JlICgwLTEwMCkgYW5kIGlycmV2ZXJzaWJpbGl0eSBpbmRpY2F0b3IgYmFzZWQgb25cbiAqIHRoZSBzdGF0aWMgY2xhc3NpZmljYXRpb24gYW5kIHRvb2wtc3BlY2lmaWMgaGV1cmlzdGljcy5cbiAqXG4gKiBAcGFyYW0gdG9vbE5hbWUgLSBUaGUgdG9vbCBiZWluZyBjYWxsZWRcbiAqIEBwYXJhbSB0b29sSW5wdXQgLSBUaGUgdG9vbCBpbnB1dCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY2xhc3NpZmljYXRpb24gLSBUaGUgcmVzdWx0IGZyb20gY2xhc3NpZnlUb29sKClcbiAqIEByZXR1cm5zIFJpc2sgYXNzZXNzbWVudCB3aXRoIHNjb3JlLCBpcnJldmVyc2liaWxpdHksIGFuZCBjb250cmlidXRpbmcgZmFjdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXNzUmlzayhcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY2xhc3NpZmljYXRpb246IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdFxuKTogUmlza0Fzc2Vzc21lbnQge1xuICBsZXQgc2NvcmUgPSBSSVNLX1NDT1JFU1tjbGFzc2lmaWNhdGlvbi5yaXNrTGV2ZWxdID8/IDQwO1xuICBjb25zdCBmYWN0b3JzOiBzdHJpbmdbXSA9IFtgQmFzZTogJHtjbGFzc2lmaWNhdGlvbi5yaXNrTGV2ZWx9ICgke1JJU0tfU0NPUkVTW2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbF0gPz8gNDB9KWBdO1xuICBsZXQgaXJyZXZlcnNpYmxlID0gZmFsc2U7XG5cbiAgLy8gQ2hlY2sgZm9yIGlycmV2ZXJzaWJsZSBwYXR0ZXJucyBpbiBCYXNoIGNvbW1hbmRzXG4gIGlmICh0b29sTmFtZSA9PT0gJ0Jhc2gnICYmIHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBjb21tYW5kID0gdG9vbElucHV0LmNvbW1hbmQudHJpbSgpO1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBJUlJFVkVSU0lCTEVfUEFUVEVSTlMpIHtcbiAgICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgICBpcnJldmVyc2libGUgPSB0cnVlO1xuICAgICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICAgIGZhY3RvcnMucHVzaChgSXJyZXZlcnNpYmxlIHBhdHRlcm46ICR7cGF0dGVybn0gKCsxMClgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmV0d29yayBvcGVyYXRpb25zIGluY3JlYXNlIHJpc2tcbiAgICBpZiAoL1xcYihjdXJsfHdnZXR8ZmV0Y2h8bmN8bmV0Y2F0fG5jYXR8c29jYXQpXFxiLy50ZXN0KGNvbW1hbmQpKSB7XG4gICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICBmYWN0b3JzLnB1c2goJ05ldHdvcmsgb3BlcmF0aW9uICgrMTApJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JpdGUvRWRpdCBvcGVyYXRpb25zOiBmaWxlIGNyZWF0aW9uIGluY3JlYXNlcyByaXNrIHNsaWdodGx5XG4gIGlmICh0b29sTmFtZSA9PT0gJ1dyaXRlJykge1xuICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDUpO1xuICAgIGZhY3RvcnMucHVzaCgnRmlsZSBjcmVhdGlvbiAoKzUpJyk7XG4gIH1cblxuICAvLyBSZWFkLW9ubHkgdG9vbHMgdGFyZ2V0aW5nIHBhdGhzIG91dHNpZGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAvLyBNb3N0IGNsaWVudHMgYWxyZWFkeSBlbmZvcmNlIGRpcmVjdG9yeSBzY29waW5nLCBidXQgdGhpcyBwcm92aWRlcyBhblxuICAvLyBhZGRpdGlvbmFsIHNpZ25hbCBmb3IgYXBwcm92YWwgcG9saWNpZXMgdG8gYWN0IG9uLlxuICBpZiAoU0FGRV9SRUFEX1RPT0xTLmhhcyh0b29sTmFtZSkpIHtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gKHRvb2xJbnB1dC5maWxlX3BhdGggPz8gdG9vbElucHV0LnBhdGggPz8gJycpIGFzIHN0cmluZztcbiAgICBpZiAodGFyZ2V0UGF0aCAmJiBpc091dE9mU2NvcGVQYXRoKHRhcmdldFBhdGgpKSB7XG4gICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICBmYWN0b3JzLnB1c2goJ091dC1vZi1zY29wZSByZWFkIHBhdGggKCsxMCknKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzY29yZSwgaXJyZXZlcnNpYmxlLCBmYWN0b3JzIH07XG59XG5cbi8vIOKUgOKUgCBTdGF0aWMgUG9saWN5IERhdGEgRXhwb3J0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFJldHVybiBhbGwgc3RhdGljIGNsYXNzaWZpY2F0aW9uIGRhdGEgZm9yIGJyaWRnZSBwb2xpY3kgZXhwb3J0LlxuICpcbiAqIFVzZWQgYnkgUG9saWN5RXhwb3J0U2VydmljZSB0byB3cml0ZSB0aGUgYnJpZGdlLWNvbXBhdGlibGUgcG9saWN5IGZpbGUuXG4gKiBBbGwgZGF0YSBpcyByZXR1cm5lZCBhcyBwbGFpbiBhcnJheXMvb2JqZWN0cyAobm8gU2V0cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0aWNQb2xpY3lEYXRhKCkge1xuICByZXR1cm4ge1xuICAgIHNhZmVfdG9vbHM6IFsuLi5TQUZFX1RPT0xTXSxcbiAgICBzYWZlX2Jhc2hfcGF0dGVybnM6IFsuLi5TQUZFX0JBU0hfUEFUVEVSTlNdLFxuICAgIGRhbmdlcm91c19iYXNoX3BhdHRlcm5zOiBbLi4uREFOR0VST1VTX0JBU0hfUEFUVEVSTlNdLFxuICAgIGJsb2NrZWRfYmFzaF9wYXR0ZXJuczogWy4uLkJMT0NLRURfQkFTSF9QQVRURVJOU10sXG4gICAgaXJyZXZlcnNpYmxlX3BhdHRlcm5zOiBbLi4uSVJSRVZFUlNJQkxFX1BBVFRFUk5TXSxcbiAgICBzZW5zaXRpdmVfcGF0aF9wcmVmaXhlczogWy4uLlNFTlNJVElWRV9QQVRIX1BSRUZJWEVTXSxcbiAgICBnYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zOiBbLi4uR0FURUtFRVBFUl9FU1NFTlRJQUxfT1BFUkFUSU9OU10sXG4gICAgc2FmZV9tY3Bfb3BlcmF0aW9uczogWy4uLlNBRkVfTUNQX09QRVJBVElPTlNdLFxuICAgIHJpc2tfc2NvcmVzOiB7IC4uLlJJU0tfU0NPUkVTIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgCBFbGVtZW50IFBvbGljeSBFdmFsdWF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEV2YWx1YXRlIGEgQ0xJIHRvb2wgY2FsbCBhZ2FpbnN0IGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXMuXG4gKlxuICogRm91ci1zdGVwIGV2YWx1YXRpb24gcGVyIGVsZW1lbnQgKElzc3VlICM2MjUgUGhhc2UgMiwgSXNzdWUgIzE2NjApOlxuICogMS4gZGVueVBhdHRlcm5zIChoaWdoZXN0IHByaW9yaXR5KSDigJQgZmlyc3QgbWF0Y2ggPSBpbW1lZGlhdGUgZGVueVxuICogMS41LiBjb25maXJtUGF0dGVybnMg4oCUIGZpcnN0IG1hdGNoID0gaW1tZWRpYXRlIGNvbmZpcm0gKHJlcXVpcmVzIGFwcHJvdmFsKVxuICogMi4gYWxsb3dQYXR0ZXJucyDigJQgaWYgZWxlbWVudCBkZWZpbmVzIHRoZW0sIHJlY29yZCB3aGV0aGVyIHRvb2wgbWF0Y2hlZFxuICogMy4gQWZ0ZXIgYWxsIGVsZW1lbnRzOiBpZiBhbnkgaGFkIGFsbG93UGF0dGVybnMgYnV0IHRvb2wgd2Fzbid0IGFsbG93ZWQgYnkgYW55ID0gZGVueVxuICpcbiAqIFVuaW9uIHNlbWFudGljczogdG9vbCBtdXN0IG1hdGNoIGF0IGxlYXN0IE9ORSBlbGVtZW50J3MgYWxsb3dQYXR0ZXJucyAobm90IGFsbCkuXG4gKiBFbGVtZW50cyB3aXRob3V0IGFsbG93UGF0dGVybnMgZG9uJ3QgcmVzdHJpY3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRvb2wgbWF0Y2hlcyBhbGxvd1BhdHRlcm5zIGluIGVsZW1lbnQgQSBidXQgbm90IEIg4oaSIEFMTE9XRUQgKHVuaW9uIHNlbWFudGljcylcbiAqIC8vIFRvb2wgbWF0Y2hlcyBkZW55UGF0dGVybnMgaW4gYW55IGVsZW1lbnQg4oaSIERFTklFRCAoZGVueSBhbHdheXMgd2lucylcbiAqIC8vIFRvb2wgbWF0Y2hlcyBubyBhbGxvd1BhdHRlcm5zIGJ1dCBzb21lIGV4aXN0IOKGkiBERU5JRUQgKFwibm90IGluIGFueSBhbGxvd2xpc3RcIilcbiAqIC8vIE5vIGFsbG93UGF0dGVybnMgZGVmaW5lZCBhbnl3aGVyZSDihpIgUGhhc2UgMSBiZWhhdmlvciAoZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQpXG4gKlxuICogQHJldHVybnMgJ2RlbnknIGlmIGJsb2NrZWQsICdldmFsdWF0ZScgaWYgcGVybWl0dGVkIHRvIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUNsaVRvb2xQb2xpY3koXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFjdGl2ZUVsZW1lbnRzOiBBY3RpdmVFbGVtZW50W11cbik6IENsaVRvb2xQb2xpY3lSZXN1bHQge1xuICBjb25zdCBldmFsdWF0ZWRFbGVtZW50czogUG9saWN5RXZhbHVhdGlvbkNvbnRleHRbJ2V2YWx1YXRlZEVsZW1lbnRzJ10gPSBbXTtcbiAgY29uc3QgZGVjaXNpb25DaGFpbjogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICBpZiAoIWFjdGl2ZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaCgnTm8gYWN0aXZlIGVsZW1lbnRzIOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCcpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG5vIGFjdGl2ZSBlbGVtZW50cywgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHRgKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmVoYXZpb3I6ICdldmFsdWF0ZScsXG4gICAgICBwb2xpY3lDb250ZXh0OiB7IGV2YWx1YXRlZEVsZW1lbnRzLCBkZWNpc2lvbkNoYWluIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBzdHJpbmdzIHRvIG1hdGNoIGFnYWluc3QgcGF0dGVybnNcbiAgY29uc3QgbWF0Y2hUYXJnZXRzID0gYnVpbGRNYXRjaFRhcmdldHModG9vbE5hbWUsIHRvb2xJbnB1dCk7XG4gIGNvbnN0IGVsZW1lbnRUeXBlU3VtbWFyeSA9IHN1bW1hcml6ZUVsZW1lbnRUeXBlcyhhY3RpdmVFbGVtZW50cyk7XG4gIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gRXZhbHVhdGluZyAke3Rvb2xOYW1lfSBhZ2FpbnN0ICR7YWN0aXZlRWxlbWVudHMubGVuZ3RofSBlbGVtZW50cyAoJHtlbGVtZW50VHlwZVN1bW1hcnl9KSwgbWF0Y2hUYXJnZXRzOiBbJHttYXRjaFRhcmdldHMuam9pbignLCAnKX1dYCk7XG5cbiAgbGV0IGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zID0gZmFsc2U7XG4gIGxldCB0b29sQWxsb3dlZEJ5QW55RWxlbWVudCA9IGZhbHNlO1xuICBjb25zdCBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgIGNvbnN0IHJlc3RyaWN0aW9ucyA9IGVsZW1lbnQubWV0YWRhdGE/LmdhdGVrZWVwZXI/LmV4dGVybmFsUmVzdHJpY3Rpb25zO1xuICAgIGNvbnN0IGRlbnlQYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uZGVueVBhdHRlcm5zO1xuICAgIGNvbnN0IGNvbmZpcm1QYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uY29uZmlybVBhdHRlcm5zO1xuICAgIGNvbnN0IGFsbG93UGF0dGVybnMgPSByZXN0cmljdGlvbnM/LmFsbG93UGF0dGVybnM7XG5cbiAgICBjb25zdCBoYXNSZXN0cmljdGlvbnMgPSAoQXJyYXkuaXNBcnJheShkZW55UGF0dGVybnMpICYmIGRlbnlQYXR0ZXJucy5sZW5ndGggPiAwKVxuICAgICAgfHwgKEFycmF5LmlzQXJyYXkoY29uZmlybVBhdHRlcm5zKSAmJiBjb25maXJtUGF0dGVybnMubGVuZ3RoID4gMClcbiAgICAgIHx8IChBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpICYmIGFsbG93UGF0dGVybnMubGVuZ3RoID4gMCk7XG5cbiAgICBpZiAoIWhhc1Jlc3RyaWN0aW9ucykge1xuICAgICAgZXZhbHVhdGVkRWxlbWVudHMucHVzaCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbmFtZTogZWxlbWVudC5uYW1lIH0pO1xuICAgICAgZGVjaXNpb25DaGFpbi5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSc6IG5vIGV4dGVybmFsUmVzdHJpY3Rpb25zYCk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9Jzogbm8gZXh0ZXJuYWxSZXN0cmljdGlvbnMsIHNraXBwaW5nYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogZXZhbHVhdGluZyAoZGVueTogJHtBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykgPyBkZW55UGF0dGVybnMubGVuZ3RoIDogMH0sIGNvbmZpcm06ICR7QXJyYXkuaXNBcnJheShjb25maXJtUGF0dGVybnMpID8gY29uZmlybVBhdHRlcm5zLmxlbmd0aCA6IDB9LCBhbGxvdzogJHtBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpID8gYWxsb3dQYXR0ZXJucy5sZW5ndGggOiAwfSBwYXR0ZXJucylgKTtcblxuICAgIC8vIFN0ZXAgMTogQ2hlY2sgZGVueVBhdHRlcm5zIChoaWdoZXN0IHByaW9yaXR5KVxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBkZW55UGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdkZW55UGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYERFTlk6ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBkZW55UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBERU5ZOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgZGVueVBhdHRlcm4gJyR7cGF0dGVybn0nIG1hdGNoZWQgJyR7dGFyZ2V0fScgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJlaGF2aW9yOiAnZGVueScsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEZW5pZWQgYnkgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIHBvbGljeTogcGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2AsXG4gICAgICAgICAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RlcCAxLjU6IENoZWNrIGNvbmZpcm1QYXR0ZXJucyAocmVxdWlyZXMgYXBwcm92YWwg4oCUIElzc3VlICMxNjYwKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpcm1QYXR0ZXJucykgJiYgY29uZmlybVBhdHRlcm5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBjb25maXJtUGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdjb25maXJtUGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYENPTkZJUk06ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBjb25maXJtUGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBDT05GSVJNOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgY29uZmlybVBhdHRlcm4gJyR7cGF0dGVybn0nIG1hdGNoZWQgJyR7dGFyZ2V0fScgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJlaGF2aW9yOiAnY29uZmlybScgYXMgY29uc3QsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXF1aXJlcyBhcHByb3ZhbDogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIHBvbGljeSByZXF1aXJlcyBjb25maXJtYXRpb24gZm9yIHBhdHRlcm4gJyR7cGF0dGVybn0nYCxcbiAgICAgICAgICAgICAgY29uZmlybVNvdXJjZTogYCR7ZWxlbWVudC50eXBlfToke2VsZW1lbnQubmFtZX1gLFxuICAgICAgICAgICAgICBwb2xpY3lDb250ZXh0OiB7IGV2YWx1YXRlZEVsZW1lbnRzLCBkZWNpc2lvbkNoYWluIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMjogQ2hlY2sgYWxsb3dQYXR0ZXJuc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpICYmIGFsbG93UGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgPSB0cnVlO1xuICAgICAgZWxlbWVudHNXaXRoQWxsb3dQYXR0ZXJucy5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSdgKTtcbiAgICAgIGxldCBtYXRjaGVkQWxsb3cgPSBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGFsbG93UGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdhbGxvd1BhdHRlcm5zJyxcbiAgICAgICAgICAgICAgbWF0Y2hlZFBhdHRlcm46IHBhdHRlcm4sXG4gICAgICAgICAgICAgIG1hdGNoZWRUYXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVjaXNpb25DaGFpbi5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSc6IGFsbG93UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBBTExPVzogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGFsbG93UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgdG9vbEFsbG93ZWRCeUFueUVsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgbWF0Y2hlZEFsbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hlZEFsbG93KSBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFtYXRjaGVkQWxsb3cpIHtcbiAgICAgICAgZXZhbHVhdGVkRWxlbWVudHMucHVzaCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbmFtZTogZWxlbWVudC5uYW1lIH0pO1xuICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogYWxsb3dQYXR0ZXJucyBkZWZpbmVkIGJ1dCBubyBtYXRjaGApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogZGVueVBhdHRlcm5zIGNoZWNrZWQsIG5vIG1hdGNoYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RlcCAzOiBJZiBhbnkgZWxlbWVudCBoYWQgYWxsb3dQYXR0ZXJucywgdG9vbCBtdXN0IGhhdmUgbWF0Y2hlZCBhdCBsZWFzdCBvbmVcbiAgaWYgKGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zICYmICF0b29sQWxsb3dlZEJ5QW55RWxlbWVudCkge1xuICAgIGNvbnN0IHJlc3RyaWN0b3JzID0gZWxlbWVudHNXaXRoQWxsb3dQYXR0ZXJucy5qb2luKCcsICcpO1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgREVOWTogdG9vbCBub3QgaW4gYW55IGVsZW1lbnQgYWxsb3dsaXN0IChyZXN0cmljdGVkIGJ5OiAke3Jlc3RyaWN0b3JzfSlgKTtcbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIERFTlk6ICR7dG9vbE5hbWV9IG5vdCBpbiBhbnkgYWxsb3dsaXN0IChyZXN0cmljdGVkIGJ5OiAke3Jlc3RyaWN0b3JzfSkgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmVoYXZpb3I6ICdkZW55JyxcbiAgICAgIG1lc3NhZ2U6IGBUb29sICcke3Rvb2xOYW1lfScgbm90IHBlcm1pdHRlZCBieSBhbGxvd2xpc3RzIGRlZmluZWQgaW46ICR7cmVzdHJpY3RvcnN9LiBFaXRoZXIgZGVhY3RpdmF0ZSB0aGVzZSBlbGVtZW50cyBvciBhZGQgYWxsb3dQYXR0ZXJucyB0byBtYXRjaCB0aGlzIHRvb2wuYCxcbiAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zKSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdUb29sIG1hdGNoZWQgYWxsb3dsaXN0IOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCcpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG1hdGNoZWQgYWxsb3dsaXN0LCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICB9IGVsc2Uge1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaCgnTm8gYWxsb3dQYXR0ZXJucyBkZWZpbmVkIOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAoUGhhc2UgMSBiZWhhdmlvciknKTtcbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7dG9vbE5hbWV9OiBubyBhbGxvd1BhdHRlcm5zIGRlZmluZWQsIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICgke2VsYXBzZWQoc3RhcnRUaW1lKX0pYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJlaGF2aW9yOiAnZXZhbHVhdGUnLFxuICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgfTtcbn1cblxuLyoqIEZvcm1hdCBlbGFwc2VkIHRpbWUgc2luY2Ugc3RhcnRUaW1lIGluIG1pbGxpc2Vjb25kcy4gKi9cbmZ1bmN0aW9uIGVsYXBzZWQoc3RhcnRUaW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7KHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKS50b0ZpeGVkKDIpfW1zYDtcbn1cblxuLyoqIFN1bW1hcml6ZSBhY3RpdmUgZWxlbWVudCB0eXBlcyBmb3IgdGhlIGVudHJ5IGxvZyAoZS5nLiwgXCIzIHBlcnNvbmFzLCAyIHNraWxscywgMSBlbnNlbWJsZVwiKS4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZUVsZW1lbnRUeXBlcyhlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKTogc3RyaW5nIHtcbiAgY29uc3QgY291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgIGNvdW50cy5zZXQoZWwudHlwZSwgKGNvdW50cy5nZXQoZWwudHlwZSkgPz8gMCkgKyAxKTtcbiAgfVxuICByZXR1cm4gWy4uLmNvdW50cy5lbnRyaWVzKCldLm1hcCgoW3R5cGUsIGNvdW50XSkgPT4gYCR7Y291bnR9ICR7dHlwZX0ke2NvdW50ID4gMSA/ICdzJyA6ICcnfWApLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogTWF4aW11bSBpbnB1dCBsZW5ndGggZm9yIHBhdHRlcm4gbWF0Y2hpbmcgdGFyZ2V0cy5cbiAqIFRydW5jYXRlcyBsb25nIGNvbW1hbmRzL3BhdGhzIHRvIHByZXZlbnQgRG9TIHZpYSBwYXRob2xvZ2ljYWwgZ2xvYiBtYXRjaGluZy5cbiAqL1xuY29uc3QgTUFYX01BVENIX0lOUFVUX0xFTkdUSCA9IDEwMDA7XG5cbi8qKlxuICogU3RyaXAgbnVsbCBieXRlcywgY29udHJvbCBjaGFyYWN0ZXJzLCBhbmQgbm9ybWFsaXplIFVuaWNvZGUgZm9yIG1hdGNoIGlucHV0LlxuICogUHJlc2VydmVzIHRhYiAoXFx4MDkpLCBuZXdsaW5lIChcXHgwQSksIGNhcnJpYWdlIHJldHVybiAoXFx4MEQpLlxuICogUHJldmVudHMgcGF0dGVybiBieXBhc3MgdmlhIGluamVjdGVkIGNvbnRyb2wgY2hhcmFjdGVycyBvciBVbmljb2RlXG4gKiBub3JtYWxpemF0aW9uIGF0dGFja3MgKGUuZy4sIGNvbWJpbmluZyBjaGFyYWN0ZXJzIHRoYXQgbG9vayBsaWtlIEFTQ0lJKS5cbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVNYXRjaElucHV0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBOb3JtYWxpemUgVW5pY29kZSB0byBORkMgKGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIHRoZW4gY29tcG9zaXRpb24pLlxuICAvLyBUaGlzIHByZXZlbnRzIGJ5cGFzcyB2aWEgY29tYmluaW5nIGNoYXJhY3RlcnMgb3IgYWx0ZXJuYXRpdmUgcmVwcmVzZW50YXRpb25zLlxuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXQubm9ybWFsaXplKCdORkMnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgcmV0dXJuIG5vcm1hbGl6ZWQucmVwbGFjZSgvW1xceDAwLVxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGXFx4N0YtXFx4OUZdL2csICcnKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBtYXRjaCB0YXJnZXQgc3RyaW5ncyBmb3IgYSB0b29sIGNhbGwuXG4gKlxuICogRm9yIEJhc2g6IG1hdGNoZXMgYWdhaW5zdCB0aGUgdG9vbCBuYW1lIGFuZCBcIkJhc2g6PGNvbW1hbmQ+XCJcbiAqIEZvciBFZGl0L1dyaXRlOiBtYXRjaGVzIGFnYWluc3QgdGhlIHRvb2wgbmFtZSBhbmQgXCJFZGl0OjxmaWxlX3BhdGg+XCJcbiAqIEZvciBNQ1AgdG9vbHM6IG1hdGNoZXMgYWdhaW5zdCB0aGUgZnVsbCB0b29sIG5hbWVcbiAqXG4gKiBJbnB1dHMgYXJlIHRydW5jYXRlZCB0byBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIIGFuZCBzYW5pdGl6ZWQgdG8gcHJldmVudFxuICogRG9TIHZpYSBwYXRob2xvZ2ljYWwgZ2xvYiBtYXRjaGluZyBhbmQgcGF0dGVybiBieXBhc3MgdmlhIGNvbnRyb2wgY2hhcnMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTWF0Y2hUYXJnZXRzKFxuICB0b29sTmFtZTogc3RyaW5nLFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRhcmdldHMgPSBbdG9vbE5hbWVdO1xuXG4gIGlmICh0b29sTmFtZSA9PT0gJ0Jhc2gnICYmIHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZU1hdGNoSW5wdXQodG9vbElucHV0LmNvbW1hbmQuc2xpY2UoMCwgTUFYX01BVENIX0lOUFVUX0xFTkdUSCkpO1xuICAgIHRhcmdldHMucHVzaChgQmFzaDoke3Nhbml0aXplZH1gKTtcbiAgfSBlbHNlIGlmICgodG9vbE5hbWUgPT09ICdFZGl0JyB8fCB0b29sTmFtZSA9PT0gJ1dyaXRlJykgJiYgdHlwZW9mIHRvb2xJbnB1dC5maWxlX3BhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3Qgc2FuaXRpemVkID0gc2FuaXRpemVNYXRjaElucHV0KHRvb2xJbnB1dC5maWxlX3BhdGguc2xpY2UoMCwgTUFYX01BVENIX0lOUFVUX0xFTkdUSCkpO1xuICAgIHRhcmdldHMucHVzaChgJHt0b29sTmFtZX06JHtzYW5pdGl6ZWR9YCk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0cztcbn1cbiJdfQ==