UNPKG

@pepperize/cdk-organizations

Version:

Manage AWS organizations, organizational units (OU), accounts and service control policies (SCP).

61 lines 13.2 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.OrganizationalUnit = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const constructs_1 = require("constructs"); const organizational_unit_provider_1 = require("./organizational-unit-provider/organizational-unit-provider"); const policy_attachment_1 = require("./policy-attachment"); const tag_resource_1 = require("./tag-resource"); const validators_1 = require("./validators"); class OrganizationalUnit extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); this.tags = new aws_cdk_lib_1.TagManager(aws_cdk_lib_1.TagType.KEY_VALUE, "Custom::Organizations_OrganizationalUnitProvider"); this.scope = scope; const { organizationalUnitName, parent, importOnDuplicate, removalPolicy } = props; if (!validators_1.Validators.of().organizationalUnitName(organizationalUnitName)) { aws_cdk_lib_1.Annotations.of(this).addError("The organizational unit's name must be of type string and between 1 and 128 characters long."); } this.node.addDependency(parent); const organizationalUnitProvider = organizational_unit_provider_1.OrganizationalUnitProvider.getOrCreate(this); this.resource = new aws_cdk_lib_1.CustomResource(this, "OrganizationProvider", { serviceToken: organizationalUnitProvider.provider.serviceToken, resourceType: "Custom::Organizations_OrganizationalUnitProvider", properties: { Name: organizationalUnitName, ParentId: parent.identifier(), ImportOnDuplicate: String(importOnDuplicate ?? true), RemovalPolicy: removalPolicy ?? aws_cdk_lib_1.RemovalPolicy.RETAIN, }, }); this.organizationalUnitId = this.resource.getAtt("Id").toString(); this.organizationalUnitArn = this.resource.getAtt("Arn").toString(); this.organizationalUnitName = this.resource.getAtt("Name").toString(); const tagResource = new tag_resource_1.TagResource(this, "Tags", { resourceId: this.organizationalUnitId, tags: this.tags.renderedTags, }); tagResource.node.addDependency(this.resource); } identifier() { return this.organizationalUnitId; } /** * Attach a policy. Before you can attach the policy, you must enable that policy type for use. You can use policies when you have all features enabled. * * @see https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies.html */ attachPolicy(policy) { const policyAttachment = new policy_attachment_1.PolicyAttachment(this.scope, `PolicyAttachment-${aws_cdk_lib_1.Names.nodeUniqueId(this.node)}-${aws_cdk_lib_1.Names.nodeUniqueId(policy.node)}`, { target: this, policy: policy, }); policyAttachment.node.addDependency(this.resource, policy); } } exports.OrganizationalUnit = OrganizationalUnit; _a = JSII_RTTI_SYMBOL_1; OrganizationalUnit[_a] = { fqn: "@pepperize/cdk-organizations.OrganizationalUnit", version: "0.7.988" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uYWwtdW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vcmdhbml6YXRpb25hbC11bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXFHO0FBQ3JHLDJDQUFtRDtBQUNuRCw4R0FBeUc7QUFHekcsMkRBQWdGO0FBQ2hGLGlEQUFnRTtBQUNoRSw2Q0FBMEM7QUE2QzFDLE1BQWEsa0JBQW1CLFNBQVEsc0JBQVM7SUFXL0MsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhWLFNBQUksR0FBRyxJQUFJLHdCQUFVLENBQUMscUJBQU8sQ0FBQyxTQUFTLEVBQUUsa0RBQWtELENBQUMsQ0FBQztRQUlwRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixNQUFNLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVuRixJQUFJLENBQUMsdUJBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7WUFDcEUseUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUMzQiw4RkFBOEYsQ0FDL0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoQyxNQUFNLDBCQUEwQixHQUFHLHlEQUEwQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksNEJBQWMsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7WUFDL0QsWUFBWSxFQUFFLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQzlELFlBQVksRUFBRSxrREFBa0Q7WUFDaEUsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO2dCQUM3QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDO2dCQUNwRCxhQUFhLEVBQUUsYUFBYSxJQUFJLDJCQUFhLENBQUMsTUFBTTthQUNyRDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXRFLE1BQU0sV0FBVyxHQUFHLElBQUksMEJBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2hELFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQ3JDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZLENBQUMsTUFBZTtRQUNqQyxNQUFNLGdCQUFnQixHQUFHLElBQUksb0NBQWdCLENBQzNDLElBQUksQ0FBQyxLQUFLLEVBQ1Ysb0JBQW9CLG1CQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFDdEY7WUFDRSxNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FDRixDQUFDO1FBQ0YsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7O0FBbkVILGdEQW9FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25zLCBDdXN0b21SZXNvdXJjZSwgTmFtZXMsIFJlbW92YWxQb2xpY3ksIFRhZ01hbmFnZXIsIFRhZ1R5cGUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25hbFVuaXRQcm92aWRlciB9IGZyb20gXCIuL29yZ2FuaXphdGlvbmFsLXVuaXQtcHJvdmlkZXIvb3JnYW5pemF0aW9uYWwtdW5pdC1wcm92aWRlclwiO1xuaW1wb3J0IHsgSUNoaWxkLCBJUGFyZW50IH0gZnJvbSBcIi4vcGFyZW50XCI7XG5pbXBvcnQgeyBJUG9saWN5IH0gZnJvbSBcIi4vcG9saWN5XCI7XG5pbXBvcnQgeyBJUG9saWN5QXR0YWNobWVudFRhcmdldCwgUG9saWN5QXR0YWNobWVudCB9IGZyb20gXCIuL3BvbGljeS1hdHRhY2htZW50XCI7XG5pbXBvcnQgeyBJVGFnZ2FibGVSZXNvdXJjZSwgVGFnUmVzb3VyY2UgfSBmcm9tIFwiLi90YWctcmVzb3VyY2VcIjtcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tIFwiLi92YWxpZGF0b3JzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemF0aW9uYWxVbml0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGZyaWVuZGx5IG5hbWUgdG8gYXNzaWduIHRvIHRoZSBuZXcgT1UuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHJvb3Qgb3IgT1UgdGhhdCB5b3Ugd2FudCB0byBjcmVhdGUgdGhlIG5ldyBPcmdhbml6YXRpb25hbFVuaXQgaW4uXG4gICAqL1xuICByZWFkb25seSBwYXJlbnQ6IElQYXJlbnQ7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGltcG9ydCwgaWYgYSBkdXBsaWNhdGUgb3JnYW5pemF0aW9uYWwgdW5pdCB3aXRoIHNhbWUgbmFtZSBleGlzdHMgaW4gdGhlIHBhcmVudCBleGlzdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydE9uRHVwbGljYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHNldCB0byBSZW1vdmFsUG9saWN5LkRFU1RST1ksIHRoZSBvcmdhbml6YXRpb25hbCB1bml0IHdpbGwgYmUgZGVsZXRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBSZW1vdmFsUG9saWN5LlJldGFpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogQSBjb250YWluZXIgZm9yIGFjY291bnRzIHdpdGhpbiBhIHJvb3QuIEFuIE9VIGFsc28gY2FuIGNvbnRhaW4gb3RoZXIgT1VzLCBlbmFibGluZyB5b3UgdG8gY3JlYXRlIGEgaGllcmFyY2h5IHRoYXQgcmVzZW1ibGVzIGFuIHVwc2lkZS1kb3duIHRyZWUsIHdpdGggYSByb290IGF0IHRoZSB0b3AgYW5kIGJyYW5jaGVzIG9mIE9VcyB0aGF0IHJlYWNoIGRvd24sIGVuZGluZyBpbiBhY2NvdW50cyB0aGF0IGFyZSB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlLiBXaGVuIHlvdSBhdHRhY2ggYSBwb2xpY3kgdG8gb25lIG9mIHRoZSBub2RlcyBpbiB0aGUgaGllcmFyY2h5LCBpdCBmbG93cyBkb3duIGFuZCBhZmZlY3RzIGFsbCB0aGUgYnJhbmNoZXMgKE9VcykgYW5kIGxlYXZlcyAoYWNjb3VudHMpIGJlbmVhdGggaXQuIEFuIE9VIGNhbiBoYXZlIGV4YWN0bHkgb25lIHBhcmVudCwgYW5kIGN1cnJlbnRseSBlYWNoIGFjY291bnQgY2FuIGJlIGEgbWVtYmVyIG9mIGV4YWN0bHkgb25lIE9VLlxuICpcbiAqIDxzdHJvbmc+WW91IG11c3QgZmlyc3QgbW92ZSBhbGwgYWNjb3VudHMgb3V0IG9mIHRoZSBPVSBhbmQgYW55IGNoaWxkIE9VcywgYW5kIHRoZW4geW91IGNhbiBkZWxldGUgdGhlIGNoaWxkIE9Vcy48L3N0cm9uZz5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJT3JnYW5pemF0aW9uYWxVbml0IGV4dGVuZHMgSVBvbGljeUF0dGFjaG1lbnRUYXJnZXQsIElQYXJlbnQsIElDaGlsZCwgSUNvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgKElEKSBhc3NvY2lhdGVkIHdpdGggdGhpcyBPVS4gVGhlIHJlZ2V4IHBhdHRlcm4gZm9yIGFuIG9yZ2FuaXphdGlvbmFsIHVuaXQgSUQgc3RyaW5nIHJlcXVpcmVzIFwib3UtXCIgZm9sbG93ZWQgYnkgZnJvbSA0IHRvIDMyIGxvd2VyY2FzZSBsZXR0ZXJzIG9yIGRpZ2l0cyAodGhlIElEIG9mIHRoZSByb290IHRoYXQgY29udGFpbnMgdGhlIE9VKS4gVGhpcyBzdHJpbmcgaXMgZm9sbG93ZWQgYnkgYSBzZWNvbmQgXCItXCIgZGFzaCBhbmQgZnJvbSA4IHRvIDMyIGFkZGl0aW9uYWwgbG93ZXJjYXNlIGxldHRlcnMgb3IgZGlnaXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGlzIE9VLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBBUk5zIGluIE9yZ2FuaXphdGlvbnMsIHNlZSBbQVJOIEZvcm1hdHMgU3VwcG9ydGVkIGJ5IE9yZ2FuaXphdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2F3c29yZ2FuaXphdGlvbnMuaHRtbCNhd3Nvcmdhbml6YXRpb25zLXJlc291cmNlcy1mb3ItaWFtLXBvbGljaWVzKSBpbiB0aGUgQVdTIFNlcnZpY2UgQXV0aG9yaXphdGlvbiBSZWZlcmVuY2UuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBmcmllbmRseSBuYW1lIG9mIHRoaXMgT1UuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBPcmdhbml6YXRpb25hbFVuaXQgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJT3JnYW5pemF0aW9uYWxVbml0LCBJVGFnZ2FibGVSZXNvdXJjZSB7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdEFybjogc3RyaW5nO1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXROYW1lOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc291cmNlOiBDdXN0b21SZXNvdXJjZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgcmVhZG9ubHkgdGFncyA9IG5ldyBUYWdNYW5hZ2VyKFRhZ1R5cGUuS0VZX1ZBTFVFLCBcIkN1c3RvbTo6T3JnYW5pemF0aW9uc19Pcmdhbml6YXRpb25hbFVuaXRQcm92aWRlclwiKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE9yZ2FuaXphdGlvbmFsVW5pdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG5cbiAgICBjb25zdCB7IG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUsIHBhcmVudCwgaW1wb3J0T25EdXBsaWNhdGUsIHJlbW92YWxQb2xpY3kgfSA9IHByb3BzO1xuXG4gICAgaWYgKCFWYWxpZGF0b3JzLm9mKCkub3JnYW5pemF0aW9uYWxVbml0TmFtZShvcmdhbml6YXRpb25hbFVuaXROYW1lKSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgIFwiVGhlIG9yZ2FuaXphdGlvbmFsIHVuaXQncyBuYW1lIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgYW5kIGJldHdlZW4gMSBhbmQgMTI4IGNoYXJhY3RlcnMgbG9uZy5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwYXJlbnQpO1xuXG4gICAgY29uc3Qgb3JnYW5pemF0aW9uYWxVbml0UHJvdmlkZXIgPSBPcmdhbml6YXRpb25hbFVuaXRQcm92aWRlci5nZXRPckNyZWF0ZSh0aGlzKTtcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiT3JnYW5pemF0aW9uUHJvdmlkZXJcIiwge1xuICAgICAgc2VydmljZVRva2VuOiBvcmdhbml6YXRpb25hbFVuaXRQcm92aWRlci5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpPcmdhbml6YXRpb25zX09yZ2FuaXphdGlvbmFsVW5pdFByb3ZpZGVyXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIE5hbWU6IG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUsXG4gICAgICAgIFBhcmVudElkOiBwYXJlbnQuaWRlbnRpZmllcigpLFxuICAgICAgICBJbXBvcnRPbkR1cGxpY2F0ZTogU3RyaW5nKGltcG9ydE9uRHVwbGljYXRlID8/IHRydWUpLFxuICAgICAgICBSZW1vdmFsUG9saWN5OiByZW1vdmFsUG9saWN5ID8/IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMub3JnYW5pemF0aW9uYWxVbml0SWQgPSB0aGlzLnJlc291cmNlLmdldEF0dChcIklkXCIpLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5vcmdhbml6YXRpb25hbFVuaXRBcm4gPSB0aGlzLnJlc291cmNlLmdldEF0dChcIkFyblwiKS50b1N0cmluZygpO1xuICAgIHRoaXMub3JnYW5pemF0aW9uYWxVbml0TmFtZSA9IHRoaXMucmVzb3VyY2UuZ2V0QXR0KFwiTmFtZVwiKS50b1N0cmluZygpO1xuXG4gICAgY29uc3QgdGFnUmVzb3VyY2UgPSBuZXcgVGFnUmVzb3VyY2UodGhpcywgXCJUYWdzXCIsIHtcbiAgICAgIHJlc291cmNlSWQ6IHRoaXMub3JnYW5pemF0aW9uYWxVbml0SWQsXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MucmVuZGVyZWRUYWdzLFxuICAgIH0pO1xuICAgIHRhZ1Jlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJlc291cmNlKTtcbiAgfVxuXG4gIGlkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vcmdhbml6YXRpb25hbFVuaXRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwb2xpY3kuIEJlZm9yZSB5b3UgY2FuIGF0dGFjaCB0aGUgcG9saWN5LCB5b3UgbXVzdCBlbmFibGUgdGhhdCBwb2xpY3kgdHlwZSBmb3IgdXNlLiBZb3UgY2FuIHVzZSBwb2xpY2llcyB3aGVuIHlvdSBoYXZlIGFsbCBmZWF0dXJlcyBlbmFibGVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vcmdhbml6YXRpb25zL2xhdGVzdC91c2VyZ3VpZGUvb3Jnc19tYW5hZ2VfcG9saWNpZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIGF0dGFjaFBvbGljeShwb2xpY3k6IElQb2xpY3kpIHtcbiAgICBjb25zdCBwb2xpY3lBdHRhY2htZW50ID0gbmV3IFBvbGljeUF0dGFjaG1lbnQoXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgYFBvbGljeUF0dGFjaG1lbnQtJHtOYW1lcy5ub2RlVW5pcXVlSWQodGhpcy5ub2RlKX0tJHtOYW1lcy5ub2RlVW5pcXVlSWQocG9saWN5Lm5vZGUpfWAsXG4gICAgICB7XG4gICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgcG9saWN5OiBwb2xpY3ksXG4gICAgICB9XG4gICAgKTtcbiAgICBwb2xpY3lBdHRhY2htZW50Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJlc291cmNlLCBwb2xpY3kpO1xuICB9XG59XG4iXX0=