@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
@@ -302,7 +302,9 @@ export class DollhouseContainer {
302
302
  version: VERSION,
303
303
  logLevel: config.logLevel,
304
304
  logFormat: config.logFormat,
305
- console: env.DOLLHOUSE_WEB_CONSOLE ? 'http://dollhouse.localhost:3939' : 'disabled',
305
+ console: env.DOLLHOUSE_WEB_CONSOLE
306
+ ? `http://dollhouse.localhost:${env.DOLLHOUSE_WEB_CONSOLE_PORT}`
307
+ : 'disabled',
306
308
  },
307
309
  });
308
310
  return manager;
@@ -603,6 +605,7 @@ export class DollhouseContainer {
603
605
  await this.deferredLogHooks(timer);
604
606
  await this.deferredMetricsCollectors(timer);
605
607
  await this.deferredWebConsole(timer);
608
+ await this.deferredPermissionServer(timer);
606
609
  await this.deferredDangerZoneInit(timer);
607
610
  await this.deferredPatternEncryption(timer);
608
611
  await this.deferredBackgroundValidator(timer);
@@ -716,6 +719,9 @@ export class DollhouseContainer {
716
719
  const metricsSink = this.tryResolve('MemoryMetricsSink');
717
720
  const mcpAqlHandler = this.tryResolve('mcpAqlHandler');
718
721
  const logManager = this.resolve('LogManager');
722
+ // Resolve console port: config file → env var → default (#1840)
723
+ const configManager = this.resolve('ConfigManager');
724
+ const configPort = configManager.getSetting('console.port');
719
725
  const { startUnifiedConsole } = await import('../web/console/UnifiedConsole.js');
720
726
  const result = await startUnifiedConsole({
721
727
  sessionId,
@@ -725,6 +731,7 @@ export class DollhouseContainer {
725
731
  mcpAqlHandler,
726
732
  registerLogSink: (sink) => logManager.registerSink(sink),
727
733
  wireSSEBroadcasts: (webResult, mSink) => this.wireSSEBroadcasts(webResult, mSink),
734
+ port: configPort,
728
735
  });
729
736
  logger.info(`[Container] Web console started as ${result.role}`);
730
737
  }
@@ -733,6 +740,35 @@ export class DollhouseContainer {
733
740
  }
734
741
  timer.endPhase('web_console');
735
742
  }
743
+ async deferredPermissionServer(timer) {
744
+ timer.startPhase('permission_server', false);
745
+ try {
746
+ if (!env.DOLLHOUSE_PERMISSION_SERVER) {
747
+ logger.debug('[Container] Permission server disabled via DOLLHOUSE_PERMISSION_SERVER=false');
748
+ return;
749
+ }
750
+ if (!env.DOLLHOUSE_WEB_CONSOLE) {
751
+ logger.debug('[Container] Permission server skipped — web console is disabled');
752
+ return;
753
+ }
754
+ // Permission routes are already mounted on the unified web console.
755
+ // We just need to write the port file so the PreToolUse hook script
756
+ // can discover it. No separate server — use the existing console port.
757
+ const port = env.DOLLHOUSE_WEB_CONSOLE_PORT;
758
+ const startMs = Date.now();
759
+ const { writePortFile, registerPortCleanup } = await import('../auto-dollhouse/portDiscovery.js');
760
+ logger.debug(`[Container] Writing permission server port file for port ${port}`);
761
+ await writePortFile(port);
762
+ registerPortCleanup();
763
+ logger.debug(`[Container] Port cleanup handlers registered`);
764
+ const elapsedMs = Date.now() - startMs;
765
+ logger.info(`[Container] Permission server port file written (port ${port}, ${elapsedMs}ms)`);
766
+ }
767
+ catch (error) {
768
+ logger.warn('[Container] Permission server startup failed:', error);
769
+ }
770
+ timer.endPhase('permission_server');
771
+ }
736
772
  async deferredDangerZoneInit(timer) {
737
773
  timer.startPhase('danger_zone_init', false);
738
774
  try {
@@ -1266,4 +1302,4 @@ export class DollhouseContainer {
1266
1302
  }
1267
1303
  }
1268
1304
  }
1269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpL0NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLElBQUksT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENB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QUFhLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7WUFDL0UsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsWUFBWSxDQUFDLFFBQVEsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OLCBQQUNLQUdFX1ZFUlNJT04gYXMgVkVSU0lPTiB9IGZyb20gXCIuLi9nZW5lcmF0ZWQvdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qc1wiO1xuaW1wb3J0IHsgVmVyYlRyaWdnZXJNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9WZXJiVHJpZ2dlck1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFJlbGF0aW9uc2hpcE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1JlbGF0aW9uc2hpcE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IE5MUFNjb3JpbmdNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9OTFBTY29yaW5nTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBsb2FkSW5kaWNhdG9yQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9pbmRpY2F0b3ItY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBlbnYgfSBmcm9tIFwiLi4vY29uZmlnL2Vudi5qc1wiO1xuaW1wb3J0IHsgQVBJQ2FjaGUsIENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkluZGV4Q2FjaGUsIENhY2hlTWVtb3J5QnVkZ2V0IH0gZnJvbSBcIi4uL2NhY2hlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXRWYWxpZGF0ZWRHbG9iYWxDYWNoZU1lbW9yeUJ5dGVzLCBnZXRWYWxpZGF0ZWRNYXhCYWNrdXBzUGVyRWxlbWVudCwgU1RPUkFHRV9MQVlFUl9DT05GSUcgfSBmcm9tIFwiLi4vY29uZmlnL3BlcmZvcm1hbmNlLWNvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQmFja3VwU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9CYWNrdXBTZXJ2aWNlLmpzXCI7XG5pbXBvcnQge1xuICBHaXRIdWJDbGllbnQsXG4gIENvbGxlY3Rpb25Ccm93c2VyLFxuICBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyLFxuICBDb2xsZWN0aW9uU2VhcmNoLFxuICBQZXJzb25hRGV0YWlscyxcbiAgRWxlbWVudEluc3RhbGxlcixcbn0gZnJvbSBcIi4uL2NvbGxlY3Rpb24vaW5kZXguanNcIjtcbmltcG9ydCB7IEdpdEh1YkF1dGhNYW5hZ2VyIH0gZnJvbSBcIi4uL2F1dGgvR2l0SHViQXV0aE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBNaWdyYXRpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9NaWdyYXRpb25NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4TWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vRW5oYW5jZWRJbmRleE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IEVuaGFuY2VkSW5kZXhIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0VuaGFuY2VkSW5kZXhIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBNQ1BBUUxIYW5kbGVyLCB0eXBlIEhhbmRsZXJSZWdpc3RyeSB9IGZyb20gXCIuLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IEdhdGVrZWVwZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvbWNwLWFxbC9HYXRla2VlcGVyLmpzXCI7XG5pbXBvcnQgeyBTa2lsbE1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvc2tpbGxzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVSZW5kZXJlciB9IGZyb20gXCIuLi91dGlscy9UZW1wbGF0ZVJlbmRlcmVyLmpzXCI7XG5pbXBvcnQgeyBBZ2VudE1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvYWdlbnRzL0FnZW50TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTWVtb3J5IH0gZnJvbSBcIi4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeS5qc1wiO1xuaW1wb3J0IHsgTWVtb3J5TWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9tZW1vcmllcy9NZW1vcnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBXZWJTU0VMb2dTaW5rIH0gZnJvbSBcIi4uL3dlYi9zaW5rcy9XZWJTU0VMb2dTaW5rLmpzXCI7XG5pbXBvcnQgeyBXZWJTU0VNZXRyaWNzU2luayB9IGZyb20gXCIuLi93ZWIvc2lua3MvV2ViU1NFTWV0cmljc1NpbmsuanNcIjtcbmltcG9ydCB7IEVuc2VtYmxlTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9lbnNlbWJsZXMvRW5zZW1ibGVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQZXJzb25hRXhwb3J0ZXIsIFBlcnNvbmFJbXBvcnRlciB9IGZyb20gXCIuLi9wZXJzb25hL2V4cG9ydC1pbXBvcnQvaW5kZXguanNcIjtcbmltcG9ydCB7IFBlcnNvbmFNYW5hZ2VyIH0gZnJvbSBcIi4uL3BlcnNvbmEvUGVyc29uYU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BlcnNvbmFIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBFbGVtZW50Q1JVREhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRWxlbWVudENSVURIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Db2xsZWN0aW9uSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Qb3J0Zm9saW9IYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9QdWxsSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Qb3J0Zm9saW9QdWxsSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvR2l0SHViQXV0aEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IERpc3BsYXlDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0Rpc3BsYXlDb25maWdIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBJZGVudGl0eUhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvSWRlbnRpdHlIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IFN5bmNIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIuanNcIjtcbmltcG9ydCB7IFRvb2xSZWdpc3RyeSB9IGZyb20gXCIuLi9oYW5kbGVycy9Ub29sUmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IFNlcnZlclNldHVwIH0gZnJvbSBcIi4uL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2VydmVyU3RhcnR1cCB9IGZyb20gXCIuLi9zZXJ2ZXIvc3RhcnR1cC5qc1wiO1xuaW1wb3J0IHsgUGF0aFZhbGlkYXRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9wYXRoVmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIgfSBmcm9tIFwiLi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBVbmlmaWVkSW5kZXhNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9VbmlmaWVkSW5kZXhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9JbmRleE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb0luZGV4TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgU3VibWl0VG9Qb3J0Zm9saW9Ub29sIH0gZnJvbSBcIi4uL3Rvb2xzL3BvcnRmb2xpby9zdWJtaXRUb1BvcnRmb2xpb1Rvb2wuanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tIFwiLi4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1JlcG9NYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9Qb3J0Zm9saW9SZXBvTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvU3luY01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb1N5bmNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSB9IGZyb20gXCIuLi9jb25maWcvcG9ydGZvbGlvQ29uZmlnLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJQb3J0Zm9saW9JbmRleGVyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9HaXRIdWJQb3J0Zm9saW9JbmRleGVyLmpzXCI7XG5pbXBvcnQgeyBJbmRleENvbmZpZ01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2NvbmZpZy9JbmRleENvbmZpZy5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvU3luY0NvbXBhcmVyIH0gZnJvbSBcIi4uL3N5bmMvUG9ydGZvbGlvU3luY0NvbXBhcmVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9Eb3dubG9hZGVyIH0gZnJvbSBcIi4uL3N5bmMvUG9ydGZvbGlvRG93bmxvYWRlci5qc1wiO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VNb25pdG9yIH0gZnJvbSBcIi4uL3V0aWxzL1BlcmZvcm1hbmNlTW9uaXRvci5qc1wiO1xuaW1wb3J0IHsgQnVpbGRJbmZvU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvSW5pdGlhbGl6YXRpb25TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBQZXJzb25hSW5kaWNhdG9yU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9QZXJzb25hSW5kaWNhdG9yU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IFN0YXRlQ2hhbmdlTm90aWZpZXIgfSBmcm9tIFwiLi4vc2VydmljZXMvU3RhdGVDaGFuZ2VOb3RpZmllci5qc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvU2VyaWFsaXphdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEZpbGVXYXRjaFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvRmlsZVdhdGNoU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL01ldGFkYXRhU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblJlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9UcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEdpdEh1YlJhdGVMaW1pdGVyIH0gZnJvbSBcIi4uL3V0aWxzL0dpdEh1YlJhdGVMaW1pdGVyLmpzXCI7XG5pbXBvcnQgeyBBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlciwgRG9sbGhvdXNlVG9BbnRocm9waWNDb252ZXJ0ZXIgfSBmcm9tIFwiLi4vY29udmVydGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRGFuZ2VyWm9uZUVuZm9yY2VyIH0gZnJvbSBcIi4uL3NlY3VyaXR5L0RhbmdlclpvbmVFbmZvcmNlci5qc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGlvblN0b3JlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS5qc1wiO1xuaW1wb3J0IHsgVmVyaWZpY2F0aW9uU3RvcmUgfSBmcm9tIFwiQGRvbGxob3VzZW1jcC9zYWZldHlcIjtcbmltcG9ydCB7IFZlcmlmaWNhdGlvbk5vdGlmaWVyIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1ZlcmlmaWNhdGlvbk5vdGlmaWVyLmpzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuRW5jcnlwdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vUGF0dGVybkVuY3J5cHRvci5qc1wiO1xuaW1wb3J0IHsgUGF0dGVybkRlY3J5cHRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9lbmNyeXB0aW9uL1BhdHRlcm5EZWNyeXB0b3IuanNcIjtcbmltcG9ydCB7IENvbnRleHRUcmFja2VyIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vQ29udGV4dFRyYWNrZXIuanNcIjtcbmltcG9ydCB7IFBhdHRlcm5FeHRyYWN0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdmFsaWRhdGlvbi9QYXR0ZXJuRXh0cmFjdG9yLmpzXCI7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3ZhbGlkYXRpb24vQmFja2dyb3VuZFZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlUZWxlbWV0cnkgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdGVsZW1ldHJ5L1NlY3VyaXR5VGVsZW1ldHJ5LmpzXCI7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanNcIjtcbmltcG9ydCB7IE9wZXJhdGlvbmFsVGVsZW1ldHJ5IH0gZnJvbSBcIi4uL3RlbGVtZXRyeS9PcGVyYXRpb25hbFRlbGVtZXRyeS5qc1wiO1xuaW1wb3J0IHsgU3RhcnR1cFRpbWVyIH0gZnJvbSBcIi4uL3RlbGVtZXRyeS9TdGFydHVwVGltZXIuanNcIjtcbmltcG9ydCB7IERlZmF1bHRFbmhhbmNlZEluZGV4SGVscGVycyB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvRW5oYW5jZWRJbmRleEhlbHBlcnMuanNcIjtcbmltcG9ydCB7IEVsZW1lbnREZWZpbml0aW9uQnVpbGRlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvRWxlbWVudERlZmluaXRpb25CdWlsZGVyLmpzXCI7XG5pbXBvcnQgeyBBY3Rpb25UcmlnZ2VyRXh0cmFjdG9yIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9BY3Rpb25UcmlnZ2VyRXh0cmFjdG9yLmpzXCI7XG5pbXBvcnQgeyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L1RyaWdnZXJNZXRyaWNzVHJhY2tlci5qc1wiO1xuaW1wb3J0IHsgU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9TZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEVsZW1lbnRFdmVudERpc3BhdGNoZXIgfSBmcm9tICcuLi9ldmVudHMvRWxlbWVudEV2ZW50RGlzcGF0Y2hlci5qcyc7XG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzXCI7XG5pbXBvcnQge1xuICBQYWdpbmF0aW9uU2VydmljZSxcbiAgRmlsdGVyU2VydmljZSxcbiAgU29ydFNlcnZpY2UsXG4gIEVsZW1lbnRRdWVyeVNlcnZpY2UsXG59IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L2luZGV4LmpzJztcbmltcG9ydCB7IFJldGVudGlvblBvbGljeVNlcnZpY2UsIE1lbW9yeVJldGVudGlvblN0cmF0ZWd5IH0gZnJvbSAnLi4vc2VydmljZXMvUmV0ZW50aW9uUG9saWN5U2VydmljZS5qcyc7XG5pbXBvcnQgeyBQb2xpY3lFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvUG9saWN5RXhwb3J0U2VydmljZS5qcyc7XG5pbXBvcnQgeyBMb2dNYW5hZ2VyLCBidWlsZExvZ01hbmFnZXJDb25maWcgfSBmcm9tICcuLi9sb2dnaW5nL0xvZ01hbmFnZXIuanMnO1xuaW1wb3J0IHsgRmlsZUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL0ZpbGVMb2dTaW5rLmpzJztcbmltcG9ydCB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHsgUGxhaW5UZXh0Rm9ybWF0dGVyIH0gZnJvbSAnLi4vbG9nZ2luZy9mb3JtYXR0ZXJzL1BsYWluVGV4dEZvcm1hdHRlci5qcyc7XG5pbXBvcnQgeyBKc29ubEZvcm1hdHRlciB9IGZyb20gJy4uL2xvZ2dpbmcvZm9ybWF0dGVycy9Kc29ubEZvcm1hdHRlci5qcyc7XG5pbXBvcnQgeyB3aXJlTG9nSG9va3MsIGdldFRyaWdnZXJNZXRyaWNzTG9nTGlzdGVuZXIgfSBmcm9tICcuLi9sb2dnaW5nL0xvZ0hvb2tzLmpzJztcbmltcG9ydCB7IE1ldHJpY3NNYW5hZ2VyIH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHsgYnVpbGRNZXRyaWNzTWFuYWdlckNvbmZpZyB9IGZyb20gJy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgUGVyZm9ybWFuY2VNb25pdG9yQ29sbGVjdG9yLFxuICBMUlVDYWNoZUNvbGxlY3RvcixcbiAgU2VjdXJpdHlNb25pdG9yQ29sbGVjdG9yLFxuICBTZWN1cml0eVRlbGVtZXRyeUNvbGxlY3RvcixcbiAgRmlsZUxvY2tNYW5hZ2VyQ29sbGVjdG9yLFxuICBEZWZhdWx0RWxlbWVudFByb3ZpZGVyQ29sbGVjdG9yLFxuICBUcmlnZ2VyTWV0cmljc1RyYWNrZXJDb2xsZWN0b3IsXG4gIE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yLFxuICBPcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yLFxuICBHYXRla2VlcGVyTWV0cmljc0NvbGxlY3Rvcixcbn0gZnJvbSAnLi4vbWV0cmljcy9jb2xsZWN0b3JzL2luZGV4LmpzJztcbmltcG9ydCB7IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIH0gZnJvbSAnLi4vbWV0cmljcy9PcGVyYXRpb25NZXRyaWNzVHJhY2tlci5qcyc7XG5pbXBvcnQgeyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIgfSBmcm9tICcuLi9tZXRyaWNzL0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlci5qcyc7XG5cbi8vIFN0YXRlIGlzIG93bmVkIGJ5IFBlcnNvbmFNYW5hZ2VyIGFuZCBzZXJ2aWNlc1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJCdW5kbGUge1xuICBwZXJzb25hSGFuZGxlcjogUGVyc29uYUhhbmRsZXI7XG4gIGVsZW1lbnRDcnVkSGFuZGxlcjogRWxlbWVudENSVURIYW5kbGVyO1xuICBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG4gIHBvcnRmb2xpb0hhbmRsZXI6IFBvcnRmb2xpb0hhbmRsZXI7XG4gIGdpdGh1YkF1dGhIYW5kbGVyOiBHaXRIdWJBdXRoSGFuZGxlcjtcbiAgZGlzcGxheUNvbmZpZ0hhbmRsZXI6IERpc3BsYXlDb25maWdIYW5kbGVyO1xuICBpZGVudGl0eUhhbmRsZXI6IElkZW50aXR5SGFuZGxlcjtcbiAgY29uZmlnSGFuZGxlcjogQ29uZmlnSGFuZGxlcjtcbiAgc3luY0hhbmRsZXI6IFN5bmNIYW5kbGVyO1xuICB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeTtcbiAgZW5oYW5jZWRJbmRleEhhbmRsZXI6IEVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuICBtY3BBcWxIYW5kbGVyOiBNQ1BBUUxIYW5kbGVyO1xufVxuXG4vKipcbiAqIFR5cGUtc2FmZSBzZXJ2aWNlIHJlY29yZCBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24gY29udGFpbmVyXG4gKlxuICogRklYOiBSZXBsYWNlZCAnYW55JyB0eXBlcyB3aXRoIHByb3BlciBnZW5lcmljcyB0byBlbnN1cmUgdHlwZSBzYWZldHlcbiAqIFByZXZpb3VzbHk6IFVzZWQgJ2FueScgd2hpY2ggYWxsb3dlZCB1bnNhZmUgY2FzdHMgYW5kIHJ1bnRpbWUgZXJyb3JzXG4gKiBOb3c6IFVzZXMgZ2VuZXJpYyBUIHdpdGggJ3Vua25vd24nIGZhbGxiYWNrIGZvciBjb21waWxlLXRpbWUgdHlwZSBjaGVja2luZ1xuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSBzZXJ2aWNlIHR5cGUgKGRlZmF1bHRzIHRvIHVua25vd24gZm9yIG1heGltdW0gc2FmZXR5KVxuICovXG5pbnRlcmZhY2UgU2VydmljZVJlY29yZDxUID0gdW5rbm93bj4ge1xuICBmYWN0b3J5OiAoKSA9PiBUO1xuICBpbnN0YW5jZTogVCB8IG51bGw7XG4gIHNpbmdsZXRvbjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIERvbGxob3VzZUNvbnRhaW5lciB7XG4gIHByaXZhdGUgc2VydmljZXMgPSBuZXcgTWFwPHN0cmluZywgU2VydmljZVJlY29yZD4oKTtcbiAgcHJpdmF0ZSBwZXJzb25hc0Rpcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJc3N1ZSAjNzA2OiBTZXQgdG8gdHJ1ZSBvbmNlIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIHJlc29sdmVzLiAqL1xuICBwdWJsaWMgZGVmZXJyZWRTZXR1cENvbXBsZXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBESSBjb250YWluZXIgaW5pdGlhbGl6YXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0lOSVRJQUxJWkFUSU9OJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5jb25zdHJ1Y3RvcicsXG4gICAgICBkZXRhaWxzOiAnRGVwZW5kZW5jeSBpbmplY3Rpb24gY29udGFpbmVyIGluaXRpYWxpemluZydcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyU2VydmljZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNlcnZpY2Ugd2l0aCB0aGUgREkgY29udGFpbmVyXG4gICAqXG4gICAqIEZJWDogQWRkZWQgZXhwbGljaXQgdHlwZSBwYXJhbWV0ZXIgZm9yIHR5cGUgc2FmZXR5XG4gICAqIFRoZSBmYWN0b3J5IGlzIHN0b3JlZCBhcyAoKSA9PiB1bmtub3duIGludGVybmFsbHkgdG8gYWxsb3cgaGV0ZXJvZ2VuZW91cyBzdG9yYWdlLFxuICAgKiBidXQgdGhlIHR5cGUgVCBpcyBwcmVzZXJ2ZWQgZm9yIHJlc29sdmUoKSBjYWxsc1xuICAgKlxuICAgKiBAdGVtcGxhdGUgVCBUaGUgc2VydmljZSB0eXBlXG4gICAqIEBwYXJhbSBuYW1lIFVuaXF1ZSBzZXJ2aWNlIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGZhY3RvcnkgRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIHNlcnZpY2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIChzaW5nbGV0b24gYmVoYXZpb3IpXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXI8VD4obmFtZTogc3RyaW5nLCBmYWN0b3J5OiAoKSA9PiBULCBvcHRpb25zOiB7IHNpbmdsZXRvbj86IGJvb2xlYW4gfSA9IHsgc2luZ2xldG9uOiB0cnVlIH0pOiB2b2lkIHtcbiAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IHNlcnZpY2UgcmVnaXN0cmF0aW9uXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdEb2xsaG91c2VDb250YWluZXIucmVnaXN0ZXInLFxuICAgICAgZGV0YWlsczogYFNlcnZpY2UgcmVnaXN0ZXJlZDogJHtuYW1lfWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSwgc2luZ2xldG9uOiBvcHRpb25zLnNpbmdsZXRvbiA/PyB0cnVlIH1cbiAgICB9KTtcbiAgICB0aGlzLnNlcnZpY2VzLnNldChuYW1lLCB7XG4gICAgICBmYWN0b3J5OiBmYWN0b3J5IGFzICgpID0+IHVua25vd24sXG4gICAgICBpbnN0YW5jZTogbnVsbCxcbiAgICAgIHNpbmdsZXRvbjogb3B0aW9ucy5zaW5nbGV0b24gPz8gdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBzZXJ2aWNlIGZyb20gdGhlIERJIGNvbnRhaW5lclxuICAgKlxuICAgKiBGSVg6IFR5cGUgc2FmZXR5IGltcHJvdmVkIHdpdGggZXhwbGljaXQgY2FzdGluZyBhbmQgdmFsaWRhdGlvblxuICAgKiBUaGUgJ2FzIFQnIGNhc3QgaXMgc2FmZSBiZWNhdXNlOlxuICAgKiAxLiBTZXJ2aWNlcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHR5cGVkIGZhY3Rvcmllc1xuICAgKiAyLiBUaGUgc2VydmljZSBuYW1lIGFjdHMgYXMgYSB0eXBlIGRpc2NyaW1pbmF0b3JcbiAgICogMy4gSW5jb3JyZWN0IHVzYWdlIHdpbGwgYmUgY2F1Z2h0IGF0IHRoZSByZWdpc3RyYXRpb24gc2l0ZVxuICAgKlxuICAgKiBAdGVtcGxhdGUgVCBUaGUgZXhwZWN0ZWQgc2VydmljZSB0eXBlXG4gICAqIEBwYXJhbSBuYW1lIFNlcnZpY2UgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBUaGUgc2VydmljZSBpbnN0YW5jZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHNlcnZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcbiAgICovXG4gIHB1YmxpYyByZXNvbHZlPFQ+KG5hbWU6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzLmdldChuYW1lKTtcbiAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQXVkaXQgc2VydmljZSByZXNvbHV0aW9uIGZhaWx1cmVzXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdNRU1PUllfTE9BRF9GQUlMRUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZXNvbHZlJyxcbiAgICAgICAgZGV0YWlsczogYFNlcnZpY2Ugbm90IHJlZ2lzdGVyZWQ6ICR7bmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmljZSBub3QgcmVnaXN0ZXJlZDogJHtuYW1lfWApO1xuICAgIH1cblxuICAgIGlmIChzZXJ2aWNlLnNpbmdsZXRvbikge1xuICAgICAgaWYgKCFzZXJ2aWNlLmluc3RhbmNlKSB7XG4gICAgICAgIHNlcnZpY2UuaW5zdGFuY2UgPSBzZXJ2aWNlLmZhY3RvcnkoKTtcbiAgICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBzaW5nbGV0b24gaW5zdGFudGlhdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZXNvbHZlJyxcbiAgICAgICAgICBkZXRhaWxzOiBgU2luZ2xldG9uIGluc3RhbnRpYXRlZDogJHtuYW1lfWAsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgc2VydmljZU5hbWU6IG5hbWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJ2aWNlLmluc3RhbmNlIGFzIFQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcnZpY2UuZmFjdG9yeSgpIGFzIFQ7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyU2VydmljZXMoKTogdm9pZCB7XG5cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGluc3RydW1lbnRhdGlvblxuICAgIHRoaXMucmVnaXN0ZXIoJ1N0YXJ0dXBUaW1lcicsICgpID0+IG5ldyBTdGFydHVwVGltZXIoKSk7XG5cbiAgICAvLyBDT1JFICYgQ0FDSElOR1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NhY2hlTWVtb3J5QnVkZ2V0JywgKCkgPT4gbmV3IENhY2hlTWVtb3J5QnVkZ2V0KHtcbiAgICAgIGdsb2JhbExpbWl0Qnl0ZXM6IGdldFZhbGlkYXRlZEdsb2JhbENhY2hlTWVtb3J5Qnl0ZXMoKSxcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignQVBJQ2FjaGUnLCAoKSA9PiBuZXcgQVBJQ2FjaGUoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkNhY2hlJywgKCkgPT4gbmV3IENvbGxlY3Rpb25DYWNoZSh0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLCB1bmRlZmluZWQpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdSYXRlTGltaXRUcmFja2VyJywgKCkgPT4gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdGaWxlTG9ja01hbmFnZXInLCAoKSA9PiBuZXcgRmlsZUxvY2tNYW5hZ2VyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScsICgpID0+IG5ldyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UodGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbmZpZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IENvbmZpZ01hbmFnZXIodGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSwgb3MpO1xuICAgIH0pO1xuICAgIC8vIElzc3VlICM1MTogR2VuZXJpYyByZXRlbnRpb24gcG9saWN5IHNlcnZpY2Ugd2l0aCBzdHJhdGVneSBwYXR0ZXJuXG4gICAgdGhpcy5yZWdpc3RlcignUmV0ZW50aW9uUG9saWN5U2VydmljZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgUmV0ZW50aW9uUG9saWN5U2VydmljZSh0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSk7XG4gICAgICAvLyBSZWdpc3RlciBtZW1vcnkgcmV0ZW50aW9uIHN0cmF0ZWd5IChmaXJzdCBvZiBwb3RlbnRpYWxseSA1MCsgZWxlbWVudCB0eXBlcylcbiAgICAgIHNlcnZpY2UucmVnaXN0ZXJTdHJhdGVneShuZXcgTWVtb3J5UmV0ZW50aW9uU3RyYXRlZ3koKSk7XG4gICAgICByZXR1cm4gc2VydmljZTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdJbmRleENvbmZpZ01hbmFnZXInLCAoKSA9PiBuZXcgSW5kZXhDb25maWdNYW5hZ2VyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luZGljYXRvckNvbmZpZycsICgpID0+IGxvYWRJbmRpY2F0b3JDb25maWcoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignU3RhdGVDaGFuZ2VOb3RpZmllcicsICgpID0+IG5ldyBTdGF0ZUNoYW5nZU5vdGlmaWVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YlJhdGVMaW1pdGVyJywgKCkgPT4gbmV3IEdpdEh1YlJhdGVMaW1pdGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInLCAoKSA9PiBFbGVtZW50RXZlbnREaXNwYXRjaGVyLmdldFNoYXJlZERpc3BhdGNoZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTUNQTG9nZ2VyJywgKCkgPT4gbG9nZ2VyKTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcnNvbmFJbXBvcnRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKTtcbiAgICAgIGNvbnN0IHBlcnNvbmFzRGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFdlIHJlc29sdmUgUGVyc29uYU1hbmFnZXIgaW5zaWRlIHRoZSBwcm92aWRlciBmdW5jdGlvbi5cbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VyUHJvdmlkZXIgPSAoKSA9PiB0aGlzLnJlc29sdmU8UGVyc29uYU1hbmFnZXI+KCdQZXJzb25hTWFuYWdlcicpLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgIHJldHVybiBuZXcgUGVyc29uYUltcG9ydGVyKFxuICAgICAgICBwZXJzb25hc0RpcixcbiAgICAgICAgY3VycmVudFVzZXJQcm92aWRlcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gR0lUSFVCICYgQ09MTEVDVElPTlxuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YkNsaWVudCcsICgpID0+IG5ldyBHaXRIdWJDbGllbnQoXG4gICAgICB0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1JhdGVMaW1pdFRyYWNrZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdHaXRIdWJBdXRoTWFuYWdlcicsICgpID0+IG5ldyBHaXRIdWJBdXRoTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25JbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkluZGV4TWFuYWdlcih7XG4gICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uQnJvd3NlcicsICgpID0+IG5ldyBDb2xsZWN0aW9uQnJvd3Nlcih0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLCB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25DYWNoZScpLCB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleE1hbmFnZXInKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25TZWFyY2gnLCAoKSA9PiBuZXcgQ29sbGVjdGlvblNlYXJjaChcbiAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25DYWNoZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYURldGFpbHMnLCAoKSA9PiBuZXcgUGVyc29uYURldGFpbHModGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSkpO1xuXG4gICAgLy8gUE9SVEZPTElPICYgTUFOQUdFUlNcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9NYW5hZ2VyJywgKCkgPT4gbmV3IFBvcnRmb2xpb01hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdW5kZWZpbmVkXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYU1hbmFnZXInLCAoKSA9PiBuZXcgUGVyc29uYU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnSW5kaWNhdG9yQ29uZmlnJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hSW1wb3J0ZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU3RhdGVDaGFuZ2VOb3RpZmllcicpLFxuICAgICAge1xuICAgICAgICBldmVudERpc3BhdGNoZXI6IHRoaXMucmVzb2x2ZSgnRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicpLFxuICAgICAgICBlbmFibGVGaWxlV2F0Y2hlcjogdHJ1ZSxcbiAgICAgICAgYXV0b1JlbG9hZE9uRXh0ZXJuYWxDaGFuZ2U6IHRydWUsXG4gICAgICAgIGZpbGVXYXRjaFNlcnZpY2U6IHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgICBtZW1vcnlCdWRnZXQ6IHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgICAgYmFja3VwU2VydmljZTogdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICAgIH1cbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdJbml0aWFsaXphdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgSW5pdGlhbGl6YXRpb25TZXJ2aWNlKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYUluZGljYXRvclNlcnZpY2UnLCAoKSA9PiBuZXcgUGVyc29uYUluZGljYXRvclNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0luZGljYXRvckNvbmZpZycpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ01pZ3JhdGlvbk1hbmFnZXInLCAoKSA9PiBuZXcgTWlncmF0aW9uTWFuYWdlcih0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRJbnN0YWxsZXInLCAoKSA9PiBuZXcgRWxlbWVudEluc3RhbGxlcih0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLCB7XG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHVuaWZpZWRJbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVW5pZmllZEluZGV4TWFuYWdlcicpLFxuICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvUmVwb01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpLFxuICAgICAgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUoKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInLCAoKSA9PiBuZXcgR2l0SHViUG9ydGZvbGlvSW5kZXhlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKVxuICAgICkpO1xuICAgIFxuICAgIC8vIFNFUlZJQ0VTXG4gICAgdGhpcy5yZWdpc3RlcignU2VyaWFsaXphdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgU2VyaWFsaXphdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTWV0YWRhdGFTZXJ2aWNlJywgKCkgPT4gbmV3IE1ldGFkYXRhU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZhbGlkYXRpb25TZXJ2aWNlJywgKCkgPT4gbmV3IFZhbGlkYXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVXYXRjaFNlcnZpY2UnLCAoKSA9PiBuZXcgRmlsZVdhdGNoU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdWYWxpZGF0aW9uUmVnaXN0cnknLCAoKSA9PiBuZXcgVmFsaWRhdGlvblJlZ2lzdHJ5KFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIExPR0dJTkdcbiAgICB0aGlzLnJlZ2lzdGVyKCdMb2dNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRMb2dNYW5hZ2VyQ29uZmlnKGVudik7XG4gICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IExvZ01hbmFnZXIoY29uZmlnKTtcblxuICAgICAgLy8gUGhhc2UgMjogRmlsZUxvZ1NpbmtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbmZpZy5sb2dGb3JtYXQgPT09ICdqc29ubCdcbiAgICAgICAgPyBuZXcgSnNvbmxGb3JtYXR0ZXIoKVxuICAgICAgICA6IG5ldyBQbGFpblRleHRGb3JtYXR0ZXIoKTtcbiAgICAgIGNvbnN0IGZpbGVTaW5rID0gbmV3IEZpbGVMb2dTaW5rKHtcbiAgICAgICAgbG9nRGlyOiBjb25maWcubG9nRGlyLFxuICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgIG1heEZpbGVTaXplOiBjb25maWcuZmlsZU1heFNpemUsXG4gICAgICAgIHJldGVudGlvbkRheXM6IGNvbmZpZy5yZXRlbnRpb25EYXlzLFxuICAgICAgICBzZWN1cml0eVJldGVudGlvbkRheXM6IGNvbmZpZy5zZWN1cml0eVJldGVudGlvbkRheXMsXG4gICAgICAgIG1heERpclNpemVCeXRlczogY29uZmlnLm1heERpclNpemVCeXRlcyxcbiAgICAgICAgbWF4RmlsZXNQZXJDYXRlZ29yeTogY29uZmlnLm1heEZpbGVzUGVyQ2F0ZWdvcnksXG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKGZpbGVTaW5rKTtcbiAgICAgIGZpbGVTaW5rLnN0YXJ0Q2xlYW51cFRpbWVyKCk7XG5cbiAgICAgIC8vIFBoYXNlIDM6IE1lbW9yeUxvZ1NpbmtcbiAgICAgIGNvbnN0IG1lbW9yeVNpbmsgPSBuZXcgTWVtb3J5TG9nU2luayh7XG4gICAgICAgIGFwcENhcGFjaXR5OiBjb25maWcubWVtb3J5QXBwQ2FwYWNpdHksXG4gICAgICAgIHNlY3VyaXR5Q2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlTZWN1cml0eUNhcGFjaXR5LFxuICAgICAgICBwZXJmQ2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlQZXJmQ2FwYWNpdHksXG4gICAgICAgIHRlbGVtZXRyeUNhcGFjaXR5OiBjb25maWcubWVtb3J5VGVsZW1ldHJ5Q2FwYWNpdHksXG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKG1lbW9yeVNpbmspO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyKCdNZW1vcnlMb2dTaW5rJywgKCkgPT4gbWVtb3J5U2luayk7XG5cbiAgICAgIC8vIFN0YXJ0dXAgbWFya2VyIOKAlCBmaXJzdCBlbnRyeSBpbiBldmVyeSBzZXJ2ZXIgc2Vzc2lvblxuICAgICAgbWFuYWdlci5sb2coe1xuICAgICAgICBpZDogbWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlTUNQJyxcbiAgICAgICAgbWVzc2FnZTogYERvbGxob3VzZU1DUCB2JHtWRVJTSU9OfSBzdGFydGluZ2AsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OLFxuICAgICAgICAgIGxvZ0xldmVsOiBjb25maWcubG9nTGV2ZWwsXG4gICAgICAgICAgbG9nRm9ybWF0OiBjb25maWcubG9nRm9ybWF0LFxuICAgICAgICAgIGNvbnNvbGU6IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEUgPyAnaHR0cDovL2RvbGxob3VzZS5sb2NhbGhvc3Q6MzkzOScgOiAnZGlzYWJsZWQnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBtYW5hZ2VyO1xuICAgIH0pO1xuXG4gICAgLy8gTUVUUklDUyBDT0xMRUNUSU9OXG4gICAgLy8gTWVtb3J5TWV0cmljc1NpbmsgaXMgcmVnaXN0ZXJlZCBzZXBhcmF0ZWx5IChub3QgYXMgYSBzaWRlIGVmZmVjdCBpbnNpZGVcbiAgICAvLyBNZXRyaWNzTWFuYWdlcidzIGZhY3RvcnkpIHNvIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBjb250YWluZXIgcmVnYXJkbGVzc1xuICAgIC8vIG9mIE1ldHJpY3NNYW5hZ2VyIHJlc29sdXRpb24gb3JkZXIuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZyA9IGJ1aWxkTWV0cmljc01hbmFnZXJDb25maWcoZW52KTtcbiAgICBpZiAobWV0cmljc0NvbmZpZy5lbmFibGVkKSB7XG4gICAgICBjb25zdCBtZW1vcnlNZXRyaWNzU2luayA9IG5ldyBNZW1vcnlNZXRyaWNzU2luayhtZXRyaWNzQ29uZmlnLm1lbW9yeVNuYXBzaG90Q2FwYWNpdHkpO1xuICAgICAgdGhpcy5yZWdpc3RlcignTWVtb3J5TWV0cmljc1NpbmsnLCAoKSA9PiBtZW1vcnlNZXRyaWNzU2luayk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01ldHJpY3NNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE1ldHJpY3NNYW5hZ2VyKG1ldHJpY3NDb25maWcsIGxvZ2dlcik7XG4gICAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKG1lbW9yeU1ldHJpY3NTaW5rKTtcbiAgICAgICAgcmV0dXJuIG1hbmFnZXI7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBURUxFTUVUUllcbiAgICB0aGlzLnJlZ2lzdGVyKCdPcGVyYXRpb25hbFRlbGVtZXRyeScsICgpID0+IG5ldyBPcGVyYXRpb25hbFRlbGVtZXRyeShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIEJBQ0tVUCBTRVJWSUNFIChJc3N1ZSAjNjU5OiBVbml2ZXJzYWwgYmFja3VwIGZvciBhbGwgZWxlbWVudCB0eXBlcylcbiAgICB0aGlzLnJlZ2lzdGVyKCdCYWNrdXBTZXJ2aWNlJywgKCkgPT4gbmV3IEJhY2t1cFNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAge1xuICAgICAgICBiYWNrdXBSb290RGlyOiBwYXRoLmpvaW4odGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJykuZ2V0QmFzZURpcigpLCAnLmJhY2t1cHMnKSxcbiAgICAgICAgbWF4QmFja3Vwc1BlckVsZW1lbnQ6IGdldFZhbGlkYXRlZE1heEJhY2t1cHNQZXJFbGVtZW50KCksXG4gICAgICAgIGVuYWJsZWQ6IFNUT1JBR0VfTEFZRVJfQ09ORklHLkJBQ0tVUFNfRU5BQkxFRCxcbiAgICAgIH1cbiAgICApKTtcblxuICAgIC8vIFBPTElDWSBFWFBPUlQgU0VSVklDRSAoSXNzdWUgIzc2MjogRXhwb3J0IHBvbGljaWVzIHRvIGJyaWRnZSlcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb2xpY3lFeHBvcnRTZXJ2aWNlJywgKCkgPT4gbmV3IFBvbGljeUV4cG9ydFNlcnZpY2Uoe1xuICAgICAgZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3k6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5yZXNvbHZlPEVsZW1lbnRDUlVESGFuZGxlcj4oJ0VsZW1lbnRDUlVESGFuZGxlcicpO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLmdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5KCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldFNlcnZlclZlcnNpb246ICgpID0+IFBBQ0tBR0VfVkVSU0lPTixcbiAgICB9KSk7XG5cbiAgICAvLyBFTEVNRU5UIE1BTkFHRVJTXG4gICAgdGhpcy5yZWdpc3RlcignU2tpbGxNYW5hZ2VyJywgKCkgPT4gbmV3IFNraWxsTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUZW1wbGF0ZU1hbmFnZXInLCAoKSA9PiBuZXcgVGVtcGxhdGVNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1RlbXBsYXRlUmVuZGVyZXInLCAoKSA9PiBuZXcgVGVtcGxhdGVSZW5kZXJlcih0aGlzLnJlc29sdmUoJ1RlbXBsYXRlTWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQWdlbnRNYW5hZ2VyJywgKCkgPT4gbmV3IEFnZW50TWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpLmdldEJhc2VEaXIoKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNZW1vcnlNYW5hZ2VyJywgKCkgPT4gbmV3IE1lbW9yeU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5zZW1ibGVNYW5hZ2VyJywgKCkgPT4gbmV3IEVuc2VtYmxlTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICBNZW1vcnkuY29uZmlndXJlTWVtb3J5TWFuYWdlclJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpKTtcbiAgICAvLyBJc3N1ZSAjNTE6IENvbmZpZ3VyZSByZXRlbnRpb24gcG9saWN5IHJlc29sdmVyIGZvciBNZW1vcnkgY2xhc3NcbiAgICBNZW1vcnkuY29uZmlndXJlUmV0ZW50aW9uUG9saWN5UmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlJykpO1xuICAgIC8vIElzc3VlICMxMTE6IENvbmZpZ3VyZSBlbGVtZW50IG1hbmFnZXIgcmVzb2x2ZXIgZm9yIEFnZW50TWFuYWdlciAoZWxlbWVudC1hZ25vc3RpYyBhY3RpdmF0aW9uKVxuICAgIEFnZW50TWFuYWdlci5zZXRFbGVtZW50TWFuYWdlclJlc29sdmVyKChtYW5hZ2VyTmFtZTogc3RyaW5nKSA9PiB0aGlzLnJlc29sdmUobWFuYWdlck5hbWUpKTtcbiAgICAvLyBJc3N1ZSAjNDAyOiBDb25maWd1cmUgRGFuZ2VyWm9uZUVuZm9yY2VyIHJlc29sdmVyIGZvciBBZ2VudE1hbmFnZXIgKGF1dG9ub215IGV2YWx1YXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldERhbmdlclpvbmVFbmZvcmNlclJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnRGFuZ2VyWm9uZUVuZm9yY2VyJykpO1xuICAgIC8vIElzc3VlICMxNDI6IENvbmZpZ3VyZSBWZXJpZmljYXRpb25TdG9yZSByZXNvbHZlciBmb3IgQWdlbnRNYW5hZ2VyIChkYW5nZXIgem9uZSB2ZXJpZmljYXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldFZlcmlmaWNhdGlvblN0b3JlUmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25TdG9yZScpKTtcblxuICAgIC8vIFFVRVJZIFNFUlZJQ0VTIChJc3N1ZSAjMzg6IFBhZ2luYXRpb24sIGZpbHRlcmluZywgc29ydGluZylcbiAgICAvLyBUaGVzZSBzZXJ2aWNlcyBhcmUgZWxlbWVudC1hZ25vc3RpYyBhbmQgY2FuIGJlIHVzZWQgd2l0aCBhbnkgZWxlbWVudCB0eXBlXG4gICAgdGhpcy5yZWdpc3RlcignUGFnaW5hdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgUGFnaW5hdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsdGVyU2VydmljZScsICgpID0+IG5ldyBGaWx0ZXJTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NvcnRTZXJ2aWNlJywgKCkgPT4gbmV3IFNvcnRTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRRdWVyeVNlcnZpY2UnLCAoKSA9PiBuZXcgRWxlbWVudFF1ZXJ5U2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZTxQYWdpbmF0aW9uU2VydmljZT4oJ1BhZ2luYXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmU8RmlsdGVyU2VydmljZT4oJ0ZpbHRlclNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxTb3J0U2VydmljZT4oJ1NvcnRTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIENPTlZFUlRFUlNcbiAgICB0aGlzLnJlZ2lzdGVyKCdBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlcicsICgpID0+IG5ldyBBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlcicsICgpID0+IG5ldyBEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlcigpKTtcblxuICAgIC8vIFNFQ1VSSVRZIFNFUlZJQ0VTXG4gICAgLy8gSXNzdWUgIzQwMjogRGFuZ2VyWm9uZUVuZm9yY2VyIGFzIERJLW1hbmFnZWQgc2luZ2xldG9uIChyZXBsYWNlcyBtb2R1bGUtbGV2ZWwgc2luZ2xldG9uKVxuICAgIHRoaXMucmVnaXN0ZXIoJ0RhbmdlclpvbmVFbmZvcmNlcicsICgpID0+IG5ldyBEYW5nZXJab25lRW5mb3JjZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgLy8gSXNzdWUgIzU5ODogQWN0aXZhdGlvblN0b3JlIGZvciBwZXItc2Vzc2lvbiBhY3RpdmF0aW9uIHBlcnNpc3RlbmNlXG4gICAgdGhpcy5yZWdpc3RlcignQWN0aXZhdGlvblN0b3JlJywgKCkgPT4gbmV3IEFjdGl2YXRpb25TdG9yZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICAvLyBJc3N1ZSAjMTQyOiBWZXJpZmljYXRpb25TdG9yZSBmb3IgZGFuZ2VyIHpvbmUgY2hhbGxlbmdlIGNvZGVzIChzZXJ2ZXItc2lkZSlcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJpZmljYXRpb25TdG9yZScsICgpID0+IG5ldyBWZXJpZmljYXRpb25TdG9yZSgpKTtcbiAgICAvLyBJc3N1ZSAjNTIyOiBOb24tYmxvY2tpbmcgT1MgZGlhbG9nIG5vdGlmaWVyIGZvciB2ZXJpZmljYXRpb24gY29kZXNcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJpZmljYXRpb25Ob3RpZmllcicsICgpID0+IG5ldyBWZXJpZmljYXRpb25Ob3RpZmllcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUb2tlbk1hbmFnZXInLCAoKSA9PiBuZXcgVG9rZW5NYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5FbmNyeXB0b3InLCAoKSA9PiBuZXcgUGF0dGVybkVuY3J5cHRvcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb250ZXh0VHJhY2tlcicsICgpID0+IG5ldyBDb250ZXh0VHJhY2tlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYXR0ZXJuRGVjcnlwdG9yJywgKCkgPT4gbmV3IFBhdHRlcm5EZWNyeXB0b3IoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29udGV4dFRyYWNrZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5FeHRyYWN0b3InLCAoKSA9PiBuZXcgUGF0dGVybkV4dHJhY3RvcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGF0dGVybkVuY3J5cHRvcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQmFja2dyb3VuZFZhbGlkYXRvcicsICgpID0+IG5ldyBCYWNrZ3JvdW5kVmFsaWRhdG9yKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQYXR0ZXJuRXh0cmFjdG9yJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NlY3VyaXR5VGVsZW1ldHJ5JywgKCkgPT4gbmV3IFNlY3VyaXR5VGVsZW1ldHJ5KCkpO1xuICAgIENvbnRlbnRWYWxpZGF0b3IuY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdTZWN1cml0eVRlbGVtZXRyeScpKTtcblxuICAgIC8vIE5MUCAmIElOREVYSU5HXG4gICAgdGhpcy5yZWdpc3RlcignTkxQU2NvcmluZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4Q29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gaW5kZXhDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgICAgICByZXR1cm4gbmV3IE5MUFNjb3JpbmdNYW5hZ2VyKHtcbiAgICAgICAgICAgIGNhY2hlRXhwaXJ5OiBjb25maWcubmxwLmNhY2hlRXhwaXJ5TWludXRlcyAqIDYwICogMTAwMCxcbiAgICAgICAgICAgIG1pblRva2VuTGVuZ3RoOiBjb25maWcubmxwLm1pblRva2VuTGVuZ3RoLFxuICAgICAgICAgICAgZW50cm9weUJhbmRzOiBjb25maWcubmxwLmVudHJvcHlCYW5kcyxcbiAgICAgICAgICAgIGphY2NhcmRUaHJlc2hvbGRzOiBjb25maWcubmxwLmphY2NhcmRUaHJlc2hvbGRzXG4gICAgICAgIH0sIGluZGV4Q29uZmlnTWFuYWdlcik7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignVmVyYlRyaWdnZXJNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleENvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGluZGV4Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBWZXJiVHJpZ2dlck1hbmFnZXIoe1xuICAgICAgICAgICAgY29uZmlkZW5jZVRocmVzaG9sZDogY29uZmlnLnZlcmJzLmNvbmZpZGVuY2VUaHJlc2hvbGQsXG4gICAgICAgICAgICBtYXhFbGVtZW50c1BlclZlcmI6IGNvbmZpZy52ZXJicy5tYXhFbGVtZW50c1BlclZlcmIsXG4gICAgICAgICAgICBpbmNsdWRlU3lub255bXM6IGNvbmZpZy52ZXJicy5pbmNsdWRlU3lub255bXNcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignUmVsYXRpb25zaGlwTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhDb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmRleENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwTWFuYWdlcih7XG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgICBtaW5Db25maWRlbmNlOiBjb25maWcucGVyZm9ybWFuY2Uuc2ltaWxhcml0eVRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICBlbmFibGVBdXRvRGlzY292ZXJ5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5kZXhDb25maWdNYW5hZ2VyLFxuICAgICAgICAgICAgdmVyYlRyaWdnZXJNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1ZlcmJUcmlnZ2VyTWFuYWdlcicpLFxuICAgICAgICAgICAgbmxwU2NvcmluZzogdGhpcy5yZXNvbHZlKCdOTFBTY29yaW5nTWFuYWdlcicpLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvSW5kZXhNYW5hZ2VyKHRoaXMucmVzb2x2ZSgnSW5kZXhDb25maWdNYW5hZ2VyJyksIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5oYW5jZWRJbmRleEhlbHBlcnMnLCAoKSA9PiBuZXcgRGVmYXVsdEVuaGFuY2VkSW5kZXhIZWxwZXJzKFxuICAgICAgbmV3IEVsZW1lbnREZWZpbml0aW9uQnVpbGRlcigpLFxuICAgICAgbmV3IFNlbWFudGljUmVsYXRpb25zaGlwU2VydmljZSh7XG4gICAgICAgIG5scFNjb3Jpbmc6IHRoaXMucmVzb2x2ZSgnTkxQU2NvcmluZ01hbmFnZXInKSxcbiAgICAgICAgcmVsYXRpb25zaGlwTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdSZWxhdGlvbnNoaXBNYW5hZ2VyJylcbiAgICAgIH0pLFxuICAgICAgKGNvbnRleHQpID0+IG5ldyBBY3Rpb25UcmlnZ2VyRXh0cmFjdG9yKGNvbnRleHQpLFxuICAgICAgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IG5ldyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIob3B0aW9ucyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdHJhY2tlci5hZGRMb2dMaXN0ZW5lcihnZXRUcmlnZ2VyTWV0cmljc0xvZ0xpc3RlbmVyKFxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKCdMb2dNYW5hZ2VyJyksXG4gICAgICAgICAgICB0aGlzLnJlc29sdmUoJ0NvbnRleHRUcmFja2VyJylcbiAgICAgICAgICApKTtcbiAgICAgICAgfSBjYXRjaCB7IC8qIExvZ01hbmFnZXIgbm90IHlldCByZWdpc3RlcmVkICovIH1cbiAgICAgICAgcmV0dXJuIHRyYWNrZXI7XG4gICAgICB9XG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5oYW5jZWRJbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgRW5oYW5jZWRJbmRleE1hbmFnZXIoXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnSW5kZXhDb25maWdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ05MUFNjb3JpbmdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnVmVyYlRyaWdnZXJNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnUmVsYXRpb25zaGlwTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0VuaGFuY2VkSW5kZXhIZWxwZXJzJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScsICgpID0+IG5ldyBDb2xsZWN0aW9uSW5kZXhDYWNoZShcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgICAgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdQZXJmb3JtYW5jZU1vbml0b3InKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1VuaWZpZWRJbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgVW5pZmllZEluZGV4TWFuYWdlcih7XG4gICAgICAgIHBvcnRmb2xpb0luZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgZ2l0aHViSW5kZXhlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJyksXG4gICAgICAgIGNvbGxlY3Rpb25JbmRleENhY2hlOiB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleENhY2hlJyksXG4gICAgICAgIGdpdGh1YkNsaWVudDogdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgICAgYXBpQ2FjaGU6IHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgICAgcmF0ZUxpbWl0VHJhY2tlcjogdGhpcy5yZXNvbHZlKCdSYXRlTGltaXRUcmFja2VyJyksXG4gICAgICAgIHBlcmZvcm1hbmNlTW9uaXRvcjogdGhpcy5yZXNvbHZlKCdQZXJmb3JtYW5jZU1vbml0b3InKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICB9KSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9TeW5jQ29tcGFyZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvU3luY0NvbXBhcmVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb0Rvd25sb2FkZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvRG93bmxvYWRlcigpKTtcblxuICAgIC8vIFNZTkMgJiBUT09MU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb1B1bGxIYW5kbGVyJywgKCkgPT4gbmV3IFBvcnRmb2xpb1B1bGxIYW5kbGVyKHtcbiAgICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICAgIGluZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgZ2l0aHViSW5kZXhlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIHN5bmNDb21wYXJlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9TeW5jQ29tcGFyZXInKSxcbiAgICAgICAgZG93bmxvYWRlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9Eb3dubG9hZGVyJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgICB0b2tlbk1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1N1Ym1pdFRvUG9ydGZvbGlvVG9vbCcsICgpID0+IG5ldyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wodGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLCB7XG4gICAgICAgIGF1dGhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9JbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIHJhdGVMaW1pdGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlJhdGVMaW1pdGVyJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgICB0b2tlbk1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvU3luY01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvU3luY01hbmFnZXIoe1xuICAgICAgICBjb25maWdNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIGluZGV4ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUG9ydGZvbGlvSW5kZXhlcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgICAgdG9rZW5NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgfSkpO1xuXG4gICAgLy8gU0VSVkVSXG4gICAgdGhpcy5yZWdpc3RlcignU2VydmVyU2V0dXAnLCAoKSA9PiBuZXcgU2VydmVyU2V0dXAoXG4gICAgICB0aGlzLnJlc29sdmU8Q29udGV4dFRyYWNrZXI+KCdDb250ZXh0VHJhY2tlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignU2VydmVyU3RhcnR1cCcsICgpID0+IG5ldyBTZXJ2ZXJTdGFydHVwKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01pZ3JhdGlvbk1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdPcGVyYXRpb25hbFRlbGVtZXRyeScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQnVpbGRJbmZvU2VydmljZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgQnVpbGRJbmZvU2VydmljZSh0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKTtcbiAgICAgIC8vIElzc3VlICM3MDY6IFdpcmUgc3RhcnR1cCBpbnN0cnVtZW50YXRpb25cbiAgICAgIHNlcnZpY2Uuc2V0U3RhcnR1cFRpbWVyKHRoaXMucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKSk7XG4gICAgICBzZXJ2aWNlLnNldERlZmVycmVkU2V0dXBDaGVja2VyKCgpID0+IHRoaXMuZGVmZXJyZWRTZXR1cENvbXBsZXRlKTtcbiAgICAgIHJldHVybiBzZXJ2aWNlO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcmZvcm1hbmNlTW9uaXRvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IG1vbml0b3IgPSBuZXcgUGVyZm9ybWFuY2VNb25pdG9yKCk7XG4gICAgICBtb25pdG9yLnN0YXJ0TW9uaXRvcmluZygpO1xuICAgICAgcmV0dXJuIG1vbml0b3I7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicsICgpID0+IG5ldyBPcGVyYXRpb25NZXRyaWNzVHJhY2tlcigpLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdHYXRla2VlcGVyTWV0cmljc1RyYWNrZXInLCAoKSA9PiBuZXcgR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyKCksIHsgc2luZ2xldG9uOiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFBlcnNvbmFzRGlyKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFzRGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgcG9ydGZvbGlvIOKAlCBjcml0aWNhbCBwYXRoIG9ubHkuXG4gICAqXG4gICAqIElzc3VlICM3MDY6IFNwbGl0IGZyb20gdGhlIG9yaWdpbmFsIG1vbm9saXRoaWMgcHJlcGFyZVBvcnRmb2xpbygpLlxuICAgKiBPbmx5IHdvcmsgcmVxdWlyZWQgYmVmb3JlIE1DUCBjb25uZWN0KCkgcnVucyBoZXJlLiBOb24tY3JpdGljYWwgd29ya1xuICAgKiAobWVtb3J5IGF1dG8tbG9hZCwgYWN0aXZhdGlvbiByZXN0b3JlLCBsb2cgaG9va3MsIGRhbmdlciB6b25lIGluaXQpXG4gICAqIGlzIGRlZmVycmVkIHRvIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIHdoaWNoIHJ1bnMgcG9zdC1jb25uZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZXBhcmVQb3J0Zm9saW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSB0aGlzLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJyk7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBtaWdyYXRpb25NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1pZ3JhdGlvbk1hbmFnZXI+KCdNaWdyYXRpb25NYW5hZ2VyJyk7XG4gICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpO1xuXG4gICAgLy8gLS0tIGNvbmZpZ19jaGVja3MgKGNyaXRpY2FsKSAtLS1cbiAgICB0aW1lci5zdGFydFBoYXNlKCdjb25maWdfY2hlY2tzJywgdHJ1ZSk7XG5cbiAgICAvLyBQRVJGT1JNQU5DRSBPUFRJTUlaQVRJT046IFJ1biBpbmRlcGVuZGVudCBjaGVja3MgaW4gcGFyYWxsZWwgKDQwLTYwJSBmYXN0ZXIgc3RhcnR1cClcbiAgICAvLyBVc2UgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGNhcHR1cmUgYWxsIGNoZWNrIHJlc3VsdHMsIGV2ZW4gaWYgb25lIGZhaWxzXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICBtaWdyYXRpb25NYW5hZ2VyLm5lZWRzTWlncmF0aW9uKCksXG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpXG4gICAgXSk7XG5cbiAgICAvLyBFeHRyYWN0IHJlc3VsdHMgYW5kIGNvbGxlY3QgYW55IGVycm9yc1xuICAgIGNvbnN0IGNoZWNrRXJyb3JzOiBBcnJheTx7IGNoZWNrOiBzdHJpbmc7IGVycm9yOiBFcnJvciB9PiA9IFtdO1xuXG4gICAgbGV0IG5lZWRzTWlncmF0aW9uID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHNbMF0uc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgbmVlZHNNaWdyYXRpb24gPSByZXN1bHRzWzBdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja0Vycm9ycy5wdXNoKHtcbiAgICAgICAgY2hlY2s6ICdtaWdyYXRpb24nLFxuICAgICAgICBlcnJvcjogcmVzdWx0c1swXS5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlc3VsdHNbMF0ucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHRzWzBdLnJlYXNvbikpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgcG9ydGZvbGlvRXhpc3RzID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHNbMV0uc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgcG9ydGZvbGlvRXhpc3RzID0gcmVzdWx0c1sxXS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tFcnJvcnMucHVzaCh7XG4gICAgICAgIGNoZWNrOiAncG9ydGZvbGlvJyxcbiAgICAgICAgZXJyb3I6IHJlc3VsdHNbMV0ucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHRzWzFdLnJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVzdWx0c1sxXS5yZWFzb24pKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgYm90aCBjaGVja3MgZmFpbGVkLCB0aHJvdyBjb21wcmVoZW5zaXZlIGVycm9yXG4gICAgaWYgKGNoZWNrRXJyb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGNoZWNrRXJyb3JzLm1hcChlID0+IGAke2UuY2hlY2t9OiAke2UuZXJyb3IubWVzc2FnZX1gKS5qb2luKCc7ICcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3J0Zm9saW8gcHJlcGFyYXRpb24gZmFpbGVkIC0gYWxsIGNoZWNrcyBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlc31gKTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IG9uZSBjaGVjayBmYWlsZWQsIGxvZyB3YXJuaW5nIGJ1dCBjb250aW51ZVxuICAgIGlmIChjaGVja0Vycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBQb3J0Zm9saW8gY2hlY2sgZmFpbGVkIGJ1dCBjb250aW51aW5nOiAke2NoZWNrRXJyb3JzWzBdLmNoZWNrfSAtICR7Y2hlY2tFcnJvcnNbMF0uZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICB0aW1lci5lbmRQaGFzZSgnY29uZmlnX2NoZWNrcycpO1xuXG4gICAgLy8gLS0tIG1pZ3JhdGlvbiAoY3JpdGljYWwsIGNvbmRpdGlvbmFsKSAtLS1cbiAgICBpZiAobmVlZHNNaWdyYXRpb24pIHtcbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ21pZ3JhdGlvbicsIHRydWUpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJMZWdhY3kgcGVyc29uYXMgZGV0ZWN0ZWQuIFN0YXJ0aW5nIG1pZ3JhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1pZ3JhdGlvbk1hbmFnZXIubWlncmF0ZSh7IGJhY2t1cDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdWNjZXNzZnVsbHkgbWlncmF0ZWQgJHtyZXN1bHQubWlncmF0ZWRDb3VudH0gcGVyc29uYXNgKTtcbiAgICAgICAgaWYgKHJlc3VsdC5iYWNrZWRVcCAmJiByZXN1bHQuYmFja3VwUGF0aCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBCYWNrdXAgY3JlYXRlZCBhdDogJHtyZXN1bHQuYmFja3VwUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiTWlncmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yczpcIik7XG4gICAgICAgIHJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyKSA9PiBsb2dnZXIuZXJyb3IoYCAgLSAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgICB0aW1lci5lbmRQaGFzZSgnbWlncmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gLS0tIHBvcnRmb2xpb19pbml0IChjcml0aWNhbCwgY29uZGl0aW9uYWwpIC0tLVxuICAgIGlmICghcG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdwb3J0Zm9saW9faW5pdCcsIHRydWUpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJDcmVhdGluZyBwb3J0Zm9saW8gZGlyZWN0b3J5IHN0cnVjdHVyZS4uLlwiKTtcbiAgICAgIGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgdGltZXIuZW5kUGhhc2UoJ3BvcnRmb2xpb19pbml0Jyk7XG4gICAgfVxuXG4gICAgLy8gUEVSRk9STUFOQ0UgT1BUSU1JWkFUSU9OOiBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgaW4gYmFja2dyb3VuZCAobm9uLWJsb2NraW5nKVxuICAgIC8vIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGNvbGxlY3Rpb24gY2FjaGUgaXMgbm90IGNyaXRpY2FsIGZvciBzdGFydHVwXG4gICAgdGhpcy5pbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCkuY2F0Y2goZXJyID0+XG4gICAgICBsb2dnZXIud2FybignQmFja2dyb3VuZCBjb2xsZWN0aW9uIGNhY2hlIGluaXRpYWxpemF0aW9uIGZhaWxlZCAod2lsbCByZXRyeSBvbiBkZW1hbmQpJywgZXJyKVxuICAgICk7XG5cbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuXG4gICAgLy8gLS0tIGNvbmZpZ19tYW5hZ2VyIChjcml0aWNhbCkgLS0tXG4gICAgdGltZXIuc3RhcnRQaGFzZSgnY29uZmlnX21hbmFnZXInLCB0cnVlKTtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgYXdhaXQgY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgdGltZXIuZW5kUGhhc2UoJ2NvbmZpZ19tYW5hZ2VyJyk7XG5cbiAgICBjb25zdCBlbGFwc2VkVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgbG9nZ2VyLmluZm8oYFtTdGFydHVwXSBDcml0aWNhbCBwb3J0Zm9saW8gcGF0aCBjb21wbGV0ZWQgaW4gJHtlbGFwc2VkVGltZX1tcyAocGVyc29uYXMgZGlyZWN0b3J5OiAke3RoaXMucGVyc29uYXNEaXJ9KWApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIG5vbi1jcml0aWNhbCBzZXR1cCBhZnRlciBNQ1AgY29ubmVjdCgpLlxuICAgKlxuICAgKiBJc3N1ZSAjNzA2OiBUaGVzZSBvcGVyYXRpb25zIHdlcmUgcHJldmlvdXNseSBpbiBwcmVwYXJlUG9ydGZvbGlvKCkgYnV0IGFyZVxuICAgKiBub24tZmF0YWwgYW5kIGNhbiBzYWZlbHkgcnVuIGFmdGVyIHRoZSBzZXJ2ZXIgaXMgYWNjZXB0aW5nIGNvbm5lY3Rpb25zLlxuICAgKiBUaGlzIHNocmlua3MgdGhlIGNyaXRpY2FsIHBhdGggYnkgMTAwMC0zNzAwbXMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tcGxldGVEZWZlcnJlZFNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gdGhpcy5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpO1xuXG4gICAgLy8gSXNzdWUgIzcwNjogVGVzdCBob29rIOKAlCBpbmplY3QgYXJ0aWZpY2lhbCBkZWxheSB0byBzaW11bGF0ZSBzbG93IGRlZmVycmVkIHNldHVwLlxuICAgIC8vIE9ubHkgYWN0aXZlIHdoZW4gRE9MTEhPVVNFX1RFU1RfREVGRVJSRURfREVMQVlfTVMgaXMgc2V0IChpbnRlZ3JhdGlvbiB0ZXN0cykuXG4gICAgY29uc3QgdGVzdERlbGF5ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1RFU1RfREVGRVJSRURfREVMQVlfTVMgfHwgJzAnLCAxMCk7XG4gICAgaWYgKHRlc3REZWxheSA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU3RhcnR1cF0gVGVzdCBkZWxheSBpbmplY3RlZDogJHt0ZXN0RGVsYXl9bXNgKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0ZXN0RGVsYXkpKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkTWVtb3J5QXV0b2xvYWQodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRBY3RpdmF0aW9uUmVzdG9yZSh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZFBvbGljeUV4cG9ydCgpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRMb2dIb29rcyh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZE1ldHJpY3NDb2xsZWN0b3JzKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkV2ViQ29uc29sZSh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZERhbmdlclpvbmVJbml0KHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkUGF0dGVybkVuY3J5cHRpb24odGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRCYWNrZ3JvdW5kVmFsaWRhdG9yKHRpbWVyKTtcblxuICAgIHRoaXMuZGVmZXJyZWRTZXR1cENvbXBsZXRlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHJlcG9ydCA9IHRpbWVyLmdldFJlcG9ydCgpO1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFtTdGFydHVwXSBEZWZlcnJlZCBzZXR1cCBjb21wbGV0ZWQgaW4gJHtyZXBvcnQuZGVmZXJyZWRNc31tcyBgICtcbiAgICAgIGAodG90YWwgc3RhcnR1cDogJHtyZXBvcnQudG90YWxNc31tcywgY3JpdGljYWw6ICR7cmVwb3J0LmNyaXRpY2FsUGF0aE1zfW1zKWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZE1lbW9yeUF1dG9sb2FkKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdtZW1vcnlfYXV0b2xvYWQnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8Q29uZmlnTWFuYWdlcj4oJ0NvbmZpZ01hbmFnZXInKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG5cbiAgICAgIGlmIChjb25maWcuYXV0b0xvYWQuZW5hYmxlZCkge1xuICAgICAgICBjb25zdCBtZW1vcnlNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1lbW9yeU1hbmFnZXI+KCdNZW1vcnlNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGF1dG9Mb2FkUmVzdWx0ID0gYXdhaXQgbWVtb3J5TWFuYWdlci5sb2FkQW5kQWN0aXZhdGVBdXRvTG9hZE1lbW9yaWVzKCk7XG5cbiAgICAgICAgaWYgKGF1dG9Mb2FkUmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgW0NvbnRhaW5lcl0gQXV0by1sb2FkIGNvbXBsZXRlZCB3aXRoICR7YXV0b0xvYWRSZXN1bHQuZXJyb3JzLmxlbmd0aH0gZXJyb3Iocyk6YCxcbiAgICAgICAgICAgIGF1dG9Mb2FkUmVzdWx0LmVycm9yc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICBgW0NvbnRhaW5lcl0gQXV0by1sb2FkZWQgJHthdXRvTG9hZFJlc3VsdC5sb2FkZWR9IG1lbW9yaWVzIGAgK1xuICAgICAgICAgIGAofiR7YXV0b0xvYWRSZXN1bHQudG90YWxUb2tlbnN9IHRva2VucyksICR7YXV0b0xvYWRSZXN1bHQuc2tpcHBlZH0gc2tpcHBlZGBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gQXV0by1sb2FkIG1lbW9yaWVzIGRpc2FibGVkIGluIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbQ29udGFpbmVyXSBNZW1vcnkgYXV0by1sb2FkIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdtZW1vcnlfYXV0b2xvYWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRBY3RpdmF0aW9uUmVzdG9yZSh0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnYWN0aXZhdGlvbl9yZXN0b3JlJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhY3RpdmF0aW9uU3RvcmUgPSB0aGlzLnJlc29sdmU8QWN0aXZhdGlvblN0b3JlPignQWN0aXZhdGlvblN0b3JlJyk7XG4gICAgICBhd2FpdCBhY3RpdmF0aW9uU3RvcmUuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICBpZiAoYWN0aXZhdGlvblN0b3JlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdG9yZUFjdGl2YXRpb25zKGFjdGl2YXRpb25TdG9yZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBBY3RpdmF0aW9uIHN0YXRlIHJlc3RvcmF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdhY3RpdmF0aW9uX3Jlc3RvcmUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRQb2xpY3lFeHBvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvbGljeUV4cG9ydFNlcnZpY2UgPSB0aGlzLnJlc29sdmU8UG9saWN5RXhwb3J0U2VydmljZT4oJ1BvbGljeUV4cG9ydFNlcnZpY2UnKTtcbiAgICAgIGF3YWl0IHBvbGljeUV4cG9ydFNlcnZpY2UuZXhwb3J0UG9saWNpZXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBQb2xpY3kgZXhwb3J0IHNraXBwZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRMb2dIb29rcyh0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnbG9nX2hvb2tzJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2dNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPExvZ01hbmFnZXI+KCdMb2dNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBsb2dDbGVhbnVwcyA9IHdpcmVMb2dIb29rcyhsb2dNYW5hZ2VyLCB0aGlzKTtcbiAgICAgIHRoaXMucmVnaXN0ZXIoJ19sb2dIb29rQ2xlYW51cHMnLCAoKSA9PiBsb2dDbGVhbnVwcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBGYWlsZWQgdG8gd2lyZSBsb2cgaG9va3M6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgnbG9nX2hvb2tzJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkTWV0cmljc0NvbGxlY3RvcnModGltZXI6IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ21ldHJpY3NfY29sbGVjdG9ycycsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgdGhpcy53aXJlTWV0cmljc0NvbGxlY3RvcnMobWV0cmljc01hbmFnZXIpO1xuICAgICAgbWV0cmljc01hbmFnZXIuc3RhcnQoKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbQ29udGFpbmVyXSBNZXRyaWNzIGNvbGxlY3Rpb24gc3RhcnRlZCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gTWV0cmljcyB3aXJpbmcgc2tpcHBlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdtZXRyaWNzX2NvbGxlY3RvcnMnKTtcbiAgfVxuXG4gIC8qKiBUcnkgdG8gcmVzb2x2ZSBhIHNlcnZpY2UsIHJldHVybmluZyB1bmRlZmluZWQgaWYgbm90IHJlZ2lzdGVyZWQgKi9cbiAgcHJpdmF0ZSB0cnlSZXNvbHZlPFQ+KG5hbWU6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7IHJldHVybiB0aGlzLnJlc29sdmU8VD4obmFtZSk7IH0gY2F0Y2ggeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIH1cblxuICAvKiogV2lyZSBTU0UgYnJvYWRjYXN0IHNpbmtzIGZvciB0aGUgd2ViIGNvbnNvbGUgKi9cbiAgcHJpdmF0ZSB3aXJlU1NFQnJvYWRjYXN0cyhcbiAgICB3ZWJSZXN1bHQ6IGltcG9ydCgnLi4vd2ViL3NlcnZlci5qcycpLldlYlNlcnZlclJlc3VsdCxcbiAgICBtZXRyaWNzU2luazogTWVtb3J5TWV0cmljc1NpbmsgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIGlmICh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSB7XG4gICAgICBjb25zdCBsb2dNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPExvZ01hbmFnZXI+KCdMb2dNYW5hZ2VyJyk7XG4gICAgICBsb2dNYW5hZ2VyLnJlZ2lzdGVyU2luayhuZXcgV2ViU1NFTG9nU2luayh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSk7XG4gICAgfVxuICAgIGlmICh3ZWJSZXN1bHQubWV0cmljc09uU25hcHNob3QgJiYgbWV0cmljc1NpbmspIHtcbiAgICAgIGNvbnN0IG1ldHJpY3NNYW5hZ2VyID0gdGhpcy50cnlSZXNvbHZlPE1ldHJpY3NNYW5hZ2VyPignTWV0cmljc01hbmFnZXInKTtcbiAgICAgIGlmIChtZXRyaWNzTWFuYWdlcikge1xuICAgICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlclNpbmsobmV3IFdlYlNTRU1ldHJpY3NTaW5rKHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRXZWJDb25zb2xlKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCd3ZWJfY29uc29sZScsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGFjdGl2YXRpb25TdG9yZSA9IHRoaXMucmVzb2x2ZTxBY3RpdmF0aW9uU3RvcmU+KCdBY3RpdmF0aW9uU3RvcmUnKTtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGFjdGl2YXRpb25TdG9yZS5nZXRTZXNzaW9uSWQoKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKTtcbiAgICAgIGNvbnN0IG1lbW9yeVNpbmsgPSB0aGlzLnJlc29sdmU8TWVtb3J5TG9nU2luaz4oJ01lbW9yeUxvZ1NpbmsnKTtcbiAgICAgIGNvbnN0IG1ldHJpY3NTaW5rID0gdGhpcy50cnlSZXNvbHZlPE1lbW9yeU1ldHJpY3NTaW5rPignTWVtb3J5TWV0cmljc1NpbmsnKTtcbiAgICAgIGNvbnN0IG1jcEFxbEhhbmRsZXIgPSB0aGlzLnRyeVJlc29sdmU8TUNQQVFMSGFuZGxlcj4oJ21jcEFxbEhhbmRsZXInKTtcbiAgICAgIGNvbnN0IGxvZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TG9nTWFuYWdlcj4oJ0xvZ01hbmFnZXInKTtcblxuICAgICAgY29uc3QgeyBzdGFydFVuaWZpZWRDb25zb2xlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3dlYi9jb25zb2xlL1VuaWZpZWRDb25zb2xlLmpzJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydFVuaWZpZWRDb25zb2xlKHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBwb3J0Zm9saW9EaXI6IHBvcnRmb2xpb01hbmFnZXIuZ2V0QmFzZURpcigpLFxuICAgICAgICBtZW1vcnlTaW5rLFxuICAgICAgICBtZXRyaWNzU2luayxcbiAgICAgICAgbWNwQXFsSGFuZGxlcixcbiAgICAgICAgcmVnaXN0ZXJMb2dTaW5rOiAoc2luaykgPT4gbG9nTWFuYWdlci5yZWdpc3RlclNpbmsoc2luayksXG4gICAgICAgIHdpcmVTU0VCcm9hZGNhc3RzOiAod2ViUmVzdWx0LCBtU2luaykgPT4gdGhpcy53aXJlU1NFQnJvYWRjYXN0cyh3ZWJSZXN1bHQsIG1TaW5rKSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW0NvbnRhaW5lcl0gV2ViIGNvbnNvbGUgc3RhcnRlZCBhcyAke3Jlc3VsdC5yb2xlfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gV2ViIGNvbnNvbGUgc3RhcnR1cCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgnd2ViX2NvbnNvbGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWREYW5nZXJab25lSW5pdCh0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnZGFuZ2VyX3pvbmVfaW5pdCcsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGFuZ2VyWm9uZUVuZm9yY2VyID0gdGhpcy5yZXNvbHZlPERhbmdlclpvbmVFbmZvcmNlcj4oJ0RhbmdlclpvbmVFbmZvcmNlcicpO1xuICAgICAgYXdhaXQgZGFuZ2VyWm9uZUVuZm9yY2VyLmluaXRpYWxpemUoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIERhbmdlclpvbmVFbmZvcmNlciBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgnZGFuZ2VyX3pvbmVfaW5pdCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBhdHRlcm5FbmNyeXB0aW9uKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdwYXR0ZXJuX2VuY3J5cHRpb24nLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdHRlcm5FbmNyeXB0b3IgPSB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKSBhcyBQYXR0ZXJuRW5jcnlwdG9yO1xuICAgICAgYXdhaXQgcGF0dGVybkVuY3J5cHRvci5pbml0aWFsaXplKCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIlBhdHRlcm4gZW5jcnlwdGlvbiBpbml0aWFsaXplZFwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIFBhdHRlcm4gZW5jcnlwdGlvbiBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgncGF0dGVybl9lbmNyeXB0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkQmFja2dyb3VuZFZhbGlkYXRvcih0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnYmFja2dyb3VuZF92YWxpZGF0b3InLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmRWYWxpZGF0b3IgPSB0aGlzLnJlc29sdmUoJ0JhY2tncm91bmRWYWxpZGF0b3InKSBhcyBhbnk7XG4gICAgICBiYWNrZ3JvdW5kVmFsaWRhdG9yLnN0YXJ0KCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIkJhY2tncm91bmQgdmFsaWRhdG9yIHN0YXJ0ZWQgZm9yIG1lbW9yeSBzZWN1cml0eVwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIEJhY2tncm91bmQgdmFsaWRhdG9yIHN0YXJ0IGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdiYWNrZ3JvdW5kX3ZhbGlkYXRvcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgcGVyLXNlc3Npb24gYWN0aXZhdGlvbiBzdGF0ZSBmcm9tIHRoZSBBY3RpdmF0aW9uU3RvcmUuXG4gICAqIENhbGxlZCBkdXJpbmcgcHJlcGFyZVBvcnRmb2xpbygpIGFmdGVyIGF1dG8tbG9hZCBtZW1vcmllcy5cbiAgICpcbiAgICogSXNzdWUgIzU5ODogRWFjaCBlbGVtZW50IHR5cGUgaXMgcmVzdG9yZWQgaW5kZXBlbmRlbnRseS5cbiAgICogTWlzc2luZyBlbGVtZW50cyAoZGVsZXRlZCBzaW5jZSBsYXN0IHNlc3Npb24pIGFyZSBza2lwcGVkIGFuZCBwcnVuZWQuXG4gICAqIEF1dG8tbG9hZGVkIG1lbW9yaWVzIGFyZSBkZWR1cGxpY2F0ZWQgKG5vdCBhY3RpdmF0ZWQgdHdpY2UpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXN0b3JlQWN0aXZhdGlvbnMoc3RvcmU6IEFjdGl2YXRpb25TdG9yZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlcnNvbmFNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFNYW5hZ2VyPignUGVyc29uYU1hbmFnZXInKTtcbiAgICBjb25zdCBza2lsbE1hbmFnZXIgPSB0aGlzLnJlc29sdmU8U2tpbGxNYW5hZ2VyPignU2tpbGxNYW5hZ2VyJyk7XG4gICAgY29uc3QgYWdlbnRNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEFnZW50TWFuYWdlcj4oJ0FnZW50TWFuYWdlcicpO1xuICAgIGNvbnN0IG1lbW9yeU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWVtb3J5TWFuYWdlcj4oJ01lbW9yeU1hbmFnZXInKTtcbiAgICBjb25zdCBlbnNlbWJsZU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8RW5zZW1ibGVNYW5hZ2VyPignRW5zZW1ibGVNYW5hZ2VyJyk7XG5cbiAgICBsZXQgcmVzdG9yZWRDb3VudCA9IDA7XG4gICAgbGV0IHNraXBwZWRDb3VudCA9IDA7XG5cbiAgICAvLyBSZXN0b3JlIHBlcnNvbmFzICh1c2VzIGZpbGVuYW1lIGlmIGF2YWlsYWJsZSwgZmFsbHMgYmFjayB0byBuYW1lKVxuICAgIC8vIElzc3VlICM4NDM6IGFjdGl2YXRlUGVyc29uYSgpIGlzIG5vdyBhc3luYyDigJQgdXNlcyBkaXNrIGZhbGxiYWNrIGZvciBjYWNoZSBtaXNzZXNcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ3BlcnNvbmEnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGFjdGl2YXRpb24uZmlsZW5hbWUgfHwgYWN0aXZhdGlvbi5uYW1lO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJzb25hTWFuYWdlci5hY3RpdmF0ZVBlcnNvbmEoaWRlbnRpZmllcik7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBwZXJzb25hICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdwZXJzb25hJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIHBlcnNvbmEgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdwZXJzb25hJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBza2lsbHNcbiAgICAvLyBOT1RFOiBhY3RpdmF0ZVNraWxsKCkgcmV0dXJucyB7c3VjY2VzcywgbWVzc2FnZX0g4oCUIGl0IG5ldmVyIHRocm93cyBvbiBub3QtZm91bmQuXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdza2lsbCcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBza2lsbE1hbmFnZXIuYWN0aXZhdGVTa2lsbChhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3Npbmcgc2tpbGwgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3NraWxsJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIHNraWxsICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignc2tpbGwnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGFnZW50c1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnYWdlbnQnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWdlbnRNYW5hZ2VyLmFjdGl2YXRlQWdlbnQoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIGFnZW50ICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdhZ2VudCcsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBhZ2VudCAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2FnZW50JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBtZW1vcmllcyAoZGVkdXAgYWdhaW5zdCBhdXRvLWxvYWRlZCBvbmVzKVxuICAgIGNvbnN0IGFjdGl2ZU1lbW9yaWVzID0gYXdhaXQgbWVtb3J5TWFuYWdlci5nZXRBY3RpdmVNZW1vcmllcygpO1xuICAgIGNvbnN0IGFjdGl2ZU1lbW9yeU5hbWVzID0gbmV3IFNldChhY3RpdmVNZW1vcmllcy5tYXAobSA9PiBtLm1ldGFkYXRhLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ21lbW9yeScpKSB7XG4gICAgICBpZiAoYWN0aXZlTWVtb3J5TmFtZXMuaGFzKGFjdGl2YXRpb24ubmFtZSkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBNZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfScgYWxyZWFkeSBhY3RpdmUgKGF1dG8tbG9hZGVkKSwgc2tpcHBpbmdgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtZW1vcnlNYW5hZ2VyLmFjdGl2YXRlTWVtb3J5KGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBtZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ21lbW9yeScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBtZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdtZW1vcnknLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGVuc2VtYmxlc1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnZW5zZW1ibGUnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zZW1ibGVNYW5hZ2VyLmFjdGl2YXRlRW5zZW1ibGUoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIGVuc2VtYmxlICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdlbnNlbWJsZScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBlbnNlbWJsZSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2Vuc2VtYmxlJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3RvcmVkQ291bnQgPiAwIHx8IHNraXBwZWRDb3VudCA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgW0FjdGl2YXRpb25TdG9yZV0gUmVzdG9yZWQgJHtyZXN0b3JlZENvdW50fSBlbGVtZW50KHMpLCBza2lwcGVkICR7c2tpcHBlZENvdW50fSBzdGFsZSBmb3Igc2Vzc2lvbiAnJHtzdG9yZS5nZXRTZXNzaW9uSWQoKX0nYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIGFsbCBoYW5kbGVycyB3aXRob3V0IHJlZ2lzdGVyaW5nIE1DUCB0b29scy5cbiAgICogVXNlZCBieSB3ZWItb25seSBtb2RlICgtLXdlYikgdG8gZ2V0IE1DUEFRTEhhbmRsZXIgd2l0aG91dCBhbiBNQ1AgU2VydmVyLlxuICAgKiBJc3N1ZSAjNzk2OiBTcGxpdCBESSBjb250YWluZXIgYm9vdHN0cmFwIGZyb20gdHJhbnNwb3J0IGNvbm5lY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYm9vdHN0cmFwSGFuZGxlcnMoKTogUHJvbWlzZTxIYW5kbGVyQnVuZGxlPiB7XG4gICAgaWYgKCF0aGlzLnBlcnNvbmFzRGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQZXJzb25hIGRpcmVjdG9yeSBub3QgaW5pdGlhbGl6ZWQuIENhbGwgcHJlcGFyZVBvcnRmb2xpbygpIGZpcnN0LlwiKTtcbiAgICB9XG5cbiAgICBQYXRoVmFsaWRhdG9yLmluaXRpYWxpemUodGhpcy5wZXJzb25hc0Rpcik7XG5cbiAgICBjb25zdCBpbmRpY2F0b3JTZXJ2aWNlID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlPignUGVyc29uYUluZGljYXRvclNlcnZpY2UnKTtcbiAgICBjb25zdCBwZXJzb25hTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQZXJzb25hTWFuYWdlcj4oJ1BlcnNvbmFNYW5hZ2VyJyk7XG4gICAgY29uc3QgaW5pdFNlcnZpY2UgPSB0aGlzLnJlc29sdmU8SW5pdGlhbGl6YXRpb25TZXJ2aWNlPignSW5pdGlhbGl6YXRpb25TZXJ2aWNlJyk7XG4gICAgY29uc3QgcGVyc29uYUV4cG9ydGVyID0gbmV3IFBlcnNvbmFFeHBvcnRlcigoKSA9PiBwZXJzb25hTWFuYWdlci5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCkpO1xuICAgIGNvbnN0IHBlcnNvbmFJbXBvcnRlciA9IG5ldyBQZXJzb25hSW1wb3J0ZXIodGhpcy5wZXJzb25hc0RpciwgKCkgPT4gcGVyc29uYU1hbmFnZXIuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpKTtcblxuICAgIC8vIENyZWF0ZSBzdGF0ZSBhY2Nlc3NvciBmb3IgUGVyc29uYUhhbmRsZXJcbiAgICBjb25zdCBhY3RpdmVQZXJzb25hQWNjZXNzb3IgPSB7XG4gICAgICBnZXQ6ICgpID0+IHBlcnNvbmFNYW5hZ2VyLmdldEFjdGl2ZVBlcnNvbmEoKT8uZmlsZW5hbWUgfHwgbnVsbCxcbiAgICAgIHNldDogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIC8vIElzc3VlICM4NDM6IGFjdGl2YXRlUGVyc29uYSBpcyBub3cgYXN5bmMgYnV0IHRoaXMgc2V0dGVyIGlzIHN5bmNocm9ub3VzLlxuICAgICAgICAgIC8vIEZpcmUtYW5kLWZvcmdldCDigJQgUGVyc29uYUhhbmRsZXIgZG9lcyBpdHMgb3duIGxvb2t1cCBiZWZvcmUgY2FsbGluZyBzZXQoKS5cbiAgICAgICAgICAvLyBMb2cgYXQgZXJyb3IgbGV2ZWwgc2luY2UgYWN0aXZhdGlvbiBmYWlsdXJlcyBoZXJlIGluZGljYXRlIHN0YWxlIHN0YXRlLlxuICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyLmFjdGl2YXRlUGVyc29uYSh2YWx1ZSkuY2F0Y2goZXJyID0+XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFtDb250YWluZXJdIFBlcnNvbmEgYWN0aXZhdGlvbiBmYWlsZWQgZm9yIFwiJHt2YWx1ZX1cIiDigJQgc3RhdGUgYWNjZXNzb3IgbWF5IGJlIHN0YWxlOmAsIGVycilcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyLmRlYWN0aXZhdGVQZXJzb25hKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcGVyc29uYUhhbmRsZXIgPSBuZXcgUGVyc29uYUhhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIHBlcnNvbmFFeHBvcnRlcixcbiAgICAgIHBlcnNvbmFJbXBvcnRlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIGFjdGl2ZVBlcnNvbmFBY2Nlc3NvclxuICAgICk7XG5cbiAgICBhd2FpdCBwZXJzb25hTWFuYWdlci5yZWxvYWQoKTtcblxuICAgIGNvbnN0IGVsZW1lbnRDcnVkSGFuZGxlciA9IG5ldyBFbGVtZW50Q1JVREhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1NraWxsTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUZW1wbGF0ZU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVSZW5kZXJlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBZ2VudE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbnNlbWJsZU1hbmFnZXInKSxcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2UsXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbGVtZW50UXVlcnlTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBY3RpdmF0aW9uU3RvcmUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb2xpY3lFeHBvcnRTZXJ2aWNlJylcbiAgICApO1xuICAgIC8vIFJlZ2lzdGVyIGZvciBsYXp5IHJlc29sdXRpb24gYnkgUG9saWN5RXhwb3J0U2VydmljZVxuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRDUlVESGFuZGxlcicsICgpID0+IGVsZW1lbnRDcnVkSGFuZGxlcik7XG5cbiAgICAvLyBNQ1BBUUxIYW5kbGVyIGNyZWF0ZWQgbGF0ZXIgYWZ0ZXIgYWxsIGhhbmRsZXJzIGFyZSBpbnN0YW50aWF0ZWRcbiAgICAvLyBTZWUgYmVsb3cgYWZ0ZXIgZW5oYW5jZWRJbmRleEhhbmRsZXIgY3JlYXRpb25cblxuICAgIGNvbnN0IGNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uQnJvd3NlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uU2VhcmNoJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFEZXRhaWxzJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRJbnN0YWxsZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLCAvLyBVc2UgdGhlIHJlc29sdmVkIFBlcnNvbmFNYW5hZ2VyXG4gICAgICB0aGlzLnJlc29sdmUoJ1N1Ym1pdFRvUG9ydGZvbGlvVG9vbCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0luaXRpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICk7XG5cbiAgICBjb25zdCBwb3J0Zm9saW9IYW5kbGVyID0gbmV3IFBvcnRmb2xpb0hhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUHVsbEhhbmRsZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1VuaWZpZWRJbmRleE1hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJylcbiAgICApO1xuXG4gICAgY29uc3QgZ2l0aHViQXV0aEhhbmRsZXIgPSBuZXcgR2l0SHViQXV0aEhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApO1xuXG4gICAgY29uc3QgZGlzcGxheUNvbmZpZ0hhbmRsZXIgPSBuZXcgRGlzcGxheUNvbmZpZ0hhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICBjb25zdCBpZGVudGl0eUhhbmRsZXIgPSBuZXcgSWRlbnRpdHlIYW5kbGVyKFxuICAgICAgcGVyc29uYU1hbmFnZXIsXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuXG4gICAgY29uc3QgY29uZmlnSGFuZGxlciA9IG5ldyBDb25maWdIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuICAgIGNvbnN0IHN5bmNIYW5kbGVyID0gbmV3IFN5bmNIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9TeW5jTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIGNvbnN0IGVuaGFuY2VkSW5kZXhIYW5kbGVyID0gbmV3IEVuaGFuY2VkSW5kZXhIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbmhhbmNlZEluZGV4TWFuYWdlcicpLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICAvLyBJc3N1ZSAjNDUyOiBDcmVhdGUgR2F0ZWtlZXBlciBwb2xpY3kgZW5naW5lIGluc3RhbmNlXG4gICAgLy8gSXNzdWUgIzY3OTogYWxsb3dFbGVtZW50UG9saWN5T3ZlcnJpZGVzIHdpcmVkIGZyb20gZW52IChET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVMpXG4gICAgY29uc3QgZ2F0ZWtlZXBlciA9IG5ldyBHYXRla2VlcGVyKHVuZGVmaW5lZCwge1xuICAgICAgZW5hYmxlQXVkaXRMb2dnaW5nOiB0cnVlLFxuICAgICAgcmVxdWlyZURhbmdlclpvbmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICBhbGxvd0VsZW1lbnRQb2xpY3lPdmVycmlkZXM6IGVudi5ET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVMsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgTUNQQVFMSGFuZGxlciB3aXRoIGFsbCBhdmFpbGFibGUgaGFuZGxlcnMgZm9yIGZ1bGwgb3BlcmF0aW9uIGNvdmVyYWdlIChJc3N1ZSAjMjQxKVxuICAgIC8vIElzc3VlICMzMDE6IFBhc3MgQ29udGV4dFRyYWNrZXIgZm9yIHJlcXVlc3QgY29ycmVsYXRpb24gbWV0YWRhdGFcbiAgICAvLyBJc3N1ZSAjNDAyOiBQYXNzIERhbmdlclpvbmVFbmZvcmNlciB2aWEgSGFuZGxlclJlZ2lzdHJ5XG4gICAgLy8gQnVpbGQgaGFuZGxlciByZWdpc3RyeSwgdGhlbiBhZGQgbGF6eSBtZXRyaWNzU2luayBnZXR0ZXIuXG4gICAgLy8gTWVtb3J5TWV0cmljc1NpbmsgaXMgcmVnaXN0ZXJlZCBkdXJpbmcgZGVmZXJyZWRTZXR1cCAoYWZ0ZXIgTWV0cmljc01hbmFnZXIuc3RhcnQoKSksXG4gICAgLy8gc28gaXQgaXNuJ3QgYXZhaWxhYmxlIGF0IGhhbmRsZXIgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlc29sdmUgb24gZmlyc3QgYWNjZXNzIGluc3RlYWQuXG4gICAgY29uc3QgaGFuZGxlckRlcHM6IEhhbmRsZXJSZWdpc3RyeSA9IHtcbiAgICAgIGVsZW1lbnRDUlVEOiBlbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBtZW1vcnlNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSxcbiAgICAgIGFnZW50TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdBZ2VudE1hbmFnZXInKSxcbiAgICAgIHRlbXBsYXRlUmVuZGVyZXI6IHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVSZW5kZXJlcicpLFxuICAgICAgZWxlbWVudFF1ZXJ5U2VydmljZTogdGhpcy5yZXNvbHZlKCdFbGVtZW50UXVlcnlTZXJ2aWNlJyksXG4gICAgICAvLyBNQ1AtQVFMIGV4dGVuc2lvbiBoYW5kbGVycyAoSXNzdWUgIzI0MSlcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyLFxuICAgICAgcG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGF1dGhIYW5kbGVyOiBnaXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGNvbmZpZ0hhbmRsZXIsXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgIHBlcnNvbmFIYW5kbGVyLFxuICAgICAgc3luY0hhbmRsZXIsXG4gICAgICBidWlsZEluZm9TZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0J1aWxkSW5mb1NlcnZpY2UnKSxcbiAgICAgIGNhY2hlTWVtb3J5QnVkZ2V0OiB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICBnYXRla2VlcGVyLCAgLy8gSXNzdWUgIzQ1MjogUG9saWN5IGVuZ2luZSBmb3IgZW5mb3JjZSgpXG4gICAgICBkYW5nZXJab25lRW5mb3JjZXI6IHRoaXMucmVzb2x2ZSgnRGFuZ2VyWm9uZUVuZm9yY2VyJyksXG4gICAgICB2ZXJpZmljYXRpb25TdG9yZTogdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25TdG9yZScpLCAgLy8gSXNzdWUgIzE0MjogVmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgICB2ZXJpZmljYXRpb25Ob3RpZmllcjogdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25Ob3RpZmllcicpLCAgLy8gSXNzdWUgIzUyMjogT1MgZGlhbG9nIGZvciBjb2Rlc1xuICAgICAgbWVtb3J5U2luazogdGhpcy5yZXNvbHZlPE1lbW9yeUxvZ1Npbms+KCdNZW1vcnlMb2dTaW5rJyksICAvLyBJc3N1ZSAjNTI4OiBDUlVERS1yb3V0ZWQgcXVlcnlfbG9nc1xuICAgICAgcGVyZm9ybWFuY2VNb25pdG9yOiB0aGlzLnJlc29sdmU8UGVyZm9ybWFuY2VNb25pdG9yPignUGVyZm9ybWFuY2VNb25pdG9yJyksXG4gICAgICBvcGVyYXRpb25NZXRyaWNzVHJhY2tlcjogdGhpcy5yZXNvbHZlPE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyPignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInKSxcbiAgICAgIGdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcjogdGhpcy5yZXNvbHZlPEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcj4oJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicpLFxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGhhbmRsZXJEZXBzLCAnbWV0cmljc1NpbmsnLCB7XG4gICAgICBnZXQ6ICgpID0+IHsgdHJ5IHsgcmV0dXJuIHRoaXMucmVzb2x2ZTxNZW1vcnlNZXRyaWNzU2luaz4oJ01lbW9yeU1ldHJpY3NTaW5rJyk7IH0gY2F0Y2ggeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IG1jcEFxbEhhbmRsZXIgPSBuZXcgTUNQQVFMSGFuZGxlcihoYW5kbGVyRGVwcywgdGhpcy5yZXNvbHZlPENvbnRleHRUcmFja2VyPignQ29udGV4dFRyYWNrZXInKSk7XG5cbiAgICAvLyBSZWdpc3RlciBtY3BBcWxIYW5kbGVyIGFzIGEgc2luZ2xldG9uIGZvciB0ZXN0IGFjY2Vzc1xuICAgIHRoaXMucmVnaXN0ZXIoJ21jcEFxbEhhbmRsZXInLCAoKSA9PiBtY3BBcWxIYW5kbGVyLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdnYXRla2VlcGVyJywgKCkgPT4gZ2F0ZWtlZXBlciwgeyBzaW5nbGV0b246IHRydWUgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGVyc29uYUhhbmRsZXIsXG4gICAgICBlbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcixcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXIsXG4gICAgICBnaXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGRpc3BsYXlDb25maWdIYW5kbGVyLFxuICAgICAgaWRlbnRpdHlIYW5kbGVyLFxuICAgICAgY29uZmlnSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyLFxuICAgICAgdG9vbFJlZ2lzdHJ5OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUb29sUmVnaXN0cnksIC8vIE5vIHRvb2wgcmVnaXN0cnkgaW4gYm9vdHN0cmFwLW9ubHkgbW9kZVxuICAgICAgZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBoYW5kbGVycyB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFuZCByZWdpc3RlciBNQ1AgdG9vbHMuXG4gICAqIEBwYXJhbSBzZXJ2ZXIgLSBNQ1AgU2VydmVyIGluc3RhbmNlIGZvciB0b29sIHJlZ2lzdHJhdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUhhbmRsZXJzKHNlcnZlcjogU2VydmVyKTogUHJvbWlzZTxIYW5kbGVyQnVuZGxlPiB7XG4gICAgY29uc3QgYnVuZGxlID0gYXdhaXQgdGhpcy5ib290c3RyYXBIYW5kbGVycygpO1xuXG4gICAgY29uc3QgdG9vbFJlZ2lzdHJ5ID0gbmV3IFRvb2xSZWdpc3RyeShzZXJ2ZXIpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdG9vbHMgYmFzZWQgb24gTUNQX0lOVEVSRkFDRV9NT0RFIChJc3N1ZSAjMjM3KVxuICAgIC8vIC0gJ2Rpc2NyZXRlJzogUmVnaXN0ZXIgaW5kaXZpZHVhbCBkaXNjcmV0ZSB0b29scyAofjQwIHRvb2xzKVxuICAgIC8vIC0gJ21jcGFxbCc6IFJlZ2lzdGVyIGNvbnNvbGlkYXRlZCBNQ1AtQVFMIGludGVyZmFjZSBvbmx5ICh+NCBvciAxIHRvb2xzKVxuICAgIC8vIFRva2VuIGNvdW50cyBhcmUgbG9nZ2VkIGR5bmFtaWNhbGx5IGF0IHN0YXJ0dXAgdmlhIGxvZ1Rvb2xUb2tlblN0YXRzKClcbiAgICBjb25zdCBpbnRlcmZhY2VNb2RlID0gZW52Lk1DUF9JTlRFUkZBQ0VfTU9ERTtcbiAgICBsb2dnZXIuaW5mbyhgTUNQIEludGVyZmFjZSBNb2RlOiAke2ludGVyZmFjZU1vZGV9YCk7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ2Rpc2NyZXRlJykge1xuICAgICAgLy8gRGlzY3JldGUgbW9kZTogUmVnaXN0ZXIgYWxsIGluZGl2aWR1YWwgdG9vbHNcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlclBlcnNvbmFUb29scyhidW5kbGUucGVyc29uYUhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyRWxlbWVudFRvb2xzKGJ1bmRsZS5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQ29sbGVjdGlvblRvb2xzKGJ1bmRsZS5jb2xsZWN0aW9uSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJQb3J0Zm9saW9Ub29scyhidW5kbGUucG9ydGZvbGlvSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJBdXRoVG9vbHMoYnVuZGxlLmdpdGh1YkF1dGhIYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckNvbmZpZ1Rvb2xzKHtcbiAgICAgICAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBidW5kbGUuY29uZmlnSGFuZGxlci5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICAgIGhhbmRsZVN5bmNPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGJ1bmRsZS5zeW5jSGFuZGxlci5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJFbmhhbmNlZEluZGV4VG9vbHMoXG4gICAgICAgIGJ1bmRsZS5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgICAgdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpLmdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQnVpbGRJbmZvVG9vbHModGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNQ1AtQVFMIG1vZGU6IFJlZ2lzdGVyIG9ubHkgTUNQLUFRTCB0b29sc1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyTUNQQVFMVG9vbHMoYnVuZGxlLm1jcEFxbEhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIExvZyB0b2tlbiBzdGF0aXN0aWNzIChJc3N1ZSAjMjM3IGVuaGFuY2VtZW50KVxuICAgIHRoaXMubG9nVG9vbFRva2VuU3RhdHModG9vbFJlZ2lzdHJ5LCBpbnRlcmZhY2VNb2RlLCBidW5kbGUubWNwQXFsSGFuZGxlciwge1xuICAgICAgcGVyc29uYUhhbmRsZXI6IGJ1bmRsZS5wZXJzb25hSGFuZGxlcixcbiAgICAgIGVsZW1lbnRDcnVkSGFuZGxlcjogYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcixcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyOiBidW5kbGUuY29sbGVjdGlvbkhhbmRsZXIsXG4gICAgICBwb3J0Zm9saW9IYW5kbGVyOiBidW5kbGUucG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGdpdGh1YkF1dGhIYW5kbGVyOiBidW5kbGUuZ2l0aHViQXV0aEhhbmRsZXIsXG4gICAgICBjb25maWdIYW5kbGVyOiBidW5kbGUuY29uZmlnSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyOiBidW5kbGUuc3luY0hhbmRsZXIsXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcjogYnVuZGxlLmVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvbHZlPFNlcnZlclNldHVwPignU2VydmVyU2V0dXAnKS5zZXR1cFNlcnZlcihzZXJ2ZXIsIHRvb2xSZWdpc3RyeSwgYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYnVuZGxlLFxuICAgICAgdG9vbFJlZ2lzdHJ5LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTG9nIHRvb2wgdG9rZW4gc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZyBhbmQgZG9jdW1lbnRhdGlvbi5cbiAgICogU2hvd3MgY3VycmVudCBtb2RlIHRva2VuIGNvdW50LCBhbHRlcm5hdGl2ZSBtb2RlIGNvbXBhcmlzb24sIGFuZCBzYXZpbmdzLlxuICAgKlxuICAgKiBUaGlzIGlzIGltcG9ydGFudCBmb3I6XG4gICAqIDEuIERvY3VtZW50aW5nIGFjdHVhbCB0b2tlbiBzYXZpbmdzIGFjaGlldmVkXG4gICAqIDIuIE1vbml0b3JpbmcgY29udGV4dCB3aW5kb3cgdXNhZ2VcbiAgICogMy4gU3VwcG9ydGluZyBmdXR1cmUgTUNQLUFRTCBhZGFwdGVyIGRldmVsb3BtZW50XG4gICAqXG4gICAqIElzc3VlICMyMzcgZW5oYW5jZW1lbnRcbiAgICovXG4gIHByaXZhdGUgbG9nVG9vbFRva2VuU3RhdHMoXG4gICAgdG9vbFJlZ2lzdHJ5OiBUb29sUmVnaXN0cnksXG4gICAgaW50ZXJmYWNlTW9kZTogJ2Rpc2NyZXRlJyB8ICdtY3BhcWwnLFxuICAgIG1jcEFxbEhhbmRsZXI6IE1DUEFRTEhhbmRsZXIsXG4gICAgZGlzY3JldGVIYW5kbGVyczoge1xuICAgICAgcGVyc29uYUhhbmRsZXI6IFBlcnNvbmFIYW5kbGVyO1xuICAgICAgZWxlbWVudENydWRIYW5kbGVyOiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG4gICAgICBwb3J0Zm9saW9IYW5kbGVyOiBQb3J0Zm9saW9IYW5kbGVyO1xuICAgICAgZ2l0aHViQXV0aEhhbmRsZXI6IEdpdEh1YkF1dGhIYW5kbGVyO1xuICAgICAgY29uZmlnSGFuZGxlcjogQ29uZmlnSGFuZGxlcjtcbiAgICAgIHN5bmNIYW5kbGVyOiBTeW5jSGFuZGxlcjtcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyOiBFbmhhbmNlZEluZGV4SGFuZGxlcjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUb2tlbnMgPSB0b29sUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICBjb25zdCBjdXJyZW50VG9vbENvdW50ID0gdG9vbFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFsdGVybmF0aXZlIG1vZGUgdG9rZW5zIGZvciBjb21wYXJpc29uXG4gICAgbGV0IGFsdGVybmF0aXZlVG9rZW5zOiBudW1iZXI7XG4gICAgbGV0IGFsdGVybmF0aXZlVG9vbENvdW50OiBudW1iZXI7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ2Rpc2NyZXRlJykge1xuICAgICAgLy8gQ3VycmVudCBpcyBkaXNjcmV0ZSwgY2FsY3VsYXRlIHdoYXQgbWNwYXFsIHdvdWxkIGJlXG4gICAgICBjb25zdCB0ZW1wUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHt9IGFzIFNlcnZlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJNQ1BBUUxUb29scyhtY3BBcWxIYW5kbGVyKTtcbiAgICAgIGFsdGVybmF0aXZlVG9rZW5zID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xUb2tlbkVzdGltYXRlKCk7XG4gICAgICBhbHRlcm5hdGl2ZVRvb2xDb3VudCA9IHRlbXBSZWdpc3RyeS5nZXRUb29sQ291bnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3VycmVudCBpcyBtY3BhcWwsIGNhbGN1bGF0ZSB3aGF0IGRpc2NyZXRlIHdvdWxkIGJlXG4gICAgICBjb25zdCB0ZW1wUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHt9IGFzIFNlcnZlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJQZXJzb25hVG9vbHMoZGlzY3JldGVIYW5kbGVycy5wZXJzb25hSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJFbGVtZW50VG9vbHMoZGlzY3JldGVIYW5kbGVycy5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29sbGVjdGlvblRvb2xzKGRpc2NyZXRlSGFuZGxlcnMuY29sbGVjdGlvbkhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyUG9ydGZvbGlvVG9vbHMoZGlzY3JldGVIYW5kbGVycy5wb3J0Zm9saW9IYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckF1dGhUb29scyhkaXNjcmV0ZUhhbmRsZXJzLmdpdGh1YkF1dGhIYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckNvbmZpZ1Rvb2xzKHtcbiAgICAgICAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLmNvbmZpZ0hhbmRsZXIuaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgICBoYW5kbGVTeW5jT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLnN5bmNIYW5kbGVyLmhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckVuaGFuY2VkSW5kZXhUb29scyhcbiAgICAgICAgZGlzY3JldGVIYW5kbGVycy5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgICAgdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpLmdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQnVpbGRJbmZvVG9vbHModGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJykpO1xuICAgICAgYWx0ZXJuYXRpdmVUb2tlbnMgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICAgIGFsdGVybmF0aXZlVG9vbENvdW50ID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBzYXZpbmdzIChwb3NpdGl2ZSA9IGN1cnJlbnQgbW9kZSBzYXZlcyB0b2tlbnMpXG4gICAgY29uc3QgdG9rZW5EaWZmID0gYWx0ZXJuYXRpdmVUb2tlbnMgLSBjdXJyZW50VG9rZW5zO1xuICAgIGNvbnN0IHNhdmluZ3NQZXJjZW50ID0gYWx0ZXJuYXRpdmVUb2tlbnMgPiAwXG4gICAgICA/ICgodG9rZW5EaWZmIC8gYWx0ZXJuYXRpdmVUb2tlbnMpICogMTAwKS50b0ZpeGVkKDEpXG4gICAgICA6ICcwJztcblxuICAgIC8vIExvZyB0aGUgY29tcGFyaXNvblxuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFRvb2wgUmVnaXN0cmF0aW9uIENvbXBsZXRlOiAke2N1cnJlbnRUb29sQ291bnR9IHRvb2xzLCB+JHtjdXJyZW50VG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2Vuc2BcbiAgICApO1xuXG4gICAgaWYgKGludGVyZmFjZU1vZGUgPT09ICdtY3BhcWwnKSB7XG4gICAgICAvLyBIaWdobGlnaHQgc2F2aW5ncyB3aGVuIHVzaW5nIG1jcGFxbFxuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBUb2tlbiBTYXZpbmdzOiAke3Rva2VuRGlmZi50b0xvY2FsZVN0cmluZygpfSB0b2tlbnMgc2F2ZWQgKCR7c2F2aW5nc1BlcmNlbnR9JSkgdnMgZGlzY3JldGUgbW9kZSAoJHthbHRlcm5hdGl2ZVRvb2xDb3VudH0gdG9vbHMsIH4ke2FsdGVybmF0aXZlVG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2VucylgXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBkaXNjcmV0ZSBtb2RlLCBzaG93IHdoYXQgbWNwYXFsIHdvdWxkIHNhdmVcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQWx0ZXJuYXRpdmU6IG1jcGFxbCBtb2RlIHdvdWxkIHVzZSAke2FsdGVybmF0aXZlVG9vbENvdW50fSB0b29scywgfiR7YWx0ZXJuYXRpdmVUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zICgke01hdGguYWJzKE51bWJlcihzYXZpbmdzUGVyY2VudCkpfSUgJHt0b2tlbkRpZmYgPCAwID8gJ21vcmUnIDogJ2xlc3MnfSlgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXJlIGFsbCBtZXRyaWMgY29sbGVjdG9ycyBpbnRvIHRoZSBNZXRyaWNzTWFuYWdlci5cbiAgICogTWlycm9ycyB3aXJlTG9nSG9va3MoKSDigJQga2VlcHMgY29sbGVjdG9yIHJlZ2lzdHJhdGlvbiBvdXQgb2YgdGhlIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlTWV0cmljc0NvbGxlY3RvcnMobWV0cmljc01hbmFnZXI6IE1ldHJpY3NNYW5hZ2VyKTogdm9pZCB7XG4gICAgLy8gUGVyZm9ybWFuY2VNb25pdG9yIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9uaXRvciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3V0aWxzL1BlcmZvcm1hbmNlTW9uaXRvci5qcycpLlBlcmZvcm1hbmNlTW9uaXRvcj4oJ1BlcmZvcm1hbmNlTW9uaXRvcicpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IFBlcmZvcm1hbmNlTW9uaXRvckNvbGxlY3Rvcihtb25pdG9yKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIExSVUNhY2hlIGluc3RhbmNlcyDigJQgQVBJIGNhY2hlICsgYWxsIGVsZW1lbnQgbWFuYWdlciBjYWNoZXNcbiAgICBjb25zdCBjYWNoZXMgPSB0aGlzLmNvbGxlY3RMcnVDYWNoZXNGb3JNZXRyaWNzKCk7XG4gICAgaWYgKGNhY2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgTFJVQ2FjaGVDb2xsZWN0b3IoY2FjaGVzKSk7XG4gICAgfVxuXG4gICAgLy8gU2VjdXJpdHlNb25pdG9yIChzdGF0aWMpXG4gICAgdHJ5IHtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IoKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgLy8gU2VjdXJpdHlUZWxlbWV0cnkgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnkgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnKS5TZWN1cml0eVRlbGVtZXRyeT4oJ1NlY3VyaXR5VGVsZW1ldHJ5Jyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgU2VjdXJpdHlUZWxlbWV0cnlDb2xsZWN0b3IodGVsZW1ldHJ5KSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIEZpbGVMb2NrTWFuYWdlciAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2tNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJykuRmlsZUxvY2tNYW5hZ2VyPignRmlsZUxvY2tNYW5hZ2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgRmlsZUxvY2tNYW5hZ2VyQ29sbGVjdG9yKGxvY2tNYW5hZ2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIERlZmF1bHRFbGVtZW50UHJvdmlkZXIgKHN0YXRpYylcbiAgICB0cnkge1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IERlZmF1bHRFbGVtZW50UHJvdmlkZXJDb2xsZWN0b3IoKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgLy8gVHJpZ2dlck1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSDigJQgY3JlYXRlZCBpbnNpZGUgRW5oYW5jZWRJbmRleE1hbmFnZXIgZmFjdG9yeSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5oYW5jZWRJbmRleCA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qcycpLkVuaGFuY2VkSW5kZXhNYW5hZ2VyPignRW5oYW5jZWRJbmRleE1hbmFnZXInKTtcbiAgICAgIC8vIEVuaGFuY2VkSW5kZXhNYW5hZ2VyIGV4cG9zZXMgdHJhY2tlciB2aWEgcHVibGljIGdldHRlciBpZiBhdmFpbGFibGVcbiAgICAgIGlmICgndHJpZ2dlck1ldHJpY3NUcmFja2VyJyBpbiBlbmhhbmNlZEluZGV4KSB7XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSAoZW5oYW5jZWRJbmRleCBhcyBhbnkpLnRyaWdnZXJNZXRyaWNzVHJhY2tlcjtcbiAgICAgICAgaWYgKHRyYWNrZXIpIHtcbiAgICAgICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgVHJpZ2dlck1ldHJpY3NUcmFja2VyQ29sbGVjdG9yKHRyYWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBPcGVyYXRpb25hbFRlbGVtZXRyeSAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9wVGVsZW1ldHJ5ID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzJykuT3BlcmF0aW9uYWxUZWxlbWV0cnk+KCdPcGVyYXRpb25hbFRlbGVtZXRyeScpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yKG9wVGVsZW1ldHJ5KSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3BUcmFja2VyID0gdGhpcy5yZXNvbHZlPE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyPignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBPcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yKG9wVHJhY2tlcikpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBna1RyYWNrZXIgPSB0aGlzLnJlc29sdmU8R2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyPignR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgR2F0ZWtlZXBlck1ldHJpY3NDb2xsZWN0b3IoZ2tUcmFja2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdExydUNhY2hlc0Zvck1ldHJpY3MoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuTFJVQ2FjaGU8dW5rbm93bj4gfT4ge1xuICAgIGNvbnN0IGNhY2hlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuTFJVQ2FjaGU8dW5rbm93bj4gfT4gPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBpQ2FjaGUgPSB0aGlzLnJlc29sdmU8eyBnZXRTdGF0cygpOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuQ2FjaGVTdGF0cyB9PignQVBJQ2FjaGUnKTtcbiAgICAgIGNhY2hlcy5wdXNoKHsgbmFtZTogJ0FQSUNhY2hlJywgaW5zdGFuY2U6IGFwaUNhY2hlIGFzIGFueSB9KTtcbiAgICB9IGNhdGNoIHsgLyogbm90IGF2YWlsYWJsZSAqLyB9XG5cbiAgICBjb25zdCBtYW5hZ2VyTmFtZXMgPSBbXG4gICAgICAnUGVyc29uYU1hbmFnZXInLCAnU2tpbGxNYW5hZ2VyJywgJ0FnZW50TWFuYWdlcicsXG4gICAgICAnTWVtb3J5TWFuYWdlcicsICdFbnNlbWJsZU1hbmFnZXInLCAnVGVtcGxhdGVNYW5hZ2VyJyxcbiAgICBdIGFzIGNvbnN0O1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBtYW5hZ2VyTmFtZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1nciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL2VsZW1lbnRzL2Jhc2UvQmFzZUVsZW1lbnRNYW5hZ2VyLmpzJykuQmFzZUVsZW1lbnRNYW5hZ2VyPGFueT4+KG5hbWUpO1xuICAgICAgICBjYWNoZXMucHVzaCguLi5tZ3IuZ2V0TWV0cmljc0NhY2hlcygpKTtcbiAgICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENsb3NlIE1ldHJpY3NNYW5hZ2VyIGJlZm9yZSBnZW5lcmFsIGRpc3Bvc2FsIChmbHVzaCBmaW5hbCBzbmFwc2hvdClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgYXdhaXQgbWV0cmljc01hbmFnZXIuY2xvc2UoKTtcbiAgICB9IGNhdGNoIHsgLyogbWV0cmljcyBub3QgZW5hYmxlZCBvciBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBDbGVhbiB1cCBsb2cgaG9va3MgYmVmb3JlIGRpc3Bvc2luZyBzZXJ2aWNlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGVhbnVwcyA9IHRoaXMucmVzb2x2ZTwoKCkgPT4gdm9pZClbXT4oJ19sb2dIb29rQ2xlYW51cHMnKTtcbiAgICAgIGNsZWFudXBzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgfSBjYXRjaCB7IC8qIGhvb2tzIG5vdCB5ZXQgd2lyZWQgKi8gfVxuXG4gICAgY29uc3QgZGlzcG9zYWxQcm9taXNlcyA9IHRoaXMuYnVpbGREaXNwb3NhbFByb21pc2VzKCk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChkaXNwb3NhbFByb21pc2VzLm1hcChkID0+IGQucHJvbWlzZSkpO1xuICAgIHRoaXMucmVwb3J0RGlzcG9zYWxGYWlsdXJlcyhkaXNwb3NhbFByb21pc2VzLCByZXN1bHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREaXNwb3NhbFByb21pc2VzKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IH0+IHtcbiAgICBjb25zdCBwcm9taXNlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzZXJ2aWNlXSBvZiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICBpZiAoIXNlcnZpY2UuaW5zdGFuY2UpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBzZXJ2aWNlLmluc3RhbmNlIGFzIGFueTtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHsgbmFtZSwgcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBpbnN0YW5jZS5kaXNwb3NlKCkpIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHsgbmFtZSwgcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBpbnN0YW5jZS5jbGVhbnVwKCkpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydERpc3Bvc2FsRmFpbHVyZXMoXG4gICAgZGlzcG9zYWxQcm9taXNlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4sXG4gICAgcmVzdWx0czogUHJvbWlzZVNldHRsZWRSZXN1bHQ8dm9pZD5bXSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHJlc3VsdF0gb2YgcmVzdWx0cy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gZGlzcG9zYWxQcm9taXNlc1tpbmRleF0ubmFtZTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHQucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHQucmVhc29uKSk7XG4gICAgICAgIGZhaWx1cmVzLnB1c2goc2VydmljZU5hbWUpO1xuICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRpc3Bvc2Ugc2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nYCwgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDb250YWluZXIgZGlzcG9zYWwgY29tcGxldGVkIHdpdGggJHtmYWlsdXJlcy5sZW5ndGh9IGZhaWx1cmUocykgb3V0IG9mICR7ZGlzcG9zYWxQcm9taXNlcy5sZW5ndGh9IHNlcnZpY2VzYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSB0aGlzLnJlc29sdmU8Q29sbGVjdGlvbkNhY2hlPignQ29sbGVjdGlvbkNhY2hlJyk7XG4gICAgICBjb25zdCBpc0NhY2hlVmFsaWQgPSBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuaXNDYWNoZVZhbGlkKCk7XG4gICAgICBpZiAoIWlzQ2FjaGVWYWxpZCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIkluaXRpYWxpemluZyBjb2xsZWN0aW9uIGNhY2hlIHdpdGggc2VlZCBkYXRhLi4uXCIpO1xuICAgICAgICBjb25zdCB7IENvbGxlY3Rpb25TZWVkZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2NvbGxlY3Rpb24vQ29sbGVjdGlvblNlZWRlci5qc1wiKTtcbiAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgICAgIGF3YWl0IGNvbGxlY3Rpb25DYWNoZS5zYXZlQ2FjaGUoc2VlZERhdGEpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgQ29sbGVjdGlvbiBjYWNoZSBpbml0aWFsaXplZCB3aXRoICR7c2VlZERhdGEubGVuZ3RofSBpdGVtc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb24gY2FjaGUgYWxyZWFkeSB2YWxpZCB3aXRoICR7c3RhdHMuaXRlbUNvdW50fSBpdGVtc2ApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoXCJEb2xsaG91c2VDb250YWluZXIuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZVwiLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
1305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpL0NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLElBQUksT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENB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QkFBZ0IsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7Z0JBQy9FLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO1lBQzVFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7WUFDL0UsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsWUFBWSxDQUFDLFFBQVEsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OLCBQQUNLQUdFX1ZFUlNJT04gYXMgVkVSU0lPTiB9IGZyb20gXCIuLi9nZW5lcmF0ZWQvdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qc1wiO1xuaW1wb3J0IHsgVmVyYlRyaWdnZXJNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9WZXJiVHJpZ2dlck1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFJlbGF0aW9uc2hpcE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1JlbGF0aW9uc2hpcE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IE5MUFNjb3JpbmdNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9OTFBTY29yaW5nTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBsb2FkSW5kaWNhdG9yQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9pbmRpY2F0b3ItY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBlbnYgfSBmcm9tIFwiLi4vY29uZmlnL2Vudi5qc1wiO1xuaW1wb3J0IHsgQVBJQ2FjaGUsIENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkluZGV4Q2FjaGUsIENhY2hlTWVtb3J5QnVkZ2V0IH0gZnJvbSBcIi4uL2NhY2hlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXRWYWxpZGF0ZWRHbG9iYWxDYWNoZU1lbW9yeUJ5dGVzLCBnZXRWYWxpZGF0ZWRNYXhCYWNrdXBzUGVyRWxlbWVudCwgU1RPUkFHRV9MQVlFUl9DT05GSUcgfSBmcm9tIFwiLi4vY29uZmlnL3BlcmZvcm1hbmNlLWNvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQmFja3VwU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9CYWNrdXBTZXJ2aWNlLmpzXCI7XG5pbXBvcnQge1xuICBHaXRIdWJDbGllbnQsXG4gIENvbGxlY3Rpb25Ccm93c2VyLFxuICBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyLFxuICBDb2xsZWN0aW9uU2VhcmNoLFxuICBQZXJzb25hRGV0YWlscyxcbiAgRWxlbWVudEluc3RhbGxlcixcbn0gZnJvbSBcIi4uL2NvbGxlY3Rpb24vaW5kZXguanNcIjtcbmltcG9ydCB7IEdpdEh1YkF1dGhNYW5hZ2VyIH0gZnJvbSBcIi4uL2F1dGgvR2l0SHViQXV0aE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBNaWdyYXRpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9NaWdyYXRpb25NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4TWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vRW5oYW5jZWRJbmRleE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IEVuaGFuY2VkSW5kZXhIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0VuaGFuY2VkSW5kZXhIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBNQ1BBUUxIYW5kbGVyLCB0eXBlIEhhbmRsZXJSZWdpc3RyeSB9IGZyb20gXCIuLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IEdhdGVrZWVwZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvbWNwLWFxbC9HYXRla2VlcGVyLmpzXCI7XG5pbXBvcnQgeyBTa2lsbE1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvc2tpbGxzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVSZW5kZXJlciB9IGZyb20gXCIuLi91dGlscy9UZW1wbGF0ZVJlbmRlcmVyLmpzXCI7XG5pbXBvcnQgeyBBZ2VudE1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvYWdlbnRzL0FnZW50TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTWVtb3J5IH0gZnJvbSBcIi4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeS5qc1wiO1xuaW1wb3J0IHsgTWVtb3J5TWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9tZW1vcmllcy9NZW1vcnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBXZWJTU0VMb2dTaW5rIH0gZnJvbSBcIi4uL3dlYi9zaW5rcy9XZWJTU0VMb2dTaW5rLmpzXCI7XG5pbXBvcnQgeyBXZWJTU0VNZXRyaWNzU2luayB9IGZyb20gXCIuLi93ZWIvc2lua3MvV2ViU1NFTWV0cmljc1NpbmsuanNcIjtcbmltcG9ydCB7IEVuc2VtYmxlTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9lbnNlbWJsZXMvRW5zZW1ibGVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQZXJzb25hRXhwb3J0ZXIsIFBlcnNvbmFJbXBvcnRlciB9IGZyb20gXCIuLi9wZXJzb25hL2V4cG9ydC1pbXBvcnQvaW5kZXguanNcIjtcbmltcG9ydCB7IFBlcnNvbmFNYW5hZ2VyIH0gZnJvbSBcIi4uL3BlcnNvbmEvUGVyc29uYU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BlcnNvbmFIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBFbGVtZW50Q1JVREhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRWxlbWVudENSVURIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Db2xsZWN0aW9uSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Qb3J0Zm9saW9IYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9QdWxsSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Qb3J0Zm9saW9QdWxsSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvR2l0SHViQXV0aEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IERpc3BsYXlDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0Rpc3BsYXlDb25maWdIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBJZGVudGl0eUhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvSWRlbnRpdHlIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IFN5bmNIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIuanNcIjtcbmltcG9ydCB7IFRvb2xSZWdpc3RyeSB9IGZyb20gXCIuLi9oYW5kbGVycy9Ub29sUmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IFNlcnZlclNldHVwIH0gZnJvbSBcIi4uL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2VydmVyU3RhcnR1cCB9IGZyb20gXCIuLi9zZXJ2ZXIvc3RhcnR1cC5qc1wiO1xuaW1wb3J0IHsgUGF0aFZhbGlkYXRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9wYXRoVmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIgfSBmcm9tIFwiLi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBVbmlmaWVkSW5kZXhNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9VbmlmaWVkSW5kZXhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9JbmRleE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb0luZGV4TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgU3VibWl0VG9Qb3J0Zm9saW9Ub29sIH0gZnJvbSBcIi4uL3Rvb2xzL3BvcnRmb2xpby9zdWJtaXRUb1BvcnRmb2xpb1Rvb2wuanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tIFwiLi4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1JlcG9NYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9Qb3J0Zm9saW9SZXBvTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvU3luY01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb1N5bmNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSB9IGZyb20gXCIuLi9jb25maWcvcG9ydGZvbGlvQ29uZmlnLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJQb3J0Zm9saW9JbmRleGVyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9HaXRIdWJQb3J0Zm9saW9JbmRleGVyLmpzXCI7XG5pbXBvcnQgeyBJbmRleENvbmZpZ01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2NvbmZpZy9JbmRleENvbmZpZy5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvU3luY0NvbXBhcmVyIH0gZnJvbSBcIi4uL3N5bmMvUG9ydGZvbGlvU3luY0NvbXBhcmVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9Eb3dubG9hZGVyIH0gZnJvbSBcIi4uL3N5bmMvUG9ydGZvbGlvRG93bmxvYWRlci5qc1wiO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VNb25pdG9yIH0gZnJvbSBcIi4uL3V0aWxzL1BlcmZvcm1hbmNlTW9uaXRvci5qc1wiO1xuaW1wb3J0IHsgQnVpbGRJbmZvU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvSW5pdGlhbGl6YXRpb25TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBQZXJzb25hSW5kaWNhdG9yU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9QZXJzb25hSW5kaWNhdG9yU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IFN0YXRlQ2hhbmdlTm90aWZpZXIgfSBmcm9tIFwiLi4vc2VydmljZXMvU3RhdGVDaGFuZ2VOb3RpZmllci5qc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvU2VyaWFsaXphdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEZpbGVXYXRjaFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvRmlsZVdhdGNoU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL01ldGFkYXRhU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblJlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9UcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEdpdEh1YlJhdGVMaW1pdGVyIH0gZnJvbSBcIi4uL3V0aWxzL0dpdEh1YlJhdGVMaW1pdGVyLmpzXCI7XG5pbXBvcnQgeyBBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlciwgRG9sbGhvdXNlVG9BbnRocm9waWNDb252ZXJ0ZXIgfSBmcm9tIFwiLi4vY29udmVydGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRGFuZ2VyWm9uZUVuZm9yY2VyIH0gZnJvbSBcIi4uL3NlY3VyaXR5L0RhbmdlclpvbmVFbmZvcmNlci5qc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGlvblN0b3JlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS5qc1wiO1xuaW1wb3J0IHsgVmVyaWZpY2F0aW9uU3RvcmUgfSBmcm9tIFwiQGRvbGxob3VzZW1jcC9zYWZldHlcIjtcbmltcG9ydCB7IFZlcmlmaWNhdGlvbk5vdGlmaWVyIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1ZlcmlmaWNhdGlvbk5vdGlmaWVyLmpzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuRW5jcnlwdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vUGF0dGVybkVuY3J5cHRvci5qc1wiO1xuaW1wb3J0IHsgUGF0dGVybkRlY3J5cHRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9lbmNyeXB0aW9uL1BhdHRlcm5EZWNyeXB0b3IuanNcIjtcbmltcG9ydCB7IENvbnRleHRUcmFja2VyIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vQ29udGV4dFRyYWNrZXIuanNcIjtcbmltcG9ydCB7IFBhdHRlcm5FeHRyYWN0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdmFsaWRhdGlvbi9QYXR0ZXJuRXh0cmFjdG9yLmpzXCI7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3ZhbGlkYXRpb24vQmFja2dyb3VuZFZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlUZWxlbWV0cnkgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdGVsZW1ldHJ5L1NlY3VyaXR5VGVsZW1ldHJ5LmpzXCI7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanNcIjtcbmltcG9ydCB7IE9wZXJhdGlvbmFsVGVsZW1ldHJ5IH0gZnJvbSBcIi4uL3RlbGVtZXRyeS9PcGVyYXRpb25hbFRlbGVtZXRyeS5qc1wiO1xuaW1wb3J0IHsgU3RhcnR1cFRpbWVyIH0gZnJvbSBcIi4uL3RlbGVtZXRyeS9TdGFydHVwVGltZXIuanNcIjtcbmltcG9ydCB7IERlZmF1bHRFbmhhbmNlZEluZGV4SGVscGVycyB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvRW5oYW5jZWRJbmRleEhlbHBlcnMuanNcIjtcbmltcG9ydCB7IEVsZW1lbnREZWZpbml0aW9uQnVpbGRlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvRWxlbWVudERlZmluaXRpb25CdWlsZGVyLmpzXCI7XG5pbXBvcnQgeyBBY3Rpb25UcmlnZ2VyRXh0cmFjdG9yIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9BY3Rpb25UcmlnZ2VyRXh0cmFjdG9yLmpzXCI7XG5pbXBvcnQgeyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L1RyaWdnZXJNZXRyaWNzVHJhY2tlci5qc1wiO1xuaW1wb3J0IHsgU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9TZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEVsZW1lbnRFdmVudERpc3BhdGNoZXIgfSBmcm9tICcuLi9ldmVudHMvRWxlbWVudEV2ZW50RGlzcGF0Y2hlci5qcyc7XG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzXCI7XG5pbXBvcnQge1xuICBQYWdpbmF0aW9uU2VydmljZSxcbiAgRmlsdGVyU2VydmljZSxcbiAgU29ydFNlcnZpY2UsXG4gIEVsZW1lbnRRdWVyeVNlcnZpY2UsXG59IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L2luZGV4LmpzJztcbmltcG9ydCB7IFJldGVudGlvblBvbGljeVNlcnZpY2UsIE1lbW9yeVJldGVudGlvblN0cmF0ZWd5IH0gZnJvbSAnLi4vc2VydmljZXMvUmV0ZW50aW9uUG9saWN5U2VydmljZS5qcyc7XG5pbXBvcnQgeyBQb2xpY3lFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvUG9saWN5RXhwb3J0U2VydmljZS5qcyc7XG5pbXBvcnQgeyBMb2dNYW5hZ2VyLCBidWlsZExvZ01hbmFnZXJDb25maWcgfSBmcm9tICcuLi9sb2dnaW5nL0xvZ01hbmFnZXIuanMnO1xuaW1wb3J0IHsgRmlsZUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL0ZpbGVMb2dTaW5rLmpzJztcbmltcG9ydCB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHsgUGxhaW5UZXh0Rm9ybWF0dGVyIH0gZnJvbSAnLi4vbG9nZ2luZy9mb3JtYXR0ZXJzL1BsYWluVGV4dEZvcm1hdHRlci5qcyc7XG5pbXBvcnQgeyBKc29ubEZvcm1hdHRlciB9IGZyb20gJy4uL2xvZ2dpbmcvZm9ybWF0dGVycy9Kc29ubEZvcm1hdHRlci5qcyc7XG5pbXBvcnQgeyB3aXJlTG9nSG9va3MsIGdldFRyaWdnZXJNZXRyaWNzTG9nTGlzdGVuZXIgfSBmcm9tICcuLi9sb2dnaW5nL0xvZ0hvb2tzLmpzJztcbmltcG9ydCB7IE1ldHJpY3NNYW5hZ2VyIH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHsgYnVpbGRNZXRyaWNzTWFuYWdlckNvbmZpZyB9IGZyb20gJy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgUGVyZm9ybWFuY2VNb25pdG9yQ29sbGVjdG9yLFxuICBMUlVDYWNoZUNvbGxlY3RvcixcbiAgU2VjdXJpdHlNb25pdG9yQ29sbGVjdG9yLFxuICBTZWN1cml0eVRlbGVtZXRyeUNvbGxlY3RvcixcbiAgRmlsZUxvY2tNYW5hZ2VyQ29sbGVjdG9yLFxuICBEZWZhdWx0RWxlbWVudFByb3ZpZGVyQ29sbGVjdG9yLFxuICBUcmlnZ2VyTWV0cmljc1RyYWNrZXJDb2xsZWN0b3IsXG4gIE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yLFxuICBPcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yLFxuICBHYXRla2VlcGVyTWV0cmljc0NvbGxlY3Rvcixcbn0gZnJvbSAnLi4vbWV0cmljcy9jb2xsZWN0b3JzL2luZGV4LmpzJztcbmltcG9ydCB7IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIH0gZnJvbSAnLi4vbWV0cmljcy9PcGVyYXRpb25NZXRyaWNzVHJhY2tlci5qcyc7XG5pbXBvcnQgeyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIgfSBmcm9tICcuLi9tZXRyaWNzL0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlci5qcyc7XG5cbi8vIFN0YXRlIGlzIG93bmVkIGJ5IFBlcnNvbmFNYW5hZ2VyIGFuZCBzZXJ2aWNlc1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJCdW5kbGUge1xuICBwZXJzb25hSGFuZGxlcjogUGVyc29uYUhhbmRsZXI7XG4gIGVsZW1lbnRDcnVkSGFuZGxlcjogRWxlbWVudENSVURIYW5kbGVyO1xuICBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG4gIHBvcnRmb2xpb0hhbmRsZXI6IFBvcnRmb2xpb0hhbmRsZXI7XG4gIGdpdGh1YkF1dGhIYW5kbGVyOiBHaXRIdWJBdXRoSGFuZGxlcjtcbiAgZGlzcGxheUNvbmZpZ0hhbmRsZXI6IERpc3BsYXlDb25maWdIYW5kbGVyO1xuICBpZGVudGl0eUhhbmRsZXI6IElkZW50aXR5SGFuZGxlcjtcbiAgY29uZmlnSGFuZGxlcjogQ29uZmlnSGFuZGxlcjtcbiAgc3luY0hhbmRsZXI6IFN5bmNIYW5kbGVyO1xuICB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeTtcbiAgZW5oYW5jZWRJbmRleEhhbmRsZXI6IEVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuICBtY3BBcWxIYW5kbGVyOiBNQ1BBUUxIYW5kbGVyO1xufVxuXG4vKipcbiAqIFR5cGUtc2FmZSBzZXJ2aWNlIHJlY29yZCBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24gY29udGFpbmVyXG4gKlxuICogRklYOiBSZXBsYWNlZCAnYW55JyB0eXBlcyB3aXRoIHByb3BlciBnZW5lcmljcyB0byBlbnN1cmUgdHlwZSBzYWZldHlcbiAqIFByZXZpb3VzbHk6IFVzZWQgJ2FueScgd2hpY2ggYWxsb3dlZCB1bnNhZmUgY2FzdHMgYW5kIHJ1bnRpbWUgZXJyb3JzXG4gKiBOb3c6IFVzZXMgZ2VuZXJpYyBUIHdpdGggJ3Vua25vd24nIGZhbGxiYWNrIGZvciBjb21waWxlLXRpbWUgdHlwZSBjaGVja2luZ1xuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSBzZXJ2aWNlIHR5cGUgKGRlZmF1bHRzIHRvIHVua25vd24gZm9yIG1heGltdW0gc2FmZXR5KVxuICovXG5pbnRlcmZhY2UgU2VydmljZVJlY29yZDxUID0gdW5rbm93bj4ge1xuICBmYWN0b3J5OiAoKSA9PiBUO1xuICBpbnN0YW5jZTogVCB8IG51bGw7XG4gIHNpbmdsZXRvbjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIERvbGxob3VzZUNvbnRhaW5lciB7XG4gIHByaXZhdGUgc2VydmljZXMgPSBuZXcgTWFwPHN0cmluZywgU2VydmljZVJlY29yZD4oKTtcbiAgcHJpdmF0ZSBwZXJzb25hc0Rpcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJc3N1ZSAjNzA2OiBTZXQgdG8gdHJ1ZSBvbmNlIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIHJlc29sdmVzLiAqL1xuICBwdWJsaWMgZGVmZXJyZWRTZXR1cENvbXBsZXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBESSBjb250YWluZXIgaW5pdGlhbGl6YXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0lOSVRJQUxJWkFUSU9OJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5jb25zdHJ1Y3RvcicsXG4gICAgICBkZXRhaWxzOiAnRGVwZW5kZW5jeSBpbmplY3Rpb24gY29udGFpbmVyIGluaXRpYWxpemluZydcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyU2VydmljZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNlcnZpY2Ugd2l0aCB0aGUgREkgY29udGFpbmVyXG4gICAqXG4gICAqIEZJWDogQWRkZWQgZXhwbGljaXQgdHlwZSBwYXJhbWV0ZXIgZm9yIHR5cGUgc2FmZXR5XG4gICAqIFRoZSBmYWN0b3J5IGlzIHN0b3JlZCBhcyAoKSA9PiB1bmtub3duIGludGVybmFsbHkgdG8gYWxsb3cgaGV0ZXJvZ2VuZW91cyBzdG9yYWdlLFxuICAgKiBidXQgdGhlIHR5cGUgVCBpcyBwcmVzZXJ2ZWQgZm9yIHJlc29sdmUoKSBjYWxsc1xuICAgKlxuICAgKiBAdGVtcGxhdGUgVCBUaGUgc2VydmljZSB0eXBlXG4gICAqIEBwYXJhbSBuYW1lIFVuaXF1ZSBzZXJ2aWNlIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGZhY3RvcnkgRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIHNlcnZpY2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIChzaW5nbGV0b24gYmVoYXZpb3IpXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXI8VD4obmFtZTogc3RyaW5nLCBmYWN0b3J5OiAoKSA9PiBULCBvcHRpb25zOiB7IHNpbmdsZXRvbj86IGJvb2xlYW4gfSA9IHsgc2luZ2xldG9uOiB0cnVlIH0pOiB2b2lkIHtcbiAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IHNlcnZpY2UgcmVnaXN0cmF0aW9uXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdEb2xsaG91c2VDb250YWluZXIucmVnaXN0ZXInLFxuICAgICAgZGV0YWlsczogYFNlcnZpY2UgcmVnaXN0ZXJlZDogJHtuYW1lfWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSwgc2luZ2xldG9uOiBvcHRpb25zLnNpbmdsZXRvbiA/PyB0cnVlIH1cbiAgICB9KTtcbiAgICB0aGlzLnNlcnZpY2VzLnNldChuYW1lLCB7XG4gICAgICBmYWN0b3J5OiBmYWN0b3J5IGFzICgpID0+IHVua25vd24sXG4gICAgICBpbnN0YW5jZTogbnVsbCxcbiAgICAgIHNpbmdsZXRvbjogb3B0aW9ucy5zaW5nbGV0b24gPz8gdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBzZXJ2aWNlIGZyb20gdGhlIERJIGNvbnRhaW5lclxuICAgKlxuICAgKiBGSVg6IFR5cGUgc2FmZXR5IGltcHJvdmVkIHdpdGggZXhwbGljaXQgY2FzdGluZyBhbmQgdmFsaWRhdGlvblxuICAgKiBUaGUgJ2FzIFQnIGNhc3QgaXMgc2FmZSBiZWNhdXNlOlxuICAgKiAxLiBTZXJ2aWNlcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHR5cGVkIGZhY3Rvcmllc1xuICAgKiAyLiBUaGUgc2VydmljZSBuYW1lIGFjdHMgYXMgYSB0eXBlIGRpc2NyaW1pbmF0b3JcbiAgICogMy4gSW5jb3JyZWN0IHVzYWdlIHdpbGwgYmUgY2F1Z2h0IGF0IHRoZSByZWdpc3RyYXRpb24gc2l0ZVxuICAgKlxuICAgKiBAdGVtcGxhdGUgVCBUaGUgZXhwZWN0ZWQgc2VydmljZSB0eXBlXG4gICAqIEBwYXJhbSBuYW1lIFNlcnZpY2UgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBUaGUgc2VydmljZSBpbnN0YW5jZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHNlcnZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcbiAgICovXG4gIHB1YmxpYyByZXNvbHZlPFQ+KG5hbWU6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzLmdldChuYW1lKTtcbiAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQXVkaXQgc2VydmljZSByZXNvbHV0aW9uIGZhaWx1cmVzXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdNRU1PUllfTE9BRF9GQUlMRUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZXNvbHZlJyxcbiAgICAgICAgZGV0YWlsczogYFNlcnZpY2Ugbm90IHJlZ2lzdGVyZWQ6ICR7bmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmljZSBub3QgcmVnaXN0ZXJlZDogJHtuYW1lfWApO1xuICAgIH1cblxuICAgIGlmIChzZXJ2aWNlLnNpbmdsZXRvbikge1xuICAgICAgaWYgKCFzZXJ2aWNlLmluc3RhbmNlKSB7XG4gICAgICAgIHNlcnZpY2UuaW5zdGFuY2UgPSBzZXJ2aWNlLmZhY3RvcnkoKTtcbiAgICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBzaW5nbGV0b24gaW5zdGFudGlhdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZXNvbHZlJyxcbiAgICAgICAgICBkZXRhaWxzOiBgU2luZ2xldG9uIGluc3RhbnRpYXRlZDogJHtuYW1lfWAsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgc2VydmljZU5hbWU6IG5hbWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJ2aWNlLmluc3RhbmNlIGFzIFQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcnZpY2UuZmFjdG9yeSgpIGFzIFQ7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyU2VydmljZXMoKTogdm9pZCB7XG5cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGluc3RydW1lbnRhdGlvblxuICAgIHRoaXMucmVnaXN0ZXIoJ1N0YXJ0dXBUaW1lcicsICgpID0+IG5ldyBTdGFydHVwVGltZXIoKSk7XG5cbiAgICAvLyBDT1JFICYgQ0FDSElOR1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NhY2hlTWVtb3J5QnVkZ2V0JywgKCkgPT4gbmV3IENhY2hlTWVtb3J5QnVkZ2V0KHtcbiAgICAgIGdsb2JhbExpbWl0Qnl0ZXM6IGdldFZhbGlkYXRlZEdsb2JhbENhY2hlTWVtb3J5Qnl0ZXMoKSxcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignQVBJQ2FjaGUnLCAoKSA9PiBuZXcgQVBJQ2FjaGUoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkNhY2hlJywgKCkgPT4gbmV3IENvbGxlY3Rpb25DYWNoZSh0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLCB1bmRlZmluZWQpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdSYXRlTGltaXRUcmFja2VyJywgKCkgPT4gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdGaWxlTG9ja01hbmFnZXInLCAoKSA9PiBuZXcgRmlsZUxvY2tNYW5hZ2VyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScsICgpID0+IG5ldyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UodGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbmZpZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IENvbmZpZ01hbmFnZXIodGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSwgb3MpO1xuICAgIH0pO1xuICAgIC8vIElzc3VlICM1MTogR2VuZXJpYyByZXRlbnRpb24gcG9saWN5IHNlcnZpY2Ugd2l0aCBzdHJhdGVneSBwYXR0ZXJuXG4gICAgdGhpcy5yZWdpc3RlcignUmV0ZW50aW9uUG9saWN5U2VydmljZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgUmV0ZW50aW9uUG9saWN5U2VydmljZSh0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSk7XG4gICAgICAvLyBSZWdpc3RlciBtZW1vcnkgcmV0ZW50aW9uIHN0cmF0ZWd5IChmaXJzdCBvZiBwb3RlbnRpYWxseSA1MCsgZWxlbWVudCB0eXBlcylcbiAgICAgIHNlcnZpY2UucmVnaXN0ZXJTdHJhdGVneShuZXcgTWVtb3J5UmV0ZW50aW9uU3RyYXRlZ3koKSk7XG4gICAgICByZXR1cm4gc2VydmljZTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdJbmRleENvbmZpZ01hbmFnZXInLCAoKSA9PiBuZXcgSW5kZXhDb25maWdNYW5hZ2VyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luZGljYXRvckNvbmZpZycsICgpID0+IGxvYWRJbmRpY2F0b3JDb25maWcoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignU3RhdGVDaGFuZ2VOb3RpZmllcicsICgpID0+IG5ldyBTdGF0ZUNoYW5nZU5vdGlmaWVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YlJhdGVMaW1pdGVyJywgKCkgPT4gbmV3IEdpdEh1YlJhdGVMaW1pdGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInLCAoKSA9PiBFbGVtZW50RXZlbnREaXNwYXRjaGVyLmdldFNoYXJlZERpc3BhdGNoZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTUNQTG9nZ2VyJywgKCkgPT4gbG9nZ2VyKTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcnNvbmFJbXBvcnRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKTtcbiAgICAgIGNvbnN0IHBlcnNvbmFzRGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFdlIHJlc29sdmUgUGVyc29uYU1hbmFnZXIgaW5zaWRlIHRoZSBwcm92aWRlciBmdW5jdGlvbi5cbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VyUHJvdmlkZXIgPSAoKSA9PiB0aGlzLnJlc29sdmU8UGVyc29uYU1hbmFnZXI+KCdQZXJzb25hTWFuYWdlcicpLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgIHJldHVybiBuZXcgUGVyc29uYUltcG9ydGVyKFxuICAgICAgICBwZXJzb25hc0RpcixcbiAgICAgICAgY3VycmVudFVzZXJQcm92aWRlcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gR0lUSFVCICYgQ09MTEVDVElPTlxuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YkNsaWVudCcsICgpID0+IG5ldyBHaXRIdWJDbGllbnQoXG4gICAgICB0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1JhdGVMaW1pdFRyYWNrZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdHaXRIdWJBdXRoTWFuYWdlcicsICgpID0+IG5ldyBHaXRIdWJBdXRoTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25JbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkluZGV4TWFuYWdlcih7XG4gICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uQnJvd3NlcicsICgpID0+IG5ldyBDb2xsZWN0aW9uQnJvd3Nlcih0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLCB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25DYWNoZScpLCB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleE1hbmFnZXInKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25TZWFyY2gnLCAoKSA9PiBuZXcgQ29sbGVjdGlvblNlYXJjaChcbiAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25DYWNoZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYURldGFpbHMnLCAoKSA9PiBuZXcgUGVyc29uYURldGFpbHModGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSkpO1xuXG4gICAgLy8gUE9SVEZPTElPICYgTUFOQUdFUlNcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9NYW5hZ2VyJywgKCkgPT4gbmV3IFBvcnRmb2xpb01hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdW5kZWZpbmVkXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYU1hbmFnZXInLCAoKSA9PiBuZXcgUGVyc29uYU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnSW5kaWNhdG9yQ29uZmlnJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hSW1wb3J0ZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU3RhdGVDaGFuZ2VOb3RpZmllcicpLFxuICAgICAge1xuICAgICAgICBldmVudERpc3BhdGNoZXI6IHRoaXMucmVzb2x2ZSgnRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicpLFxuICAgICAgICBlbmFibGVGaWxlV2F0Y2hlcjogdHJ1ZSxcbiAgICAgICAgYXV0b1JlbG9hZE9uRXh0ZXJuYWxDaGFuZ2U6IHRydWUsXG4gICAgICAgIGZpbGVXYXRjaFNlcnZpY2U6IHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgICBtZW1vcnlCdWRnZXQ6IHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgICAgYmFja3VwU2VydmljZTogdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICAgIH1cbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdJbml0aWFsaXphdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgSW5pdGlhbGl6YXRpb25TZXJ2aWNlKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYUluZGljYXRvclNlcnZpY2UnLCAoKSA9PiBuZXcgUGVyc29uYUluZGljYXRvclNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0luZGljYXRvckNvbmZpZycpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ01pZ3JhdGlvbk1hbmFnZXInLCAoKSA9PiBuZXcgTWlncmF0aW9uTWFuYWdlcih0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRJbnN0YWxsZXInLCAoKSA9PiBuZXcgRWxlbWVudEluc3RhbGxlcih0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLCB7XG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHVuaWZpZWRJbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVW5pZmllZEluZGV4TWFuYWdlcicpLFxuICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvUmVwb01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpLFxuICAgICAgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUoKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInLCAoKSA9PiBuZXcgR2l0SHViUG9ydGZvbGlvSW5kZXhlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKVxuICAgICkpO1xuICAgIFxuICAgIC8vIFNFUlZJQ0VTXG4gICAgdGhpcy5yZWdpc3RlcignU2VyaWFsaXphdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgU2VyaWFsaXphdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTWV0YWRhdGFTZXJ2aWNlJywgKCkgPT4gbmV3IE1ldGFkYXRhU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZhbGlkYXRpb25TZXJ2aWNlJywgKCkgPT4gbmV3IFZhbGlkYXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVXYXRjaFNlcnZpY2UnLCAoKSA9PiBuZXcgRmlsZVdhdGNoU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdWYWxpZGF0aW9uUmVnaXN0cnknLCAoKSA9PiBuZXcgVmFsaWRhdGlvblJlZ2lzdHJ5KFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIExPR0dJTkdcbiAgICB0aGlzLnJlZ2lzdGVyKCdMb2dNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRMb2dNYW5hZ2VyQ29uZmlnKGVudik7XG4gICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IExvZ01hbmFnZXIoY29uZmlnKTtcblxuICAgICAgLy8gUGhhc2UgMjogRmlsZUxvZ1NpbmtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbmZpZy5sb2dGb3JtYXQgPT09ICdqc29ubCdcbiAgICAgICAgPyBuZXcgSnNvbmxGb3JtYXR0ZXIoKVxuICAgICAgICA6IG5ldyBQbGFpblRleHRGb3JtYXR0ZXIoKTtcbiAgICAgIGNvbnN0IGZpbGVTaW5rID0gbmV3IEZpbGVMb2dTaW5rKHtcbiAgICAgICAgbG9nRGlyOiBjb25maWcubG9nRGlyLFxuICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgIG1heEZpbGVTaXplOiBjb25maWcuZmlsZU1heFNpemUsXG4gICAgICAgIHJldGVudGlvbkRheXM6IGNvbmZpZy5yZXRlbnRpb25EYXlzLFxuICAgICAgICBzZWN1cml0eVJldGVudGlvbkRheXM6IGNvbmZpZy5zZWN1cml0eVJldGVudGlvbkRheXMsXG4gICAgICAgIG1heERpclNpemVCeXRlczogY29uZmlnLm1heERpclNpemVCeXRlcyxcbiAgICAgICAgbWF4RmlsZXNQZXJDYXRlZ29yeTogY29uZmlnLm1heEZpbGVzUGVyQ2F0ZWdvcnksXG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKGZpbGVTaW5rKTtcbiAgICAgIGZpbGVTaW5rLnN0YXJ0Q2xlYW51cFRpbWVyKCk7XG5cbiAgICAgIC8vIFBoYXNlIDM6IE1lbW9yeUxvZ1NpbmtcbiAgICAgIGNvbnN0IG1lbW9yeVNpbmsgPSBuZXcgTWVtb3J5TG9nU2luayh7XG4gICAgICAgIGFwcENhcGFjaXR5OiBjb25maWcubWVtb3J5QXBwQ2FwYWNpdHksXG4gICAgICAgIHNlY3VyaXR5Q2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlTZWN1cml0eUNhcGFjaXR5LFxuICAgICAgICBwZXJmQ2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlQZXJmQ2FwYWNpdHksXG4gICAgICAgIHRlbGVtZXRyeUNhcGFjaXR5OiBjb25maWcubWVtb3J5VGVsZW1ldHJ5Q2FwYWNpdHksXG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKG1lbW9yeVNpbmspO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyKCdNZW1vcnlMb2dTaW5rJywgKCkgPT4gbWVtb3J5U2luayk7XG5cbiAgICAgIC8vIFN0YXJ0dXAgbWFya2VyIOKAlCBmaXJzdCBlbnRyeSBpbiBldmVyeSBzZXJ2ZXIgc2Vzc2lvblxuICAgICAgbWFuYWdlci5sb2coe1xuICAgICAgICBpZDogbWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlTUNQJyxcbiAgICAgICAgbWVzc2FnZTogYERvbGxob3VzZU1DUCB2JHtWRVJTSU9OfSBzdGFydGluZ2AsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OLFxuICAgICAgICAgIGxvZ0xldmVsOiBjb25maWcubG9nTGV2ZWwsXG4gICAgICAgICAgbG9nRm9ybWF0OiBjb25maWcubG9nRm9ybWF0LFxuICAgICAgICAgIGNvbnNvbGU6IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVcbiAgICAgICAgICAgID8gYGh0dHA6Ly9kb2xsaG91c2UubG9jYWxob3N0OiR7ZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUfWBcbiAgICAgICAgICAgIDogJ2Rpc2FibGVkJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbWFuYWdlcjtcbiAgICB9KTtcblxuICAgIC8vIE1FVFJJQ1MgQ09MTEVDVElPTlxuICAgIC8vIE1lbW9yeU1ldHJpY3NTaW5rIGlzIHJlZ2lzdGVyZWQgc2VwYXJhdGVseSAobm90IGFzIGEgc2lkZSBlZmZlY3QgaW5zaWRlXG4gICAgLy8gTWV0cmljc01hbmFnZXIncyBmYWN0b3J5KSBzbyBpdCdzIGF2YWlsYWJsZSBpbiB0aGUgY29udGFpbmVyIHJlZ2FyZGxlc3NcbiAgICAvLyBvZiBNZXRyaWNzTWFuYWdlciByZXNvbHV0aW9uIG9yZGVyLlxuICAgIGNvbnN0IG1ldHJpY3NDb25maWcgPSBidWlsZE1ldHJpY3NNYW5hZ2VyQ29uZmlnKGVudik7XG4gICAgaWYgKG1ldHJpY3NDb25maWcuZW5hYmxlZCkge1xuICAgICAgY29uc3QgbWVtb3J5TWV0cmljc1NpbmsgPSBuZXcgTWVtb3J5TWV0cmljc1NpbmsobWV0cmljc0NvbmZpZy5tZW1vcnlTbmFwc2hvdENhcGFjaXR5KTtcbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01lbW9yeU1ldHJpY3NTaW5rJywgKCkgPT4gbWVtb3J5TWV0cmljc1NpbmspO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyKCdNZXRyaWNzTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBNZXRyaWNzTWFuYWdlcihtZXRyaWNzQ29uZmlnLCBsb2dnZXIpO1xuICAgICAgICBtYW5hZ2VyLnJlZ2lzdGVyU2luayhtZW1vcnlNZXRyaWNzU2luayk7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVEVMRU1FVFJZXG4gICAgdGhpcy5yZWdpc3RlcignT3BlcmF0aW9uYWxUZWxlbWV0cnknLCAoKSA9PiBuZXcgT3BlcmF0aW9uYWxUZWxlbWV0cnkoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG5cbiAgICAvLyBCQUNLVVAgU0VSVklDRSAoSXNzdWUgIzY1OTogVW5pdmVyc2FsIGJhY2t1cCBmb3IgYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgdGhpcy5yZWdpc3RlcignQmFja3VwU2VydmljZScsICgpID0+IG5ldyBCYWNrdXBTZXJ2aWNlKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHtcbiAgICAgICAgYmFja3VwUm9vdERpcjogcGF0aC5qb2luKHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpLmdldEJhc2VEaXIoKSwgJy5iYWNrdXBzJyksXG4gICAgICAgIG1heEJhY2t1cHNQZXJFbGVtZW50OiBnZXRWYWxpZGF0ZWRNYXhCYWNrdXBzUGVyRWxlbWVudCgpLFxuICAgICAgICBlbmFibGVkOiBTVE9SQUdFX0xBWUVSX0NPTkZJRy5CQUNLVVBTX0VOQUJMRUQsXG4gICAgICB9XG4gICAgKSk7XG5cbiAgICAvLyBQT0xJQ1kgRVhQT1JUIFNFUlZJQ0UgKElzc3VlICM3NjI6IEV4cG9ydCBwb2xpY2llcyB0byBicmlkZ2UpXG4gICAgdGhpcy5yZWdpc3RlcignUG9saWN5RXhwb3J0U2VydmljZScsICgpID0+IG5ldyBQb2xpY3lFeHBvcnRTZXJ2aWNlKHtcbiAgICAgIGdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMucmVzb2x2ZTxFbGVtZW50Q1JVREhhbmRsZXI+KCdFbGVtZW50Q1JVREhhbmRsZXInKTtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlci5nZXRBY3RpdmVFbGVtZW50c0ZvclBvbGljeSgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnZXRTZXJ2ZXJWZXJzaW9uOiAoKSA9PiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgfSkpO1xuXG4gICAgLy8gRUxFTUVOVCBNQU5BR0VSU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NraWxsTWFuYWdlcicsICgpID0+IG5ldyBTa2lsbE1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVGVtcGxhdGVNYW5hZ2VyJywgKCkgPT4gbmV3IFRlbXBsYXRlTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUZW1wbGF0ZVJlbmRlcmVyJywgKCkgPT4gbmV3IFRlbXBsYXRlUmVuZGVyZXIodGhpcy5yZXNvbHZlKCdUZW1wbGF0ZU1hbmFnZXInKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0FnZW50TWFuYWdlcicsICgpID0+IG5ldyBBZ2VudE1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKS5nZXRCYXNlRGlyKCksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTWVtb3J5TWFuYWdlcicsICgpID0+IG5ldyBNZW1vcnlNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0Vuc2VtYmxlTWFuYWdlcicsICgpID0+IG5ldyBFbnNlbWJsZU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgTWVtb3J5LmNvbmZpZ3VyZU1lbW9yeU1hbmFnZXJSZXNvbHZlcigoKSA9PiB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSk7XG4gICAgLy8gSXNzdWUgIzUxOiBDb25maWd1cmUgcmV0ZW50aW9uIHBvbGljeSByZXNvbHZlciBmb3IgTWVtb3J5IGNsYXNzXG4gICAgTWVtb3J5LmNvbmZpZ3VyZVJldGVudGlvblBvbGljeVJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnUmV0ZW50aW9uUG9saWN5U2VydmljZScpKTtcbiAgICAvLyBJc3N1ZSAjMTExOiBDb25maWd1cmUgZWxlbWVudCBtYW5hZ2VyIHJlc29sdmVyIGZvciBBZ2VudE1hbmFnZXIgKGVsZW1lbnQtYWdub3N0aWMgYWN0aXZhdGlvbilcbiAgICBBZ2VudE1hbmFnZXIuc2V0RWxlbWVudE1hbmFnZXJSZXNvbHZlcigobWFuYWdlck5hbWU6IHN0cmluZykgPT4gdGhpcy5yZXNvbHZlKG1hbmFnZXJOYW1lKSk7XG4gICAgLy8gSXNzdWUgIzQwMjogQ29uZmlndXJlIERhbmdlclpvbmVFbmZvcmNlciByZXNvbHZlciBmb3IgQWdlbnRNYW5hZ2VyIChhdXRvbm9teSBldmFsdWF0aW9uKVxuICAgIEFnZW50TWFuYWdlci5zZXREYW5nZXJab25lRW5mb3JjZXJSZXNvbHZlcigoKSA9PiB0aGlzLnJlc29sdmUoJ0RhbmdlclpvbmVFbmZvcmNlcicpKTtcbiAgICAvLyBJc3N1ZSAjMTQyOiBDb25maWd1cmUgVmVyaWZpY2F0aW9uU3RvcmUgcmVzb2x2ZXIgZm9yIEFnZW50TWFuYWdlciAoZGFuZ2VyIHpvbmUgdmVyaWZpY2F0aW9uKVxuICAgIEFnZW50TWFuYWdlci5zZXRWZXJpZmljYXRpb25TdG9yZVJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnVmVyaWZpY2F0aW9uU3RvcmUnKSk7XG5cbiAgICAvLyBRVUVSWSBTRVJWSUNFUyAoSXNzdWUgIzM4OiBQYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIHNvcnRpbmcpXG4gICAgLy8gVGhlc2Ugc2VydmljZXMgYXJlIGVsZW1lbnQtYWdub3N0aWMgYW5kIGNhbiBiZSB1c2VkIHdpdGggYW55IGVsZW1lbnQgdHlwZVxuICAgIHRoaXMucmVnaXN0ZXIoJ1BhZ2luYXRpb25TZXJ2aWNlJywgKCkgPT4gbmV3IFBhZ2luYXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbHRlclNlcnZpY2UnLCAoKSA9PiBuZXcgRmlsdGVyU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTb3J0U2VydmljZScsICgpID0+IG5ldyBTb3J0U2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdFbGVtZW50UXVlcnlTZXJ2aWNlJywgKCkgPT4gbmV3IEVsZW1lbnRRdWVyeVNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmU8UGFnaW5hdGlvblNlcnZpY2U+KCdQYWdpbmF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlPEZpbHRlclNlcnZpY2U+KCdGaWx0ZXJTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmU8U29ydFNlcnZpY2U+KCdTb3J0U2VydmljZScpXG4gICAgKSk7XG5cbiAgICAvLyBDT05WRVJURVJTXG4gICAgdGhpcy5yZWdpc3RlcignQW50aHJvcGljVG9Eb2xsaG91c2VDb252ZXJ0ZXInLCAoKSA9PiBuZXcgQW50aHJvcGljVG9Eb2xsaG91c2VDb252ZXJ0ZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRG9sbGhvdXNlVG9BbnRocm9waWNDb252ZXJ0ZXInLCAoKSA9PiBuZXcgRG9sbGhvdXNlVG9BbnRocm9waWNDb252ZXJ0ZXIoKSk7XG5cbiAgICAvLyBTRUNVUklUWSBTRVJWSUNFU1xuICAgIC8vIElzc3VlICM0MDI6IERhbmdlclpvbmVFbmZvcmNlciBhcyBESS1tYW5hZ2VkIHNpbmdsZXRvbiAocmVwbGFjZXMgbW9kdWxlLWxldmVsIHNpbmdsZXRvbilcbiAgICB0aGlzLnJlZ2lzdGVyKCdEYW5nZXJab25lRW5mb3JjZXInLCAoKSA9PiBuZXcgRGFuZ2VyWm9uZUVuZm9yY2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIC8vIElzc3VlICM1OTg6IEFjdGl2YXRpb25TdG9yZSBmb3IgcGVyLXNlc3Npb24gYWN0aXZhdGlvbiBwZXJzaXN0ZW5jZVxuICAgIHRoaXMucmVnaXN0ZXIoJ0FjdGl2YXRpb25TdG9yZScsICgpID0+IG5ldyBBY3RpdmF0aW9uU3RvcmUoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgLy8gSXNzdWUgIzE0MjogVmVyaWZpY2F0aW9uU3RvcmUgZm9yIGRhbmdlciB6b25lIGNoYWxsZW5nZSBjb2RlcyAoc2VydmVyLXNpZGUpXG4gICAgdGhpcy5yZWdpc3RlcignVmVyaWZpY2F0aW9uU3RvcmUnLCAoKSA9PiBuZXcgVmVyaWZpY2F0aW9uU3RvcmUoKSk7XG4gICAgLy8gSXNzdWUgIzUyMjogTm9uLWJsb2NraW5nIE9TIGRpYWxvZyBub3RpZmllciBmb3IgdmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgdGhpcy5yZWdpc3RlcignVmVyaWZpY2F0aW9uTm90aWZpZXInLCAoKSA9PiBuZXcgVmVyaWZpY2F0aW9uTm90aWZpZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVG9rZW5NYW5hZ2VyJywgKCkgPT4gbmV3IFRva2VuTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYXR0ZXJuRW5jcnlwdG9yJywgKCkgPT4gbmV3IFBhdHRlcm5FbmNyeXB0b3IoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29udGV4dFRyYWNrZXInLCAoKSA9PiBuZXcgQ29udGV4dFRyYWNrZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGF0dGVybkRlY3J5cHRvcicsICgpID0+IG5ldyBQYXR0ZXJuRGVjcnlwdG9yKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQYXR0ZXJuRW5jcnlwdG9yJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbnRleHRUcmFja2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYXR0ZXJuRXh0cmFjdG9yJywgKCkgPT4gbmV3IFBhdHRlcm5FeHRyYWN0b3IoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0JhY2tncm91bmRWYWxpZGF0b3InLCAoKSA9PiBuZXcgQmFja2dyb3VuZFZhbGlkYXRvcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGF0dGVybkV4dHJhY3RvcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZW1vcnlNYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZWN1cml0eVRlbGVtZXRyeScsICgpID0+IG5ldyBTZWN1cml0eVRlbGVtZXRyeSgpKTtcbiAgICBDb250ZW50VmFsaWRhdG9yLmNvbmZpZ3VyZVRlbGVtZXRyeVJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnU2VjdXJpdHlUZWxlbWV0cnknKSk7XG5cbiAgICAvLyBOTFAgJiBJTkRFWElOR1xuICAgIHRoaXMucmVnaXN0ZXIoJ05MUFNjb3JpbmdNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleENvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGluZGV4Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBOTFBTY29yaW5nTWFuYWdlcih7XG4gICAgICAgICAgICBjYWNoZUV4cGlyeTogY29uZmlnLm5scC5jYWNoZUV4cGlyeU1pbnV0ZXMgKiA2MCAqIDEwMDAsXG4gICAgICAgICAgICBtaW5Ub2tlbkxlbmd0aDogY29uZmlnLm5scC5taW5Ub2tlbkxlbmd0aCxcbiAgICAgICAgICAgIGVudHJvcHlCYW5kczogY29uZmlnLm5scC5lbnRyb3B5QmFuZHMsXG4gICAgICAgICAgICBqYWNjYXJkVGhyZXNob2xkczogY29uZmlnLm5scC5qYWNjYXJkVGhyZXNob2xkc1xuICAgICAgICB9LCBpbmRleENvbmZpZ01hbmFnZXIpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZlcmJUcmlnZ2VyTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhDb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmRleENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBuZXcgVmVyYlRyaWdnZXJNYW5hZ2VyKHtcbiAgICAgICAgICAgIGNvbmZpZGVuY2VUaHJlc2hvbGQ6IGNvbmZpZy52ZXJicy5jb25maWRlbmNlVGhyZXNob2xkLFxuICAgICAgICAgICAgbWF4RWxlbWVudHNQZXJWZXJiOiBjb25maWcudmVyYnMubWF4RWxlbWVudHNQZXJWZXJiLFxuICAgICAgICAgICAgaW5jbHVkZVN5bm9ueW1zOiBjb25maWcudmVyYnMuaW5jbHVkZVN5bm9ueW1zXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1JlbGF0aW9uc2hpcE1hbmFnZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4Q29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gaW5kZXhDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgICAgICByZXR1cm4gbmV3IFJlbGF0aW9uc2hpcE1hbmFnZXIoe1xuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgICAgbWluQ29uZmlkZW5jZTogY29uZmlnLnBlcmZvcm1hbmNlLnNpbWlsYXJpdHlUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgZW5hYmxlQXV0b0Rpc2NvdmVyeTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZGV4Q29uZmlnTWFuYWdlcixcbiAgICAgICAgICAgIHZlcmJUcmlnZ2VyTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdWZXJiVHJpZ2dlck1hbmFnZXInKSxcbiAgICAgICAgICAgIG5scFNjb3Jpbmc6IHRoaXMucmVzb2x2ZSgnTkxQU2NvcmluZ01hbmFnZXInKSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJywgKCkgPT4gbmV3IFBvcnRmb2xpb0luZGV4TWFuYWdlcih0aGlzLnJlc29sdmUoJ0luZGV4Q29uZmlnTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VuaGFuY2VkSW5kZXhIZWxwZXJzJywgKCkgPT4gbmV3IERlZmF1bHRFbmhhbmNlZEluZGV4SGVscGVycyhcbiAgICAgIG5ldyBFbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIoKSxcbiAgICAgIG5ldyBTZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2Uoe1xuICAgICAgICBubHBTY29yaW5nOiB0aGlzLnJlc29sdmUoJ05MUFNjb3JpbmdNYW5hZ2VyJyksXG4gICAgICAgIHJlbGF0aW9uc2hpcE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUmVsYXRpb25zaGlwTWFuYWdlcicpXG4gICAgICB9KSxcbiAgICAgIChjb250ZXh0KSA9PiBuZXcgQWN0aW9uVHJpZ2dlckV4dHJhY3Rvcihjb250ZXh0KSxcbiAgICAgIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSBuZXcgVHJpZ2dlck1ldHJpY3NUcmFja2VyKG9wdGlvbnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRyYWNrZXIuYWRkTG9nTGlzdGVuZXIoZ2V0VHJpZ2dlck1ldHJpY3NMb2dMaXN0ZW5lcihcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSgnTG9nTWFuYWdlcicpLFxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKCdDb250ZXh0VHJhY2tlcicpXG4gICAgICAgICAgKSk7XG4gICAgICAgIH0gY2F0Y2ggeyAvKiBMb2dNYW5hZ2VyIG5vdCB5ZXQgcmVnaXN0ZXJlZCAqLyB9XG4gICAgICAgIHJldHVybiB0cmFja2VyO1xuICAgICAgfVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VuaGFuY2VkSW5kZXhNYW5hZ2VyJywgKCkgPT4gbmV3IEVuaGFuY2VkSW5kZXhNYW5hZ2VyKFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0luZGV4Q29uZmlnTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdOTFBTY29yaW5nTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1ZlcmJUcmlnZ2VyTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1JlbGF0aW9uc2hpcE1hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdFbmhhbmNlZEluZGV4SGVscGVycycpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkluZGV4Q2FjaGUnLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkluZGV4Q2FjaGUoXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksXG4gICAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnUGVyZm9ybWFuY2VNb25pdG9yJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJywgKCkgPT4gbmV3IFVuaWZpZWRJbmRleE1hbmFnZXIoe1xuICAgICAgICBwb3J0Zm9saW9JbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICAgIGdpdGh1YkluZGV4ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUG9ydGZvbGlvSW5kZXhlcicpLFxuICAgICAgICBjb2xsZWN0aW9uSW5kZXhDYWNoZTogdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScpLFxuICAgICAgICBnaXRodWJDbGllbnQ6IHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksXG4gICAgICAgIGFwaUNhY2hlOiB0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksXG4gICAgICAgIHJhdGVMaW1pdFRyYWNrZXI6IHRoaXMucmVzb2x2ZSgnUmF0ZUxpbWl0VHJhY2tlcicpLFxuICAgICAgICBwZXJmb3JtYW5jZU1vbml0b3I6IHRoaXMucmVzb2x2ZSgnUGVyZm9ybWFuY2VNb25pdG9yJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvU3luY0NvbXBhcmVyJywgKCkgPT4gbmV3IFBvcnRmb2xpb1N5bmNDb21wYXJlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9Eb3dubG9hZGVyJywgKCkgPT4gbmV3IFBvcnRmb2xpb0Rvd25sb2FkZXIoKSk7XG5cbiAgICAvLyBTWU5DICYgVE9PTFNcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9QdWxsSGFuZGxlcicsICgpID0+IG5ldyBQb3J0Zm9saW9QdWxsSGFuZGxlcih7XG4gICAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgICBpbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICAgIGdpdGh1YkluZGV4ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUG9ydGZvbGlvSW5kZXhlcicpLFxuICAgICAgICBwb3J0Zm9saW9SZXBvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpLFxuICAgICAgICBzeW5jQ29tcGFyZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvU3luY0NvbXBhcmVyJyksXG4gICAgICAgIGRvd25sb2FkZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvRG93bmxvYWRlcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgICAgdG9rZW5NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpLFxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTdWJtaXRUb1BvcnRmb2xpb1Rvb2wnLCAoKSA9PiBuZXcgU3VibWl0VG9Qb3J0Zm9saW9Ub29sKHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSwge1xuICAgICAgICBhdXRoTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJBdXRoTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvSW5kZXhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9SZXBvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpLFxuICAgICAgICByYXRlTGltaXRlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJSYXRlTGltaXRlcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgICAgdG9rZW5NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb1N5bmNNYW5hZ2VyJywgKCkgPT4gbmV3IFBvcnRmb2xpb1N5bmNNYW5hZ2VyKHtcbiAgICAgICAgY29uZmlnTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9SZXBvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpLFxuICAgICAgICBpbmRleGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICAgIHRva2VuTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgIH0pKTtcblxuICAgIC8vIFNFUlZFUlxuICAgIHRoaXMucmVnaXN0ZXIoJ1NlcnZlclNldHVwJywgKCkgPT4gbmV3IFNlcnZlclNldHVwKFxuICAgICAgdGhpcy5yZXNvbHZlPENvbnRleHRUcmFja2VyPignQ29udGV4dFRyYWNrZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NlcnZlclN0YXJ0dXAnLCAoKSA9PiBuZXcgU2VydmVyU3RhcnR1cChcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNaWdyYXRpb25NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnT3BlcmF0aW9uYWxUZWxlbWV0cnknKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0J1aWxkSW5mb1NlcnZpY2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IEJ1aWxkSW5mb1NlcnZpY2UodGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSk7XG4gICAgICAvLyBJc3N1ZSAjNzA2OiBXaXJlIHN0YXJ0dXAgaW5zdHJ1bWVudGF0aW9uXG4gICAgICBzZXJ2aWNlLnNldFN0YXJ0dXBUaW1lcih0aGlzLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJykpO1xuICAgICAgc2VydmljZS5zZXREZWZlcnJlZFNldHVwQ2hlY2tlcigoKSA9PiB0aGlzLmRlZmVycmVkU2V0dXBDb21wbGV0ZSk7XG4gICAgICByZXR1cm4gc2VydmljZTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJmb3JtYW5jZU1vbml0b3InLCAoKSA9PiB7XG4gICAgICBjb25zdCBtb25pdG9yID0gbmV3IFBlcmZvcm1hbmNlTW9uaXRvcigpO1xuICAgICAgbW9uaXRvci5zdGFydE1vbml0b3JpbmcoKTtcbiAgICAgIHJldHVybiBtb25pdG9yO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlcignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInLCAoKSA9PiBuZXcgT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIoKSwgeyBzaW5nbGV0b246IHRydWUgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJywgKCkgPT4gbmV3IEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcigpLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQZXJzb25hc0RpcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hc0RpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHBvcnRmb2xpbyDigJQgY3JpdGljYWwgcGF0aCBvbmx5LlxuICAgKlxuICAgKiBJc3N1ZSAjNzA2OiBTcGxpdCBmcm9tIHRoZSBvcmlnaW5hbCBtb25vbGl0aGljIHByZXBhcmVQb3J0Zm9saW8oKS5cbiAgICogT25seSB3b3JrIHJlcXVpcmVkIGJlZm9yZSBNQ1AgY29ubmVjdCgpIHJ1bnMgaGVyZS4gTm9uLWNyaXRpY2FsIHdvcmtcbiAgICogKG1lbW9yeSBhdXRvLWxvYWQsIGFjdGl2YXRpb24gcmVzdG9yZSwgbG9nIGhvb2tzLCBkYW5nZXIgem9uZSBpbml0KVxuICAgKiBpcyBkZWZlcnJlZCB0byBjb21wbGV0ZURlZmVycmVkU2V0dXAoKSB3aGljaCBydW5zIHBvc3QtY29ubmVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlUG9ydGZvbGlvKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gdGhpcy5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbWlncmF0aW9uTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNaWdyYXRpb25NYW5hZ2VyPignTWlncmF0aW9uTWFuYWdlcicpO1xuICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKTtcblxuICAgIC8vIC0tLSBjb25maWdfY2hlY2tzIChjcml0aWNhbCkgLS0tXG4gICAgdGltZXIuc3RhcnRQaGFzZSgnY29uZmlnX2NoZWNrcycsIHRydWUpO1xuXG4gICAgLy8gUEVSRk9STUFOQ0UgT1BUSU1JWkFUSU9OOiBSdW4gaW5kZXBlbmRlbnQgY2hlY2tzIGluIHBhcmFsbGVsICg0MC02MCUgZmFzdGVyIHN0YXJ0dXApXG4gICAgLy8gVXNlIFByb21pc2UuYWxsU2V0dGxlZCB0byBjYXB0dXJlIGFsbCBjaGVjayByZXN1bHRzLCBldmVuIGlmIG9uZSBmYWlsc1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgbWlncmF0aW9uTWFuYWdlci5uZWVkc01pZ3JhdGlvbigpLFxuICAgICAgcG9ydGZvbGlvTWFuYWdlci5leGlzdHMoKVxuICAgIF0pO1xuXG4gICAgLy8gRXh0cmFjdCByZXN1bHRzIGFuZCBjb2xsZWN0IGFueSBlcnJvcnNcbiAgICBjb25zdCBjaGVja0Vycm9yczogQXJyYXk8eyBjaGVjazogc3RyaW5nOyBlcnJvcjogRXJyb3IgfT4gPSBbXTtcblxuICAgIGxldCBuZWVkc01pZ3JhdGlvbiA9IGZhbHNlO1xuICAgIGlmIChyZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIG5lZWRzTWlncmF0aW9uID0gcmVzdWx0c1swXS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tFcnJvcnMucHVzaCh7XG4gICAgICAgIGNoZWNrOiAnbWlncmF0aW9uJyxcbiAgICAgICAgZXJyb3I6IHJlc3VsdHNbMF0ucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHRzWzBdLnJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVzdWx0c1swXS5yZWFzb24pKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHBvcnRmb2xpb0V4aXN0cyA9IGZhbHNlO1xuICAgIGlmIChyZXN1bHRzWzFdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIHBvcnRmb2xpb0V4aXN0cyA9IHJlc3VsdHNbMV0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrRXJyb3JzLnB1c2goe1xuICAgICAgICBjaGVjazogJ3BvcnRmb2xpbycsXG4gICAgICAgIGVycm9yOiByZXN1bHRzWzFdLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVzdWx0c1sxXS5yZWFzb24gOiBuZXcgRXJyb3IoU3RyaW5nKHJlc3VsdHNbMV0ucmVhc29uKSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIGJvdGggY2hlY2tzIGZhaWxlZCwgdGhyb3cgY29tcHJlaGVuc2l2ZSBlcnJvclxuICAgIGlmIChjaGVja0Vycm9ycy5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBjaGVja0Vycm9ycy5tYXAoZSA9PiBgJHtlLmNoZWNrfTogJHtlLmVycm9yLm1lc3NhZ2V9YCkuam9pbignOyAnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUG9ydGZvbGlvIHByZXBhcmF0aW9uIGZhaWxlZCAtIGFsbCBjaGVja3MgZmFpbGVkOiAke2Vycm9yTWVzc2FnZXN9YCk7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBvbmUgY2hlY2sgZmFpbGVkLCBsb2cgd2FybmluZyBidXQgY29udGludWVcbiAgICBpZiAoY2hlY2tFcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBsb2dnZXIud2FybihgUG9ydGZvbGlvIGNoZWNrIGZhaWxlZCBidXQgY29udGludWluZzogJHtjaGVja0Vycm9yc1swXS5jaGVja30gLSAke2NoZWNrRXJyb3JzWzBdLmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdGltZXIuZW5kUGhhc2UoJ2NvbmZpZ19jaGVja3MnKTtcblxuICAgIC8vIC0tLSBtaWdyYXRpb24gKGNyaXRpY2FsLCBjb25kaXRpb25hbCkgLS0tXG4gICAgaWYgKG5lZWRzTWlncmF0aW9uKSB7XG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdtaWdyYXRpb24nLCB0cnVlKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiTGVnYWN5IHBlcnNvbmFzIGRldGVjdGVkLiBTdGFydGluZyBtaWdyYXRpb24uLi5cIik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtaWdyYXRpb25NYW5hZ2VyLm1pZ3JhdGUoeyBiYWNrdXA6IHRydWUgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIuaW5mbyhgU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkICR7cmVzdWx0Lm1pZ3JhdGVkQ291bnR9IHBlcnNvbmFzYCk7XG4gICAgICAgIGlmIChyZXN1bHQuYmFja2VkVXAgJiYgcmVzdWx0LmJhY2t1cFBhdGgpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgQmFja3VwIGNyZWF0ZWQgYXQ6ICR7cmVzdWx0LmJhY2t1cFBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIk1pZ3JhdGlvbiBjb21wbGV0ZWQgd2l0aCBlcnJvcnM6XCIpO1xuICAgICAgICByZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycikgPT4gbG9nZ2VyLmVycm9yKGAgIC0gJHtlcnJ9YCkpO1xuICAgICAgfVxuICAgICAgdGltZXIuZW5kUGhhc2UoJ21pZ3JhdGlvbicpO1xuICAgIH1cblxuICAgIC8vIC0tLSBwb3J0Zm9saW9faW5pdCAoY3JpdGljYWwsIGNvbmRpdGlvbmFsKSAtLS1cbiAgICBpZiAoIXBvcnRmb2xpb0V4aXN0cykge1xuICAgICAgdGltZXIuc3RhcnRQaGFzZSgncG9ydGZvbGlvX2luaXQnLCB0cnVlKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiQ3JlYXRpbmcgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuLi5cIik7XG4gICAgICBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICAgIHRpbWVyLmVuZFBoYXNlKCdwb3J0Zm9saW9faW5pdCcpO1xuICAgIH1cblxuICAgIC8vIFBFUkZPUk1BTkNFIE9QVElNSVpBVElPTjogSW5pdGlhbGl6ZSBjb2xsZWN0aW9uIGNhY2hlIGluIGJhY2tncm91bmQgKG5vbi1ibG9ja2luZylcbiAgICAvLyBUaGlzIGlzIHNhZmUgYmVjYXVzZSBjb2xsZWN0aW9uIGNhY2hlIGlzIG5vdCBjcml0aWNhbCBmb3Igc3RhcnR1cFxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZSgpLmNhdGNoKGVyciA9PlxuICAgICAgbG9nZ2VyLndhcm4oJ0JhY2tncm91bmQgY29sbGVjdGlvbiBjYWNoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKHdpbGwgcmV0cnkgb24gZGVtYW5kKScsIGVycilcbiAgICApO1xuXG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcblxuICAgIC8vIC0tLSBjb25maWdfbWFuYWdlciAoY3JpdGljYWwpIC0tLVxuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ2NvbmZpZ19tYW5hZ2VyJywgdHJ1ZSk7XG4gICAgY29uc3QgY29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxDb25maWdNYW5hZ2VyPignQ29uZmlnTWFuYWdlcicpO1xuICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgIHRpbWVyLmVuZFBoYXNlKCdjb25maWdfbWFuYWdlcicpO1xuXG4gICAgY29uc3QgZWxhcHNlZFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGxvZ2dlci5pbmZvKGBbU3RhcnR1cF0gQ3JpdGljYWwgcG9ydGZvbGlvIHBhdGggY29tcGxldGVkIGluICR7ZWxhcHNlZFRpbWV9bXMgKHBlcnNvbmFzIGRpcmVjdG9yeTogJHt0aGlzLnBlcnNvbmFzRGlyfSlgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBub24tY3JpdGljYWwgc2V0dXAgYWZ0ZXIgTUNQIGNvbm5lY3QoKS5cbiAgICpcbiAgICogSXNzdWUgIzcwNjogVGhlc2Ugb3BlcmF0aW9ucyB3ZXJlIHByZXZpb3VzbHkgaW4gcHJlcGFyZVBvcnRmb2xpbygpIGJ1dCBhcmVcbiAgICogbm9uLWZhdGFsIGFuZCBjYW4gc2FmZWx5IHJ1biBhZnRlciB0aGUgc2VydmVyIGlzIGFjY2VwdGluZyBjb25uZWN0aW9ucy5cbiAgICogVGhpcyBzaHJpbmtzIHRoZSBjcml0aWNhbCBwYXRoIGJ5IDEwMDAtMzcwMG1zLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IHRoaXMucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKTtcblxuICAgIC8vIElzc3VlICM3MDY6IFRlc3QgaG9vayDigJQgaW5qZWN0IGFydGlmaWNpYWwgZGVsYXkgdG8gc2ltdWxhdGUgc2xvdyBkZWZlcnJlZCBzZXR1cC5cbiAgICAvLyBPbmx5IGFjdGl2ZSB3aGVuIERPTExIT1VTRV9URVNUX0RFRkVSUkVEX0RFTEFZX01TIGlzIHNldCAoaW50ZWdyYXRpb24gdGVzdHMpLlxuICAgIGNvbnN0IHRlc3REZWxheSA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkRPTExIT1VTRV9URVNUX0RFRkVSUkVEX0RFTEFZX01TIHx8ICcwJywgMTApO1xuICAgIGlmICh0ZXN0RGVsYXkgPiAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgW1N0YXJ0dXBdIFRlc3QgZGVsYXkgaW5qZWN0ZWQ6ICR7dGVzdERlbGF5fW1zYCk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGVzdERlbGF5KSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZE1lbW9yeUF1dG9sb2FkKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkQWN0aXZhdGlvblJlc3RvcmUodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRQb2xpY3lFeHBvcnQoKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkTG9nSG9va3ModGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRNZXRyaWNzQ29sbGVjdG9ycyh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZFdlYkNvbnNvbGUodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRQZXJtaXNzaW9uU2VydmVyKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkRGFuZ2VyWm9uZUluaXQodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRQYXR0ZXJuRW5jcnlwdGlvbih0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZEJhY2tncm91bmRWYWxpZGF0b3IodGltZXIpO1xuXG4gICAgdGhpcy5kZWZlcnJlZFNldHVwQ29tcGxldGUgPSB0cnVlO1xuXG4gICAgY29uc3QgcmVwb3J0ID0gdGltZXIuZ2V0UmVwb3J0KCk7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgW1N0YXJ0dXBdIERlZmVycmVkIHNldHVwIGNvbXBsZXRlZCBpbiAke3JlcG9ydC5kZWZlcnJlZE1zfW1zIGAgK1xuICAgICAgYCh0b3RhbCBzdGFydHVwOiAke3JlcG9ydC50b3RhbE1zfW1zLCBjcml0aWNhbDogJHtyZXBvcnQuY3JpdGljYWxQYXRoTXN9bXMpYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkTWVtb3J5QXV0b2xvYWQodGltZXI6IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ21lbW9yeV9hdXRvbG9hZCcsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxDb25maWdNYW5hZ2VyPignQ29uZmlnTWFuYWdlcicpO1xuICAgICAgY29uc3QgY29uZmlnID0gY29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcblxuICAgICAgaWYgKGNvbmZpZy5hdXRvTG9hZC5lbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IG1lbW9yeU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWVtb3J5TWFuYWdlcj4oJ01lbW9yeU1hbmFnZXInKTtcbiAgICAgICAgY29uc3QgYXV0b0xvYWRSZXN1bHQgPSBhd2FpdCBtZW1vcnlNYW5hZ2VyLmxvYWRBbmRBY3RpdmF0ZUF1dG9Mb2FkTWVtb3JpZXMoKTtcblxuICAgICAgICBpZiAoYXV0b0xvYWRSZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIGBbQ29udGFpbmVyXSBBdXRvLWxvYWQgY29tcGxldGVkIHdpdGggJHthdXRvTG9hZFJlc3VsdC5lcnJvcnMubGVuZ3RofSBlcnJvcihzKTpgLFxuICAgICAgICAgICAgYXV0b0xvYWRSZXN1bHQuZXJyb3JzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBbQ29udGFpbmVyXSBBdXRvLWxvYWRlZCAke2F1dG9Mb2FkUmVzdWx0LmxvYWRlZH0gbWVtb3JpZXMgYCArXG4gICAgICAgICAgYCh+JHthdXRvTG9hZFJlc3VsdC50b3RhbFRva2Vuc30gdG9rZW5zKSwgJHthdXRvTG9hZFJlc3VsdC5za2lwcGVkfSBza2lwcGVkYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBBdXRvLWxvYWQgbWVtb3JpZXMgZGlzYWJsZWQgaW4gY29uZmlndXJhdGlvbicpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tDb250YWluZXJdIE1lbW9yeSBhdXRvLWxvYWQgZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXIuZW5kUGhhc2UoJ21lbW9yeV9hdXRvbG9hZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZEFjdGl2YXRpb25SZXN0b3JlKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdhY3RpdmF0aW9uX3Jlc3RvcmUnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFjdGl2YXRpb25TdG9yZSA9IHRoaXMucmVzb2x2ZTxBY3RpdmF0aW9uU3RvcmU+KCdBY3RpdmF0aW9uU3RvcmUnKTtcbiAgICAgIGF3YWl0IGFjdGl2YXRpb25TdG9yZS5pbml0aWFsaXplKCk7XG5cbiAgICAgIGlmIChhY3RpdmF0aW9uU3RvcmUuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0b3JlQWN0aXZhdGlvbnMoYWN0aXZhdGlvblN0b3JlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIEFjdGl2YXRpb24gc3RhdGUgcmVzdG9yYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXIuZW5kUGhhc2UoJ2FjdGl2YXRpb25fcmVzdG9yZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBvbGljeUV4cG9ydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcG9saWN5RXhwb3J0U2VydmljZSA9IHRoaXMucmVzb2x2ZTxQb2xpY3lFeHBvcnRTZXJ2aWNlPignUG9saWN5RXhwb3J0U2VydmljZScpO1xuICAgICAgYXdhaXQgcG9saWN5RXhwb3J0U2VydmljZS5leHBvcnRQb2xpY2llcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIFBvbGljeSBleHBvcnQgc2tpcHBlZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZExvZ0hvb2tzKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdsb2dfaG9va3MnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TG9nTWFuYWdlcj4oJ0xvZ01hbmFnZXInKTtcbiAgICAgIGNvbnN0IGxvZ0NsZWFudXBzID0gd2lyZUxvZ0hvb2tzKGxvZ01hbmFnZXIsIHRoaXMpO1xuICAgICAgdGhpcy5yZWdpc3RlcignX2xvZ0hvb2tDbGVhbnVwcycsICgpID0+IGxvZ0NsZWFudXBzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIEZhaWxlZCB0byB3aXJlIGxvZyBob29rczonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdsb2dfaG9va3MnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRNZXRyaWNzQ29sbGVjdG9ycyh0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnbWV0cmljc19jb2xsZWN0b3JzJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRyaWNzTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNZXRyaWNzTWFuYWdlcj4oJ01ldHJpY3NNYW5hZ2VyJyk7XG4gICAgICB0aGlzLndpcmVNZXRyaWNzQ29sbGVjdG9ycyhtZXRyaWNzTWFuYWdlcik7XG4gICAgICBtZXRyaWNzTWFuYWdlci5zdGFydCgpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tDb250YWluZXJdIE1ldHJpY3MgY29sbGVjdGlvbiBzdGFydGVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBNZXRyaWNzIHdpcmluZyBza2lwcGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXIuZW5kUGhhc2UoJ21ldHJpY3NfY29sbGVjdG9ycycpO1xuICB9XG5cbiAgLyoqIFRyeSB0byByZXNvbHZlIGEgc2VydmljZSwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZCAqL1xuICBwcml2YXRlIHRyeVJlc29sdmU8VD4obmFtZTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHsgcmV0dXJuIHRoaXMucmVzb2x2ZTxUPihuYW1lKTsgfSBjYXRjaCB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgfVxuXG4gIC8qKiBXaXJlIFNTRSBicm9hZGNhc3Qgc2lua3MgZm9yIHRoZSB3ZWIgY29uc29sZSAqL1xuICBwcml2YXRlIHdpcmVTU0VCcm9hZGNhc3RzKFxuICAgIHdlYlJlc3VsdDogaW1wb3J0KCcuLi93ZWIvc2VydmVyLmpzJykuV2ViU2VydmVyUmVzdWx0LFxuICAgIG1ldHJpY3NTaW5rOiBNZW1vcnlNZXRyaWNzU2luayB8IHVuZGVmaW5lZCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHdlYlJlc3VsdC5sb2dCcm9hZGNhc3QpIHtcbiAgICAgIGNvbnN0IGxvZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TG9nTWFuYWdlcj4oJ0xvZ01hbmFnZXInKTtcbiAgICAgIGxvZ01hbmFnZXIucmVnaXN0ZXJTaW5rKG5ldyBXZWJTU0VMb2dTaW5rKHdlYlJlc3VsdC5sb2dCcm9hZGNhc3QpKTtcbiAgICB9XG4gICAgaWYgKHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdCAmJiBtZXRyaWNzU2luaykge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnRyeVJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgaWYgKG1ldHJpY3NNYW5hZ2VyKSB7XG4gICAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyU2luayhuZXcgV2ViU1NFTWV0cmljc1Npbmsod2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFdlYkNvbnNvbGUodGltZXI6IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ3dlYl9jb25zb2xlJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEUpIHJldHVybjtcblxuICAgICAgY29uc3QgYWN0aXZhdGlvblN0b3JlID0gdGhpcy5yZXNvbHZlPEFjdGl2YXRpb25TdG9yZT4oJ0FjdGl2YXRpb25TdG9yZScpO1xuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYWN0aXZhdGlvblN0b3JlLmdldFNlc3Npb25JZCgpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpO1xuICAgICAgY29uc3QgbWVtb3J5U2luayA9IHRoaXMucmVzb2x2ZTxNZW1vcnlMb2dTaW5rPignTWVtb3J5TG9nU2luaycpO1xuICAgICAgY29uc3QgbWV0cmljc1NpbmsgPSB0aGlzLnRyeVJlc29sdmU8TWVtb3J5TWV0cmljc1Npbms+KCdNZW1vcnlNZXRyaWNzU2luaycpO1xuICAgICAgY29uc3QgbWNwQXFsSGFuZGxlciA9IHRoaXMudHJ5UmVzb2x2ZTxNQ1BBUUxIYW5kbGVyPignbWNwQXFsSGFuZGxlcicpO1xuICAgICAgY29uc3QgbG9nTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxMb2dNYW5hZ2VyPignTG9nTWFuYWdlcicpO1xuXG4gICAgICAvLyBSZXNvbHZlIGNvbnNvbGUgcG9ydDogY29uZmlnIGZpbGUg4oaSIGVudiB2YXIg4oaSIGRlZmF1bHQgKCMxODQwKVxuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxDb25maWdNYW5hZ2VyPignQ29uZmlnTWFuYWdlcicpO1xuICAgICAgY29uc3QgY29uZmlnUG9ydCA9IGNvbmZpZ01hbmFnZXIuZ2V0U2V0dGluZzxudW1iZXI+KCdjb25zb2xlLnBvcnQnKTtcblxuICAgICAgY29uc3QgeyBzdGFydFVuaWZpZWRDb25zb2xlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3dlYi9jb25zb2xlL1VuaWZpZWRDb25zb2xlLmpzJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydFVuaWZpZWRDb25zb2xlKHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBwb3J0Zm9saW9EaXI6IHBvcnRmb2xpb01hbmFnZXIuZ2V0QmFzZURpcigpLFxuICAgICAgICBtZW1vcnlTaW5rLFxuICAgICAgICBtZXRyaWNzU2luayxcbiAgICAgICAgbWNwQXFsSGFuZGxlcixcbiAgICAgICAgcmVnaXN0ZXJMb2dTaW5rOiAoc2luaykgPT4gbG9nTWFuYWdlci5yZWdpc3RlclNpbmsoc2luayksXG4gICAgICAgIHdpcmVTU0VCcm9hZGNhc3RzOiAod2ViUmVzdWx0LCBtU2luaykgPT4gdGhpcy53aXJlU1NFQnJvYWRjYXN0cyh3ZWJSZXN1bHQsIG1TaW5rKSxcbiAgICAgICAgcG9ydDogY29uZmlnUG9ydCxcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW0NvbnRhaW5lcl0gV2ViIGNvbnNvbGUgc3RhcnRlZCBhcyAke3Jlc3VsdC5yb2xlfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gV2ViIGNvbnNvbGUgc3RhcnR1cCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgnd2ViX2NvbnNvbGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRQZXJtaXNzaW9uU2VydmVyKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdwZXJtaXNzaW9uX3NlcnZlcicsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFlbnYuRE9MTEhPVVNFX1BFUk1JU1NJT05fU0VSVkVSKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgZGlzYWJsZWQgdmlhIERPTExIT1VTRV9QRVJNSVNTSU9OX1NFUlZFUj1mYWxzZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIFBlcm1pc3Npb24gc2VydmVyIHNraXBwZWQg4oCUIHdlYiBjb25zb2xlIGlzIGRpc2FibGVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUGVybWlzc2lvbiByb3V0ZXMgYXJlIGFscmVhZHkgbW91bnRlZCBvbiB0aGUgdW5pZmllZCB3ZWIgY29uc29sZS5cbiAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3cml0ZSB0aGUgcG9ydCBmaWxlIHNvIHRoZSBQcmVUb29sVXNlIGhvb2sgc2NyaXB0XG4gICAgICAvLyBjYW4gZGlzY292ZXIgaXQuIE5vIHNlcGFyYXRlIHNlcnZlciDigJQgdXNlIHRoZSBleGlzdGluZyBjb25zb2xlIHBvcnQuXG4gICAgICBjb25zdCBwb3J0ID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUO1xuICAgICAgY29uc3Qgc3RhcnRNcyA9IERhdGUubm93KCk7XG5cbiAgICAgIGNvbnN0IHsgd3JpdGVQb3J0RmlsZSwgcmVnaXN0ZXJQb3J0Q2xlYW51cCB9ID0gYXdhaXQgaW1wb3J0KCcuLi9hdXRvLWRvbGxob3VzZS9wb3J0RGlzY292ZXJ5LmpzJyk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtDb250YWluZXJdIFdyaXRpbmcgcGVybWlzc2lvbiBzZXJ2ZXIgcG9ydCBmaWxlIGZvciBwb3J0ICR7cG9ydH1gKTtcbiAgICAgIGF3YWl0IHdyaXRlUG9ydEZpbGUocG9ydCk7XG4gICAgICByZWdpc3RlclBvcnRDbGVhbnVwKCk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtDb250YWluZXJdIFBvcnQgY2xlYW51cCBoYW5kbGVycyByZWdpc3RlcmVkYCk7XG5cbiAgICAgIGNvbnN0IGVsYXBzZWRNcyA9IERhdGUubm93KCkgLSBzdGFydE1zO1xuICAgICAgbG9nZ2VyLmluZm8oYFtDb250YWluZXJdIFBlcm1pc3Npb24gc2VydmVyIHBvcnQgZmlsZSB3cml0dGVuIChwb3J0ICR7cG9ydH0sICR7ZWxhcHNlZE1zfW1zKWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgc3RhcnR1cCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgncGVybWlzc2lvbl9zZXJ2ZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWREYW5nZXJab25lSW5pdCh0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnZGFuZ2VyX3pvbmVfaW5pdCcsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGFuZ2VyWm9uZUVuZm9yY2VyID0gdGhpcy5yZXNvbHZlPERhbmdlclpvbmVFbmZvcmNlcj4oJ0RhbmdlclpvbmVFbmZvcmNlcicpO1xuICAgICAgYXdhaXQgZGFuZ2VyWm9uZUVuZm9yY2VyLmluaXRpYWxpemUoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIERhbmdlclpvbmVFbmZvcmNlciBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgnZGFuZ2VyX3pvbmVfaW5pdCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBhdHRlcm5FbmNyeXB0aW9uKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdwYXR0ZXJuX2VuY3J5cHRpb24nLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdHRlcm5FbmNyeXB0b3IgPSB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKSBhcyBQYXR0ZXJuRW5jcnlwdG9yO1xuICAgICAgYXdhaXQgcGF0dGVybkVuY3J5cHRvci5pbml0aWFsaXplKCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIlBhdHRlcm4gZW5jcnlwdGlvbiBpbml0aWFsaXplZFwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIFBhdHRlcm4gZW5jcnlwdGlvbiBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgncGF0dGVybl9lbmNyeXB0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkQmFja2dyb3VuZFZhbGlkYXRvcih0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnYmFja2dyb3VuZF92YWxpZGF0b3InLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmRWYWxpZGF0b3IgPSB0aGlzLnJlc29sdmUoJ0JhY2tncm91bmRWYWxpZGF0b3InKSBhcyBhbnk7XG4gICAgICBiYWNrZ3JvdW5kVmFsaWRhdG9yLnN0YXJ0KCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIkJhY2tncm91bmQgdmFsaWRhdG9yIHN0YXJ0ZWQgZm9yIG1lbW9yeSBzZWN1cml0eVwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIEJhY2tncm91bmQgdmFsaWRhdG9yIHN0YXJ0IGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdiYWNrZ3JvdW5kX3ZhbGlkYXRvcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgcGVyLXNlc3Npb24gYWN0aXZhdGlvbiBzdGF0ZSBmcm9tIHRoZSBBY3RpdmF0aW9uU3RvcmUuXG4gICAqIENhbGxlZCBkdXJpbmcgcHJlcGFyZVBvcnRmb2xpbygpIGFmdGVyIGF1dG8tbG9hZCBtZW1vcmllcy5cbiAgICpcbiAgICogSXNzdWUgIzU5ODogRWFjaCBlbGVtZW50IHR5cGUgaXMgcmVzdG9yZWQgaW5kZXBlbmRlbnRseS5cbiAgICogTWlzc2luZyBlbGVtZW50cyAoZGVsZXRlZCBzaW5jZSBsYXN0IHNlc3Npb24pIGFyZSBza2lwcGVkIGFuZCBwcnVuZWQuXG4gICAqIEF1dG8tbG9hZGVkIG1lbW9yaWVzIGFyZSBkZWR1cGxpY2F0ZWQgKG5vdCBhY3RpdmF0ZWQgdHdpY2UpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXN0b3JlQWN0aXZhdGlvbnMoc3RvcmU6IEFjdGl2YXRpb25TdG9yZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlcnNvbmFNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFNYW5hZ2VyPignUGVyc29uYU1hbmFnZXInKTtcbiAgICBjb25zdCBza2lsbE1hbmFnZXIgPSB0aGlzLnJlc29sdmU8U2tpbGxNYW5hZ2VyPignU2tpbGxNYW5hZ2VyJyk7XG4gICAgY29uc3QgYWdlbnRNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEFnZW50TWFuYWdlcj4oJ0FnZW50TWFuYWdlcicpO1xuICAgIGNvbnN0IG1lbW9yeU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWVtb3J5TWFuYWdlcj4oJ01lbW9yeU1hbmFnZXInKTtcbiAgICBjb25zdCBlbnNlbWJsZU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8RW5zZW1ibGVNYW5hZ2VyPignRW5zZW1ibGVNYW5hZ2VyJyk7XG5cbiAgICBsZXQgcmVzdG9yZWRDb3VudCA9IDA7XG4gICAgbGV0IHNraXBwZWRDb3VudCA9IDA7XG5cbiAgICAvLyBSZXN0b3JlIHBlcnNvbmFzICh1c2VzIGZpbGVuYW1lIGlmIGF2YWlsYWJsZSwgZmFsbHMgYmFjayB0byBuYW1lKVxuICAgIC8vIElzc3VlICM4NDM6IGFjdGl2YXRlUGVyc29uYSgpIGlzIG5vdyBhc3luYyDigJQgdXNlcyBkaXNrIGZhbGxiYWNrIGZvciBjYWNoZSBtaXNzZXNcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ3BlcnNvbmEnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGFjdGl2YXRpb24uZmlsZW5hbWUgfHwgYWN0aXZhdGlvbi5uYW1lO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJzb25hTWFuYWdlci5hY3RpdmF0ZVBlcnNvbmEoaWRlbnRpZmllcik7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBwZXJzb25hICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdwZXJzb25hJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIHBlcnNvbmEgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdwZXJzb25hJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBza2lsbHNcbiAgICAvLyBOT1RFOiBhY3RpdmF0ZVNraWxsKCkgcmV0dXJucyB7c3VjY2VzcywgbWVzc2FnZX0g4oCUIGl0IG5ldmVyIHRocm93cyBvbiBub3QtZm91bmQuXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdza2lsbCcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBza2lsbE1hbmFnZXIuYWN0aXZhdGVTa2lsbChhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3Npbmcgc2tpbGwgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3NraWxsJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIHNraWxsICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignc2tpbGwnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGFnZW50c1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnYWdlbnQnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWdlbnRNYW5hZ2VyLmFjdGl2YXRlQWdlbnQoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIGFnZW50ICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdhZ2VudCcsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBhZ2VudCAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2FnZW50JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBtZW1vcmllcyAoZGVkdXAgYWdhaW5zdCBhdXRvLWxvYWRlZCBvbmVzKVxuICAgIGNvbnN0IGFjdGl2ZU1lbW9yaWVzID0gYXdhaXQgbWVtb3J5TWFuYWdlci5nZXRBY3RpdmVNZW1vcmllcygpO1xuICAgIGNvbnN0IGFjdGl2ZU1lbW9yeU5hbWVzID0gbmV3IFNldChhY3RpdmVNZW1vcmllcy5tYXAobSA9PiBtLm1ldGFkYXRhLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ21lbW9yeScpKSB7XG4gICAgICBpZiAoYWN0aXZlTWVtb3J5TmFtZXMuaGFzKGFjdGl2YXRpb24ubmFtZSkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBNZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfScgYWxyZWFkeSBhY3RpdmUgKGF1dG8tbG9hZGVkKSwgc2tpcHBpbmdgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtZW1vcnlNYW5hZ2VyLmFjdGl2YXRlTWVtb3J5KGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBtZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ21lbW9yeScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBtZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdtZW1vcnknLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGVuc2VtYmxlc1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnZW5zZW1ibGUnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zZW1ibGVNYW5hZ2VyLmFjdGl2YXRlRW5zZW1ibGUoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIGVuc2VtYmxlICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdlbnNlbWJsZScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBlbnNlbWJsZSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2Vuc2VtYmxlJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3RvcmVkQ291bnQgPiAwIHx8IHNraXBwZWRDb3VudCA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgW0FjdGl2YXRpb25TdG9yZV0gUmVzdG9yZWQgJHtyZXN0b3JlZENvdW50fSBlbGVtZW50KHMpLCBza2lwcGVkICR7c2tpcHBlZENvdW50fSBzdGFsZSBmb3Igc2Vzc2lvbiAnJHtzdG9yZS5nZXRTZXNzaW9uSWQoKX0nYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIGFsbCBoYW5kbGVycyB3aXRob3V0IHJlZ2lzdGVyaW5nIE1DUCB0b29scy5cbiAgICogVXNlZCBieSB3ZWItb25seSBtb2RlICgtLXdlYikgdG8gZ2V0IE1DUEFRTEhhbmRsZXIgd2l0aG91dCBhbiBNQ1AgU2VydmVyLlxuICAgKiBJc3N1ZSAjNzk2OiBTcGxpdCBESSBjb250YWluZXIgYm9vdHN0cmFwIGZyb20gdHJhbnNwb3J0IGNvbm5lY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYm9vdHN0cmFwSGFuZGxlcnMoKTogUHJvbWlzZTxIYW5kbGVyQnVuZGxlPiB7XG4gICAgaWYgKCF0aGlzLnBlcnNvbmFzRGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQZXJzb25hIGRpcmVjdG9yeSBub3QgaW5pdGlhbGl6ZWQuIENhbGwgcHJlcGFyZVBvcnRmb2xpbygpIGZpcnN0LlwiKTtcbiAgICB9XG5cbiAgICBQYXRoVmFsaWRhdG9yLmluaXRpYWxpemUodGhpcy5wZXJzb25hc0Rpcik7XG5cbiAgICBjb25zdCBpbmRpY2F0b3JTZXJ2aWNlID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlPignUGVyc29uYUluZGljYXRvclNlcnZpY2UnKTtcbiAgICBjb25zdCBwZXJzb25hTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQZXJzb25hTWFuYWdlcj4oJ1BlcnNvbmFNYW5hZ2VyJyk7XG4gICAgY29uc3QgaW5pdFNlcnZpY2UgPSB0aGlzLnJlc29sdmU8SW5pdGlhbGl6YXRpb25TZXJ2aWNlPignSW5pdGlhbGl6YXRpb25TZXJ2aWNlJyk7XG4gICAgY29uc3QgcGVyc29uYUV4cG9ydGVyID0gbmV3IFBlcnNvbmFFeHBvcnRlcigoKSA9PiBwZXJzb25hTWFuYWdlci5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCkpO1xuICAgIGNvbnN0IHBlcnNvbmFJbXBvcnRlciA9IG5ldyBQZXJzb25hSW1wb3J0ZXIodGhpcy5wZXJzb25hc0RpciwgKCkgPT4gcGVyc29uYU1hbmFnZXIuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpKTtcblxuICAgIC8vIENyZWF0ZSBzdGF0ZSBhY2Nlc3NvciBmb3IgUGVyc29uYUhhbmRsZXJcbiAgICBjb25zdCBhY3RpdmVQZXJzb25hQWNjZXNzb3IgPSB7XG4gICAgICBnZXQ6ICgpID0+IHBlcnNvbmFNYW5hZ2VyLmdldEFjdGl2ZVBlcnNvbmEoKT8uZmlsZW5hbWUgfHwgbnVsbCxcbiAgICAgIHNldDogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIC8vIElzc3VlICM4NDM6IGFjdGl2YXRlUGVyc29uYSBpcyBub3cgYXN5bmMgYnV0IHRoaXMgc2V0dGVyIGlzIHN5bmNocm9ub3VzLlxuICAgICAgICAgIC8vIEZpcmUtYW5kLWZvcmdldCDigJQgUGVyc29uYUhhbmRsZXIgZG9lcyBpdHMgb3duIGxvb2t1cCBiZWZvcmUgY2FsbGluZyBzZXQoKS5cbiAgICAgICAgICAvLyBMb2cgYXQgZXJyb3IgbGV2ZWwgc2luY2UgYWN0aXZhdGlvbiBmYWlsdXJlcyBoZXJlIGluZGljYXRlIHN0YWxlIHN0YXRlLlxuICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyLmFjdGl2YXRlUGVyc29uYSh2YWx1ZSkuY2F0Y2goZXJyID0+XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFtDb250YWluZXJdIFBlcnNvbmEgYWN0aXZhdGlvbiBmYWlsZWQgZm9yIFwiJHt2YWx1ZX1cIiDigJQgc3RhdGUgYWNjZXNzb3IgbWF5IGJlIHN0YWxlOmAsIGVycilcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyLmRlYWN0aXZhdGVQZXJzb25hKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcGVyc29uYUhhbmRsZXIgPSBuZXcgUGVyc29uYUhhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIHBlcnNvbmFFeHBvcnRlcixcbiAgICAgIHBlcnNvbmFJbXBvcnRlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIGFjdGl2ZVBlcnNvbmFBY2Nlc3NvclxuICAgICk7XG5cbiAgICBhd2FpdCBwZXJzb25hTWFuYWdlci5yZWxvYWQoKTtcblxuICAgIGNvbnN0IGVsZW1lbnRDcnVkSGFuZGxlciA9IG5ldyBFbGVtZW50Q1JVREhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1NraWxsTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUZW1wbGF0ZU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVSZW5kZXJlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBZ2VudE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbnNlbWJsZU1hbmFnZXInKSxcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2UsXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbGVtZW50UXVlcnlTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBY3RpdmF0aW9uU3RvcmUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb2xpY3lFeHBvcnRTZXJ2aWNlJylcbiAgICApO1xuICAgIC8vIFJlZ2lzdGVyIGZvciBsYXp5IHJlc29sdXRpb24gYnkgUG9saWN5RXhwb3J0U2VydmljZVxuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRDUlVESGFuZGxlcicsICgpID0+IGVsZW1lbnRDcnVkSGFuZGxlcik7XG5cbiAgICAvLyBNQ1BBUUxIYW5kbGVyIGNyZWF0ZWQgbGF0ZXIgYWZ0ZXIgYWxsIGhhbmRsZXJzIGFyZSBpbnN0YW50aWF0ZWRcbiAgICAvLyBTZWUgYmVsb3cgYWZ0ZXIgZW5oYW5jZWRJbmRleEhhbmRsZXIgY3JlYXRpb25cblxuICAgIGNvbnN0IGNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uQnJvd3NlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uU2VhcmNoJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFEZXRhaWxzJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRJbnN0YWxsZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLCAvLyBVc2UgdGhlIHJlc29sdmVkIFBlcnNvbmFNYW5hZ2VyXG4gICAgICB0aGlzLnJlc29sdmUoJ1N1Ym1pdFRvUG9ydGZvbGlvVG9vbCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0luaXRpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICk7XG5cbiAgICBjb25zdCBwb3J0Zm9saW9IYW5kbGVyID0gbmV3IFBvcnRmb2xpb0hhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUHVsbEhhbmRsZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1VuaWZpZWRJbmRleE1hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJylcbiAgICApO1xuXG4gICAgY29uc3QgZ2l0aHViQXV0aEhhbmRsZXIgPSBuZXcgR2l0SHViQXV0aEhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApO1xuXG4gICAgY29uc3QgZGlzcGxheUNvbmZpZ0hhbmRsZXIgPSBuZXcgRGlzcGxheUNvbmZpZ0hhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICBjb25zdCBpZGVudGl0eUhhbmRsZXIgPSBuZXcgSWRlbnRpdHlIYW5kbGVyKFxuICAgICAgcGVyc29uYU1hbmFnZXIsXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuXG4gICAgY29uc3QgY29uZmlnSGFuZGxlciA9IG5ldyBDb25maWdIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuICAgIGNvbnN0IHN5bmNIYW5kbGVyID0gbmV3IFN5bmNIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9TeW5jTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIGNvbnN0IGVuaGFuY2VkSW5kZXhIYW5kbGVyID0gbmV3IEVuaGFuY2VkSW5kZXhIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbmhhbmNlZEluZGV4TWFuYWdlcicpLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICAvLyBJc3N1ZSAjNDUyOiBDcmVhdGUgR2F0ZWtlZXBlciBwb2xpY3kgZW5naW5lIGluc3RhbmNlXG4gICAgLy8gSXNzdWUgIzY3OTogYWxsb3dFbGVtZW50UG9saWN5T3ZlcnJpZGVzIHdpcmVkIGZyb20gZW52IChET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVMpXG4gICAgY29uc3QgZ2F0ZWtlZXBlciA9IG5ldyBHYXRla2VlcGVyKHVuZGVmaW5lZCwge1xuICAgICAgZW5hYmxlQXVkaXRMb2dnaW5nOiB0cnVlLFxuICAgICAgcmVxdWlyZURhbmdlclpvbmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICBhbGxvd0VsZW1lbnRQb2xpY3lPdmVycmlkZXM6IGVudi5ET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVMsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgTUNQQVFMSGFuZGxlciB3aXRoIGFsbCBhdmFpbGFibGUgaGFuZGxlcnMgZm9yIGZ1bGwgb3BlcmF0aW9uIGNvdmVyYWdlIChJc3N1ZSAjMjQxKVxuICAgIC8vIElzc3VlICMzMDE6IFBhc3MgQ29udGV4dFRyYWNrZXIgZm9yIHJlcXVlc3QgY29ycmVsYXRpb24gbWV0YWRhdGFcbiAgICAvLyBJc3N1ZSAjNDAyOiBQYXNzIERhbmdlclpvbmVFbmZvcmNlciB2aWEgSGFuZGxlclJlZ2lzdHJ5XG4gICAgLy8gQnVpbGQgaGFuZGxlciByZWdpc3RyeSwgdGhlbiBhZGQgbGF6eSBtZXRyaWNzU2luayBnZXR0ZXIuXG4gICAgLy8gTWVtb3J5TWV0cmljc1NpbmsgaXMgcmVnaXN0ZXJlZCBkdXJpbmcgZGVmZXJyZWRTZXR1cCAoYWZ0ZXIgTWV0cmljc01hbmFnZXIuc3RhcnQoKSksXG4gICAgLy8gc28gaXQgaXNuJ3QgYXZhaWxhYmxlIGF0IGhhbmRsZXIgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlc29sdmUgb24gZmlyc3QgYWNjZXNzIGluc3RlYWQuXG4gICAgY29uc3QgaGFuZGxlckRlcHM6IEhhbmRsZXJSZWdpc3RyeSA9IHtcbiAgICAgIGVsZW1lbnRDUlVEOiBlbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBtZW1vcnlNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSxcbiAgICAgIGFnZW50TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdBZ2VudE1hbmFnZXInKSxcbiAgICAgIHRlbXBsYXRlUmVuZGVyZXI6IHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVSZW5kZXJlcicpLFxuICAgICAgZWxlbWVudFF1ZXJ5U2VydmljZTogdGhpcy5yZXNvbHZlKCdFbGVtZW50UXVlcnlTZXJ2aWNlJyksXG4gICAgICAvLyBNQ1AtQVFMIGV4dGVuc2lvbiBoYW5kbGVycyAoSXNzdWUgIzI0MSlcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyLFxuICAgICAgcG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGF1dGhIYW5kbGVyOiBnaXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGNvbmZpZ0hhbmRsZXIsXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgIHBlcnNvbmFIYW5kbGVyLFxuICAgICAgc3luY0hhbmRsZXIsXG4gICAgICBidWlsZEluZm9TZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0J1aWxkSW5mb1NlcnZpY2UnKSxcbiAgICAgIGNhY2hlTWVtb3J5QnVkZ2V0OiB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICBnYXRla2VlcGVyLCAgLy8gSXNzdWUgIzQ1MjogUG9saWN5IGVuZ2luZSBmb3IgZW5mb3JjZSgpXG4gICAgICBkYW5nZXJab25lRW5mb3JjZXI6IHRoaXMucmVzb2x2ZSgnRGFuZ2VyWm9uZUVuZm9yY2VyJyksXG4gICAgICB2ZXJpZmljYXRpb25TdG9yZTogdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25TdG9yZScpLCAgLy8gSXNzdWUgIzE0MjogVmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgICB2ZXJpZmljYXRpb25Ob3RpZmllcjogdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25Ob3RpZmllcicpLCAgLy8gSXNzdWUgIzUyMjogT1MgZGlhbG9nIGZvciBjb2Rlc1xuICAgICAgbWVtb3J5U2luazogdGhpcy5yZXNvbHZlPE1lbW9yeUxvZ1Npbms+KCdNZW1vcnlMb2dTaW5rJyksICAvLyBJc3N1ZSAjNTI4OiBDUlVERS1yb3V0ZWQgcXVlcnlfbG9nc1xuICAgICAgcGVyZm9ybWFuY2VNb25pdG9yOiB0aGlzLnJlc29sdmU8UGVyZm9ybWFuY2VNb25pdG9yPignUGVyZm9ybWFuY2VNb25pdG9yJyksXG4gICAgICBvcGVyYXRpb25NZXRyaWNzVHJhY2tlcjogdGhpcy5yZXNvbHZlPE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyPignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInKSxcbiAgICAgIGdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcjogdGhpcy5yZXNvbHZlPEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcj4oJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicpLFxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGhhbmRsZXJEZXBzLCAnbWV0cmljc1NpbmsnLCB7XG4gICAgICBnZXQ6ICgpID0+IHsgdHJ5IHsgcmV0dXJuIHRoaXMucmVzb2x2ZTxNZW1vcnlNZXRyaWNzU2luaz4oJ01lbW9yeU1ldHJpY3NTaW5rJyk7IH0gY2F0Y2ggeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IG1jcEFxbEhhbmRsZXIgPSBuZXcgTUNQQVFMSGFuZGxlcihoYW5kbGVyRGVwcywgdGhpcy5yZXNvbHZlPENvbnRleHRUcmFja2VyPignQ29udGV4dFRyYWNrZXInKSk7XG5cbiAgICAvLyBSZWdpc3RlciBtY3BBcWxIYW5kbGVyIGFzIGEgc2luZ2xldG9uIGZvciB0ZXN0IGFjY2Vzc1xuICAgIHRoaXMucmVnaXN0ZXIoJ21jcEFxbEhhbmRsZXInLCAoKSA9PiBtY3BBcWxIYW5kbGVyLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdnYXRla2VlcGVyJywgKCkgPT4gZ2F0ZWtlZXBlciwgeyBzaW5nbGV0b246IHRydWUgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGVyc29uYUhhbmRsZXIsXG4gICAgICBlbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcixcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXIsXG4gICAgICBnaXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGRpc3BsYXlDb25maWdIYW5kbGVyLFxuICAgICAgaWRlbnRpdHlIYW5kbGVyLFxuICAgICAgY29uZmlnSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyLFxuICAgICAgdG9vbFJlZ2lzdHJ5OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUb29sUmVnaXN0cnksIC8vIE5vIHRvb2wgcmVnaXN0cnkgaW4gYm9vdHN0cmFwLW9ubHkgbW9kZVxuICAgICAgZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBoYW5kbGVycyB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFuZCByZWdpc3RlciBNQ1AgdG9vbHMuXG4gICAqIEBwYXJhbSBzZXJ2ZXIgLSBNQ1AgU2VydmVyIGluc3RhbmNlIGZvciB0b29sIHJlZ2lzdHJhdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUhhbmRsZXJzKHNlcnZlcjogU2VydmVyKTogUHJvbWlzZTxIYW5kbGVyQnVuZGxlPiB7XG4gICAgY29uc3QgYnVuZGxlID0gYXdhaXQgdGhpcy5ib290c3RyYXBIYW5kbGVycygpO1xuXG4gICAgY29uc3QgdG9vbFJlZ2lzdHJ5ID0gbmV3IFRvb2xSZWdpc3RyeShzZXJ2ZXIpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdG9vbHMgYmFzZWQgb24gTUNQX0lOVEVSRkFDRV9NT0RFIChJc3N1ZSAjMjM3KVxuICAgIC8vIC0gJ2Rpc2NyZXRlJzogUmVnaXN0ZXIgaW5kaXZpZHVhbCBkaXNjcmV0ZSB0b29scyAofjQwIHRvb2xzKVxuICAgIC8vIC0gJ21jcGFxbCc6IFJlZ2lzdGVyIGNvbnNvbGlkYXRlZCBNQ1AtQVFMIGludGVyZmFjZSBvbmx5ICh+NCBvciAxIHRvb2xzKVxuICAgIC8vIFRva2VuIGNvdW50cyBhcmUgbG9nZ2VkIGR5bmFtaWNhbGx5IGF0IHN0YXJ0dXAgdmlhIGxvZ1Rvb2xUb2tlblN0YXRzKClcbiAgICBjb25zdCBpbnRlcmZhY2VNb2RlID0gZW52Lk1DUF9JTlRFUkZBQ0VfTU9ERTtcbiAgICBsb2dnZXIuaW5mbyhgTUNQIEludGVyZmFjZSBNb2RlOiAke2ludGVyZmFjZU1vZGV9YCk7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ2Rpc2NyZXRlJykge1xuICAgICAgLy8gRGlzY3JldGUgbW9kZTogUmVnaXN0ZXIgYWxsIGluZGl2aWR1YWwgdG9vbHNcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlclBlcnNvbmFUb29scyhidW5kbGUucGVyc29uYUhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyRWxlbWVudFRvb2xzKGJ1bmRsZS5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQ29sbGVjdGlvblRvb2xzKGJ1bmRsZS5jb2xsZWN0aW9uSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJQb3J0Zm9saW9Ub29scyhidW5kbGUucG9ydGZvbGlvSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJBdXRoVG9vbHMoYnVuZGxlLmdpdGh1YkF1dGhIYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckNvbmZpZ1Rvb2xzKHtcbiAgICAgICAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBidW5kbGUuY29uZmlnSGFuZGxlci5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICAgIGhhbmRsZVN5bmNPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGJ1bmRsZS5zeW5jSGFuZGxlci5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJFbmhhbmNlZEluZGV4VG9vbHMoXG4gICAgICAgIGJ1bmRsZS5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgICAgdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpLmdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQnVpbGRJbmZvVG9vbHModGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNQ1AtQVFMIG1vZGU6IFJlZ2lzdGVyIG9ubHkgTUNQLUFRTCB0b29sc1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyTUNQQVFMVG9vbHMoYnVuZGxlLm1jcEFxbEhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIExvZyB0b2tlbiBzdGF0aXN0aWNzIChJc3N1ZSAjMjM3IGVuaGFuY2VtZW50KVxuICAgIHRoaXMubG9nVG9vbFRva2VuU3RhdHModG9vbFJlZ2lzdHJ5LCBpbnRlcmZhY2VNb2RlLCBidW5kbGUubWNwQXFsSGFuZGxlciwge1xuICAgICAgcGVyc29uYUhhbmRsZXI6IGJ1bmRsZS5wZXJzb25hSGFuZGxlcixcbiAgICAgIGVsZW1lbnRDcnVkSGFuZGxlcjogYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcixcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyOiBidW5kbGUuY29sbGVjdGlvbkhhbmRsZXIsXG4gICAgICBwb3J0Zm9saW9IYW5kbGVyOiBidW5kbGUucG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGdpdGh1YkF1dGhIYW5kbGVyOiBidW5kbGUuZ2l0aHViQXV0aEhhbmRsZXIsXG4gICAgICBjb25maWdIYW5kbGVyOiBidW5kbGUuY29uZmlnSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyOiBidW5kbGUuc3luY0hhbmRsZXIsXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcjogYnVuZGxlLmVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvbHZlPFNlcnZlclNldHVwPignU2VydmVyU2V0dXAnKS5zZXR1cFNlcnZlcihzZXJ2ZXIsIHRvb2xSZWdpc3RyeSwgYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYnVuZGxlLFxuICAgICAgdG9vbFJlZ2lzdHJ5LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTG9nIHRvb2wgdG9rZW4gc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZyBhbmQgZG9jdW1lbnRhdGlvbi5cbiAgICogU2hvd3MgY3VycmVudCBtb2RlIHRva2VuIGNvdW50LCBhbHRlcm5hdGl2ZSBtb2RlIGNvbXBhcmlzb24sIGFuZCBzYXZpbmdzLlxuICAgKlxuICAgKiBUaGlzIGlzIGltcG9ydGFudCBmb3I6XG4gICAqIDEuIERvY3VtZW50aW5nIGFjdHVhbCB0b2tlbiBzYXZpbmdzIGFjaGlldmVkXG4gICAqIDIuIE1vbml0b3JpbmcgY29udGV4dCB3aW5kb3cgdXNhZ2VcbiAgICogMy4gU3VwcG9ydGluZyBmdXR1cmUgTUNQLUFRTCBhZGFwdGVyIGRldmVsb3BtZW50XG4gICAqXG4gICAqIElzc3VlICMyMzcgZW5oYW5jZW1lbnRcbiAgICovXG4gIHByaXZhdGUgbG9nVG9vbFRva2VuU3RhdHMoXG4gICAgdG9vbFJlZ2lzdHJ5OiBUb29sUmVnaXN0cnksXG4gICAgaW50ZXJmYWNlTW9kZTogJ2Rpc2NyZXRlJyB8ICdtY3BhcWwnLFxuICAgIG1jcEFxbEhhbmRsZXI6IE1DUEFRTEhhbmRsZXIsXG4gICAgZGlzY3JldGVIYW5kbGVyczoge1xuICAgICAgcGVyc29uYUhhbmRsZXI6IFBlcnNvbmFIYW5kbGVyO1xuICAgICAgZWxlbWVudENydWRIYW5kbGVyOiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG4gICAgICBwb3J0Zm9saW9IYW5kbGVyOiBQb3J0Zm9saW9IYW5kbGVyO1xuICAgICAgZ2l0aHViQXV0aEhhbmRsZXI6IEdpdEh1YkF1dGhIYW5kbGVyO1xuICAgICAgY29uZmlnSGFuZGxlcjogQ29uZmlnSGFuZGxlcjtcbiAgICAgIHN5bmNIYW5kbGVyOiBTeW5jSGFuZGxlcjtcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyOiBFbmhhbmNlZEluZGV4SGFuZGxlcjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUb2tlbnMgPSB0b29sUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICBjb25zdCBjdXJyZW50VG9vbENvdW50ID0gdG9vbFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFsdGVybmF0aXZlIG1vZGUgdG9rZW5zIGZvciBjb21wYXJpc29uXG4gICAgbGV0IGFsdGVybmF0aXZlVG9rZW5zOiBudW1iZXI7XG4gICAgbGV0IGFsdGVybmF0aXZlVG9vbENvdW50OiBudW1iZXI7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ2Rpc2NyZXRlJykge1xuICAgICAgLy8gQ3VycmVudCBpcyBkaXNjcmV0ZSwgY2FsY3VsYXRlIHdoYXQgbWNwYXFsIHdvdWxkIGJlXG4gICAgICBjb25zdCB0ZW1wUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHt9IGFzIFNlcnZlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJNQ1BBUUxUb29scyhtY3BBcWxIYW5kbGVyKTtcbiAgICAgIGFsdGVybmF0aXZlVG9rZW5zID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xUb2tlbkVzdGltYXRlKCk7XG4gICAgICBhbHRlcm5hdGl2ZVRvb2xDb3VudCA9IHRlbXBSZWdpc3RyeS5nZXRUb29sQ291bnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3VycmVudCBpcyBtY3BhcWwsIGNhbGN1bGF0ZSB3aGF0IGRpc2NyZXRlIHdvdWxkIGJlXG4gICAgICBjb25zdCB0ZW1wUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHt9IGFzIFNlcnZlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJQZXJzb25hVG9vbHMoZGlzY3JldGVIYW5kbGVycy5wZXJzb25hSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJFbGVtZW50VG9vbHMoZGlzY3JldGVIYW5kbGVycy5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29sbGVjdGlvblRvb2xzKGRpc2NyZXRlSGFuZGxlcnMuY29sbGVjdGlvbkhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyUG9ydGZvbGlvVG9vbHMoZGlzY3JldGVIYW5kbGVycy5wb3J0Zm9saW9IYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckF1dGhUb29scyhkaXNjcmV0ZUhhbmRsZXJzLmdpdGh1YkF1dGhIYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckNvbmZpZ1Rvb2xzKHtcbiAgICAgICAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLmNvbmZpZ0hhbmRsZXIuaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgICBoYW5kbGVTeW5jT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLnN5bmNIYW5kbGVyLmhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckVuaGFuY2VkSW5kZXhUb29scyhcbiAgICAgICAgZGlzY3JldGVIYW5kbGVycy5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgICAgdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpLmdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQnVpbGRJbmZvVG9vbHModGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJykpO1xuICAgICAgYWx0ZXJuYXRpdmVUb2tlbnMgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICAgIGFsdGVybmF0aXZlVG9vbENvdW50ID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBzYXZpbmdzIChwb3NpdGl2ZSA9IGN1cnJlbnQgbW9kZSBzYXZlcyB0b2tlbnMpXG4gICAgY29uc3QgdG9rZW5EaWZmID0gYWx0ZXJuYXRpdmVUb2tlbnMgLSBjdXJyZW50VG9rZW5zO1xuICAgIGNvbnN0IHNhdmluZ3NQZXJjZW50ID0gYWx0ZXJuYXRpdmVUb2tlbnMgPiAwXG4gICAgICA/ICgodG9rZW5EaWZmIC8gYWx0ZXJuYXRpdmVUb2tlbnMpICogMTAwKS50b0ZpeGVkKDEpXG4gICAgICA6ICcwJztcblxuICAgIC8vIExvZyB0aGUgY29tcGFyaXNvblxuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFRvb2wgUmVnaXN0cmF0aW9uIENvbXBsZXRlOiAke2N1cnJlbnRUb29sQ291bnR9IHRvb2xzLCB+JHtjdXJyZW50VG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2Vuc2BcbiAgICApO1xuXG4gICAgaWYgKGludGVyZmFjZU1vZGUgPT09ICdtY3BhcWwnKSB7XG4gICAgICAvLyBIaWdobGlnaHQgc2F2aW5ncyB3aGVuIHVzaW5nIG1jcGFxbFxuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBUb2tlbiBTYXZpbmdzOiAke3Rva2VuRGlmZi50b0xvY2FsZVN0cmluZygpfSB0b2tlbnMgc2F2ZWQgKCR7c2F2aW5nc1BlcmNlbnR9JSkgdnMgZGlzY3JldGUgbW9kZSAoJHthbHRlcm5hdGl2ZVRvb2xDb3VudH0gdG9vbHMsIH4ke2FsdGVybmF0aXZlVG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2VucylgXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBkaXNjcmV0ZSBtb2RlLCBzaG93IHdoYXQgbWNwYXFsIHdvdWxkIHNhdmVcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQWx0ZXJuYXRpdmU6IG1jcGFxbCBtb2RlIHdvdWxkIHVzZSAke2FsdGVybmF0aXZlVG9vbENvdW50fSB0b29scywgfiR7YWx0ZXJuYXRpdmVUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zICgke01hdGguYWJzKE51bWJlcihzYXZpbmdzUGVyY2VudCkpfSUgJHt0b2tlbkRpZmYgPCAwID8gJ21vcmUnIDogJ2xlc3MnfSlgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXJlIGFsbCBtZXRyaWMgY29sbGVjdG9ycyBpbnRvIHRoZSBNZXRyaWNzTWFuYWdlci5cbiAgICogTWlycm9ycyB3aXJlTG9nSG9va3MoKSDigJQga2VlcHMgY29sbGVjdG9yIHJlZ2lzdHJhdGlvbiBvdXQgb2YgdGhlIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlTWV0cmljc0NvbGxlY3RvcnMobWV0cmljc01hbmFnZXI6IE1ldHJpY3NNYW5hZ2VyKTogdm9pZCB7XG4gICAgLy8gUGVyZm9ybWFuY2VNb25pdG9yIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9uaXRvciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3V0aWxzL1BlcmZvcm1hbmNlTW9uaXRvci5qcycpLlBlcmZvcm1hbmNlTW9uaXRvcj4oJ1BlcmZvcm1hbmNlTW9uaXRvcicpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IFBlcmZvcm1hbmNlTW9uaXRvckNvbGxlY3Rvcihtb25pdG9yKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIExSVUNhY2hlIGluc3RhbmNlcyDigJQgQVBJIGNhY2hlICsgYWxsIGVsZW1lbnQgbWFuYWdlciBjYWNoZXNcbiAgICBjb25zdCBjYWNoZXMgPSB0aGlzLmNvbGxlY3RMcnVDYWNoZXNGb3JNZXRyaWNzKCk7XG4gICAgaWYgKGNhY2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgTFJVQ2FjaGVDb2xsZWN0b3IoY2FjaGVzKSk7XG4gICAgfVxuXG4gICAgLy8gU2VjdXJpdHlNb25pdG9yIChzdGF0aWMpXG4gICAgdHJ5IHtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IoKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgLy8gU2VjdXJpdHlUZWxlbWV0cnkgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnkgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnKS5TZWN1cml0eVRlbGVtZXRyeT4oJ1NlY3VyaXR5VGVsZW1ldHJ5Jyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgU2VjdXJpdHlUZWxlbWV0cnlDb2xsZWN0b3IodGVsZW1ldHJ5KSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIEZpbGVMb2NrTWFuYWdlciAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2tNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJykuRmlsZUxvY2tNYW5hZ2VyPignRmlsZUxvY2tNYW5hZ2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgRmlsZUxvY2tNYW5hZ2VyQ29sbGVjdG9yKGxvY2tNYW5hZ2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIERlZmF1bHRFbGVtZW50UHJvdmlkZXIgKHN0YXRpYylcbiAgICB0cnkge1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IERlZmF1bHRFbGVtZW50UHJvdmlkZXJDb2xsZWN0b3IoKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgLy8gVHJpZ2dlck1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSDigJQgY3JlYXRlZCBpbnNpZGUgRW5oYW5jZWRJbmRleE1hbmFnZXIgZmFjdG9yeSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5oYW5jZWRJbmRleCA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qcycpLkVuaGFuY2VkSW5kZXhNYW5hZ2VyPignRW5oYW5jZWRJbmRleE1hbmFnZXInKTtcbiAgICAgIC8vIEVuaGFuY2VkSW5kZXhNYW5hZ2VyIGV4cG9zZXMgdHJhY2tlciB2aWEgcHVibGljIGdldHRlciBpZiBhdmFpbGFibGVcbiAgICAgIGlmICgndHJpZ2dlck1ldHJpY3NUcmFja2VyJyBpbiBlbmhhbmNlZEluZGV4KSB7XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSAoZW5oYW5jZWRJbmRleCBhcyBhbnkpLnRyaWdnZXJNZXRyaWNzVHJhY2tlcjtcbiAgICAgICAgaWYgKHRyYWNrZXIpIHtcbiAgICAgICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgVHJpZ2dlck1ldHJpY3NUcmFja2VyQ29sbGVjdG9yKHRyYWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBPcGVyYXRpb25hbFRlbGVtZXRyeSAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9wVGVsZW1ldHJ5ID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzJykuT3BlcmF0aW9uYWxUZWxlbWV0cnk+KCdPcGVyYXRpb25hbFRlbGVtZXRyeScpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yKG9wVGVsZW1ldHJ5KSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3BUcmFja2VyID0gdGhpcy5yZXNvbHZlPE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyPignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBPcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yKG9wVHJhY2tlcikpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBna1RyYWNrZXIgPSB0aGlzLnJlc29sdmU8R2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyPignR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgR2F0ZWtlZXBlck1ldHJpY3NDb2xsZWN0b3IoZ2tUcmFja2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdExydUNhY2hlc0Zvck1ldHJpY3MoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuTFJVQ2FjaGU8dW5rbm93bj4gfT4ge1xuICAgIGNvbnN0IGNhY2hlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuTFJVQ2FjaGU8dW5rbm93bj4gfT4gPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBpQ2FjaGUgPSB0aGlzLnJlc29sdmU8eyBnZXRTdGF0cygpOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuQ2FjaGVTdGF0cyB9PignQVBJQ2FjaGUnKTtcbiAgICAgIGNhY2hlcy5wdXNoKHsgbmFtZTogJ0FQSUNhY2hlJywgaW5zdGFuY2U6IGFwaUNhY2hlIGFzIGFueSB9KTtcbiAgICB9IGNhdGNoIHsgLyogbm90IGF2YWlsYWJsZSAqLyB9XG5cbiAgICBjb25zdCBtYW5hZ2VyTmFtZXMgPSBbXG4gICAgICAnUGVyc29uYU1hbmFnZXInLCAnU2tpbGxNYW5hZ2VyJywgJ0FnZW50TWFuYWdlcicsXG4gICAgICAnTWVtb3J5TWFuYWdlcicsICdFbnNlbWJsZU1hbmFnZXInLCAnVGVtcGxhdGVNYW5hZ2VyJyxcbiAgICBdIGFzIGNvbnN0O1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBtYW5hZ2VyTmFtZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1nciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL2VsZW1lbnRzL2Jhc2UvQmFzZUVsZW1lbnRNYW5hZ2VyLmpzJykuQmFzZUVsZW1lbnRNYW5hZ2VyPGFueT4+KG5hbWUpO1xuICAgICAgICBjYWNoZXMucHVzaCguLi5tZ3IuZ2V0TWV0cmljc0NhY2hlcygpKTtcbiAgICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENsb3NlIE1ldHJpY3NNYW5hZ2VyIGJlZm9yZSBnZW5lcmFsIGRpc3Bvc2FsIChmbHVzaCBmaW5hbCBzbmFwc2hvdClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgYXdhaXQgbWV0cmljc01hbmFnZXIuY2xvc2UoKTtcbiAgICB9IGNhdGNoIHsgLyogbWV0cmljcyBub3QgZW5hYmxlZCBvciBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBDbGVhbiB1cCBsb2cgaG9va3MgYmVmb3JlIGRpc3Bvc2luZyBzZXJ2aWNlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGVhbnVwcyA9IHRoaXMucmVzb2x2ZTwoKCkgPT4gdm9pZClbXT4oJ19sb2dIb29rQ2xlYW51cHMnKTtcbiAgICAgIGNsZWFudXBzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgfSBjYXRjaCB7IC8qIGhvb2tzIG5vdCB5ZXQgd2lyZWQgKi8gfVxuXG4gICAgY29uc3QgZGlzcG9zYWxQcm9taXNlcyA9IHRoaXMuYnVpbGREaXNwb3NhbFByb21pc2VzKCk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChkaXNwb3NhbFByb21pc2VzLm1hcChkID0+IGQucHJvbWlzZSkpO1xuICAgIHRoaXMucmVwb3J0RGlzcG9zYWxGYWlsdXJlcyhkaXNwb3NhbFByb21pc2VzLCByZXN1bHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREaXNwb3NhbFByb21pc2VzKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IH0+IHtcbiAgICBjb25zdCBwcm9taXNlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzZXJ2aWNlXSBvZiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICBpZiAoIXNlcnZpY2UuaW5zdGFuY2UpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBzZXJ2aWNlLmluc3RhbmNlIGFzIGFueTtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHsgbmFtZSwgcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBpbnN0YW5jZS5kaXNwb3NlKCkpIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHsgbmFtZSwgcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBpbnN0YW5jZS5jbGVhbnVwKCkpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydERpc3Bvc2FsRmFpbHVyZXMoXG4gICAgZGlzcG9zYWxQcm9taXNlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4sXG4gICAgcmVzdWx0czogUHJvbWlzZVNldHRsZWRSZXN1bHQ8dm9pZD5bXSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHJlc3VsdF0gb2YgcmVzdWx0cy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gZGlzcG9zYWxQcm9taXNlc1tpbmRleF0ubmFtZTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHQucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHQucmVhc29uKSk7XG4gICAgICAgIGZhaWx1cmVzLnB1c2goc2VydmljZU5hbWUpO1xuICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRpc3Bvc2Ugc2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nYCwgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDb250YWluZXIgZGlzcG9zYWwgY29tcGxldGVkIHdpdGggJHtmYWlsdXJlcy5sZW5ndGh9IGZhaWx1cmUocykgb3V0IG9mICR7ZGlzcG9zYWxQcm9taXNlcy5sZW5ndGh9IHNlcnZpY2VzYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSB0aGlzLnJlc29sdmU8Q29sbGVjdGlvbkNhY2hlPignQ29sbGVjdGlvbkNhY2hlJyk7XG4gICAgICBjb25zdCBpc0NhY2hlVmFsaWQgPSBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuaXNDYWNoZVZhbGlkKCk7XG4gICAgICBpZiAoIWlzQ2FjaGVWYWxpZCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIkluaXRpYWxpemluZyBjb2xsZWN0aW9uIGNhY2hlIHdpdGggc2VlZCBkYXRhLi4uXCIpO1xuICAgICAgICBjb25zdCB7IENvbGxlY3Rpb25TZWVkZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2NvbGxlY3Rpb24vQ29sbGVjdGlvblNlZWRlci5qc1wiKTtcbiAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgICAgIGF3YWl0IGNvbGxlY3Rpb25DYWNoZS5zYXZlQ2FjaGUoc2VlZERhdGEpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgQ29sbGVjdGlvbiBjYWNoZSBpbml0aWFsaXplZCB3aXRoICR7c2VlZERhdGEubGVuZ3RofSBpdGVtc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb24gY2FjaGUgYWxyZWFkeSB2YWxpZCB3aXRoICR7c3RhdHMuaXRlbUNvdW50fSBpdGVtc2ApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoXCJEb2xsaG91c2VDb250YWluZXIuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZVwiLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=