@cdklabs/cdk-amazonmq
Version:
<!--BEGIN STABILITY BANNER-->
238 lines • 36.4 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RabbitMqBrokerDeploymentBase = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/*
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
const aws_cdk_lib_1 = require("aws-cdk-lib");
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
const rabbitmq_broker_configuration_1 = require("./rabbitmq-broker-configuration");
const broker_deployment_1 = require("../broker-deployment");
class RabbitMqBrokerDeploymentBase extends broker_deployment_1.BrokerDeploymentBase {
/**
*
* @internal
*/
static _fromRabbitMqBrokerDeploymentBase(scope, logicalId, arn, name, id, securityGroups, urlSuffix) {
if ((name === undefined || id === undefined) && arn === undefined) {
throw new Error("Either the pair 'name' and 'id', or 'arn' needs to be defined");
}
class Import extends aws_cdk_lib_1.Resource {
constructor() {
super(scope, logicalId);
this.connections = securityGroups
? new aws_ec2_1.Connections({ securityGroups })
: undefined;
this._engineVersion = "UNKNOWN";
this.arn = arn
? arn
: aws_cdk_lib_1.Stack.of(this).formatArn({
service: "mq",
resource: "broker",
resourceName: `${name}:${id}`,
arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
});
this.name = name
? name
: aws_cdk_lib_1.Arn.split(arn, aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME).resourceName.split(":")[0];
this.id = id
? id
: aws_cdk_lib_1.Arn.split(arn, aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME).resourceName.split(":")[1];
const self = this;
this.urlSuffix = urlSuffix;
this.endpoints = {
amqp: {
get url() {
if (self.urlSuffix !== undefined) {
return `amqps://${self.id}.mq.${aws_cdk_lib_1.Aws.REGION}.${self.urlSuffix}:5671`;
}
throw new Error("To use the endpoints.amqp.url property of an imported broker urlSuffix needs to be specified on intialization");
},
port: 5671,
},
console: {
get url() {
if (self.urlSuffix !== undefined) {
return `https://${self.id}.mq.${aws_cdk_lib_1.Aws.REGION}.${self.urlSuffix}`;
}
throw new Error("To use the endpoints.console.url property of an imported broker urlSuffix needs to be specified on intialization");
},
port: 443,
},
};
}
metric(metricName, options) {
return new aws_cloudwatch_1.Metric({
namespace: "AWS/AmazonMQ",
metricName,
dimensionsMap: {
Broker: this.id,
},
...options,
});
}
metricExchangeCount(props) {
return this.metric("ExchangeCount", props);
}
metricQueueCount(props) {
return this.metric("QueueCount", props);
}
metricConnectionCount(props) {
return this.metric("ConnectionCount", props);
}
metricChannelCount(props) {
return this.metric("ChannelCount", props);
}
metricConsumerCount(props) {
return this.metric("ConsumerCount", props);
}
metricMessageCount(props) {
return this.metric("MessageCount", props);
}
metricMessageReadyCount(props) {
return this.metric("MessageReadyCount", props);
}
metricMessageUnacknowledgedCount(props) {
return this.metric("MessageUnacknowledgedCount", props);
}
metricPublishRate(props) {
return this.metric("PublishRate", props);
}
metricConfirmRate(props) {
return this.metric("ConfirmRate", props);
}
metricAckRate(props) {
return this.metric("AckRate", props);
}
metricSystemCpuUtilization(props) {
return this.metric("SystemCpuUtilization", props);
}
metricRabbitMQMemLimit(props) {
return this.metric("RabbitMQMemLimit", props);
}
metricRabbitMQMemUsed(props) {
return this.metric("RabbitMQMemUsed", props);
}
metricRabbitMQDiskFreeLimit(props) {
return this.metric("RabbitMQDiskFreeLimit", props);
}
metricRabbitMQDiskFree(props) {
return this.metric("RabbitMQDiskFree", props);
}
metricRabbitMQFdUsed(props) {
return this.metric("RabbitMQFdUsed", props);
}
metricRabbitMQIOReadAverageTime(props) {
return this.metric("RabbitMQIOReadAverageTime", props);
}
metricRabbitMQIOWriteAverageTime(props) {
return this.metric("RabbitMQIOWriteAverageTime", props);
}
}
return new Import();
}
constructor(scope, id, props) {
super(scope, id, {
...props,
version: props.version.toString(),
defaultPort: aws_ec2_1.Port.tcp(5671),
engine: broker_deployment_1.BrokerEngine.RABBITMQ,
users: [
{
username: props.admin.username,
password: props.admin.password.unsafeUnwrap(),
},
],
cloudwatchLogsExports: props.cloudwatchLogsExports,
});
this.endpoints = {
amqp: {
url: aws_cdk_lib_1.Fn.select(0, this._resource.attrAmqpEndpoints),
port: aws_cdk_lib_1.Token.asNumber(aws_cdk_lib_1.Fn.select(2, aws_cdk_lib_1.Fn.split(":", aws_cdk_lib_1.Fn.select(0, this._resource.attrAmqpEndpoints)))),
},
console: {
url: `https:${aws_cdk_lib_1.Fn.select(1, aws_cdk_lib_1.Fn.split(":", aws_cdk_lib_1.Fn.select(0, this._resource.attrAmqpEndpoints)))}`,
port: 443,
},
};
this._configuration =
props.configuration ??
rabbitmq_broker_configuration_1.RabbitMqBrokerConfiguration.fromAttributes(this, "Configuration", {
id: this._resource.attrConfigurationId,
revision: this._resource.attrConfigurationRevision,
});
}
// public withConfiguration(id: string, options: RabbitMqBrokerConfigurationOptions): IRabbitMqBrokerConfiguration {
// const configuration = new RabbitMqBrokerConfiguration(this.node.scope!, id, {
// engineVersion: this.engineVersion,
// ...options,
// });
// this._attachConfiguration(configuration);
// return configuration;
// }
metricExchangeCount(props) {
return this.metric("ExchangeCount", props);
}
metricQueueCount(props) {
return this.metric("QueueCount", props);
}
metricConnectionCount(props) {
return this.metric("ConnectionCount", props);
}
metricChannelCount(props) {
return this.metric("ChannelCount", props);
}
metricConsumerCount(props) {
return this.metric("ConsumerCount", props);
}
metricMessageCount(props) {
return this.metric("MessageCount", props);
}
metricMessageReadyCount(props) {
return this.metric("MessageReadyCount", props);
}
metricMessageUnacknowledgedCount(props) {
return this.metric("MessageUnacknowledgedCount", props);
}
metricPublishRate(props) {
return this.metric("PublishRate", props);
}
metricConfirmRate(props) {
return this.metric("ConfirmRate", props);
}
metricAckRate(props) {
return this.metric("AckRate", props);
}
metricSystemCpuUtilization(props) {
return this.metric("SystemCpuUtilization", props);
}
metricRabbitMQMemLimit(props) {
return this.metric("RabbitMQMemLimit", props);
}
metricRabbitMQMemUsed(props) {
return this.metric("RabbitMQMemUsed", props);
}
metricRabbitMQDiskFreeLimit(props) {
return this.metric("RabbitMQDiskFreeLimit", props);
}
metricRabbitMQDiskFree(props) {
return this.metric("RabbitMQDiskFree", props);
}
metricRabbitMQFdUsed(props) {
return this.metric("RabbitMQFdUsed", props);
}
metricRabbitMQIOReadAverageTime(props) {
return this.metric("RabbitMQIOReadAverageTime", props);
}
metricRabbitMQIOWriteAverageTime(props) {
return this.metric("RabbitMQIOWriteAverageTime", props);
}
}
exports.RabbitMqBrokerDeploymentBase = RabbitMqBrokerDeploymentBase;
_a = JSII_RTTI_SYMBOL_1;
RabbitMqBrokerDeploymentBase[_a] = { fqn: "@cdklabs/cdk-amazonmq.RabbitMqBrokerDeploymentBase", version: "0.1.6" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFiYml0bXEtYnJva2VyLWRlcGxveW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmFiYml0bXEvcmFiYml0bXEtYnJva2VyLWRlcGxveW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7O0VBR0U7QUFDRiw2Q0FBOEU7QUFDOUUsK0RBQW1FO0FBQ25FLGlEQUF3RTtBQUl4RSxtRkFHeUM7QUFHekMsNERBSzhCO0FBcUY5QixNQUFzQiw0QkFDcEIsU0FBUSx3Q0FBb0I7SUFHNUI7OztPQUdHO0lBQ08sTUFBTSxDQUFDLGlDQUFpQyxDQUNoRCxLQUFnQixFQUNoQixTQUFpQixFQUNqQixHQUFZLEVBQ1osSUFBYSxFQUNiLEVBQVcsRUFDWCxjQUFpQyxFQUNqQyxTQUFrQjtRQUVsQixJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxFQUFFLEtBQUssU0FBUyxDQUFDLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELENBQ2hFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxNQUFPLFNBQVEsc0JBQVE7WUFhM0I7Z0JBQ0UsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFQMUIsZ0JBQVcsR0FBNEIsY0FBYztvQkFDbkQsQ0FBQyxDQUFDLElBQUkscUJBQVcsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDO29CQUNyQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUVkLG1CQUFjLEdBQVcsU0FBUyxDQUFDO2dCQUlqQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUc7b0JBQ1osQ0FBQyxDQUFDLEdBQUc7b0JBQ0wsQ0FBQyxDQUFDLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3QkFDdkIsT0FBTyxFQUFFLElBQUk7d0JBQ2IsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFlBQVksRUFBRSxH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QWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLHFCQUFxQixDQUFDLEtBQXFCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sMkJBQTJCLENBQUMsS0FBcUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxLQUFxQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLG9CQUFvQixDQUFDLEtBQXFCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sK0JBQStCLENBQUMsS0FBcUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxnQ0FBZ0MsQ0FBQyxLQUFxQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQzs7QUFwVEgsb0VBcVRDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiovXG5pbXBvcnQgeyBBcm4sIEFybkZvcm1hdCwgQXdzLCBGbiwgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgTWV0cmljLCBNZXRyaWNPcHRpb25zIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoXCI7XG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSVNlY3VyaXR5R3JvdXAsIFBvcnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFkbWluIH0gZnJvbSBcIi4vYWRtaW5cIjtcbmltcG9ydCB7IElSYWJiaXRNcUJyb2tlciB9IGZyb20gXCIuL3JhYmJpdG1xLWJyb2tlclwiO1xuaW1wb3J0IHtcbiAgSVJhYmJpdE1xQnJva2VyQ29uZmlndXJhdGlvbixcbiAgUmFiYml0TXFCcm9rZXJDb25maWd1cmF0aW9uLFxufSBmcm9tIFwiLi9yYWJiaXRtcS1icm9rZXItY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgUmFiYml0TXFCcm9rZXJFbmRwb2ludHMgfSBmcm9tIFwiLi9yYWJiaXRtcS1icm9rZXItZW5kcG9pbnRzXCI7XG5pbXBvcnQgeyBSYWJiaXRNcUJyb2tlckVuZ2luZVZlcnNpb24gfSBmcm9tIFwiLi9yYWJiaXRtcS1icm9rZXItZW5naW5lLXZlcnNpb25cIjtcbmltcG9ydCB7XG4gIEJyb2tlckRlcGxveW1lbnRCYXNlLFxuICBCcm9rZXJFbmdpbmUsXG4gIEJyb2tlckRlcGxveW1lbnRQcm9wcyxcbiAgSUJyb2tlckRlcGxveW1lbnQsXG59IGZyb20gXCIuLi9icm9rZXItZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQnJva2VyRGVwbG95bWVudE1vZGUgfSBmcm9tIFwiLi4vYnJva2VyLWRlcGxveW1lbnQtbW9kZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJhYmJpdE1xQ2xvdWR3YXRjaExvZ3NFeHBvcnRzIHtcbiAgLyoqXG4gICAqIEV4cG9ydCBnZW5lcmFsIGxvZ3MgdG8gQ2xvdWRXYXRjaC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQ7IGRvIG5vdCBleHBvcnQgZ2VuZXJhbCBsb2dzLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJhbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFiYml0TXFCcm9rZXJEZXBsb3ltZW50UHJvcHMgZXh0ZW5kcyBCcm9rZXJEZXBsb3ltZW50UHJvcHMge1xuICAvKipcbiAgICogU2V0cyB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIGJyb2tlciBhZG1pbmlzdHJhdGl2ZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRtaW46IEFkbWluO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2ZXJzaW9uIG9mIHRoZSBicm9rZXIgZW5naW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogUmFiYml0TXFCcm9rZXJFbmdpbmVWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBicm9rZXIuXG4gICAqL1xuICByZWFkb25seSBjb25maWd1cmF0aW9uPzogSVJhYmJpdE1xQnJva2VyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgQ2xvdWRXYXRjaCBsb2dzIGV4cG9ydHMgZm9yIHRoZSBicm9rZXIuXG4gICAqL1xuICByZWFkb25seSBjbG91ZHdhdGNoTG9nc0V4cG9ydHM/OiBSYWJiaXRNcUNsb3Vkd2F0Y2hMb2dzRXhwb3J0cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYWJiaXRNcUJyb2tlckRlcGxveW1lbnRCYXNlUHJvcHNcbiAgZXh0ZW5kcyBSYWJiaXRNcUJyb2tlckRlcGxveW1lbnRQcm9wcyB7XG4gIHJlYWRvbmx5IGRlcGxveW1lbnRNb2RlOiBCcm9rZXJEZXBsb3ltZW50TW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmFiYml0TXFCcm9rZXJEZXBsb3ltZW50IGV4dGVuZHMgSUJyb2tlckRlcGxveW1lbnQge1xuICBtZXRyaWNFeGNoYW5nZUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICBtZXRyaWNRdWV1ZUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICBtZXRyaWNDb25uZWN0aW9uQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIG1ldHJpY0NoYW5uZWxDb3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljQ29uc3VtZXJDb3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljTWVzc2FnZUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICBtZXRyaWNNZXNzYWdlUmVhZHlDb3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljTWVzc2FnZVVuYWNrbm93bGVkZ2VkQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIG1ldHJpY1B1Ymxpc2hSYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICBtZXRyaWNDb25maXJtUmF0ZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljQWNrUmF0ZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljU3lzdGVtQ3B1VXRpbGl6YXRpb24ocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIG1ldHJpY1JhYmJpdE1RTWVtTGltaXQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIG1ldHJpY1JhYmJpdE1RTWVtVXNlZChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljU3lzdGVtQ3B1VXRpbGl6YXRpb24ocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIG1ldHJpY1JhYmJpdE1RTWVtTGltaXQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIG1ldHJpY1JhYmJpdE1RTWVtVXNlZChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljUmFiYml0TVFEaXNrRnJlZUxpbWl0KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICBtZXRyaWNSYWJiaXRNUURpc2tGcmVlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICBtZXRyaWNSYWJiaXRNUUZkVXNlZChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljUmFiYml0TVFJT1JlYWRBdmVyYWdlVGltZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgbWV0cmljUmFiYml0TVFJT1dyaXRlQXZlcmFnZVRpbWUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmFiYml0TXFCcm9rZXJEZXBsb3ltZW50QmFzZVxuICBleHRlbmRzIEJyb2tlckRlcGxveW1lbnRCYXNlXG4gIGltcGxlbWVudHMgSVJhYmJpdE1xQnJva2VyRGVwbG95bWVudCwgSVJhYmJpdE1xQnJva2VyXG57XG4gIC8qKlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgX2Zyb21SYWJiaXRNcUJyb2tlckRlcGxveW1lbnRCYXNlKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbG9naWNhbElkOiBzdHJpbmcsXG4gICAgYXJuPzogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgaWQ/OiBzdHJpbmcsXG4gICAgc2VjdXJpdHlHcm91cHM/OiBJU2VjdXJpdHlHcm91cFtdLFxuICAgIHVybFN1ZmZpeD86IHN0cmluZyxcbiAgKTogSVJhYmJpdE1xQnJva2VyRGVwbG95bWVudCB7XG4gICAgaWYgKChuYW1lID09PSB1bmRlZmluZWQgfHwgaWQgPT09IHVuZGVmaW5lZCkgJiYgYXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFaXRoZXIgdGhlIHBhaXIgJ25hbWUnIGFuZCAnaWQnLCBvciAnYXJuJyBuZWVkcyB0byBiZSBkZWZpbmVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJhYmJpdE1xQnJva2VyRGVwbG95bWVudCB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBhcm46IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnRzOiBSYWJiaXRNcUJyb2tlckVuZHBvaW50cztcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsU3VmZml4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucyB8IHVuZGVmaW5lZCA9IHNlY3VyaXR5R3JvdXBzXG4gICAgICAgID8gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHMgfSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBfYXV0aGVudGljYXRpb25TdHJhdGVneT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIF9lbmdpbmVWZXJzaW9uOiBzdHJpbmcgPSBcIlVOS05PV05cIjtcblxuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBsb2dpY2FsSWQpO1xuICAgICAgICB0aGlzLmFybiA9IGFyblxuICAgICAgICAgID8gYXJuXG4gICAgICAgICAgOiBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgICBzZXJ2aWNlOiBcIm1xXCIsXG4gICAgICAgICAgICAgIHJlc291cmNlOiBcImJyb2tlclwiLFxuICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6IGAke25hbWV9OiR7aWR9YCxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICAgICAgICA/IG5hbWVcbiAgICAgICAgICA6IEFybi5zcGxpdChhcm4hLCBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lIS5zcGxpdChcbiAgICAgICAgICAgICAgXCI6XCIsXG4gICAgICAgICAgICApWzBdO1xuICAgICAgICB0aGlzLmlkID0gaWRcbiAgICAgICAgICA/IGlkXG4gICAgICAgICAgOiBBcm4uc3BsaXQoYXJuISwgQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZSEuc3BsaXQoXG4gICAgICAgICAgICAgIFwiOlwiLFxuICAgICAgICAgICAgKVsxXTtcblxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy51cmxTdWZmaXggPSB1cmxTdWZmaXg7XG5cbiAgICAgICAgdGhpcy5lbmRwb2ludHMgPSB7XG4gICAgICAgICAgYW1xcDoge1xuICAgICAgICAgICAgZ2V0IHVybCgpIHtcbiAgICAgICAgICAgICAgaWYgKHNlbGYudXJsU3VmZml4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYGFtcXBzOi8vJHtzZWxmLmlkfS5tcS4ke0F3cy5SRUdJT059LiR7c2VsZi51cmxTdWZmaXh9OjU2NzFgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRvIHVzZSB0aGUgZW5kcG9pbnRzLmFtcXAudXJsIHByb3BlcnR5IG9mIGFuIGltcG9ydGVkIGJyb2tlciB1cmxTdWZmaXggbmVlZHMgdG8gYmUgc3BlY2lmaWVkIG9uIGludGlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb3J0OiA1NjcxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29uc29sZToge1xuICAgICAgICAgICAgZ2V0IHVybCgpIHtcbiAgICAgICAgICAgICAgaWYgKHNlbGYudXJsU3VmZml4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYGh0dHBzOi8vJHtzZWxmLmlkfS5tcS4ke0F3cy5SRUdJT059LiR7c2VsZi51cmxTdWZmaXh9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUbyB1c2UgdGhlIGVuZHBvaW50cy5jb25zb2xlLnVybCBwcm9wZXJ0eSBvZiBhbiBpbXBvcnRlZCBicm9rZXIgdXJsU3VmZml4IG5lZWRzIHRvIGJlIHNwZWNpZmllZCBvbiBpbnRpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9ydDogNDQzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBvcHRpb25zPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgICAgICBuYW1lc3BhY2U6IFwiQVdTL0FtYXpvbk1RXCIsXG4gICAgICAgICAgbWV0cmljTmFtZSxcbiAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICBCcm9rZXI6IHRoaXMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIG1ldHJpY0V4Y2hhbmdlQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0cmljKFwiRXhjaGFuZ2VDb3VudFwiLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWNRdWV1ZUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlF1ZXVlQ291bnRcIiwgcHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgbWV0cmljQ29ubmVjdGlvbkNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIkNvbm5lY3Rpb25Db3VudFwiLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWNDaGFubmVsQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0cmljKFwiQ2hhbm5lbENvdW50XCIsIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIG1ldHJpY0NvbnN1bWVyQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0cmljKFwiQ29uc3VtZXJDb3VudFwiLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWNNZXNzYWdlQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0cmljKFwiTWVzc2FnZUNvdW50XCIsIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIG1ldHJpY01lc3NhZ2VSZWFkeUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIk1lc3NhZ2VSZWFkeUNvdW50XCIsIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIG1ldHJpY01lc3NhZ2VVbmFja25vd2xlZGdlZENvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIk1lc3NhZ2VVbmFja25vd2xlZGdlZENvdW50XCIsIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIG1ldHJpY1B1Ymxpc2hSYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlB1Ymxpc2hSYXRlXCIsIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIG1ldHJpY0NvbmZpcm1SYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIkNvbmZpcm1SYXRlXCIsIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIG1ldHJpY0Fja1JhdGUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0cmljKFwiQWNrUmF0ZVwiLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWNTeXN0ZW1DcHVVdGlsaXphdGlvbihwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRyaWMoXCJTeXN0ZW1DcHVVdGlsaXphdGlvblwiLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWNSYWJiaXRNUU1lbUxpbWl0KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlJhYmJpdE1RTWVtTGltaXRcIiwgcHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgbWV0cmljUmFiYml0TVFNZW1Vc2VkKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlJhYmJpdE1RTWVtVXNlZFwiLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWNSYWJiaXRNUURpc2tGcmVlTGltaXQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0cmljKFwiUmFiYml0TVFEaXNrRnJlZUxpbWl0XCIsIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIG1ldHJpY1JhYmJpdE1RRGlza0ZyZWUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0cmljKFwiUmFiYml0TVFEaXNrRnJlZVwiLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWNSYWJiaXRNUUZkVXNlZChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRyaWMoXCJSYWJiaXRNUUZkVXNlZFwiLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBtZXRyaWNSYWJiaXRNUUlPUmVhZEF2ZXJhZ2VUaW1lKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlJhYmJpdE1RSU9SZWFkQXZlcmFnZVRpbWVcIiwgcHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgbWV0cmljUmFiYml0TVFJT1dyaXRlQXZlcmFnZVRpbWUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0cmljKFwiUmFiYml0TVFJT1dyaXRlQXZlcmFnZVRpbWVcIiwgcHJvcHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnRzOiBSYWJiaXRNcUJyb2tlckVuZHBvaW50cztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFJhYmJpdE1xQnJva2VyRGVwbG95bWVudEJhc2VQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHZlcnNpb246IHByb3BzLnZlcnNpb24udG9TdHJpbmcoKSxcbiAgICAgIGRlZmF1bHRQb3J0OiBQb3J0LnRjcCg1NjcxKSxcbiAgICAgIGVuZ2luZTogQnJva2VyRW5naW5lLlJBQkJJVE1RLFxuICAgICAgdXNlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJuYW1lOiBwcm9wcy5hZG1pbi51c2VybmFtZSxcbiAgICAgICAgICBwYXNzd29yZDogcHJvcHMuYWRtaW4ucGFzc3dvcmQudW5zYWZlVW53cmFwKCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2xvdWR3YXRjaExvZ3NFeHBvcnRzOiBwcm9wcy5jbG91ZHdhdGNoTG9nc0V4cG9ydHMsXG4gICAgfSk7XG5cbiAgICB0aGlzLmVuZHBvaW50cyA9IHtcbiAgICAgIGFtcXA6IHtcbiAgICAgICAgdXJsOiBGbi5zZWxlY3QoMCwgdGhpcy5fcmVzb3VyY2UuYXR0ckFtcXBFbmRwb2ludHMpLFxuICAgICAgICBwb3J0OiBUb2tlbi5hc051bWJlcihcbiAgICAgICAgICBGbi5zZWxlY3QoXG4gICAgICAgICAgICAyLFxuICAgICAgICAgICAgRm4uc3BsaXQoXCI6XCIsIEZuLnNlbGVjdCgwLCB0aGlzLl9yZXNvdXJjZS5hdHRyQW1xcEVuZHBvaW50cykpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgY29uc29sZToge1xuICAgICAgICB1cmw6IGBodHRwczoke0ZuLnNlbGVjdCgxLCBGbi5zcGxpdChcIjpcIiwgRm4uc2VsZWN0KDAsIHRoaXMuX3Jlc291cmNlLmF0dHJBbXFwRW5kcG9pbnRzKSkpfWAsXG4gICAgICAgIHBvcnQ6IDQ0MyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPVxuICAgICAgcHJvcHMuY29uZmlndXJhdGlvbiA/P1xuICAgICAgUmFiYml0TXFCcm9rZXJDb25maWd1cmF0aW9uLmZyb21BdHRyaWJ1dGVzKHRoaXMsIFwiQ29uZmlndXJhdGlvblwiLCB7XG4gICAgICAgIGlkOiB0aGlzLl9yZXNvdXJjZS5hdHRyQ29uZmlndXJhdGlvbklkLFxuICAgICAgICByZXZpc2lvbjogdGhpcy5fcmVzb3VyY2UuYXR0ckNvbmZpZ3VyYXRpb25SZXZpc2lvbixcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gcHVibGljIHdpdGhDb25maWd1cmF0aW9uKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhYmJpdE1xQnJva2VyQ29uZmlndXJhdGlvbk9wdGlvbnMpOiBJUmFiYml0TXFCcm9rZXJDb25maWd1cmF0aW9uIHtcbiAgLy8gICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IFJhYmJpdE1xQnJva2VyQ29uZmlndXJhdGlvbih0aGlzLm5vZGUuc2NvcGUhLCBpZCwge1xuICAvLyAgICAgZW5naW5lVmVyc2lvbjogdGhpcy5lbmdpbmVWZXJzaW9uLFxuICAvLyAgICAgLi4ub3B0aW9ucyxcbiAgLy8gICB9KTtcblxuICAvLyAgIHRoaXMuX2F0dGFjaENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG5cbiAgLy8gICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgLy8gfVxuXG4gIHB1YmxpYyBtZXRyaWNFeGNoYW5nZUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiRXhjaGFuZ2VDb3VudFwiLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUXVldWVDb3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlF1ZXVlQ291bnRcIiwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Nvbm5lY3Rpb25Db3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIkNvbm5lY3Rpb25Db3VudFwiLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljQ2hhbm5lbENvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiQ2hhbm5lbENvdW50XCIsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNDb25zdW1lckNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiQ29uc3VtZXJDb3VudFwiLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljTWVzc2FnZUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiTWVzc2FnZUNvdW50XCIsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNNZXNzYWdlUmVhZHlDb3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIk1lc3NhZ2VSZWFkeUNvdW50XCIsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNNZXNzYWdlVW5hY2tub3dsZWRnZWRDb3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIk1lc3NhZ2VVbmFja25vd2xlZGdlZENvdW50XCIsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNQdWJsaXNoUmF0ZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlB1Ymxpc2hSYXRlXCIsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNDb25maXJtUmF0ZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIkNvbmZpcm1SYXRlXCIsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNBY2tSYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiQWNrUmF0ZVwiLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljU3lzdGVtQ3B1VXRpbGl6YXRpb24ocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXCJTeXN0ZW1DcHVVdGlsaXphdGlvblwiLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUmFiYml0TVFNZW1MaW1pdChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlJhYmJpdE1RTWVtTGltaXRcIiwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1JhYmJpdE1RTWVtVXNlZChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlJhYmJpdE1RTWVtVXNlZFwiLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUmFiYml0TVFEaXNrRnJlZUxpbWl0KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiUmFiYml0TVFEaXNrRnJlZUxpbWl0XCIsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNSYWJiaXRNUURpc2tGcmVlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiUmFiYml0TVFEaXNrRnJlZVwiLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUmFiYml0TVFGZFVzZWQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXCJSYWJiaXRNUUZkVXNlZFwiLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUmFiYml0TVFJT1JlYWRBdmVyYWdlVGltZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlJhYmJpdE1RSU9SZWFkQXZlcmFnZVRpbWVcIiwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1JhYmJpdE1RSU9Xcml0ZUF2ZXJhZ2VUaW1lKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiUmFiYml0TVFJT1dyaXRlQXZlcmFnZVRpbWVcIiwgcHJvcHMpO1xuICB9XG59XG4iXX0=