@cdklabs/cdk-appmod-catalog-blueprints 1.12.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/.jsii +3 -3
  2. package/README.md +191 -76
  3. package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
  4. package/lib/document-processing/agentic-document-processing.js +1 -1
  5. package/lib/document-processing/base-document-processing.js +1 -1
  6. package/lib/document-processing/bedrock-document-processing.js +1 -1
  7. package/lib/document-processing/default-document-processing-config.js +1 -1
  8. package/lib/framework/agents/base-agent.js +1 -1
  9. package/lib/framework/agents/batch-agent.js +1 -1
  10. package/lib/framework/agents/default-agent-config.js +1 -1
  11. package/lib/framework/agents/interactive-agent.js +9 -9
  12. package/lib/framework/agents/knowledge-base/base-knowledge-base.js +1 -1
  13. package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +1 -1
  14. package/lib/framework/bedrock/bedrock.js +1 -1
  15. package/lib/framework/custom-resource/default-runtimes.js +1 -1
  16. package/lib/framework/foundation/access-log.js +1 -1
  17. package/lib/framework/foundation/eventbridge-broker.js +1 -1
  18. package/lib/framework/foundation/network.js +1 -1
  19. package/lib/utilities/data-loader.js +1 -1
  20. package/lib/utilities/lambda-iam-utils.js +1 -1
  21. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
  22. package/lib/utilities/observability/cloudwatch-transaction-search.js +1 -1
  23. package/lib/utilities/observability/default-observability-config.js +1 -1
  24. package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
  25. package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
  26. package/lib/utilities/observability/powertools-config.js +1 -1
  27. package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
  28. package/lib/webapp/frontend-construct.js +1 -1
  29. package/package.json +1 -1
@@ -377,5 +377,5 @@ class BaseDocumentProcessing extends constructs_1.Construct {
377
377
  }
378
378
  exports.BaseDocumentProcessing = BaseDocumentProcessing;
379
379
  _a = JSII_RTTI_SYMBOL_1;
380
- BaseDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseDocumentProcessing", version: "1.12.0" };
380
+ BaseDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseDocumentProcessing", version: "1.13.0" };
381
381
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2Q0FBeUU7QUFFekUsMkRBQThGO0FBQzlGLGlEQUFxRTtBQUNyRSxpREFBc0c7QUFDdEcsaURBQTBDO0FBQzFDLHFFQUEySTtBQUMzSSxpRkFBMks7QUFDM0ssMkNBQXVDO0FBQ3ZDLHVDQUFzRDtBQUN0RCw2RkFBdUY7QUFHdkYsNENBQXdGO0FBQ3hGLDBHQUFxRztBQUNyRyw4SEFBd0g7QUFFeEgsNElBQXFJO0FBNkRySTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBc0Isc0JBQXVCLFNBQVEsc0JBQVM7SUFnQjVEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0M7UUFDMUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSx5QkFBZSxFQUFFLENBQUM7UUFFcEUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsd0NBQThCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsd0NBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0YsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIs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Q2pHLHlCQUF5QixFQUFFO2dCQUN6QixZQUFZLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO2dCQUN4RSx1QkFBdUIsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxZQUFZLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO2FBQzdIO1lBQ0QsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztTQUM3QixDQUFDLENBQ0g7YUFDQSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFekIsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDOztBQWhiSCx3REF5ZEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IER1cmF0aW9uLCBQcm9wZXJ0eUluamVjdG9ycywgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElNZXRyaWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVUeXBlLCBCaWxsaW5nTW9kZSwgVGFibGUsIFRhYmxlRW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5RG9jdW1lbnQsIFBvbGljeVN0YXRlbWVudCwgUm9sZSwgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBDdXN0b21lck1hbmFnZWRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiwgRGVmaW5pdGlvbkJvZHksIElDaGFpbmFibGUsIEpzb25QYXRoLCBTdGF0ZU1hY2hpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBCZWRyb2NrSW52b2tlTW9kZWwsIER5bmFtb0F0dHJpYnV0ZVZhbHVlLCBEeW5hbW9QdXRJdGVtLCBEeW5hbW9VcGRhdGVJdGVtLCBMYW1iZGFJbnZva2UsIFN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSUFkYXB0ZXIsIFF1ZXVlZFMzQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcic7XG5pbXBvcnQgeyBEZWZhdWx0RG9jdW1lbnRQcm9jZXNzaW5nQ29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWRvY3VtZW50LXByb2Nlc3NpbmctY29uZmlnJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9mcmFtZXdvcmsnO1xuaW1wb3J0IHsgRXZlbnRicmlkZ2VCcm9rZXIgfSBmcm9tICcuLi9mcmFtZXdvcmsvZm91bmRhdGlvbi9ldmVudGJyaWRnZS1icm9rZXInO1xuaW1wb3J0IHsgTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzLCBMb2dHcm91cERhdGFQcm90ZWN0aW9uVXRpbHMgfSBmcm9tICcuLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcgfSBmcm9tICcuLi91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9kZWZhdWx0LW9ic2VydmFiaWxpdHktY29uZmlnJztcbmltcG9ydCB7IExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yIH0gZnJvbSAnLi4vdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvbGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuaW1wb3J0IHsgSU9ic2VydmFibGUsIE9ic2VydmFibGVQcm9wcyB9IGZyb20gJy4uL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5L29ic2VydmFibGUnO1xuaW1wb3J0IHsgU3RhdGVNYWNoaW5lT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IgfSBmcm9tICcuLi91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9zdGF0ZS1tYWNoaW5lLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgQmFzZURvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIGV4dGVuZHMgT2JzZXJ2YWJsZVByb3BzIHtcblxuICAvKipcbiAgICogQWRhcHRlciB0aGF0IGRlZmluZXMgaG93IHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHdvcmtmbG93IGlzIHRyaWdnZXJlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBRdWV1ZWRTM0FkYXB0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGluZ3Jlc3NBZGFwdGVyPzogSUFkYXB0ZXI7XG5cbiAgLyoqXG4gICAqIER5bmFtb0RCIHRhYmxlIGZvciBzdG9yaW5nIGRvY3VtZW50IHByb2Nlc3NpbmcgbWV0YWRhdGEgYW5kIHdvcmtmbG93IHN0YXRlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmV3IHRhYmxlIHdpbGwgYmUgY3JlYXRlZCB3aXRoIERvY3VtZW50SWQgYXMgcGFydGl0aW9uIGtleS5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlPzogVGFibGU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gZXhlY3V0aW9uIHRpbWUgZm9yIHRoZSBTdGVwIEZ1bmN0aW9ucyB3b3JrZmxvdy5cbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93VGltZW91dD86IER1cmF0aW9uO1xuICAvKipcbiAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIGNyZWF0ZWQgcmVzb3VyY2VzIChidWNrZXQsIHRhYmxlLCBxdWV1ZSkuXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBFdmVudEJyaWRnZSBicm9rZXIgZm9yIHB1Ymxpc2hpbmcgY3VzdG9tIGV2ZW50cyBkdXJpbmcgcHJvY2Vzc2luZy5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBubyBjdXN0b20gZXZlbnRzIHdpbGwgYmUgc2VudCBvdXQuXG4gICAqL1xuICByZWFkb25seSBldmVudGJyaWRnZUJyb2tlcj86IEV2ZW50YnJpZGdlQnJva2VyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgbG9nZ2luZyBhbmQgdHJhY2luZyBmb3IgYWxsIHN1cHBvcnRpbmcgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBjYW4gcnVuIGluc2lkZSBhIFZQQyB3aWxsIGZvbGxvdyB0aGUgcHJvdmlkZWQgbmV0d29yayBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IHJlc291cmNlcyB3aWxsIHJ1biBvdXRzaWRlIG9mIGEgVlBDXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29yaztcblxuICAvKipcbiAgICogS01TIGtleSB0byBiZSB1c2VkLlxuICAgKiBAZGVmYXVsdCBBIG5ldyBrZXkgd291bGQgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IEtleTtcbn1cblxuLyoqXG4gKiBVbmlvbiB0eXBlIGZvciBTdGVwIEZ1bmN0aW9ucyB0YXNrcyB0aGF0IGNhbiBiZSB1c2VkIGluIGRvY3VtZW50IHByb2Nlc3Npbmcgd29ya2Zsb3dzLlxuICogU3VwcG9ydHMgQmVkcm9jayBtb2RlbCBpbnZvY2F0aW9uLCBMYW1iZGEgZnVuY3Rpb24gaW52b2NhdGlvbiwgYW5kIG5lc3RlZCBTdGVwIEZ1bmN0aW9ucyBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlID0gQmVkcm9ja0ludm9rZU1vZGVsIHwgTGFtYmRhSW52b2tlIHwgU3RlcEZ1bmN0aW9uc1N0YXJ0RXhlY3V0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHNlcnZlcmxlc3MgZG9jdW1lbnQgcHJvY2Vzc2luZyB3b3JrZmxvd3MuXG4gKlxuICogUHJvdmlkZXMgYSBjb21wbGV0ZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lIHdpdGg6XG4gKiAtICoqUzMgU3RvcmFnZSoqOiBPcmdhbml6ZWQgd2l0aCBwcmVmaXhlcyAocmF3LywgcHJvY2Vzc2VkLywgZmFpbGVkLykgZm9yIGRvY3VtZW50IGxpZmVjeWNsZSBtYW5hZ2VtZW50XG4gKiAtICoqU1FTIFF1ZXVlKio6IFJlbGlhYmxlIG1lc3NhZ2UgcHJvY2Vzc2luZyB3aXRoIGNvbmZpZ3VyYWJsZSB2aXNpYmlsaXR5IHRpbWVvdXQgYW5kIGRlYWQgbGV0dGVyIHF1ZXVlXG4gKiAtICoqRHluYW1vREIgVGFibGUqKjogV29ya2Zsb3cgbWV0YWRhdGEgdHJhY2tpbmcgd2l0aCBEb2N1bWVudElkIGFzIHBhcnRpdGlvbiBrZXlcbiAqIC0gKipTdGVwIEZ1bmN0aW9ucyoqOiBPcmNoZXN0cmF0ZWQgd29ya2Zsb3cgd2l0aCBhdXRvbWF0aWMgZmlsZSBtb3ZlbWVudCBiYXNlZCBvbiBwcm9jZXNzaW5nIG91dGNvbWVcbiAqIC0gKipBdXRvLXRyaWdnZXJpbmcqKjogUzMgZXZlbnQgbm90aWZpY2F0aW9ucyBhdXRvbWF0aWNhbGx5IHN0YXJ0IHByb2Nlc3Npbmcgd2hlbiBmaWxlcyBhcmUgdXBsb2FkZWQgdG8gcmF3LyBwcmVmaXhcbiAqIC0gKipFcnJvciBIYW5kbGluZyoqOiBGYWlsZWQgZG9jdW1lbnRzIGFyZSBtb3ZlZCB0byBmYWlsZWQvIHByZWZpeCB3aXRoIGVycm9yIGRldGFpbHMgc3RvcmVkIGluIER5bmFtb0RCXG4gKiAtICoqRXZlbnRCcmlkZ2UgSW50ZWdyYXRpb24qKjogT3B0aW9uYWwgY3VzdG9tIGV2ZW50IHB1Ymxpc2hpbmcgZm9yIHdvcmtmbG93IHN0YXRlIGNoYW5nZXNcbiAqXG4gKiAjIyBBcmNoaXRlY3R1cmUgRmxvd1xuICogUzMgVXBsb2FkIChyYXcvKSDihpIgU1FTIOKGkiBMYW1iZGEgQ29uc3VtZXIg4oaSIFN0ZXAgRnVuY3Rpb25zIOKGkiBQcm9jZXNzaW5nIFN0ZXBzIOKGkiBTMyAocHJvY2Vzc2VkL2ZhaWxlZC8pXG4gKlxuICogIyMgSW1wbGVtZW50YXRpb24gUmVxdWlyZW1lbnRzXG4gKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IGZvdXIgYWJzdHJhY3QgbWV0aG9kcyB0byBkZWZpbmUgdGhlIHByb2Nlc3Npbmcgd29ya2Zsb3c6XG4gKiAtIGBjbGFzc2lmaWNhdGlvblN0ZXAoKWA6IERvY3VtZW50IHR5cGUgY2xhc3NpZmljYXRpb25cbiAqIC0gYGV4dHJhY3Rpb25TdGVwKClgOiBEYXRhIGV4dHJhY3Rpb24gZnJvbSBkb2N1bWVudHNcbiAqIC0gYGVucmljaG1lbnRTdGVwKClgOiBPcHRpb25hbCBkYXRhIGVucmljaG1lbnQgKHJldHVybiB1bmRlZmluZWQgdG8gc2tpcClcbiAqIC0gYHBvc3RQcm9jZXNzaW5nU3RlcCgpYDogT3B0aW9uYWwgcG9zdC1wcm9jZXNzaW5nIChyZXR1cm4gdW5kZWZpbmVkIHRvIHNraXApXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU9ic2VydmFibGUge1xuICAvKiogQnVzaW5lc3MgbWV0cmljIHNlcnZpY2UgbmFtZS4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBpbml0aWFsIHNlcnZpY2UgZGltZW5zaW9uICovXG4gIHJlYWRvbmx5IG1ldHJpY1NlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBCdXNpbmVzcyBtZXRyaWMgbmFtZXNwYWNlLiAqL1xuICByZWFkb25seSBtZXRyaWNOYW1lc3BhY2U6IHN0cmluZztcbiAgLyoqIGxvZyBncm91cCBkYXRhIHByb3RlY3Rpb24gY29uZmlndXJhdGlvbiAqL1xuICByZWFkb25seSBsb2dHcm91cERhdGFQcm90ZWN0aW9uOiBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHM7XG4gIC8qKiBEeW5hbW9EQiB0YWJsZSBmb3Igc3RvcmluZyBkb2N1bWVudCBwcm9jZXNzaW5nIG1ldGFkYXRhIGFuZCB3b3JrZmxvdyBzdGF0ZSAqL1xuICByZWFkb25seSBkb2N1bWVudFByb2Nlc3NpbmdUYWJsZTogVGFibGU7XG4gIC8qKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEJhc2VEb2N1bWVudFByb2Nlc3NpbmdQcm9wcztcbiAgLyoqIEtNUyBrZXkgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogS2V5O1xuICAvKiogSW5ncmVzcyBhZGFwdGVyLCByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB3b3JrZmxvdyAqL1xuICByZWFkb25seSBpbmdyZXNzQWRhcHRlcjogSUFkYXB0ZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQmFzZURvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wbGV0ZSBkb2N1bWVudCBwcm9jZXNzaW5nIGluZnJhc3RydWN0dXJlIGluY2x1ZGluZyBTMyBidWNrZXQsXG4gICAqIFNRUyBxdWV1ZSwgRHluYW1vREIgdGFibGUsIGFuZCBzZXRzIHVwIFMzIGV2ZW50IG5vdGlmaWNhdGlvbnMgdG8gdHJpZ2dlciBwcm9jZXNzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5pbmdyZXNzQWRhcHRlciA9IHByb3BzLmluZ3Jlc3NBZGFwdGVyIHx8IG5ldyBRdWV1ZWRTM0FkYXB0ZXIoKTtcblxuICAgIGlmIChwcm9wcy5uZXR3b3JrKSB7XG4gICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1zZm4nLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1RFUF9GVU5DVElPTlMpO1xuICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2UtZWInLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRVZFTlRCUklER0UpO1xuICAgICAgaWYgKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2UtbG9ncycsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5DTE9VRFdBVENIX0xPR1MpO1xuICAgICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1tZXRyaWNzJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkNMT1VEV0FUQ0hfTU9OSVRPUklORyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbmdyZXNzQWRhcHRlci5pbml0KHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXkgfHwgbmV3IEtleSh0aGlzLCAnSURQRW5jcnlwdGlvbktleScsIHtcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24gPSBMb2dHcm91cERhdGFQcm90ZWN0aW9uVXRpbHMuaGFuZGxlRGVmYXVsdCh0aGlzLCBwcm9wcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLCBwcm9wcy5yZW1vdmFsUG9saWN5KTtcblxuICAgIHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUgPSBwcm9wcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSB8fCBuZXcgVGFibGUodGhpcywgJ0RvY3VtZW50UHJvY2Vzc2luZ1RhYmxlJywge1xuICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgIG5hbWU6ICdEb2N1bWVudElkJyxcbiAgICAgICAgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcsXG4gICAgICB9LFxuICAgICAgYmlsbGluZ01vZGU6IEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb246IHtcbiAgICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbjogVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRUQsXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmVuY3J5cHRpb25LZXksXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSkge1xuICAgICAgUHJvcGVydHlJbmplY3RvcnMub2YodGhpcykuYWRkKFxuICAgICAgICBuZXcgU3RhdGVNYWNoaW5lT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IodGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uKSxcbiAgICAgICAgbmV3IExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yKHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiksXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMubWV0cmljTmFtZXNwYWNlID0gcHJvcHMubWV0cmljTmFtZXNwYWNlIHx8IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnLkRFRkFVTFRfTUVUUklDX05BTUVTUEFDRTtcbiAgICB0aGlzLm1ldHJpY1NlcnZpY2VOYW1lID0gcHJvcHMubWV0cmljU2VydmljZU5hbWUgfHwgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZy5ERUZBVUxUX09CU0VSVkFCSUxJVFlfTUVUUklDX1NWQ19OQU1FO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgaGFuZGxlU3RhdGVNYWNoaW5lQ3JlYXRpb24oc3RhdGVNYWNoaW5lSWQ6IHN0cmluZykge1xuICAgIC8vIENoZWNrIGlmIHByZXByb2Nlc3NpbmcgaXMgbmVlZGVkIChlLmcuLCBmb3IgY2h1bmtpbmcgbGFyZ2UgZG9jdW1lbnRzKVxuICAgIGNvbnN0IHByZXByb2Nlc3NpbmdTdGVwID0gdGhpcy5wcmVwcm9jZXNzaW5nU3RlcCgpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBtZXRhZGF0YSBlbnRyeSBpbiBEeW5hbW9EQlxuICAgIC8vIEJhc2UgY2xhc3Mgb25seSBrbm93cyBhYm91dCBjb3JlIGRvY3VtZW50IGZpZWxkc1xuICAgIGNvbnN0IGJhc2VJdGVtOiBSZWNvcmQ8c3RyaW5nLCBEeW5hbW9BdHRyaWJ1dGVWYWx1ZT4gPSB7XG4gICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICBDb250ZW50VHlwZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50VHlwZScpKSxcbiAgICAgIENvbnRlbnQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLm9iamVjdEF0KCckLmNvbnRlbnQnKSkpLFxuICAgICAgV29ya2Zsb3dTdGF0dXM6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ3BlbmRpbmcnKSxcbiAgICAgIFN0YXRlTWFjaGluZUV4ZWNJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJCQuRXhlY3V0aW9uLklkJykpLFxuICAgIH07XG5cbiAgICAvLyBBbGxvdyBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgdG8gYWRkIHByZXByb2Nlc3Npbmctc3BlY2lmaWMgbWV0YWRhdGFcbiAgICAvLyBUaGlzIGlzIGEgaG9vayBmb3Igc3ViY2xhc3NlcyB0byBleHRlbmQgdGhlIHNjaGVtYSB3aXRob3V0IGJhc2UgY2xhc3Mga25vd2luZyB0aGUgZGV0YWlsc1xuICAgIGNvbnN0IGFkZGl0aW9uYWxNZXRhZGF0YSA9IHRoaXMucHJlcHJvY2Vzc2luZ01ldGFkYXRhKCk7XG4gICAgT2JqZWN0LmFzc2lnbihiYXNlSXRlbSwgYWRkaXRpb25hbE1ldGFkYXRhKTtcblxuICAgIGNvbnN0IGluaXRNZXRhZGF0YUVudHJ5ID0gbmV3IER5bmFtb1B1dEl0ZW0odGhpcywgJ0luaXRNZXRhZGF0YUVudHJ5Jywge1xuICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICBpdGVtOiBiYXNlSXRlbSxcbiAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZCB3b3JrZmxvdzogaWYgcHJlcHJvY2Vzc2luZyBleGlzdHMsIGNoYWluIGl0IGJlZm9yZSB0aGUgbWFpbiB3b3JrZmxvd1xuICAgIGxldCB3b3JrZmxvd0RlZmluaXRpb246IElDaGFpbmFibGU7XG4gICAgaWYgKHByZXByb2Nlc3NpbmdTdGVwKSB7XG4gICAgICAvLyBQcmVwcm9jZXNzaW5nIOKGkiBJbml0TWV0YWRhdGEg4oaSIEN1c3RvbSBQcm9jZXNzaW5nIFdvcmtmbG93XG4gICAgICB3b3JrZmxvd0RlZmluaXRpb24gPSBwcmVwcm9jZXNzaW5nU3RlcFxuICAgICAgICAubmV4dChpbml0TWV0YWRhdGFFbnRyeSlcbiAgICAgICAgLm5leHQodGhpcy5jcmVhdGVQcm9jZXNzaW5nV29ya2Zsb3coKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluaXRNZXRhZGF0YSDihpIgU3RhbmRhcmQgUHJvY2Vzc2luZyBXb3JrZmxvdyAoYmFja3dhcmQgY29tcGF0aWJsZSlcbiAgICAgIHdvcmtmbG93RGVmaW5pdGlvbiA9IGluaXRNZXRhZGF0YUVudHJ5XG4gICAgICAgIC5uZXh0KHRoaXMuY3JlYXRlU3RhbmRhcmRQcm9jZXNzaW5nV29ya2Zsb3coKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZSA9IHRoaXMuY3JlYXRlU3RhdGVNYWNoaW5lUm9sZSgpO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHREZWNyeXB0KHJvbGUpO1xuXG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lID0gbmV3IFN0YXRlTWFjaGluZSh0aGlzLCBzdGF0ZU1hY2hpbmVJZCwge1xuICAgICAgZGVmaW5pdGlvbkJvZHk6IERlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUod29ya2Zsb3dEZWZpbml0aW9uKSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMucHJvcHMud29ya2Zsb3dUaW1lb3V0IHx8IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgcm9sZSxcbiAgICAgIGVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBuZXcgQ3VzdG9tZXJNYW5hZ2VkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24odGhpcy5lbmNyeXB0aW9uS2V5KSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5ncmVzc0FkYXB0ZXIuY3JlYXRlSW5ncmVzc1RyaWdnZXIodGhpcywgc3RhdGVNYWNoaW5lLCB0aGlzLnByb3BzKTtcblxuICAgIHJldHVybiBzdGF0ZU1hY2hpbmU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN0YXRlTWFjaGluZVJvbGUoKTogUm9sZSB7XG4gICAgcmV0dXJuIG5ldyBSb2xlKHRoaXMsICdTdGF0ZU1hY2hpbmVSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnc3RhdGVzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFN0YXRlTWFjaGluZUV4ZWN1dGlvblBvbGljeTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAuLi50aGlzLmluZ3Jlc3NBZGFwdGVyLmdlbmVyYXRlQWRhcHRlcklBTVBvbGljaWVzKCksXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnZHluYW1vZGI6UHV0SXRlbScsICdkeW5hbW9kYjpVcGRhdGVJdGVtJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW3RoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUudGFibGVBcm5dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNb3ZlVG9GYWlsZWRDaGFpbihpZFByZWZpeD86IHN0cmluZykge1xuICAgIGNvbnN0IGZhaWxlZENoYWluID0gdGhpcy5pbmdyZXNzQWRhcHRlci5jcmVhdGVGYWlsZWRDaGFpbih0aGlzLCBpZFByZWZpeCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlcikge1xuICAgICAgY29uc3QgZWJDaGFpbiA9IHRoaXMucHJvcHMuZXZlbnRicmlkZ2VCcm9rZXIuc2VuZFZpYVNmbkNoYWluKFxuICAgICAgICAnZG9jdW1lbnQtcHJvY2Vzc2luZy1mYWlsZWQnLFxuICAgICAgICB7XG4gICAgICAgICAgZG9jdW1lbnRJZDogSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50VHlwZScpLFxuICAgICAgICAgIGNvbnRlbnQ6IEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5jb250ZW50JykpLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZmFpbGVkQ2hhaW4ubmV4dChlYkNoYWluKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFpbGVkQ2hhaW47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1vdmVUb1Byb2Nlc3NlZENoYWluKGlkUHJlZml4Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkQ2hhaW4gPSB0aGlzLmluZ3Jlc3NBZGFwdGVyLmNyZWF0ZVN1Y2Nlc3NDaGFpbih0aGlzLCBpZFByZWZpeCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlcikge1xuICAgICAgcHJvY2Vzc2VkQ2hhaW4ubmV4dChcbiAgICAgICAgdGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlci5zZW5kVmlhU2ZuQ2hhaW4oXG4gICAgICAgICAgJ2RvY3VtZW50LXByb2Nlc3NlZC1zdWNjZXNzZnVsJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkb2N1bWVudElkOiBKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJyksXG4gICAgICAgICAgICBjb250ZW50VHlwZTogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudFR5cGUnKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5jb250ZW50JykpLFxuICAgICAgICAgICAgY2xhc3NpZmljYXRpb246IEpzb25QYXRoLnN0cmluZ0F0KCckLmNsYXNzaWZpY2F0aW9uUmVzdWx0LmRvY3VtZW50Q2xhc3NpZmljYXRpb24nKSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkQ2hhaW47XG4gIH1cblxuICBwdWJsaWMgbWV0cmljcygpOiBJTWV0cmljW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBvcHRpb25hbCBwcmVwcm9jZXNzaW5nIHN0ZXAgb2YgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiBUaGlzIHN0ZXAgcnVucyBCRUZPUkUgSW5pdCBNZXRhZGF0YSBhbmQgY2FuIGJlIHVzZWQgZm9yOlxuICAgKiAtIERvY3VtZW50IGNodW5raW5nIGZvciBsYXJnZSBmaWxlc1xuICAgKiAtIERvY3VtZW50IHZhbGlkYXRpb25cbiAgICogLSBGb3JtYXQgY29udmVyc2lvblxuICAgKiAtIEFueSBvdGhlciBwcmVwcm9jZXNzaW5nIG5lZWRlZCBiZWZvcmUgY2xhc3NpZmljYXRpb25cbiAgICpcbiAgICogQ29uY3JldGUgaW1wbGVtZW50YXRpb25zIGNhbiByZXR1cm4gdW5kZWZpbmVkIHRvIHNraXAgcHJlcHJvY2Vzc2luZyxcbiAgICogbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHdvcmtmbG93cy5cbiAgICpcbiAgICogQHJldHVybnMgU3RlcCBGdW5jdGlvbnMgdGFzayBmb3IgcHJlcHJvY2Vzc2luZywgb3IgdW5kZWZpbmVkIHRvIHNraXAgdGhpcyBzdGVwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcHJlcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvb2sgZm9yIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyB0byBhZGQgcHJlcHJvY2Vzc2luZy1zcGVjaWZpYyBtZXRhZGF0YSB0byBEeW5hbW9EQi5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGR1cmluZyBJbml0TWV0YWRhdGEgY3JlYXRpb24gYW5kIGFsbG93cyBzdWJjbGFzc2VzIHRvIGV4dGVuZFxuICAgKiB0aGUgRHluYW1vREIgc2NoZW1hIHdpdGggdGhlaXIgb3duIGZpZWxkcyB3aXRob3V0IHRoZSBiYXNlIGNsYXNzIGtub3dpbmcgdGhlIGRldGFpbHMuXG4gICAqXG4gICAqIFRoZSBiYXNlIGNsYXNzIHByb3ZpZGVzIHRoZSBjb3JlIGRvY3VtZW50IGZpZWxkcyAoRG9jdW1lbnRJZCwgQ29udGVudFR5cGUsIGV0Yy4pLFxuICAgKiBhbmQgc3ViY2xhc3NlcyBjYW4gYWRkIHRoZWlyIG93biBmaWVsZHMgKGUuZy4sIGNodW5raW5nIG1ldGFkYXRhKSBieSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2YgYWRkaXRpb25hbCBEeW5hbW9EQiBhdHRyaWJ1dGUgdmFsdWVzIHRvIGluY2x1ZGUgaW4gSW5pdE1ldGFkYXRhXG4gICAqIEBkZWZhdWx0IHt9IChubyBhZGRpdGlvbmFsIG1ldGFkYXRhKVxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXByb2Nlc3NpbmdNZXRhZGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCBEeW5hbW9BdHRyaWJ1dGVWYWx1ZT4ge1xuICAgIC8vIERlZmF1bHQ6IG5vIGFkZGl0aW9uYWwgbWV0YWRhdGFcbiAgICAvLyBTdWJjbGFzc2VzIG92ZXJyaWRlIHRoaXMgdG8gYWRkIHRoZWlyIG93biBwcmVwcm9jZXNzaW5nLXNwZWNpZmljIGZpZWxkc1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwcm9jZXNzaW5nIHdvcmtmbG93IGFmdGVyIHByZXByb2Nlc3NpbmcgYW5kIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgY2FuIGN1c3RvbWl6ZSB0aGlzIHRvIGhhbmRsZSBwcmVwcm9jZXNzaW5nIHJlc3VsdHMuXG4gICAqIEZvciBleGFtcGxlLCBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nIHVzZXMgdGhpcyB0byBhZGQgY29uZGl0aW9uYWwgYnJhbmNoaW5nXG4gICAqIGZvciBjaHVua2VkIHZzIG5vbi1jaHVua2VkIGRvY3VtZW50cy5cbiAgICpcbiAgICogSW1wbGVtZW50YXRpb25zIGNhbiBjYWxsIGBjcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdygpYCB0byByZXVzZSB0aGVcbiAgICogc3RhbmRhcmQgcHJvY2Vzc2luZyBmbG93IChDbGFzc2lmaWNhdGlvbiDihpIgUHJvY2Vzc2luZyDihpIgRW5yaWNobWVudCDihpIgUG9zdFByb2Nlc3NpbmcpLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyBjaGFpbiBmb3IgcHJvY2Vzc2luZyB0aGUgZG9jdW1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVQcm9jZXNzaW5nV29ya2Zsb3coKTogSUNoYWluYWJsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgc3RhbmRhcmQgcHJvY2Vzc2luZyB3b3JrZmxvdyAobm8gcHJlcHJvY2Vzc2luZyBjdXN0b21pemF0aW9uKS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgZXhpc3Rpbmcgd29ya2Zsb3c6IENsYXNzaWZpY2F0aW9uIOKGkiBQcm9jZXNzaW5nIOKGkiBFbnJpY2htZW50IOKGkiBQb3N0UHJvY2Vzc2luZ1xuICAgKiBDb25jcmV0ZSBjbGFzc2VzIGNhbiBjYWxsIHRoaXMgbWV0aG9kIHRvIHJldXNlIHRoZSBzdGFuZGFyZCBmbG93IHdoZW4gdGhleSBkb24ndFxuICAgKiBuZWVkIGN1c3RvbSB3b3JrZmxvdyBicmFuY2hpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBpZFByZWZpeCBPcHRpb25hbCBwcmVmaXggZm9yIGNvbnN0cnVjdCBJRHMgdG8gZW5zdXJlIHVuaXF1ZW5lc3Mgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAgICogQHJldHVybnMgU3RlcCBGdW5jdGlvbnMgY2hhaW4gZm9yIHN0YW5kYXJkIHByb2Nlc3NpbmdcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdyhpZFByZWZpeD86IHN0cmluZyk6IElDaGFpbmFibGUge1xuICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uU3RlcCA9IHRoaXMuY2xhc3NpZmljYXRpb25TdGVwKCk7XG4gICAgY29uc3QgcHJvY2Vzc2luZ1N0ZXAgPSB0aGlzLnByb2Nlc3NpbmdTdGVwKCk7XG4gICAgY29uc3QgZW5yaWNobWVudFN0ZXAgPSB0aGlzLmVucmljaG1lbnRTdGVwKCk7XG4gICAgY29uc3QgcG9zdFByb2Nlc3NpbmdTdGVwID0gdGhpcy5wb3N0UHJvY2Vzc2luZ1N0ZXAoKTtcblxuICAgIC8vIEZpbGUgbW92ZW1lbnQgb3BlcmF0aW9uc1xuICAgIGNvbnN0IG1vdmVUb0ZhaWxlZCA9IHRoaXMuY3JlYXRlTW92ZVRvRmFpbGVkQ2hhaW4oaWRQcmVmaXgpO1xuICAgIGNvbnN0IG1vdmVUb1Byb2Nlc3NlZCA9IHRoaXMuY3JlYXRlTW92ZVRvUHJvY2Vzc2VkQ2hhaW4oaWRQcmVmaXgpO1xuXG4gICAgY29uc3QgcHJlZml4ID0gaWRQcmVmaXggPyBgJHtpZFByZWZpeH0tYCA6ICcnO1xuXG4gICAgY29uc3QgcHJvY2Vzc2luZ0NoYWluID0gcHJvY2Vzc2luZ1N0ZXBcbiAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9UHJvY2Vzc2luZ0ZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICBrZXk6IHtcbiAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzJyxcbiAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICc6bmV3U3RhdHVzJzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZygncHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pXG4gICAgICAubmV4dChcbiAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVByb2Nlc3NpbmdTdWNjZXNzVXBkYXRlYCwge1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIFByb2Nlc3NpbmdSZXN1bHQgPSA6cHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdwcm9jZXNzaW5nLWNvbXBsZXRlJyksXG4gICAgICAgICAgICAnOnByb2Nlc3NpbmdSZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5wcm9jZXNzaW5nUmVzdWx0JykpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBjb21wbGV0ZSBjaGFpbiBpbmNsdWRpbmcgb3B0aW9uYWwgc3RlcHNcbiAgICBpZiAoZW5yaWNobWVudFN0ZXApIHtcbiAgICAgIGNvbnN0IGVucmljaG1lbnRDaGFpbiA9IGVucmljaG1lbnRTdGVwXG4gICAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9RW5yaWNobWVudEZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdlbnJpY2htZW50LWZhaWx1cmUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLm5leHQobW92ZVRvRmFpbGVkKSwge1xuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pXG4gICAgICAgIC5uZXh0KFxuICAgICAgICAgIG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1FbnJpY2htZW50U3VjY2Vzc1VwZGF0ZWAsIHtcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cywgRW5yaWNobWVudFJlc3VsdCA9IDplbnJpY2htZW50UmVzdWx0JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBwb3N0UHJvY2Vzc2luZ1N0ZXAgPyBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdlbnJpY2htZW50LWNvbXBsZXRlJykgOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdjb21wbGV0ZScpLFxuICAgICAgICAgICAgICAnOmVucmljaG1lbnRSZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5lbnJpY2hlZFJlc3VsdCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgcHJvY2Vzc2luZ0NoYWluLm5leHQoZW5yaWNobWVudENoYWluKTtcblxuICAgICAgaWYgKHBvc3RQcm9jZXNzaW5nU3RlcCkge1xuICAgICAgICBjb25zdCBwb3N0UHJvY2Vzc2luZ0NoYWluID0gcG9zdFByb2Nlc3NpbmdTdGVwXG4gICAgICAgICAgLmFkZENhdGNoKG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1Qb3N0UHJvY2Vzc2luZ0ZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMnLFxuICAgICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ3Bvc3QtcHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAubmV4dChcbiAgICAgICAgICAgIG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1Qb3N0UHJvY2Vzc2luZ1N1Y2Nlc3NVcGRhdGVgLCB7XG4gICAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzLCBQb3N0UHJvY2Vzc2luZ1Jlc3VsdCA9IDpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NvbXBsZXRlJyksXG4gICAgICAgICAgICAgICAgJzpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLm9iamVjdEF0KCckLnBvc3RQcm9jZXNzZWRSZXN1bHQnKSkpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICAgICAgfSkubmV4dChtb3ZlVG9Qcm9jZXNzZWQpLFxuICAgICAgICAgICk7XG4gICAgICAgIGVucmljaG1lbnRDaGFpbi5uZXh0KHBvc3RQcm9jZXNzaW5nQ2hhaW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5yaWNobWVudENoYWluLm5leHQobW92ZVRvUHJvY2Vzc2VkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc3RQcm9jZXNzaW5nU3RlcCkge1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NpbmdDaGFpbiA9IHBvc3RQcm9jZXNzaW5nU3RlcFxuICAgICAgICAuYWRkQ2F0Y2gobmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVBvc3RQcm9jZXNzaW5nRmFpbEREQlVwZGF0ZTJgLCB7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdwb3N0LXByb2Nlc3NpbmctZmFpbHVyZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSkubmV4dChtb3ZlVG9GYWlsZWQpLCB7XG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSlcbiAgICAgICAgLm5leHQoXG4gICAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVBvc3RQcm9jZXNzaW5nU3VjY2Vzc1VwZGF0ZTJgLCB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIFBvc3RQcm9jZXNzaW5nUmVzdWx0ID0gOnBvc3RQcm9jZXNzaW5nUmVzdWx0JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdjb21wbGV0ZScpLFxuICAgICAgICAgICAgICAnOnBvc3RQcm9jZXNzaW5nUmVzdWx0JzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQucG9zdFByb2Nlc3NlZFJlc3VsdCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KS5uZXh0KG1vdmVUb1Byb2Nlc3NlZCksXG4gICAgICAgICk7XG4gICAgICBwcm9jZXNzaW5nQ2hhaW4ubmV4dChwb3N0UHJvY2Vzc2luZ0NoYWluKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gb3B0aW9uYWwgc3RlcHMgLSBtYXJrIGFzIGNvbXBsZXRlIGFmdGVyIGV4dHJhY3Rpb25cbiAgICAgIHByb2Nlc3NpbmdDaGFpbi5uZXh0KFxuICAgICAgICBuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9V29ya2Zsb3dDb21wbGV0ZVVwZGF0ZWAsIHtcbiAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzJyxcbiAgICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NvbXBsZXRlJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICB9KS5uZXh0KG1vdmVUb1Byb2Nlc3NlZCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uQ2hhaW4gPSBjbGFzc2lmaWNhdGlvblN0ZXBcbiAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9Q2xhc3NpZmljYXRpb25GYWlsRERCVXBkYXRlYCwge1xuICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAga2V5OiB7XG4gICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NsYXNzaWZpY2F0aW9uLWZhaWx1cmUnKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pLm5leHQobW92ZVRvRmFpbGVkKSwge1xuICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgfSlcbiAgICAgIC5uZXh0KFxuICAgICAgICBuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9Q2xhc3NpZmljYXRpb25TdWNjZXNzVXBkYXRlYCwge1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIENsYXNzaWZpY2F0aW9uUmVzdWx0ID0gOmNsYXNzaWZpY2F0aW9uUmVzdWx0JyxcbiAgICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NsYXNzaWZpY2F0aW9uLWNvbXBsZXRlJyksXG4gICAgICAgICAgICAnOmNsYXNzaWZpY2F0aW9uUmVzdWx0JzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQuY2xhc3NpZmljYXRpb25SZXN1bHQnKSkpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAubmV4dChwcm9jZXNzaW5nQ2hhaW4pO1xuXG4gICAgcmV0dXJuIGNsYXNzaWZpY2F0aW9uQ2hhaW47XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG9jdW1lbnQgY2xhc3NpZmljYXRpb24gc3RlcCBvZiB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqICoqQ1JJVElDQUwqKjogTXVzdCBzZXQgYG91dHB1dFBhdGhgIHRvIHByZXNlcnZlIHdvcmtmbG93IHN0YXRlIGZvciBzdWJzZXF1ZW50IHN0ZXBzLlxuICAgKiBUaGUgY2xhc3NpZmljYXRpb24gcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQuY2xhc3NpZmljYXRpb25SZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBjbGFzc2lmaWNhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNsYXNzaWZpY2F0aW9uU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZTtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG9jdW1lbnQgcHJvY2Vzc2luZyBzdGVwIG9mIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogKipDUklUSUNBTCoqOiBNdXN0IHNldCBgb3V0cHV0UGF0aGAgdG8gcHJlc2VydmUgd29ya2Zsb3cgc3RhdGUgZm9yIHN1YnNlcXVlbnQgc3RlcHMuXG4gICAqIFRoZSBleHRyYWN0aW9uIHJlc3VsdCBzaG91bGQgYmUgYXZhaWxhYmxlIGF0IGAkLnByb2Nlc3NpbmdSZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBleHRyYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGU7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIG9wdGlvbmFsIGRvY3VtZW50IGVucmljaG1lbnQgc3RlcCBvZiB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqICoqQ1JJVElDQUwqKjogSWYgaW1wbGVtZW50ZWQsIG11c3Qgc2V0IGBvdXRwdXRQYXRoYCB0byBwcmVzZXJ2ZSB3b3JrZmxvdyBzdGF0ZS5cbiAgICogVGhlIGVucmljaG1lbnQgcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQuZW5yaWNoZWRSZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBlbnJpY2htZW50LCBvciB1bmRlZmluZWQgdG8gc2tpcCB0aGlzIHN0ZXBcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBlbnJpY2htZW50U3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgb3B0aW9uYWwgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgb2YgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiAqKkNSSVRJQ0FMKio6IElmIGltcGxlbWVudGVkLCBtdXN0IHNldCBgb3V0cHV0UGF0aGAgdG8gcHJlc2VydmUgd29ya2Zsb3cgc3RhdGUuXG4gICAqIFRoZSBwb3N0LXByb2Nlc3NpbmcgcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQucG9zdFByb2Nlc3NlZFJlc3VsdGAgZm9yIER5bmFtb0RCIHN0b3JhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIFN0ZXAgRnVuY3Rpb25zIHRhc2sgZm9yIHBvc3QtcHJvY2Vzc2luZywgb3IgdW5kZWZpbmVkIHRvIHNraXAgdGhpcyBzdGVwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcG9zdFByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkO1xufVxuIl19
@@ -846,7 +846,7 @@ class BedrockDocumentProcessing extends base_document_processing_1.BaseDocumentP
846
846
  }
