@cdklabs/cdk-amazonmq
Version:
<!--BEGIN STABILITY BANNER-->
112 lines • 19.6 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActiveMqBrokerInstance = 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 activemq_broker_deployment_1 = require("./activemq-broker-deployment");
const broker_deployment_mode_1 = require("../broker-deployment-mode");
/**
* A representation of a single-instance broker comprised of one broker in one Availability Zone.
*
* Additional optimizations:
* - When subnet selection returns more then 1 subnets. A first one is picked. Warning is annotated
*
*
* see: https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/single-broker-deployment.html
*/
class ActiveMqBrokerInstance extends activemq_broker_deployment_1.ActiveMqBrokerDeploymentBase {
/**
* Reference an existing ActiveMQ Broker Instance, defined outside of the CDK code, by ARN.
*
* @param scope
* @param logicalId the construct's logical ID
* @param arn the ARN of the existing ActiveMQ Broker Instance that is imported
* @param securityGroups optionally pass security groups for working with network connections
* @returns a representation of the ActiveMQ Broker Instance
*/
static fromActiveMqBrokerInstanceArn(scope, logicalId, arn, securityGroups) {
return ActiveMqBrokerInstance._assignEndpoints(ActiveMqBrokerInstance._fromActiveMqBrokerDeploymentAttributes(scope, logicalId, arn, undefined, undefined, securityGroups));
}
/**
* Reference an existing ActiveMQ Broker Instance, defined outside of the CDK code, by its name and id.
*
* @param scope
* @param logicalId
* @param name the name of the existing ActiveMQ Broker Instance to be imported
* @param id the ID of the existing ActiveMQ Broker Instance to be imported
* @param securityGroups (optional) pass security groups for working with network connections
* @returns a representation of the ActiveMQ Broker Instance
*/
static fromActiveMqBrokerInstanceNameAndId(scope, logicalId, name, id, securityGroups) {
return ActiveMqBrokerInstance._assignEndpoints(ActiveMqBrokerInstance._fromActiveMqBrokerDeploymentAttributes(scope, logicalId, undefined, name, id, securityGroups));
}
/**
*
* @internal
*/
static _assignEndpoints(imported) {
return Object.assign(imported, ActiveMqBrokerInstance._buildActiveMqBroker(imported));
}
constructor(scope, id, props) {
let subnetSelection = props.vpcSubnets;
// This flag is used to determine if a annotation needs to be done
const annotationWarnings = [];
// check if subnet selection has been specified
if (props.vpcSubnets && props.vpc) {
const subnets = props.vpc?.selectSubnets(props.vpcSubnets);
// if selection is valid for a vpc
if (subnets) {
// single instance allows only one subnet take the first one
subnetSelection = { subnets: [subnets.subnets[0]] };
if (subnets.subnets.length > 1)
// Annotate the fact of taking first one when more then one were selected
annotationWarnings.push(`Exactly 1 subnet in [SINGLE_INSTANCE] deployment mode is needed. vpcSubnets selection returned ${subnets.subnets.length}. Taking first one from the selection`);
}
}
super(scope, id, {
...props,
vpcSubnets: subnetSelection,
deploymentMode: broker_deployment_mode_1.BrokerDeploymentMode.SINGLE_INSTANCE,
});
// Provide Annotation to the resource.
if (annotationWarnings.length > 0) {
annotationWarnings.forEach((msg) => aws_cdk_lib_1.Annotations.of(this).addWarning(msg));
}
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)))),
},
stomp: {
url: aws_cdk_lib_1.Fn.select(0, this._resource.attrStompEndpoints),
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.attrStompEndpoints)))),
},
openWire: {
url: aws_cdk_lib_1.Fn.select(0, this._resource.attrOpenWireEndpoints),
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.attrOpenWireEndpoints)))),
},
mqtt: {
url: aws_cdk_lib_1.Fn.select(0, this._resource.attrMqttEndpoints),
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.attrMqttEndpoints)))),
},
wss: {
url: aws_cdk_lib_1.Fn.select(0, this._resource.attrWssEndpoints),
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.attrWssEndpoints)))),
},
console: {
url: `https://${this.id}.mq.${aws_cdk_lib_1.Aws.REGION}.${aws_cdk_lib_1.Aws.URL_SUFFIX}:8162`,
port: 8162,
},
};
this.ipAddress = aws_cdk_lib_1.Fn.select(0, this._resource.attrIpAddresses);
}
}
exports.ActiveMqBrokerInstance = ActiveMqBrokerInstance;
_a = JSII_RTTI_SYMBOL_1;
ActiveMqBrokerInstance[_a] = { fqn: "@cdklabs/cdk-amazonmq.ActiveMqBrokerInstance", version: "0.1.6" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlbXEtYnJva2VyLWluc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGl2ZW1xL2FjdGl2ZW1xLWJyb2tlci1pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7RUFHRTtBQUNGLDZDQUEwRDtBQUkxRCw2RUFJc0M7QUFFdEMsc0VBQWlFO0FBZ0JqRTs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsc0JBQ1gsU0FBUSx5REFBNEI7SUFHcEM7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsNkJBQTZCLENBQ3pDLEtBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLEdBQVcsRUFDWCxjQUFpQztRQUVqQyxPQUFPLHNCQUFzQixDQUFDLGdCQUFnQixDQUM1QyxzQkFBc0IsQ0FBQyx1Q0FBdUMsQ0FDNUQsS0FBSyxFQUNMLFNBQVMsRUFDVCxHQUFHLEVBQ0gsU0FBUyxFQUNULFNBQVMsRUFDVCxjQUFjLENBQ2YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FDL0MsS0FBZ0IsRUFDaEIsU0FBaUIsRUFDakIsSUFBWSxFQUNaLEVBQVUsRUFDVixjQUFpQztRQUVqQyxPQUFPLHNCQUFzQixDQUFDLGdCQUFnQixDQUM1QyxzQkFBc0IsQ0FBQyx1Q0FBdUMsQ0FDNUQsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxFQUNKLEVBQUUsRUFDRixjQUFjLENBQ2YsQ0FDeUIsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLGdCQUFnQixDQUM3QixRQUFtQztRQUVuQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLFFBQVEsRUFDUixzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FDdEQsQ0FBQztJQUNKLENBQUM7SUFjRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFrQztR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QUksRUFBRSxtQkFBSyxDQUFDLFFBQVEsQ0FDbEIsZ0JBQUUsQ0FBQyxNQUFNLENBQ1AsQ0FBQyxFQUNELGdCQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxnQkFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQzlELENBQ0Y7YUFDRjtZQUNELEdBQUcsRUFBRTtnQkFDSCxHQUFHLEVBQUUsZ0JBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2xELElBQUksRUFBRSxtQkFBSyxDQUFDLFFBQVEsQ0FDbEIsZ0JBQUUsQ0FBQyxNQUFNLENBQ1AsQ0FBQyxFQUNELGdCQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxnQkFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQzdELENBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsV0FBVyxJQUFJLENBQUMsRUFBRSxPQUFPLGlCQUFHLENBQUMsTUFBTSxJQUFJLGlCQUFHLENBQUMsVUFBVSxPQUFPO2dCQUNqRSxJQUFJLEVBQUUsSUFBSTthQUNYO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEUsQ0FBQzs7QUFoTEgsd0RBaUxDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiovXG5pbXBvcnQgeyBBd3MsIEZuLCBUb2tlbiwgQW5ub3RhdGlvbnMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElTZWN1cml0eUdyb3VwIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJQWN0aXZlTXFCcm9rZXIgfSBmcm9tIFwiLi9hY3RpdmVtcS1icm9rZXJcIjtcbmltcG9ydCB7XG4gIEFjdGl2ZU1xQnJva2VyRGVwbG95bWVudEJhc2UsXG4gIEFjdGl2ZU1xQnJva2VyRGVwbG95bWVudFByb3BzLFxuICBJQWN0aXZlTXFCcm9rZXJEZXBsb3ltZW50LFxufSBmcm9tIFwiLi9hY3RpdmVtcS1icm9rZXItZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQWN0aXZlTXFCcm9rZXJFbmRwb2ludHMgfSBmcm9tIFwiLi9hY3RpdmVtcS1icm9rZXItZW5kcG9pbnRzXCI7XG5pbXBvcnQgeyBCcm9rZXJEZXBsb3ltZW50TW9kZSB9IGZyb20gXCIuLi9icm9rZXItZGVwbG95bWVudC1tb2RlXCI7XG5pbXBvcnQgeyBTdG9yYWdlVHlwZSB9IGZyb20gXCIuLi9zdG9yYWdlLXR5cGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZlTXFCcm9rZXJJbnN0YW5jZVxuICBleHRlbmRzIElBY3RpdmVNcUJyb2tlckRlcGxveW1lbnQsXG4gICAgSUFjdGl2ZU1xQnJva2VyIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlTXFCcm9rZXJJbnN0YW5jZVByb3BzXG4gIGV4dGVuZHMgQWN0aXZlTXFCcm9rZXJEZXBsb3ltZW50UHJvcHMge1xuICAvKipcbiAgICogU2V0cyB0aGUgc3RvcmFnZSB0eXBlIG9mIHRoZSBBbWF6b24gTVEgZm9yIEFjdGl2ZU1RIGJyb2tlci5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQ7IEVGUyB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlVHlwZT86IFN0b3JhZ2VUeXBlO1xufVxuXG4vKipcbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUtaW5zdGFuY2UgYnJva2VyIGNvbXByaXNlZCBvZiBvbmUgYnJva2VyIGluIG9uZSBBdmFpbGFiaWxpdHkgWm9uZS5cbiAqXG4gKiBBZGRpdGlvbmFsIG9wdGltaXphdGlvbnM6XG4gKiAtIFdoZW4gc3VibmV0IHNlbGVjdGlvbiByZXR1cm5zIG1vcmUgdGhlbiAxIHN1Ym5ldHMuIEEgZmlyc3Qgb25lIGlzIHBpY2tlZC4gV2FybmluZyBpcyBhbm5vdGF0ZWRcbiAqXG4gKlxuICogc2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uLW1xL2xhdGVzdC9kZXZlbG9wZXItZ3VpZGUvc2luZ2xlLWJyb2tlci1kZXBsb3ltZW50Lmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2ZU1xQnJva2VySW5zdGFuY2VcbiAgZXh0ZW5kcyBBY3RpdmVNcUJyb2tlckRlcGxveW1lbnRCYXNlXG4gIGltcGxlbWVudHMgSUFjdGl2ZU1xQnJva2VySW5zdGFuY2VcbntcbiAgLyoqXG4gICAqIFJlZmVyZW5jZSBhbiBleGlzdGluZyBBY3RpdmVNUSBCcm9rZXIgSW5zdGFuY2UsIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgQ0RLIGNvZGUsIGJ5IEFSTi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBsb2dpY2FsSWQgdGhlIGNvbnN0cnVjdCdzIGxvZ2ljYWwgSURcbiAgICogQHBhcmFtIGFybiB0aGUgQVJOIG9mIHRoZSBleGlzdGluZyBBY3RpdmVNUSBCcm9rZXIgSW5zdGFuY2UgdGhhdCBpcyBpbXBvcnRlZFxuICAgKiBAcGFyYW0gc2VjdXJpdHlHcm91cHMgb3B0aW9uYWxseSBwYXNzIHNlY3VyaXR5IGdyb3VwcyBmb3Igd29ya2luZyB3aXRoIG5ldHdvcmsgY29ubmVjdGlvbnNcbiAgICogQHJldHVybnMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQWN0aXZlTVEgQnJva2VyIEluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21BY3RpdmVNcUJyb2tlckluc3RhbmNlQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbG9naWNhbElkOiBzdHJpbmcsXG4gICAgYXJuOiBzdHJpbmcsXG4gICAgc2VjdXJpdHlHcm91cHM/OiBJU2VjdXJpdHlHcm91cFtdLFxuICApOiBJQWN0aXZlTXFCcm9rZXJJbnN0YW5jZSB7XG4gICAgcmV0dXJuIEFjdGl2ZU1xQnJva2VySW5zdGFuY2UuX2Fzc2lnbkVuZHBvaW50cyhcbiAgICAgIEFjdGl2ZU1xQnJva2VySW5zdGFuY2UuX2Zyb21BY3RpdmVNcUJyb2tlckRlcGxveW1lbnRBdHRyaWJ1dGVzKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbG9naWNhbElkLFxuICAgICAgICBhcm4sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBzZWN1cml0eUdyb3VwcyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgYW4gZXhpc3RpbmcgQWN0aXZlTVEgQnJva2VyIEluc3RhbmNlLCBkZWZpbmVkIG91dHNpZGUgb2YgdGhlIENESyBjb2RlLCBieSBpdHMgbmFtZSBhbmQgaWQuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbG9naWNhbElkXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBleGlzdGluZyBBY3RpdmVNUSBCcm9rZXIgSW5zdGFuY2UgdG8gYmUgaW1wb3J0ZWRcbiAgICogQHBhcmFtIGlkIHRoZSBJRCBvZiB0aGUgZXhpc3RpbmcgQWN0aXZlTVEgQnJva2VyIEluc3RhbmNlIHRvIGJlIGltcG9ydGVkXG4gICAqIEBwYXJhbSBzZWN1cml0eUdyb3VwcyAob3B0aW9uYWwpIHBhc3Mgc2VjdXJpdHkgZ3JvdXBzIGZvciB3b3JraW5nIHdpdGggbmV0d29yayBjb25uZWN0aW9uc1xuICAgKiBAcmV0dXJucyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBBY3RpdmVNUSBCcm9rZXIgSW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFjdGl2ZU1xQnJva2VySW5zdGFuY2VOYW1lQW5kSWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzZWN1cml0eUdyb3Vwcz86IElTZWN1cml0eUdyb3VwW10sXG4gICkge1xuICAgIHJldHVybiBBY3RpdmVNcUJyb2tlckluc3RhbmNlLl9hc3NpZ25FbmRwb2ludHMoXG4gICAgICBBY3RpdmVNcUJyb2tlckluc3RhbmNlLl9mcm9tQWN0aXZlTXFCcm9rZXJEZXBsb3ltZW50QXR0cmlidXRlcyhcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBuYW1lLFxuICAgICAgICBpZCxcbiAgICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICApLFxuICAgICkgYXMgSUFjdGl2ZU1xQnJva2VySW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfYXNzaWduRW5kcG9pbnRzKFxuICAgIGltcG9ydGVkOiBJQWN0aXZlTXFCcm9rZXJEZXBsb3ltZW50LFxuICApOiBJQWN0aXZlTXFCcm9rZXJJbnN0YW5jZSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgICBpbXBvcnRlZCxcbiAgICAgIEFjdGl2ZU1xQnJva2VySW5zdGFuY2UuX2J1aWxkQWN0aXZlTXFCcm9rZXIoaW1wb3J0ZWQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgRU5JIG9mIHRoZSBBbWF6b24gTVEgZm9yIEFjdGl2ZU1RIGJyb2tlci5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhdmFpbGFibGUgZW5kcG9pbnRzIG9mIHRoZSBBbWF6b24gTVEgZm9yIEFjdGl2ZU1RIGJyb2tlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbmRwb2ludHM6IEFjdGl2ZU1xQnJva2VyRW5kcG9pbnRzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWN0aXZlTXFCcm9rZXJJbnN0YW5jZVByb3BzLFxuICApIHtcbiAgICBsZXQgc3VibmV0U2VsZWN0aW9uID0gcHJvcHMudnBjU3VibmV0cztcblxuICAgIC8vIFRoaXMgZmxhZyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGFubm90YXRpb24gbmVlZHMgdG8gYmUgZG9uZVxuICAgIGNvbnN0IGFubm90YXRpb25XYXJuaW5ncyA9IFtdO1xuXG4gICAgLy8gY2hlY2sgaWYgc3VibmV0IHNlbGVjdGlvbiBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICBpZiAocHJvcHMudnBjU3VibmV0cyAmJiBwcm9wcy52cGMpIHtcbiAgICAgIGNvbnN0IHN1Ym5ldHMgPSBwcm9wcy52cGM/LnNlbGVjdFN1Ym5ldHMocHJvcHMudnBjU3VibmV0cyk7XG5cbiAgICAgIC8vIGlmIHNlbGVjdGlvbiBpcyB2YWxpZCBmb3IgYSB2cGNcbiAgICAgIGlmIChzdWJuZXRzKSB7XG4gICAgICAgIC8vIHNpbmdsZSBpbnN0YW5jZSBhbGxvd3Mgb25seSBvbmUgc3VibmV0IHRha2UgdGhlIGZpcnN0IG9uZVxuICAgICAgICBzdWJuZXRTZWxlY3Rpb24gPSB7IHN1Ym5ldHM6IFtzdWJuZXRzLnN1Ym5ldHNbMF1dIH07XG5cbiAgICAgICAgaWYgKHN1Ym5ldHMuc3VibmV0cy5sZW5ndGggPiAxKVxuICAgICAgICAgIC8vIEFubm90YXRlIHRoZSBmYWN0IG9mIHRha2luZyBmaXJzdCBvbmUgd2hlbiBtb3JlIHRoZW4gb25lIHdlcmUgc2VsZWN0ZWRcbiAgICAgICAgICBhbm5vdGF0aW9uV2FybmluZ3MucHVzaChcbiAgICAgICAgICAgIGBFeGFjdGx5IDEgc3VibmV0IGluIFtTSU5HTEVfSU5TVEFOQ0VdIGRlcGxveW1lbnQgbW9kZSBpcyBuZWVkZWQuIHZwY1N1Ym5ldHMgc2VsZWN0aW9uIHJldHVybmVkICR7c3VibmV0cy5zdWJuZXRzLmxlbmd0aH0uIFRha2luZyBmaXJzdCBvbmUgZnJvbSB0aGUgc2VsZWN0aW9uYCxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2cGNTdWJuZXRzOiBzdWJuZXRTZWxlY3Rpb24sXG4gICAgICBkZXBsb3ltZW50TW9kZTogQnJva2VyRGVwbG95bWVudE1vZGUuU0lOR0xFX0lOU1RBTkNFLFxuICAgIH0pO1xuXG4gICAgLy8gUHJvdmlkZSBBbm5vdGF0aW9uIHRvIHRoZSByZXNvdXJjZS5cbiAgICBpZiAoYW5ub3RhdGlvbldhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFubm90YXRpb25XYXJuaW5ncy5mb3JFYWNoKChtc2cpID0+IEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcobXNnKSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbmRwb2ludHMgPSB7XG4gICAgICBhbXFwOiB7XG4gICAgICAgIHVybDogRm4uc2VsZWN0KDAsIHRoaXMuX3Jlc291cmNlLmF0dHJBbXFwRW5kcG9pbnRzKSxcbiAgICAgICAgcG9ydDogVG9rZW4uYXNOdW1iZXIoXG4gICAgICAgICAgRm4uc2VsZWN0KFxuICAgICAgICAgICAgMixcbiAgICAgICAgICAgIEZuLnNwbGl0KFwiOlwiLCBGbi5zZWxlY3QoMCwgdGhpcy5fcmVzb3VyY2UuYXR0ckFtcXBFbmRwb2ludHMpKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHN0b21wOiB7XG4gICAgICAgIHVybDogRm4uc2VsZWN0KDAsIHRoaXMuX3Jlc291cmNlLmF0dHJTdG9tcEVuZHBvaW50cyksXG4gICAgICAgIHBvcnQ6IFRva2VuLmFzTnVtYmVyKFxuICAgICAgICAgIEZuLnNlbGVjdChcbiAgICAgICAgICAgIDIsXG4gICAgICAgICAgICBGbi5zcGxpdChcIjpcIiwgRm4uc2VsZWN0KDAsIHRoaXMuX3Jlc291cmNlLmF0dHJTdG9tcEVuZHBvaW50cykpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgb3BlbldpcmU6IHtcbiAgICAgICAgdXJsOiBGbi5zZWxlY3QoMCwgdGhpcy5fcmVzb3VyY2UuYXR0ck9wZW5XaXJlRW5kcG9pbnRzKSxcbiAgICAgICAgcG9ydDogVG9rZW4uYXNOdW1iZXIoXG4gICAgICAgICAgRm4uc2VsZWN0KFxuICAgICAgICAgICAgMixcbiAgICAgICAgICAgIEZuLnNwbGl0KFwiOlwiLCBGbi5zZWxlY3QoMCwgdGhpcy5fcmVzb3VyY2UuYXR0ck9wZW5XaXJlRW5kcG9pbnRzKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBtcXR0OiB7XG4gICAgICAgIHVybDogRm4uc2VsZWN0KDAsIHRoaXMuX3Jlc291cmNlLmF0dHJNcXR0RW5kcG9pbnRzKSxcbiAgICAgICAgcG9ydDogVG9rZW4uYXNOdW1iZXIoXG4gICAgICAgICAgRm4uc2VsZWN0KFxuICAgICAgICAgICAgMixcbiAgICAgICAgICAgIEZuLnNwbGl0KFwiOlwiLCBGbi5zZWxlY3QoMCwgdGhpcy5fcmVzb3VyY2UuYXR0ck1xdHRFbmRwb2ludHMpKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHdzczoge1xuICAgICAgICB1cmw6IEZuLnNlbGVjdCgwLCB0aGlzLl9yZXNvdXJjZS5hdHRyV3NzRW5kcG9pbnRzKSxcbiAgICAgICAgcG9ydDogVG9rZW4uYXNOdW1iZXIoXG4gICAgICAgICAgRm4uc2VsZWN0KFxuICAgICAgICAgICAgMixcbiAgICAgICAgICAgIEZuLnNwbGl0KFwiOlwiLCBGbi5zZWxlY3QoMCwgdGhpcy5fcmVzb3VyY2UuYXR0cldzc0VuZHBvaW50cykpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgY29uc29sZToge1xuICAgICAgICB1cmw6IGBodHRwczovLyR7dGhpcy5pZH0ubXEuJHtBd3MuUkVHSU9OfS4ke0F3cy5VUkxfU1VGRklYfTo4MTYyYCxcbiAgICAgICAgcG9ydDogODE2MixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuaXBBZGRyZXNzID0gRm4uc2VsZWN0KDAsIHRoaXMuX3Jlc291cmNlLmF0dHJJcEFkZHJlc3Nlcyk7XG4gIH1cbn1cbiJdfQ==