@dollhousemcp/mcp-server 2.0.5 → 2.0.6

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.
package/dist/index.js CHANGED
@@ -640,12 +640,23 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && (!isTest || isTes
640
640
  const port = portArg ? parseInt(portArg.split('=')[1], 10) : undefined;
641
641
  const noBrowser = process.argv.includes('--no-open');
642
642
  let mcpAqlHandler;
643
+ let memorySink;
644
+ let metricsSink;
643
645
  try {
644
646
  const container = new DollhouseContainer();
645
647
  await container.preparePortfolio();
646
648
  const bundle = await container.bootstrapHandlers();
647
649
  await container.completeDeferredSetup();
648
650
  mcpAqlHandler = bundle.mcpAqlHandler;
651
+ // Extract sinks from container — deferred setup may have already wired them
652
+ try {
653
+ memorySink = container.resolve('MemoryLogSink');
654
+ }
655
+ catch { /* not registered */ }
656
+ try {
657
+ metricsSink = container.resolve('MemoryMetricsSink');
658
+ }
659
+ catch { /* not registered */ }
649
660
  console.error("[DollhouseMCP] Container bootstrapped — web routes using MCP-AQL Gateway");
650
661
  }
651
662
  catch (err) {
@@ -653,8 +664,23 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && (!isTest || isTes
653
664
  console.error("[DollhouseMCP] Reason:", err.message || err);
654
665
  console.error("[DollhouseMCP] This may indicate a corrupt portfolio or missing dependencies.");
655
666
  }
667
+ // Ensure sinks exist even if container bootstrap failed —
668
+ // standalone --web mode still needs working logs and metrics tabs
669
+ if (!memorySink) {
670
+ const { MemoryLogSink } = await import('./logging/sinks/MemoryLogSink.js');
671
+ memorySink = new MemoryLogSink({
672
+ appCapacity: 10000,
673
+ securityCapacity: 5000,
674
+ perfCapacity: 2000,
675
+ telemetryCapacity: 1000,
676
+ });
677
+ }
678
+ if (!metricsSink) {
679
+ const { MemoryMetricsSink } = await import('./metrics/sinks/MemoryMetricsSink.js');
680
+ metricsSink = new MemoryMetricsSink(240);
681
+ }
656
682
  const { startWebServer } = await import('./web/server.js');
657
- await startWebServer({ portfolioDir, port, openBrowser: !noBrowser, mcpAqlHandler });
683
+ await startWebServer({ portfolioDir, port, openBrowser: !noBrowser, mcpAqlHandler, memorySink, metricsSink });
658
684
  })().catch(err => {
659
685
  console.error("[DollhouseMCP] Web UI failed to start:", err);
660
686
  process.exit(1);
@@ -671,4 +697,4 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && (!isTest || isTes
671
697
  });
672
698
  }
673
699
  }