847
847
  exports.BedrockDocumentProcessing = BedrockDocumentProcessing;
848
848
  _a = JSII_RTTI_SYMBOL_1;
849
- BedrockDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockDocumentProcessing", version: "1.12.0" };
849
+ BedrockDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockDocumentProcessing", version: "1.13.0" };
850
850
  BedrockDocumentProcessing.DEFAULT_CLASSIFICATION_PROMPT = `
851
851
  Analyze the document below, and classify the type of document it is (eg. INVOICE, IDENTITY_DOCUMENT, RECEIPT, etc). The result should be in JSON and should follow the following structure (only respond in JSON with the following structure and do not use markdown to indicate the json, just output plain old json with nothing else):
852
852
 
@@ -9,6 +9,6 @@ class DefaultDocumentProcessingConfig {
9
9
  }
10
10
  exports.DefaultDocumentProcessingConfig = DefaultDocumentProcessingConfig;
11
11
  _a = JSII_RTTI_SYMBOL_1;
12
- DefaultDocumentProcessingConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultDocumentProcessingConfig", version: "1.12.0" };
12
+ DefaultDocumentProcessingConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultDocumentProcessingConfig", version: "1.13.0" };
13
13
  DefaultDocumentProcessingConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = 'document-processing';
14
14
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kb2N1bWVudC1wcm9jZXNzaW5nLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3VzZS1jYXNlcy9kb2N1bWVudC1wcm9jZXNzaW5nL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLE1BQWEsK0JBQStCOztBQUE1QywwRUFFQzs7O0FBRHdCLHFFQUFxQyxHQUFHLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZyB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9PQlNFUlZBQklMSVRZX01FVFJJQ19TVkNfTkFNRSA9ICdkb2N1bWVudC1wcm9jZXNzaW5nJztcbn0iXX0=
@@ -216,5 +216,5 @@ class BaseAgent extends constructs_1.Construct {
216
216
  }
217
217
  exports.BaseAgent = BaseAgent;
218
218
  _a = JSII_RTTI_SYMBOL_1;
219
- BaseAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseAgent", version: "1.12.0" };
219
+ BaseAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseAgent", version: "1.13.0" };
220
220
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2Jhc2UtYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLDZDQUFzRTtBQUN0RSxpREFBOEY7QUFDOUYsaURBQTBDO0FBQzFDLHVEQUE4RjtBQUU5RiwyQ0FBdUM7QUFDdkMsK0NBQWlLO0FBQ2pLLHdDQUFrRTtBQUVsRSwrQ0FBMkM7QUFJbEMsMkZBSkEsd0JBQVUsT0FJQTtBQXdKbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFzQixTQUFVLFNBQVEsc0JBQVM7SUFvQy9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLGFBQUcsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDOUUsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSwyQkFBYSxDQUFDLE9BQU87U0FDNUQsQ0FBQyxDQUFDO1FBR0gsTUFBTSxjQUFjLEdBQW1DLEVBQUUsQ0FBQztRQUUxRCxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsa0NBQWtDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEksY0FBYyxDQUFDLGVBQWUsR0FBRyxJQUFJLHdCQUFjLENBQUM7Z0JBQ2xELFVBQVUsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLGtDQUFrQzthQUNyRSxDQUFDLENB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c0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBQcm9wZXJ0eUluamVjdG9ycywgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCBSb2xlLCBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSwgSUZ1bmN0aW9uLCBJTGF5ZXJWZXJzaW9uLCBMYXllclZlcnNpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExhbWJkYUlhbVV0aWxzLCBMYW1iZGFPYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3RvciwgTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzLCBMb2dHcm91cERhdGFQcm90ZWN0aW9uVXRpbHMsIE9ic2VydmFibGVQcm9wcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBCZWRyb2NrTW9kZWxQcm9wcywgQmVkcm9ja01vZGVsVXRpbHMgfSBmcm9tICcuLi9iZWRyb2NrJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9mb3VuZGF0aW9uJztcbmltcG9ydCB7IEludm9rZVR5cGUgfSBmcm9tICcuL2ludm9rZS10eXBlJztcbmltcG9ydCB7IElLbm93bGVkZ2VCYXNlLCBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyB9IGZyb20gJy4va25vd2xlZGdlLWJhc2UnO1xuXG4vLyBSZS1leHBvcnQgSW52b2tlVHlwZSBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEludm9rZVR5cGUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudFRvb2xzTG9jYXRpb25EZWZpbml0aW9uIHtcbiAgcmVhZG9ubHkgYnVja2V0TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgaXNGaWxlOiBib29sZWFuO1xuICByZWFkb25seSBpc1ppcEFyY2hpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBhZ2VudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50RGVmaW5pdGlvblByb3BzIHtcbiAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIEJlZHJvY2sgTW9kZWwgdG8gYmUgdXNlZFxuICAgICAqL1xuICByZWFkb25seSBiZWRyb2NrTW9kZWw6IEJlZHJvY2tNb2RlbFByb3BzO1xuXG4gIC8qKlxuICAgICAqIFRoZSBzeXN0ZW0gcHJvbXB0IG9mIHRoZSBhZ2VudFxuICAgICAqXG4gICAgICovXG4gIHJlYWRvbmx5IHN5c3RlbVByb21wdDogQXNzZXQ7XG5cbiAgLyoqXG4gICAgICogTGlzdCBvZiB0b29scyBkZWZpbmVkIGluIHB5dGhvbiBmaWxlcy4gVGhpcyB0b29scyB3b3VsZCBhdXRvbWF0aWNhbGx5XG4gICAgICogYmUgbG9hZGVkIGJ5IHRoZSBhZ2VudC4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIHRvIGluY29ycG9yYXRlIG90aGVyIHNwZWNpYWxpemVkXG4gICAgICogYWdlbnRzIGFzIHRvb2xzLlxuICAgICAqL1xuICByZWFkb25seSB0b29scz86IEFzc2V0W107XG5cbiAgLyoqXG4gICAgICogQW55IGRlcGVuZGVuY2llcyBuZWVkZWQgYnkgdGhlIHByb3ZpZGVkIHRvb2xzXG4gICAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUxheWVycz86IExheWVyVmVyc2lvbltdO1xuXG4gIC8qKlxuICAgICAqIElmIHRvb2xzIG5lZWQgYWRkaXRpb25hbCBJQU0gcGVybWlzc2lvbnMsIHRoZXNlIHN0YXRlbWVudHNcbiAgICAgKiB3b3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgQWdlbnQncyBJQU0gcm9sZVxuICAgICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsUG9saWN5U3RhdGVtZW50c0ZvclRvb2xzPzogUG9saWN5U3RhdGVtZW50W107XG5cbiAgLyoqXG4gICAqIEtub3dsZWRnZSBiYXNlcyBhdmFpbGFibGUgdG8gdGhlIGFnZW50IGZvciBSZXRyaWV2YWwtQXVnbWVudGVkIEdlbmVyYXRpb24gKFJBRykuXG4gICAqXG4gICAqIFdoZW4gY29uZmlndXJlZCwgdGhlIGFnZW50IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYSBidWlsdC1pbiByZXRyaWV2YWwgdG9vbFxuICAgKiB0aGF0IGNhbiBxdWVyeSB0aGVzZSBrbm93bGVkZ2UgYmFzZXMuIFRoZSBhZ2VudCdzIHN5c3RlbSBwcm9tcHQgd2lsbCBiZVxuICAgKiBhdXRvbWF0aWNhbGx5IGF1Z21lbnRlZCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGF2YWlsYWJsZSBrbm93bGVkZ2UgYmFzZXMuXG4gICAqXG4gICAqIEVhY2gga25vd2xlZGdlIGJhc2UgbXVzdCBpbXBsZW1lbnQgdGhlIElLbm93bGVkZ2VCYXNlIGludGVyZmFjZSwgd2hpY2hcbiAgICogaGFuZGxlcyBJQU0gcGVybWlzc2lvbiBnZW5lcmF0aW9uIGFuZCBydW50aW1lIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8ga25vd2xlZGdlIGJhc2VzIGNvbmZpZ3VyZWRcbiAgICovXG4gIHJlYWRvbmx5IGtub3dsZWRnZUJhc2VzPzogSUtub3dsZWRnZUJhc2VbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBJQU0gcG9saWN5IHN0YXRlbWVudHMgZm9yIGtub3dsZWRnZSBiYXNlIGFjY2Vzcy5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiBrbm93bGVkZ2UgYmFzZXMgcmVxdWlyZSBwZXJtaXNzaW9ucyBiZXlvbmQgd2hhdCBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0aGUgSUtub3dsZWRnZUJhc2UgaW1wbGVtZW50YXRpb25zLlxuICAgKiBUaGVzZSBzdGF0ZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGFnZW50J3MgSUFNIHJvbGUgaW4gYWRkaXRpb25cbiAgICogdG8gdGhlIGF1dG8tZ2VuZXJhdGVkIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgYXV0by1nZW5lcmF0ZWQgcGVybWlzc2lvbnMgZnJvbSBrbm93bGVkZ2UgYmFzZXNcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yS25vd2xlZGdlQmFzZXM/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQWdlbnRQcm9wcyBleHRlbmRzIE9ic2VydmFibGVQcm9wcyB7XG5cbiAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgYWdlbnRcbiAgICAgKi9cbiAgcmVhZG9ubHkgYWdlbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gc2VydmljZSBwcmluY2lwYWwgZm9yIHRoZSBhZ2VudCByb2xlJ3MgdHJ1c3QgcG9saWN5LlxuICAgKlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSBzZXQgYnkgdGhlIGhvc3RpbmcgYWRhcHRlciAoZS5nLiwgYGxhbWJkYS5hbWF6b25hd3MuY29tYFxuICAgKiBmb3IgTGFtYmRhIGhvc3RpbmcsIGBiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tYCBmb3IgQWdlbnRDb3JlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZVByaW5jaXBhbD86IFNlcnZpY2VQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAgICogQWdlbnQgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgICovXG4gIHJlYWRvbmx5IGFnZW50RGVmaW5pdGlvbjogQWdlbnREZWZpbml0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvYnNlcnZhYmlsaXR5IGZvciB0aGUgYWdlbnRcbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCBjb25maWd1cmVzIGJvdGggTGFtYmRhIFBvd2VydG9vbHMgYW5kIEFXUyBCZWRyb2NrIEFnZW50Q29yZSBvYnNlcnZhYmlsaXR5OlxuICAgKiAtICoqTGFtYmRhIFBvd2VydG9vbHMqKjogUHJvdmlkZXMgZnVuY3Rpb24tbGV2ZWwgb2JzZXJ2YWJpbGl0eSBpbmNsdWRpbmcgc3RydWN0dXJlZCBsb2dnaW5nLFxuICAgKiAgIGRpc3RyaWJ1dGVkIHRyYWNpbmcgd2l0aCBYLVJheSwgYW5kIGN1c3RvbSBtZXRyaWNzXG4gICAqIC0gKipBZ2VudENvcmUgT2JzZXJ2YWJpbGl0eSoqOiBQcm92aWRlcyBhZ2VudC1zcGVjaWZpYyBvYnNlcnZhYmlsaXR5IGluY2x1ZGluZyBhZ2VudCBpbnZvY2F0aW9ucyxcbiAgICogICByZWFzb25pbmcgc3RlcHMsIHRvb2wgdXNhZ2UsIHRva2VuIGNvbnN1bXB0aW9uLCBhbmQgYWdlbnQgbGF0ZW5jeVxuICAgKlxuICAgKiBCb3RoIHN5c3RlbXMgcHVibGlzaCB0byBBbWF6b24gQ2xvdWRXYXRjaCBhbmQgdXNlIHRoZSBzYW1lIHNlcnZpY2UgbmFtZSBhbmQgbmFtZXNwYWNlXG4gICAqIGZvciBjb3JyZWxhdGlvbi4gVGhpcyBwcm92aWRlcyBjb21wbGV0ZSB2aXNpYmlsaXR5IGF0IGJvdGggZnVuY3Rpb24gYW5kIGFnZW50IGxldmVscy5cbiAgICpcbiAgICogKipFbnZpcm9ubWVudCBWYXJpYWJsZXMgU2V0KiogKEFnZW50Q29yZSk6XG4gICAqIC0gYEFHRU5UX09CU0VSVkFCSUxJVFlfRU5BQkxFRGA6IEVuYWJsZXMgQWdlbnRDb3JlIG9ic2VydmFiaWxpdHlcbiAgICogLSBgT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTYDogU2VydmljZSBpZGVudGlmaWNhdGlvbiBmb3IgT3BlblRlbGVtZXRyeVxuICAgKiAtIGBPVEVMX0VYUE9SVEVSX09UTFBfTE9HU19IRUFERVJTYDogQWdlbnQgaWRlbnRpZmljYXRpb24gaGVhZGVyc1xuICAgKiAtIGBBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUmA6IEFET1Qgd3JhcHBlciBmb3IgYXV0b21hdGljIGluc3RydW1lbnRhdGlvblxuICAgKlxuICAgKiAqKklBTSBQZXJtaXNzaW9ucyBHcmFudGVkKiogKEFnZW50Q29yZSk6XG4gICAqIC0gQ2xvdWRXYXRjaCBMb2dzOiBgbG9nczpDcmVhdGVMb2dHcm91cGAsIGBsb2dzOkNyZWF0ZUxvZ1N0cmVhbWAsIGBsb2dzOlB1dExvZ0V2ZW50c2BcbiAgICogLSBYLVJheTogYHhyYXk6UHV0VHJhY2VTZWdtZW50c2AsIGB4cmF5OlB1dFRlbGVtZXRyeVJlY29yZHNgXG4gICAqXG4gICAqICoqQWRkaXRpb25hbCBSZXF1aXJlbWVudHMqKjpcbiAgICogLSBCYXRjaEFnZW50IGF1dG9tYXRpY2FsbHkgYWRkcyBBRE9UIChBV1MgRGlzdHJvIGZvciBPcGVuVGVsZW1ldHJ5KSBMYW1iZGEgTGF5ZXJcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL29ic2VydmFiaWxpdHktY29uZmlndXJlLmh0bWxcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgICAqIElmIHRoZSBBZ2VudCB3b3VsZCBiZSBydW5uaW5nIGluc2lkZSBhIFZQQ1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgQWdlbnQgd291bGQgbm90IGJlIGluIGEgVlBDXG4gICAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrO1xuXG4gIC8qKlxuICAgICAqIEVuY3J5cHRpb24ga2V5IHRvIGVuY3J5cHQgYWdlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBuZXcgS01TIEtleSB3b3VsZCBiZSBjcmVhdGVkXG4gICAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBLZXk7XG5cbiAgLyoqXG4gICAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoaXNcbiAgICAgKiBjb25zdHJ1Y3RcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIGFyY2hpdGVjdHVyZSB1c2VkIGJ5IHRoZSBMYW1iZGEgZnVuY3Rpb24gd2hlcmUgdGhlXG4gICAqIGFnZW50IGlzIGhvc3RlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBBcmNoaXRlY3R1cmUuQVJNXzY0XG4gICAqL1xuICByZWFkb25seSBhZ2VudEFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgYWdlbnQgdHlwZXMgaW4gdGhlIGZyYW1ld29ya1xuICpcbiAqIFByb3ZpZGVzIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3IgQUkgYWdlbnRzIGluY2x1ZGluZzpcbiAqIC0gSUFNIHJvbGUgYW5kIHBlcm1pc3Npb25zIG1hbmFnZW1lbnRcbiAqIC0gRW5jcnlwdGlvbiBrZXkgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogLSBUb29sIGludGVncmF0aW9uIGFuZCBTMyBhc3NldCBtYW5hZ2VtZW50XG4gKiAtIEtub3dsZWRnZSBiYXNlIGludGVncmF0aW9uIGZvciBSQUcgKFJldHJpZXZhbC1BdWdtZW50ZWQgR2VuZXJhdGlvbilcbiAqIC0gT2JzZXJ2YWJpbGl0eSBjb25maWd1cmF0aW9uIChMYW1iZGEgUG93ZXJ0b29scyArIEFnZW50Q29yZSlcbiAqXG4gKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBhZ2VudC1zcGVjaWZpYyBMYW1iZGEgZnVuY3Rpb24gY3JlYXRpb24uXG4gKlxuICogKipPYnNlcnZhYmlsaXR5Kio6IFdoZW4gYGVuYWJsZU9ic2VydmFiaWxpdHk6IHRydWVgLCBCYXNlQWdlbnQgY29uZmlndXJlcyBib3RoXG4gKiBMYW1iZGEgUG93ZXJ0b29scyAoZnVuY3Rpb24tbGV2ZWwpIGFuZCBBV1MgQmVkcm9jayBBZ2VudENvcmUgKGFnZW50LWxldmVsKVxuICogb2JzZXJ2YWJpbGl0eS4gQm90aCBzeXN0ZW1zIHdvcmsgdG9nZXRoZXIgdG8gcHJvdmlkZSBjb21wbGV0ZSB2aXNpYmlsaXR5OlxuICogLSBMYW1iZGEgUG93ZXJ0b29scyBjYXB0dXJlcyBmdW5jdGlvbiBleGVjdXRpb24sIGxvZ3MsIGFuZCBjdXN0b20gbWV0cmljc1xuICogLSBBZ2VudENvcmUgY2FwdHVyZXMgYWdlbnQgcmVhc29uaW5nLCB0b29sIHVzYWdlLCBhbmQgdG9rZW4gY29uc3VtcHRpb25cbiAqIC0gQm90aCBwdWJsaXNoIHRvIENsb3VkV2F0Y2ggd2l0aCBjb3JyZWxhdGVkIHNlcnZpY2UgbmFtZXMgZm9yIHVuaWZpZWQgbW9uaXRvcmluZ1xuICpcbiAqIFRoZSBvYnNlcnZhYmlsaXR5IGludGVncmF0aW9uIGluY2x1ZGVzOlxuICogLSBBdXRvbWF0aWMgSUFNIHBlcm1pc3Npb24gZ3JhbnRzIGZvciBDbG91ZFdhdGNoIExvZ3MgYW5kIFgtUmF5XG4gKiAtIEVudmlyb25tZW50IHZhcmlhYmxlIGNvbmZpZ3VyYXRpb24gZm9yIE9wZW5UZWxlbWV0cnlcbiAqIC0gQURPVCBMYW1iZGEgTGF5ZXIgYXR0YWNobWVudCAoaGFuZGxlZCBieSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMpXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL29ic2VydmFiaWxpdHktY29uZmlndXJlLmh0bWxcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBZ2VudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGZvciB0aGUgYWdlbnQgKHdoZW4gdXNpbmcgTGFtYmRhIGhvc3RpbmcpLlxuICAgKiBNYXkgYmUgdW5kZWZpbmVkIGZvciBub24tTGFtYmRhIGhvc3RpbmcgYmFja2VuZHMgKGUuZy4gQWdlbnRDb3JlIFJ1bnRpbWUpLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGFnZW50RnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBiZWRyb2NrTW9kZWw/OiBCZWRyb2NrTW9kZWxQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGFnZW50Um9sZTogUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk6IEtleTtcbiAgLyoqIGxvZyBncm91cCBkYXRhIHByb3RlY3Rpb24gY29uZmlndXJhdGlvbiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nR3JvdXBEYXRhUHJvdGVjdGlvbjogTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbnM6IEFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25bXTtcbiAgLyoqXG4gICAqIEtub3dsZWRnZSBiYXNlIGNvbmZpZ3VyYXRpb25zIGZvciBydW50aW1lIHVzZS5cbiAgICpcbiAgICogVGhpcyBhcnJheSBjb250YWlucyB0aGUgZXhwb3J0ZWQgY29uZmlndXJhdGlvbnMgZnJvbSBhbGwgY29uZmlndXJlZFxuICAgKiBrbm93bGVkZ2UgYmFzZXMuIFN1YmNsYXNzZXMgdXNlIHRoaXMgdG8gc2V0IHRoZSBLTk9XTEVER0VfQkFTRVNfQ09ORklHXG4gICAqIGVudmlyb25tZW50IHZhcmlhYmxlIG9uIHRoZSBhZ2VudCBMYW1iZGEgZnVuY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga25vd2xlZGdlQmFzZUNvbmZpZ3M6IEtub3dsZWRnZUJhc2VSdW50aW1lQ29uZmlnW107XG4gIC8qKlxuICAgKiBBc3NldCBjb250YWluaW5nIHRoZSBrbm93bGVkZ2UgYmFzZSByZXRyaWV2YWwgdG9vbC5cbiAgICpcbiAgICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2hlbiBrbm93bGVkZ2UgYmFzZXMgYXJlIGNvbmZpZ3VyZWQuXG4gICAqIFRoZSBhc3NldCBpcyBhZGRlZCB0byB0aGUgYWdlbnQncyB0b29scyBhbmQgZ3JhbnRlZCByZWFkIGFjY2Vzcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBrbm93bGVkZ2VCYXNlVG9vbEFzc2V0PzogQXNzZXQ7XG4gIC8qKlxuICAgKiBMYW1iZGEgbGF5ZXJzIHJlcXVpcmVkIGJ5IGtub3dsZWRnZSBiYXNlIHJldHJpZXZhbCB0b29scy5cbiAgICpcbiAgICogVGhpcyBhcnJheSBjb250YWlucyBMYW1iZGEgbGF5ZXJzIGZyb20gYWxsIGNvbmZpZ3VyZWQga25vd2xlZGdlIGJhc2VzLlxuICAgKiBTdWJjbGFzc2VzIHNob3VsZCBhZGQgdGhlc2UgbGF5ZXJzIHRvIHRoZSBhZ2VudCBMYW1iZGEgZnVuY3Rpb24gdG9cbiAgICogZW5zdXJlIHJldHJpZXZhbCB0b29scyBoYXZlIGFjY2VzcyB0byByZXF1aXJlZCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga25vd2xlZGdlQmFzZUxheWVyczogTGF5ZXJWZXJzaW9uW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhc2VBZ2VudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmJlZHJvY2tNb2RlbCA9IHByb3BzLmFnZW50RGVmaW5pdGlvbi5iZWRyb2NrTW9kZWw7XG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gcHJvcHMuZW5jcnlwdGlvbktleSB8fCBuZXcgS2V5KHRoaXMsICdBZ2VudEVuY3J5cHRpb25LZXknLCB7XG4gICAgICBlbmFibGVLZXlSb3RhdGlvbjogdHJ1ZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG5cbiAgICBjb25zdCBpbmxpbmVQb2xpY2llczogUmVjb3JkPHN0cmluZywgUG9saWN5RG9jdW1lbnQ+ID0ge307XG5cbiAgICBpZiAocHJvcHMuYWdlbnREZWZpbml0aW9uLmFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yVG9vbHMgJiYgcHJvcHMuYWdlbnREZWZpbml0aW9uLmFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yVG9vbHMubGVuZ3RoID4gMCkge1xuICAgICAgaW5saW5lUG9saWNpZXMuVG9vbFBlcm1pc3Npb25zID0gbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgc3RhdGVtZW50czogcHJvcHMuYWdlbnREZWZpbml0aW9uLmFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yVG9vbHMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBJQU0gcGVybWlzc2lvbnMgZnJvbSBrbm93bGVkZ2UgYmFzZXNcbiAgICBjb25zdCBrbm93bGVkZ2VCYXNlcyA9IHByb3BzLmFnZW50RGVmaW5pdGlvbi5rbm93bGVkZ2VCYXNlcyA/PyBbXTtcbiAgICBjb25zdCBrYlBvbGljeVN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtiIG9mIGtub3dsZWRnZUJhc2VzKSB7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGtiLmdlbmVyYXRlSWFtUGVybWlzc2lvbnMoKTtcbiAgICAgIGtiUG9saWN5U3RhdGVtZW50cy5wdXNoKC4uLnBlcm1pc3Npb25zKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYWRkaXRpb25hbCBLQiBwb2xpY3kgc3RhdGVtZW50cyBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5hZ2VudERlZmluaXRpb24uYWRkaXRpb25hbFBvbGljeVN0YXRlbWVudHNGb3JLbm93bGVkZ2VCYXNlcykge1xuICAgICAga2JQb2xpY3lTdGF0ZW1lbnRzLnB1c2goLi4ucHJvcHMuYWdlbnREZWZpbml0aW9uLmFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yS25vd2xlZGdlQmFzZXMpO1xuICAgIH1cblxuICAgIC8vIEFkZCBLQiBwZXJtaXNzaW9ucyBhcyBpbmxpbmUgcG9saWN5IGlmIGFueSBleGlzdFxuICAgIGlmIChrYlBvbGljeVN0YXRlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgaW5saW5lUG9saWNpZXMuS25vd2xlZGdlQmFzZVBlcm1pc3Npb25zID0gbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgc3RhdGVtZW50czoga2JQb2xpY3lTdGF0ZW1lbnRzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZ2VudFJvbGUgPSBuZXcgUm9sZSh0aGlzLCBgQWdlbnQtJHtwcm9wcy5hZ2VudE5hbWV9LVJvbGVgLCB7XG4gICAgICBhc3N1bWVkQnk6IHByb3BzLnNlcnZpY2VQcmluY2lwYWwgfHwgbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICBpbmxpbmVQb2xpY2llcyxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5uZXR3b3JrKSB7XG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShMYW1iZGFJYW1VdGlscy5nZW5lcmF0ZUxhbWJkYVZQQ1Blcm1pc3Npb25zKCkpO1xuICAgIH1cblxuICAgIHRoaXMuYWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbnMgPSBbXTtcblxuICAgIGlmIChwcm9wcy5hZ2VudERlZmluaXRpb24udG9vbHMpIHtcbiAgICAgIGZvciAoY29uc3QgdG9vbCBvZiBwcm9wcy5hZ2VudERlZmluaXRpb24udG9vbHMpIHtcbiAgICAgICAgdG9vbC5ncmFudFJlYWQodGhpcy5hZ2VudFJvbGUpO1xuXG4gICAgICAgIHRoaXMuYWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbnMucHVzaCh7XG4gICAgICAgICAgYnVja2V0TmFtZTogdG9vbC5zM0J1Y2tldE5hbWUsXG4gICAgICAgICAga2V5OiB0b29sLnMzT2JqZWN0S2V5LFxuICAgICAgICAgIGlzRmlsZTogdG9vbC5pc0ZpbGUsXG4gICAgICAgICAgaXNaaXBBcmNoaXZlOiB0b29sLmlzWmlwQXJjaGl2ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RvcmUga25vd2xlZGdlIGJhc2UgY29uZmlndXJhdGlvbnMgZm9yIHN1YmNsYXNzIGFjY2Vzc1xuICAgIHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MgPSBrbm93bGVkZ2VCYXNlcy5tYXAoa2IgPT4ga2IuZXhwb3J0Q29uZmlndXJhdGlvbigpKTtcblxuICAgIC8vIEluaXRpYWxpemUga25vd2xlZGdlIGJhc2UgbGF5ZXJzIGFycmF5XG4gICAgdGhpcy5rbm93bGVkZ2VCYXNlTGF5ZXJzID0gW107XG5cbiAgICAvLyBHZXQgcmV0cmlldmFsIHRvb2wgYXNzZXRzIGZyb20ga25vd2xlZGdlIGJhc2VzXG4gICAgLy8gRWFjaCBLQiB0eXBlIHByb3ZpZGVzIGl0cyBvd24gcmV0cmlldmFsIHRvb2wgaW1wbGVtZW50YXRpb25cbiAgICBpZiAoa25vd2xlZGdlQmFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQ29sbGVjdCB1bmlxdWUgcmV0cmlldmFsIHRvb2wgYXNzZXRzIGZyb20ga25vd2xlZGdlIGJhc2VzXG4gICAgICAvLyBVc2UgYSBNYXAgdG8gZGVkdXBsaWNhdGUgYnkgYXNzZXQgcGF0aCAoc2FtZSBLQiB0eXBlID0gc2FtZSB0b29sKVxuICAgICAgY29uc3QgdG9vbEFzc2V0TWFwID0gbmV3IE1hcDxzdHJpbmcsIEFzc2V0PigpO1xuXG4gICAgICBmb3IgKGNvbnN0IGtiIG9mIGtub3dsZWRnZUJhc2VzKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBLQiBwcm92aWRlcyBhIHJldHJpZXZhbCB0b29sXG4gICAgICAgIGlmIChrYi5yZXRyaWV2YWxUb29sQXNzZXQpIHtcbiAgICAgICAgICBjb25zdCB0b29sQXNzZXQgPSBrYi5yZXRyaWV2YWxUb29sQXNzZXQoKTtcbiAgICAgICAgICBpZiAodG9vbEFzc2V0KSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIFMzIG9iamVjdCBrZXkgYXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZGVkdXBsaWNhdGlvblxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdG9vbEFzc2V0LnMzT2JqZWN0S2V5O1xuICAgICAgICAgICAgaWYgKCF0b29sQXNzZXRNYXAuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgdG9vbEFzc2V0TWFwLnNldChrZXksIHRvb2xBc3NldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29sbGVjdCBMYW1iZGEgbGF5ZXJzIGZyb20ga25vd2xlZGdlIGJhc2VzXG4gICAgICAgIGlmIChrYi5yZXRyaWV2YWxUb29sTGF5ZXJzKSB7XG4gICAgICAgICAgY29uc3QgbGF5ZXJzID0ga2IucmV0cmlldmFsVG9vbExheWVycygpO1xuICAgICAgICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMua25vd2xlZGdlQmFzZUxheWVycy5wdXNoKC4uLmxheWVycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBlYWNoIHVuaXF1ZSByZXRyaWV2YWwgdG9vbCB0byB0aGUgYWdlbnRcbiAgICAgIGZvciAoY29uc3QgYXNzZXQgb2YgdG9vbEFzc2V0TWFwLnZhbHVlcygpKSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBmaXJzdCB0b29sIGFzc2V0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgIGlmICghdGhpcy5rbm93bGVkZ2VCYXNlVG9vbEFzc2V0KSB7XG4gICAgICAgICAgdGhpcy5rbm93bGVkZ2VCYXNlVG9vbEFzc2V0ID0gYXNzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHcmFudCByZWFkIGFjY2VzcyB0byB0aGUgcmV0cmlldmFsIHRvb2wgYXNzZXRcbiAgICAgICAgYXNzZXQuZ3JhbnRSZWFkKHRoaXMuYWdlbnRSb2xlKTtcblxuICAgICAgICAvLyBBZGQgcmV0cmlldmFsIHRvb2wgdG8gYWdlbnQgdG9vbHMgbG9jYXRpb24gZGVmaW5pdGlvbnNcbiAgICAgICAgdGhpcy5hZ2VudFRvb2xzTG9jYXRpb25EZWZpbml0aW9ucy5wdXNoKHtcbiAgICAgICAgICBidWNrZXROYW1lOiBhc3NldC5zM0J1Y2tldE5hbWUsXG4gICAgICAgICAga2V5OiBhc3NldC5zM09iamVjdEtleSxcbiAgICAgICAgICBpc0ZpbGU6IGFzc2V0LmlzRmlsZSxcbiAgICAgICAgICBpc1ppcEFyY2hpdmU6IGFzc2V0LmlzWmlwQXJjaGl2ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koQmVkcm9ja01vZGVsVXRpbHMuZ2VuZXJhdGVNb2RlbElBTVBlcm1pc3Npb25zKHRoaXMsIHRoaXMuYmVkcm9ja01vZGVsKSk7XG4gICAgdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uID0gTG9nR3JvdXBEYXRhUHJvdGVjdGlvblV0aWxzLmhhbmRsZURlZmF1bHQodGhpcywgcHJvcHMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiwgcHJvcHMucmVtb3ZhbFBvbGljeSk7XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSkge1xuICAgICAgUHJvcGVydHlJbmplY3RvcnMub2YodGhpcykuYWRkKFxuICAgICAgICBuZXcgTGFtYmRhT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IodGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEFkZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFnZW50Q29yZSBvYnNlcnZhYmlsaXR5XG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJyxcbiAgICAgICAgICAnbG9nczpDcmVhdGVMb2dTdHJlYW0nLFxuICAgICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cycsXG4gICAgICAgICAgJ3hyYXk6UHV0VHJhY2VTZWdtZW50cycsXG4gICAgICAgICAgJ3hyYXk6UHV0VGVsZW1ldHJ5UmVjb3JkcycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sIC8vIENsb3VkV2F0Y2ggTG9ncyBhbmQgWC1SYXkgcmVxdWlyZSB3aWxkY2FyZCByZXNvdXJjZXNcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgQVdTIERpc3RybyBmb3IgT3BlblRlbGVtZXRyeSAoQURPVCkgTGFtYmRhIExheWVyLlxuICAgKlxuICAgKiBUaGUgQURPVCBsYXllciBwcm92aWRlcyBhdXRvbWF0aWMgaW5zdHJ1bWVudGF0aW9uIGZvciBvYnNlcnZhYmlsaXR5LlxuICAgKiBMYXllciB2ZXJzaW9ucyB2YXJ5IGJ5IHJlZ2lvbiAtIHNvbWUgcmVnaW9ucyBoYXZlIG5ld2VyIHZlcnNpb25zIHdpdGhcbiAgICogYmV0dGVyIFB5dGhvbiAzLjEzIHN1cHBvcnQuIElmIHlvdSBlbmNvdW50ZXIgY29tcGF0aWJpbGl0eSBpc3N1ZXMsXG4gICAqIHRoZSBsYXllciBBUk5zIGNhbiBiZSBmb3VuZCBhdDpcbiAgICogaHR0cHM6Ly9hd3Mtb3RlbC5naXRodWIuaW8vZG9jcy9nZXR0aW5nLXN0YXJ0ZWQvbGFtYmRhI2Fkb3QtbGFtYmRhLWxheWVyLWFybnNcbiAgICpcbiAgICogQHJldHVybnMgVGhlIEFET1QgTGFtYmRhIExheWVyIGZvciB0aGUgY3VycmVudCByZWdpb25cbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVnaW9uIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVBRE9UTGF5ZXIoKTogSUxheWVyVmVyc2lvbiB7XG4gICAgY29uc3QgeyByZWdpb24gfSA9IFN0YWNrLm9mKHRoaXMpO1xuXG4gICAgLy8gQVdTIERpc3RybyBmb3IgT3BlblRlbGVtZXRyeSAoQURPVCkgTGFtYmRhIExheWVyIEFSTnMgYnkgcmVnaW9uXG4gICAgLy8gU291cmNlOiBodHRwczovL2F3cy1vdGVsLmdpdGh1Yi5pby9kb2NzL2dldHRpbmctc3RhcnRlZC9sYW1iZGEjYWRvdC1sYW1iZGEtbGF5ZXItYXJuc1xuICAgIGNvbnN0IGFkb3RMYXllckFybk1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdhZi1zb3V0aC0xJzogJ2Fybjphd3M6bGFtYmRhOmFmLXNvdXRoLTE6OTA0MjMzMDk2NjE2OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MTcnLFxuICAgICAgJ2FwLWVhc3QtMSc6ICdhcm46YXdzOmxhbWJkYTphcC1lYXN0LTE6ODg4NTc3MDIwNTk2OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MTcnLFxuICAgICAgJ2FwLW5vcnRoZWFzdC0xJzogJ2Fybjphd3M6bGFtYmRhOmFwLW5vcnRoZWFzdC0xOjYxNTI5OTc1MTA3MDpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjIwJyxcbiAgICAgICdhcC1ub3J0aGVhc3QtMic6ICdhcm46YXdzOmxhbWJkYTphcC1ub3J0aGVhc3QtMjo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnYXAtbm9ydGhlYXN0LTMnOiAnYXJuOmF3czpsYW1iZGE6YXAtbm9ydGhlYXN0LTM6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MTknLFxuICAgICAgJ2FwLXNvdXRoLTEnOiAnYXJuOmF3czpsYW1iZGE6YXAtc291dGgtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnYXAtc291dGgtMic6ICdhcm46YXdzOmxhbWJkYTphcC1zb3V0aC0yOjc5Njk3MzUwNTQ5MjpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjE3JyxcbiAgICAgICdhcC1zb3V0aGVhc3QtMSc6ICdhcm46YXdzOmxhbWJkYTphcC1zb3V0aGVhc3QtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxOScsXG4gICAgICAnYXAtc291dGhlYXN0LTInOiAnYXJuOmF3czpsYW1iZGE6YXAtc291dGhlYXN0LTI6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjAnLFxuICAgICAgJ2FwLXNvdXRoZWFzdC0zJzogJ2Fybjphd3M6bGFtYmRhOmFwLXNvdXRoZWFzdC0zOjAzOTYxMjg3NzE4MDpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjE3JyxcbiAgICAgICdhcC1zb3V0aGVhc3QtNCc6ICdhcm46YXdzOmxhbWJkYTphcC1zb3V0aGVhc3QtNDo3MTM4ODE4MDU3NzE6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnYXAtc291dGhlYXN0LTUnOiAnYXJuOmF3czpsYW1iZGE6YXAtc291dGhlYXN0LTU6MTUyMDM0NzgyMzU5OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246OCcsXG4gICAgICAnYXAtc291dGhlYXN0LTcnOiAnYXJuOmF3czpsYW1iZGE6YXAtc291dGhlYXN0LTc6OTgwNDE2MDMxMTg4OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246OCcsXG4gICAgICAnY2EtY2VudHJhbC0xJzogJ2Fybjphd3M6bGFtYmRhOmNhLWNlbnRyYWwtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnY2Etd2VzdC0xJzogJ2Fybjphd3M6bGFtYmRhOmNhLXdlc3QtMTo1OTU5NDQxMjcxNTI6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjo4JyxcbiAgICAgICdjbi1ub3J0aC0xJzogJ2Fybjphd3MtY246bGFtYmRhOmNuLW5vcnRoLTE6NDQwMTc5OTEyOTI0OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246OCcsXG4gICAgICAnY24tbm9ydGh3ZXN0LTEnOiAnYXJuOmF3cy1jbjpsYW1iZGE6Y24tbm9ydGh3ZXN0LTE6NDQwMTgwMDY3OTMxOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246OCcsXG4gICAgICAnZXUtY2VudHJhbC0xJzogJ2Fybjphd3M6bGFtYmRhOmV1LWNlbnRyYWwtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnZXUtY2VudHJhbC0yJzogJ2Fybjphd3M6bGFtYmRhOmV1LWNlbnRyYWwtMjoxNTYwNDE0MDc5NTY6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnZXUtbm9ydGgtMSc6ICdhcm46YXdzOmxhbWJkYTpldS1ub3J0aC0xOjYxNTI5OTc1MTA3MDpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjIwJyxcbiAgICAgICdldS1zb3V0aC0xJzogJ2Fybjphd3M6bGFtYmRhOmV1LXNvdXRoLTE6MjU3Mzk0NDcxMTk0OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MTcnLFxuICAgICAgJ2V1LXNvdXRoLTInOiAnYXJuOmF3czpsYW1iZGE6ZXUtc291dGgtMjo0OTAwMDQ2NTM3ODY6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnZXUtd2VzdC0xJzogJ2Fybjphd3M6bGFtYmRhOmV1LXdlc3QtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnZXUtd2VzdC0yJzogJ2Fybjphd3M6bGFtYmRhOmV1LXdlc3QtMjo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnZXUtd2VzdC0zJzogJ2Fybjphd3M6bGFtYmRhOmV1LXdlc3QtMzo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnaWwtY2VudHJhbC0xJzogJ2Fybjphd3M6bGFtYmRhOmlsLWNlbnRyYWwtMTo3NDY2NjkyMzkyMjY6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnbWUtY2VudHJhbC0xJzogJ2Fybjphd3M6bGFtYmRhOm1lLWNlbnRyYWwtMTo3MzkyNzU0NDExMzE6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnbWUtc291dGgtMSc6ICdhcm46YXdzOmxhbWJkYTptZS1zb3V0aC0xOjk4MDkyMTc1MTc1ODpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjE3JyxcbiAgICAgICdteC1jZW50cmFsLTEnOiAnYXJuOmF3czpsYW1iZGE6bXgtY2VudHJhbC0xOjYxMDExODM3Mzg0NjpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjgnLFxuICAgICAgJ3NhLWVhc3QtMSc6ICdhcm46YXdzOmxhbWJkYTpzYS1lYXN0LTE6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjAnLFxuICAgICAgJ3VzLWVhc3QtMSc6ICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjMnLFxuICAgICAgJ3VzLWVhc3QtMic6ICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTI6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjAnLFxuICAgICAgJ3VzLXdlc3QtMSc6ICdhcm46YXdzOmxhbWJkYTp1cy13ZXN0LTE6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjcnLFxuICAgICAgJ3VzLXdlc3QtMic6ICdhcm46YXdzOmxhbWJkYTp1cy13ZXN0LTI6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjcnLFxuICAgIH07XG5cbiAgICBjb25zdCBhZG90TGF5ZXJBcm4gPSBhZG90TGF5ZXJBcm5NYXBbcmVnaW9uXTtcblxuICAgIGlmICghYWRvdExheWVyQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBRE9UIExhbWJkYSBMYXllciBub3QgYXZhaWxhYmxlIGluIHJlZ2lvbiAke3JlZ2lvbn0uIGAgK1xuICAgICAgICBgU3VwcG9ydGVkIHJlZ2lvbnM6ICR7T2JqZWN0LmtleXMoYWRvdExheWVyQXJuTWFwKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBMYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybih0aGlzLCAnQWRvdExheWVyJywgYWRvdExheWVyQXJuKTtcbiAgfVxufSJdfQ==
@@ -129,5 +129,5 @@ class BatchAgent extends base_agent_1.BaseAgent {
129
129
  }
130
130
  exports.BatchAgent = BatchAgent;
131
131
  _a = JSII_RTTI_SYMBOL_1;
132
- BatchAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BatchAgent", version: "1.12.0" };
132
+ BatchAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BatchAgent", version: "1.13.0" };
133
133
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9iYXRjaC1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBNENBLDhGQTJCQzs7QUF2RUQscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2QkFBNkI7QUFDN0IsOEVBQWtFO0FBQ2xFLDZDQUE4QztBQUM5QyxpREFBb0Q7QUFDcEQsdURBQWdGO0FBRWhGLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsK0NBQStGO0FBQy9GLHdDQUErQztBQUMvQyx3REFBcUQ7QUFDckQsaUVBQTREO0FBaUI1RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQix5Q0FBeUMsQ0FDdkQsb0JBQWtEO0lBRWxELElBQUksb0JBQW9CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLG9CQUFvQjtTQUNoQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWQsT0FBTzs7Ozs7Ozs7Ozs7O0VBWVAsTUFBTTs7O0NBR1AsQ0FBQztBQUNGLENBQUM7QUFFRCxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQUd2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLDJCQUFpQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLHNDQUEwQixDQUFD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RSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx3Q0FBYyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNsRSxZQUFZLEVBQUUsK0JBQStCLENBQUMsa0JBQWtCO1lBQ2hFLFlBQVksRUFBRSxrQkFBa0I7WUFDaEMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGlDQUFpQyxDQUFDO1lBQzlELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztZQUNwQixLQUFLLEVBQUUsVUFBVTtZQUNqQixPQUFPLEVBQUUsaUNBQWUsQ0FBQyxNQUFNO1lBQy9CLE1BQU07WUFDTixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxHQUFHO1lBQ2hCLHFCQUFxQixFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ3pDLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNsRCxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ25GLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxDQUFDLElBQUksK0JBQStCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDOztBQXhGSCxnQ0F5RkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBQeXRob25GdW5jdGlvbiB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhJztcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IE1hbmFnZWRQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSwgSUZ1bmN0aW9uLCBJTGF5ZXJWZXJzaW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VBZ2VudCwgQmFzZUFnZW50UHJvcHMgfSBmcm9tICcuL2Jhc2UtYWdlbnQnO1xuaW1wb3J0IHsgSW52b2tlVHlwZSB9IGZyb20gJy4vaW52b2tlLXR5cGUnO1xuaW1wb3J0IHsgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcsIExhbWJkYUlhbVV0aWxzLCBQb3dlcnRvb2xzQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IEJlZHJvY2tNb2RlbFV0aWxzIH0gZnJvbSAnLi4vYmVkcm9jayc7XG5pbXBvcnQgeyBEZWZhdWx0UnVudGltZXMgfSBmcm9tICcuLi9jdXN0b20tcmVzb3VyY2UnO1xuaW1wb3J0IHsgRGVmYXVsdEFnZW50Q29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWFnZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyB9IGZyb20gJy4va25vd2xlZGdlLWJhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhdGNoQWdlbnRQcm9wcyBleHRlbmRzIEJhc2VBZ2VudFByb3BzIHtcbiAgcmVhZG9ubHkgcHJvbXB0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGVjdEpzb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZ2VudCBpbnZvY2F0aW9uIHR5cGUuXG4gICAqXG4gICAqIERlZmluZXMgaG93IHRoZSBhZ2VudCBpcyBpbnZva2VkIGFuZCB3aGF0IHByb2Nlc3NpbmcgbW9kZSB0byB1c2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IEludm9rZVR5cGUuQkFUQ0hcbiAgICovXG4gIHJlYWRvbmx5IGludm9rZVR5cGU/OiBJbnZva2VUeXBlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUga25vd2xlZGdlIGJhc2UgaW5mb3JtYXRpb24gdG8gYXBwZW5kIHRvIHRoZSBzeXN0ZW0gcHJvbXB0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGZvcm1hdHRlZCBzdHJpbmcgY29udGFpbmluZzpcbiAqIC0gRGVzY3JpcHRpb24gb2YgdGhlIHJldHJpZXZhbCB0b29sIGFuZCBob3cgdG8gdXNlIGl0XG4gKiAtIExpc3Qgb2YgYXZhaWxhYmxlIGtub3dsZWRnZSBiYXNlcyB3aXRoIHRoZWlyIG5hbWVzIGFuZCBkZXNjcmlwdGlvbnNcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIHRleHQgaGVscHMgdGhlIGFnZW50IHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IHRvIHVzZVxuICogdGhlIGtub3dsZWRnZSBiYXNlIHJldHJpZXZhbCBjYXBhYmlsaXR5LlxuICpcbiAqIEBwYXJhbSBrbm93bGVkZ2VCYXNlQ29uZmlncyAtIEFycmF5IG9mIGtub3dsZWRnZSBiYXNlIHJ1bnRpbWUgY29uZmlndXJhdGlvbnNcbiAqIEByZXR1cm5zIEZvcm1hdHRlZCBzdHJpbmcgdG8gYXBwZW5kIHRvIHN5c3RlbSBwcm9tcHQsIG9yIGVtcHR5IHN0cmluZyBpZiBubyBLQnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlS25vd2xlZGdlQmFzZVN5c3RlbVByb21wdEFkZGl0aW9uKFxuICBrbm93bGVkZ2VCYXNlQ29uZmlnczogS25vd2xlZGdlQmFzZVJ1bnRpbWVDb25maWdbXSxcbik6IHN0cmluZyB7XG4gIGlmIChrbm93bGVkZ2VCYXNlQ29uZmlncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBrYkxpc3QgPSBrbm93bGVkZ2VCYXNlQ29uZmlnc1xuICAgIC5tYXAoKGtiKSA9PiBgLSAqKiR7a2IubmFtZX0qKjogJHtrYi5kZXNjcmlwdGlvbn1gKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICByZXR1cm4gYFxuXG4jIyBLbm93bGVkZ2UgQmFzZSBSZXRyaWV2YWxcblxuWW91IGhhdmUgYWNjZXNzIHRvIGEga25vd2xlZGdlIGJhc2UgcmV0cmlldmFsIHRvb2wgY2FsbGVkIFxcYHJldHJpZXZlX2Zyb21fa25vd2xlZGdlX2Jhc2VcXGAuIFVzZSB0aGlzIHRvb2wgdG8gc2VhcmNoIGZvciByZWxldmFudCBpbmZvcm1hdGlvbiB3aGVuIGFuc3dlcmluZyBxdWVzdGlvbnMuXG5cbiMjIyBIb3cgdG8gdXNlIHRoZSByZXRyaWV2YWwgdG9vbDpcbi0gQ2FsbCB0aGUgdG9vbCB3aXRoIGEgc2VhcmNoIHF1ZXJ5IHRvIGZpbmQgcmVsZXZhbnQgaW5mb3JtYXRpb25cbi0gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBrbm93bGVkZ2VfYmFzZV9pZCB0byBzZWFyY2ggYSBzcGVjaWZpYyBrbm93bGVkZ2UgYmFzZVxuLSBJZiBubyBrbm93bGVkZ2VfYmFzZV9pZCBpcyBwcm92aWRlZCwgYWxsIGtub3dsZWRnZSBiYXNlcyB3aWxsIGJlIHNlYXJjaGVkXG5cbiMjIyBBdmFpbGFibGUgS25vd2xlZGdlIEJhc2VzOlxuJHtrYkxpc3R9XG5cbldoZW4gYSB1c2VyIGFza3MgYSBxdWVzdGlvbiB0aGF0IG1pZ2h0IGJlIGFuc3dlcmVkIGJ5IGluZm9ybWF0aW9uIGluIHRoZXNlIGtub3dsZWRnZSBiYXNlcywgdXNlIHRoZSByZXRyaWV2YWwgdG9vbCB0byBmaW5kIHJlbGV2YW50IGNvbnRleHQgYmVmb3JlIHJlc3BvbmRpbmcuXG5gO1xufVxuXG5leHBvcnQgY2xhc3MgQmF0Y2hBZ2VudCBleHRlbmRzIEJhc2VBZ2VudCB7XG4gIHB1YmxpYyByZWFkb25seSBhZ2VudEZ1bmN0aW9uPzogSUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCYXRjaEFnZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICBjb25zdCBtb2RlbElkID0gQmVkcm9ja01vZGVsVXRpbHMuZGVyaXZlQWN0dWFsTW9kZWxJZCh0aGlzLmJlZHJvY2tNb2RlbCk7XG4gICAgY29uc3QgbWV0cmljTmFtZXNwYWNlID0gcHJvcHMubWV0cmljTmFtZXNwYWNlIHx8IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnLkRFRkFVTFRfTUVUUklDX05BTUVTUEFDRTtcbiAgICBjb25zdCBtZXRyaWNTZXJ2aWNlTmFtZSA9IHByb3BzLm1ldHJpY1NlcnZpY2VOYW1lIHx8IERlZmF1bHRBZ2VudENvbmZpZy5ERUZBVUxUX09CU0VSVkFCSUxJVFlfTUVUUklDX1NWQ19OQU1FO1xuXG4gICAgLy8gR2VuZXJhdGUga25vd2xlZGdlIGJhc2Ugc3lzdGVtIHByb21wdCBhZGRpdGlvbiBpZiBLQnMgYXJlIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBrYlN5c3RlbVByb21wdEFkZGl0aW9uID0gZ2VuZXJhdGVLbm93bGVkZ2VCYXNlU3lzdGVtUHJvbXB0QWRkaXRpb24odGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncyk7XG5cbiAgICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBTWVNURU1fUFJPTVBUX1MzX0JVQ0tFVF9OQU1FOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzQnVja2V0TmFtZSxcbiAgICAgIFNZU1RFTV9QUk9NUFRfUzNfS0VZOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzT2JqZWN0S2V5LFxuICAgICAgVE9PTFNfQ09ORklHOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zKSxcbiAgICAgIE1PREVMX0lEOiBtb2RlbElkLFxuICAgICAgSU5WT0tFX1RZUEU6IHByb3BzLmludm9rZVR5cGUgfHwgSW52b2tlVHlwZS5CQVRDSCxcbiAgICAgIFBST01QVDogcHJvcHMucHJvbXB0LFxuICAgICAgRVhQRUNUX0pTT046IHByb3BzLmV4cGVjdEpzb24gPyAnVHJ1ZScgOiAnJyxcbiAgICAgIC4uLlBvd2VydG9vbHNDb25maWcuZ2VuZXJhdGVEZWZhdWx0TGFtYmRhQ29uZmlnKFxuICAgICAgICBwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5LFxuICAgICAgICBtZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgIG1ldHJpY1NlcnZpY2VOYW1lLFxuICAgICAgKSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIGtub3dsZWRnZSBiYXNlIGNvbmZpZ3VyYXRpb24gaWYgS0JzIGFyZSBjb25maWd1cmVkXG4gICAgaWYgKHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZW52LktOT1dMRURHRV9CQVNFU19DT05GSUcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmtub3dsZWRnZUJhc2VDb25maWdzKTtcbiAgICAgIGVudi5LTk9XTEVER0VfQkFTRV9TWVNURU1fUFJPTVBUX0FERElUSU9OID0ga2JTeXN0ZW1Qcm9tcHRBZGRpdGlvbjtcbiAgICB9XG5cbiAgICAvLyBBZGQgQWdlbnRDb3JlIG9ic2VydmFiaWxpdHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoZW4gZW5hYmxlZFxuICAgIGlmIChwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5KSB7XG4gICAgICBlbnYuQUdFTlRfT0JTRVJWQUJJTElUWV9FTkFCTEVEID0gJ3RydWUnO1xuICAgICAgZW52Lk9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyA9IGBzZXJ2aWNlLm5hbWU9JHttZXRyaWNTZXJ2aWNlTmFtZX0sYXdzLmxvZy5ncm91cC5uYW1lcz0vYXdzL2JlZHJvY2stYWdlbnRjb3JlL3J1bnRpbWVzLyR7cHJvcHMuYWdlbnROYW1lfWA7XG4gICAgICBlbnYuT1RFTF9FWFBPUlRFUl9PVExQX0xPR1NfSEVBREVSUyA9IGB4LWF3cy1sb2ctZ3JvdXA9L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8ke3Byb3BzLmFnZW50TmFtZX0seC1hd3MtbG9nLXN0cmVhbT1ydW50aW1lLWxvZ3MseC1hd3MtbWV0cmljLW5hbWVzcGFjZT1iZWRyb2NrLWFnZW50Y29yZWA7XG4gICAgICBlbnYuQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVIgPSAnL29wdC9vdGVsLWluc3RydW1lbnQnO1xuICAgICAgZW52Lk9URUxfUFlUSE9OX0RJU1RSTyA9ICdhd3NfZGlzdHJvJztcbiAgICAgIGVudi5PVEVMX1BZVEhPTl9DT05GSUdVUkFUT1IgPSAnYXdzX2NvbmZpZ3VyYXRvcic7XG4gICAgICBlbnYuT1RFTF9FWFBPUlRFUl9PVExQX1BST1RPQ09MID0gJ2h0dHAvcHJvdG9idWYnO1xuICAgICAgZW52Lk9URUxfVFJBQ0VTX0VYUE9SVEVSID0gJ290bHAnO1xuXG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRNYW5hZ2VkUG9saWN5KE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdDbG91ZFdhdGNoTGFtYmRhQXBwbGljYXRpb25TaWduYWxzRXhlY3V0aW9uUm9sZVBvbGljeScpKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGFjY291bnQsIHJlZ2lvbiB9ID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdCA9IExhbWJkYUlhbVV0aWxzLmNyZWF0ZUxvZ3NQZXJtaXNzaW9ucyh7XG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLmFnZW50TmFtZSxcbiAgICAgIGVuYWJsZU9ic2VydmFiaWxpdHk6IHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHksXG4gICAgfSk7XG5cbiAgICAvLyBEZWZpbmUgTGFtYmRhIGFyY2hpdGVjdHVyZSAoY3VycmVudGx5IGhhcmRjb2RlZCwgYnV0IGNlbnRyYWxpemVkIGZvciBmdXR1cmUgY29uZmlndXJhYmlsaXR5KVxuICAgIGNvbnN0IGxhbWJkYUFyY2hpdGVjdHVyZSA9IHByb3BzLmFnZW50QXJjaGl0ZWN0dXJlIHx8IEFyY2hpdGVjdHVyZS5BUk1fNjQ7XG5cbiAgICAvLyBCdWlsZCBsYXllcnMgYXJyYXkgd2l0aCBBRE9UIGxheWVyIHdoZW4gb2JzZXJ2YWJpbGl0eSBpcyBlbmFibGVkXG4gICAgY29uc3QgbGF5ZXJzOiBJTGF5ZXJWZXJzaW9uW10gPSBbXG4gICAgICAuLi4ocHJvcHMuYWdlbnREZWZpbml0aW9uLmxhbWJkYUxheWVycyB8fCBbXSksXG4gICAgICAuLi50aGlzLmtub3dsZWRnZUJhc2VMYXllcnMsXG4gICAgXTtcblxuICAgIGlmIChwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5KSB7XG4gICAgICBsYXllcnMucHVzaCh0aGlzLmNyZWF0ZUFET1RMYXllcigpKTtcbiAgICB9XG5cbiAgICB0aGlzLmFnZW50RnVuY3Rpb24gPSBuZXcgUHl0aG9uRnVuY3Rpb24odGhpcywgJ0JhdGNoQWdlbnRGdW5jdGlvbicsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC51bmlxdWVGdW5jdGlvbk5hbWUsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYUFyY2hpdGVjdHVyZSxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudCcpLFxuICAgICAgcm9sZTogdGhpcy5hZ2VudFJvbGUsXG4gICAgICBpbmRleDogJ2JhdGNoLnB5JyxcbiAgICAgIHJ1bnRpbWU6IERlZmF1bHRSdW50aW1lcy5QWVRIT04sXG4gICAgICBsYXllcnMsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEwKSxcbiAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZW52aXJvbm1lbnRFbmNyeXB0aW9uOiB0aGlzLmVuY3J5cHRpb25LZXksXG4gICAgICB2cGM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLnZwYyA6IHVuZGVmaW5lZCxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLmFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHMgb2YgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC5wb2xpY3lTdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzKTtcbiAgICB9XG4gIH1cbn0iXX0=
@@ -7,6 +7,6 @@ class DefaultAgentConfig {
7
7
  }
8
8
  exports.DefaultAgentConfig = DefaultAgentConfig;
9
9
  _a = JSII_RTTI_SYMBOL_1;
10
- DefaultAgentConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultAgentConfig", version: "1.12.0" };
10
+ DefaultAgentConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultAgentConfig", version: "1.13.0" };
11
11
  DefaultAgentConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = 'agent';
12
12
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1hZ2VudC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9kZWZhdWx0LWFnZW50LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE1BQWEsa0JBQWtCOztBQUEvQixnREFFQzs7O0FBRHdCLHdEQUFxQyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBEZWZhdWx0QWdlbnRDb25maWcge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfT0JTRVJWQUJJTElUWV9NRVRSSUNfU1ZDX05BTUUgPSAnYWdlbnQnO1xufSJdfQ==
@@ -181,7 +181,7 @@ class StreamingHttpAdapter {
181
181
  }
182
182
  exports.StreamingHttpAdapter = StreamingHttpAdapter;
183
183
  _a = JSII_RTTI_SYMBOL_1;
184
- StreamingHttpAdapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.StreamingHttpAdapter", version: "1.12.0" };
184
+ StreamingHttpAdapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.StreamingHttpAdapter", version: "1.13.0" };
185
185
  /**
186
186
  * S3-based session manager for persisting conversation state.
187
187
  *
@@ -258,7 +258,7 @@ class S3SessionManager {
258
258
  }
259
259
  exports.S3SessionManager = S3SessionManager;
260
260
  _b = JSII_RTTI_SYMBOL_1;
261
- S3SessionManager[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.S3SessionManager", version: "1.12.0" };
261
+ S3SessionManager[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.S3SessionManager", version: "1.13.0" };
262
262
  /**
263
263
  * Sliding window conversation manager for maintaining recent conversation history.
264
264
  *
@@ -306,7 +306,7 @@ class SlidingWindowConversationManager {
306
306
  }
307
307
  exports.SlidingWindowConversationManager = SlidingWindowConversationManager;
308
308
  _c = JSII_RTTI_SYMBOL_1;
309
- SlidingWindowConversationManager[_c] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.SlidingWindowConversationManager", version: "1.12.0" };
309
+ SlidingWindowConversationManager[_c] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.SlidingWindowConversationManager", version: "1.13.0" };
310
310
  /**
311
311
  * Null conversation manager for stateless interactions.
312
312
  *
@@ -329,7 +329,7 @@ class NullConversationManager {
329
329
  }
330
330
  exports.NullConversationManager = NullConversationManager;
331
331
  _d = JSII_RTTI_SYMBOL_1;
332
- NullConversationManager[_d] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NullConversationManager", version: "1.12.0" };
332
+ NullConversationManager[_d] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NullConversationManager", version: "1.13.0" };
333
333
  /**
334
334
  * Cognito-based authenticator for securing REST API endpoints.
335
335
  *
@@ -452,7 +452,7 @@ class CognitoAuthenticator {
452
452
  }
453
453
  exports.CognitoAuthenticator = CognitoAuthenticator;
454
454
  _e = JSII_RTTI_SYMBOL_1;
455
- CognitoAuthenticator[_e] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CognitoAuthenticator", version: "1.12.0" };
455
+ CognitoAuthenticator[_e] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CognitoAuthenticator", version: "1.13.0" };
456
456
  /**
457
457
  * No-authentication authenticator for development and testing.
458
458
  *
@@ -482,7 +482,7 @@ class NoAuthenticator {
482
482
  }
483
483
  exports.NoAuthenticator = NoAuthenticator;
484
484
  _f = JSII_RTTI_SYMBOL_1;
485
- NoAuthenticator[_f] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NoAuthenticator", version: "1.12.0" };
485
+ NoAuthenticator[_f] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NoAuthenticator", version: "1.13.0" };
486
486
  /**
487
487
  * Lambda hosting adapter for InteractiveAgent.
488
488
  *
@@ -627,7 +627,7 @@ class LambdaHostingAdapter {
627
627
  }
628
628
  exports.LambdaHostingAdapter = LambdaHostingAdapter;
629
629
  _g = JSII_RTTI_SYMBOL_1;
630
- LambdaHostingAdapter[_g] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaHostingAdapter", version: "1.12.0" };
630
+ LambdaHostingAdapter[_g] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaHostingAdapter", version: "1.13.0" };
631
631
  /**
632
632
  * AgentCore Runtime hosting adapter for InteractiveAgent.
633
633
  *
@@ -818,7 +818,7 @@ class AgentCoreRuntimeHostingAdapter {
818
818
  }
819
819
  exports.AgentCoreRuntimeHostingAdapter = AgentCoreRuntimeHostingAdapter;
820
820
  _h = JSII_RTTI_SYMBOL_1;
821
- AgentCoreRuntimeHostingAdapter[_h] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgentCoreRuntimeHostingAdapter", version: "1.12.0" };
821
+ AgentCoreRuntimeHostingAdapter[_h] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgentCoreRuntimeHostingAdapter", version: "1.13.0" };
822
822
  /**
823
823
  * Interactive Agent for real-time conversational AI with SSE streaming.
824
824
  *
@@ -1001,5 +1001,5 @@ class InteractiveAgent extends base_agent_1.BaseAgent {
1001
1001
  }
1002
1002
  exports.InteractiveAgent = InteractiveAgent;
1003
1003
  _j = JSII_RTTI_SYMBOL_1;
1004
- InteractiveAgent[_j] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.InteractiveAgent", version: "1.12.0" };
1004
+ InteractiveAgent[_j] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.InteractiveAgent", version: "1.13.0" };
1005
1005
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9pbnRlcmFjdGl2ZS1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFFdEMsNkJBQTZCO0FBQzdCLDZDQUFpRTtBQUNqRSwrREFRb0M7QUFDcEMsMkVBQWtGO0FBQ2xGLHlEQUF5SDtBQUN6SCwrREFBOEQ7QUFDOUQsaURBQXNGO0FBRXRGLHVEQUE4RztBQUM5RywrQ0FBMEY7QUFFMUYsNkNBQXlEO0FBQ3pELCtDQUEwRTtBQUMxRSxpRUFBNEQ7QUFDNUQsK0NBQW1FO0FBQ25FLGlFQUEyRTtBQUMzRSx3Q0FBK0M7QUFDL0Msd0RBQXFEO0FBNkRyRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUNILE1BQWEsb0JBQW9CO0lBYy9CLFlBQVksUUFBbUMsRUFBRTtRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsY0FBeUI7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHVGQUF1RixDQUFDLENBQUM7UUFDM0csQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztRQUVqRCw0QkFBNEI7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSx3QkFBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFO1lBQ2pELFdBQVcsRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLFVBQVU7WUFDeEQsV0FBVyxFQUFFLG9EQUFvRDtZ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QUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuSCxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7O0FBMUpILDRDQTJKQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IER1cmF0aW9uLCBGbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBBdXRob3JpemF0aW9uVHlwZSxcbiAgQ29nbml0b1VzZXJQb29sc0F1dGhvcml6ZXIsXG4gIENvcnMsXG4gIEdhdGV3YXlSZXNwb25zZSxcbiAgTGFtYmRhSW50ZWdyYXRpb24sXG4gIFJlc3BvbnNlVHlwZSxcbiAgUmVzdEFwaSxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0IHsgQ2ZuUnVudGltZSwgQ2ZuUnVudGltZUVuZHBvaW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHsgVXNlclBvb2wsIFVzZXJQb29sQ2xpZW50LCBNZmEsIEFjY291bnRSZWNvdmVyeSwgVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZ25pdG8nO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2VBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3ItYXNzZXRzJztcbmltcG9ydCB7IFJvbGUsIFNlcnZpY2VQcmluY2lwYWwsIFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJS2V5LCBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IElGdW5jdGlvbiwgQXJjaGl0ZWN0dXJlLCBJTGF5ZXJWZXJzaW9uLCBMYXllclZlcnNpb24sIEZ1bmN0aW9uLCBDb2RlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJQnVja2V0LCBCdWNrZXQsIEJ1Y2tldEVuY3J5cHRpb24sIEJsb2NrUHVibGljQWNjZXNzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZUFnZW50LCBCYXNlQWdlbnRQcm9wcyB9IGZyb20gJy4vYmFzZS1hZ2VudCc7XG5pbXBvcnQgeyBnZW5lcmF0ZUtub3dsZWRnZUJhc2VTeXN0ZW1Qcm9tcHRBZGRpdGlvbiB9IGZyb20gJy4vYmF0Y2gtYWdlbnQnO1xuaW1wb3J0IHsgRGVmYXVsdEFnZW50Q29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWFnZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBMYW1iZGFJYW1VdGlscywgUG93ZXJ0b29sc0NvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5JztcbmltcG9ydCB7IEJlZHJvY2tNb2RlbFV0aWxzIH0gZnJvbSAnLi4vYmVkcm9jayc7XG5pbXBvcnQgeyBEZWZhdWx0UnVudGltZXMgfSBmcm9tICcuLi9jdXN0b20tcmVzb3VyY2UnO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL2ZvdW5kYXRpb24nO1xuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgcGx1Z2dhYmxlIGNvbW11bmljYXRpb24gbWVjaGFuaXNtcy5cbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgU3RyZWFtaW5nSHR0cEFkYXB0ZXIgKEFQSSBHYXRld2F5IFJFU1QgQVBJIHdpdGggcmVzcG9uc2Ugc3RyZWFtaW5nKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tbXVuaWNhdGlvbkFkYXB0ZXIge1xuICAvKipcbiAgICogQXR0YWNoIHRoZSBhZGFwdGVyIHRvIGEgTGFtYmRhIGZ1bmN0aW9uIGFuZCBjcmVhdGUgY29tbXVuaWNhdGlvbiBpbmZyYXN0cnVjdHVyZS5cbiAgICogUmV0dXJucyB0aGUgcHVibGljIGVuZHBvaW50IFVSTCBmb3IgY2xpZW50IGNvbm5lY3Rpb25zLlxuICAgKi9cbiAgYXR0YWNoVG9GdW5jdGlvbihsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCB0aGUgTGFtYmRhIGZ1bmN0aW9uIHBlcm1pc3Npb24gdG8gc2VuZCByZXNwb25zZXMgYmFjayB0byBjbGllbnRzLlxuICAgKi9cbiAgZ3JhbnRJbnZva2UobGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhyb3R0bGUgc2V0dGluZ3MgZm9yIFJFU1QgQVBJLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRocm90dGxlU2V0dGluZ3Mge1xuICAvKipcbiAgICogUmF0ZSBsaW1pdCAocmVxdWVzdHMgcGVyIHNlY29uZCkuXG4gICAqL1xuICByZWFkb25seSByYXRlTGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEJ1cnN0IGxpbWl0IChtYXhpbXVtIGNvbmN1cnJlbnQgcmVxdWVzdHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVyc3RMaW1pdD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIFN0cmVhbWluZ0h0dHBBZGFwdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbWluZ0h0dHBBZGFwdGVyUHJvcHMge1xuICAvKipcbiAgICogUkVTVCBBUEkgc3RhZ2UgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3Byb2QnXG4gICAqL1xuICByZWFkb25seSBzdGFnZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRocm90dGxlIHNldHRpbmdzIGZvciBSRVNUIEFQSS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gdGhyb3R0bGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3R0bGU/OiBUaHJvdHRsZVNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdG9yIGZvciBzZWN1cmluZyBBUEkgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBVc2VzIGF1dGhlbnRpY2F0b3IgZnJvbSBJbnRlcmFjdGl2ZUFnZW50XG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdG9yPzogSUF1dGhlbnRpY2F0b3I7XG59XG5cbi8qKlxuICogU3RyZWFtaW5nIEhUVFAgYWRhcHRlciBmb3IgcmVhbC10aW1lIGFnZW50IGNvbW11bmljYXRpb24gdmlhIFNTRS5cbiAqXG4gKiBUaGlzIGFkYXB0ZXIgY3JlYXRlcyBhbiBBUEkgR2F0ZXdheSBSRVNUIEFQSSB3aXRoIHJlc3BvbnNlIHN0cmVhbWluZyBlbmFibGVkLFxuICogYWxsb3dpbmcgdGhlIExhbWJkYSBmdW5jdGlvbiB0byBzdHJlYW0gU1NFIChTZXJ2ZXItU2VudCBFdmVudHMpIHJlc3BvbnNlc1xuICogYmFjayB0byBjbGllbnRzIGFzIHRoZSBTdHJhbmRzIEFnZW50IGdlbmVyYXRlcyB0b2tlbnMuXG4gKlxuICogIyMgQXJjaGl0ZWN0dXJlXG4gKlxuICogYGBgXG4gKiBDbGllbnQg4oaSIFBPU1QgL2NoYXQg4oaSIEFQSSBHYXRld2F5IFJFU1QgQVBJIChTVFJFQU0gbW9kZSkg4oaSIExhbWJkYSAoRmFzdEFQSSArIExXQSkg4oaSIEJlZHJvY2tcbiAqIENsaWVudCDihpAgU1NFIHN0cmVhbSDihpAgQVBJIEdhdGV3YXkg4oaQIExhbWJkYSByZXNwb25zZSBzdHJlYW1pbmcg4oaQIEFnZW50IHRva2Vuc1xuICogYGBgXG4gKlxuICogIyMgRmVhdHVyZXNcbiAqXG4gKiAtICoqUmVzcG9uc2UgU3RyZWFtaW5nKio6IFByb2dyZXNzaXZlIFNTRSBkZWxpdmVyeSB2aWEgQVBJIEdhdGV3YXkgcmVzcG9uc2Ugc3RyZWFtaW5nXG4gKiAtICoqMTUtTWludXRlIFRpbWVvdXQqKjogRXh0ZW5kZWQgdGltZW91dCBmb3IgbG9uZy1ydW5uaW5nIGFnZW50IGNvbnZlcnNhdGlvbnNcbiAqIC0gKipDb2duaXRvIEF1dGgqKjogTmF0aXZlIENPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIG9uIFJFU1QgQVBJXG4gKiAtICoqQ09SUyoqOiBCdWlsdC1pbiBDT1JTIHN1cHBvcnQgZm9yIGJyb3dzZXIgY2xpZW50c1xuICogLSAqKlRocm90dGxpbmcqKjogQ29uZmlndXJhYmxlIHJhdGUgYW5kIGJ1cnN0IGxpbWl0c1xuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuICogaW1wb3J0IHsgSW50ZXJhY3RpdmVBZ2VudCwgU3RyZWFtaW5nSHR0cEFkYXB0ZXIgfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKlxuICogY29uc3QgbXlQcm9tcHQgPSBuZXcgQXNzZXQodGhpcywgJ1Byb21wdCcsIHsgcGF0aDogJy4vcHJvbXB0LnR4dCcgfSk7XG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKHtcbiAqICAgc3RhZ2VOYW1lOiAncHJvZCcsXG4gKiAgIHRocm90dGxlOiB7IHJhdGVMaW1pdDogMTAwLCBidXJzdExpbWl0OiAyMDAgfVxuICogfSk7XG4gKlxuICogY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudCh0aGlzLCAnQWdlbnQnLCB7XG4gKiAgIGFnZW50TmFtZTogJ0NoYXRBZ2VudCcsXG4gKiAgIGFnZW50RGVmaW5pdGlvbjogeyBiZWRyb2NrTW9kZWw6IHt9LCBzeXN0ZW1Qcm9tcHQ6IG15UHJvbXB0IH0sXG4gKiAgIGNvbW11bmljYXRpb25BZGFwdGVyOiBhZGFwdGVyXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtaW5nSHR0cEFkYXB0ZXIgaW1wbGVtZW50cyBJQ29tbXVuaWNhdGlvbkFkYXB0ZXIge1xuICAvKipcbiAgICogVGhlIFJFU1QgQVBJIEdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzdEFwaT86IFJlc3RBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBBUEkgZW5kcG9pbnQgVVJMLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaUVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFN0cmVhbWluZ0h0dHBBZGFwdGVyUHJvcHM7XG4gIHByaXZhdGUgc2NvcGU/OiBDb25zdHJ1Y3Q7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFN0cmVhbWluZ0h0dHBBZGFwdGVyUHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggdGhlIGFkYXB0ZXIgdG8gYSBMYW1iZGEgZnVuY3Rpb24gYW5kIGNyZWF0ZSBSRVNUIEFQSSBpbmZyYXN0cnVjdHVyZS5cbiAgICogQ3JlYXRlcyBBUEkgR2F0ZXdheSBSRVNUIEFQSSB3aXRoIFBPU1QgL2NoYXQgZW5kcG9pbnQgYW5kIHJlc3BvbnNlIHN0cmVhbWluZy5cbiAgICovXG4gIGF0dGFjaFRvRnVuY3Rpb24obGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNjb3BlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbWluZ0h0dHBBZGFwdGVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIHNjb3BlIGJlZm9yZSBjYWxsaW5nIGF0dGFjaFRvRnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFnZU5hbWUgPSB0aGlzLnByb3BzLnN0YWdlTmFtZSB8fCAncHJvZCc7XG5cbiAgICAvLyBDcmVhdGUgUkVTVCBBUEkgd2l0aCBDT1JTXG4gICAgY29uc3QgcmVzdEFwaSA9IG5ldyBSZXN0QXBpKHRoaXMuc2NvcGUsICdDaGF0QXBpJywge1xuICAgICAgcmVzdEFwaU5hbWU6IGAke1N0YWNrLm9mKHRoaXMuc2NvcGUpLnN0YWNrTmFtZX0tQ2hhdEFwaWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyYWN0aXZlIEFnZW50IENoYXQgQVBJIHdpdGggcmVzcG9uc2Ugc3RyZWFtaW5nJyxcbiAgICAgIGRlcGxveU9wdGlvbnM6IHtcbiAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICB0aHJvdHRsaW5nUmF0ZUxpbWl0OiB0aGlzLnByb3BzLnRocm90dGxlPy5yYXRlTGltaXQsXG4gICAgICAgIHRocm90dGxpbmdCdXJzdExpbWl0OiB0aGlzLnByb3BzLnRocm90dGxlPy5idXJzdExpbWl0LFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRDb3JzUHJlZmxpZ2h0T3B0aW9uczoge1xuICAgICAgICBhbGxvd09yaWdpbnM6IENvcnMuQUxMX09SSUdJTlMsXG4gICAgICAgIGFsbG93TWV0aG9kczogWydQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgYWxsb3dIZWFkZXJzOiBbJ0NvbnRlbnQtVHlwZScsICdBdXRob3JpemF0aW9uJ10sXG4gICAgICB9LFxuICAgIH0pO1xuICAgICh0aGlzIGFzIGFueSkucmVzdEFwaSA9IHJlc3RBcGk7XG5cbiAgICAvLyBBZGQgQ09SUyBoZWFkZXJzIHRvIEFQSSBHYXRld2F5IGVycm9yIHJlc3BvbnNlcyAoNFhYLzVYWCkuXG4gICAgLy8gV2l0aG91dCB0aGVzZSwgdGhlIENvZ25pdG8gYXV0aG9yaXplcidzIDQwMSByZXNwb25zZSB3b24ndCBpbmNsdWRlXG4gICAgLy8gQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luIGFuZCB0aGUgYnJvd3NlciB3aWxsIGJsb2NrIGl0IGFzIGEgQ09SUyBlcnJvci5cbiAgICBuZXcgR2F0ZXdheVJlc3BvbnNlKHRoaXMuc2NvcGUsICdHYXRld2F5RGVmYXVsdDRYWCcsIHtcbiAgICAgIHJlc3RBcGksXG4gICAgICB0eXBlOiBSZXNwb25zZVR5cGUuREVGQVVMVF80WFgsXG4gICAgICByZXNwb25zZUhlYWRlcnM6IHtcbiAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6IFwiJyonXCIsXG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJzogXCInQ29udGVudC1UeXBlLEF1dGhvcml6YXRpb24nXCIsXG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogXCInUE9TVCxPUFRJT05TJ1wiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBuZXcgR2F0ZXdheVJlc3BvbnNlKHRoaXMuc2NvcGUsICdHYXRld2F5RGVmYXVsdDVYWCcsIHtcbiAgICAgIHJlc3RBcGksXG4gICAgICB0eXBlOiBSZXNwb25zZVR5cGUuREVGQVVMVF81WFgsXG4gICAgICByZXNwb25zZUhlYWRlcnM6IHtcbiAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6IFwiJyonXCIsXG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJzogXCInQ29udGVudC1UeXBlLEF1dGhvcml6YXRpb24nXCIsXG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogXCInUE9TVCxPUFRJT05TJ1wiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBMYW1iZGEgaW50ZWdyYXRpb25cbiAgICBjb25zdCBsYW1iZGFJbnRlZ3JhdGlvbiA9IG5ldyBMYW1iZGFJbnRlZ3JhdGlvbihsYW1iZGFGdW5jdGlvbiwge1xuICAgICAgcHJveHk6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgL2NoYXQgcmVzb3VyY2Ugd2l0aCBQT1NUIG1ldGhvZFxuICAgIGNvbnN0IGNoYXRSZXNvdXJjZSA9IHJlc3RBcGkucm9vdC5hZGRSZXNvdXJjZSgnY2hhdCcpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGF1dGhvcml6YXRpb24gdHlwZVxuICAgIGxldCBhdXRob3JpemF0aW9uVHlwZSA9IEF1dGhvcml6YXRpb25UeXBlLk5PTkU7XG4gICAgbGV0IGF1dGhvcml6ZXI6IENvZ25pdG9Vc2VyUG9vbHNBdXRob3JpemVyIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuYXV0aGVudGljYXRvciBpbnN0YW5jZW9mIENvZ25pdG9BdXRoZW50aWNhdG9yICYmIHRoaXMucHJvcHMuYXV0aGVudGljYXRvci51c2VyUG9vbCkge1xuICAgICAgYXV0aG9yaXplciA9IG5ldyBDb2duaXRvVXNlclBvb2xzQXV0aG9yaXplcih0aGlzLnNjb3BlLCAnQ29nbml0b0F1dGhvcml6ZXInLCB7XG4gICAgICAgIGNvZ25pdG9Vc2VyUG9vbHM6IFt0aGlzLnByb3BzLmF1dGhlbnRpY2F0b3IudXNlclBvb2xdLFxuICAgICAgICBhdXRob3JpemVyTmFtZTogJ0NvZ25pdG9BdXRob3JpemVyJyxcbiAgICAgIH0pO1xuICAgICAgYXV0aG9yaXphdGlvblR5cGUgPSBBdXRob3JpemF0aW9uVHlwZS5DT0dOSVRPO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc3RNZXRob2QgPSBjaGF0UmVzb3VyY2UuYWRkTWV0aG9kKCdQT1NUJywgbGFtYmRhSW50ZWdyYXRpb24sIHtcbiAgICAgIGF1dGhvcml6YXRpb25UeXBlLFxuICAgICAgYXV0aG9yaXplcixcbiAgICB9KTtcblxuICAgIC8vIENvbmZpZ3VyZSByZXNwb25zZSBzdHJlYW1pbmcgdmlhIENmbk1ldGhvZCBlc2NhcGUgaGF0Y2hcbiAgICAvLyBBUEkgR2F0ZXdheSBSRVNUIEFQSSByZXNwb25zZSBzdHJlYW1pbmcgcmVxdWlyZXM6XG4gICAgLy8gMS4gcmVzcG9uc2VUcmFuc2Zlck1vZGU6IFNUUkVBTSBvbiB0aGUgaW50ZWdyYXRpb25cbiAgICAvLyAyLiBJbnRlZ3JhdGlvbiBVUkkgcG9pbnRpbmcgdG8gL3Jlc3BvbnNlLXN0cmVhbWluZy1pbnZvY2F0aW9uc1xuICAgIGNvbnN0IGNmbk1ldGhvZCA9IHBvc3RNZXRob2Qubm9kZS5kZWZhdWx0Q2hpbGQgYXMgYW55O1xuICAgIGlmIChjZm5NZXRob2QpIHtcbiAgICAgIGNmbk1ldGhvZC5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdJbnRlZ3JhdGlvbi5SZXNwb25zZVRyYW5zZmVyTW9kZScsICdTVFJFQU0nKTtcbiAgICAgIC8vIE92ZXJyaWRlIHRoZSBpbnRlZ3JhdGlvbiBVUkkgdG8gdXNlIHJlc3BvbnNlLXN0cmVhbWluZy1pbnZvY2F0aW9ucyBwYXRoXG4gICAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZih0aGlzLnNjb3BlKS5yZWdpb247XG4gICAgICBjZm5NZXRob2QuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgICAgJ0ludGVncmF0aW9uLlVyaScsXG4gICAgICAgIGBhcm46YXdzOmFwaWdhdGV3YXk6JHtyZWdpb259OmxhbWJkYTpwYXRoLzIwMjEtMTEtMTUvZnVuY3Rpb25zLyR7bGFtYmRhRnVuY3Rpb24uZnVuY3Rpb25Bcm59L3Jlc3BvbnNlLXN0cmVhbWluZy1pbnZvY2F0aW9uc2AsXG4gICAgICApO1xuICAgICAgLy8gU2V0IGludGVncmF0aW9uIHRpbWVvdXQgdG8gMTUgbWludXRlcyAoOTAwMDAwIG1zKVxuICAgICAgY2ZuTWV0aG9kLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ0ludGVncmF0aW9uLlRpbWVvdXRJbk1pbGxpcycsIDkwMDAwMCk7XG4gICAgfVxuXG4gICAgLy8gR3JhbnQgQVBJIEdhdGV3YXkgcGVybWlzc2lvbiB0byBpbnZva2UgTGFtYmRhIHdpdGggcmVzcG9uc2Ugc3RyZWFtaW5nXG4gICAgbGFtYmRhRnVuY3Rpb24uYWRkUGVybWlzc2lvbignQXBpR2F0ZXdheUludm9rZScsIHtcbiAgICAgIHByaW5jaXBhbDogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgICAgc291cmNlQXJuOiByZXN0QXBpLmFybkZvckV4ZWN1dGVBcGkoKSxcbiAgICB9KTtcblxuICAgIC8vIEFsc28gZ3JhbnQgSW52b2tlV2l0aFJlc3BvbnNlU3RyZWFtIHBlcm1pc3Npb25cbiAgICBsYW1iZGFGdW5jdGlvbi5hZGRQZXJtaXNzaW9uKCdBcGlHYXRld2F5U3RyZWFtSW52b2tlJywge1xuICAgICAgcHJpbmNpcGFsOiBuZXcgU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJyksXG4gICAgICBzb3VyY2VBcm46IHJlc3RBcGkuYXJuRm9yRXhlY3V0ZUFwaSgnUE9TVCcsICcvY2hhdCcpLFxuICAgICAgYWN0aW9uOiAnbGFtYmRhOkludm9rZUZ1bmN0aW9uVXJsJyxcbiAgICB9KTtcblxuICAgIC8vIENvbnN0cnVjdCBlbmRwb2ludCBVUkxcbiAgICBjb25zdCB1cmwgPSByZXN0QXBpLnVybEZvclBhdGgoJy9jaGF0Jyk7XG4gICAgKHRoaXMgYXMgYW55KS5hcGlFbmRwb2ludCA9IHVybDtcblxuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdGhlIExhbWJkYSBmdW5jdGlvbiBwZXJtaXNzaW9ucyBmb3IgQVBJIEdhdGV3YXkgaW50ZWdyYXRpb24uXG4gICAqIEZvciBSRVNUIEFQSSBzdHJlYW1pbmcsIG5vIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgYXJlIG5lZWRlZCBiZXlvbmQgdGhlIGludm9rZSBwZXJtaXNzaW9uLlxuICAgKi9cbiAgZ3JhbnRJbnZva2UoX2xhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAvLyBSRVNUIEFQSSBzdHJlYW1pbmcgZG9lc24ndCBuZWVkIHBvc3RfdG9fY29ubmVjdGlvbiBsaWtlIFdlYlNvY2tldC5cbiAgICAvLyBUaGUgTGFtYmRhIGludm9rZSBwZXJtaXNzaW9uIGlzIGFscmVhZHkgZ3JhbnRlZCBpbiBhdHRhY2hUb0Z1bmN0aW9uLlxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGFkYXB0ZXIgd2l0aCBhIENESyBzY29wZS5cbiAgICogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGF0dGFjaFRvRnVuY3Rpb24gb3IgZ3JhbnRJbnZva2UuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9zZXRTY29wZShzY29wZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICB9XG59XG5cbi8qKlxuICogU3RyYXRlZ3kgaW50ZXJmYWNlIGZvciBzZXNzaW9uIHBlcnNpc3RlbmNlLlxuICpcbiAqIFNlc3Npb24gc3RvcmVzIG1hbmFnZSBjb252ZXJzYXRpb24gc3RhdGUgcGVyc2lzdGVuY2UgYWNyb3NzIEhUVFAgcmVxdWVzdHMuXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAoUzNTZXNzaW9uTWFuYWdlcikgdXNlcyBTMyBmb3IgZHVyYWJsZSBzdG9yYWdlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBTdHJhbmRzLW5hdGl2ZSBgUzNTZXNzaW9uTWFuYWdlcmAgZnJvbSBgc3RyYW5kcy5zZXNzaW9uLnMzX3Nlc3Npb25fbWFuYWdlcmAgaW5zdGVhZC5cbiAqIFRoZSBQeXRob24gaGFuZGxlciBub3cgdXNlcyBTdHJhbmRzLW5hdGl2ZSBzZXNzaW9uIG1hbmFnZW1lbnQgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2Vzc2lvblN0b3JlIHtcbiAgLyoqXG4gICAqIFRoZSBTMyBidWNrZXQgdXNlZCBmb3Igc2Vzc2lvbiBzdG9yYWdlIChpZiBTMy1iYXNlZCkuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQnVja2V0PzogSUJ1Y2tldDtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyB0byBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGxhbWJkYUZ1bmN0aW9uIC0gVGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IG5lZWRzIGFjY2VzcyB0byB0aGUgc2Vzc2lvbiBzdG9yZVxuICAgKi9cbiAgZ3JhbnRSZWFkV3JpdGUobGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHZvaWQ7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBTM1Nlc3Npb25NYW5hZ2VyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBTdHJhbmRzLW5hdGl2ZSBgUzNTZXNzaW9uTWFuYWdlcmAgZnJvbSBgc3RyYW5kcy5zZXNzaW9uLnMzX3Nlc3Npb25fbWFuYWdlcmAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM1Nlc3Npb25NYW5hZ2VyUHJvcHMge1xuICAvKipcbiAgICogUzMgYnVja2V0IGZvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG8tY3JlYXRlZCBidWNrZXQgd2l0aCBLTVMgZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0PzogSUJ1Y2tldDtcblxuICAvKipcbiAgICogVGltZS10by1saXZlIGZvciBzZXNzaW9ucy5cbiAgICogU2Vzc2lvbnMgb2xkZXIgdGhhbiB0aGlzIGR1cmF0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBkZWxldGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5ob3VycygyNClcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25UVEw/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogS01TIGVuY3J5cHRpb24ga2V5IGZvciB0aGUgc2Vzc2lvbiBidWNrZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG8tY3JlYXRlZCBLTVMga2V5IHdpdGggcm90YXRpb24gZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IElLZXk7XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciB0aGUgc2Vzc2lvbiBidWNrZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogUzMtYmFzZWQgc2Vzc2lvbiBtYW5hZ2VyIGZvciBwZXJzaXN0aW5nIGNvbnZlcnNhdGlvbiBzdGF0ZS5cbiAqXG4gKiBVc2VzIFMzIGZvciBkdXJhYmxlIHN0b3JhZ2Ugb2Ygc2Vzc2lvbiBkYXRhIHdpdGggYXV0b21hdGljIGV4cGlyYXRpb25cbiAqIHZpYSBsaWZlY3ljbGUgcG9saWNpZXMuIEVhY2ggSFRUUCByZXF1ZXN0IGxvYWRzL3NhdmVzIHNlc3Npb24gc3RhdGUsXG4gKiBlbmFibGluZyBtdWx0aS10dXJuIGNvbnZlcnNhdGlvbnMgb3ZlciBzdGF0ZWxlc3MgSFRUUC5cbiAqXG4gKiAjIyBGZWF0dXJlc1xuICpcbiAqIC0gKipEdXJhYmxlIFN0b3JhZ2UqKjogU2Vzc2lvbnMgcGVyc2lzdGVkIHRvIFMzIHN1cnZpdmUgTGFtYmRhIHJlc3RhcnRzXG4gKiAtICoqQXV0b21hdGljIEV4cGlyYXRpb24qKjogTGlmZWN5Y2xlIHBvbGljeSByZW1vdmVzIG9sZCBzZXNzaW9uc1xuICogLSAqKkVuY3J5cHRpb24qKjogS01TIGVuY3J5cHRpb24gYXQgcmVzdFxuICogLSAqKkNvc3QgT3B0aW1pemF0aW9uKio6IFMzIFN0YW5kYXJkIHN0b3JhZ2Ugd2l0aCBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICpcbiAqICMjIFVzYWdlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbiAqIGltcG9ydCB7IEludGVyYWN0aXZlQWdlbnQsIFMzU2Vzc2lvbk1hbmFnZXIgfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKiBpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbiAqXG4gKiBjb25zdCBteVByb21wdCA9IG5ldyBBc3NldCh0aGlzLCAnUHJvbXB0JywgeyBwYXRoOiAnLi9wcm9tcHQudHh0JyB9KTtcbiAqIGNvbnN0IHNlc3Npb25NYW5hZ2VyID0gbmV3IFMzU2Vzc2lvbk1hbmFnZXIodGhpcywgJ1Nlc3Npb25NYW5hZ2VyJywge1xuICogICBzZXNzaW9uVFRMOiBEdXJhdGlvbi5ob3Vycyg0OClcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQodGhpcywgJ0FnZW50Jywge1xuICogICBhZ2VudE5hbWU6ICdDaGF0QWdlbnQnLFxuICogICBhZ2VudERlZmluaXRpb246IHsgYmVkcm9ja01vZGVsOiB7fSwgc3lzdGVtUHJvbXB0OiBteVByb21wdCB9LFxuICogICBzZXNzaW9uU3RvcmU6IHNlc3Npb25NYW5hZ2VyXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBTdHJhbmRzLW5hdGl2ZSBgUzNTZXNzaW9uTWFuYWdlcmAgZnJvbSBgc3RyYW5kcy5zZXNzaW9uLnMzX3Nlc3Npb25fbWFuYWdlcmAgaW5zdGVhZC5cbiAqIFRoZSBQeXRob24gaGFuZGxlciBub3cgdXNlcyBTdHJhbmRzLW5hdGl2ZSBzZXNzaW9uIG1hbmFnZW1lbnQgYXV0b21hdGljYWxseS5cbiAqIEFuIFMzIGJ1Y2tldCBpcyBzdGlsbCBjcmVhdGVkIGZvciB0aGUgU3RyYW5kcyBzZXNzaW9uIG1hbmFnZXI7IHRoaXMgQ0RLIGNsYXNzXG4gKiBpcyBubyBsb25nZXIgbmVlZGVkIHRvIGNvbmZpZ3VyZSBzZXNzaW9uIHBlcnNpc3RlbmNlLlxuICovXG5leHBvcnQgY2xhc3MgUzNTZXNzaW9uTWFuYWdlciBpbXBsZW1lbnRzIElTZXNzaW9uU3RvcmUge1xuICAvKipcbiAgICogVGhlIFMzIGJ1Y2tldCB1c2VkIGZvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vzc2lvbiBUVEwgZHVyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvblRUTDogRHVyYXRpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFMzU2Vzc2lvbk1hbmFnZXJQcm9wcyA9IHt9KSB7XG4gICAgY29uc3QgcmVtb3ZhbFBvbGljeSA9IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuICAgIGNvbnN0IHNlc3Npb25UVEwgPSBwcm9wcy5zZXNzaW9uVFRMIHx8IER1cmF0aW9uLmhvdXJzKDI0KTtcblxuICAgIC8vIFVzZSBwcm92aWRlZCBidWNrZXQgb3IgY3JlYXRlIG5ldyBvbmVcbiAgICB0aGlzLmJ1Y2tldCA9IHByb3BzLmJ1Y2tldCB8fCBuZXcgQnVja2V0KHNjb3BlLCBgJHtpZH1CdWNrZXRgLCB7XG4gICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLktNUyxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHByb3BzLmVuY3J5cHRpb25LZXksXG4gICAgICByZW1vdmFsUG9saWN5OiByZW1vdmFsUG9saWN5LFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHJlbW92YWxQb2xpY3kgPT09IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0RlbGV0ZU9sZFNlc3Npb25zJyxcbiAgICAgICAgICBleHBpcmF0aW9uOiBzZXNzaW9uVFRMLFxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIHZlcnNpb25lZDogZmFsc2UsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXNzaW9uVFRMID0gc2Vzc2lvblRUTDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IHVzZWQgZm9yIHNlc3Npb24gc3RvcmFnZSAoSVNlc3Npb25TdG9yZSBpbnRlcmZhY2UpLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXNzaW9uQnVja2V0KCk6IElCdWNrZXQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKi9cbiAgZ3JhbnRSZWFkV3JpdGUobGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZFdyaXRlKGxhbWJkYUZ1bmN0aW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgY29udmVyc2F0aW9uIGhpc3RvcnkgbWFuYWdlbWVudC5cbiAqXG4gKiBDb250ZXh0IHN0cmF0ZWdpZXMgY29udHJvbCBob3cgY29udmVyc2F0aW9uIGhpc3RvcnkgaXMgbWFpbnRhaW5lZCBhbmQgcHJvdmlkZWRcbiAqIHRvIHRoZSBhZ2VudC4gRGlmZmVyZW50IHN0cmF0ZWdpZXMgZW5hYmxlIGRpZmZlcmVudCBjb252ZXJzYXRpb24gcGF0dGVybnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFN0cmFuZHMtbmF0aXZlIGBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcmAgZnJvbVxuICogYHN0cmFuZHMuYWdlbnQuY29udmVyc2F0aW9uX21hbmFnZXJgIGluc3RlYWQuIFRoZSBQeXRob24gaGFuZGxlciBub3cgdXNlc1xuICogU3RyYW5kcy1uYXRpdmUgY29udmVyc2F0aW9uIG1hbmFnZW1lbnQgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29udGV4dFN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIEdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIExhbWJkYSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gY29uZmlndXJlIHRoZSBjb250ZXh0IG1hbmFnZXJcbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgU3RyYW5kcy1uYXRpdmUgYFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyYCBmcm9tXG4gKiBgc3RyYW5kcy5hZ2VudC5jb252ZXJzYXRpb25fbWFuYWdlcmAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlclByb3BzIHtcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGtlZXAgaW4gY29udmVyc2F0aW9uIGhpc3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIwIG1lc3NhZ2VzXG4gICAqL1xuICByZWFkb25seSB3aW5kb3dTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFNsaWRpbmcgd2luZG93IGNvbnZlcnNhdGlvbiBtYW5hZ2VyIGZvciBtYWludGFpbmluZyByZWNlbnQgY29udmVyc2F0aW9uIGhpc3RvcnkuXG4gKlxuICogS2VlcHMgYSBmaXhlZC1zaXplIHdpbmRvdyBvZiByZWNlbnQgbWVzc2FnZXMsIGF1dG9tYXRpY2FsbHkgZGlzY2FyZGluZyBvbGRlclxuICogbWVzc2FnZXMgYXMgbmV3IG9uZXMgYXJyaXZlLiBQcm92aWRlcyBjb25zaXN0ZW50IGNvbnRleHQgc2l6ZSBmb3IgdGhlIGFnZW50LlxuICpcbiAqICMjIFVzYWdlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbiAqIGltcG9ydCB7IEludGVyYWN0aXZlQWdlbnQsIFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyIH0gZnJvbSAnQGNka2xhYnMvY2RrLWFwcG1vZC1jYXRhbG9nLWJsdWVwcmludHMnO1xuICpcbiAqIGNvbnN0IG15UHJvbXB0ID0gbmV3IEFzc2V0KHRoaXMsICdQcm9tcHQnLCB7IHBhdGg6ICcuL3Byb21wdC50eHQnIH0pO1xuICogY29uc3QgY29udGV4dE1hbmFnZXIgPSBuZXcgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIoeyB3aW5kb3dTaXplOiAzMCB9KTtcbiAqXG4gKiBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHRoaXMsICdBZ2VudCcsIHtcbiAqICAgYWdlbnROYW1lOiAnQ2hhdEFnZW50JyxcbiAqICAgYWdlbnREZWZpbml0aW9uOiB7IGJlZHJvY2tNb2RlbDoge30sIHN5c3RlbVByb21wdDogbXlQcm9tcHQgfSxcbiAqICAgY29udGV4dFN0cmF0ZWd5OiBjb250ZXh0TWFuYWdlclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgU3RyYW5kcy1uYXRpdmUgYFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyYCBmcm9tXG4gKiBgc3RyYW5kcy5hZ2VudC5jb252ZXJzYXRpb25fbWFuYWdlcmAgaW5zdGVhZC4gVGhlIFB5dGhvbiBoYW5kbGVyIG5vdyBoYW5kbGVzXG4gKiBjb252ZXJzYXRpb24gd2luZG93aW5nIG5hdGl2ZWx5LlxuICovXG5leHBvcnQgY2xhc3MgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBJQ29udGV4dFN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIFRoZSB3aW5kb3cgc2l6ZSAobnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGtlZXApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdpbmRvd1NpemU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXJQcm9wcyA9IHt9KSB7XG4gICAgY29uc3Qgd2luZG93U2l6ZSA9IHByb3BzLndpbmRvd1NpemUgIT09IHVuZGVmaW5lZCA/IHByb3BzLndpbmRvd1NpemUgOiAyMDtcblxuICAgIGlmICh3aW5kb3dTaXplIDwgMSB8fCB3aW5kb3dTaXplID4gMTAwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd3aW5kb3dTaXplIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAwJyk7XG4gICAgfVxuXG4gICAgdGhpcy53aW5kb3dTaXplID0gd2luZG93U2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBMYW1iZGEgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7XG4gICAgICBDT05URVhUX0VOQUJMRUQ6ICd0cnVlJyxcbiAgICAgIENPTlRFWFRfU1RSQVRFR1k6ICdTbGlkaW5nV2luZG93JyxcbiAgICAgIENPTlRFWFRfV0lORE9XX1NJWkU6IHRoaXMud2luZG93U2l6ZS50b1N0cmluZygpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBOdWxsIGNvbnZlcnNhdGlvbiBtYW5hZ2VyIGZvciBzdGF0ZWxlc3MgaW50ZXJhY3Rpb25zLlxuICpcbiAqIERpc2FibGVzIGNvbnZlcnNhdGlvbiBoaXN0b3J5LCB0cmVhdGluZyBlYWNoIG1lc3NhZ2UgYXMgaW5kZXBlbmRlbnQuXG4gKiBVc2VmdWwgZm9yIHN0YXRlbGVzcyB1c2UgY2FzZXMgd2hlcmUgY29udGV4dCBpcyBub3QgbmVlZGVkLlxuICpcbiAqIEBkZXByZWNhdGVkIFRoZSBQeXRob24gaGFuZGxlciBub3cgdXNlcyBTdHJhbmRzLW5hdGl2ZSBjb252ZXJzYXRpb24gbWFuYWdlbWVudC5cbiAqIFRvIGRpc2FibGUgY29udmVyc2F0aW9uIGhpc3RvcnksIG9taXQgdGhlIHNlc3Npb24gYnVja2V0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBOdWxsQ29udmVyc2F0aW9uTWFuYWdlciBpbXBsZW1lbnRzIElDb250ZXh0U3RyYXRlZ3kge1xuICAvKipcbiAgICogR2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgTGFtYmRhIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBlbnZpcm9ubWVudFZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgQ09OVEVYVF9FTkFCTEVEOiAnZmFsc2UnLFxuICAgICAgQ09OVEVYVF9TVFJBVEVHWTogJ051bGwnLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJhdGVneSBpbnRlcmZhY2UgZm9yIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuXG4gKlxuICogQXV0aGVudGljYXRvcnMgY29udHJvbCBob3cgQVBJIGVuZHBvaW50cyBhcmUgc2VjdXJlZC5cbiAqIERpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgc3VwcG9ydCB2YXJpb3VzIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0b3Ige1xuICAvKipcbiAgICogR3JhbnQgYXV0aGVudGljYXRpb24gcGVybWlzc2lvbnMgdG8gYSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqL1xuICBncmFudEF1dGhlbnRpY2F0ZShsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogdm9pZDtcblxuICAvKipcbiAgICogR2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgTGFtYmRhIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBlbnZpcm9ubWVudFZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgQ29nbml0b0F1dGhlbnRpY2F0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0F1dGhlbnRpY2F0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBDb2duaXRvIFVzZXIgUG9vbCBmb3IgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG8tY3JlYXRlZCBVc2VyIFBvb2wgd2l0aCBzZWN1cmUgZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sPzogVXNlclBvb2w7XG5cbiAgLyoqXG4gICAqIENvZ25pdG8gVXNlciBQb29sIENsaWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0by1jcmVhdGVkIGNsaWVudCB3aXRoIGFwcHJvcHJpYXRlIGF1dGggZmxvd3NcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sQ2xpZW50PzogVXNlclBvb2xDbGllbnQ7XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciBDb2duaXRvIHJlc291cmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBDb2duaXRvLWJhc2VkIGF1dGhlbnRpY2F0b3IgZm9yIHNlY3VyaW5nIFJFU1QgQVBJIGVuZHBvaW50cy5cbiAqXG4gKiBDcmVhdGVzIGEgQ29nbml0byBVc2VyIFBvb2wgYW5kIGludGVncmF0ZXMgd2l0aCBBUEkgR2F0ZXdheSBSRVNUIEFQSVxuICogdXNpbmcgdGhlIG5hdGl2ZSBDT0dOSVRPX1VTRVJfUE9PTFMgYXV0aG9yaXplciB0eXBlLiBDbGllbnRzIHNlbmRcbiAqIEpXVCB0b2tlbnMgaW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICpcbiAqICMjIEZlYXR1cmVzXG4gKlxuICogLSAqKk5hdGl2ZSBKV1QgVmFsaWRhdGlvbioqOiBBUEkgR2F0ZXdheSB2YWxpZGF0ZXMgdG9rZW5zIHdpdGhvdXQgY3VzdG9tIExhbWJkYVxuICogLSAqKlVzZXIgTWFuYWdlbWVudCoqOiBCdWlsdC1pbiB1c2VyIHJlZ2lzdHJhdGlvbiBhbmQgbWFuYWdlbWVudFxuICogLSAqKlBhc3N3b3JkIFBvbGljaWVzKio6IEVuZm9yY2VzIHN0cm9uZyBwYXNzd29yZCByZXF1aXJlbWVudHNcbiAqIC0gKipBY2NvdW50IFJlY292ZXJ5Kio6IEVtYWlsLWJhc2VkIGFjY291bnQgcmVjb3ZlcnlcbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG4gKiBpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuICogaW1wb3J0IHsgSW50ZXJhY3RpdmVBZ2VudCwgQ29nbml0b0F1dGhlbnRpY2F0b3IgfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKlxuICogY29uc3QgbXlQcm9tcHQgPSBuZXcgQXNzZXQodGhpcywgJ1Byb21wdCcsIHsgcGF0aDogJy4vcHJvbXB0LnR4dCcgfSk7XG4gKiBjb25zdCBhdXRoZW50aWNhdG9yID0gbmV3IENvZ25pdG9BdXRoZW50aWNhdG9yKHtcbiAqICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU5cbiAqIH0pO1xuICpcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQodGhpcywgJ0FnZW50Jywge1xuICogICBhZ2VudE5hbWU6ICdDaGF0QWdlbnQnLFxuICogICBhZ2VudERlZmluaXRpb246IHsgYmVkcm9ja01vZGVsOiB7fSwgc3lzdGVtUHJvbXB0OiBteVByb21wdCB9LFxuICogICBhdXRoZW50aWNhdG9yXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29nbml0b0F1dGhlbnRpY2F0b3IgaW1wbGVtZW50cyBJQXV0aGVudGljYXRvciB7XG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2wuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2w/OiBVc2VyUG9vbDtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gVXNlciBQb29sIENsaWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbENsaWVudD86IFVzZXJQb29sQ2xpZW50O1xuXG4gIHByaXZhdGUgc2NvcGU/OiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29nbml0b0F1dGhlbnRpY2F0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy51c2VyUG9vbCA9IHByb3BzLnVzZXJQb29sO1xuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSBwcm9wcy51c2VyUG9vbENsaWVudDtcbiAgICB0aGlzLnJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBhdXRoZW50aWNhdGlvbiBwZXJtaXNzaW9ucyB0byBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICogR3JhbnRzIHBlcm1pc3Npb25zIHRvIHZlcmlmeSBDb2duaXRvIHRva2Vucy5cbiAgICovXG4gIGdyYW50QXV0aGVudGljYXRlKGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NvcGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29nbml0b0F1dGhlbnRpY2F0b3IgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgc2NvcGUgYmVmb3JlIGNhbGxpbmcgZ3JhbnRBdXRoZW50aWNhdGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudXNlclBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBQb29sIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgZ3JhbnRpbmcgcGVybWlzc2lvbnMuIENhbGwgX3NldFNjb3BlIGZpcnN0LicpO1xuICAgIH1cblxuICAgIGxhbWJkYUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdjb2duaXRvLWlkcDpHZXRVc2VyJyxcbiAgICAgICAgICAnY29nbml0by1pZHA6QWRtaW5HZXRVc2VyJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy51c2VyUG9vbC51c2VyUG9vbEFybl0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIExhbWJkYSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEFVVEhfVFlQRTogJ0NvZ25pdG8nLFxuICAgICAgVVNFUl9QT09MX0lEOiB0aGlzLnVzZXJQb29sPy51c2VyUG9vbElkIHx8ICcnLFxuICAgICAgVVNFUl9QT09MX0NMSUVOVF9JRDogdGhpcy51c2VyUG9vbENsaWVudD8udXNlclBvb2xDbGllbnRJZCB8fCAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGF1dGhlbnRpY2F0b3Igd2l0aCBhIENESyBzY29wZS5cbiAgICogQ3JlYXRlcyBVc2VyIFBvb2wgYW5kIENsaWVudCBpZiBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9zZXRTY29wZShzY29wZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuXG4gICAgaWYgKCF0aGlzLnVzZXJQb29sKSB7XG4gICAgICAodGhpcyBhcyBhbnkpLnVzZXJQb29sID0gbmV3IFVzZXJQb29sKHNjb3BlLCAnVXNlclBvb2wnLCB7XG4gICAgICAgIHVzZXJQb29sTmFtZTogYCR7U3RhY2sub2Yoc2NvcGUpLnN0YWNrTmFtZX0tVXNlclBvb2xgLFxuICAgICAgICBzZWxmU2lnblVwRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc2lnbkluQWxpYXNlczoge1xuICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgIHVzZXJuYW1lOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhdXRvVmVyaWZ5OiB7XG4gICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHBhc3N3b3JkUG9saWN5OiB7XG4gICAgICAgICAgbWluTGVuZ3RoOiA4LFxuICAgICAgICAgIHJlcXVpcmVMb3dlcmNhc2U6IHRydWUsXG4gICAgICAgICAgcmVxdWlyZVVwcGVyY2FzZTogdHJ1ZSxcbiAgICAgICAgICByZXF1aXJlRGlnaXRzOiB0cnVlLFxuICAgICAgICAgIHJlcXVpcmVTeW1ib2xzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBtZmE6IE1mYS5PUFRJT05BTCxcbiAgICAgICAgbWZhU2Vjb25kRmFjdG9yOiB7XG4gICAgICAgICAgc21zOiB0cnVlLFxuICAgICAgICAgIG90cDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYWNjb3VudFJlY292ZXJ5OiBBY2NvdW50UmVjb3ZlcnkuRU1BSUxfT05MWSxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogdGhpcy5yZW1vdmFsUG9saWN5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnVzZXJQb29sQ2xpZW50ICYmIHRoaXMudXNlclBvb2wpIHtcbiAgICAgICh0aGlzIGFzIGFueSkudXNlclBvb2xDbGllbnQgPSBuZXcgVXNlclBvb2xDbGllbnQoc2NvcGUsICdVc2VyUG9vbENsaWVudCcsIHtcbiAgICAgICAgdXNlclBvb2w6IHRoaXMudXNlclBvb2wsXG4gICAgICAgIHVzZXJQb29sQ2xpZW50TmFtZTogYCR7U3RhY2sub2Yoc2NvcGUpLnN0YWNrTmFtZX0tVXNlclBvb2xDbGllbnRgLFxuICAgICAgICBhdXRoRmxvd3M6IHtcbiAgICAgICAgICB1c2VyUGFzc3dvcmQ6IHRydWUsXG4gICAgICAgICAgdXNlclNycDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVTZWNyZXQ6IGZhbHNlLFxuICAgICAgICBzdXBwb3J0ZWRJZGVudGl0eVByb3ZpZGVyczogW1xuICAgICAgICAgIFVzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlci5DT0dOSVRPLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTm8tYXV0aGVudGljYXRpb24gYXV0aGVudGljYXRvciBmb3IgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcuXG4gKlxuICogRGlzYWJsZXMgYXV0aGVudGljYXRpb24gZW50aXJlbHksIGFsbG93aW5nIGFueSBjbGllbnQgdG8gY29ubmVjdFxuICogd2l0aG91dCBjcmVkZW50aWFscy4gVGhpcyBzaG91bGQgT05MWSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudFxuICogYW5kIHRlc3RpbmcgZW52aXJvbm1lbnRzLlxuICpcbiAqICMjIFNlY3VyaXR5IFdhcm5pbmdcbiAqXG4gKiBUaGlzIGF1dGhlbnRpY2F0b3IgcHJvdmlkZXMgTk8gc2VjdXJpdHkuIE5ldmVyIHVzZSBpbiBwcm9kdWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgTm9BdXRoZW50aWNhdG9yIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0b3Ige1xuICAvKipcbiAgICogTm8tb3AgZm9yIE5vQXV0aGVudGljYXRvciBzaW5jZSBubyBhdXRoZW50aWNhdGlvbiBpcyBwZXJmb3JtZWQuXG4gICAqL1xuICBncmFudEF1dGhlbnRpY2F0ZShfbGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHZvaWQge1xuICAgIC8vIE5vIHBlcm1pc3Npb25zIG5lZWRlZFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIExhbWJkYSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEFVVEhfVFlQRTogJ05vbmUnLFxuICAgIH07XG4gIH1cbn1cblxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcGFzc2VkIHRvIGEgaG9zdGluZyBhZGFwdGVyJ3MgZGVwbG95IG1ldGhvZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2VudEhvc3RpbmdDb25maWcge1xuICAvKiogQ0RLIHNjb3BlIGZvciBjcmVhdGluZyByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIC8qKiBBZ2VudCBuYW1lIGlkZW50aWZpZXIuICovXG4gIHJlYWRvbmx5IGFnZW50TmFtZTogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgZm9yIHRoZSBhZ2VudCBydW50aW1lLiAqL1xuICByZWFkb25seSBhZ2VudFJvbGU6IFJvbGU7XG4gIC8qKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IG9uIHRoZSBydW50aW1lLiAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEtNUyBlbmNyeXB0aW9uIGtleS4gKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogS2V5O1xuICAvKiogT3B0aW9uYWwgVlBDIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgbmV0d29yaz86IE5ldHdvcms7XG4gIC8qKiBMYW1iZGEgYXJjaGl0ZWN0dXJlIChMYW1iZGEgaG9zdGluZyBvbmx5KS4gKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAvKiogTGFtYmRhIG1lbW9yeSBzaXplIGluIE1CIChMYW1iZGEgaG9zdGluZyBvbmx5KS4gKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqIExhbWJkYSB0aW1lb3V0IChMYW1iZGEgaG9zdGluZyBvbmx5KS4gKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuICAvKiogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIChMYW1iZGEgaG9zdGluZyBvbmx5KS4gKi9cbiAgcmVhZG9ubHkgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgLyoqIExhbWJkYSBsYXllcnMgZnJvbSBhZ2VudCBkZWZpbml0aW9uIChMYW1iZGEgaG9zdGluZyBvbmx5KS4gKi9cbiAgcmVhZG9ubHkgbGFtYmRhTGF5ZXJzPzogSUxheWVyVmVyc2lvbltdO1xuICAvKiogTGFtYmRhIGxheWVycyBmcm9tIGtub3dsZWRnZSBiYXNlcyAoTGFtYmRhIGhvc3Rpbmcgb25seSkuICovXG4gIHJlYWRvbmx5IGtub3dsZWRnZUJhc2VMYXllcnM/OiBJTGF5ZXJWZXJzaW9uW107XG4gIC8qKiBXaGV0aGVyIG9ic2VydmFiaWxpdHkgaXMgZW5hYmxlZC4gKi9cbiAgcmVhZG9ubHkgZW5hYmxlT2JzZXJ2YWJpbGl0eT86IGJvb2xlYW47XG4gIC8qKiBBZ2VudCB0b29scyBsb2NhdGlvbiBkZWZpbml0aW9ucyAoSlNPTiBzZXJpYWxpemVkKS4gKi9cbiAgcmVhZG9ubHkgdG9vbHNDb25maWc6IHN0cmluZztcbiAgLyoqIFN5c3RlbSBwcm9tcHQgUzMgYnVja2V0IG5hbWUuICovXG4gIHJlYWRvbmx5IHN5c3RlbVByb21wdEJ1Y2tldDogc3RyaW5nO1xuICAvKiogU3lzdGVtIHByb21wdCBTMyBrZXkuICovXG4gIHJlYWRvbmx5IHN5c3RlbVByb21wdEtleTogc3RyaW5nO1xuICAvKiogS25vd2xlZGdlIGJhc2UgY29uZmlncyAoSlNPTiBzZXJpYWxpemVkKS4gKi9cbiAgcmVhZG9ubHkga25vd2xlZGdlQmFzZUNvbmZpZ3M/OiBzdHJpbmc7XG4gIC8qKiBLbm93bGVkZ2UgYmFzZSBzeXN0ZW0gcHJvbXB0IGFkZGl0aW9uLiAqL1xuICByZWFkb25seSBrbm93bGVkZ2VCYXNlU3lzdGVtUHJvbXB0QWRkaXRpb24/OiBzdHJpbmc7XG4gIC8qKiBSZW1vdmFsIHBvbGljeSBmb3IgcmVzb3VyY2VzLiAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgcmV0dXJuZWQgYnkgYSBob3N0aW5nIGFkYXB0ZXIncyBkZXBsb3kgbWV0aG9kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50SG9zdGluZ1Jlc3VsdCB7XG4gIC8qKiBUaGUgYWdlbnQgZW5kcG9pbnQgVVJMIG9yIEFSTi4gKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcbiAgLyoqIFRoZSBMYW1iZGEgZnVuY3Rpb24gKGlmIExhbWJkYS1ob3N0ZWQpLiAqL1xuICByZWFkb25seSBhZ2VudEZ1bmN0aW9uPzogSUZ1bmN0aW9uO1xuICAvKiogVGhlIEFnZW50Q29yZSBDZm5SdW50aW1lIChpZiBBZ2VudENvcmUtaG9zdGVkKS4gKi9cbiAgcmVhZG9ubHkgY2ZuUnVudGltZT86IENmblJ1bnRpbWU7XG59XG5cbi8qKlxuICogU3RyYXRlZ3kgaW50ZXJmYWNlIGZvciBwbHVnZ2FibGUgaG9zdGluZyBiYWNrZW5kcy5cbiAqXG4gKiBIb3N0aW5nIGFkYXB0ZXJzIGVuY2Fwc3VsYXRlIHRoZSBpbmZyYXN0cnVjdHVyZSBuZWVkZWQgdG8gcnVuIGFuIGFnZW50LlxuICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgYExhbWJkYUhvc3RpbmdBZGFwdGVyYCAoTGFtYmRhICsgTFdBICsgQVBJIEdhdGV3YXkpLlxuICogYEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcmAgcHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgdXNpbmcgQWdlbnRDb3JlIFJ1bnRpbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUhvc3RpbmdBZGFwdGVyIHtcbiAgLyoqXG4gICAqIFRoZSBJQU0gc2VydmljZSBwcmluY2lwYWwgdGhhdCB0aGlzIGhvc3RpbmcgYmFja2VuZCByZXF1aXJlcy5cbiAgICpcbiAgICogQmFzZUFnZW50IHVzZXMgdGhpcyB0byBjcmVhdGUgdGhlIGFnZW50IHJvbGUgd2l0aCB0aGUgY29ycmVjdCB0cnVzdCBwb2xpY3kuXG4gICAqIEZvciBleGFtcGxlLCBMYW1iZGEgaG9zdGluZyByZXF1aXJlcyBgbGFtYmRhLmFtYXpvbmF3cy5jb21gIHdoaWxlIEFnZW50Q29yZVxuICAgKiBob3N0aW5nIHJlcXVpcmVzIGBiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tYC5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VQcmluY2lwYWw6IFNlcnZpY2VQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIERlcGxveSB0aGUgYWdlbnQgaG9zdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBob3N0aW5nXG4gICAqIEByZXR1cm5zIFRoZSBob3N0aW5nIHJlc3VsdCBpbmNsdWRpbmcgZW5kcG9pbnQgYW5kIG9wdGlvbmFsIHJlc291cmNlc1xuICAgKi9cbiAgZGVwbG95KGNvbmZpZzogQWdlbnRIb3N0aW5nQ29uZmlnKTogQWdlbnRIb3N0aW5nUmVzdWx0O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgTGFtYmRhSG9zdGluZ0FkYXB0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhSG9zdGluZ0FkYXB0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBDb21tdW5pY2F0aW9uIGFkYXB0ZXIgZm9yIGNsaWVudC1hZ2VudCBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgU3RyZWFtaW5nSHR0cEFkYXB0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGNvbW11bmljYXRpb25BZGFwdGVyPzogSUNvbW11bmljYXRpb25BZGFwdGVyO1xuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdG9yIGZvciBzZWN1cmluZyBBUEkgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBDb2duaXRvQXV0aGVudGljYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRvcj86IElBdXRoZW50aWNhdG9yO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gbWVtb3J5IHNpemUgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMjRcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbiB0aW1lb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDE1KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gYXJjaGl0ZWN0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcmNoaXRlY3R1cmUuWDg2XzY0XG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIFJlc2VydmVkIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcmVzZXJ2ZWQgY29uY3VycmVuY3lcbiAgICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGFtYmRhIGhvc3RpbmcgYWRhcHRlciBmb3IgSW50ZXJhY3RpdmVBZ2VudC5cbiAqXG4gKiBEZXBsb3lzIHRoZSBhZ2VudCBhcyBhIExhbWJkYSBmdW5jdGlvbiBiZWhpbmQgTGFtYmRhIFdlYiBBZGFwdGVyIGFuZCBBUEkgR2F0ZXdheVxuICogUkVTVCBBUEkgd2l0aCByZXNwb25zZSBzdHJlYW1pbmcuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaG9zdGluZyBiYWNrZW5kLlxuICpcbiAqICMjIEFyY2hpdGVjdHVyZVxuICpcbiAqIGBgYFxuICogQ2xpZW50IOKGkiBQT1NUIC9jaGF0IOKGkiBBUEkgR2F0ZXdheSBSRVNUIEFQSSAoU1RSRUFNKSDihpIgTGFtYmRhIChGYXN0QVBJICsgTFdBKSDihpIgQmVkcm9ja1xuICogQ2xpZW50IOKGkCBTU0Ugc3RyZWFtIOKGkCBBUEkgR2F0ZXdheSDihpAgTGFtYmRhIHJlc3BvbnNlIHN0cmVhbWluZyDihpAgQWdlbnQgdG9rZW5zXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUhvc3RpbmdBZGFwdGVyIGltcGxlbWVudHMgSUhvc3RpbmdBZGFwdGVyIHtcbiAgLyoqIFRoZSBjb21tdW5pY2F0aW9uIGFkYXB0ZXIuICovXG4gIHB1YmxpYyByZWFkb25seSBjb21tdW5pY2F0aW9uQWRhcHRlcj86IElDb21tdW5pY2F0aW9uQWRhcHRlcjtcbiAgLyoqIFRoZSBhdXRoZW50aWNhdG9yLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0aGVudGljYXRvcj86IElBdXRoZW50aWNhdG9yO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IExhbWJkYUhvc3RpbmdBZGFwdGVyUHJvcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IExhbWJkYUhvc3RpbmdBZGFwdGVyUHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuXG4gIGdldCBzZXJ2aWNlUHJpbmNpcGFsKCkgeyByZXR1cm4gbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyk7IH1cblxuICAvKipcbiAgICogRGVwbG95IExhbWJkYSArIExXQSArIEFQSSBHYXRld2F5IGhvc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqL1xuICBkZXBsb3koY29uZmlnOiBBZ2VudEhvc3RpbmdDb25maWcpOiBBZ2VudEhvc3RpbmdSZXN1bHQge1xuICAgIGNvbnN0IHNjb3BlID0gY29uZmlnLnNjb3BlO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhdXRoZW50aWNhdG9yXG4gICAgY29uc3QgYXV0aGVudGljYXRvciA9IHRoaXMucHJvcHMuYXV0aGVudGljYXRvciAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMucHJvcHMuYXV0aGVudGljYXRvclxuICAgICAgOiBuZXcgQ29nbml0b0F1dGhlbnRpY2F0b3IoKTtcbiAgICAodGhpcyBhcyBhbnkpLmF1dGhlbnRpY2F0b3IgPSBhdXRoZW50aWNhdG9yO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0b3IgaW5zdGFuY2VvZiBDb2duaXRvQXV0aGVudGljYXRvcikge1xuICAgICAgYXV0aGVudGljYXRvci5fc2V0U2NvcGUoc2NvcGUpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgY29tbXVuaWNhdGlvbiBhZGFwdGVyXG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMucHJvcHMuY29tbXVuaWNhdGlvbkFkYXB0ZXIgfHwgbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKHtcbiAgICAgIGF1dGhlbnRpY2F0b3IsXG4gICAgfSk7XG4gICAgKHRoaXMgYXMgYW55KS5jb21tdW5pY2F0aW9uQWRhcHRlciA9IGFkYXB0ZXI7XG5cbiAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFN0cmVhbWluZ0h0dHBBZGFwdGVyKSB7XG4gICAgICBhZGFwdGVyLl9zZXRTY29wZShzY29wZSk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLi4uY29uZmlnLmVudmlyb25tZW50LFxuICAgICAgLy8gTGFtYmRhIFdlYiBBZGFwdGVyIGNvbmZpZ3VyYXRpb25cbiAgICAgIEFXU19MQU1CREFfRVhFQ19XUkFQUEVSOiAnL29wdC9ib290c3RyYXAnLFxuICAgICAgQVdTX0xXQV9JTlZPS0VfTU9ERTogJ3Jlc3BvbnNlX3N0cmVhbScsXG4gICAgICBBV1NfTFdBX1JFQURJTkVTU19DSEVDS19QQVRIOiAnL2hlYWx0aCcsXG4gICAgICBBV1NfTFdBX1BPUlQ6ICc4MDgwJyxcbiAgICAgIFBPUlQ6ICc4MDgwJyxcbiAgICAgIC4uLmF1dGhlbnRpY2F0b3IuZW52aXJvbm1lbnRWYXJpYWJsZXMoKSxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIExhbWJkYSBmdW5jdGlvbiB3aXRoIExhbWJkYSBXZWIgQWRhcHRlciBsYXllclxuICAgIGNvbnN0IHsgYWNjb3VudCwgcmVnaW9uIH0gPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdCA9IExhbWJkYUlhbVV0aWxzLmNyZWF0ZUxvZ3NQZXJtaXNzaW9ucyh7XG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgc2NvcGUsXG4gICAgICBmdW5jdGlvbk5hbWU6IGNvbmZpZy5hZ2VudE5hbWUsXG4gICAgICBlbmFibGVPYnNlcnZhYmlsaXR5OiBjb25maWcuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICB9KTtcblxuICAgIC8vIExhbWJkYSBXZWIgQWRhcHRlciBsYXllclxuICAgIGNvbnN0IHdlYkFkYXB0ZXJMYXllciA9IExheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgc2NvcGUsXG4gICAgICAnTGFtYmRhV2ViQWRhcHRlckxheWVyJyxcbiAgICAgIGBhcm46YXdzOmxhbWJkYToke3JlZ2lvbn06NzUzMjQwNTk4MDc1OmxheWVyOkxhbWJkYUFkYXB0ZXJMYXllclg4NjoyNWAsXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbExheWVyczogSUxheWVyVmVyc2lvbltdID0gW3dlYkFkYXB0ZXJMYXllcl07XG4gICAgaWYgKGNvbmZpZy5sYW1iZGFMYXllcnMpIHtcbiAgICAgIGFsbExheWVycy5wdXNoKC4uLmNvbmZpZy5sYW1iZGFMYXllcnMpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmtub3dsZWRnZUJhc2VMYXllcnMgJiYgY29uZmlnLmtub3dsZWRnZUJhc2VMYXllcnMubGVuZ3RoID4gMCkge1xuICAgICAgYWxsTGF5ZXJzLnB1c2goLi4uY29uZmlnLmtub3dsZWRnZUJhc2VMYXllcnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3Jlc291cmNlcy9pbnRlcmFjdGl2ZS1hZ2VudC1oYW5kbGVyJyk7XG5cbiAgICAvLyBBbGwgUHl0aG9uIHZlcnNpb24gcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gRGVmYXVsdFJ1bnRpbWVzLlBZVEhPTlxuICAgIGNvbnN0IHB5dGhvblJ1bnRpbWUgPSBEZWZhdWx0UnVudGltZXMuUFlUSE9OO1xuICAgIGNvbnN0IHB5VmVyc2lvbiA9IHB5dGhvblJ1bnRpbWUubmFtZS5yZXBsYWNlKCdweXRob24nLCAnJyk7IC8vIGUuZy4gXCIzLjEzXCJcblxuICAgIGNvbnN0IGFyY2hpdGVjdHVyZSA9IHRoaXMucHJvcHMuYXJjaGl0ZWN0dXJlIHx8IGNvbmZpZy5hcmNoaXRlY3R1cmUgfHwgQXJjaGl0ZWN0dXJlLlg4Nl82NDtcbiAgICBjb25zdCBtZW1vcnlTaXplID0gdGhpcy5wcm9wcy5tZW1vcnlTaXplIHx8IGNvbmZpZy5tZW1vcnlTaXplIHx8IDEwMjQ7XG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dCB8fCBjb25maWcudGltZW91dCB8fCBEdXJhdGlvbi5taW51dGVzKDE1KTtcbiAgICBjb25zdCByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID0gdGhpcy5wcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID8/IGNvbmZpZy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zO1xuXG4gICAgY29uc3QgYWdlbnRGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihzY29wZSwgJ0ludGVyYWN0aXZlQWdlbnRGdW5jdGlvbicsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC51bmlxdWVGdW5jdGlvbk5hbWUsXG4gICAgICBhcmNoaXRlY3R1cmUsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChoYW5kbGVyUGF0aCwge1xuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIGltYWdlOiBweXRob25SdW50aW1lLmJ1bmRsaW5nSW1hZ2UsXG4gICAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICAgJ2Jhc2gnLCAnLWMnLFxuICAgICAgICAgICAgJ3BpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHQgLXQgL2Fzc2V0LW91dHB1dCAmJiBjcCAtYSAuIC9hc3NldC1vdXRwdXQnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgIHRyeUJ1bmRsZShvdXRwdXREaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICAgICAgICAgIGNvbnN0IHB5dGhvbkNhbmRpZGF0ZXMgPSBbYHB5dGhvbiR7cHlWZXJzaW9ufWAsICdweXRob24zJywgJ3B5dGhvbiddO1xuICAgICAgICAgICAgICAgIGxldCBweXRob25CaW4gPSAncHl0aG9uMyc7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgcHl0aG9uQ2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyID0gcHJvYy5leGVjU3luYyhgJHtjYW5kaWRhdGV9IC0tdmVyc2lvbiAyPiYxYCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdmVyLm1hdGNoKC9QeXRob24gKFxcZCspXFwuKFxcZCspLyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAocGFyc2VJbnQobWF0Y2hbMV0pID4gMyB8fCAocGFyc2VJbnQobWF0Y2hbMV0pID09PSAzICYmIHBhcnNlSW50KG1hdGNoWzJdKSA+PSAxMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcHl0aG9uQmluID0gY2FuZGlkYXRlO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2MuZXhlY1N5bmMoXG4gICAgICAgICAgICAgICAgICBgJHtweXRob25CaW59IC1tIHBpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHQgLXQgXCIke291dHB1dERpcn1cIiAtLXBsYXRmb3JtIG1hbnlsaW51eDIwMTRfeDg2XzY0IC0tb25seS1iaW5hcnk9OmFsbDogLS1weXRob24tdmVyc2lvbiAke3B5VmVyc2lvbn1gLFxuICAgICAgICAgICAgICAgICAgeyBjd2Q6IGhhbmRsZXJQYXRoLCBzdGRpbzogJ2luaGVyaXQnIH0sXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwcm9jLmV4ZWNTeW5jKFxuICAgICAgICAgICAgICAgICAgYGNwIC1yIC4gXCIke291dHB1dERpcn1cImAsXG4gICAgICAgICAgICAgICAgICB7IGN3ZDogaGFuZGxlclBhdGgsIHN0ZGlvOiAnaW5oZXJpdCcgfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogY29uZmlnLmFnZW50Um9sZSxcbiAgICAgIGhhbmRsZXI6ICdydW4uc2gnLFxuICAgICAgcnVudGltZTogcHl0aG9uUnVudGltZSxcbiAgICAgIGxheWVyczogYWxsTGF5ZXJzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZW52aXJvbm1lbnRFbmNyeXB0aW9uOiBjb25maWcuZW5jcnlwdGlvbktleSxcbiAgICAgIHZwYzogY29uZmlnLm5ldHdvcmsgPyBjb25maWcubmV0d29yay52cGMgOiB1bmRlZmluZWQsXG4gICAgICB2cGNTdWJuZXRzOiBjb25maWcubmV0d29yayA/IGNvbmZpZy5uZXR3b3JrLmFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCkgOiB1bmRlZmluZWQsXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgbG9nIHBlcm1pc3Npb25zXG4gICAgZm9yIChjb25zdCBzIG9mIGFnZW50TGFtYmRhTG9nUGVybWlzc2lvbnNSZXN1bHQucG9saWN5U3RhdGVtZW50cykge1xuICAgICAgY29uZmlnLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzKTtcbiAgICB9XG5cbiAgICAvLyBHcmFudCBhdXRoZW50aWNhdG9yIHBlcm1pc3Npb25zXG4gICAgaWYgKGF1dGhlbnRpY2F0b3IpIHtcbiAgICAgIGF1dGhlbnRpY2F0b3IuZ3JhbnRBdXRoZW50aWNhdGUoYWdlbnRGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgLy8gQXR0YWNoIGNvbW11bmljYXRpb24gYWRhcHRlciBhbmQgZ2V0IGVuZHBvaW50XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhZGFwdGVyLmF0dGFjaFRvRnVuY3Rpb24oYWdlbnRGdW5jdGlvbik7XG4gICAgYWRhcHRlci5ncmFudEludm9rZShhZ2VudEZ1bmN0aW9uKTtcblxuICAgIHJldHVybiB7IGVuZHBvaW50LCBhZ2VudEZ1bmN0aW9uIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDdXN0b20gSldUIGF1dGhvcml6ZXIgY29uZmlndXJhdGlvbiBmb3IgQWdlbnRDb3JlIFJ1bnRpbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRDb3JlSnd0QXV0aG9yaXplckNvbmZpZyB7XG4gIC8qKiBPSURDIGRpc2NvdmVyeSBVUkwuICovXG4gIHJlYWRvbmx5IGRpc2NvdmVyeVVybDogc3RyaW5nO1xuICAvKiogQWxsb3dlZCBhdWRpZW5jZXMuICovXG4gIHJlYWRvbmx5IGFsbG93ZWRBdWRpZW5jZT86IHN0cmluZ1tdO1xuICAvKiogQWxsb3dlZCBjbGllbnQgSURzLiAqL1xuICByZWFkb25seSBhbGxvd2VkQ2xpZW50cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlclByb3BzIHtcbiAgLyoqXG4gICAqIEVDUiBjb250YWluZXIgaW1hZ2UgVVJJLiBJZiBub3QgcHJvdmlkZWQsIGJ1aWxkcyBmcm9tIHRoZSBidW5kbGVkIGhhbmRsZXIgc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBCdWlsZHMgZnJvbSBhZ2VudGNvcmUtYWdlbnQtaGFuZGxlciBkaXJlY3RvcnlcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckltYWdlVXJpPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIG1vZGU6ICdQVUJMSUMnIG9yICdWUEMnLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnUFVCTElDJ1xuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya01vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBKV1QgYXV0aG9yaXplciBjb25maWd1cmF0aW9uLlxuICAgKiBPbWl0IGZvciBJQU0tb25seSBhdXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tSnd0QXV0aG9yaXplcj86IEFnZW50Q29yZUp3dEF1dGhvcml6ZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIFByb3RvY29sIGNvbmZpZ3VyYXRpb246ICdIVFRQJyB8ICdNQ1AnIHwgJ0EyQScuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdIVFRQJ1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSdW50aW1lIGVuZHBvaW50IG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG8tZ2VuZXJhdGVkIGZyb20gYWdlbnQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnROYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFnZW50Q29yZSBSdW50aW1lIGhvc3RpbmcgYWRhcHRlciBmb3IgSW50ZXJhY3RpdmVBZ2VudC5cbiAqXG4gKiBEZXBsb3lzIHRoZSBhZ2VudCBhcyBhIGNvbnRhaW5lciBydW5uaW5nIG9uIEFnZW50Q29yZSBSdW50aW1lIChtaWNyb1ZNKS5cbiAqIFVzZXMgTDEgY29uc3RydWN0cyBgQ2ZuUnVudGltZWAgYW5kIGBDZm5SdW50aW1lRW5kcG9pbnRgIGZyb21cbiAqIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAuXG4gKlxuICogIyMgQXJjaGl0ZWN0dXJlXG4gKlxuICogYGBgXG4gKiBDbGllbnQg4oaSIEFnZW50Q29yZSBSdW50aW1lIEVuZHBvaW50IOKGkiBDb250YWluZXIgKEZhc3RBUEkgb24gcG9ydCA4MDgwKSDihpIgQmVkcm9ja1xuICogYGBgXG4gKlxuICogIyMgRmVhdHVyZXNcbiAqXG4gKiAtICoqU2Vzc2lvbiBJc29sYXRpb24qKjogbWljcm9WTSBwcm92aWRlcyBwZXItc2Vzc2lvbiBpc29sYXRpb24gKG5vIFMzIHNlc3Npb24gYnVja2V0IG5lZWRlZClcbiAqIC0gKipNYW5hZ2VkIEluZnJhc3RydWN0dXJlKio6IE5vIExhbWJkYSBjb2xkIHN0YXJ0cyBvciB0aW1lb3V0IGxpbWl0c1xuICogLSAqKk11bHRpcGxlIFByb3RvY29scyoqOiBIVFRQLCBNQ1AsIG9yIEEyQSBwcm90b2NvbCBzdXBwb3J0XG4gKiAtICoqQ29udGFpbmVyLUJhc2VkKio6IFN0YW5kYXJkIERvY2tlciBpbWFnZSBkZXBsb3ltZW50XG4gKlxuICogIyMgVXNhZ2VcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuICogaW1wb3J0IHsgSW50ZXJhY3RpdmVBZ2VudCwgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyIH0gZnJvbSAnQGNka2xhYnMvY2RrLWFwcG1vZC1jYXRhbG9nLWJsdWVwcmludHMnO1xuICpcbiAqIGRlY2xhcmUgY29uc3QgbXlQcm9tcHQ6IEFzc2V0O1xuICpcbiAqIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHRoaXMsICdBZ2VudCcsIHtcbiAqICAgYWdlbnROYW1lOiAnTXlDaGF0Ym90JyxcbiAqICAgYWdlbnREZWZpbml0aW9uOiB7IGJlZHJvY2tNb2RlbDoge30sIHN5c3RlbVByb21wdDogbXlQcm9tcHQgfSxcbiAqICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICogICAgIG5ldHdvcmtNb2RlOiAnUFVCTElDJyxcbiAqICAgfSksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyIGltcGxlbWVudHMgSUhvc3RpbmdBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyUHJvcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlclByb3BzID0ge30pIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBnZXQgc2VydmljZVByaW5jaXBhbCgpIHsgcmV0dXJuIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyk7IH1cblxuICAvKipcbiAgICogRGVwbG95IEFnZW50Q29yZSBSdW50aW1lIGhvc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqL1xuICBkZXBsb3koY29uZmlnOiBBZ2VudEhvc3RpbmdDb25maWcpOiBBZ2VudEhvc3RpbmdSZXN1bHQge1xuICAgIGNvbnN0IHNjb3BlID0gY29uZmlnLnNjb3BlO1xuICAgIGNvbnN0IG5ldHdvcmtNb2RlID0gdGhpcy5wcm9wcy5uZXR3b3JrTW9kZSB8fCAnUFVCTElDJztcblxuICAgIC8vIEJ1aWxkIG9yIHJlZmVyZW5jZSBjb250YWluZXIgaW1hZ2VcbiAgICBsZXQgY29udGFpbmVyVXJpOiBzdHJpbmc7XG4gICAgaWYgKHRoaXMucHJvcHMuY29udGFpbmVySW1hZ2VVcmkpIHtcbiAgICAgIGNvbnRhaW5lclVyaSA9IHRoaXMucHJvcHMuY29udGFpbmVySW1hZ2VVcmk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3Jlc291cmNlcy9hZ2VudGNvcmUtYWdlbnQtaGFuZGxlcicpO1xuICAgICAgY29uc3QgaW1hZ2VBc3NldCA9IG5ldyBEb2NrZXJJbWFnZUFzc2V0KHNjb3BlLCAnQWdlbnRDb3JlSGFuZGxlckltYWdlJywge1xuICAgICAgICBkaXJlY3Rvcnk6IGhhbmRsZXJQYXRoLFxuICAgICAgfSk7XG4gICAgICBjb250YWluZXJVcmkgPSBpbWFnZUFzc2V0LmltYWdlVXJpO1xuICAgIH1cblxuICAgIC8vIFJldXNlIHRoZSBzaW5nbGUgYWdlbnRSb2xlIChhbHJlYWR5IGhhcyBiZWRyb2NrLWFnZW50Y29yZSB0cnVzdCBmcm9tIEJhc2VBZ2VudCkuXG4gICAgLy8gT25seSBhZGQgRUNSIHB1bGwgcGVybWlzc2lvbnMg4oCUIGFsbCBvdGhlciBwZXJtaXNzaW9ucyAoQmVkcm9jayBJbnZva2VNb2RlbCxcbiAgICAvLyBTMyB0b29sIGFzc2V0cywgS0IgYWNjZXNzLCBzZXNzaW9uIGJ1Y2tldCwgb2JzZXJ2YWJpbGl0eSkgYXJlIGFscmVhZHkgZ3JhbnRlZFxuICAgIC8vIGJ5IEJhc2VBZ2VudCBvbiBjb25maWcuYWdlbnRSb2xlLlxuICAgIGNvbnN0IGVjclBvbGljeVJlc3VsdCA9IGNvbmZpZy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJyxcbiAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgLy8gQWRkIEFET1Qgb2JzZXJ2YWJpbGl0eSBwZXJtaXNzaW9ucyB3aGVuIGVuYWJsZWQuXG4gICAgLy8gVGhlIGNvbnRhaW5lciBEb2NrZXJmaWxlIHVzZXMgYG9wZW50ZWxlbWV0cnktaW5zdHJ1bWVudGAgYXMgaXRzIENNRCB3cmFwcGVyO1xuICAgIC8vIEFET1QgbmVlZHMgdGhlc2UgcGVybWlzc2lvbnMgdG8gZXhwb3J0IHRyYWNlcywgbG9ncywgYW5kIG1ldHJpY3MgZnJvbSB0aGUgY29udGFpbmVyLlxuICAgIC8vIE5vdGU6IFdlIHVzZSBleHBsaWNpdCBzdGF0ZW1lbnRzIGluc3RlYWQgb2YgQ2xvdWRXYXRjaExhbWJkYUFwcGxpY2F0aW9uU2lnbmFsc0V4ZWN1dGlvblJvbGVQb2xpY3lcbiAgICAvLyBiZWNhdXNlIHRoYXQgbWFuYWdlZCBwb2xpY3kgb25seSBjb3ZlcnMgL2F3cy9hcHBsaWNhdGlvbi1zaWduYWxzL2RhdGEgbG9nIGdyb3VwXG4gICAgLy8gYW5kIG1pc3NlcyBwZXJtaXNzaW9ucyBBRE9UIG5lZWRzIChEZXNjcmliZUxvZ0dyb3VwcywgRGVzY3JpYmVMb2dTdHJlYW1zLCBQdXRNZXRyaWNEYXRhKS5cbiAgICBpZiAoY29uZmlnLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgIGNvbmZpZy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgICAgICdsb2dzOkRlc2NyaWJlTG9nU3RyZWFtcycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSk7XG4gICAgICBjb25maWcuYWdlbnRSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGEnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGNvbnRhaW5lclxuICAgIGNvbnN0IHsgcmVnaW9uLCBhY2NvdW50IH0gPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgZW52VmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIC8vIFVubGlrZSBMYW1iZGEsIEFnZW50Q29yZSBjb250YWluZXJzIGRvbid0IGdldCBBV1NfUkVHSU9OIGF1dG9tYXRpY2FsbHkuXG4gICAgICAvLyBib3RvMyBhbmQgb3RoZXIgQVdTIFNES3MgbmVlZCBpdCB0byBtYWtlIEFQSSBjYWxscy5cbiAgICAgIEFXU19SRUdJT046IHJlZ2lvbixcbiAgICAgIEFXU19ERUZBVUxUX1JFR0lPTjogcmVnaW9uLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmVudmlyb25tZW50KSkge1xuICAgICAgZW52VmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTm90ZTogQUdFTlRfT0JTRVJWQUJJTElUWV9FTkFCTEVEIGFuZCBPVEVMXyogZW52IHZhcnMgYXJlIE5PVCBzZXQgaGVyZS5cbiAgICAvLyBGb3IgQWdlbnRDb3JlLWhvc3RlZCBhZ2VudHMsIHRoZSBBRE9UIGF1dG8taW5zdHJ1bWVudGF0aW9uIHZpYVxuICAgIC8vIGBvcGVudGVsZW1ldHJ5LWluc3RydW1lbnRgIGluIHRoZSBEb2NrZXJmaWxlIENNRCBoYW5kbGVzIHRyYWNlL3NwYW5cbiAgICAvLyBleHBvcnQgYXV0b21hdGljYWxseS4gVGhlc2UgZW52IHZhcnMgYXJlIG9ubHkgbmVlZGVkIGZvciBhZ2VudHNcbiAgICAvLyBob3N0ZWQgb3V0c2lkZSBvZiBBZ2VudENvcmUuXG5cbiAgICAvLyBCdWlsZCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBuZXR3b3JrQ29uZmlndXJhdGlvbjogYW55ID0ge1xuICAgICAgbmV0d29ya01vZGUsXG4gICAgfTtcblxuICAgIC8vIEJ1aWxkIGF1dGhvcml6YXRpb24gY29uZmlndXJhdGlvbiBpZiBKV1QgYXV0aG9yaXplciBpcyBzcGVjaWZpZWRcbiAgICBjb25zdCBhdXRoQ29uZmlnID0gdGhpcy5wcm9wcy5jdXN0b21Kd3RBdXRob3JpemVyID8ge1xuICAgICAgY3VzdG9tSnd0QXV0aG9yaXplcjoge1xuICAgICAgICBkaXNjb3ZlcnlVcmw6IHRoaXMucHJvcHMuY3VzdG9tSnd0QXV0aG9yaXplci5kaXNjb3ZlcnlVcmwsXG4gICAgICAgIGFsbG93ZWRBdWRpZW5jZTogdGhpcy5wcm9wcy5jdXN0b21Kd3RBdXRob3JpemVyLmFsbG93ZWRBdWRpZW5jZSxcbiAgICAgICAgYWxsb3dlZENsaWVudHM6IHRoaXMucHJvcHMuY3VzdG9tSnd0QXV0aG9yaXplci5hbGxvd2VkQ2xpZW50cyxcbiAgICAgIH0sXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENyZWF0ZSBDZm5SdW50aW1lXG4gICAgY29uc3QgcnVudGltZSA9IG5ldyBDZm5SdW50aW1lKHNjb3BlLCAnQWdlbnRDb3JlUnVudGltZScsIHtcbiAgICAgIGFnZW50UnVudGltZU5hbWU6IGAke2NvbmZpZy5hZ2VudE5hbWUucmVwbGFjZSgvLS9nLCAnXycpfV9ydW50aW1lYCxcbiAgICAgIGFnZW50UnVudGltZUFydGlmYWN0OiB7XG4gICAgICAgIGNvbnRhaW5lckNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb250YWluZXJVcmksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcm9sZUFybjogY29uZmlnLmFnZW50Um9sZS5yb2xlQXJuLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb24sXG4gICAgICBhdXRob3JpemVyQ29uZmlndXJhdGlvbjogYXV0aENvbmZpZyxcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBlbnZWYXJzLFxuICAgIH0pO1xuXG4gICAgcnVudGltZS5hcHBseVJlbW92YWxQb2xpY3koY29uZmlnLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgIC8vIFdoZW4gSldUIGF1dGggaXMgY29uZmlndXJlZCwgYWxsb3dsaXN0IHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBzbyB0aGVcbiAgICAvLyBjb250YWluZXIgY2FuIGV4dHJhY3QgdXNlciBpZGVudGl0eSBjbGFpbXMgZnJvbSB0aGUgZm9yd2FyZGVkIEpXVCB0b2tlbi5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS1vYXV0aC5odG1sI29hdXRoLXByb3BhZ2F0ZS1qd3QtdG9rZW5cbiAgICBpZiAodGhpcy5wcm9wcy5jdXN0b21Kd3RBdXRob3JpemVyKSB7XG4gICAgICBydW50aW1lLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ1JlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uJywge1xuICAgICAgICBSZXF1ZXN0SGVhZGVyQWxsb3dsaXN0OiBbJ0F1dGhvcml6YXRpb24nXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBDZm5SdW50aW1lIHdhaXRzIGZvciB0aGUgcm9sZSBhbmQgaXRzIHBvbGljaWVzIHRvIGJlIGZ1bGx5IGNyZWF0ZWQvdXBkYXRlZC5cbiAgICAvLyBXaXRob3V0IHRoaXMsIENsb3VkRm9ybWF0aW9uIG1heSB2YWxpZGF0ZSB0aGUgcm9sZSBiZWZvcmU6XG4gICAgLy8gLSBUaGUgdHJ1c3QgcG9saWN5IGlzIHVwZGF0ZWQgdG8gYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbSAoZHVyaW5nIHN0YWNrIHVwZGF0ZXMpXG4gICAgLy8gLSBUaGUgRUNSIHBlcm1pc3Npb25zIHBvbGljeSBpcyBhdHRhY2hlZFxuICAgIHJ1bnRpbWUubm9kZS5hZGREZXBlbmRlbmN5KGNvbmZpZy5hZ2VudFJvbGUpO1xuICAgIGlmIChlY3JQb2xpY3lSZXN1bHQucG9saWN5RGVwZW5kYWJsZSkge1xuICAgICAgcnVudGltZS5ub2RlLmFkZERlcGVuZGVuY3koZWNyUG9saWN5UmVzdWx0LnBvbGljeURlcGVuZGFibGUpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBDZm5SdW50aW1lRW5kcG9pbnRcbiAgICBjb25zdCBlbmRwb2ludE5hbWUgPSB0aGlzLnByb3BzLmVuZHBvaW50TmFtZSB8fCBgJHtjb25maWcuYWdlbnROYW1lLnJlcGxhY2UoLy0vZywgJ18nKX1fZW5kcG9pbnRgO1xuICAgIGNvbnN0IHJ1bnRpbWVFbmRwb2ludCA9IG5ldyBDZm5SdW50aW1lRW5kcG9pbnQoc2NvcGUsICdBZ2VudENvcmVSdW50aW1lRW5kcG9pbnQnLCB7XG4gICAgICBhZ2VudFJ1bnRpbWVJZDogcnVudGltZS5yZWYsXG4gICAgICBhZ2VudFJ1bnRpbWVWZXJzaW9uOiBydW50aW1lLmF0dHJBZ2VudFJ1bnRpbWVWZXJzaW9uLFxuICAgICAgbmFtZTogZW5kcG9pbnROYW1lLFxuICAgICAgLi4uKHRoaXMucHJvcHMucHJvdG9jb2xDb25maWd1cmF0aW9uICYmIHtcbiAgICAgICAgcHJvdG9jb2xDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgc2VydmVyUHJvdG9jb2w6IHRoaXMucHJvcHMucHJvdG9jb2xDb25maWd1cmF0aW9uLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgcnVudGltZUVuZHBvaW50LmFwcGx5UmVtb3ZhbFBvbGljeShjb25maWcucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgLy8gQ29uc3RydWN0IHRoZSBmdWxsIGludm9jYXRpb24gVVJMIGZvciBkaXJlY3QgSFRUUFMgYWNjZXNzIChyZXF1aXJlZCBmb3IgSldUIGF1dGgpLlxuICAgIC8vIEZvcm1hdDogaHR0cHM6Ly9iZWRyb2NrLWFnZW50Y29yZS57cmVnaW9ufS5hbWF6b25hd3MuY29tL3J1bnRpbWVzL3tVUkwtZW5jb2RlZC1BUk59L2ludm9jYXRpb25zP3F1YWxpZmllcj17ZW5kcG9pbnROYW1lfVxuICAgIGNvbnN0IGVuY29kZWRBcm4gPSBGbi5qb2luKCcnLCBbXG4gICAgICAnYXJuJTNBYXdzJTNBYmVkcm9jay1hZ2VudGNvcmUlM0EnLFxuICAgICAgcmVnaW9uLFxuICAgICAgJyUzQScsXG4gICAgICBhY2NvdW50LFxuICAgICAgJyUzQXJ1bnRpbWUlMkYnLFxuICAgICAgcnVudGltZS5hdHRyQWdlbnRSdW50aW1lSWQsXG4gICAgXSk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBGbi5qb2luKCcnLCBbXG4gICAgICAnaHR0cHM6Ly9iZWRyb2NrLWFnZW50Y29yZS4nLFxuICAgICAgcmVnaW9uLFxuICAgICAgJy5hbWF6b25hd3MuY29tL3J1bnRpbWVzLycsXG4gICAgICBlbmNvZGVkQXJuLFxuICAgICAgJy9pbnZvY2F0aW9ucz9xdWFsaWZpZXI9JyxcbiAgICAgIGVuZHBvaW50TmFtZSxcbiAgICBdKTtcblxuICAgIHJldHVybiB7IGVuZHBvaW50LCBjZm5SdW50aW1lOiBydW50aW1lIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIEludGVyYWN0aXZlQWdlbnQuXG4gKlxuICogRXh0ZW5kcyBCYXNlQWdlbnRQcm9wcyB3aXRoIGNvbW11bmljYXRpb24sIHNlc3Npb24sIGNvbnRleHQsIGFuZCBhdXRoZW50aWNhdGlvblxuICogc3RyYXRlZ3kgaW50ZXJmYWNlcyBmb3IgYnVpbGRpbmcgcmVhbC10aW1lIGNvbnZlcnNhdGlvbmFsIEFJIGFnZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcmFjdGl2ZUFnZW50UHJvcHMgZXh0ZW5kcyBCYXNlQWdlbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBIb3N0aW5nIGFkYXB0ZXIgZm9yIGRlcGxveWluZyB0aGUgYWdlbnQgcnVudGltZS5cbiAgICpcbiAgICogVXNlIGBMYW1iZGFIb3N0aW5nQWRhcHRlcmAgZm9yIExhbWJkYSArIEFQSSBHYXRld2F5IChkZWZhdWx0KSBvclxuICAgKiBgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyYCBmb3IgQWdlbnRDb3JlIFJ1bnRpbWUgaG9zdGluZy5cbiAgICpcbiAgICogV2hlbiBwcm92aWRlZCwgYGNvbW11bmljYXRpb25BZGFwdGVyYCwgYGF1dGhlbnRpY2F0b3JgLCBgbWVtb3J5U2l6ZWAsXG4gICAqIGB0aW1lb3V0YCwgYGFyY2hpdGVjdHVyZWAsIGFuZCBgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uc2AgcHJvcHNcbiAgICogYXJlIGlnbm9yZWQgKGNvbmZpZ3VyZSB0aGVtIG9uIHRoZSBhZGFwdGVyIGRpcmVjdGx5KS5cbiAgICpcbiAgICogQGRlZmF1bHQgTGFtYmRhSG9zdGluZ0FkYXB0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGhvc3RpbmdBZGFwdGVyPzogSUhvc3RpbmdBZGFwdGVyO1xuICAvKipcbiAgICogQ29tbXVuaWNhdGlvbiBhZGFwdGVyIGZvciBjbGllbnQtYWdlbnQgaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IFN0cmVhbWluZ0h0dHBBZGFwdGVyIHdpdGggQ29nbml0b0F1dGhlbnRpY2F0b3JcbiAgICovXG4gIHJlYWRvbmx5IGNvbW11bmljYXRpb25BZGFwdGVyPzogSUNvbW11bmljYXRpb25BZGFwdGVyO1xuXG4gIC8qKlxuICAgKiBTZXNzaW9uIHN0b3JlIGZvciBwZXJzaXN0aW5nIGNvbnZlcnNhdGlvbiBzdGF0ZS5cbiAgICogU2V0IHRvIHVuZGVmaW5lZCB0byBkaXNhYmxlIHNlc3Npb24gcGVyc2lzdGVuY2UgKHN0YXRlbGVzcyBtb2RlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgUzNTZXNzaW9uTWFuYWdlciB3aXRoIDI0LWhvdXIgVFRMXG4gICAqIEBkZXByZWNhdGVkIFNlc3Npb24gbWFuYWdlbWVudCBpcyBub3cgaGFuZGxlZCBieSBTdHJhbmRzLW5hdGl2ZSBgUzNTZXNzaW9uTWFuYWdlcmAuXG4gICAqIEFuIFMzIGJ1Y2tldCBpcyBhbHdheXMgY3JlYXRlZCBhbmQgcGFzc2VkIGFzIGBTRVNTSU9OX0JVQ0tFVGAgZW52IHZhci5cbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25TdG9yZT86IElTZXNzaW9uU3RvcmU7XG5cbiAgLyoqXG4gICAqIFMzIGJ1Y2tldCBmb3Igc2Vzc2lvbiBzdG9yYWdlIChzaG9ydGhhbmQgZm9yIFMzU2Vzc2lvbk1hbmFnZXIpLlxuICAgKiBJZ25vcmVkIGlmIHNlc3Npb25TdG9yZSBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0by1jcmVhdGVkIGJ1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkJ1Y2tldD86IElCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRpbWUtdG8tbGl2ZSBmb3Igc2Vzc2lvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLmhvdXJzKDI0KVxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvblRUTD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb250ZXh0IHN0cmF0ZWd5IGZvciBjb252ZXJzYXRpb24gaGlzdG9yeSBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlciB3aXRoIDIwIG1lc3NhZ2VzXG4gICAqIEBkZXByZWNhdGVkIENvbnZlcnNhdGlvbiBtYW5hZ2VtZW50IGlzIG5vdyBoYW5kbGVkIGJ5IFN0cmFuZHMtbmF0aXZlXG4gICAqIGBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcmAgaW4gdGhlIFB5dGhvbiBoYW5kbGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dFN0cmF0ZWd5PzogSUNvbnRleHRTdHJhdGVneTtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgdG8ga2VlcCBpbiBjb252ZXJzYXRpb24gaGlzdG9yeS5cbiAgICogU2hvcnRoYW5kIGZvciBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlciB3aW5kb3dTaXplLlxuICAgKiBJZ25vcmVkIGlmIGNvbnRleHRTdHJhdGVneSBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMjBcbiAgICogQGRlcHJlY2F0ZWQgQ29udmVyc2F0aW9uIHdpbmRvd2luZyBpcyBub3cgaGFuZGxlZCBieSBTdHJhbmRzLW5hdGl2ZVxuICAgKiBgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXJgIGluIHRoZSBQeXRob24gaGFuZGxlciAoZGVmYXVsdDogMjApLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZUhpc3RvcnlMaW1pdD86IG51bWJlcjtcblxuICAvKipcbiAgICogQXV0aGVudGljYXRvciBmb3Igc2VjdXJpbmcgQVBJIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgQ29nbml0b0F1dGhlbnRpY2F0b3JcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0b3I/OiBJQXV0aGVudGljYXRvcjtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIG1lbW9yeSBzaXplIGluIE1CLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDI0XG4gICAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gdGltZW91dC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcygxNSlcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIGFyY2hpdGVjdHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBSZXNlcnZlZCBjb25jdXJyZW50IGV4ZWN1dGlvbnMgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIHJlc2VydmVkIGNvbmN1cnJlbmN5XG4gICAqL1xuICByZWFkb25seSByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEludGVyYWN0aXZlIEFnZW50IGZvciByZWFsLXRpbWUgY29udmVyc2F0aW9uYWwgQUkgd2l0aCBTU0Ugc3RyZWFtaW5nLlxuICpcbiAqIENyZWF0ZXMgYSBjb21wbGV0ZSBzZXJ2ZXJsZXNzIGluZnJhc3RydWN0dXJlIGZvciBpbnRlcmFjdGl2ZSBBSSBjb252ZXJzYXRpb25zXG4gKiB1c2luZyBBUEkgR2F0ZXdheSBSRVNUIEFQSSB3aXRoIHJlc3BvbnNlIHN0cmVhbWluZywgTGFtYmRhIFdlYiBBZGFwdGVyLFxuICogRmFzdEFQSSwgYW5kIHN0YW5kYXJkIFN0cmFuZHMgQWdlbnQuXG4gKlxuICogIyMgQXJjaGl0ZWN0dXJlXG4gKlxuICogYGBgXG4gKiBDbGllbnQgKGZldGNoICsgUmVhZGFibGVTdHJlYW0pXG4gKiAgICAg4oaTIFBPU1QgL2NoYXQgKEF1dGhvcml6YXRpb246IEJlYXJlciBKV1QpXG4gKiBBUEkgR2F0ZXdheSBSRVNUIEFQSSAocmVzcG9uc2VUcmFuc2Zlck1vZGU6IFNUUkVBTSlcbiAqICAgICDihpMgSW52b2tlV2l0aFJlc3BvbnNlU3RyZWFtXG4gKiBMYW1iZGEgKFB5dGhvbiArIExhbWJkYSBXZWIgQWRhcHRlciArIEZhc3RBUEkpXG4gKiAgICAg4oaTIHN0cmFuZHMuQWdlbnQgc3RyZWFtaW5nXG4gKiBBbWF6b24gQmVkcm9jayAoQ2xhdWRlKVxuICogYGBgXG4gKlxuICogIyMgRmVhdHVyZXNcbiAqXG4gKiAtICoqU1NFIFN0cmVhbWluZyoqOiBSZWFsLXRpbWUgdG9rZW4tYnktdG9rZW4gcmVzcG9uc2Ugc3RyZWFtaW5nXG4gKiAtICoqMTUtTWludXRlIFRpbWVvdXQqKjogRXh0ZW5kZWQgdGltZW91dCBmb3IgbG9uZyBjb252ZXJzYXRpb25zXG4gKiAtICoqU2Vzc2lvbiBNYW5hZ2VtZW50Kio6IFMzLWJhc2VkIGNvbnZlcnNhdGlvbiBwZXJzaXN0ZW5jZVxuICogLSAqKkNvbnRleHQgV2luZG93aW5nKio6IFNsaWRpbmcgd2luZG93IGNvbnZlcnNhdGlvbiBoaXN0b3J5XG4gKiAtICoqQ29nbml0byBBdXRoKio6IE5hdGl2ZSBKV1QgdmFsaWRhdGlvbiBvbiBSRVNUIEFQSVxuICogLSAqKlN0cmF0ZWd5IEludGVyZmFjZXMqKjogUGx1Z2dhYmxlIGFkYXB0ZXJzIGZvciBhbGwgY29tcG9uZW50c1xuICogLSAqKk9ic2VydmFiaWxpdHkqKjogTGFtYmRhIFBvd2VydG9vbHMgaW50ZWdyYXRpb25cbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG4gKiBpbXBvcnQgeyBJbnRlcmFjdGl2ZUFnZW50IH0gZnJvbSAnQGNka2xhYnMvY2RrLWFwcG1vZC1jYXRhbG9nLWJsdWVwcmludHMnO1xuICpcbiAqIGNvbnN0IHN5c3RlbVByb21wdCA9IG5ldyBBc3NldCh0aGlzLCAnUHJvbXB0JywgeyBwYXRoOiAnLi9wcm9tcHQudHh0JyB9KTtcbiAqXG4gKiBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHRoaXMsICdDaGF0QWdlbnQnLCB7XG4gKiAgIGFnZW50TmFtZTogJ015Q2hhdGJvdCcsXG4gKiAgIGFnZW50RGVmaW5pdGlvbjoge1xuICogICAgIGJlZHJvY2tNb2RlbDogeyB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZTogdHJ1ZSB9LFxuICogICAgIHN5c3RlbVByb21wdDogc3lzdGVtUHJvbXB0LFxuICogICB9LFxuICogfSk7XG4gKlxuICogLy8gQWNjZXNzIG91dHB1dHNcbiAqIGFnZW50LmFwaUVuZHBvaW50OyAgICAgICAvLyBSRVNUIEFQSSBlbmRwb2ludCBVUkxcbiAqIGFnZW50LnNlc3Npb25CdWNrZXQ7ICAgICAvLyBTMyBzZXNzaW9uIGJ1Y2tldFxuICogYWdlbnQuYXV0aGVudGljYXRvcjsgICAgIC8vIENvZ25pdG8gYXV0aGVudGljYXRvciAoZm9yIFVzZXIgUG9vbCBpbmZvKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGl2ZUFnZW50IGV4dGVuZHMgQmFzZUFnZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IGFnZW50RnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBhZGFwdGVyPzogSUNvbW11bmljYXRpb25BZGFwdGVyO1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvblN0b3JlPzogSVNlc3Npb25TdG9yZTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHRTdHJhdGVneT86IElDb250ZXh0U3RyYXRlZ3k7XG4gIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdG9yPzogSUF1dGhlbnRpY2F0b3I7XG4gIHB1YmxpYyByZWFkb25seSBhcGlFbmRwb2ludDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbkJ1Y2tldD86IElCdWNrZXQ7XG4gIHB1YmxpYyByZWFkb25seSBjZm5SdW50aW1lPzogQ2ZuUnVudGltZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW50ZXJhY3RpdmVBZ2VudFByb3BzKSB7XG4gICAgLy8gRGV0ZXJtaW5lIGhvc3RpbmcgYWRhcHRlciBCRUZPUkUgc3VwZXIoKSBzbyB3ZSBjYW4gcGFzcyBpdHMgdHJ1c3QgcHJpbmNpcGFsXG4gICAgY29uc3QgaG9zdGluZ0FkYXB0ZXIgPSBwcm9wcy5ob3N0aW5nQWRhcHRlciB8fCBuZXcgTGFtYmRhSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgY29tbXVuaWNhdGlvbkFkYXB0ZXI6IHByb3BzLmNvbW11bmljYXRpb25BZGFwdGVyLFxuICAgICAgYXV0aGVudGljYXRvcjogcHJvcHMuYXV0aGVudGljYXRvcixcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0LFxuICAgICAgYXJjaGl0ZWN0dXJlOiBwcm9wcy5hcmNoaXRlY3R1cmUsXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgIH0pO1xuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7IC4uLnByb3BzLCBzZXJ2aWNlUHJpbmNpcGFsOiBob3N0aW5nQWRhcHRlci5zZXJ2aWNlUHJpbmNpcGFsIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgcHJvcHNcbiAgICB0aGlzLnZhbGlkYXRlUHJvcHMocHJvcHMpO1xuXG4gICAgY29uc3QgbW9kZWxJZCA9IEJlZHJvY2tNb2RlbFV0aWxzLmRlcml2ZUFjdHVhbE1vZGVsSWQodGhpcy5iZWRyb2NrTW9kZWwpO1xuICAgIGNvbnN0IG1ldHJpY05hbWVzcGFjZSA9IHByb3BzLm1ldHJpY05hbWVzcGFjZSB8fCBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZy5ERUZBVUxUX01FVFJJQ19OQU1FU1BBQ0U7XG4gICAgY29uc3QgbWV0cmljU2VydmljZU5hbWUgPSBwcm9wcy5tZXRyaWNTZXJ2aWNlTmFtZSB8fCBEZWZhdWx0QWdlbnRDb25maWcuREVGQVVMVF9PQlNFUlZBQklMSVRZX01FVFJJQ19TVkNfTkFNRTtcblxuICAgIC8vIEluaXRpYWxpemUgc2Vzc2lvbiBzdG9yZSAoUzMgYnVja2V0IGZvciBTdHJhbmRzLW5hdGl2ZSBTM1Nlc3Npb25NYW5hZ2VyKVxuICAgIGlmIChwcm9wcy5zZXNzaW9uU3RvcmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXNzaW9uU3RvcmUgPSBwcm9wcy5zZXNzaW9uU3RvcmU7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5zZXNzaW9uU3RvcmUgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5zZXNzaW9uQnVja2V0KSB7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yZSA9IG5ldyBTM1Nlc3Npb25NYW5hZ2VyKHRoaXMsICdTZXNzaW9uTWFuYWdlcicsIHtcbiAgICAgICAgYnVja2V0OiBwcm9wcy5zZXNzaW9uQnVja2V0LFxuICAgICAgICBzZXNzaW9uVFRMOiBwcm9wcy5zZXNzaW9uVFRMLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQ6IGNyZWF0ZSBTM1Nlc3Npb25NYW5hZ2VyIChidWNrZXQgdXNlZCBieSBTdHJhbmRzLW5hdGl2ZSBzZXNzaW9uIG1hbmFnZXIpXG4gICAgICB0aGlzLnNlc3Npb25TdG9yZSA9IG5ldyBTM1Nlc3Npb25NYW5hZ2VyKHRoaXMsICdTZXNzaW9uTWFuYWdlcicsIHtcbiAgICAgICAgc2Vzc2lvblRUTDogcHJvcHMuc2Vzc2lvblRUTCxcbiAgICAgICAgZW5jcnlwdGlvbktleTogcHJvcHMuZW5jcnlwdGlvbktleSxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNlc3Npb25CdWNrZXQgPSB0aGlzLnNlc3Npb25TdG9yZT8uc2Vzc2lvbkJ1Y2tldDtcblxuICAgIC8vIENvbnRleHQgc3RyYXRlZ3kgaXMgZGVwcmVjYXRlZCDigJQgU3RyYW5kcy1uYXRpdmUgY29udmVyc2F0aW9uIG1hbmFnZXIgaGFuZGxlcyB0aGlzLlxuICAgIC8vIEtlZXAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYnV0IGRvIG5vdCB1c2UgZW52IHZhcnMuXG4gICAgaWYgKHByb3BzLmNvbnRleHRTdHJhdGVneSkge1xuICAgICAgdGhpcy5jb250ZXh0U3RyYXRlZ3kgPSBwcm9wcy5jb250ZXh0U3RyYXRlZ3k7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGV4dFN0cmF0ZWd5ID0gbmV3IFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyKHtcbiAgICAgICAgd2luZG93U2l6ZTogcHJvcHMubWVzc2FnZUhpc3RvcnlMaW1pdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGJhc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgTU9ERUxfSUQ6IG1vZGVsSWQsXG4gICAgICBTWVNURU1fUFJPTVBUX1MzX0JVQ0tFVF9OQU1FOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzQnVja2V0TmFtZSxcbiAgICAgIFNZU1RFTV9QUk9NUFRfUzNfS0VZOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzT2JqZWN0S2V5LFxuICAgICAgVE9PTFNfQ09ORklHOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zKSxcbiAgICAgIC4uLlBvd2VydG9vbHNDb25maWcuZ2VuZXJhdGVEZWZhdWx0TGFtYmRhQ29uZmlnKFxuICAgICAgICBwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5LFxuICAgICAgICBtZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgIG1ldHJpY1NlcnZpY2VOYW1lLFxuICAgICAgICAnREVCVUcnLFxuICAgICAgKSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIHNlc3Npb24gYnVja2V0IGVudiB2YXIgaWYgc2Vzc2lvbiBzdG9yZSBleGlzdHNcbiAgICBpZiAodGhpcy5zZXNzaW9uQnVja2V0KSB7XG4gICAgICBlbnYuU0VTU0lPTl9CVUNLRVQgPSB0aGlzLnNlc3Npb25CdWNrZXQuYnVja2V0TmFtZTtcbiAgICB9XG5cbiAgICAvLyBBZGQga25vd2xlZGdlIGJhc2UgY29uZmlndXJhdGlvbiBpZiBLQnMgYXJlIGNvbmZpZ3VyZWRcbiAgICBpZiAodGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncy5sZW5ndGggPiAwKSB7XG4gICAgICBlbnYuS05PV0xFREdFX0JBU0VTX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MpO1xuICAgICAgZW52LktOT1dMRURHRV9CQVNFX1NZU1RFTV9QUk9NUFRfQURESVRJT04gPSBnZW5lcmF0ZUtub3dsZWRnZUJhc2VTeXN0ZW1Qcm9tcHRBZGRpdGlvbih0aGlzLmtub3dsZWRnZUJhc2VDb25maWdzKTtcbiAgICB9XG5cbiAgICAvLyBEZXBsb3kgdmlhIGhvc3RpbmcgYWRhcHRlclxuICAgIGNvbnN0IGhvc3RpbmdSZXN1bHQgPSBob3N0aW5nQWRhcHRlci5kZXBsb3koe1xuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICBhZ2VudE5hbWU6IHByb3BzLmFnZW50TmFtZSxcbiAgICAgIGFnZW50Um9sZTogdGhpcy5hZ2VudFJvbGUsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5lbmNyeXB0aW9uS2V5LFxuICAgICAgbmV0d29yazogcHJvcHMubmV0d29yayxcbiAgICAgIGFyY2hpdGVjdHVyZTogcHJvcHMuYXJjaGl0ZWN0dXJlLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQsXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgbGFtYmRhTGF5ZXJzOiBwcm9wcy5hZ2VudERlZmluaXRpb24ubGFtYmRhTGF5ZXJzLFxuICAgICAga25vd2xlZGdlQmFzZUxheWVyczogdGhpcy5rbm93bGVkZ2VCYXNlTGF5ZXJzLFxuICAgICAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICAgIHRvb2xzQ29uZmlnOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zKSxcbiAgICAgIHN5c3RlbVByb21wdEJ1Y2tldDogcHJvcHMuYWdlbnREZWZpbml0aW9uLnN5c3RlbVByb21wdC5zM0J1Y2tldE5hbWUsXG4gICAgICBzeXN0ZW1Qcm9tcHRLZXk6IHByb3BzLmFnZW50RGVmaW5pdGlvbi5zeXN0ZW1Qcm9tcHQuczNPYmplY3RLZXksXG4gICAgICBrbm93bGVkZ2VCYXNlQ29uZmlnczogdGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncy5sZW5ndGggPiAwID8gSlNPTi5zdHJpbmdpZnkodGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncykgOiB1bmRlZmluZWQsXG4gICAgICBrbm93bGVkZ2VCYXNlU3lzdGVtUHJvbXB0QWRkaXRpb246IHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MubGVuZ3RoID4gMFxuICAgICAgICA/IGdlbmVyYXRlS25vd2xlZGdlQmFzZVN5c3RlbVByb21wdEFkZGl0aW9uKHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSxcbiAgICB9KTtcblxuICAgIHRoaXMuYXBpRW5kcG9pbnQgPSBob3N0aW5nUmVzdWx0LmVuZHBvaW50O1xuICAgIHRoaXMuYWdlbnRGdW5jdGlvbiA9IGhvc3RpbmdSZXN1bHQuYWdlbnRGdW5jdGlvbjtcbiAgICB0aGlzLmNmblJ1bnRpbWUgPSBob3N0aW5nUmVzdWx0LmNmblJ1bnRpbWU7XG5cbiAgICAvLyBTZXQgYWRhcHRlciBhbmQgYXV0aGVudGljYXRvciByZWZlcmVuY2VzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKGhvc3RpbmdBZGFwdGVyIGluc3RhbmNlb2YgTGFtYmRhSG9zdGluZ0FkYXB0ZXIpIHtcbiAgICAgIHRoaXMuYWRhcHRlciA9IGhvc3RpbmdBZGFwdGVyLmNvbW11bmljYXRpb25BZGFwdGVyO1xuICAgICAgdGhpcy5hdXRoZW50aWNhdG9yID0gaG9zdGluZ0FkYXB0ZXIuYXV0aGVudGljYXRvcjtcbiAgICB9XG5cbiAgICAvLyBHcmFudCBzeXN0ZW0gcHJvbXB0IHJlYWQgYWNjZXNzXG4gICAgcHJvcHMuYWdlbnREZWZpbml0aW9uLnN5c3RlbVByb21wdC5ncmFudFJlYWQodGhpcy5hZ2VudFJvbGUpO1xuXG4gICAgLy8gR3JhbnQgc2Vzc2lvbiBzdG9yZSBhY2Nlc3NcbiAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmUpIHtcbiAgICAgIGlmICh0aGlzLmFnZW50RnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmUuZ3JhbnRSZWFkV3JpdGUodGhpcy5hZ2VudEZ1bmN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uQnVja2V0KSB7XG4gICAgICAgIC8vIEZvciBBZ2VudENvcmUgaG9zdGluZywgZ3JhbnQgdGhlIGFnZW50IHJvbGUgZGlyZWN0IFMzIGFjY2Vzc1xuICAgICAgICB0aGlzLnNlc3Npb25CdWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5hZ2VudFJvbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgSW50ZXJhY3RpdmVBZ2VudCBwcm9wcy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcyhwcm9wczogSW50ZXJhY3RpdmVBZ2VudFByb3BzKTogdm9pZCB7XG4gICAgaWYgKCFwcm9wcy5hZ2VudE5hbWUgfHwgcHJvcHMuYWdlbnROYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYWdlbnROYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tZW1vcnlTaXplICE9PSB1bmRlZmluZWQgJiYgKHByb3BzLm1lbW9yeVNpemUgPCAxMjggfHwgcHJvcHMubWVtb3J5U2l6ZSA+IDEwMjQwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZW1vcnlTaXplIG11c3QgYmUgYmV0d2VlbiAxMjggYW5kIDEwMjQwIE1CJyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBwcm9wcy50aW1lb3V0LnRvU2Vjb25kcygpO1xuICAgICAgaWYgKHRpbWVvdXRTZWNvbmRzIDwgMSB8fCB0aW1lb3V0U2Vjb25kcyA+IDkwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuIDEgc2Vjb25kIGFuZCAxNSBtaW51dGVzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm1lc3NhZ2VIaXN0b3J5TGltaXQgIT09IHVuZGVmaW5lZCAmJiAocHJvcHMubWVzc2FnZUhpc3RvcnlMaW1pdCA8IDEgfHwgcHJvcHMubWVzc2FnZUhpc3RvcnlMaW1pdCA+IDEwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lc3NhZ2VIaXN0b3J5TGltaXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMDAnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==