674
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGtFQUFrRTtBQUNsRSw4REFBOEQ7QUFDOUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixpREFBaUQ7QUFDakQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUU7UUFDM0MsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0QsS0FBSyxFQUFFLEtB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QUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMzRCxNQUFNLGNBQWMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNoQyxvRkFBb0Y7WUFDcEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuLy8gTG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSAuZW52IGZpbGVzIEJFRk9SRSBhbnl0aGluZyBlbHNlXG4vLyBUaGlzIGVuc3VyZXMgLmVudi5sb2NhbCBhbmQgLmVudiBhcmUgbG9hZGVkIGZvciBhbGwgbW9kdWxlc1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi9jb25maWcvZW52LmpzJztcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvc3RkaW8uanNcIjtcbmltcG9ydCB7IEVycm9ySGFuZGxlciB9IGZyb20gXCIuL3V0aWxzL0Vycm9ySGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vdXRpbHMvbG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyBEb2xsaG91c2VDb250YWluZXIgfSBmcm9tIFwiLi9kaS9Db250YWluZXIuanNcIjtcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSBcIi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanNcIjtcbmltcG9ydCB7IE9wZXJhdGlvbmFsVGVsZW1ldHJ5LCBTdGFydHVwVGltZXIgfSBmcm9tIFwiLi90ZWxlbWV0cnkvaW5kZXguanNcIjtcbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gXCIuL2dlbmVyYXRlZC92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEluZGljYXRvckNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy9pbmRpY2F0b3ItY29uZmlnLmpzXCI7XG5pbXBvcnQgdHlwZSB7IElUb29sSGFuZGxlciB9IGZyb20gXCIuL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUb29sUmVnaXN0cnkgfSBmcm9tIFwiLi9oYW5kbGVycy9Ub29sUmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgUGVyc29uYUhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9QZXJzb25hSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50Q1JVREhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9FbGVtZW50Q1JVREhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9Db2xsZWN0aW9uSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb3J0Zm9saW9IYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvUG9ydGZvbGlvSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWJBdXRoSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0dpdEh1YkF1dGhIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IERpc3BsYXlDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvRGlzcGxheUNvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgSWRlbnRpdHlIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvSWRlbnRpdHlIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9Db25maWdIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN5bmNIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvU3luY0hhbmRsZXJWMi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEluZGV4SGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0VuaGFuY2VkSW5kZXhIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSBcIi4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanNcIjtcbmltcG9ydCB7IEZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSBcIi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB0eXBlIHsgRW5zZW1ibGVFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvZW5zZW1ibGVzL3R5cGVzLmpzXCI7XG5cbi8vIERlZmVuc2l2ZSBlcnJvciBoYW5kbGluZyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycm9yKSA9PiB7XG4gIGxvZ2dlci5lcnJvcignVW5oYW5kbGVkIGV4Y2VwdGlvbiBkZXRlY3RlZCcsIHtcbiAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIHN0YWNrOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWRcbiAgfSk7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbiwgcHJvbWlzZSkgPT4ge1xuICBsb2dnZXIuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiBkZXRlY3RlZCcsIHtcbiAgICByZWFzb246IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uLm1lc3NhZ2UgOiBTdHJpbmcocmVhc29uKSxcbiAgICBzdGFjazogcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24uc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgcHJvbWlzZVxuICB9KTtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG4vLyBPbmx5IGxvZyBleGVjdXRpb24gZW52aXJvbm1lbnQgaW4gZGVidWcgbW9kZVxuaWYgKHByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRykge1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBEZWJ1ZyBtb2RlIGVuYWJsZWQnKTtcbn1cblxuZXhwb3J0IGNsYXNzIERvbGxob3VzZU1DUFNlcnZlciBpbXBsZW1lbnRzIElUb29sSGFuZGxlciB7XG4gIHByaXZhdGUgc2VydmVyOiBTZXJ2ZXI7XG4gIHB1YmxpYyBwZXJzb25hc0Rpcjogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VXNlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGluaXRpYWxpemF0aW9uUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbnRhaW5lcjogRG9sbGhvdXNlQ29udGFpbmVyO1xuICBwcml2YXRlIHRvb2xSZWdpc3RyeT86IFRvb2xSZWdpc3RyeTtcbiAgcHJpdmF0ZSBlbmhhbmNlZEluZGV4SGFuZGxlcj86IEVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuICBwcml2YXRlIHBlcnNvbmFIYW5kbGVyPzogUGVyc29uYUhhbmRsZXI7XG4gIHByaXZhdGUgZWxlbWVudENSVURIYW5kbGVyPzogRWxlbWVudENSVURIYW5kbGVyO1xuICBwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyPzogQ29sbGVjdGlvbkhhbmRsZXI7XG4gIHByaXZhdGUgcG9ydGZvbGlvSGFuZGxlcj86IFBvcnRmb2xpb0hhbmRsZXI7XG4gIHByaXZhdGUgZ2l0aHViQXV0aEhhbmRsZXI/OiBHaXRIdWJBdXRoSGFuZGxlcjtcbiAgcHJpdmF0ZSBkaXNwbGF5Q29uZmlnSGFuZGxlcj86IERpc3BsYXlDb25maWdIYW5kbGVyO1xuICBwcml2YXRlIGlkZW50aXR5SGFuZGxlcj86IElkZW50aXR5SGFuZGxlcjtcbiAgcHJpdmF0ZSBjb25maWdIYW5kbGVyPzogQ29uZmlnSGFuZGxlcjtcbiAgcHJpdmF0ZSBzeW5jSGFuZGxlcj86IFN5bmNIYW5kbGVyO1xuICBwcml2YXRlIHJlc291cmNlSGFuZGxlcj86IGltcG9ydCgnLi9oYW5kbGVycy9SZXNvdXJjZUhhbmRsZXIuanMnKS5SZXNvdXJjZUhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEb2xsaG91c2VNQ1BTZXJ2ZXIgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lciBEb2xsaG91c2VDb250YWluZXIgaW5zdGFuY2UgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKiAgICAgICAgICAgICAgICAgIFVzZSBgbmV3IERvbGxob3VzZUNvbnRhaW5lcigpYCBmb3IgcHJvZHVjdGlvbiBvclxuICAgKiAgICAgICAgICAgICAgICAgIGBjcmVhdGVJbnRlZ3JhdGlvbkNvbnRhaW5lcigpLmNvbnRhaW5lcmAgZm9yIHRlc3RzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY29udGFpbmVyOiBEb2xsaG91c2VDb250YWluZXIpIHtcbiAgICAvLyBCdWlsZCBjYXBhYmlsaXRpZXMgb2JqZWN0IGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgIC8vIFJlc291cmNlcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCAoYWR2ZXJ0aXNlX3Jlc291cmNlczogZmFsc2UpXG4gICAgY29uc3QgY2FwYWJpbGl0aWVzOiBhbnkgPSB7XG4gICAgICB0b29sczoge30sXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGlmIHJlc291cmNlcyBzaG91bGQgYmUgYWR2ZXJ0aXNlZFxuICAgIC8vIFRoaXMgaXMgYSBmdXR1cmUtcHJvb2YgaW1wbGVtZW50YXRpb24gLSByZXNvdXJjZXMgYXJlIG9wdC1pblxuICAgIHRyeSB7XG4gICAgICAvLyBJbml0aWFsaXplIENvbmZpZ01hbmFnZXIgdG8gY2hlY2sgcmVzb3VyY2Ugc2V0dGluZ3NcbiAgICAgIC8vIE5vdGU6IENvbmZpZyBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkIHlldCwgc28gd2UgY2hlY2sgc3luY2hyb25vdXNseVxuICAgICAgLy8gSWYgY29uZmlnIGlzIG5vdCBpbml0aWFsaXplZCwgZGVmYXVsdHMgKGFkdmVydGlzZV9yZXNvdXJjZXM6IGZhbHNlKSBhcHBseVxuICAgICAgY29uc3QgZmlsZUxvY2tNYW5hZ2VyID0gbmV3IEZpbGVMb2NrTWFuYWdlcigpO1xuICAgICAgY29uc3QgZmlsZU9wZXJhdGlvbnMgPSBuZXcgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlKGZpbGVMb2NrTWFuYWdlcik7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gbmV3IENvbmZpZ01hbmFnZXIoZmlsZU9wZXJhdGlvbnMsIG9zKTtcbiAgICAgIGNvbnN0IHJlc291cmNlc0NvbmZpZyA9IGNvbmZpZ01hbmFnZXIuZ2V0U2V0dGluZzxhbnk+KCdlbGVtZW50cy5lbmhhbmNlZF9pbmRleC5yZXNvdXJjZXMnKTtcblxuICAgICAgaWYgKHJlc291cmNlc0NvbmZpZz8uYWR2ZXJ0aXNlX3Jlc291cmNlcyA9PT0gdHJ1ZSkge1xuICAgICAgICBjYXBhYmlsaXRpZXMucmVzb3VyY2VzID0ge307XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbRG9sbGhvdXNlTUNQXSBNQ1AgUmVzb3VyY2VzIGNhcGFiaWxpdHkgYWR2ZXJ0aXNlZCAoZW5hYmxlZCB2aWEgY29uZmlnKScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tEb2xsaG91c2VNQ1BdIE1DUCBSZXNvdXJjZXMgY2FwYWJpbGl0eSBOT1QgYWR2ZXJ0aXNlZCAoZGlzYWJsZWQgYnkgZGVmYXVsdCknKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ29uZmlnIG5vdCBpbml0aWFsaXplZCB5ZXQgLSB1c2Ugc2FmZSBkZWZhdWx0IChubyByZXNvdXJjZXMpXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBsb2dnZXIuZGVidWcoYFtEb2xsaG91c2VNQ1BdIENvbmZpZyBub3QgaW5pdGlhbGl6ZWQgeWV0LCByZXNvdXJjZXMgY2FwYWJpbGl0eSBkaXNhYmxlZCBieSBkZWZhdWx0OiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlcnZlciA9IG5ldyBTZXJ2ZXIoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZG9sbGhvdXNlbWNwXCIsXG4gICAgICAgIHZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wZXJzb25hc0RpciA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50VXNlciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9VU0VSIHx8IG51bGw7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gIH1cbiAgXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVBvcnRmb2xpbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5wcmVwYXJlUG9ydGZvbGlvKCk7XG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHRoaXMuY29udGFpbmVyLmdldFBlcnNvbmFzRGlyKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBpbml0aWFsaXphdGlvbiBhZnRlciBwb3J0Zm9saW8gaXMgcmVhZHlcbiAgICogRklYICM2MTA6IFRoaXMgd2FzIHByZXZpb3VzbHkgaW4gYSAudGhlbigpIGNhbGxiYWNrIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgKiBOb3cgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbSBydW4oKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGhhbmRsZXJzIHdpdGggc2VydmVyIGluc3RhbmNlIC0gYWxsIHN0YXRlIG1hbmFnZWQgYnkgc2VydmljZXNcbiAgICBjb25zdCBoYW5kbGVycyA9IGF3YWl0IHRoaXMuY29udGFpbmVyLmNyZWF0ZUhhbmRsZXJzKHRoaXMuc2VydmVyKTtcblxuICAgIHRoaXMucGVyc29uYUhhbmRsZXIgPSBoYW5kbGVycy5wZXJzb25hSGFuZGxlcjtcbiAgICB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciA9IGhhbmRsZXJzLmVsZW1lbnRDcnVkSGFuZGxlcjtcbiAgICB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gaGFuZGxlcnMuY29sbGVjdGlvbkhhbmRsZXI7XG4gICAgdGhpcy5wb3J0Zm9saW9IYW5kbGVyID0gaGFuZGxlcnMucG9ydGZvbGlvSGFuZGxlcjtcbiAgICB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyID0gaGFuZGxlcnMuZ2l0aHViQXV0aEhhbmRsZXI7XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnSGFuZGxlciA9IGhhbmRsZXJzLmRpc3BsYXlDb25maWdIYW5kbGVyO1xuICAgIHRoaXMuaWRlbnRpdHlIYW5kbGVyID0gaGFuZGxlcnMuaWRlbnRpdHlIYW5kbGVyO1xuICAgIHRoaXMuY29uZmlnSGFuZGxlciA9IGhhbmRsZXJzLmNvbmZpZ0hhbmRsZXI7XG4gICAgdGhpcy5zeW5jSGFuZGxlciA9IGhhbmRsZXJzLnN5bmNIYW5kbGVyO1xuICAgIHRoaXMudG9vbFJlZ2lzdHJ5ID0gaGFuZGxlcnMudG9vbFJlZ2lzdHJ5O1xuICAgIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIgPSBoYW5kbGVycy5lbmhhbmNlZEluZGV4SGFuZGxlcjtcblxuICAgIC8vIEluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIHJlc291cmNlIGhhbmRsZXJzXG4gICAgLy8gUmVzb3VyY2VzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCByZXF1aXJlIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb25cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVSZXNvdXJjZUhhbmRsZXJzKCk7XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgTUNQIFJlc291cmNlcyBoYW5kbGVycyBpZiBlbmFibGVkIGluIGNvbmZpZ3VyYXRpb25cbiAgICogVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIG90aGVyIGhhbmRsZXJzIGJlY2F1c2UgaXQgcmVxdWlyZXMgZHluYW1pYyBpbXBvcnRcbiAgICogYW5kIGNvbmRpdGlvbmFsIHJlZ2lzdHJhdGlvbiBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVSZXNvdXJjZUhhbmRsZXJzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IFJlc291cmNlSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2hhbmRsZXJzL1Jlc291cmNlSGFuZGxlci5qcycpO1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IHRoaXMuY29udGFpbmVyLnJlc29sdmU8Q29uZmlnTWFuYWdlcj4oJ0NvbmZpZ01hbmFnZXInKTtcblxuICAgICAgdGhpcy5yZXNvdXJjZUhhbmRsZXIgPSBuZXcgUmVzb3VyY2VIYW5kbGVyKGNvbmZpZ01hbmFnZXIpO1xuICAgICAgYXdhaXQgdGhpcy5yZXNvdXJjZUhhbmRsZXIuaW5pdGlhbGl6ZSh0aGlzLnNlcnZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlc291cmNlcyBhcmUgb3B0aW9uYWwgLSBkb24ndCBmYWlsIHNlcnZlciBzdGFydHVwIGlmIHRoZXkgY2FuJ3QgYmUgaW5pdGlhbGl6ZWRcbiAgICAgIGxvZ2dlci53YXJuKCdbRG9sbGhvdXNlTUNQXSBGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZXNvdXJjZSBoYW5kbGVycywgY29udGludWluZyB3aXRob3V0IHJlc291cmNlcycpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNvdXJjZSBpbml0aWFsaXphdGlvbiBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFbnN1cmUgc2VydmVyIGlzIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb3BlcmF0aW9uXG4gICAqIEZJWCAjNjEwOiBBZGRlZCBmb3IgdGVzdCBjb21wYXRpYmlsaXR5IC0gdGVzdHMgZG9uJ3QgY2FsbCBydW4oKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVJbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gU3RhcnQgaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiUG9ydGZvbGlvIGFuZCBwZXJzb25hcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKGxhenkpXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZW5zdXJlSW5pdGlhbGl6ZWQnLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2U7XG4gIH1cbiAgXG4gIC8vIFRvb2wgaGFuZGxlciBtZXRob2RzIC0gbm93IHB1YmxpYyBmb3IgYWNjZXNzIGZyb20gdG9vbCBtb2R1bGVzXG4gIFxuICBhc3luYyBsaXN0UGVyc29uYXMoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5saXN0UGVyc29uYXMoKTtcbiAgfVxuXG4gIC8vIFVzZSBhY3RpdmF0ZUVsZW1lbnQobmFtZSwgJ3BlcnNvbmEnKSwgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZSwgJ3BlcnNvbmEnKSxcbiAgLy8gZ2V0QWN0aXZlRWxlbWVudHMoJ3BlcnNvbmEnKSwgYW5kIGdldEVsZW1lbnREZXRhaWxzKG5hbWUsICdwZXJzb25hJykgaW5zdGVhZC5cbiAgLy8gVGhlc2Ugd2VyZSByZW1vdmVkIHRvIG5vcm1hbGl6ZSBwZXJzb25hIGhhbmRsaW5nIHRocm91Z2ggdGhlIGdlbmVyaWMgZWxlbWVudCBBUEkuXG5cbiAgYXN5bmMgcmVsb2FkUGVyc29uYXMoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5yZWxvYWRQZXJzb25hcygpO1xuICB9XG5cbiAgLy8gPT09PT0gRWxlbWVudCBNZXRob2RzIChHZW5lcmljIGZvciBhbGwgZWxlbWVudCB0eXBlcykgPT09PT1cbiAgXG4gIGFzeW5jIGxpc3RFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLlBFUlNPTkEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdFBlcnNvbmFzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmxpc3RFbGVtZW50cyhub3JtYWxpemVkVHlwZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxpc3RFbGVtZW50cycsIGVycm9yLCB7IHR5cGUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGxpc3QgJHt0eXBlfTogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI4MSAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyXG4gICAgICAvLyBQZXJzb25hSGFuZGxlci5hY3RpdmF0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuYWN0aXZhdGVFbGVtZW50KG5hbWUsIG5vcm1hbGl6ZWRUeXBlLCBjb250ZXh0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuYWN0aXZhdGVFbGVtZW50JywgZXJyb3IsIHsgdHlwZSwgbmFtZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZ2V0QWN0aXZlRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI4MSAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyXG4gICAgICAvLyBQZXJzb25hSGFuZGxlci5nZXRBY3RpdmVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgaGFuZGxlcyBwZXJzb25hc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmdldEFjdGl2ZUVsZW1lbnRzKG5vcm1hbGl6ZWRUeXBlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZ2V0QWN0aXZlRWxlbWVudHMnLCBlcnJvciwgeyB0eXBlIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBnZXQgYWN0aXZlICR7dHlwZX06ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjgxIC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXJcbiAgICAgIC8vIFBlcnNvbmFIYW5kbGVyLmRlYWN0aXZhdGVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgaGFuZGxlcyBwZXJzb25hc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmRlYWN0aXZhdGVFbGVtZW50KG5hbWUsIG5vcm1hbGl6ZWRUeXBlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZGVhY3RpdmF0ZUVsZW1lbnQnLCBlcnJvciwgeyB0eXBlLCBuYW1lIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBkZWFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci5nZXRQZXJzb25hRGV0YWlscyBpcyBkZXByZWNhdGVkOyBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5IGhhbmRsZXMgcGVyc29uYXNcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmdldEVsZW1lbnREZXRhaWxzKG5hbWUsIG5vcm1hbGl6ZWRUeXBlKTtcbiAgfVxuICBcbiAgYXN5bmMgcmVsb2FkRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEucmVsb2FkRWxlbWVudHModHlwZSk7XG4gIH1cblxuICAvLyBFbGVtZW50LXNwZWNpZmljIG1ldGhvZHNcbiAgYXN5bmMgcmVuZGVyVGVtcGxhdGUobmFtZTogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5yZW5kZXJUZW1wbGF0ZShuYW1lLCB2YXJpYWJsZXMpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUFnZW50KG5hbWU6IHN0cmluZywgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmV4ZWN1dGVBZ2VudChuYW1lLCBwYXJhbWV0ZXJzKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBlbGVtZW50IGluIHRoZSBwb3J0Zm9saW8uXG4gICAqIEBwYXJhbSBhcmdzLmVsZW1lbnRzIC0gRm9yIGVuc2VtYmxlczogYXJyYXkgb2YgZWxlbWVudCByZWZlcmVuY2VzIChJc3N1ZSAjMjc4KVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmc7IGNvbnRlbnQ/OiBzdHJpbmc7IGluc3RydWN0aW9ucz86IHN0cmluZzsgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgZWxlbWVudHM/OiBFbnNlbWJsZUVsZW1lbnRbXX0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjAgLSBSZW1vdmUgcGVyc29uYSBzcGVjaWFsIGNhc2UsIHJvdXRlIGFsbCBlbGVtZW50IGNyZWF0aW9uIHRocm91Z2ggRWxlbWVudENSVURIYW5kbGVyXG4gICAgLy8gVGhpcyBlbnN1cmVzIGNvbnNpc3RlbnQgZHVwbGljYXRlIGNoZWNraW5nIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAvLyBGSVg6IElzc3VlICMyNzggLSBTdXBwb3J0IGVsZW1lbnRzIHBhcmFtZXRlciBmb3IgZW5zZW1ibGVzXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUoYXJncy50eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmNyZWF0ZUVsZW1lbnQoey4uLmFyZ3MsIHR5cGU6IG5vcm1hbGl6ZWRUeXBlfSk7XG4gIH1cblxuICBhc3luYyBlZGl0RWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci5lZGl0UGVyc29uYSBpcyBkZXByZWNhdGVkOyBlbGVtZW50Q1JVREhhbmRsZXIgaGFuZGxlcyBwZXJzb25hcyB2aWEgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKGFyZ3MudHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5lZGl0RWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHN0cmljdD86IGJvb2xlYW59KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIC8vIEZJWDogSXNzdWUgIzI3NiAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgLy8gUGVyc29uYUhhbmRsZXIudmFsaWRhdGVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IGVsZW1lbnRDUlVESGFuZGxlciBoYW5kbGVzIHBlcnNvbmFzXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUoYXJncy50eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLnZhbGlkYXRlRWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZWxldGVEYXRhPzogYm9vbGVhbn0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci5kZWxldGVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IGVsZW1lbnRDUlVESGFuZGxlciBoYW5kbGVzIHBlcnNvbmFzIHZpYSBkZWRpY2F0ZWQgZGVsZXRlIHBhdGhcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZGVsZXRlRWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIGJyb3dzZUNvbGxlY3Rpb24oc2VjdGlvbj86IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uLCB0eXBlKTtcbiAgfVxuXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb24ocXVlcnk6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuc2VhcmNoQ29sbGVjdGlvbihxdWVyeSk7XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uRW5oYW5jZWQocXVlcnk6IHN0cmluZywgb3B0aW9uczogYW55ID0ge30pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLnNlYXJjaENvbGxlY3Rpb25FbmhhbmNlZChxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ29udGVudChwYXRoOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmdldENvbGxlY3Rpb25Db250ZW50KHBhdGgpO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmluc3RhbGxDb250ZW50KGlucHV0UGF0aCk7XG4gIH1cblxuICBhc3luYyBzdWJtaXRDb250ZW50KGNvbnRlbnRJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLnN1Ym1pdENvbnRlbnQoY29udGVudElkZW50aWZpZXIpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvbkNhY2hlSGVhbHRoKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuZ2V0Q29sbGVjdGlvbkNhY2hlSGVhbHRoKCk7XG4gIH1cblxuICAvLyBVc2VyIGlkZW50aXR5IG1hbmFnZW1lbnQgLSBkZWxlZ2F0ZWQgdG8gSWRlbnRpdHlIYW5kbGVyXG4gIGFzeW5jIHNldFVzZXJJZGVudGl0eSh1c2VybmFtZTogc3RyaW5nLCBlbWFpbD86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0eUhhbmRsZXIhLnNldFVzZXJJZGVudGl0eSh1c2VybmFtZSwgZW1haWwpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcklkZW50aXR5KCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0eUhhbmRsZXIhLmdldFVzZXJJZGVudGl0eSgpO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJVc2VySWRlbnRpdHkoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuY2xlYXJVc2VySWRlbnRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpO1xuICB9XG5cbiAgLy8gR2l0SHViIGF1dGhlbnRpY2F0aW9uIG1hbmFnZW1lbnRcbiAgYXN5bmMgc2V0dXBHaXRIdWJBdXRoKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuc2V0dXBHaXRIdWJBdXRoKCk7XG4gIH1cbiAgXG4gIGFzeW5jIGNoZWNrR2l0SHViQXV0aCgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmNoZWNrR2l0SHViQXV0aCgpO1xuICB9XG4gIFxuICBhc3luYyBnZXRPQXV0aEhlbHBlclN0YXR1cyh2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmdldE9BdXRoSGVscGVyU3RhdHVzKHZlcmJvc2UpO1xuICB9XG4gIFxuXG4gIFxuICBhc3luYyBjbGVhckdpdEh1YkF1dGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyIS5jbGVhckdpdEh1YkF1dGgoKTtcbiAgfVxuXG4gIC8vIE9BdXRoIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBjb25maWd1cmVPQXV0aChjbGllbnRfaWQ/OiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmNvbmZpZ3VyZU9BdXRoKGNsaWVudF9pZCk7XG4gIH1cblxuXG5cblxuXG5cblxuXG5cblxuICAvKipcbiAgICogQ29uZmlndXJlIGluZGljYXRvciBzZXR0aW5ncyAoZGVsZWdhdGVkIHRvIERpc3BsYXlDb25maWdIYW5kbGVyKVxuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlSW5kaWNhdG9yKGNvbmZpZzogUGFydGlhbDxJbmRpY2F0b3JDb25maWc+KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlDb25maWdIYW5kbGVyIS5jb25maWd1cmVJbmRpY2F0b3IoY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBpbmRpY2F0b3IgY29uZmlndXJhdGlvbiAoZGVsZWdhdGVkIHRvIERpc3BsYXlDb25maWdIYW5kbGVyKVxuICAgKi9cbiAgYXN5bmMgZ2V0SW5kaWNhdG9yQ29uZmlnKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5Q29uZmlnSGFuZGxlciEuZ2V0SW5kaWNhdG9yQ29uZmlnKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIGNvbGxlY3Rpb24gc3VibWlzc2lvbiBzZXR0aW5ncyAoZGVsZWdhdGVkIHRvIENvbGxlY3Rpb25IYW5kbGVyKVxuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlQ29sbGVjdGlvblN1Ym1pc3Npb24oYXV0b1N1Ym1pdDogYm9vbGVhbikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuY29uZmlndXJlQ29sbGVjdGlvblN1Ym1pc3Npb24oYXV0b1N1Ym1pdCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gc3VibWlzc2lvbiBjb25maWd1cmF0aW9uIChkZWxlZ2F0ZWQgdG8gQ29sbGVjdGlvbkhhbmRsZXIpXG4gICAqL1xuICBhc3luYyBnZXRDb2xsZWN0aW9uU3VibWlzc2lvbkNvbmZpZygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmdldENvbGxlY3Rpb25TdWJtaXNzaW9uQ29uZmlnKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBFeHBvcnQgYSBzaW5nbGUgcGVyc29uYVxuICAgKi9cbiAgYXN5bmMgZXhwb3J0UGVyc29uYShwZXJzb25hTmFtZTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5leHBvcnRQZXJzb25hKHBlcnNvbmFOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgYWxsIHBlcnNvbmFzXG4gICAqL1xuICBhc3luYyBleHBvcnRBbGxQZXJzb25hcyhpbmNsdWRlRGVmYXVsdHMgPSB0cnVlKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5leHBvcnRBbGxQZXJzb25hcyhpbmNsdWRlRGVmYXVsdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIHBlcnNvbmFcbiAgICovXG4gIGFzeW5jIGltcG9ydFBlcnNvbmEoc291cmNlOiBzdHJpbmcsIG92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5pbXBvcnRQZXJzb25hKHNvdXJjZSwgb3ZlcndyaXRlKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFBvcnRmb2xpbyBtYW5hZ2VtZW50IG1ldGhvZHNcbiAgICovXG5cbiAgLyoqXG4gICAqIENoZWNrIHBvcnRmb2xpbyBzdGF0dXMgaW5jbHVkaW5nIHJlcG9zaXRvcnkgZXhpc3RlbmNlIGFuZCBzeW5jIGluZm9ybWF0aW9uXG4gICAqL1xuICBhc3luYyBwb3J0Zm9saW9TdGF0dXModXNlcm5hbWU/OiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEucG9ydGZvbGlvU3RhdHVzKHVzZXJuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IEdpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeVxuICAgKi9cbiAgYXN5bmMgaW5pdFBvcnRmb2xpbyhvcHRpb25zOiB7cmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7IHByaXZhdGU/OiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZ30pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEuaW5pdFBvcnRmb2xpbyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgcG9ydGZvbGlvIHNldHRpbmdzXG4gICAqL1xuICBhc3luYyBwb3J0Zm9saW9Db25maWcob3B0aW9uczoge2F1dG9TeW5jPzogYm9vbGVhbjsgZGVmYXVsdFZpc2liaWxpdHk/OiBzdHJpbmc7IGF1dG9TdWJtaXQ/OiBib29sZWFuOyByZXBvc2l0b3J5TmFtZT86IHN0cmluZ30pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEucG9ydGZvbGlvQ29uZmlnKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgcG9ydGZvbGlvIHdpdGggR2l0SHViXG4gICAqL1xuICBhc3luYyBzeW5jUG9ydGZvbGlvKG9wdGlvbnM6IHtcbiAgICBkaXJlY3Rpb246IHN0cmluZztcbiAgICBtb2RlPzogc3RyaW5nO1xuICAgIGZvcmNlOiBib29sZWFuO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICBjb25maXJtRGVsZXRpb25zPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5zeW5jUG9ydGZvbGlvKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgLSBkZWxlZ2F0ZXMgdG8gQ29uZmlnSGFuZGxlclxuICAqL1xuICBhc3luYyBoYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9uczogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ0hhbmRsZXIhLmhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc3luYyBvcGVyYXRpb25zIC0gZGVsZWdhdGVzIHRvIFN5bmNIYW5kbGVyXG4gICAqL1xuICBhc3luYyBoYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnM6IGFueSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5zeW5jSGFuZGxlciEuaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb250YWluZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBsb2NhbCBwb3J0Zm9saW8gdXNpbmcgdGhlIG1ldGFkYXRhIGluZGV4IHN5c3RlbVxuICAgKiBUaGlzIHByb3ZpZGVzIGZhc3QsIGNvbXByZWhlbnNpdmUgc2VhcmNoIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgKi9cbiAgYXN5bmMgc2VhcmNoUG9ydGZvbGlvKG9wdGlvbnM6IHtcbiAgICBxdWVyeTogc3RyaW5nOyBcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZzsgXG4gICAgZnV6enlNYXRjaD86IGJvb2xlYW47IFxuICAgIG1heFJlc3VsdHM/OiBudW1iZXI7IFxuICAgIGluY2x1ZGVLZXl3b3Jkcz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVUYWdzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZVRyaWdnZXJzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZURlc2NyaXB0aW9ucz86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEuc2VhcmNoUG9ydGZvbGlvKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBhY3Jvc3MgYWxsIHNvdXJjZXMgKGxvY2FsLCBHaXRIdWIsIGNvbGxlY3Rpb24pIHVzaW5nIFVuaWZpZWRJbmRleE1hbmFnZXJcbiAgICogVGhpcyBwcm92aWRlcyBjb21wcmVoZW5zaXZlIHNlYXJjaCB3aXRoIGR1cGxpY2F0ZSBkZXRlY3Rpb24gYW5kIHZlcnNpb24gY29tcGFyaXNvblxuICAgKi9cbiAgYXN5bmMgc2VhcmNoQWxsKG9wdGlvbnM6IHtcbiAgICBxdWVyeTogc3RyaW5nO1xuICAgIHNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIHBhZ2VTaXplPzogbnVtYmVyO1xuICAgIHNvcnRCeT86IHN0cmluZztcbiAgfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5zZWFyY2hBbGwob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBzZW1hbnRpY2FsbHkgc2ltaWxhciBlbGVtZW50cyB1c2luZyBFbmhhbmNlZCBJbmRleFxuICAgKi9cbiAgYXN5bmMgZmluZFNpbWlsYXJFbGVtZW50cyhvcHRpb25zOiB7XG4gICAgZWxlbWVudE5hbWU6IHN0cmluZztcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIHRocmVzaG9sZDogbnVtYmVyO1xuICB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIhLmZpbmRTaW1pbGFyRWxlbWVudHMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWxhdGlvbnNoaXBzIGZvciBhIHNwZWNpZmljIGVsZW1lbnRcbiAgICovXG4gIGFzeW5jIGdldEVsZW1lbnRSZWxhdGlvbnNoaXBzKG9wdGlvbnM6IHtcbiAgICBlbGVtZW50TmFtZTogc3RyaW5nO1xuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nO1xuICAgIHJlbGF0aW9uc2hpcFR5cGVzPzogc3RyaW5nW107XG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciEuZ2V0RWxlbWVudFJlbGF0aW9uc2hpcHMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBlbGVtZW50cyBieSBhY3Rpb24gdmVyYlxuICAgKi9cbiAgYXN5bmMgc2VhcmNoQnlWZXJiKG9wdGlvbnM6IHtcbiAgICB2ZXJiOiBzdHJpbmc7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgfSkge1xuICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyIS5zZWFyY2hCeVZlcmIob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YXRpc3RpY3MgYWJvdXQgRW5oYW5jZWQgSW5kZXggcmVsYXRpb25zaGlwc1xuICAgKi9cbiAgYXN5bmMgZ2V0UmVsYXRpb25zaGlwU3RhdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIhLmdldFJlbGF0aW9uc2hpcFN0YXRzKCk7XG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiRG9sbGhvdXNlTUNQU2VydmVyLnJ1bigpIHN0YXJ0ZWRcIik7XG4gICAgbG9nZ2VyLmluZm8oXCJTdGFydGluZyBEb2xsaG91c2VNQ1Agc2VydmVyLi4uXCIpO1xuXG4gICAgY29uc3QgdGltZXIgPSB0aGlzLmNvbnRhaW5lci5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpO1xuXG4gICAgLy8gSXNzdWUgIzcwNjogQ3JpdGljYWwgcGF0aCBvbmx5IOKAlCBnZXQgdG8gY29ubmVjdCgpIGFzIGZhc3QgYXMgcG9zc2libGVcbiAgICAvLyBOb24tY3JpdGljYWwgd29yayAobWVtb3J5IGF1dG8tbG9hZCwgYWN0aXZhdGlvbiByZXN0b3JlLCBldGMuKSBpc1xuICAgIC8vIGRlZmVycmVkIHRvIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIHdoaWNoIHJ1bnMgcG9zdC1jb25uZWN0LlxuICAgIHRyeSB7XG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdwb3J0Zm9saW9fcHJlcGFyZScsIHRydWUpO1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUG9ydGZvbGlvKCk7XG4gICAgICB0aW1lci5lbmRQaGFzZSgncG9ydGZvbGlvX3ByZXBhcmUnKTtcblxuICAgICAgdGltZXIuc3RhcnRQaGFzZSgnaGFuZGxlcl9jcmVhdGlvbicsIHRydWUpO1xuICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICB0aW1lci5lbmRQaGFzZSgnaGFuZGxlcl9jcmVhdGlvbicpO1xuXG4gICAgICAvLyBJbml0aWFsaXplIG9wZXJhdGlvbmFsIHRlbGVtZXRyeSAoYXN5bmMsIG5vbi1ibG9ja2luZywgbmV2ZXIgdGhyb3dzKVxuICAgICAgY29uc3Qgb3BlcmF0aW9uYWxUZWxlbWV0cnkgPSB0aGlzLmNvbnRhaW5lci5yZXNvbHZlPE9wZXJhdGlvbmFsVGVsZW1ldHJ5PignT3BlcmF0aW9uYWxUZWxlbWV0cnknKTtcbiAgICAgIG9wZXJhdGlvbmFsVGVsZW1ldHJ5LmluaXRpYWxpemUoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8vIFRlbGVtZXRyeSBlcnJvcnMgYXJlIGxvZ2dlZCBpbnRlcm5hbGx5LCBzYWZlIHRvIGlnbm9yZSBoZXJlXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseVwiKTtcblxuICAgICAgaWYgKCFlbnYuRE9MTEhPVVNFX0dBVEVLRUVQRVJfRU5BQkxFRCkge1xuICAgICAgICBsb2dnZXIud2FybihcIuKaoO+4jyAgR2F0ZWtlZXBlciBpcyBESVNBQkxFRCAoRE9MTEhPVVNFX0dBVEVLRUVQRVJfRU5BQkxFRD1mYWxzZSkuIEFsbCBwZXJtaXNzaW9uIGNoZWNrcyBhcmUgYnlwYXNzZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhcIkRvbGxob3VzZU1DUCBzZXJ2ZXIgcmVhZHkgLSB3YWl0aW5nIGZvciBNQ1AgY29ubmVjdGlvbiBvbiBzdGRpb1wiKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkRvbGxob3VzZU1DUFNlcnZlci5ydW4oKSBjb21wbGV0ZWQgaW5pdGlhbGl6YXRpb25cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnJ1bi5pbml0aWFsaXphdGlvbicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB0byBwcmV2ZW50IHNlcnZlciBmcm9tIHN0YXJ0aW5nIHdpdGggaW5jb21wbGV0ZSBpbml0aWFsaXphdGlvblxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBTdGRpb1NlcnZlclRyYW5zcG9ydCgpO1xuXG4gICAgLy8gU2V0IHVwIGdyYWNlZnVsIHNodXRkb3duIGhhbmRsZXJzXG4gICAgY29uc3QgY2xlYW51cCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwiU2h1dHRpbmcgZG93biBEb2xsaG91c2VNQ1Agc2VydmVyLi4uXCIpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5kaXNwb3NlKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiQ2xlYW51cCBjb21wbGV0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBkdXJpbmcgY2xlYW51cFwiLCB7IGVycm9yIH0pO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfTtcblxuICAgIC8vIFJlZ2lzdGVyIHNodXRkb3duIGhhbmRsZXJzXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR0hVUCcsIGNsZWFudXApO1xuXG4gICAgLy8gQ29ubmVjdCBBU0FQIOKAlCB0b29scyBhcmUgcmVnaXN0ZXJlZCwgc2VydmVyIGNhbiBhY2NlcHQgcmVxdWVzdHNcbiAgICB0aW1lci5zdGFydFBoYXNlKCdtY3BfY29ubmVjdCcsIHRydWUpO1xuICAgIGF3YWl0IHRoaXMuc2VydmVyLmNvbm5lY3QodHJhbnNwb3J0KTtcbiAgICB0aW1lci5lbmRQaGFzZSgnbWNwX2Nvbm5lY3QnKTtcbiAgICB0aW1lci5tYXJrQ29ubmVjdCgpO1xuXG4gICAgLy8gTWFyayB0aGF0IE1DUCBpcyBub3cgY29ubmVjdGVkIC0gbm8gbW9yZSBjb25zb2xlIG91dHB1dCBhbGxvd2VkXG4gICAgbG9nZ2VyLnNldE1DUENvbm5lY3RlZCgpO1xuXG4gICAgLy8gSXNzdWUgIzcwNiBQaGFzZSAzOiBFbWl0IFJFQURZIHNlbnRpbmVsIGZvciBicmlkZ2UgY2xpZW50c1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKCdET0xMSE9VU0VNQ1BfUkVBRFlcXG4nKTtcblxuICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciBydW5uaW5nIG9uIHN0ZGlvXCIpO1xuXG4gICAgLy8gSXNzdWUgIzcwNiBQaGFzZSAyOiBEZWZlcnJlZCBzZXR1cCDigJQgcnVucyBwb3N0LWNvbm5lY3QsIG5vbi1ibG9ja2luZ1xuICAgIC8vIFBhdHRlcm4gZW5jcnlwdGlvbiwgYmFja2dyb3VuZCB2YWxpZGF0b3IsIG1lbW9yeSBhdXRvLWxvYWQsIGFjdGl2YXRpb25cbiAgICAvLyByZXN0b3JlLCBsb2cgaG9va3MsIGRhbmdlciB6b25lIGluaXQgYWxsIG1vdmUgaGVyZS5cbiAgICBjb25zdCBkZWZlcnJlZFByb21pc2UgPSB0aGlzLmNvbnRhaW5lci5jb21wbGV0ZURlZmVycmVkU2V0dXAoKTtcbiAgICBkZWZlcnJlZFByb21pc2UuY2F0Y2goZXJyID0+IGxvZ2dlci53YXJuKCdbU3RhcnR1cF0gRGVmZXJyZWQgc2V0dXAgZXJyb3I6JywgZXJyKSk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2IFBoYXNlIDQ6IFdpcmUgZGVmZXJyZWQgcHJvbWlzZSBpbnRvIFNlcnZlclNldHVwIGZvciByZXF1ZXN0IGJ1ZmZlcmluZ1xuICAgIGNvbnN0IHNlcnZlclNldHVwID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxpbXBvcnQoJy4vc2VydmVyL1NlcnZlclNldHVwLmpzJykuU2VydmVyU2V0dXA+KCdTZXJ2ZXJTZXR1cCcpO1xuICAgIHNlcnZlclNldHVwLnNldERlZmVycmVkU2V0dXBQcm9taXNlKGRlZmVycmVkUHJvbWlzZSk7XG5cbiAgICAvLyBMb2cgc3RhcnR1cCB0aW1pbmcgYWZ0ZXIgZGVmZXJyZWQgc2V0dXAgY29tcGxldGVzXG4gICAgZGVmZXJyZWRQcm9taXNlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVwb3J0ID0gdGltZXIuZ2V0UmVwb3J0KCk7XG4gICAgICBsb2dnZXIuaW5mbyhgW1N0YXJ0dXBdIEZ1bGwgcmVwb3J0OiBjb25uZWN0IGF0ICR7cmVwb3J0LmNvbm5lY3RBdE1zfW1zLCBgICtcbiAgICAgICAgYGNyaXRpY2FsICR7cmVwb3J0LmNyaXRpY2FsUGF0aE1zfW1zLCBkZWZlcnJlZCAke3JlcG9ydC5kZWZlcnJlZE1zfW1zLCBgICtcbiAgICAgICAgYHRvdGFsICR7cmVwb3J0LnRvdGFsTXN9bXNgKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7IC8qIGFscmVhZHkgbG9nZ2VkICovIH0pO1xuXG4gIH1cbn1cblxuLy8gRXhwb3J0IGlzIGFscmVhZHkgYXQgY2xhc3MgZGVjbGFyYXRpb25cblxuLy8gT25seSBzdGFydCB0aGUgc2VydmVyIGlmIHRoaXMgZmlsZSBpcyBiZWluZyBydW4gZGlyZWN0bHkgKG5vdCBpbXBvcnRlZCBieSB0ZXN0cylcbi8vIEhhbmRsZSBkaWZmZXJlbnQgZXhlY3V0aW9uIG1ldGhvZHMgKGRpcmVjdCwgbnB4LCBDTEkpXG5jb25zdCBzY3JpcHRQYXRoID0gcHJvY2Vzcy5hcmd2Py5bMV0gPyBwYXRoLm5vcm1hbGl6ZShwcm9jZXNzLmFyZ3ZbMV0pIDogJyc7XG5jb25zdCBpc0RpcmVjdEV4ZWN1dGlvbiA9XG4gIHNjcmlwdFBhdGguZW5kc1dpdGgoYCR7cGF0aC5zZXB9ZGlzdCR7cGF0aC5zZXB9aW5kZXguanNgKSB8fFxuICBzY3JpcHRQYXRoLmVuZHNXaXRoKGAke3BhdGguc2VwfXNyYyR7cGF0aC5zZXB9aW5kZXgudHNgKTtcbmNvbnN0IGlzTnB4RXhlY3V0aW9uID0gcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoPy5pbmNsdWRlcygnbnB4Jyk7XG5jb25zdCBpc0NsaUV4ZWN1dGlvbiA9IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJy9kb2xsaG91c2VtY3AnKSB8fCBwcm9jZXNzLmFyZ3ZbMV0/LmVuZHNXaXRoKCdcXFxcZG9sbGhvdXNlbWNwJyk7XG5jb25zdCBpc1Rlc3QgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRDsgLy8gVGhpcyBpcyBzZXQgd2hlbiBKZXN0IHJ1bnMgdGVzdHNcbmNvbnN0IGlzVGVzdE1vZGUgPSBwcm9jZXNzLmVudi5URVNUX01PREUgPT09ICd0cnVlJzsgLy8gQ2hlY2sgZm9yIFRFU1RfTU9ERSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuY29uc3QgZG9sbGhvdXNlRGVidWdGbGFnID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RFQlVHPy50b0xvd2VyQ2FzZSgpO1xuY29uc3QgaXNEZWJ1Z1N0YXJ0dXBMb2dnaW5nID0gZG9sbGhvdXNlRGVidWdGbGFnID09PSAndHJ1ZScgfHwgZG9sbGhvdXNlRGVidWdGbGFnID09PSAnMSc7XG5cbi8vIFByb2dyZXNzaXZlIHN0YXJ0dXAgd2l0aCByZXRyaWVzIGZvciBucHgvQ0xJIGV4ZWN1dGlvblxuY29uc3QgU1RBUlRVUF9ERUxBWVMgPSBbMTAsIDUwLCAxMDAsIDIwMF07IC8vIFByb2dyZXNzaXZlIGRlbGF5cyBpbiBtc1xuXG5hc3luYyBmdW5jdGlvbiBzdGFydFNlcnZlcldpdGhSZXRyeShyZXRyaWVzTGVmdCA9IFNUQVJUVVBfREVMQVlTLmxlbmd0aCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaXNEZWJ1Z1N0YXJ0dXBMb2dnaW5nKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkRFQlVHOiBzdGFydFNlcnZlcldpdGhSZXRyeSBjYWxsZWQuXCIpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IERvbGxob3VzZUNvbnRhaW5lcigpO1xuICAgIGNvbnN0IHNlcnZlciA9IG5ldyBEb2xsaG91c2VNQ1BTZXJ2ZXIoY29udGFpbmVyKTtcbiAgICBhd2FpdCBzZXJ2ZXIucnVuKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHJldHJpZXNMZWZ0ID4gMCAmJiAoaXNOcHhFeGVjdXRpb24gfHwgaXNDbGlFeGVjdXRpb24pKSB7XG4gICAgICAvLyBUcnkgYWdhaW4gd2l0aCBhIGxvbmdlciBkZWxheVxuICAgICAgY29uc3QgZGVsYXlJbmRleCA9IFNUQVJUVVBfREVMQVlTLmxlbmd0aCAtIHJldHJpZXNMZWZ0O1xuICAgICAgY29uc3QgZGVsYXkgPSBTVEFSVFVQX0RFTEFZU1tkZWxheUluZGV4XTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheSkpO1xuICAgICAgcmV0dXJuIHN0YXJ0U2VydmVyV2l0aFJldHJ5KHJldHJpZXNMZWZ0IC0gMSk7XG4gICAgfVxuICAgIC8vIEZpbmFsIGZhaWx1cmUgLSBtaW5pbWFsIGVycm9yIG1lc3NhZ2UgZm9yIHNlY3VyaXR5XG4gICAgLy8gTm90ZTogVXNpbmcgY29uc29sZS5lcnJvciBoZXJlIGlzIGludGVudGlvbmFsIGFzIGl0J3MgdGhlIGZpbmFsIGVycm9yIGJlZm9yZSBleGl0XG4gICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiLCBlcnJvcik7IC8vIEFkZGVkIGVycm9yIG9iamVjdFxuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5pZiAoKGlzRGlyZWN0RXhlY3V0aW9uIHx8IGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSAmJiAoIWlzVGVzdCB8fCBpc1Rlc3RNb2RlKSkge1xuICAvLyBJc3N1ZSAjNzA0OiAtLXdlYiBmbGFnIHN0YXJ0cyB0aGUgcG9ydGZvbGlvIHdlYiBVSSBpbnN0ZWFkIG9mIE1DUCBzZXJ2ZXJcbiAgY29uc3QgaXNXZWJNb2RlID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLXdlYicpO1xuICBpZiAoaXNXZWJNb2RlKSB7XG4gICAgLy8gSXNzdWUgIzc5NjogQm9vdHN0cmFwIERJIGNvbnRhaW5lciBmb3Igd2ViLW9ubHkgbW9kZSBzbyBBUEkgcm91dGVzXG4gICAgLy8gZ28gdGhyb3VnaCBNQ1BBUUxIYW5kbGVyICh2YWxpZGF0ZWQsIGNhY2hlZCwgZ2F0ZWtlZXBlci1jaGVja2VkKVxuICAgIC8vXG4gICAgLy8gU3VwcHJlc3MgZGVidWcgb3V0cHV0IGluIC0td2ViIG1vZGUgdW5sZXNzIERPTExIT1VTRV9ERUJVRyBpcyBzZXQuXG4gICAgLy8gVGhlIHdlYiBjb25zb2xlIGNhcHR1cmVzIGFsbCBsb2dzIGluIG1lbW9yeSDigJQgbm8gbmVlZCB0byBmbG9vZCB0aGUgdGVybWluYWwuXG4gICAgaWYgKCFwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUcgJiYgIXByb2Nlc3MuZW52LkVOQUJMRV9ERUJVRykge1xuICAgICAgbG9nZ2VyLnNldE1pbkxldmVsKCdpbmZvJyk7XG4gICAgfVxuXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb0RpciA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ3BvcnRmb2xpbycpO1xuICAgICAgY29uc3QgcG9ydEFyZyA9IHByb2Nlc3MuYXJndi5maW5kKGEgPT4gYS5zdGFydHNXaXRoKCctLXBvcnQ9JykpO1xuICAgICAgY29uc3QgcG9ydCA9IHBvcnRBcmcgPyBwYXJzZUludChwb3J0QXJnLnNwbGl0KCc9JylbMV0sIDEwKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG5vQnJvd3NlciA9IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1uby1vcGVuJyk7XG5cbiAgICAgIGxldCBtY3BBcWxIYW5kbGVyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gbmV3IERvbGxob3VzZUNvbnRhaW5lcigpO1xuICAgICAgICBhd2FpdCBjb250YWluZXIucHJlcGFyZVBvcnRmb2xpbygpO1xuICAgICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCBjb250YWluZXIuYm9vdHN0cmFwSGFuZGxlcnMoKTtcbiAgICAgICAgYXdhaXQgY29udGFpbmVyLmNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpO1xuICAgICAgICBtY3BBcWxIYW5kbGVyID0gYnVuZGxlLm1jcEFxbEhhbmRsZXI7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBDb250YWluZXIgYm9vdHN0cmFwcGVkIOKAlCB3ZWIgcm91dGVzIHVzaW5nIE1DUC1BUUwgR2F0ZXdheVwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gQ29udGFpbmVyIGJvb3RzdHJhcCBmYWlsZWQg4oCUIHdlYiByb3V0ZXMgd2lsbCB1c2UgZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzLlwiKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFJlYXNvbjpcIiwgKGVyciBhcyBFcnJvcikubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gVGhpcyBtYXkgaW5kaWNhdGUgYSBjb3JydXB0IHBvcnRmb2xpbyBvciBtaXNzaW5nIGRlcGVuZGVuY2llcy5cIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnRXZWJTZXJ2ZXIgfSA9IGF3YWl0IGltcG9ydCgnLi93ZWIvc2VydmVyLmpzJyk7XG4gICAgICBhd2FpdCBzdGFydFdlYlNlcnZlcih7IHBvcnRmb2xpb0RpciwgcG9ydCwgb3BlbkJyb3dzZXI6ICFub0Jyb3dzZXIsIG1jcEFxbEhhbmRsZXIgfSk7XG4gICAgfSkoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFdlYiBVSSBmYWlsZWQgdG8gc3RhcnQ6XCIsIGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVidWdTdGFydHVwTG9nZ2luZykge1xuICAgICAgY29uc29sZS5lcnJvcihcIkRFQlVHOiBTZXJ2ZXIgc3RhcnR1cCBjb25kaXRpb24gbWV0LiBDYWxsaW5nIHN0YXJ0U2VydmVyV2l0aFJldHJ5LlwiKTtcbiAgICB9XG4gICAgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAvLyBOb3RlOiBVc2luZyBjb25zb2xlLmVycm9yIGhlcmUgaXMgaW50ZW50aW9uYWwgYXMgaXQncyB0aGUgZmluYWwgZXJyb3IgYmVmb3JlIGV4aXRcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
700
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGtFQUFrRTtBQUNsRSw4REFBOEQ7QUFDOUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixpREFBaUQ7QUFDakQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUU7UUFDM0MsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0QsS0FBSyxFQUFFLEtB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LENBQUMsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0Qsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLG9GQUFvRjtZQUNwRixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vLyBMb2FkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIC5lbnYgZmlsZXMgQkVGT1JFIGFueXRoaW5nIGVsc2Vcbi8vIFRoaXMgZW5zdXJlcyAuZW52LmxvY2FsIGFuZCAuZW52IGFyZSBsb2FkZWQgZm9yIGFsbCBtb2R1bGVzXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuL2NvbmZpZy9lbnYuanMnO1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zdGRpby5qc1wiO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyIH0gZnJvbSBcIi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi91dGlscy9sb2dnZXIuanNcIjtcbmltcG9ydCB7IERvbGxob3VzZUNvbnRhaW5lciB9IGZyb20gXCIuL2RpL0NvbnRhaW5lci5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tIFwiLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uYWxUZWxlbWV0cnksIFN0YXJ0dXBUaW1lciB9IGZyb20gXCIuL3RlbGVtZXRyeS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgSW5kaWNhdG9yQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnL2luZGljYXRvci1jb25maWcuanNcIjtcbmltcG9ydCB0eXBlIHsgSVRvb2xIYW5kbGVyIH0gZnJvbSBcIi4vc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRvb2xSZWdpc3RyeSB9IGZyb20gXCIuL2hhbmRsZXJzL1Rvb2xSZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQZXJzb25hSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL1BlcnNvbmFIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnRDUlVESGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0VsZW1lbnRDUlVESGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0NvbGxlY3Rpb25IYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvcnRmb2xpb0hhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9Qb3J0Zm9saW9IYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdpdEh1YkF1dGhIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvR2l0SHViQXV0aEhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheUNvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9EaXNwbGF5Q29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJZGVudGl0eUhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9JZGVudGl0eUhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlnSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgU3luY0hhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9TeW5jSGFuZGxlclYyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VkSW5kZXhIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvRW5oYW5jZWRJbmRleEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tIFwiLi9jb25maWcvQ29uZmlnTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tIFwiLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanNcIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnNlbWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9lbnNlbWJsZXMvdHlwZXMuanNcIjtcblxuLy8gRGVmZW5zaXZlIGVycm9yIGhhbmRsaW5nIGZvciBucHgvQ0xJIGV4ZWN1dGlvblxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyb3IpID0+IHtcbiAgbG9nZ2VyLmVycm9yKCdVbmhhbmRsZWQgZXhjZXB0aW9uIGRldGVjdGVkJywge1xuICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgc3RhY2s6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZFxuICB9KTtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAocmVhc29uLCBwcm9taXNlKSA9PiB7XG4gIGxvZ2dlci5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIGRldGVjdGVkJywge1xuICAgIHJlYXNvbjogcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24ubWVzc2FnZSA6IFN0cmluZyhyZWFzb24pLFxuICAgIHN0YWNrOiByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5zdGFjayA6IHVuZGVmaW5lZCxcbiAgICBwcm9taXNlXG4gIH0pO1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWQnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5cbi8vIE9ubHkgbG9nIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbiBkZWJ1ZyBtb2RlXG5pZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RFQlVHKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIERlYnVnIG1vZGUgZW5hYmxlZCcpO1xufVxuXG5leHBvcnQgY2xhc3MgRG9sbGhvdXNlTUNQU2VydmVyIGltcGxlbWVudHMgSVRvb2xIYW5kbGVyIHtcbiAgcHJpdmF0ZSBzZXJ2ZXI6IFNlcnZlcjtcbiAgcHVibGljIHBlcnNvbmFzRGlyOiBzdHJpbmcgfCBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRVc2VyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbGl6YXRpb25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29udGFpbmVyOiBEb2xsaG91c2VDb250YWluZXI7XG4gIHByaXZhdGUgdG9vbFJlZ2lzdHJ5PzogVG9vbFJlZ2lzdHJ5O1xuICBwcml2YXRlIGVuaGFuY2VkSW5kZXhIYW5kbGVyPzogRW5oYW5jZWRJbmRleEhhbmRsZXI7XG4gIHByaXZhdGUgcGVyc29uYUhhbmRsZXI/OiBQZXJzb25hSGFuZGxlcjtcbiAgcHJpdmF0ZSBlbGVtZW50Q1JVREhhbmRsZXI/OiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI/OiBDb2xsZWN0aW9uSGFuZGxlcjtcbiAgcHJpdmF0ZSBwb3J0Zm9saW9IYW5kbGVyPzogUG9ydGZvbGlvSGFuZGxlcjtcbiAgcHJpdmF0ZSBnaXRodWJBdXRoSGFuZGxlcj86IEdpdEh1YkF1dGhIYW5kbGVyO1xuICBwcml2YXRlIGRpc3BsYXlDb25maWdIYW5kbGVyPzogRGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gIHByaXZhdGUgaWRlbnRpdHlIYW5kbGVyPzogSWRlbnRpdHlIYW5kbGVyO1xuICBwcml2YXRlIGNvbmZpZ0hhbmRsZXI/OiBDb25maWdIYW5kbGVyO1xuICBwcml2YXRlIHN5bmNIYW5kbGVyPzogU3luY0hhbmRsZXI7XG4gIHByaXZhdGUgcmVzb3VyY2VIYW5kbGVyPzogaW1wb3J0KCcuL2hhbmRsZXJzL1Jlc291cmNlSGFuZGxlci5qcycpLlJlc291cmNlSGFuZGxlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERvbGxob3VzZU1DUFNlcnZlciBpbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyIERvbGxob3VzZUNvbnRhaW5lciBpbnN0YW5jZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAqICAgICAgICAgICAgICAgICAgVXNlIGBuZXcgRG9sbGhvdXNlQ29udGFpbmVyKClgIGZvciBwcm9kdWN0aW9uIG9yXG4gICAqICAgICAgICAgICAgICAgICAgYGNyZWF0ZUludGVncmF0aW9uQ29udGFpbmVyKCkuY29udGFpbmVyYCBmb3IgdGVzdHMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXI6IERvbGxob3VzZUNvbnRhaW5lcikge1xuICAgIC8vIEJ1aWxkIGNhcGFiaWxpdGllcyBvYmplY3QgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAgLy8gUmVzb3VyY2VzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IChhZHZlcnRpc2VfcmVzb3VyY2VzOiBmYWxzZSlcbiAgICBjb25zdCBjYXBhYmlsaXRpZXM6IGFueSA9IHtcbiAgICAgIHRvb2xzOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gQ2hlY2sgaWYgcmVzb3VyY2VzIHNob3VsZCBiZSBhZHZlcnRpc2VkXG4gICAgLy8gVGhpcyBpcyBhIGZ1dHVyZS1wcm9vZiBpbXBsZW1lbnRhdGlvbiAtIHJlc291cmNlcyBhcmUgb3B0LWluXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluaXRpYWxpemUgQ29uZmlnTWFuYWdlciB0byBjaGVjayByZXNvdXJjZSBzZXR0aW5nc1xuICAgICAgLy8gTm90ZTogQ29uZmlnIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgeWV0LCBzbyB3ZSBjaGVjayBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBJZiBjb25maWcgaXMgbm90IGluaXRpYWxpemVkLCBkZWZhdWx0cyAoYWR2ZXJ0aXNlX3Jlc291cmNlczogZmFsc2UpIGFwcGx5XG4gICAgICBjb25zdCBmaWxlTG9ja01hbmFnZXIgPSBuZXcgRmlsZUxvY2tNYW5hZ2VyKCk7XG4gICAgICBjb25zdCBmaWxlT3BlcmF0aW9ucyA9IG5ldyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UoZmlsZUxvY2tNYW5hZ2VyKTtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcihmaWxlT3BlcmF0aW9ucywgb3MpO1xuICAgICAgY29uc3QgcmVzb3VyY2VzQ29uZmlnID0gY29uZmlnTWFuYWdlci5nZXRTZXR0aW5nPGFueT4oJ2VsZW1lbnRzLmVuaGFuY2VkX2luZGV4LnJlc291cmNlcycpO1xuXG4gICAgICBpZiAocmVzb3VyY2VzQ29uZmlnPy5hZHZlcnRpc2VfcmVzb3VyY2VzID09PSB0cnVlKSB7XG4gICAgICAgIGNhcGFiaWxpdGllcy5yZXNvdXJjZXMgPSB7fTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tEb2xsaG91c2VNQ1BdIE1DUCBSZXNvdXJjZXMgY2FwYWJpbGl0eSBhZHZlcnRpc2VkIChlbmFibGVkIHZpYSBjb25maWcpJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gTUNQIFJlc291cmNlcyBjYXBhYmlsaXR5IE5PVCBhZHZlcnRpc2VkIChkaXNhYmxlZCBieSBkZWZhdWx0KScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDb25maWcgbm90IGluaXRpYWxpemVkIHlldCAtIHVzZSBzYWZlIGRlZmF1bHQgKG5vIHJlc291cmNlcylcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0RvbGxob3VzZU1DUF0gQ29uZmlnIG5vdCBpbml0aWFsaXplZCB5ZXQsIHJlc291cmNlcyBjYXBhYmlsaXR5IGRpc2FibGVkIGJ5IGRlZmF1bHQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHRoaXMuc2VydmVyID0gbmV3IFNlcnZlcihcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJkb2xsaG91c2VtY3BcIixcbiAgICAgICAgdmVyc2lvbjogUEFDS0FHRV9WRVJTSU9OLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVIgfHwgbnVsbDtcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgfVxuICBcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplUG9ydGZvbGlvKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLnByZXBhcmVQb3J0Zm9saW8oKTtcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gdGhpcy5jb250YWluZXIuZ2V0UGVyc29uYXNEaXIoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIGluaXRpYWxpemF0aW9uIGFmdGVyIHBvcnRmb2xpbyBpcyByZWFkeVxuICAgKiBGSVggIzYxMDogVGhpcyB3YXMgcHJldmlvdXNseSBpbiBhIC50aGVuKCkgY2FsbGJhY2sgaW4gdGhlIGNvbnN0cnVjdG9yXG4gICAqIE5vdyBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIHJ1bigpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29tcGxldGVJbml0aWFsaXphdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgaGFuZGxlcnMgd2l0aCBzZXJ2ZXIgaW5zdGFuY2UgLSBhbGwgc3RhdGUgbWFuYWdlZCBieSBzZXJ2aWNlc1xuICAgIGNvbnN0IGhhbmRsZXJzID0gYXdhaXQgdGhpcy5jb250YWluZXIuY3JlYXRlSGFuZGxlcnModGhpcy5zZXJ2ZXIpO1xuXG4gICAgdGhpcy5wZXJzb25hSGFuZGxlciA9IGhhbmRsZXJzLnBlcnNvbmFIYW5kbGVyO1xuICAgIHRoaXMuZWxlbWVudENSVURIYW5kbGVyID0gaGFuZGxlcnMuZWxlbWVudENydWRIYW5kbGVyO1xuICAgIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBoYW5kbGVycy5jb2xsZWN0aW9uSGFuZGxlcjtcbiAgICB0aGlzLnBvcnRmb2xpb0hhbmRsZXIgPSBoYW5kbGVycy5wb3J0Zm9saW9IYW5kbGVyO1xuICAgIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIgPSBoYW5kbGVycy5naXRodWJBdXRoSGFuZGxlcjtcbiAgICB0aGlzLmRpc3BsYXlDb25maWdIYW5kbGVyID0gaGFuZGxlcnMuZGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gICAgdGhpcy5pZGVudGl0eUhhbmRsZXIgPSBoYW5kbGVycy5pZGVudGl0eUhhbmRsZXI7XG4gICAgdGhpcy5jb25maWdIYW5kbGVyID0gaGFuZGxlcnMuY29uZmlnSGFuZGxlcjtcbiAgICB0aGlzLnN5bmNIYW5kbGVyID0gaGFuZGxlcnMuc3luY0hhbmRsZXI7XG4gICAgdGhpcy50b29sUmVnaXN0cnkgPSBoYW5kbGVycy50b29sUmVnaXN0cnk7XG4gICAgdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciA9IGhhbmRsZXJzLmVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgcmVzb3VyY2UgaGFuZGxlcnNcbiAgICAvLyBSZXNvdXJjZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHJlcXVpcmUgZXhwbGljaXQgY29uZmlndXJhdGlvblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlc291cmNlSGFuZGxlcnMoKTtcblxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBNQ1AgUmVzb3VyY2VzIGhhbmRsZXJzIGlmIGVuYWJsZWQgaW4gY29uZmlndXJhdGlvblxuICAgKiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gb3RoZXIgaGFuZGxlcnMgYmVjYXVzZSBpdCByZXF1aXJlcyBkeW5hbWljIGltcG9ydFxuICAgKiBhbmQgY29uZGl0aW9uYWwgcmVnaXN0cmF0aW9uIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVJlc291cmNlSGFuZGxlcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgUmVzb3VyY2VIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGFuZGxlcnMvUmVzb3VyY2VIYW5kbGVyLmpzJyk7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxDb25maWdNYW5hZ2VyPignQ29uZmlnTWFuYWdlcicpO1xuXG4gICAgICB0aGlzLnJlc291cmNlSGFuZGxlciA9IG5ldyBSZXNvdXJjZUhhbmRsZXIoY29uZmlnTWFuYWdlcik7XG4gICAgICBhd2FpdCB0aGlzLnJlc291cmNlSGFuZGxlci5pbml0aWFsaXplKHRoaXMuc2VydmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gUmVzb3VyY2VzIGFyZSBvcHRpb25hbCAtIGRvbid0IGZhaWwgc2VydmVyIHN0YXJ0dXAgaWYgdGhleSBjYW4ndCBiZSBpbml0aWFsaXplZFxuICAgICAgbG9nZ2VyLndhcm4oJ1tEb2xsaG91c2VNQ1BdIEZhaWxlZCB0byBpbml0aWFsaXplIHJlc291cmNlIGhhbmRsZXJzLCBjb250aW51aW5nIHdpdGhvdXQgcmVzb3VyY2VzJyk7XG4gICAgICBsb2dnZXIuZGVidWcoYFJlc291cmNlIGluaXRpYWxpemF0aW9uIGVycm9yOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEVuc3VyZSBzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBvcGVyYXRpb25cbiAgICogRklYICM2MTA6IEFkZGVkIGZvciB0ZXN0IGNvbXBhdGliaWxpdHkgLSB0ZXN0cyBkb24ndCBjYWxsIHJ1bigpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXRcbiAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdGFydCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAobGF6eSlcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5lbnN1cmVJbml0aWFsaXplZCcsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgfVxuICBcbiAgLy8gVG9vbCBoYW5kbGVyIG1ldGhvZHMgLSBub3cgcHVibGljIGZvciBhY2Nlc3MgZnJvbSB0b29sIG1vZHVsZXNcbiAgXG4gIGFzeW5jIGxpc3RQZXJzb25hcygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmxpc3RQZXJzb25hcygpO1xuICB9XG5cbiAgLy8gVXNlIGFjdGl2YXRlRWxlbWVudChuYW1lLCAncGVyc29uYScpLCBkZWFjdGl2YXRlRWxlbWVudChuYW1lLCAncGVyc29uYScpLFxuICAvLyBnZXRBY3RpdmVFbGVtZW50cygncGVyc29uYScpLCBhbmQgZ2V0RWxlbWVudERldGFpbHMobmFtZSwgJ3BlcnNvbmEnKSBpbnN0ZWFkLlxuICAvLyBUaGVzZSB3ZXJlIHJlbW92ZWQgdG8gbm9ybWFsaXplIHBlcnNvbmEgaGFuZGxpbmcgdGhyb3VnaCB0aGUgZ2VuZXJpYyBlbGVtZW50IEFQSS5cblxuICBhc3luYyByZWxvYWRQZXJzb25hcygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLnJlbG9hZFBlcnNvbmFzKCk7XG4gIH1cblxuICAvLyA9PT09PSBFbGVtZW50IE1ldGhvZHMgKEdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKSA9PT09PVxuICBcbiAgYXN5bmMgbGlzdEVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0UGVyc29uYXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubGlzdEVsZW1lbnRzKG5vcm1hbGl6ZWRUeXBlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIubGlzdEVsZW1lbnRzJywgZXJyb3IsIHsgdHlwZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gbGlzdCAke3R5cGV9OiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjgxIC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXJcbiAgICAgIC8vIFBlcnNvbmFIYW5kbGVyLmFjdGl2YXRlUGVyc29uYSBpcyBkZXByZWNhdGVkOyBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5IGhhbmRsZXMgcGVyc29uYXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5hY3RpdmF0ZUVsZW1lbnQobmFtZSwgbm9ybWFsaXplZFR5cGUsIGNvbnRleHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5hY3RpdmF0ZUVsZW1lbnQnLCBlcnJvciwgeyB0eXBlLCBuYW1lIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRBY3RpdmVFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjgxIC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXJcbiAgICAgIC8vIFBlcnNvbmFIYW5kbGVyLmdldEFjdGl2ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZ2V0QWN0aXZlRWxlbWVudHMobm9ybWFsaXplZFR5cGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5nZXRBY3RpdmVFbGVtZW50cycsIGVycm9yLCB7IHR5cGUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGdldCBhY3RpdmUgJHt0eXBlfTogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyODEgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlclxuICAgICAgLy8gUGVyc29uYUhhbmRsZXIuZGVhY3RpdmF0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZGVhY3RpdmF0ZUVsZW1lbnQobmFtZSwgbm9ybWFsaXplZFR5cGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5kZWFjdGl2YXRlRWxlbWVudCcsIGVycm9yLCB7IHR5cGUsIG5hbWUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZ2V0RWxlbWVudERldGFpbHMobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmdldFBlcnNvbmFEZXRhaWxzIGlzIGRlcHJlY2F0ZWQ7IFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgaGFuZGxlcyBwZXJzb25hc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZ2V0RWxlbWVudERldGFpbHMobmFtZSwgbm9ybWFsaXplZFR5cGUpO1xuICB9XG4gIFxuICBhc3luYyByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5yZWxvYWRFbGVtZW50cyh0eXBlKTtcbiAgfVxuXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLnJlbmRlclRlbXBsYXRlKG5hbWUsIHZhcmlhYmxlcyk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQWdlbnQobmFtZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZXhlY3V0ZUFnZW50KG5hbWUsIHBhcmFtZXRlcnMpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVsZW1lbnQgaW4gdGhlIHBvcnRmb2xpby5cbiAgICogQHBhcmFtIGFyZ3MuZWxlbWVudHMgLSBGb3IgZW5zZW1ibGVzOiBhcnJheSBvZiBlbGVtZW50IHJlZmVyZW5jZXMgKElzc3VlICMyNzgpXG4gICAqL1xuICBhc3luYyBjcmVhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZzsgY29udGVudD86IHN0cmluZzsgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBlbGVtZW50cz86IEVuc2VtYmxlRWxlbWVudFtdfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyMCAtIFJlbW92ZSBwZXJzb25hIHNwZWNpYWwgY2FzZSwgcm91dGUgYWxsIGVsZW1lbnQgY3JlYXRpb24gdGhyb3VnaCBFbGVtZW50Q1JVREhhbmRsZXJcbiAgICAvLyBUaGlzIGVuc3VyZXMgY29uc2lzdGVudCBkdXBsaWNhdGUgY2hlY2tpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBhbGwgZWxlbWVudCB0eXBlc1xuICAgIC8vIEZJWDogSXNzdWUgIzI3OCAtIFN1cHBvcnQgZWxlbWVudHMgcGFyYW1ldGVyIGZvciBlbnNlbWJsZXNcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuY3JlYXRlRWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIGVkaXRFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmVkaXRQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IGVsZW1lbnRDUlVESGFuZGxlciBoYW5kbGVzIHBlcnNvbmFzIHZpYSBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5XG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUoYXJncy50eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmVkaXRFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgc3RyaWN0PzogYm9vbGVhbn0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci52YWxpZGF0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgZWxlbWVudENSVURIYW5kbGVyIGhhbmRsZXMgcGVyc29uYXNcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEudmFsaWRhdGVFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmRlbGV0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgZWxlbWVudENSVURIYW5kbGVyIGhhbmRsZXMgcGVyc29uYXMgdmlhIGRlZGljYXRlZCBkZWxldGUgcGF0aFxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKGFyZ3MudHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5kZWxldGVFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5icm93c2VDb2xsZWN0aW9uKHNlY3Rpb24sIHR5cGUpO1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoQ29sbGVjdGlvbihxdWVyeTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5zZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb25FbmhhbmNlZChxdWVyeTogc3RyaW5nLCBvcHRpb25zOiBhbnkgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuc2VhcmNoQ29sbGVjdGlvbkVuaGFuY2VkKHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25Db250ZW50KHBhdGg6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuZ2V0Q29sbGVjdGlvbkNvbnRlbnQocGF0aCk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQ29udGVudChpbnB1dFBhdGg6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdENvbnRlbnQoY29udGVudElkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuc3VibWl0Q29udGVudChjb250ZW50SWRlbnRpZmllcik7XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ2FjaGVIZWFsdGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5nZXRDb2xsZWN0aW9uQ2FjaGVIZWFsdGgoKTtcbiAgfVxuXG4gIC8vIFVzZXIgaWRlbnRpdHkgbWFuYWdlbWVudCAtIGRlbGVnYXRlZCB0byBJZGVudGl0eUhhbmRsZXJcbiAgYXN5bmMgc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lLCBlbWFpbCk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VySWRlbnRpdHkoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuZ2V0VXNlcklkZW50aXR5KCk7XG4gIH1cblxuICBhc3luYyBjbGVhclVzZXJJZGVudGl0eSgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlIYW5kbGVyIS5jbGVhclVzZXJJZGVudGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlIYW5kbGVyIS5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gIH1cblxuICAvLyBHaXRIdWIgYXV0aGVudGljYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBzZXR1cEdpdEh1YkF1dGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyIS5zZXR1cEdpdEh1YkF1dGgoKTtcbiAgfVxuICBcbiAgYXN5bmMgY2hlY2tHaXRIdWJBdXRoKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuY2hlY2tHaXRIdWJBdXRoKCk7XG4gIH1cbiAgXG4gIGFzeW5jIGdldE9BdXRoSGVscGVyU3RhdHVzKHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuZ2V0T0F1dGhIZWxwZXJTdGF0dXModmVyYm9zZSk7XG4gIH1cbiAgXG5cbiAgXG4gIGFzeW5jIGNsZWFyR2l0SHViQXV0aCgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmNsZWFyR2l0SHViQXV0aCgpO1xuICB9XG5cbiAgLy8gT0F1dGggY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50XG4gIGFzeW5jIGNvbmZpZ3VyZU9BdXRoKGNsaWVudF9pZD86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuY29uZmlndXJlT0F1dGgoY2xpZW50X2lkKTtcbiAgfVxuXG5cblxuXG5cblxuXG5cblxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgaW5kaWNhdG9yIHNldHRpbmdzIChkZWxlZ2F0ZWQgdG8gRGlzcGxheUNvbmZpZ0hhbmRsZXIpXG4gICAqL1xuICBhc3luYyBjb25maWd1cmVJbmRpY2F0b3IoY29uZmlnOiBQYXJ0aWFsPEluZGljYXRvckNvbmZpZz4pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUNvbmZpZ0hhbmRsZXIhLmNvbmZpZ3VyZUluZGljYXRvcihjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGluZGljYXRvciBjb25maWd1cmF0aW9uIChkZWxlZ2F0ZWQgdG8gRGlzcGxheUNvbmZpZ0hhbmRsZXIpXG4gICAqL1xuICBhc3luYyBnZXRJbmRpY2F0b3JDb25maWcoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlDb25maWdIYW5kbGVyIS5nZXRJbmRpY2F0b3JDb25maWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgY29sbGVjdGlvbiBzdWJtaXNzaW9uIHNldHRpbmdzIChkZWxlZ2F0ZWQgdG8gQ29sbGVjdGlvbkhhbmRsZXIpXG4gICAqL1xuICBhc3luYyBjb25maWd1cmVDb2xsZWN0aW9uU3VibWlzc2lvbihhdXRvU3VibWl0OiBib29sZWFuKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5jb25maWd1cmVDb2xsZWN0aW9uU3VibWlzc2lvbihhdXRvU3VibWl0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29sbGVjdGlvbiBzdWJtaXNzaW9uIGNvbmZpZ3VyYXRpb24gKGRlbGVnYXRlZCB0byBDb2xsZWN0aW9uSGFuZGxlcilcbiAgICovXG4gIGFzeW5jIGdldENvbGxlY3Rpb25TdWJtaXNzaW9uQ29uZmlnKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuZ2V0Q29sbGVjdGlvblN1Ym1pc3Npb25Db25maWcoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhIHNpbmdsZSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBleHBvcnRQZXJzb25hKHBlcnNvbmFOYW1lOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmV4cG9ydFBlcnNvbmEocGVyc29uYU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhbGwgcGVyc29uYXNcbiAgICovXG4gIGFzeW5jIGV4cG9ydEFsbFBlcnNvbmFzKGluY2x1ZGVEZWZhdWx0cyA9IHRydWUpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmV4cG9ydEFsbFBlcnNvbmFzKGluY2x1ZGVEZWZhdWx0cyk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgcGVyc29uYVxuICAgKi9cbiAgYXN5bmMgaW1wb3J0UGVyc29uYShzb3VyY2U6IHN0cmluZywgb3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmltcG9ydFBlcnNvbmEoc291cmNlLCBvdmVyd3JpdGUpO1xuICB9XG5cblxuICAvKipcbiAgICogUG9ydGZvbGlvIG1hbmFnZW1lbnQgbWV0aG9kc1xuICAgKi9cblxuICAvKipcbiAgICogQ2hlY2sgcG9ydGZvbGlvIHN0YXR1cyBpbmNsdWRpbmcgcmVwb3NpdG9yeSBleGlzdGVuY2UgYW5kIHN5bmMgaW5mb3JtYXRpb25cbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb1N0YXR1cyh1c2VybmFtZT86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5wb3J0Zm9saW9TdGF0dXModXNlcm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgR2l0SHViIHBvcnRmb2xpbyByZXBvc2l0b3J5XG4gICAqL1xuICBhc3luYyBpbml0UG9ydGZvbGlvKG9wdGlvbnM6IHtyZXBvc2l0b3J5TmFtZT86IHN0cmluZzsgcHJpdmF0ZT86IGJvb2xlYW47IGRlc2NyaXB0aW9uPzogc3RyaW5nfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5pbml0UG9ydGZvbGlvKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBwb3J0Zm9saW8gc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb0NvbmZpZyhvcHRpb25zOiB7YXV0b1N5bmM/OiBib29sZWFuOyBkZWZhdWx0VmlzaWJpbGl0eT86IHN0cmluZzsgYXV0b1N1Ym1pdD86IGJvb2xlYW47IHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5wb3J0Zm9saW9Db25maWcob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3luYyBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcbiAgICovXG4gIGFzeW5jIHN5bmNQb3J0Zm9saW8ob3B0aW9uczoge1xuICAgIGRpcmVjdGlvbjogc3RyaW5nO1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgZm9yY2U6IGJvb2xlYW47XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGNvbmZpcm1EZWxldGlvbnM/OiBib29sZWFuO1xuICB9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnN5bmNQb3J0Zm9saW8ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyAtIGRlbGVnYXRlcyB0byBDb25maWdIYW5kbGVyXG4gICovXG4gIGFzeW5jIGhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zOiBhbnkpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnSGFuZGxlciEuaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzeW5jIG9wZXJhdGlvbnMgLSBkZWxlZ2F0ZXMgdG8gU3luY0hhbmRsZXJcbiAgICovXG4gIGFzeW5jIGhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9uczogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnN5bmNIYW5kbGVyIS5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGxvY2FsIHBvcnRmb2xpbyB1c2luZyB0aGUgbWV0YWRhdGEgaW5kZXggc3lzdGVtXG4gICAqIFRoaXMgcHJvdmlkZXMgZmFzdCwgY29tcHJlaGVuc2l2ZSBzZWFyY2ggYWNyb3NzIGFsbCBlbGVtZW50IHR5cGVzXG4gICAqL1xuICBhc3luYyBzZWFyY2hQb3J0Zm9saW8ob3B0aW9uczoge1xuICAgIHF1ZXJ5OiBzdHJpbmc7IFxuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nOyBcbiAgICBmdXp6eU1hdGNoPzogYm9vbGVhbjsgXG4gICAgbWF4UmVzdWx0cz86IG51bWJlcjsgXG4gICAgaW5jbHVkZUtleXdvcmRzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZVRhZ3M/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVHJpZ2dlcnM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlRGVzY3JpcHRpb25zPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5zZWFyY2hQb3J0Zm9saW8ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGFjcm9zcyBhbGwgc291cmNlcyAobG9jYWwsIEdpdEh1YiwgY29sbGVjdGlvbikgdXNpbmcgVW5pZmllZEluZGV4TWFuYWdlclxuICAgKiBUaGlzIHByb3ZpZGVzIGNvbXByZWhlbnNpdmUgc2VhcmNoIHdpdGggZHVwbGljYXRlIGRldGVjdGlvbiBhbmQgdmVyc2lvbiBjb21wYXJpc29uXG4gICAqL1xuICBhc3luYyBzZWFyY2hBbGwob3B0aW9uczoge1xuICAgIHF1ZXJ5OiBzdHJpbmc7XG4gICAgc291cmNlcz86IHN0cmluZ1tdO1xuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nO1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgcGFnZVNpemU/OiBudW1iZXI7XG4gICAgc29ydEJ5Pzogc3RyaW5nO1xuICB9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnNlYXJjaEFsbChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHNlbWFudGljYWxseSBzaW1pbGFyIGVsZW1lbnRzIHVzaW5nIEVuaGFuY2VkIEluZGV4XG4gICAqL1xuICBhc3luYyBmaW5kU2ltaWxhckVsZW1lbnRzKG9wdGlvbnM6IHtcbiAgICBlbGVtZW50TmFtZTogc3RyaW5nO1xuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgdGhyZXNob2xkOiBudW1iZXI7XG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciEuZmluZFNpbWlsYXJFbGVtZW50cyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHJlbGF0aW9uc2hpcHMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudFxuICAgKi9cbiAgYXN5bmMgZ2V0RWxlbWVudFJlbGF0aW9uc2hpcHMob3B0aW9uczoge1xuICAgIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcmVsYXRpb25zaGlwVHlwZXM/OiBzdHJpbmdbXTtcbiAgfSkge1xuICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyIS5nZXRFbGVtZW50UmVsYXRpb25zaGlwcyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIGVsZW1lbnRzIGJ5IGFjdGlvbiB2ZXJiXG4gICAqL1xuICBhc3luYyBzZWFyY2hCeVZlcmIob3B0aW9uczoge1xuICAgIHZlcmI6IHN0cmluZztcbiAgICBsaW1pdDogbnVtYmVyO1xuICB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIhLnNlYXJjaEJ5VmVyYihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RhdGlzdGljcyBhYm91dCBFbmhhbmNlZCBJbmRleCByZWxhdGlvbnNoaXBzXG4gICAqL1xuICBhc3luYyBnZXRSZWxhdGlvbnNoaXBTdGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciEuZ2V0UmVsYXRpb25zaGlwU3RhdHMoKTtcbiAgfVxuXG4gIGFzeW5jIHJ1bigpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJEb2xsaG91c2VNQ1BTZXJ2ZXIucnVuKCkgc3RhcnRlZFwiKTtcbiAgICBsb2dnZXIuaW5mbyhcIlN0YXJ0aW5nIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG5cbiAgICBjb25zdCB0aW1lciA9IHRoaXMuY29udGFpbmVyLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJyk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBDcml0aWNhbCBwYXRoIG9ubHkg4oCUIGdldCB0byBjb25uZWN0KCkgYXMgZmFzdCBhcyBwb3NzaWJsZVxuICAgIC8vIE5vbi1jcml0aWNhbCB3b3JrIChtZW1vcnkgYXV0by1sb2FkLCBhY3RpdmF0aW9uIHJlc3RvcmUsIGV0Yy4pIGlzXG4gICAgLy8gZGVmZXJyZWQgdG8gY29tcGxldGVEZWZlcnJlZFNldHVwKCkgd2hpY2ggcnVucyBwb3N0LWNvbm5lY3QuXG4gICAgdHJ5IHtcbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ3BvcnRmb2xpb19wcmVwYXJlJywgdHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgIHRpbWVyLmVuZFBoYXNlKCdwb3J0Zm9saW9fcHJlcGFyZScpO1xuXG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdoYW5kbGVyX2NyZWF0aW9uJywgdHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgIHRpbWVyLmVuZFBoYXNlKCdoYW5kbGVyX2NyZWF0aW9uJyk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgb3BlcmF0aW9uYWwgdGVsZW1ldHJ5IChhc3luYywgbm9uLWJsb2NraW5nLCBuZXZlciB0aHJvd3MpXG4gICAgICBjb25zdCBvcGVyYXRpb25hbFRlbGVtZXRyeSA9IHRoaXMuY29udGFpbmVyLnJlc29sdmU8T3BlcmF0aW9uYWxUZWxlbWV0cnk+KCdPcGVyYXRpb25hbFRlbGVtZXRyeScpO1xuICAgICAgb3BlcmF0aW9uYWxUZWxlbWV0cnkuaW5pdGlhbGl6ZSgpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLy8gVGVsZW1ldHJ5IGVycm9ycyBhcmUgbG9nZ2VkIGludGVybmFsbHksIHNhZmUgdG8gaWdub3JlIGhlcmVcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbyhcIlBvcnRmb2xpbyBhbmQgcGVyc29uYXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuXG4gICAgICBpZiAoIWVudi5ET0xMSE9VU0VfR0FURUtFRVBFUl9FTkFCTEVEKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwi4pqg77iPICBHYXRla2VlcGVyIGlzIERJU0FCTEVEIChET0xMSE9VU0VfR0FURUtFRVBFUl9FTkFCTEVEPWZhbHNlKS4gQWxsIHBlcm1pc3Npb24gY2hlY2tzIGFyZSBieXBhc3NlZC5cIik7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciByZWFkeSAtIHdhaXRpbmcgZm9yIE1DUCBjb25uZWN0aW9uIG9uIHN0ZGlvXCIpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRG9sbGhvdXNlTUNQU2VydmVyLnJ1bigpIGNvbXBsZXRlZCBpbml0aWFsaXphdGlvblwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIucnVuLmluaXRpYWxpemF0aW9uJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHRvIHByZXZlbnQgc2VydmVyIGZyb20gc3RhcnRpbmcgd2l0aCBpbmNvbXBsZXRlIGluaXRpYWxpemF0aW9uXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG5cbiAgICAvLyBTZXQgdXAgZ3JhY2VmdWwgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBjb25zdCBjbGVhbnVwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXCJTaHV0dGluZyBkb3duIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmRpc3Bvc2UoKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJDbGVhbnVwIGNvbXBsZXRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGR1cmluZyBjbGVhbnVwXCIsIHsgZXJyb3IgfSk7XG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuXG4gICAgLy8gUmVnaXN0ZXIgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBjbGVhbnVwKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdURVJNJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHSFVQJywgY2xlYW51cCk7XG5cbiAgICAvLyBDb25uZWN0IEFTQVAg4oCUIHRvb2xzIGFyZSByZWdpc3RlcmVkLCBzZXJ2ZXIgY2FuIGFjY2VwdCByZXF1ZXN0c1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ21jcF9jb25uZWN0JywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5zZXJ2ZXIuY29ubmVjdCh0cmFuc3BvcnQpO1xuICAgIHRpbWVyLmVuZFBoYXNlKCdtY3BfY29ubmVjdCcpO1xuICAgIHRpbWVyLm1hcmtDb25uZWN0KCk7XG5cbiAgICAvLyBNYXJrIHRoYXQgTUNQIGlzIG5vdyBjb25uZWN0ZWQgLSBubyBtb3JlIGNvbnNvbGUgb3V0cHV0IGFsbG93ZWRcbiAgICBsb2dnZXIuc2V0TUNQQ29ubmVjdGVkKCk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2IFBoYXNlIDM6IEVtaXQgUkVBRFkgc2VudGluZWwgZm9yIGJyaWRnZSBjbGllbnRzXG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ0RPTExIT1VTRU1DUF9SRUFEWVxcbicpO1xuXG4gICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW9cIik7XG5cbiAgICAvLyBJc3N1ZSAjNzA2IFBoYXNlIDI6IERlZmVycmVkIHNldHVwIOKAlCBydW5zIHBvc3QtY29ubmVjdCwgbm9uLWJsb2NraW5nXG4gICAgLy8gUGF0dGVybiBlbmNyeXB0aW9uLCBiYWNrZ3JvdW5kIHZhbGlkYXRvciwgbWVtb3J5IGF1dG8tbG9hZCwgYWN0aXZhdGlvblxuICAgIC8vIHJlc3RvcmUsIGxvZyBob29rcywgZGFuZ2VyIHpvbmUgaW5pdCBhbGwgbW92ZSBoZXJlLlxuICAgIGNvbnN0IGRlZmVycmVkUHJvbWlzZSA9IHRoaXMuY29udGFpbmVyLmNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpO1xuICAgIGRlZmVycmVkUHJvbWlzZS5jYXRjaChlcnIgPT4gbG9nZ2VyLndhcm4oJ1tTdGFydHVwXSBEZWZlcnJlZCBzZXR1cCBlcnJvcjonLCBlcnIpKTtcblxuICAgIC8vIElzc3VlICM3MDYgUGhhc2UgNDogV2lyZSBkZWZlcnJlZCBwcm9taXNlIGludG8gU2VydmVyU2V0dXAgZm9yIHJlcXVlc3QgYnVmZmVyaW5nXG4gICAgY29uc3Qgc2VydmVyU2V0dXAgPSB0aGlzLmNvbnRhaW5lci5yZXNvbHZlPGltcG9ydCgnLi9zZXJ2ZXIvU2VydmVyU2V0dXAuanMnKS5TZXJ2ZXJTZXR1cD4oJ1NlcnZlclNldHVwJyk7XG4gICAgc2VydmVyU2V0dXAuc2V0RGVmZXJyZWRTZXR1cFByb21pc2UoZGVmZXJyZWRQcm9taXNlKTtcblxuICAgIC8vIExvZyBzdGFydHVwIHRpbWluZyBhZnRlciBkZWZlcnJlZCBzZXR1cCBjb21wbGV0ZXNcbiAgICBkZWZlcnJlZFByb21pc2UudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXBvcnQgPSB0aW1lci5nZXRSZXBvcnQoKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU3RhcnR1cF0gRnVsbCByZXBvcnQ6IGNvbm5lY3QgYXQgJHtyZXBvcnQuY29ubmVjdEF0TXN9bXMsIGAgK1xuICAgICAgICBgY3JpdGljYWwgJHtyZXBvcnQuY3JpdGljYWxQYXRoTXN9bXMsIGRlZmVycmVkICR7cmVwb3J0LmRlZmVycmVkTXN9bXMsIGAgK1xuICAgICAgICBgdG90YWwgJHtyZXBvcnQudG90YWxNc31tc2ApO1xuICAgIH0pLmNhdGNoKCgpID0+IHsgLyogYWxyZWFkeSBsb2dnZWQgKi8gfSk7XG5cbiAgfVxufVxuXG4vLyBFeHBvcnQgaXMgYWxyZWFkeSBhdCBjbGFzcyBkZWNsYXJhdGlvblxuXG4vLyBPbmx5IHN0YXJ0IHRoZSBzZXJ2ZXIgaWYgdGhpcyBmaWxlIGlzIGJlaW5nIHJ1biBkaXJlY3RseSAobm90IGltcG9ydGVkIGJ5IHRlc3RzKVxuLy8gSGFuZGxlIGRpZmZlcmVudCBleGVjdXRpb24gbWV0aG9kcyAoZGlyZWN0LCBucHgsIENMSSlcbmNvbnN0IHNjcmlwdFBhdGggPSBwcm9jZXNzLmFyZ3Y/LlsxXSA/IHBhdGgubm9ybWFsaXplKHByb2Nlc3MuYXJndlsxXSkgOiAnJztcbmNvbnN0IGlzRGlyZWN0RXhlY3V0aW9uID1cbiAgc2NyaXB0UGF0aC5lbmRzV2l0aChgJHtwYXRoLnNlcH1kaXN0JHtwYXRoLnNlcH1pbmRleC5qc2ApIHx8XG4gIHNjcmlwdFBhdGguZW5kc1dpdGgoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1pbmRleC50c2ApO1xuY29uc3QgaXNOcHhFeGVjdXRpb24gPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKTtcbmNvbnN0IGlzQ2xpRXhlY3V0aW9uID0gcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnL2RvbGxob3VzZW1jcCcpIHx8IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJ1xcXFxkb2xsaG91c2VtY3AnKTtcbmNvbnN0IGlzVGVzdCA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEOyAvLyBUaGlzIGlzIHNldCB3aGVuIEplc3QgcnVucyB0ZXN0c1xuY29uc3QgaXNUZXN0TW9kZSA9IHByb2Nlc3MuZW52LlRFU1RfTU9ERSA9PT0gJ3RydWUnOyAvLyBDaGVjayBmb3IgVEVTVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlXG5jb25zdCBkb2xsaG91c2VEZWJ1Z0ZsYWcgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUc/LnRvTG93ZXJDYXNlKCk7XG5jb25zdCBpc0RlYnVnU3RhcnR1cExvZ2dpbmcgPSBkb2xsaG91c2VEZWJ1Z0ZsYWcgPT09ICd0cnVlJyB8fCBkb2xsaG91c2VEZWJ1Z0ZsYWcgPT09ICcxJztcblxuLy8gUHJvZ3Jlc3NpdmUgc3RhcnR1cCB3aXRoIHJldHJpZXMgZm9yIG5weC9DTEkgZXhlY3V0aW9uXG5jb25zdCBTVEFSVFVQX0RFTEFZUyA9IFsxMCwgNTAsIDEwMCwgMjAwXTsgLy8gUHJvZ3Jlc3NpdmUgZGVsYXlzIGluIG1zXG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyV2l0aFJldHJ5KHJldHJpZXNMZWZ0ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0RlYnVnU3RhcnR1cExvZ2dpbmcpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiREVCVUc6IHN0YXJ0U2VydmVyV2l0aFJldHJ5IGNhbGxlZC5cIik7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRG9sbGhvdXNlQ29udGFpbmVyKCk7XG4gICAgY29uc3Qgc2VydmVyID0gbmV3IERvbGxob3VzZU1DUFNlcnZlcihjb250YWluZXIpO1xuICAgIGF3YWl0IHNlcnZlci5ydW4oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAocmV0cmllc0xlZnQgPiAwICYmIChpc05weEV4ZWN1dGlvbiB8fCBpc0NsaUV4ZWN1dGlvbikpIHtcbiAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgbG9uZ2VyIGRlbGF5XG4gICAgICBjb25zdCBkZWxheUluZGV4ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoIC0gcmV0cmllc0xlZnQ7XG4gICAgICBjb25zdCBkZWxheSA9IFNUQVJUVVBfREVMQVlTW2RlbGF5SW5kZXhdO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICByZXR1cm4gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgLSAxKTtcbiAgICB9XG4gICAgLy8gRmluYWwgZmFpbHVyZSAtIG1pbmltYWwgZXJyb3IgbWVzc2FnZSBmb3Igc2VjdXJpdHlcbiAgICAvLyBOb3RlOiBVc2luZyBjb25zb2xlLmVycm9yIGhlcmUgaXMgaW50ZW50aW9uYWwgYXMgaXQncyB0aGUgZmluYWwgZXJyb3IgYmVmb3JlIGV4aXRcbiAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkXCIsIGVycm9yKTsgLy8gQWRkZWQgZXJyb3Igb2JqZWN0XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmlmICgoaXNEaXJlY3RFeGVjdXRpb24gfHwgaXNOcHhFeGVjdXRpb24gfHwgaXNDbGlFeGVjdXRpb24pICYmICghaXNUZXN0IHx8IGlzVGVzdE1vZGUpKSB7XG4gIC8vIElzc3VlICM3MDQ6IC0td2ViIGZsYWcgc3RhcnRzIHRoZSBwb3J0Zm9saW8gd2ViIFVJIGluc3RlYWQgb2YgTUNQIHNlcnZlclxuICBjb25zdCBpc1dlYk1vZGUgPSBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0td2ViJyk7XG4gIGlmIChpc1dlYk1vZGUpIHtcbiAgICAvLyBJc3N1ZSAjNzk2OiBCb290c3RyYXAgREkgY29udGFpbmVyIGZvciB3ZWItb25seSBtb2RlIHNvIEFQSSByb3V0ZXNcbiAgICAvLyBnbyB0aHJvdWdoIE1DUEFRTEhhbmRsZXIgKHZhbGlkYXRlZCwgY2FjaGVkLCBnYXRla2VlcGVyLWNoZWNrZWQpXG4gICAgLy9cbiAgICAvLyBTdXBwcmVzcyBkZWJ1ZyBvdXRwdXQgaW4gLS13ZWIgbW9kZSB1bmxlc3MgRE9MTEhPVVNFX0RFQlVHIGlzIHNldC5cbiAgICAvLyBUaGUgd2ViIGNvbnNvbGUgY2FwdHVyZXMgYWxsIGxvZ3MgaW4gbWVtb3J5IOKAlCBubyBuZWVkIHRvIGZsb29kIHRoZSB0ZXJtaW5hbC5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRyAmJiAhcHJvY2Vzcy5lbnYuRU5BQkxFX0RFQlVHKSB7XG4gICAgICBsb2dnZXIuc2V0TWluTGV2ZWwoJ2luZm8nKTtcbiAgICB9XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcG9ydGZvbGlvRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAncG9ydGZvbGlvJyk7XG4gICAgICBjb25zdCBwb3J0QXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoYSA9PiBhLnN0YXJ0c1dpdGgoJy0tcG9ydD0nKSk7XG4gICAgICBjb25zdCBwb3J0ID0gcG9ydEFyZyA/IHBhcnNlSW50KHBvcnRBcmcuc3BsaXQoJz0nKVsxXSwgMTApIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgbm9Ccm93c2VyID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLW5vLW9wZW4nKTtcblxuICAgICAgbGV0IG1jcEFxbEhhbmRsZXI7XG4gICAgICBsZXQgbWVtb3J5U2luazogaW1wb3J0KCcuL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcycpLk1lbW9yeUxvZ1NpbmsgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgbWV0cmljc1Npbms6IGltcG9ydCgnLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJykuTWVtb3J5TWV0cmljc1NpbmsgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRG9sbGhvdXNlQ29udGFpbmVyKCk7XG4gICAgICAgIGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlUG9ydGZvbGlvKCk7XG4gICAgICAgIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IGNvbnRhaW5lci5ib290c3RyYXBIYW5kbGVycygpO1xuICAgICAgICBhd2FpdCBjb250YWluZXIuY29tcGxldGVEZWZlcnJlZFNldHVwKCk7XG4gICAgICAgIG1jcEFxbEhhbmRsZXIgPSBidW5kbGUubWNwQXFsSGFuZGxlcjtcbiAgICAgICAgLy8gRXh0cmFjdCBzaW5rcyBmcm9tIGNvbnRhaW5lciDigJQgZGVmZXJyZWQgc2V0dXAgbWF5IGhhdmUgYWxyZWFkeSB3aXJlZCB0aGVtXG4gICAgICAgIHRyeSB7IG1lbW9yeVNpbmsgPSBjb250YWluZXIucmVzb2x2ZTxpbXBvcnQoJy4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJykuTWVtb3J5TG9nU2luaz4oJ01lbW9yeUxvZ1NpbmsnKTsgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgICAgICAgdHJ5IHsgbWV0cmljc1NpbmsgPSBjb250YWluZXIucmVzb2x2ZTxpbXBvcnQoJy4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcycpLk1lbW9yeU1ldHJpY3NTaW5rPignTWVtb3J5TWV0cmljc1NpbmsnKTsgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIENvbnRhaW5lciBib290c3RyYXBwZWQg4oCUIHdlYiByb3V0ZXMgdXNpbmcgTUNQLUFRTCBHYXRld2F5XCIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBDb250YWluZXIgYm9vdHN0cmFwIGZhaWxlZCDigJQgd2ViIHJvdXRlcyB3aWxsIHVzZSBkaXJlY3QgZmlsZXN5c3RlbSBhY2Nlc3MuXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gUmVhc29uOlwiLCAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIHx8IGVycik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBUaGlzIG1heSBpbmRpY2F0ZSBhIGNvcnJ1cHQgcG9ydGZvbGlvIG9yIG1pc3NpbmcgZGVwZW5kZW5jaWVzLlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIHNpbmtzIGV4aXN0IGV2ZW4gaWYgY29udGFpbmVyIGJvb3RzdHJhcCBmYWlsZWQg4oCUXG4gICAgICAvLyBzdGFuZGFsb25lIC0td2ViIG1vZGUgc3RpbGwgbmVlZHMgd29ya2luZyBsb2dzIGFuZCBtZXRyaWNzIHRhYnNcbiAgICAgIGlmICghbWVtb3J5U2luaykge1xuICAgICAgICBjb25zdCB7IE1lbW9yeUxvZ1NpbmsgfSA9IGF3YWl0IGltcG9ydCgnLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnKTtcbiAgICAgICAgbWVtb3J5U2luayA9IG5ldyBNZW1vcnlMb2dTaW5rKHtcbiAgICAgICAgICBhcHBDYXBhY2l0eTogMTAwMDAsXG4gICAgICAgICAgc2VjdXJpdHlDYXBhY2l0eTogNTAwMCxcbiAgICAgICAgICBwZXJmQ2FwYWNpdHk6IDIwMDAsXG4gICAgICAgICAgdGVsZW1ldHJ5Q2FwYWNpdHk6IDEwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFtZXRyaWNzU2luaykge1xuICAgICAgICBjb25zdCB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gPSBhd2FpdCBpbXBvcnQoJy4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcycpO1xuICAgICAgICBtZXRyaWNzU2luayA9IG5ldyBNZW1vcnlNZXRyaWNzU2luaygyNDApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vd2ViL3NlcnZlci5qcycpO1xuICAgICAgYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoeyBwb3J0Zm9saW9EaXIsIHBvcnQsIG9wZW5Ccm93c2VyOiAhbm9Ccm93c2VyLCBtY3BBcWxIYW5kbGVyLCBtZW1vcnlTaW5rLCBtZXRyaWNzU2luayB9KTtcbiAgICB9KSgpLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gV2ViIFVJIGZhaWxlZCB0byBzdGFydDpcIiwgZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWJ1Z1N0YXJ0dXBMb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiREVCVUc6IFNlcnZlciBzdGFydHVwIGNvbmRpdGlvbiBtZXQuIENhbGxpbmcgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkuXCIpO1xuICAgIH1cbiAgICBzdGFydFNlcnZlcldpdGhSZXRyeSgpLmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -314,6 +314,10 @@ Element operations:
314
314
  { operation: "render", params: { element_name: "meeting-notes", variables: { date: "2026-03-03" } } }
315
315
  { operation: "export_element", element_type: "persona", params: { element_name: "Tech-Writer" } }
316
316
  { operation: "open_portfolio_browser" }
317
+ { operation: "open_logs" }
318
+ { operation: "open_metrics" }
319
+ { operation: "open_permissions" }
320
+ { operation: "open_setup" }
317
321
 
318
322
  Memory-specific search (filter by tags):
319
323
  { operation: "search", params: { query: "*", type: "memory", filters: { tags: ["important"] } } }
@@ -517,4 +521,4 @@ Discover required parameters — use mcp_aql_read:
517
521
  }
518
522
  ];
519
523
  }
520
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQVFMVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL01DUEFRTFRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUMsK0VBQStFO0FBQy9FLGlDQUFpQztBQUNqQywrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxRQUFzQjtJQUNqRCxPQUFPLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixJQUFJLEVBQUUsUUFBaUI7SUFDdkIsVUFBVSxFQUFFO1FBQ1YsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsMkJBQTJCO1NBQ3pDO1FBQ0QsWUFBWSxFQUFFO1lBQ1osSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsZ0NBQWdDO1NBQzlDO1FBQ0QsTUFB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QUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7UUFFRCxpRUFBaUU7UUFDakU7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsV0FBVyxFQUFFOzt3QkFFRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29GQTZCOEI7Z0JBQzVFLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsS0FBSztvQkFDbkIsZUFBZSxFQUFFLElBQUksQ0FBRSwwREFBMEQ7aUJBQ2xGO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pELE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN0QztxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1DUC1BUUwgVG9vbHMgLSBVbmlmaWVkIHF1ZXJ5IGludGVyZmFjZSBmb3IgQUkgYWdlbnRzXG4gKlxuICogUHJvdmlkZXMgdHdvIGVuZHBvaW50IG1vZGVzIGNvbmZpZ3VyYWJsZSB2aWEgTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlOlxuICpcbiAqICMjIE1vZGUgMTogQ1JVREUgRW5kcG9pbnRzIChEZWZhdWx0KSAtIE1DUF9BUUxfRU5EUE9JTlRfTU9ERT1jcnVkZVxuICogNSB0b29sczogbWNwX2FxbF9jcmVhdGUsIG1jcF9hcWxfcmVhZCwgbWNwX2FxbF91cGRhdGUsIG1jcF9hcWxfZGVsZXRlLCBtY3BfYXFsX2V4ZWN1dGUgKH40LDMwMCB0b2tlbnMpXG4gKlxuICogIyMgTW9kZSAyOiBTaW5nbGUgRW5kcG9pbnQgKE1pbmltYWwpIC0gTUNQX0FRTF9FTkRQT0lOVF9NT0RFPXNpbmdsZVxuICogMSB0b29sOiBtY3BfYXFsICh+MzUwIHRva2VucylcbiAqIElkZWFsIGZvciBtdWx0aS1zZXJ2ZXIgZGVwbG95bWVudHMgd2hlcmUgdG9rZW4gYnVkZ2V0IGlzIGNvbnN0cmFpbmVkLlxuICpcbiAqIE5vdGU6IFRoZXNlIHRvb2xzIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBNQ1BfSU5URVJGQUNFX01PREU9bWNwYXFsIChkZWZhdWx0KS5cbiAqIFdoZW4gTUNQX0lOVEVSRkFDRV9NT0RFPWRpc2NyZXRlLCBkaXNjcmV0ZSB0b29scyBhcmUgcmVnaXN0ZXJlZCBpbnN0ZWFkLlxuICpcbiAqICMjIFdoeSA1IENSVURFIEVuZHBvaW50cz8gKERlZmF1bHQgTW9kZSlcbiAqXG4gKiBUaGUgNS1lbmRwb2ludCBDUlVERSBwYXR0ZXJuIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSB3YXMgY2hvc2VuIGZvcjpcbiAqXG4gKiAxLiAqKlVzZXIgQ29tcHJlaGVuc2lvbioqOiBDUlVERSBleHRlbmRzIENSVUQgd2l0aCBFeGVjdXRlIGZvciBub24taWRlbXBvdGVudFxuICogICAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlYXNvbiBhYm91dCB3aGF0IGVhY2ggZW5kcG9pbnQgY2FuIGRvLlxuICpcbiAqIDIuICoqUGxhdGZvcm0gQW5ub3RhdGlvbnMqKjogTUNQIHBsYXRmb3JtcyBsaWtlIENoYXRHUFQncyBhcHBzIHJlcXVpcmVcbiAqICAgIHRvb2wgYW5ub3RhdGlvbnMgdGhhdCBkZXNjcmliZSBzYWZldHkgYW5kIGRlc3RydWN0aXZlbmVzcy4gVGhlIDUtZW5kcG9pbnRcbiAqICAgIHNwbGl0IG1hcHMgZGlyZWN0bHkgdG8gZGlzdGluY3QgcGVybWlzc2lvbiBsZXZlbHM6XG4gKiAgICAtIENSRUFURTogYWRkaXRpdmUsIG5vbi1kZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZSlcbiAqICAgIC0gUkVBRDogc2FmZSwgcmVhZC1vbmx5IChyZWFkT25seUhpbnQ6IHRydWUsIGRlc3RydWN0aXZlSGludDogZmFsc2UpXG4gKiAgICAtIFVQREFURTogbW9kaWZ5aW5nLCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICogICAgLSBERUxFVEU6IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKiAgICAtIEVYRUNVVEU6IG5vbi1pZGVtcG90ZW50LCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICpcbiAqIDMuICoqR3JhbnVsYXIgUGVybWlzc2lvbiBDb250cm9sKio6IFVzZXJzIGNhbiBncmFudCBSRUFEIGVuZHBvaW50IGZ1bGwgYWNjZXNzXG4gKiAgICB3aGlsZSBsb2NraW5nIGRvd24gQ1JFQVRFLCBVUERBVEUsIERFTEVURSwgYW5kIEVYRUNVVEUuIFRoaXMgZW5hYmxlcyBzYWZlXG4gKiAgICByZWFkLW9ubHkgaW50ZWdyYXRpb25zIHdpdGhvdXQgZXhwb3NpbmcgbXV0YXRpb24gY2FwYWJpbGl0aWVzLlxuICpcbiAqICMjIFdoeSBTaW5nbGUgRW5kcG9pbnQ/IChNaW5pbWFsIE1vZGUpXG4gKlxuICogVGhlIHNpbmdsZS1lbmRwb2ludCBtb2RlIHdhcyBhZGRlZCBmb3I6XG4gKlxuICogMS4gKipUb2tlbiBFZmZpY2llbmN5Kio6IH4zNTAgdG9rZW5zIHZzIH40LDMwMCB0b2tlbnMgKDkyJSByZWR1Y3Rpb24pXG4gKiAyLiAqKk11bHRpLVNlcnZlciBEZXBsb3ltZW50cyoqOiBXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgTUNQIHNlcnZlcnMsIHRva2VuXG4gKiAgICBidWRnZXRzIGNhbiBiZSBjb25zdHJhaW5lZC4gU2luZ2xlIGVuZHBvaW50IHJlZHVjZXMgb3ZlcmhlYWQuXG4gKiAzLiAqKlNpbXBsaWZpZWQgSW50ZWdyYXRpb24qKjogU29tZSBjbGllbnRzIHByZWZlciBhIHNpbmdsZSBlbnRyeSBwb2ludC5cbiAqXG4gKiBTZWN1cml0eSBpcyBtYWludGFpbmVkIHRocm91Z2ggc2VydmVyLXNpZGUgR2F0ZWtlZXBlciBlbmZvcmNlbWVudCAtIHRoZVxuICogc2VydmVyIGRldGVybWluZXMgd2hpY2ggb3BlcmF0aW9uIHR5cGUgaXMgYmVpbmcgZXhlY3V0ZWQgYW5kIGFwcGxpZXNcbiAqIGFwcHJvcHJpYXRlIHBlcm1pc3Npb24gY2hlY2tzLlxuICpcbiAqICMjIEdyYXBoUUwtU3R5bGUgSW50cm9zcGVjdGlvblxuICpcbiAqIE1DUC1BUUwgZm9sbG93cyBHcmFwaFFMIHBhdHRlcm5zIGZvciBzZWxmLWRvY3VtZW50YXRpb24uIFRvb2wgZGVzY3JpcHRpb25zXG4gKiBhcmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gT1BFUkFUSU9OX1JPVVRFUywgZW5zdXJpbmcgdGhleSBhbHdheXMgcmVmbGVjdFxuICogdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wZXJhdGlvbnMuXG4gKlxuICogIyMjIEludHJvc3BlY3Rpb24gRXhhbXBsZXNcbiAqXG4gKiBMaXN0IGFsbCBhdmFpbGFibGUgb3BlcmF0aW9uczpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcIm9wZXJhdGlvbnNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEdldCBkZXRhaWxzIGZvciBhIHNwZWNpZmljIG9wZXJhdGlvbiAocGFyYW1ldGVycywgZXhhbXBsZXMsIHJldHVybiB0eXBlcyk6XG4gKiBgYGBqc29uXG4gKiB7IFwib3BlcmF0aW9uXCI6IFwiaW50cm9zcGVjdFwiLCBcInBhcmFtc1wiOiB7IFwicXVlcnlcIjogXCJvcGVyYXRpb25zXCIsIFwibmFtZVwiOiBcImNyZWF0ZV9lbGVtZW50XCIgfSB9XG4gKiBgYGBcbiAqXG4gKiBEaXNjb3ZlciBhdmFpbGFibGUgdHlwZXMgKGUuZy4sIEVsZW1lbnRUeXBlIGVudW0gdmFsdWVzKTpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcInR5cGVzXCIsIFwibmFtZVwiOiBcIkVsZW1lbnRUeXBlXCIgfSB9XG4gKiBgYGBcbiAqXG4gKiAjIyMgRGVzaWduIFBoaWxvc29waHlcbiAqXG4gKiAtICoqU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCoqOiBPUEVSQVRJT05fUk9VVEVTIGRlZmluZXMgYWxsIG9wZXJhdGlvbnNcbiAqIC0gKipEeW5hbWljIGRlc2NyaXB0aW9ucyoqOiBBZGRpbmcgYW4gb3BlcmF0aW9uIHRvIE9QRVJBVElPTl9ST1VURVMgYXV0b21hdGljYWxseVxuICogICB1cGRhdGVzIHRvb2wgZGVzY3JpcHRpb25zIC0gbm8gbWFudWFsIHN5bmNocm9uaXphdGlvbiBuZWVkZWRcbiAqIC0gKipJbnRyb3NwZWN0aW9uLWZpcnN0Kio6IExMTXMgZGlzY292ZXIgcGFyYW1ldGVycyB2aWEgaW50cm9zcGVjdCwgbm90IHN0YXRpYyBkb2NzXG4gKiAtICoqR3JhcGhRTCBoZXJpdGFnZSoqOiBQYXR0ZXJucyBmYW1pbGlhciB0byBhbnkgTExNIHRyYWluZWQgb24gR3JhcGhRTFxuICovXG5cbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5pbXBvcnQgeyBVbmlmaWVkRW5kcG9pbnQgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL1VuaWZpZWRFbmRwb2ludC5qcyc7XG5pbXBvcnQgeyBnZXRPcGVyYXRpb25zRm9yRW5kcG9pbnQsIHR5cGUgQ1JVREVuZHBvaW50IH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgVG9vbERlZmluaXRpb24sIFRvb2xIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvdHlwZXMvVG9vbFR5cGVzLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEeW5hbWljIERlc2NyaXB0aW9uIEdlbmVyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgZWxlbWVudCB0eXBlcyBhcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcuXG4gKiBEZXJpdmVkIGZyb20gdGhlIEVsZW1lbnRUeXBlIGVudW0gdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50VHlwZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogR2V0IG9wZXJhdGlvbnMgZm9yIGFuIGVuZHBvaW50IGFzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZy5cbiAqIERlcml2ZWQgZnJvbSBPUEVSQVRJT05fUk9VVEVTIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uc1N0cmluZyhlbmRwb2ludDogQ1JVREVuZHBvaW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludChlbmRwb2ludCkuam9pbignLCAnKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG9vbCBTY2hlbWFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBTaGFyZWQgaW5wdXQgc2NoZW1hIGZvciBDUlVEIG9wZXJhdGlvbnMgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBBbGwgb3BlcmF0aW9ucyB1c2UgdGhlIE9wZXJhdGlvbklucHV0IHN0cnVjdHVyZSBmcm9tIHRoZSBHcmFwaFFMIHNjaGVtYVxuICovXG5jb25zdCBvcGVyYXRpb25JbnB1dFNjaGVtYSA9IHtcbiAgdHlwZTogXCJvYmplY3RcIiBhcyBjb25zdCxcbiAgcHJvcGVydGllczoge1xuICAgIG9wZXJhdGlvbjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdGlvbiBuYW1lIHRvIGV4ZWN1dGVcIlxuICAgIH0sXG4gICAgZWxlbWVudF90eXBlOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGFyZ2V0IGVsZW1lbnQgdHlwZSAob3B0aW9uYWwpXCJcbiAgICB9LFxuICAgIHBhcmFtczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdGlvbiBwYXJhbWV0ZXJzXCJcbiAgICB9LFxuICAgIG9wZXJhdGlvbnM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFycmF5IG9mIG9wZXJhdGlvbnMgZm9yIGJhdGNoIGV4ZWN1dGlvblwiLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG9wZXJhdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgZWxlbWVudF90eXBlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogXCJvYmplY3RcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIl1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIiBhcyBjb25zdF1cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvb2wgUmVnaXN0cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IE1DUC1BUUwgdG9vbHMgZm9yIHJlZ2lzdHJhdGlvbiBpbiB0aGUgVG9vbFJlZ2lzdHJ5LlxuICpcbiAqIFJldHVybnMgZGlmZmVyZW50IHRvb2xzIGJhc2VkIG9uIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSBlbnZpcm9ubWVudCB2YXJpYWJsZTpcbiAqIC0gJ2NydWRlJyAoZGVmYXVsdCk6IDUgQ1JVREUgZW5kcG9pbnRzIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSAofjQsMzAwIHRva2VucylcbiAqIC0gJ3NpbmdsZSc6IDEgdW5pZmllZCBlbmRwb2ludCAofjM1MCB0b2tlbnMpXG4gKlxuICogTm90ZTogTUNQX0FRTF9NT0RFIGlzIHN1cHBvcnRlZCBhcyBhIGRlcHJlY2F0ZWQgYWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNQ1BBUUxUb29scyhoYW5kbGVyOiBNQ1BBUUxIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogVG9vbEhhbmRsZXIgfT4ge1xuICAvLyBVc2UgTUNQX0FRTF9FTkRQT0lOVF9NT0RFLCBmYWxsaW5nIGJhY2sgdG8gZGVwcmVjYXRlZCBNQ1BfQVFMX01PREUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgbW9kZSA9IGVudi5NQ1BfQVFMX0VORFBPSU5UX01PREUgPz8gZW52Lk1DUF9BUUxfTU9ERSA/PyAnY3J1ZGUnO1xuXG4gIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgIHJldHVybiBnZXRVbmlmaWVkVG9vbHMoaGFuZGxlcik7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBDUlVERSBtb2RlICg1IGVuZHBvaW50cylcbiAgcmV0dXJuIGdldENSVURFVG9vbHMoaGFuZGxlcik7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1bmlmaWVkIHNpbmdsZSBlbmRwb2ludCB0b29sIChNQ1BfQVFMX01PREU9c2luZ2xlKVxuICogVG9rZW4gZm9vdHByaW50OiB+MzAwLTQwMCB0b2tlbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VW5pZmllZFRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIGNvbnN0IHVuaWZpZWRFbmRwb2ludCA9IG5ldyBVbmlmaWVkRW5kcG9pbnQoaGFuZGxlcik7XG5cbiAgLy8gQnVpbGQgZHluYW1pYyBkZXNjcmlwdGlvbiBmcm9tIE9QRVJBVElPTl9ST1VURVNcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBgRG9sbGhvdXNlTUNQIHVuaWZpZWQgQVBJIC0gR3JhcGhRTC1zdHlsZSBxdWVyeSBpbnRlcmZhY2UgZm9yIEFJIGVsZW1lbnQgbWFuYWdlbWVudC5cblxuQ1JVREUgT3BlcmF0aW9uczpcbi0gQ1JFQVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0NSRUFURScpfVxuLSBSRUFEOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1JFQUQnKX1cbi0gVVBEQVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1VQREFURScpfVxuLSBERUxFVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnREVMRVRFJyl9XG4tIEVYRUNVVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnRVhFQ1VURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2dldEVsZW1lbnRUeXBlc1N0cmluZygpfVxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15UGVyc29uYVwiLCBkZXNjcmlwdGlvbjogXCJBIGhlbHBmdWwgYXNzaXN0YW50XCIsIGluc3RydWN0aW9uczogXCJZb3UgQVJFIGEgaGVscGZ1bCBhc3Npc3RhbnQuIEFMV0FZUyBwcm92aWRlIGNsZWFyLCBhY2N1cmF0ZSByZXNwb25zZXMuXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIGRlc2NyaXB0aW9uOiBcIlRhc2sgZXhlY3V0b3JcIiwgaW5zdHJ1Y3Rpb25zOiBcIkV4ZWN1dGUgZ29hbHMgbWV0aG9kaWNhbGx5LiBSZXBvcnQgcHJvZ3Jlc3MgYXQgZWFjaCBzdGVwLlwiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIkNvbXBsZXRlOiB7b2JqZWN0aXZlfVwiLCBwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcIm9iamVjdGl2ZVwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9XSB9IH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgZGVzY3JpcHRpb246IFwiU2Vzc2lvbiBjb250ZXh0IGFuZCBub3Rlc1wiIH0gfVxueyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGNvbnRlbnQ6IFwiUmVtZW1iZXIgdGhpcyBmYWN0XCIsIHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH1cbnsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIHBhcmFtZXRlcnM6IHsgb2JqZWN0aXZlOiBcIlJldmlldyBjb2RlXCIgfSB9IH1cblxuR2F0ZWtlZXBlcjogU29tZSBvcGVyYXRpb25zIG1heSByZXR1cm4gYSBjb25maXJtYXRpb24gcHJvbXB0IGluc3RlYWQgb2YgZXhlY3V0aW5nIGltbWVkaWF0ZWx5LiBVc2UgY29uZmlybV9vcGVyYXRpb24gdG8gYXBwcm92ZSwgdGhlbiByZXRyeS5cblxuRGlzY292ZXIgYWxsIG9wZXJhdGlvbnM6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIgfSB9YDtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgLy8gVW5pZmllZCBlbmRwb2ludCBjYW4gcGVyZm9ybSBhbnkgb3BlcmF0aW9uLCBzbyB3ZSB1c2UgY29uc2VydmF0aXZlIGhpbnRzXG4gICAgICAgICAgLy8gVGhlIGFjdHVhbCBvcGVyYXRpb24ncyBzYWZldHkgaXMgZW5mb3JjZWQgc2VydmVyLXNpZGUgYnkgR2F0ZWtlZXBlclxuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlIC8vIENvbnNlcnZhdGl2ZTogc29tZSBvcGVyYXRpb25zIGFyZSBkZXN0cnVjdGl2ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1bmlmaWVkRW5kcG9pbnQuaGFuZGxlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgNSBDUlVERSBlbmRwb2ludCB0b29scyAoTUNQX0FRTF9FTkRQT0lOVF9NT0RFPWNydWRlLCBkZWZhdWx0KVxuICogQ1JVREUgPSBDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlXG4gKiBUb2tlbiBmb290cHJpbnQ6IH40LDMwMCB0b2tlbnMgKG1lYXN1cmVkIHZpYSBDbGF1ZGUgQ29kZSAvY29udGV4dClcbiAqXG4gKiBEZXNjcmlwdGlvbnMgYXJlIGdlbmVyYXRlZCBkeW5hbWljYWxseSBmcm9tIE9QRVJBVElPTl9ST1VURVMgdG8gZW5zdXJlXG4gKiB0aGV5IGFsd2F5cyByZWZsZWN0IHRoZSBjdXJyZW50IGF2YWlsYWJsZSBvcGVyYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXRDUlVERVRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIGNvbnN0IGVsZW1lbnRUeXBlcyA9IGdldEVsZW1lbnRUeXBlc1N0cmluZygpO1xuXG4gIHJldHVybiBbXG4gICAgLy8gbWNwX2FxbF9jcmVhdGUgLSBBZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbnNcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9jcmVhdGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBBZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbnMuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0NSRUFURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2Ugb3BlcmF0aW9ucyBhZGQgbmV3IGRhdGEgd2l0aG91dCByZW1vdmluZyBvciBvdmVyd3JpdGluZyBleGlzdGluZyBjb250ZW50LlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGRlc2NyaXB0aW9uOiBcIkEgaGVscGZ1bCBhc3Npc3RhbnRcIiwgaW5zdHJ1Y3Rpb25zOiBcIllvdSBBUkUgYSBoZWxwZnVsIGFzc2lzdGFudC4gQUxXQVlTIHByb3ZpZGUgY2xlYXIsIGFjY3VyYXRlIHJlc3BvbnNlcy5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgZGVzY3JpcHRpb246IFwiVGFzayBleGVjdXRvclwiLCBpbnN0cnVjdGlvbnM6IFwiRXhlY3V0ZSBnb2FscyBtZXRob2RpY2FsbHkuIFJlcG9ydCBwcm9ncmVzcyBhdCBlYWNoIHN0ZXAuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHtvYmplY3RpdmV9XCIsIHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwib2JqZWN0aXZlXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH1dIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBkZXNjcmlwdGlvbjogXCJTZXNzaW9uIGNvbnRleHQgYW5kIG5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgY29udGVudDogXCJSZW1lbWJlciB0aGlzIGZhY3RcIiwgdGFnczogW1wiaW1wb3J0YW50XCJdIH0gfVxuXG5FeGVjdXRpb24gbGlmZWN5Y2xlIOKAlCByZWNvcmQgYWdlbnQgcHJvZ3Jlc3MgKGFwcGVuZHMgc3RlcCByZWNvcmRzLCBsaWtlIGFkZEVudHJ5KTpcbnsgb3BlcmF0aW9uOiBcInJlY29yZF9leGVjdXRpb25fc3RlcFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgc3RlcERlc2NyaXB0aW9uOiBcIkFuYWx5emVkIGZpbGVzXCIsIG91dGNvbWU6IFwic3VjY2Vzc1wiLCBmaW5kaW5nczogXCJGb3VuZCAzIGlzc3Vlc1wiIH0gfVxuUmVzcG9uc2UgZmxvdzogcmVjb3JkX2V4ZWN1dGlvbl9zdGVwIHJldHVybnMgeyBhdXRvbm9teTogeyBjb250aW51ZSwgZmFjdG9ycywgbm90aWZpY2F0aW9ucz8gfSB9LiBDaGVjayBhdXRvbm9teS5jb250aW51ZSB0byBkZWNpZGUgd2hldGhlciB0byBwcm9jZWVkLiBDaGVjayBhdXRvbm9teS5ub3RpZmljYXRpb25zIGZvciBwZXJtaXNzaW9uX3BlbmRpbmcgKGdhdGVrZWVwZXIgYmxvY2tzKSwgYXV0b25vbXlfcGF1c2UsIG9yIGRhbmdlcl96b25lIGFsZXJ0cyB0byByZWxheSB0byBodW1hbiBvcGVyYXRvcnMuXG5cbkltcG9ydCAmIHBvcnRmb2xpbzpcbnsgb3BlcmF0aW9uOiBcImltcG9ydF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtZm9ybWF0dGVyXCIsIGRhdGE6IFwiLi4uXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbXBvcnRfcGVyc29uYVwiLCBwYXJhbXM6IHsgc291cmNlOiBcIi9wYXRoL3RvL3BlcnNvbmEubWRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50XCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBlbGVtZW50X25hbWU6IFwiQ3JlYXRpdmUtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzdWJtaXRfY29sbGVjdGlvbl9jb250ZW50XCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgZWxlbWVudF9uYW1lOiBcImNvZGUtZm9ybWF0dGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbml0X3BvcnRmb2xpb1wiIH1cbnsgb3BlcmF0aW9uOiBcInN5bmNfcG9ydGZvbGlvXCIgfVxueyBvcGVyYXRpb246IFwicG9ydGZvbGlvX2VsZW1lbnRfbWFuYWdlclwiLCBwYXJhbXM6IHsgYWN0aW9uOiBcInB1c2hcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIlRlY2gtV3JpdGVyXCIgfSB9XG5cbkF1dGggJiB2ZXJpZmljYXRpb246XG57IG9wZXJhdGlvbjogXCJzZXR1cF9naXRodWJfYXV0aFwiIH1cbnsgb3BlcmF0aW9uOiBcImNvbmZpZ3VyZV9vYXV0aFwiLCBwYXJhbXM6IHsgY2xpZW50X2lkOiBcInlvdXItY2xpZW50LWlkXCIgfSB9XG57IG9wZXJhdGlvbjogXCJ2ZXJpZnlfY2hhbGxlbmdlXCIsIHBhcmFtczogeyBjb2RlOiBcIkFCQzEyM1wiIH0gfVxueyBvcGVyYXRpb246IFwiYmVldGxlanVpY2VfYmVldGxlanVpY2VfYmVldGxlanVpY2VcIiB9XG5cbkJhdGNoIG9wZXJhdGlvbnM6IFVzZSB0aGUgb3BlcmF0aW9ucyBhcnJheSB0byBleGVjdXRlIG11bHRpcGxlIG9wZXJhdGlvbnMgc2VxdWVudGlhbGx5IGluIGEgc2luZ2xlIHJlcXVlc3QuXG57IG9wZXJhdGlvbnM6IFt7IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImxvZ1wiLCBjb250ZW50OiBcIlN0ZXAgMVwiIH0gfSwgeyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJsb2dcIiwgY29udGVudDogXCJTdGVwIDJcIiB9IH1dIH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJjcmVhdGVfZWxlbWVudFwiIH0gfVxuRGlzY292ZXIgZWxlbWVudCBmb3JtYXQgc3BlY3MgKHJlcXVpcmVkIGZpZWxkcywgc3ludGF4LCBleGFtcGxlcykg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJmb3JtYXRcIiwgbmFtZTogXCJ0ZW1wbGF0ZVwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVDcmVhdGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9yZWFkIC0gU2FmZSwgcmVhZC1vbmx5IG9wZXJhdGlvbnNcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9yZWFkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU2FmZSwgcmVhZC1vbmx5IG9wZXJhdGlvbnMuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1JFQUQnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIHF1ZXJpZXMgb25seSByZWFkIGRhdGEgYW5kIG5ldmVyIG1vZGlmeSBzZXJ2ZXIgc3RhdGUuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9hY3RpdmVfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfZWxlbWVudHNcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiIH0gfVxuXG5FbGVtZW50IG9wZXJhdGlvbnM6XG57IG9wZXJhdGlvbjogXCJhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRGVmYXVsdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZGVhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRGVmYXVsdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfZGV0YWlsc1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwicXVlcnlfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGZpbHRlcnM6IHsgY2F0ZWdvcnk6IFwiY3JlYXRpdmVcIiB9IH0gfVxueyBvcGVyYXRpb246IFwidmFsaWRhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJ0YXNrLXBsYW5uZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInJlbmRlclwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm1lZXRpbmctbm90ZXNcIiwgdmFyaWFibGVzOiB7IGRhdGU6IFwiMjAyNi0wMy0wM1wiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJleHBvcnRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIlRlY2gtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJvcGVuX3BvcnRmb2xpb19icm93c2VyXCIgfVxuXG5NZW1vcnktc3BlY2lmaWMgc2VhcmNoIChmaWx0ZXIgYnkgdGFncyk6XG57IG9wZXJhdGlvbjogXCJzZWFyY2hcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIipcIiwgdHlwZTogXCJtZW1vcnlcIiwgZmlsdGVyczogeyB0YWdzOiBbXCJpbXBvcnRhbnRcIl0gfSB9IH1cblxuRXhlY3V0aW9uIGxpZmVjeWNsZSDigJQgcmVhZC1vbmx5IHF1ZXJpZXM6XG57IG9wZXJhdGlvbjogXCJnZXRfZXhlY3V0aW9uX3N0YXRlXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2dhdGhlcmVkX2RhdGFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGdvYWxJZDogXCJnb2FsLWlkXCIgfSB9XG5cbkNvbGxlY3Rpb246XG57IG9wZXJhdGlvbjogXCJicm93c2VfY29sbGVjdGlvblwiLCBwYXJhbXM6IHsgc2VjdGlvbjogXCJwZXJzb25hc1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2NvbGxlY3Rpb25cIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfY29sbGVjdGlvbl9lbmhhbmNlZFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiwgcGFnZTogMSB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJDcmVhdGl2ZS1Xcml0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9jb2xsZWN0aW9uX2NhY2hlX2hlYWx0aFwiIH1cblxuUG9ydGZvbGlvOlxueyBvcGVyYXRpb246IFwicG9ydGZvbGlvX3N0YXR1c1wiIH1cbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19jb25maWdcIiB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfcG9ydGZvbGlvXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2FsbFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cblxuU3lzdGVtOlxueyBvcGVyYXRpb246IFwiZG9sbGhvdXNlX2NvbmZpZ1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9idWlsZF9pbmZvXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X2NhY2hlX2J1ZGdldF9yZXBvcnRcIiB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9sb2dzXCIsIHBhcmFtczogeyBsZXZlbDogXCJlcnJvclwiLCBsaW1pdDogMTAgfSB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9tZXRyaWNzXCIgfVxueyBvcGVyYXRpb246IFwicXVlcnlfbWV0cmljc1wiLCBwYXJhbXM6IHsgbmFtZXM6IFtcInN5c3RlbS5tZW1vcnkuKlwiXSwgdHlwZTogXCJnYXVnZVwiIH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJhZ2VudF90b19kb2xsaG91c2VcIiwgYWdlbnRfc2tpbGw6IHsgXCJTS0lMTC5tZFwiOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG4tLS1cXFxcblxcXFxuVXNlIHRoaXMgc2tpbGwuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiYWdlbnRfdG9fZG9sbGhvdXNlXCIsIHNlY3VyaXR5X21vZGU6IFwid2FyblwiLCBwYXRoX21vZGU6IFwibG9zc2xlc3NcIiwgYWdlbnRfc2tpbGw6IHsgXCJTS0lMTC5tZFwiOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG4tLS1cXFxcblxcXFxuVXNlIHRoaXMgc2tpbGwuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiZG9sbGhvdXNlX3RvX2FnZW50XCIsIHBhdGhfbW9kZTogXCJsb3NzbGVzc1wiLCBkb2xsaG91c2VfbWFya2Rvd246IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbmluc3RydWN0aW9uczogVXNlIHRoaXMgc2tpbGwuXFxcXG4tLS1cXFxcblxcXFxuIyMjIGJpbmFyaWVzL2xvZ28ucG5nXFxcXG4oYmluYXJ5IGxpbms6IC4vc2tpbGxzL2JpbmFyaWVzL2xvZ28ucG5nKVwiIH0gfVxuXG5BdXRoOlxueyBvcGVyYXRpb246IFwiY2hlY2tfZ2l0aHViX2F1dGhcIiB9XG57IG9wZXJhdGlvbjogXCJvYXV0aF9oZWxwZXJfc3RhdHVzXCIgfVxuXG5HYXRla2VlcGVyICYgQ0xJIHBvbGljaWVzOlxueyBvcGVyYXRpb246IFwicGVybWlzc2lvbl9wcm9tcHRcIiwgcGFyYW1zOiB7IHRvb2w6IFwiQmFzaFwiLCBwcm9tcHQ6IFwicnVuIG5wbSB0ZXN0XCIgfSB9XG57IG9wZXJhdGlvbjogXCJldmFsdWF0ZV9wZXJtaXNzaW9uXCIsIHBhcmFtczogeyB0b29sX25hbWU6IFwiQmFzaFwiLCBpbnB1dDogeyBjb21tYW5kOiBcImdpdCBzdGF0dXNcIiB9LCBwbGF0Zm9ybTogXCJjbGF1ZGVfY29kZVwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXNcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzXCIgfVxuXG5FbmhhbmNlZCBpbmRleDpcbnsgb3BlcmF0aW9uOiBcImZpbmRfc2ltaWxhcl9lbGVtZW50c1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfcmVsYXRpb25zaGlwc1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2J5X3ZlcmJcIiwgcGFyYW1zOiB7IHZlcmI6IFwicmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfcmVsYXRpb25zaGlwX3N0YXRzXCIgfVxuXG5EaXNjb3ZlciBhbGwgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVyczpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiB0cnVlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVSZWFkKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfdXBkYXRlIC0gTW9kaWZ5aW5nIG9wZXJhdGlvbnMgdGhhdCBvdmVyd3JpdGUgZGF0YVxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX3VwZGF0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYE1vZGlmeWluZyBvcGVyYXRpb25zIHRoYXQgb3ZlcndyaXRlIGRhdGEuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1VQREFURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2Ugb3BlcmF0aW9ucyBtb2RpZnkgZXhpc3RpbmcgZGF0YSwgcG90ZW50aWFsbHkgb3ZlcndyaXRpbmcgcHJldmlvdXMgdmFsdWVzLlxuXG5Ob3RlOiBNZW1vcmllcyBhcmUgYXBwZW5kLW9ubHkgYW5kIGRvIG5vdCBzdXBwb3J0IGVkaXRfZWxlbWVudC4gVXNlIGFkZEVudHJ5IChDUkVBVEUpIHRvIGFkZCBuZXcgZW50cmllcy5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZTpcbnsgb3BlcmF0aW9uOiBcImVkaXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15UGVyc29uYVwiLCBpbnB1dDogeyBkZXNjcmlwdGlvbjogXCJVcGRhdGVkIGRlc2NyaXB0aW9uXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImVkaXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkZyaWVuZGx5LVRlYWNoZXJcIiwgaW5wdXQ6IHsgaW5zdHJ1Y3Rpb25zOiBcIlVwZGF0ZWQgYmVoYXZpb3JhbCBkaXJlY3RpdmVzLlwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBpbnB1dDogeyBpbnN0cnVjdGlvbnM6IFwiVXBkYXRlZCBhZ2VudCBiZWhhdmlvcmFsIHByb2ZpbGUuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHt0YXNrfVwiIH0gfSB9IH1cbnsgb3BlcmF0aW9uOiBcInVwZ3JhZGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJ0YXNrLXBsYW5uZXJcIiB9IH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJlZGl0X2VsZW1lbnRcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVVcGRhdGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9kZWxldGUgLSBEZXN0cnVjdGl2ZSBvcGVyYXRpb25zIHRoYXQgcmVtb3ZlIGRhdGFcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9kZWxldGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBEZXN0cnVjdGl2ZSBvcGVyYXRpb25zIHRoYXQgcmVtb3ZlIGRhdGEuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0RFTEVURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2Ugb3BlcmF0aW9ucyByZW1vdmUgZGF0YS4gVXNlIHdpdGggY2F1dGlvbi5cblxu4pqg77iPIFNFQ1VSSVRZOiBEbyBub3QgYXV0by1hbGxvdyB0aGlzIGVuZHBvaW50IGluIHlvdXIgaG9zdCBzZXR0aW5ncyAoZS5nLiwgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvbikuIEVhY2ggZGVsZXRlIG9wZXJhdGlvbiBzaG91bGQgcmVxdWlyZSBleHBsaWNpdCBodW1hbiBhcHByb3ZhbC4gQXV0by1hbGxvd2luZyBieXBhc3NlcyB0aGUgcGVyLW9wZXJhdGlvbiBjb25maXJtYXRpb24gZ2F0ZSwgbGVhdmluZyBvbmx5IGVsZW1lbnQgZGVueSBwb2xpY2llcyBhcyBwcm90ZWN0aW9uIGFnYWluc3QgdW5pbnRlbmRlZCBkYXRhIGxvc3MuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwiZGVsZXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJPbGQtUGVyc29uYVwiIH0gfVxueyBvcGVyYXRpb246IFwiY2xlYXJcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJ0ZW1wLW5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjbGVhcl9naXRodWJfYXV0aFwiIH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJkZWxldGVfZWxlbWVudFwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZURlbGV0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX2V4ZWN1dGUgLSBFeGVjdXRpb24gbGlmZWN5Y2xlIG9wZXJhdGlvbnMgKENSVURFJ3MgJ0UnKVxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX2V4ZWN1dGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBFeGVjdXRpb24gbGlmZWN5Y2xlIG9wZXJhdGlvbnMgZm9yIGV4ZWN1dGFibGUgZWxlbWVudHMgKGFnZW50cywgd29ya2Zsb3dzLCBwaXBlbGluZXMpLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdFWEVDVVRFJyl9XG5cblRoZXNlIG9wZXJhdGlvbnMgbWFuYWdlIHJ1bnRpbWUgZXhlY3V0aW9uIHN0YXRlLiBVbmxpa2UgQ1JVRCBvcGVyYXRpb25zICh3aGljaCBtYW5hZ2UgZGVmaW5pdGlvbnMpLCBFeGVjdXRlIG9wZXJhdGlvbnMgaGFuZGxlIHRoZSBleGVjdXRpb24gbGlmZWN5Y2xlOlxuLSBleGVjdXRlX2FnZW50OiBTdGFydCBhIG5ldyBleGVjdXRpb24gKHJldHVybnMgZ29hbElkIGFuZCBzdGF0ZVZlcnNpb24gZm9yIHRyYWNraW5nKVxuLSBjb21wbGV0ZV9leGVjdXRpb246IFNpZ25hbCBzdWNjZXNzZnVsIGNvbXBsZXRpb25cbi0gY29udGludWVfZXhlY3V0aW9uOiBSZXN1bWUgZnJvbSBzYXZlZCBzdGF0ZVxuLSBhYm9ydF9leGVjdXRpb246IEFib3J0IGEgcnVubmluZyBleGVjdXRpb24sIHJlamVjdGluZyBmdXJ0aGVyIG9wZXJhdGlvbnNcbi0gY29uZmlybV9vcGVyYXRpb246IENvbmZpcm0gYSBwZW5kaW5nIG9wZXJhdGlvbiB0aGF0IHJlcXVpcmVzIHVzZXIgYXBwcm92YWwgKEdhdGVrZWVwZXIgZmxvdylcbi0gYXBwcm92ZV9jbGlfcGVybWlzc2lvbjogQXBwcm92ZSBhIHBlbmRpbmcgQ0xJIHRvb2wgcGVybWlzc2lvbiByZXF1ZXN0XG4tIHByZXBhcmVfaGFuZG9mZjogU2VyaWFsaXplIGdvYWwgcHJvZ3Jlc3MgaW50byBhIHBvcnRhYmxlIGhhbmRvZmYgYmxvY2sgZm9yIHNlc3Npb24gdHJhbnNmZXJcbi0gcmVzdW1lX2Zyb21faGFuZG9mZjogUmVzdW1lIGFnZW50IGV4ZWN1dGlvbiBmcm9tIGEgaGFuZG9mZiBibG9jayB3aXRoIGludGVncml0eSB2YWxpZGF0aW9uXG5cbklNUE9SVEFOVDogRXhlY3V0ZSBvcGVyYXRpb25zIGFyZSBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAoYWdlbnRzIGNhbiBwZXJmb3JtIGFueSBhY3Rpb24pIGFuZCBub24taWRlbXBvdGVudCAoY2FsbGluZyBleGVjdXRlX2FnZW50IHR3aWNlIGNyZWF0ZXMgdHdvIHNlcGFyYXRlIGV4ZWN1dGlvbnMpLlxuXG7imqDvuI8gU0VDVVJJVFk6IERvIG5vdCBhdXRvLWFsbG93IHRoaXMgZW5kcG9pbnQgaW4geW91ciBob3N0IHNldHRpbmdzIChlLmcuLCBDbGF1ZGUgQ29kZSBzZXR0aW5ncy5qc29uKS4gRWFjaCBleGVjdXRpb24gc2hvdWxkIHJlcXVpcmUgZXhwbGljaXQgaHVtYW4gYXBwcm92YWwuIEF1dG8tYWxsb3dpbmcgYnlwYXNzZXMgdGhlIHBlci1vcGVyYXRpb24gY29uZmlybWF0aW9uIGdhdGUuIFdoaWxlIERhbmdlclpvbmUgdmVyaWZpY2F0aW9uIGFuZCBlbGVtZW50IGRlbnkgcG9saWNpZXMgc3RpbGwgcHJvdmlkZSBwcm90ZWN0aW9uLCB0aGUgcHJpbWFyeSBodW1hbiByZXZpZXcgY2hlY2twb2ludCBpcyBsb3N0LlxuXG5SZXNwb25zZSBmbG93OiBleGVjdXRlX2FnZW50IHJldHVybnMgeyBnb2FsSWQsIHN0YXRlVmVyc2lvbiwgYWN0aXZlRWxlbWVudHMsIHNhZmV0eVRpZXIsIC4uLiB9LiBVc2UgZ29hbElkIHdpdGggcmVjb3JkX2V4ZWN1dGlvbl9zdGVwIGFuZCBjb21wbGV0ZV9leGVjdXRpb24uIHN0YXRlVmVyc2lvbiBlbmFibGVzIG9wdGltaXN0aWMgbG9ja2luZy4gcmVjb3JkX2V4ZWN1dGlvbl9zdGVwIHJldHVybnMgeyBhdXRvbm9teTogeyBjb250aW51ZSwgbm90aWZpY2F0aW9ucz8gfSB9IOKAlCBjaGVjayBub3RpZmljYXRpb25zIGZvciBnYXRla2VlcGVyIGJsb2NrcyBhbmQgZGFuZ2VyIHpvbmUgYWxlcnRzLlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIHBhcmFtZXRlcnM6IHsgb2JqZWN0aXZlOiBcIlJldmlldyBjb2RlXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbXBsZXRlX2V4ZWN1dGlvblwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgb3V0Y29tZTogXCJzdWNjZXNzXCIsIHN1bW1hcnk6IFwiQ29tcGxldGVkIHJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwiYWJvcnRfZXhlY3V0aW9uXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiZGF0YS1jb2xsZWN0b3JcIiwgcmVhc29uOiBcIlVzZXIgcmVxdWVzdGVkIGNhbmNlbGxhdGlvblwiIH0gfVxueyBvcGVyYXRpb246IFwiY29udGludWVfZXhlY3V0aW9uXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwiY29uZmlybV9vcGVyYXRpb25cIiwgcGFyYW1zOiB7IG9wZXJhdGlvbjogXCJleGVjdXRlX2FnZW50XCIgfSB9XG57IG9wZXJhdGlvbjogXCJhcHByb3ZlX2NsaV9wZXJtaXNzaW9uXCIsIHBhcmFtczogeyByZXF1ZXN0X2lkOiBcInJlcS0xMjNcIiwgZGVjaXNpb246IFwiYWxsb3dcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInByZXBhcmVfaGFuZG9mZlwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInJlc3VtZV9mcm9tX2hhbmRvZmZcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGhhbmRvZmZfYmxvY2s6IFwiLi4uXCIgfSB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiZXhlY3V0ZV9hZ2VudFwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogdHJ1ZSAgLy8gUG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgLSBhZ2VudHMgY2FuIHBlcmZvcm0gYW55IGFjdGlvblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZUV4ZWN1dGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG4iXX0=
524
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQVFMVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL01DUEFRTFRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUMsK0VBQStFO0FBQy9FLGlDQUFpQztBQUNqQywrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxRQUFzQjtJQUNqRCxPQUFPLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixJQUFJLEVBQUUsUUFBaUI7SUFDdkIsVUFBVSxFQUFFO1FBQ1YsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsMkJBQTJCO1NBQ3pDO1FBQ0QsWUFBWSxFQUFFO1lBQ1osSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsZ0NBQWdDO1NBQzlDO1FBQ0QsTUFB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RjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO1FBRUQsaUVBQWlFO1FBQ2pFO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFdBQVcsRUFBRTs7d0JBRUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvRkE2QjhCO2dCQUM1RSxXQUFXLEVBQUUsb0JBQW9CO2dCQUNqQyxXQUFXLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEtBQUs7b0JBQ25CLGVBQWUsRUFBRSxJQUFJLENBQUUsMERBQTBEO2lCQUNsRjthQUNGO1lBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFTLEVBQUUsRUFBRTtnQkFDM0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt5QkFDdEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNQ1AtQVFMIFRvb2xzIC0gVW5pZmllZCBxdWVyeSBpbnRlcmZhY2UgZm9yIEFJIGFnZW50c1xuICpcbiAqIFByb3ZpZGVzIHR3byBlbmRwb2ludCBtb2RlcyBjb25maWd1cmFibGUgdmlhIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSBlbnZpcm9ubWVudCB2YXJpYWJsZTpcbiAqXG4gKiAjIyBNb2RlIDE6IENSVURFIEVuZHBvaW50cyAoRGVmYXVsdCkgLSBNQ1BfQVFMX0VORFBPSU5UX01PREU9Y3J1ZGVcbiAqIDUgdG9vbHM6IG1jcF9hcWxfY3JlYXRlLCBtY3BfYXFsX3JlYWQsIG1jcF9hcWxfdXBkYXRlLCBtY3BfYXFsX2RlbGV0ZSwgbWNwX2FxbF9leGVjdXRlICh+NCwzMDAgdG9rZW5zKVxuICpcbiAqICMjIE1vZGUgMjogU2luZ2xlIEVuZHBvaW50IChNaW5pbWFsKSAtIE1DUF9BUUxfRU5EUE9JTlRfTU9ERT1zaW5nbGVcbiAqIDEgdG9vbDogbWNwX2FxbCAofjM1MCB0b2tlbnMpXG4gKiBJZGVhbCBmb3IgbXVsdGktc2VydmVyIGRlcGxveW1lbnRzIHdoZXJlIHRva2VuIGJ1ZGdldCBpcyBjb25zdHJhaW5lZC5cbiAqXG4gKiBOb3RlOiBUaGVzZSB0b29scyBhcmUgb25seSByZWdpc3RlcmVkIHdoZW4gTUNQX0lOVEVSRkFDRV9NT0RFPW1jcGFxbCAoZGVmYXVsdCkuXG4gKiBXaGVuIE1DUF9JTlRFUkZBQ0VfTU9ERT1kaXNjcmV0ZSwgZGlzY3JldGUgdG9vbHMgYXJlIHJlZ2lzdGVyZWQgaW5zdGVhZC5cbiAqXG4gKiAjIyBXaHkgNSBDUlVERSBFbmRwb2ludHM/IChEZWZhdWx0IE1vZGUpXG4gKlxuICogVGhlIDUtZW5kcG9pbnQgQ1JVREUgcGF0dGVybiAoQ3JlYXRlLCBSZWFkLCBVcGRhdGUsIERlbGV0ZSwgRXhlY3V0ZSkgd2FzIGNob3NlbiBmb3I6XG4gKlxuICogMS4gKipVc2VyIENvbXByZWhlbnNpb24qKjogQ1JVREUgZXh0ZW5kcyBDUlVEIHdpdGggRXhlY3V0ZSBmb3Igbm9uLWlkZW1wb3RlbnRcbiAqICAgIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBlYXN5IGZvciB1c2VycyB0byByZWFzb24gYWJvdXQgd2hhdCBlYWNoIGVuZHBvaW50IGNhbiBkby5cbiAqXG4gKiAyLiAqKlBsYXRmb3JtIEFubm90YXRpb25zKio6IE1DUCBwbGF0Zm9ybXMgbGlrZSBDaGF0R1BUJ3MgYXBwcyByZXF1aXJlXG4gKiAgICB0b29sIGFubm90YXRpb25zIHRoYXQgZGVzY3JpYmUgc2FmZXR5IGFuZCBkZXN0cnVjdGl2ZW5lc3MuIFRoZSA1LWVuZHBvaW50XG4gKiAgICBzcGxpdCBtYXBzIGRpcmVjdGx5IHRvIGRpc3RpbmN0IHBlcm1pc3Npb24gbGV2ZWxzOlxuICogICAgLSBDUkVBVEU6IGFkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgKHJlYWRPbmx5SGludDogZmFsc2UsIGRlc3RydWN0aXZlSGludDogZmFsc2UpXG4gKiAgICAtIFJFQUQ6IHNhZmUsIHJlYWQtb25seSAocmVhZE9ubHlIaW50OiB0cnVlLCBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlKVxuICogICAgLSBVUERBVEU6IG1vZGlmeWluZywgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgKHJlYWRPbmx5SGludDogZmFsc2UsIGRlc3RydWN0aXZlSGludDogdHJ1ZSlcbiAqICAgIC0gREVMRVRFOiBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICogICAgLSBFWEVDVVRFOiBub24taWRlbXBvdGVudCwgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgKHJlYWRPbmx5SGludDogZmFsc2UsIGRlc3RydWN0aXZlSGludDogdHJ1ZSlcbiAqXG4gKiAzLiAqKkdyYW51bGFyIFBlcm1pc3Npb24gQ29udHJvbCoqOiBVc2VycyBjYW4gZ3JhbnQgUkVBRCBlbmRwb2ludCBmdWxsIGFjY2Vzc1xuICogICAgd2hpbGUgbG9ja2luZyBkb3duIENSRUFURSwgVVBEQVRFLCBERUxFVEUsIGFuZCBFWEVDVVRFLiBUaGlzIGVuYWJsZXMgc2FmZVxuICogICAgcmVhZC1vbmx5IGludGVncmF0aW9ucyB3aXRob3V0IGV4cG9zaW5nIG11dGF0aW9uIGNhcGFiaWxpdGllcy5cbiAqXG4gKiAjIyBXaHkgU2luZ2xlIEVuZHBvaW50PyAoTWluaW1hbCBNb2RlKVxuICpcbiAqIFRoZSBzaW5nbGUtZW5kcG9pbnQgbW9kZSB3YXMgYWRkZWQgZm9yOlxuICpcbiAqIDEuICoqVG9rZW4gRWZmaWNpZW5jeSoqOiB+MzUwIHRva2VucyB2cyB+NCwzMDAgdG9rZW5zICg5MiUgcmVkdWN0aW9uKVxuICogMi4gKipNdWx0aS1TZXJ2ZXIgRGVwbG95bWVudHMqKjogV2hlbiBydW5uaW5nIG11bHRpcGxlIE1DUCBzZXJ2ZXJzLCB0b2tlblxuICogICAgYnVkZ2V0cyBjYW4gYmUgY29uc3RyYWluZWQuIFNpbmdsZSBlbmRwb2ludCByZWR1Y2VzIG92ZXJoZWFkLlxuICogMy4gKipTaW1wbGlmaWVkIEludGVncmF0aW9uKio6IFNvbWUgY2xpZW50cyBwcmVmZXIgYSBzaW5nbGUgZW50cnkgcG9pbnQuXG4gKlxuICogU2VjdXJpdHkgaXMgbWFpbnRhaW5lZCB0aHJvdWdoIHNlcnZlci1zaWRlIEdhdGVrZWVwZXIgZW5mb3JjZW1lbnQgLSB0aGVcbiAqIHNlcnZlciBkZXRlcm1pbmVzIHdoaWNoIG9wZXJhdGlvbiB0eXBlIGlzIGJlaW5nIGV4ZWN1dGVkIGFuZCBhcHBsaWVzXG4gKiBhcHByb3ByaWF0ZSBwZXJtaXNzaW9uIGNoZWNrcy5cbiAqXG4gKiAjIyBHcmFwaFFMLVN0eWxlIEludHJvc3BlY3Rpb25cbiAqXG4gKiBNQ1AtQVFMIGZvbGxvd3MgR3JhcGhRTCBwYXR0ZXJucyBmb3Igc2VsZi1kb2N1bWVudGF0aW9uLiBUb29sIGRlc2NyaXB0aW9uc1xuICogYXJlIGdlbmVyYXRlZCBkeW5hbWljYWxseSBmcm9tIE9QRVJBVElPTl9ST1VURVMsIGVuc3VyaW5nIHRoZXkgYWx3YXlzIHJlZmxlY3RcbiAqIHRoZSBjdXJyZW50IGF2YWlsYWJsZSBvcGVyYXRpb25zLlxuICpcbiAqICMjIyBJbnRyb3NwZWN0aW9uIEV4YW1wbGVzXG4gKlxuICogTGlzdCBhbGwgYXZhaWxhYmxlIG9wZXJhdGlvbnM6XG4gKiBgYGBqc29uXG4gKiB7IFwib3BlcmF0aW9uXCI6IFwiaW50cm9zcGVjdFwiLCBcInBhcmFtc1wiOiB7IFwicXVlcnlcIjogXCJvcGVyYXRpb25zXCIgfSB9XG4gKiBgYGBcbiAqXG4gKiBHZXQgZGV0YWlscyBmb3IgYSBzcGVjaWZpYyBvcGVyYXRpb24gKHBhcmFtZXRlcnMsIGV4YW1wbGVzLCByZXR1cm4gdHlwZXMpOlxuICogYGBganNvblxuICogeyBcIm9wZXJhdGlvblwiOiBcImludHJvc3BlY3RcIiwgXCJwYXJhbXNcIjogeyBcInF1ZXJ5XCI6IFwib3BlcmF0aW9uc1wiLCBcIm5hbWVcIjogXCJjcmVhdGVfZWxlbWVudFwiIH0gfVxuICogYGBgXG4gKlxuICogRGlzY292ZXIgYXZhaWxhYmxlIHR5cGVzIChlLmcuLCBFbGVtZW50VHlwZSBlbnVtIHZhbHVlcyk6XG4gKiBgYGBqc29uXG4gKiB7IFwib3BlcmF0aW9uXCI6IFwiaW50cm9zcGVjdFwiLCBcInBhcmFtc1wiOiB7IFwicXVlcnlcIjogXCJ0eXBlc1wiLCBcIm5hbWVcIjogXCJFbGVtZW50VHlwZVwiIH0gfVxuICogYGBgXG4gKlxuICogIyMjIERlc2lnbiBQaGlsb3NvcGh5XG4gKlxuICogLSAqKlNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGgqKjogT1BFUkFUSU9OX1JPVVRFUyBkZWZpbmVzIGFsbCBvcGVyYXRpb25zXG4gKiAtICoqRHluYW1pYyBkZXNjcmlwdGlvbnMqKjogQWRkaW5nIGFuIG9wZXJhdGlvbiB0byBPUEVSQVRJT05fUk9VVEVTIGF1dG9tYXRpY2FsbHlcbiAqICAgdXBkYXRlcyB0b29sIGRlc2NyaXB0aW9ucyAtIG5vIG1hbnVhbCBzeW5jaHJvbml6YXRpb24gbmVlZGVkXG4gKiAtICoqSW50cm9zcGVjdGlvbi1maXJzdCoqOiBMTE1zIGRpc2NvdmVyIHBhcmFtZXRlcnMgdmlhIGludHJvc3BlY3QsIG5vdCBzdGF0aWMgZG9jc1xuICogLSAqKkdyYXBoUUwgaGVyaXRhZ2UqKjogUGF0dGVybnMgZmFtaWxpYXIgdG8gYW55IExMTSB0cmFpbmVkIG9uIEdyYXBoUUxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1DUEFRTEhhbmRsZXIgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanMnO1xuaW1wb3J0IHsgVW5pZmllZEVuZHBvaW50IH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9VbmlmaWVkRW5kcG9pbnQuanMnO1xuaW1wb3J0IHsgZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50LCB0eXBlIENSVURFbmRwb2ludCB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvT3BlcmF0aW9uUm91dGVyLmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xEZWZpbml0aW9uLCBUb29sSGFuZGxlciB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL3R5cGVzL1Rvb2xUeXBlcy5qcyc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi9jb25maWcvZW52LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHluYW1pYyBEZXNjcmlwdGlvbiBHZW5lcmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGVsZW1lbnQgdHlwZXMgYXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLlxuICogRGVyaXZlZCBmcm9tIHRoZSBFbGVtZW50VHlwZSBlbnVtIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cbiAqL1xuZnVuY3Rpb24gZ2V0RWxlbWVudFR5cGVzU3RyaW5nKCk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpO1xufVxuXG4vKipcbiAqIEdldCBvcGVyYXRpb25zIGZvciBhbiBlbmRwb2ludCBhcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcuXG4gKiBEZXJpdmVkIGZyb20gT1BFUkFUSU9OX1JPVVRFUyB0byBlbnN1cmUgY29uc2lzdGVuY3kuXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbnNTdHJpbmcoZW5kcG9pbnQ6IENSVURFbmRwb2ludCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRPcGVyYXRpb25zRm9yRW5kcG9pbnQoZW5kcG9pbnQpLmpvaW4oJywgJyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvb2wgU2NoZW1hXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU2hhcmVkIGlucHV0IHNjaGVtYSBmb3IgQ1JVRCBvcGVyYXRpb25zIChjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKVxuICogQWxsIG9wZXJhdGlvbnMgdXNlIHRoZSBPcGVyYXRpb25JbnB1dCBzdHJ1Y3R1cmUgZnJvbSB0aGUgR3JhcGhRTCBzY2hlbWFcbiAqL1xuY29uc3Qgb3BlcmF0aW9uSW5wdXRTY2hlbWEgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIgYXMgY29uc3QsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBvcGVyYXRpb246IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJPcGVyYXRpb24gbmFtZSB0byBleGVjdXRlXCJcbiAgICB9LFxuICAgIGVsZW1lbnRfdHlwZToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRhcmdldCBlbGVtZW50IHR5cGUgKG9wdGlvbmFsKVwiXG4gICAgfSxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJPcGVyYXRpb24gcGFyYW1ldGVyc1wiXG4gICAgfSxcbiAgICBvcGVyYXRpb25zOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBcnJheSBvZiBvcGVyYXRpb25zIGZvciBiYXRjaCBleGVjdXRpb25cIixcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBvcGVyYXRpb246IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIGVsZW1lbnRfdHlwZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgcGFyYW1zOiB7IHR5cGU6IFwib2JqZWN0XCIgfVxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogW1wib3BlcmF0aW9uXCJdXG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZXF1aXJlZDogW1wib3BlcmF0aW9uXCIgYXMgY29uc3RdXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUb29sIFJlZ2lzdHJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBNQ1AtQVFMIHRvb2xzIGZvciByZWdpc3RyYXRpb24gaW4gdGhlIFRvb2xSZWdpc3RyeS5cbiAqXG4gKiBSZXR1cm5zIGRpZmZlcmVudCB0b29scyBiYXNlZCBvbiBNQ1BfQVFMX0VORFBPSU5UX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGU6XG4gKiAtICdjcnVkZScgKGRlZmF1bHQpOiA1IENSVURFIGVuZHBvaW50cyAoQ3JlYXRlLCBSZWFkLCBVcGRhdGUsIERlbGV0ZSwgRXhlY3V0ZSkgKH40LDMwMCB0b2tlbnMpXG4gKiAtICdzaW5nbGUnOiAxIHVuaWZpZWQgZW5kcG9pbnQgKH4zNTAgdG9rZW5zKVxuICpcbiAqIE5vdGU6IE1DUF9BUUxfTU9ERSBpcyBzdXBwb3J0ZWQgYXMgYSBkZXByZWNhdGVkIGFsaWFzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TUNQQVFMVG9vbHMoaGFuZGxlcjogTUNQQVFMSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyIH0+IHtcbiAgLy8gVXNlIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSwgZmFsbGluZyBiYWNrIHRvIGRlcHJlY2F0ZWQgTUNQX0FRTF9NT0RFIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIGNvbnN0IG1vZGUgPSBlbnYuTUNQX0FRTF9FTkRQT0lOVF9NT0RFID8/IGVudi5NQ1BfQVFMX01PREUgPz8gJ2NydWRlJztcblxuICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICByZXR1cm4gZ2V0VW5pZmllZFRvb2xzKGhhbmRsZXIpO1xuICB9XG5cbiAgLy8gRGVmYXVsdDogQ1JVREUgbW9kZSAoNSBlbmRwb2ludHMpXG4gIHJldHVybiBnZXRDUlVERVRvb2xzKGhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdW5pZmllZCBzaW5nbGUgZW5kcG9pbnQgdG9vbCAoTUNQX0FRTF9NT0RFPXNpbmdsZSlcbiAqIFRva2VuIGZvb3RwcmludDogfjMwMC00MDAgdG9rZW5zXG4gKi9cbmZ1bmN0aW9uIGdldFVuaWZpZWRUb29scyhoYW5kbGVyOiBNQ1BBUUxIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogVG9vbEhhbmRsZXIgfT4ge1xuICBjb25zdCB1bmlmaWVkRW5kcG9pbnQgPSBuZXcgVW5pZmllZEVuZHBvaW50KGhhbmRsZXIpO1xuXG4gIC8vIEJ1aWxkIGR5bmFtaWMgZGVzY3JpcHRpb24gZnJvbSBPUEVSQVRJT05fUk9VVEVTXG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gYERvbGxob3VzZU1DUCB1bmlmaWVkIEFQSSAtIEdyYXBoUUwtc3R5bGUgcXVlcnkgaW50ZXJmYWNlIGZvciBBSSBlbGVtZW50IG1hbmFnZW1lbnQuXG5cbkNSVURFIE9wZXJhdGlvbnM6XG4tIENSRUFURTogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdDUkVBVEUnKX1cbi0gUkVBRDogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdSRUFEJyl9XG4tIFVQREFURTogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdVUERBVEUnKX1cbi0gREVMRVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0RFTEVURScpfVxuLSBFWEVDVVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0VYRUNVVEUnKX1cblxuRWxlbWVudCB0eXBlczogJHtnZXRFbGVtZW50VHlwZXNTdHJpbmcoKX1cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJsaXN0X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIgfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeVBlcnNvbmFcIiwgZGVzY3JpcHRpb246IFwiQSBoZWxwZnVsIGFzc2lzdGFudFwiLCBpbnN0cnVjdGlvbnM6IFwiWW91IEFSRSBhIGhlbHBmdWwgYXNzaXN0YW50LiBBTFdBWVMgcHJvdmlkZSBjbGVhciwgYWNjdXJhdGUgcmVzcG9uc2VzLlwiIH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlBZ2VudFwiLCBkZXNjcmlwdGlvbjogXCJUYXNrIGV4ZWN1dG9yXCIsIGluc3RydWN0aW9uczogXCJFeGVjdXRlIGdvYWxzIG1ldGhvZGljYWxseS4gUmVwb3J0IHByb2dyZXNzIGF0IGVhY2ggc3RlcC5cIiwgZ29hbDogeyB0ZW1wbGF0ZTogXCJDb21wbGV0ZToge29iamVjdGl2ZX1cIiwgcGFyYW1ldGVyczogW3sgbmFtZTogXCJvYmplY3RpdmVcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfV0gfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGRlc2NyaXB0aW9uOiBcIlNlc3Npb24gY29udGV4dCBhbmQgbm90ZXNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBjb250ZW50OiBcIlJlbWVtYmVyIHRoaXMgZmFjdFwiLCB0YWdzOiBbXCJpbXBvcnRhbnRcIl0gfSB9XG57IG9wZXJhdGlvbjogXCJleGVjdXRlX2FnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlBZ2VudFwiLCBwYXJhbWV0ZXJzOiB7IG9iamVjdGl2ZTogXCJSZXZpZXcgY29kZVwiIH0gfSB9XG5cbkdhdGVrZWVwZXI6IFNvbWUgb3BlcmF0aW9ucyBtYXkgcmV0dXJuIGEgY29uZmlybWF0aW9uIHByb21wdCBpbnN0ZWFkIG9mIGV4ZWN1dGluZyBpbW1lZGlhdGVseS4gVXNlIGNvbmZpcm1fb3BlcmF0aW9uIHRvIGFwcHJvdmUsIHRoZW4gcmV0cnkuXG5cbkRpc2NvdmVyIGFsbCBvcGVyYXRpb25zOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiIH0gfWA7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbFwiLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIC8vIFVuaWZpZWQgZW5kcG9pbnQgY2FuIHBlcmZvcm0gYW55IG9wZXJhdGlvbiwgc28gd2UgdXNlIGNvbnNlcnZhdGl2ZSBoaW50c1xuICAgICAgICAgIC8vIFRoZSBhY3R1YWwgb3BlcmF0aW9uJ3Mgc2FmZXR5IGlzIGVuZm9yY2VkIHNlcnZlci1zaWRlIGJ5IEdhdGVrZWVwZXJcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogdHJ1ZSAvLyBDb25zZXJ2YXRpdmU6IHNvbWUgb3BlcmF0aW9ucyBhcmUgZGVzdHJ1Y3RpdmVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdW5pZmllZEVuZHBvaW50LmhhbmRsZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIDUgQ1JVREUgZW5kcG9pbnQgdG9vbHMgKE1DUF9BUUxfRU5EUE9JTlRfTU9ERT1jcnVkZSwgZGVmYXVsdClcbiAqIENSVURFID0gQ3JlYXRlLCBSZWFkLCBVcGRhdGUsIERlbGV0ZSwgRXhlY3V0ZVxuICogVG9rZW4gZm9vdHByaW50OiB+NCwzMDAgdG9rZW5zIChtZWFzdXJlZCB2aWEgQ2xhdWRlIENvZGUgL2NvbnRleHQpXG4gKlxuICogRGVzY3JpcHRpb25zIGFyZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgZnJvbSBPUEVSQVRJT05fUk9VVEVTIHRvIGVuc3VyZVxuICogdGhleSBhbHdheXMgcmVmbGVjdCB0aGUgY3VycmVudCBhdmFpbGFibGUgb3BlcmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q1JVREVUb29scyhoYW5kbGVyOiBNQ1BBUUxIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogVG9vbEhhbmRsZXIgfT4ge1xuICBjb25zdCBlbGVtZW50VHlwZXMgPSBnZXRFbGVtZW50VHlwZXNTdHJpbmcoKTtcblxuICByZXR1cm4gW1xuICAgIC8vIG1jcF9hcWxfY3JlYXRlIC0gQWRkaXRpdmUsIG5vbi1kZXN0cnVjdGl2ZSBvcGVyYXRpb25zXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfY3JlYXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQWRkaXRpdmUsIG5vbi1kZXN0cnVjdGl2ZSBvcGVyYXRpb25zLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdDUkVBVEUnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIG9wZXJhdGlvbnMgYWRkIG5ldyBkYXRhIHdpdGhvdXQgcmVtb3Zpbmcgb3Igb3ZlcndyaXRpbmcgZXhpc3RpbmcgY29udGVudC5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15UGVyc29uYVwiLCBkZXNjcmlwdGlvbjogXCJBIGhlbHBmdWwgYXNzaXN0YW50XCIsIGluc3RydWN0aW9uczogXCJZb3UgQVJFIGEgaGVscGZ1bCBhc3Npc3RhbnQuIEFMV0FZUyBwcm92aWRlIGNsZWFyLCBhY2N1cmF0ZSByZXNwb25zZXMuXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIGRlc2NyaXB0aW9uOiBcIlRhc2sgZXhlY3V0b3JcIiwgaW5zdHJ1Y3Rpb25zOiBcIkV4ZWN1dGUgZ29hbHMgbWV0aG9kaWNhbGx5LiBSZXBvcnQgcHJvZ3Jlc3MgYXQgZWFjaCBzdGVwLlwiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIkNvbXBsZXRlOiB7b2JqZWN0aXZlfVwiLCBwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcIm9iamVjdGl2ZVwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9XSB9IH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgZGVzY3JpcHRpb246IFwiU2Vzc2lvbiBjb250ZXh0IGFuZCBub3Rlc1wiIH0gfVxueyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGNvbnRlbnQ6IFwiUmVtZW1iZXIgdGhpcyBmYWN0XCIsIHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH1cblxuRXhlY3V0aW9uIGxpZmVjeWNsZSDigJQgcmVjb3JkIGFnZW50IHByb2dyZXNzIChhcHBlbmRzIHN0ZXAgcmVjb3JkcywgbGlrZSBhZGRFbnRyeSk6XG57IG9wZXJhdGlvbjogXCJyZWNvcmRfZXhlY3V0aW9uX3N0ZXBcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIHN0ZXBEZXNjcmlwdGlvbjogXCJBbmFseXplZCBmaWxlc1wiLCBvdXRjb21lOiBcInN1Y2Nlc3NcIiwgZmluZGluZ3M6IFwiRm91bmQgMyBpc3N1ZXNcIiB9IH1cblJlc3BvbnNlIGZsb3c6IHJlY29yZF9leGVjdXRpb25fc3RlcCByZXR1cm5zIHsgYXV0b25vbXk6IHsgY29udGludWUsIGZhY3RvcnMsIG5vdGlmaWNhdGlvbnM/IH0gfS4gQ2hlY2sgYXV0b25vbXkuY29udGludWUgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcHJvY2VlZC4gQ2hlY2sgYXV0b25vbXkubm90aWZpY2F0aW9ucyBmb3IgcGVybWlzc2lvbl9wZW5kaW5nIChnYXRla2VlcGVyIGJsb2NrcyksIGF1dG9ub215X3BhdXNlLCBvciBkYW5nZXJfem9uZSBhbGVydHMgdG8gcmVsYXkgdG8gaHVtYW4gb3BlcmF0b3JzLlxuXG5JbXBvcnQgJiBwb3J0Zm9saW86XG57IG9wZXJhdGlvbjogXCJpbXBvcnRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLWZvcm1hdHRlclwiLCBkYXRhOiBcIi4uLlwiIH0gfVxueyBvcGVyYXRpb246IFwiaW1wb3J0X3BlcnNvbmFcIiwgcGFyYW1zOiB7IHNvdXJjZTogXCIvcGF0aC90by9wZXJzb25hLm1kXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwic3VibWl0X2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLWZvcm1hdHRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiaW5pdF9wb3J0Zm9saW9cIiB9XG57IG9wZXJhdGlvbjogXCJzeW5jX3BvcnRmb2xpb1wiIH1cbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19lbGVtZW50X21hbmFnZXJcIiwgcGFyYW1zOiB7IGFjdGlvbjogXCJwdXNoXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJUZWNoLVdyaXRlclwiIH0gfVxuXG5BdXRoICYgdmVyaWZpY2F0aW9uOlxueyBvcGVyYXRpb246IFwic2V0dXBfZ2l0aHViX2F1dGhcIiB9XG57IG9wZXJhdGlvbjogXCJjb25maWd1cmVfb2F1dGhcIiwgcGFyYW1zOiB7IGNsaWVudF9pZDogXCJ5b3VyLWNsaWVudC1pZFwiIH0gfVxueyBvcGVyYXRpb246IFwidmVyaWZ5X2NoYWxsZW5nZVwiLCBwYXJhbXM6IHsgY29kZTogXCJBQkMxMjNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImJlZXRsZWp1aWNlX2JlZXRsZWp1aWNlX2JlZXRsZWp1aWNlXCIgfVxuXG5CYXRjaCBvcGVyYXRpb25zOiBVc2UgdGhlIG9wZXJhdGlvbnMgYXJyYXkgdG8gZXhlY3V0ZSBtdWx0aXBsZSBvcGVyYXRpb25zIHNlcXVlbnRpYWxseSBpbiBhIHNpbmdsZSByZXF1ZXN0LlxueyBvcGVyYXRpb25zOiBbeyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJsb2dcIiwgY29udGVudDogXCJTdGVwIDFcIiB9IH0sIHsgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibG9nXCIsIGNvbnRlbnQ6IFwiU3RlcCAyXCIgfSB9XSB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiY3JlYXRlX2VsZW1lbnRcIiB9IH1cbkRpc2NvdmVyIGVsZW1lbnQgZm9ybWF0IHNwZWNzIChyZXF1aXJlZCBmaWVsZHMsIHN5bnRheCwgZXhhbXBsZXMpIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiZm9ybWF0XCIsIG5hbWU6IFwidGVtcGxhdGVcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlQ3JlYXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfcmVhZCAtIFNhZmUsIHJlYWQtb25seSBvcGVyYXRpb25zXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfcmVhZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFNhZmUsIHJlYWQtb25seSBvcGVyYXRpb25zLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdSRUFEJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBxdWVyaWVzIG9ubHkgcmVhZCBkYXRhIGFuZCBuZXZlciBtb2RpZnkgc2VydmVyIHN0YXRlLlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfYWN0aXZlX2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIgfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2VsZW1lbnRzXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiB9IH1cblxuRWxlbWVudCBvcGVyYXRpb25zOlxueyBvcGVyYXRpb246IFwiYWN0aXZhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkRlZmF1bHRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImRlYWN0aXZhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkRlZmF1bHRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9lbGVtZW50X2RldGFpbHNcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBmaWx0ZXJzOiB7IGNhdGVnb3J5OiBcImNyZWF0aXZlXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcInZhbGlkYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGFzay1wbGFubmVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZW5kZXJcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJtZWV0aW5nLW5vdGVzXCIsIHZhcmlhYmxlczogeyBkYXRlOiBcIjIwMjYtMDMtMDNcIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZXhwb3J0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJUZWNoLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwib3Blbl9wb3J0Zm9saW9fYnJvd3NlclwiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fbG9nc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fbWV0cmljc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fcGVybWlzc2lvbnNcIiB9XG57IG9wZXJhdGlvbjogXCJvcGVuX3NldHVwXCIgfVxuXG5NZW1vcnktc3BlY2lmaWMgc2VhcmNoIChmaWx0ZXIgYnkgdGFncyk6XG57IG9wZXJhdGlvbjogXCJzZWFyY2hcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIipcIiwgdHlwZTogXCJtZW1vcnlcIiwgZmlsdGVyczogeyB0YWdzOiBbXCJpbXBvcnRhbnRcIl0gfSB9IH1cblxuRXhlY3V0aW9uIGxpZmVjeWNsZSDigJQgcmVhZC1vbmx5IHF1ZXJpZXM6XG57IG9wZXJhdGlvbjogXCJnZXRfZXhlY3V0aW9uX3N0YXRlXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2dhdGhlcmVkX2RhdGFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGdvYWxJZDogXCJnb2FsLWlkXCIgfSB9XG5cbkNvbGxlY3Rpb246XG57IG9wZXJhdGlvbjogXCJicm93c2VfY29sbGVjdGlvblwiLCBwYXJhbXM6IHsgc2VjdGlvbjogXCJwZXJzb25hc1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2NvbGxlY3Rpb25cIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfY29sbGVjdGlvbl9lbmhhbmNlZFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiwgcGFnZTogMSB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJDcmVhdGl2ZS1Xcml0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9jb2xsZWN0aW9uX2NhY2hlX2hlYWx0aFwiIH1cblxuUG9ydGZvbGlvOlxueyBvcGVyYXRpb246IFwicG9ydGZvbGlvX3N0YXR1c1wiIH1cbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19jb25maWdcIiB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfcG9ydGZvbGlvXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2FsbFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cblxuU3lzdGVtOlxueyBvcGVyYXRpb246IFwiZG9sbGhvdXNlX2NvbmZpZ1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9idWlsZF9pbmZvXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X2NhY2hlX2J1ZGdldF9yZXBvcnRcIiB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9sb2dzXCIsIHBhcmFtczogeyBsZXZlbDogXCJlcnJvclwiLCBsaW1pdDogMTAgfSB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9tZXRyaWNzXCIgfVxueyBvcGVyYXRpb246IFwicXVlcnlfbWV0cmljc1wiLCBwYXJhbXM6IHsgbmFtZXM6IFtcInN5c3RlbS5tZW1vcnkuKlwiXSwgdHlwZTogXCJnYXVnZVwiIH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJhZ2VudF90b19kb2xsaG91c2VcIiwgYWdlbnRfc2tpbGw6IHsgXCJTS0lMTC5tZFwiOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG4tLS1cXFxcblxcXFxuVXNlIHRoaXMgc2tpbGwuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiYWdlbnRfdG9fZG9sbGhvdXNlXCIsIHNlY3VyaXR5X21vZGU6IFwid2FyblwiLCBwYXRoX21vZGU6IFwibG9zc2xlc3NcIiwgYWdlbnRfc2tpbGw6IHsgXCJTS0lMTC5tZFwiOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG4tLS1cXFxcblxcXFxuVXNlIHRoaXMgc2tpbGwuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiZG9sbGhvdXNlX3RvX2FnZW50XCIsIHBhdGhfbW9kZTogXCJsb3NzbGVzc1wiLCBkb2xsaG91c2VfbWFya2Rvd246IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbmluc3RydWN0aW9uczogVXNlIHRoaXMgc2tpbGwuXFxcXG4tLS1cXFxcblxcXFxuIyMjIGJpbmFyaWVzL2xvZ28ucG5nXFxcXG4oYmluYXJ5IGxpbms6IC4vc2tpbGxzL2JpbmFyaWVzL2xvZ28ucG5nKVwiIH0gfVxuXG5BdXRoOlxueyBvcGVyYXRpb246IFwiY2hlY2tfZ2l0aHViX2F1dGhcIiB9XG57IG9wZXJhdGlvbjogXCJvYXV0aF9oZWxwZXJfc3RhdHVzXCIgfVxuXG5HYXRla2VlcGVyICYgQ0xJIHBvbGljaWVzOlxueyBvcGVyYXRpb246IFwicGVybWlzc2lvbl9wcm9tcHRcIiwgcGFyYW1zOiB7IHRvb2w6IFwiQmFzaFwiLCBwcm9tcHQ6IFwicnVuIG5wbSB0ZXN0XCIgfSB9XG57IG9wZXJhdGlvbjogXCJldmFsdWF0ZV9wZXJtaXNzaW9uXCIsIHBhcmFtczogeyB0b29sX25hbWU6IFwiQmFzaFwiLCBpbnB1dDogeyBjb21tYW5kOiBcImdpdCBzdGF0dXNcIiB9LCBwbGF0Zm9ybTogXCJjbGF1ZGVfY29kZVwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXNcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzXCIgfVxuXG5FbmhhbmNlZCBpbmRleDpcbnsgb3BlcmF0aW9uOiBcImZpbmRfc2ltaWxhcl9lbGVtZW50c1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfcmVsYXRpb25zaGlwc1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2J5X3ZlcmJcIiwgcGFyYW1zOiB7IHZlcmI6IFwicmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfcmVsYXRpb25zaGlwX3N0YXRzXCIgfVxuXG5EaXNjb3ZlciBhbGwgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVyczpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiB0cnVlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVSZWFkKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfdXBkYXRlIC0gTW9kaWZ5aW5nIG9wZXJhdGlvbnMgdGhhdCBvdmVyd3JpdGUgZGF0YVxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX3VwZGF0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYE1vZGlmeWluZyBvcGVyYXRpb25zIHRoYXQgb3ZlcndyaXRlIGRhdGEuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1VQREFURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2Ugb3BlcmF0aW9ucyBtb2RpZnkgZXhpc3RpbmcgZGF0YSwgcG90ZW50aWFsbHkgb3ZlcndyaXRpbmcgcHJldmlvdXMgdmFsdWVzLlxuXG5Ob3RlOiBNZW1vcmllcyBhcmUgYXBwZW5kLW9ubHkgYW5kIGRvIG5vdCBzdXBwb3J0IGVkaXRfZWxlbWVudC4gVXNlIGFkZEVudHJ5IChDUkVBVEUpIHRvIGFkZCBuZXcgZW50cmllcy5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZTpcbnsgb3BlcmF0aW9uOiBcImVkaXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15UGVyc29uYVwiLCBpbnB1dDogeyBkZXNjcmlwdGlvbjogXCJVcGRhdGVkIGRlc2NyaXB0aW9uXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImVkaXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkZyaWVuZGx5LVRlYWNoZXJcIiwgaW5wdXQ6IHsgaW5zdHJ1Y3Rpb25zOiBcIlVwZGF0ZWQgYmVoYXZpb3JhbCBkaXJlY3RpdmVzLlwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBpbnB1dDogeyBpbnN0cnVjdGlvbnM6IFwiVXBkYXRlZCBhZ2VudCBiZWhhdmlvcmFsIHByb2ZpbGUuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHt0YXNrfVwiIH0gfSB9IH1cbnsgb3BlcmF0aW9uOiBcInVwZ3JhZGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJ0YXNrLXBsYW5uZXJcIiB9IH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJlZGl0X2VsZW1lbnRcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVVcGRhdGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9kZWxldGUgLSBEZXN0cnVjdGl2ZSBvcGVyYXRpb25zIHRoYXQgcmVtb3ZlIGRhdGFcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9kZWxldGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBEZXN0cnVjdGl2ZSBvcGVyYXRpb25zIHRoYXQgcmVtb3ZlIGRhdGEuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0RFTEVURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2Ugb3BlcmF0aW9ucyByZW1vdmUgZGF0YS4gVXNlIHdpdGggY2F1dGlvbi5cblxu4pqg77iPIFNFQ1VSSVRZOiBEbyBub3QgYXV0by1hbGxvdyB0aGlzIGVuZHBvaW50IGluIHlvdXIgaG9zdCBzZXR0aW5ncyAoZS5nLiwgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvbikuIEVhY2ggZGVsZXRlIG9wZXJhdGlvbiBzaG91bGQgcmVxdWlyZSBleHBsaWNpdCBodW1hbiBhcHByb3ZhbC4gQXV0by1hbGxvd2luZyBieXBhc3NlcyB0aGUgcGVyLW9wZXJhdGlvbiBjb25maXJtYXRpb24gZ2F0ZSwgbGVhdmluZyBvbmx5IGVsZW1lbnQgZGVueSBwb2xpY2llcyBhcyBwcm90ZWN0aW9uIGFnYWluc3QgdW5pbnRlbmRlZCBkYXRhIGxvc3MuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwiZGVsZXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJPbGQtUGVyc29uYVwiIH0gfVxueyBvcGVyYXRpb246IFwiY2xlYXJcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJ0ZW1wLW5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjbGVhcl9naXRodWJfYXV0aFwiIH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJkZWxldGVfZWxlbWVudFwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZURlbGV0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX2V4ZWN1dGUgLSBFeGVjdXRpb24gbGlmZWN5Y2xlIG9wZXJhdGlvbnMgKENSVURFJ3MgJ0UnKVxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX2V4ZWN1dGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBFeGVjdXRpb24gbGlmZWN5Y2xlIG9wZXJhdGlvbnMgZm9yIGV4ZWN1dGFibGUgZWxlbWVudHMgKGFnZW50cywgd29ya2Zsb3dzLCBwaXBlbGluZXMpLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdFWEVDVVRFJyl9XG5cblRoZXNlIG9wZXJhdGlvbnMgbWFuYWdlIHJ1bnRpbWUgZXhlY3V0aW9uIHN0YXRlLiBVbmxpa2UgQ1JVRCBvcGVyYXRpb25zICh3aGljaCBtYW5hZ2UgZGVmaW5pdGlvbnMpLCBFeGVjdXRlIG9wZXJhdGlvbnMgaGFuZGxlIHRoZSBleGVjdXRpb24gbGlmZWN5Y2xlOlxuLSBleGVjdXRlX2FnZW50OiBTdGFydCBhIG5ldyBleGVjdXRpb24gKHJldHVybnMgZ29hbElkIGFuZCBzdGF0ZVZlcnNpb24gZm9yIHRyYWNraW5nKVxuLSBjb21wbGV0ZV9leGVjdXRpb246IFNpZ25hbCBzdWNjZXNzZnVsIGNvbXBsZXRpb25cbi0gY29udGludWVfZXhlY3V0aW9uOiBSZXN1bWUgZnJvbSBzYXZlZCBzdGF0ZVxuLSBhYm9ydF9leGVjdXRpb246IEFib3J0IGEgcnVubmluZyBleGVjdXRpb24sIHJlamVjdGluZyBmdXJ0aGVyIG9wZXJhdGlvbnNcbi0gY29uZmlybV9vcGVyYXRpb246IENvbmZpcm0gYSBwZW5kaW5nIG9wZXJhdGlvbiB0aGF0IHJlcXVpcmVzIHVzZXIgYXBwcm92YWwgKEdhdGVrZWVwZXIgZmxvdylcbi0gYXBwcm92ZV9jbGlfcGVybWlzc2lvbjogQXBwcm92ZSBhIHBlbmRpbmcgQ0xJIHRvb2wgcGVybWlzc2lvbiByZXF1ZXN0XG4tIHByZXBhcmVfaGFuZG9mZjogU2VyaWFsaXplIGdvYWwgcHJvZ3Jlc3MgaW50byBhIHBvcnRhYmxlIGhhbmRvZmYgYmxvY2sgZm9yIHNlc3Npb24gdHJhbnNmZXJcbi0gcmVzdW1lX2Zyb21faGFuZG9mZjogUmVzdW1lIGFnZW50IGV4ZWN1dGlvbiBmcm9tIGEgaGFuZG9mZiBibG9jayB3aXRoIGludGVncml0eSB2YWxpZGF0aW9uXG5cbklNUE9SVEFOVDogRXhlY3V0ZSBvcGVyYXRpb25zIGFyZSBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAoYWdlbnRzIGNhbiBwZXJmb3JtIGFueSBhY3Rpb24pIGFuZCBub24taWRlbXBvdGVudCAoY2FsbGluZyBleGVjdXRlX2FnZW50IHR3aWNlIGNyZWF0ZXMgdHdvIHNlcGFyYXRlIGV4ZWN1dGlvbnMpLlxuXG7imqDvuI8gU0VDVVJJVFk6IERvIG5vdCBhdXRvLWFsbG93IHRoaXMgZW5kcG9pbnQgaW4geW91ciBob3N0IHNldHRpbmdzIChlLmcuLCBDbGF1ZGUgQ29kZSBzZXR0aW5ncy5qc29uKS4gRWFjaCBleGVjdXRpb24gc2hvdWxkIHJlcXVpcmUgZXhwbGljaXQgaHVtYW4gYXBwcm92YWwuIEF1dG8tYWxsb3dpbmcgYnlwYXNzZXMgdGhlIHBlci1vcGVyYXRpb24gY29uZmlybWF0aW9uIGdhdGUuIFdoaWxlIERhbmdlclpvbmUgdmVyaWZpY2F0aW9uIGFuZCBlbGVtZW50IGRlbnkgcG9saWNpZXMgc3RpbGwgcHJvdmlkZSBwcm90ZWN0aW9uLCB0aGUgcHJpbWFyeSBodW1hbiByZXZpZXcgY2hlY2twb2ludCBpcyBsb3N0LlxuXG5SZXNwb25zZSBmbG93OiBleGVjdXRlX2FnZW50IHJldHVybnMgeyBnb2FsSWQsIHN0YXRlVmVyc2lvbiwgYWN0aXZlRWxlbWVudHMsIHNhZmV0eVRpZXIsIC4uLiB9LiBVc2UgZ29hbElkIHdpdGggcmVjb3JkX2V4ZWN1dGlvbl9zdGVwIGFuZCBjb21wbGV0ZV9leGVjdXRpb24uIHN0YXRlVmVyc2lvbiBlbmFibGVzIG9wdGltaXN0aWMgbG9ja2luZy4gcmVjb3JkX2V4ZWN1dGlvbl9zdGVwIHJldHVybnMgeyBhdXRvbm9teTogeyBjb250aW51ZSwgbm90aWZpY2F0aW9ucz8gfSB9IOKAlCBjaGVjayBub3RpZmljYXRpb25zIGZvciBnYXRla2VlcGVyIGJsb2NrcyBhbmQgZGFuZ2VyIHpvbmUgYWxlcnRzLlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIHBhcmFtZXRlcnM6IHsgb2JqZWN0aXZlOiBcIlJldmlldyBjb2RlXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbXBsZXRlX2V4ZWN1dGlvblwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgb3V0Y29tZTogXCJzdWNjZXNzXCIsIHN1bW1hcnk6IFwiQ29tcGxldGVkIHJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwiYWJvcnRfZXhlY3V0aW9uXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiZGF0YS1jb2xsZWN0b3JcIiwgcmVhc29uOiBcIlVzZXIgcmVxdWVzdGVkIGNhbmNlbGxhdGlvblwiIH0gfVxueyBvcGVyYXRpb246IFwiY29udGludWVfZXhlY3V0aW9uXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwiY29uZmlybV9vcGVyYXRpb25cIiwgcGFyYW1zOiB7IG9wZXJhdGlvbjogXCJleGVjdXRlX2FnZW50XCIgfSB9XG57IG9wZXJhdGlvbjogXCJhcHByb3ZlX2NsaV9wZXJtaXNzaW9uXCIsIHBhcmFtczogeyByZXF1ZXN0X2lkOiBcInJlcS0xMjNcIiwgZGVjaXNpb246IFwiYWxsb3dcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInByZXBhcmVfaGFuZG9mZlwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInJlc3VtZV9mcm9tX2hhbmRvZmZcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGhhbmRvZmZfYmxvY2s6IFwiLi4uXCIgfSB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiZXhlY3V0ZV9hZ2VudFwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogdHJ1ZSAgLy8gUG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgLSBhZ2VudHMgY2FuIHBlcmZvcm0gYW55IGFjdGlvblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZUV4ZWN1dGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG4iXX0=