awscdk-resources-mongodbatlas
Version:
MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources
184 lines • 27.3 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnDatabaseUser = exports.ScopeDefinitionType = exports.CfnDatabaseUserPropsOidcAuthType = exports.CfnDatabaseUserPropsX509Type = exports.CfnDatabaseUserPropsLdapAuthType = exports.CfnDatabaseUserPropsAwsiamType = void 0;
exports.toJson_CfnDatabaseUserProps = toJson_CfnDatabaseUserProps;
exports.toJson_LabelDefinition = toJson_LabelDefinition;
exports.toJson_RoleDefinition = toJson_RoleDefinition;
exports.toJson_ScopeDefinition = toJson_ScopeDefinition;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
// Generated by cdk-import
const cdk = require("aws-cdk-lib");
/**
* Converts an object of type 'CfnDatabaseUserProps' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_CfnDatabaseUserProps(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
DeleteAfterDate: obj.deleteAfterDate,
AWSIAMType: obj.awsiamType,
DatabaseName: obj.databaseName,
Description: obj.description,
Labels: obj.labels?.map((y) => toJson_LabelDefinition(y)),
LdapAuthType: obj.ldapAuthType,
X509Type: obj.x509Type,
OIDCAuthType: obj.oidcAuthType,
Password: obj.password,
ProjectId: obj.projectId,
Roles: obj.roles?.map((y) => toJson_RoleDefinition(y)),
Scopes: obj.scopes?.map((y) => toJson_ScopeDefinition(y)),
Username: obj.username,
Profile: obj.profile,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, quote-props */
/**
* Human-readable label that indicates whether the new database user authenticates with the Amazon Web Services (AWS) Identity and Access Management (IAM) credentials associated with the user or the user's role. Default value is `NONE`.
*
* @schema CfnDatabaseUserPropsAwsiamType
*/
var CfnDatabaseUserPropsAwsiamType;
(function (CfnDatabaseUserPropsAwsiamType) {
/** NONE */
CfnDatabaseUserPropsAwsiamType["NONE"] = "NONE";
/** USER */
CfnDatabaseUserPropsAwsiamType["USER"] = "USER";
/** ROLE */
CfnDatabaseUserPropsAwsiamType["ROLE"] = "ROLE";
})(CfnDatabaseUserPropsAwsiamType || (exports.CfnDatabaseUserPropsAwsiamType = CfnDatabaseUserPropsAwsiamType = {}));
/**
* Converts an object of type 'LabelDefinition' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_LabelDefinition(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Key: obj.key,
Value: obj.value,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, quote-props */
/**
* Method by which the provided username is authenticated. Default value is `NONE`.
*
* @schema CfnDatabaseUserPropsLdapAuthType
*/
var CfnDatabaseUserPropsLdapAuthType;
(function (CfnDatabaseUserPropsLdapAuthType) {
/** NONE */
CfnDatabaseUserPropsLdapAuthType["NONE"] = "NONE";
/** USER */
CfnDatabaseUserPropsLdapAuthType["USER"] = "USER";
/** GROUP */
CfnDatabaseUserPropsLdapAuthType["GROUP"] = "GROUP";
})(CfnDatabaseUserPropsLdapAuthType || (exports.CfnDatabaseUserPropsLdapAuthType = CfnDatabaseUserPropsLdapAuthType = {}));
/**
* Method that briefs who owns the certificate provided. Default value is `NONE`.
*
* @schema CfnDatabaseUserPropsX509Type
*/
var CfnDatabaseUserPropsX509Type;
(function (CfnDatabaseUserPropsX509Type) {
/** NONE */
CfnDatabaseUserPropsX509Type["NONE"] = "NONE";
/** MANAGED */
CfnDatabaseUserPropsX509Type["MANAGED"] = "MANAGED";
/** CUSTOMER */
CfnDatabaseUserPropsX509Type["CUSTOMER"] = "CUSTOMER";
})(CfnDatabaseUserPropsX509Type || (exports.CfnDatabaseUserPropsX509Type = CfnDatabaseUserPropsX509Type = {}));
/**
* Human-readable label that indicates whether the new database user or group authenticates with OIDC federated authentication. To create a federated authentication user, specify the value of USER in this field. To create a federated authentication group, specify the value of IDP_GROUP in this field. Default value is `NONE`.
*
* @schema CfnDatabaseUserPropsOidcAuthType
*/
var CfnDatabaseUserPropsOidcAuthType;
(function (CfnDatabaseUserPropsOidcAuthType) {
/** NONE */
CfnDatabaseUserPropsOidcAuthType["NONE"] = "NONE";
/** USER */
CfnDatabaseUserPropsOidcAuthType["USER"] = "USER";
/** IDP_GROUP */
CfnDatabaseUserPropsOidcAuthType["IDP_GROUP"] = "IDP_GROUP";
})(CfnDatabaseUserPropsOidcAuthType || (exports.CfnDatabaseUserPropsOidcAuthType = CfnDatabaseUserPropsOidcAuthType = {}));
/**
* Converts an object of type 'RoleDefinition' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_RoleDefinition(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
CollectionName: obj.collectionName,
DatabaseName: obj.databaseName,
RoleName: obj.roleName,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'ScopeDefinition' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_ScopeDefinition(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Name: obj.name,
Type: obj.type,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, quote-props */
/**
* @schema ScopeDefinitionType
*/
var ScopeDefinitionType;
(function (ScopeDefinitionType) {
/** CLUSTER */
ScopeDefinitionType["CLUSTER"] = "CLUSTER";
/** DATA_LAKE */
ScopeDefinitionType["DATA_LAKE"] = "DATA_LAKE";
})(ScopeDefinitionType || (exports.ScopeDefinitionType = ScopeDefinitionType = {}));
/**
* A CloudFormation `MongoDB::Atlas::DatabaseUser`
*
* @cloudformationResource MongoDB::Atlas::DatabaseUser
* @stability external
*/
class CfnDatabaseUser extends cdk.CfnResource {
/**
* Create a new `MongoDB::Atlas::DatabaseUser`.
*
* @param scope - scope in which this resource is defined
* @param id - scoped id of the resource
* @param props - resource properties
*/
constructor(scope, id, props) {
super(scope, id, {
type: CfnDatabaseUser.CFN_RESOURCE_TYPE_NAME,
properties: toJson_CfnDatabaseUserProps(props),
});
this.props = props;
this.attrUserCFNIdentifier = cdk.Token.asString(this.getAtt("UserCFNIdentifier"));
}
}
exports.CfnDatabaseUser = CfnDatabaseUser;
_a = JSII_RTTI_SYMBOL_1;
CfnDatabaseUser[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnDatabaseUser", version: "4.0.0" };
/**
* The CloudFormation resource type name for this resource class.
*/
CfnDatabaseUser.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::DatabaseUser";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2RhdGFiYXNlLXVzZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQWlIQSxrRUEyQkM7QUFvQ0Qsd0RBZUM7QUFxRUQsc0RBZ0JDO0FBc0JELHdEQWVDOztBQXpURCwwQkFBMEI7QUFDMUIsbUNBQW1DO0FBNEduQzs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQiwyQkFBMkIsQ0FDekMsR0FBcUM7SUFFckMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHO1FBQ2IsZUFBZSxFQUFFLEdBQUcsQ0FBQyxlQUFlO1FBQ3BDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtRQUMxQixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDOUIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1FBQzVCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1FBQzlCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN0QixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDOUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENB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N0IsY0FBYztJQUNkLDBDQUFtQixDQUFBO0lBQ25CLGdCQUFnQjtJQUNoQiw4Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFLOUI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxHQUFHLENBQUMsV0FBVztJQWlCbEQ7Ozs7OztPQU1HO0lBQ0gsWUFDRSxLQUEyQixFQUMzQixFQUFVLEVBQ1YsS0FBMkI7UUFFM0IsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixJQUFJLEVBQUUsZUFBZSxDQUFDLHNCQUFzQjtZQUM1QyxVQUFVLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFFO1NBQ2hELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUNqQyxDQUFDO0lBQ0osQ0FBQzs7QUF2Q0gsMENBd0NDOzs7QUF2Q0M7O0dBRUc7QUFDb0Isc0NBQXNCLEdBQzNDLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGNkay1pbXBvcnRcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBSZXR1cm5zLCBhZGRzLCBlZGl0cywgYW5kIHJlbW92ZXMgZGF0YWJhc2UgdXNlcnMuXG4gKlxuICogQHNjaGVtYSBDZm5EYXRhYmFzZVVzZXJQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkRhdGFiYXNlVXNlclByb3BzIHtcbiAgLyoqXG4gICAqIERhdGUgYW5kIHRpbWUgd2hlbiBNb25nb0RCIENsb3VkIGRlbGV0ZXMgdGhlIHVzZXIuIFRoaXMgcGFyYW1ldGVyIGV4cHJlc3NlcyBpdHMgdmFsdWUgaW4gdGhlIElTTyA4NjAxIHRpbWVzdGFtcCBmb3JtYXQgaW4gVVRDIGFuZCBjYW4gaW5jbHVkZSB0aGUgdGltZSB6b25lIGRlc2lnbmF0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IGEgZnV0dXJlIGRhdGUgdGhhdCBmYWxscyB3aXRoaW4gb25lIHdlZWsgb2YgbWFraW5nIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgKEFQSSkgcmVxdWVzdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhYmFzZVVzZXJQcm9wcyNEZWxldGVBZnRlckRhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZUFmdGVyRGF0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbmV3IGRhdGFiYXNlIHVzZXIgYXV0aGVudGljYXRlcyB3aXRoIHRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIChBV1MpIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSBjcmVkZW50aWFscyBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIgb3IgdGhlIHVzZXIncyByb2xlLiBEZWZhdWx0IHZhbHVlIGlzIGBOT05FYC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhYmFzZVVzZXJQcm9wcyNBV1NJQU1UeXBlXG4gICAqL1xuICByZWFkb25seSBhd3NpYW1UeXBlPzogQ2ZuRGF0YWJhc2VVc2VyUHJvcHNBd3NpYW1UeXBlO1xuXG4gIC8qKlxuICAgKiBNb25nb0RCIGRhdGFiYXNlIGFnYWluc3Qgd2hpY2ggdGhlIE1vbmdvREIgZGF0YWJhc2UgdXNlciBhdXRoZW50aWNhdGVzLiBNb25nb0RCIGRhdGFiYXNlIHVzZXJzIG11c3QgcHJvdmlkZSBib3RoIGEgdXNlcm5hbWUgYW5kIGF1dGhlbnRpY2F0aW9uIGRhdGFiYXNlIHRvIGxvZyBpbnRvIE1vbmdvREIuICBEZWZhdWx0IHZhbHVlIGlzIGBhZG1pbmAuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRGF0YWJhc2VVc2VyUHJvcHMjRGF0YWJhc2VOYW1lXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhpcyBkYXRhYmFzZSB1c2VyLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzI0Rlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCB0aGF0IGNvbnRhaW5zIHRoZSBrZXktdmFsdWUgcGFpcnMgZm9yIHRhZ2dpbmcgYW5kIGNhdGVnb3JpemluZyB0aGUgTW9uZ29EQiBkYXRhYmFzZSB1c2VyLiBUaGUgbGFiZWxzIHRoYXQgeW91IGRlZmluZSBkbyBub3QgYXBwZWFyIGluIHRoZSBjb25zb2xlLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzI0xhYmVsc1xuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWxzPzogTGFiZWxEZWZpbml0aW9uW107XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBieSB3aGljaCB0aGUgcHJvdmlkZWQgdXNlcm5hbWUgaXMgYXV0aGVudGljYXRlZC4gRGVmYXVsdCB2YWx1ZSBpcyBgTk9ORWAuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRGF0YWJhc2VVc2VyUHJvcHMjTGRhcEF1dGhUeXBlXG4gICAqL1xuICByZWFkb25seSBsZGFwQXV0aFR5cGU/OiBDZm5EYXRhYmFzZVVzZXJQcm9wc0xkYXBBdXRoVHlwZTtcblxuICAvKipcbiAgICogTWV0aG9kIHRoYXQgYnJpZWZzIHdobyBvd25zIHRoZSBjZXJ0aWZpY2F0ZSBwcm92aWRlZC4gRGVmYXVsdCB2YWx1ZSBpcyBgTk9ORWAuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRGF0YWJhc2VVc2VyUHJvcHMjWDUwOVR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHg1MDlUeXBlPzogQ2ZuRGF0YWJhc2VVc2VyUHJvcHNYNTA5VHlwZTtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbmV3IGRhdGFiYXNlIHVzZXIgb3IgZ3JvdXAgYXV0aGVudGljYXRlcyB3aXRoIE9JREMgZmVkZXJhdGVkIGF1dGhlbnRpY2F0aW9uLiBUbyBjcmVhdGUgYSBmZWRlcmF0ZWQgYXV0aGVudGljYXRpb24gdXNlciwgc3BlY2lmeSB0aGUgdmFsdWUgb2YgVVNFUiBpbiB0aGlzIGZpZWxkLiBUbyBjcmVhdGUgYSBmZWRlcmF0ZWQgYXV0aGVudGljYXRpb24gZ3JvdXAsIHNwZWNpZnkgdGhlIHZhbHVlIG9mIElEUF9HUk9VUCBpbiB0aGlzIGZpZWxkLiBEZWZhdWx0IHZhbHVlIGlzIGBOT05FYC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhYmFzZVVzZXJQcm9wcyNPSURDQXV0aFR5cGVcbiAgICovXG4gIHJlYWRvbmx5IG9pZGNBdXRoVHlwZT86IENmbkRhdGFiYXNlVXNlclByb3BzT2lkY0F1dGhUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlcuKAmXMgcGFzc3dvcmQuIFRoaXMgZmllbGQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBlbnRpdHkgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzI1Bhc3N3b3JkXG4gICAqL1xuICByZWFkb25seSBwYXNzd29yZD86IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIDI0LWhleGFkZWNpbWFsIGRpZ2l0IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgeW91ciBBdGxhcyBQcm9qZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzI1Byb2plY3RJZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3QgdGhhdCBwcm92aWRlcyB0aGUgcGFpcmluZ3Mgb2Ygb25lIHJvbGUgd2l0aCBvbmUgYXBwbGljYWJsZSBkYXRhYmFzZS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhYmFzZVVzZXJQcm9wcyNSb2xlc1xuICAgKi9cbiAgcmVhZG9ubHkgcm9sZXM6IFJvbGVEZWZpbml0aW9uW107XG5cbiAgLyoqXG4gICAqIExpc3QgdGhhdCBjb250YWlucyBjbHVzdGVycyBhbmQgTW9uZ29EQiBBdGxhcyBEYXRhIEZlZGVyYXRpb24gdGhhdCB0aGlzIGRhdGFiYXNlIHVzZXIgY2FuIGFjY2Vzcy4gSWYgb21pdHRlZCwgTW9uZ29EQiBDbG91ZCBncmFudHMgdGhlIGRhdGFiYXNlIHVzZXIgYWNjZXNzIHRvIGFsbCB0aGUgY2x1c3RlcnMgYW5kIE1vbmdvREIgQXRsYXMgRGF0YSBGZWRlcmF0aW9uIGluIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzI1Njb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVzPzogU2NvcGVEZWZpbml0aW9uW107XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgcmVwcmVzZW50cyB0aGUgdXNlciB0aGF0IGF1dGhlbnRpY2F0ZXMgdG8gTW9uZ29EQi4gVGhlIGZvcm1hdCBvZiB0aGlzIGxhYmVsIGRlcGVuZHMgb24gdGhlIG1ldGhvZCBvZiBhdXRoZW50aWNhdGlvbi4gVGhpcyB3aWxsIGJlIFVTRVJfQVJOIG9yIFJPTEVfQVJOIGlmIEFXU0lBTVR5cGUgaXMgVVNFUiBvciBST0xFLiBSZWZlciBodHRwczovL3d3dy5tb25nb2RiLmNvbS9kb2NzL2F0bGFzL3JlZmVyZW5jZS9hcGktcmVzb3VyY2VzLXNwZWMvI3RhZy9EYXRhYmFzZS1Vc2Vycy9vcGVyYXRpb24vY3JlYXRlRGF0YWJhc2VVc2VyIGZvciBkZXRhaWxzLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzI1VzZXJuYW1lXG4gICAqL1xuICByZWFkb25seSB1c2VybmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9maWxlIHVzZWQgdG8gcHJvdmlkZSBjcmVkZW50aWFscyBpbmZvcm1hdGlvbiwgKGEgc2VjcmV0IHdpdGggdGhlIGNmbi9hdGxhcy9wcm9maWxlL3tQcm9maWxlfSwgaXMgcmVxdWlyZWQpLCBpZiBub3QgcHJvdmlkZWQgYGRlZmF1bHRgIGlzIHVzZWRcbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhYmFzZVVzZXJQcm9wcyNQcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDZm5EYXRhYmFzZVVzZXJQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ2ZuRGF0YWJhc2VVc2VyUHJvcHMoXG4gIG9iajogQ2ZuRGF0YWJhc2VVc2VyUHJvcHMgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBEZWxldGVBZnRlckRhdGU6IG9iai5kZWxldGVBZnRlckRhdGUsXG4gICAgQVdTSUFNVHlwZTogb2JqLmF3c2lhbVR5cGUsXG4gICAgRGF0YWJhc2VOYW1lOiBvYmouZGF0YWJhc2VOYW1lLFxuICAgIERlc2NyaXB0aW9uOiBvYmouZGVzY3JpcHRpb24sXG4gICAgTGFiZWxzOiBvYmoubGFiZWxzPy5tYXAoKHkpID0+IHRvSnNvbl9MYWJlbERlZmluaXRpb24oeSkpLFxuICAgIExkYXBBdXRoVHlwZTogb2JqLmxkYXBBdXRoVHlwZSxcbiAgICBYNTA5VHlwZTogb2JqLng1MDlUeXBlLFxuICAgIE9JRENBdXRoVHlwZTogb2JqLm9pZGNBdXRoVHlwZSxcbiAgICBQYXNzd29yZDogb2JqLnBhc3N3b3JkLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBSb2xlczogb2JqLnJvbGVzPy5tYXAoKHkpID0+IHRvSnNvbl9Sb2xlRGVmaW5pdGlvbih5KSksXG4gICAgU2NvcGVzOiBvYmouc2NvcGVzPy5tYXAoKHkpID0+IHRvSnNvbl9TY29wZURlZmluaXRpb24oeSkpLFxuICAgIFVzZXJuYW1lOiBvYmoudXNlcm5hbWUsXG4gICAgUHJvZmlsZTogb2JqLnByb2ZpbGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG5ldyBkYXRhYmFzZSB1c2VyIGF1dGhlbnRpY2F0ZXMgd2l0aCB0aGUgQW1hem9uIFdlYiBTZXJ2aWNlcyAoQVdTKSBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnQgKElBTSkgY3JlZGVudGlhbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyIG9yIHRoZSB1c2VyJ3Mgcm9sZS4gRGVmYXVsdCB2YWx1ZSBpcyBgTk9ORWAuXG4gKlxuICogQHNjaGVtYSBDZm5EYXRhYmFzZVVzZXJQcm9wc0F3c2lhbVR5cGVcbiAqL1xuZXhwb3J0IGVudW0gQ2ZuRGF0YWJhc2VVc2VyUHJvcHNBd3NpYW1UeXBlIHtcbiAgLyoqIE5PTkUgKi9cbiAgTk9ORSA9IFwiTk9ORVwiLFxuICAvKiogVVNFUiAqL1xuICBVU0VSID0gXCJVU0VSXCIsXG4gIC8qKiBST0xFICovXG4gIFJPTEUgPSBcIlJPTEVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIGxhYmVsRGVmaW5pdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGxhYmVsRGVmaW5pdGlvbiNLZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBsYWJlbERlZmluaXRpb24jVmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdMYWJlbERlZmluaXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0xhYmVsRGVmaW5pdGlvbihcbiAgb2JqOiBMYWJlbERlZmluaXRpb24gfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBLZXk6IG9iai5rZXksXG4gICAgVmFsdWU6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogTWV0aG9kIGJ5IHdoaWNoIHRoZSBwcm92aWRlZCB1c2VybmFtZSBpcyBhdXRoZW50aWNhdGVkLiBEZWZhdWx0IHZhbHVlIGlzIGBOT05FYC5cbiAqXG4gKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzTGRhcEF1dGhUeXBlXG4gKi9cbmV4cG9ydCBlbnVtIENmbkRhdGFiYXNlVXNlclByb3BzTGRhcEF1dGhUeXBlIHtcbiAgLyoqIE5PTkUgKi9cbiAgTk9ORSA9IFwiTk9ORVwiLFxuICAvKiogVVNFUiAqL1xuICBVU0VSID0gXCJVU0VSXCIsXG4gIC8qKiBHUk9VUCAqL1xuICBHUk9VUCA9IFwiR1JPVVBcIixcbn1cblxuLyoqXG4gKiBNZXRob2QgdGhhdCBicmllZnMgd2hvIG93bnMgdGhlIGNlcnRpZmljYXRlIHByb3ZpZGVkLiBEZWZhdWx0IHZhbHVlIGlzIGBOT05FYC5cbiAqXG4gKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzWDUwOVR5cGVcbiAqL1xuZXhwb3J0IGVudW0gQ2ZuRGF0YWJhc2VVc2VyUHJvcHNYNTA5VHlwZSB7XG4gIC8qKiBOT05FICovXG4gIE5PTkUgPSBcIk5PTkVcIixcbiAgLyoqIE1BTkFHRUQgKi9cbiAgTUFOQUdFRCA9IFwiTUFOQUdFRFwiLFxuICAvKiogQ1VTVE9NRVIgKi9cbiAgQ1VTVE9NRVIgPSBcIkNVU1RPTUVSXCIsXG59XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbmV3IGRhdGFiYXNlIHVzZXIgb3IgZ3JvdXAgYXV0aGVudGljYXRlcyB3aXRoIE9JREMgZmVkZXJhdGVkIGF1dGhlbnRpY2F0aW9uLiBUbyBjcmVhdGUgYSBmZWRlcmF0ZWQgYXV0aGVudGljYXRpb24gdXNlciwgc3BlY2lmeSB0aGUgdmFsdWUgb2YgVVNFUiBpbiB0aGlzIGZpZWxkLiBUbyBjcmVhdGUgYSBmZWRlcmF0ZWQgYXV0aGVudGljYXRpb24gZ3JvdXAsIHNwZWNpZnkgdGhlIHZhbHVlIG9mIElEUF9HUk9VUCBpbiB0aGlzIGZpZWxkLiBEZWZhdWx0IHZhbHVlIGlzIGBOT05FYC5cbiAqXG4gKiBAc2NoZW1hIENmbkRhdGFiYXNlVXNlclByb3BzT2lkY0F1dGhUeXBlXG4gKi9cbmV4cG9ydCBlbnVtIENmbkRhdGFiYXNlVXNlclByb3BzT2lkY0F1dGhUeXBlIHtcbiAgLyoqIE5PTkUgKi9cbiAgTk9ORSA9IFwiTk9ORVwiLFxuICAvKiogVVNFUiAqL1xuICBVU0VSID0gXCJVU0VSXCIsXG4gIC8qKiBJRFBfR1JPVVAgKi9cbiAgSURQX0dST1VQID0gXCJJRFBfR1JPVVBcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIHJvbGVEZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZURlZmluaXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSByb2xlRGVmaW5pdGlvbiNDb2xsZWN0aW9uTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgcm9sZURlZmluaXRpb24jRGF0YWJhc2VOYW1lXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgcm9sZURlZmluaXRpb24jUm9sZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdSb2xlRGVmaW5pdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUm9sZURlZmluaXRpb24oXG4gIG9iajogUm9sZURlZmluaXRpb24gfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBDb2xsZWN0aW9uTmFtZTogb2JqLmNvbGxlY3Rpb25OYW1lLFxuICAgIERhdGFiYXNlTmFtZTogb2JqLmRhdGFiYXNlTmFtZSxcbiAgICBSb2xlTmFtZTogb2JqLnJvbGVOYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIHNjb3BlRGVmaW5pdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIHNjb3BlRGVmaW5pdGlvbiNOYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIHNjb3BlRGVmaW5pdGlvbiNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogU2NvcGVEZWZpbml0aW9uVHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU2NvcGVEZWZpbml0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9TY29wZURlZmluaXRpb24oXG4gIG9iajogU2NvcGVEZWZpbml0aW9uIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgVHlwZTogb2JqLnR5cGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgU2NvcGVEZWZpbml0aW9uVHlwZVxuICovXG5leHBvcnQgZW51bSBTY29wZURlZmluaXRpb25UeXBlIHtcbiAgLyoqIENMVVNURVIgKi9cbiAgQ0xVU1RFUiA9IFwiQ0xVU1RFUlwiLFxuICAvKiogREFUQV9MQUtFICovXG4gIERBVEFfTEFLRSA9IFwiREFUQV9MQUtFXCIsXG59XG5cbi8qKlxuICogQSBDbG91ZEZvcm1hdGlvbiBgTW9uZ29EQjo6QXRsYXM6OkRhdGFiYXNlVXNlcmBcbiAqXG4gKiBAY2xvdWRmb3JtYXRpb25SZXNvdXJjZSBNb25nb0RCOjpBdGxhczo6RGF0YWJhc2VVc2VyXG4gKiBAc3RhYmlsaXR5IGV4dGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDZm5EYXRhYmFzZVVzZXIgZXh0ZW5kcyBjZGsuQ2ZuUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGUgbmFtZSBmb3IgdGhpcyByZXNvdXJjZSBjbGFzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0ZOX1JFU09VUkNFX1RZUEVfTkFNRSA9XG4gICAgXCJNb25nb0RCOjpBdGxhczo6RGF0YWJhc2VVc2VyXCI7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIHByb3BzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBDZm5EYXRhYmFzZVVzZXJQcm9wcztcblxuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6RGF0YWJhc2VVc2VyLlVzZXJDRk5JZGVudGlmaWVyYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJVc2VyQ0ZOSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYE1vbmdvREI6OkF0bGFzOjpEYXRhYmFzZVVzZXJgLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBpbiB3aGljaCB0aGlzIHJlc291cmNlIGlzIGRlZmluZWRcbiAgICogQHBhcmFtIGlkICAgIC0gc2NvcGVkIGlkIG9mIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcHJvcHMgLSByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ2ZuRGF0YWJhc2VVc2VyUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0eXBlOiBDZm5EYXRhYmFzZVVzZXIuQ0ZOX1JFU09VUkNFX1RZUEVfTkFNRSxcbiAgICAgIHByb3BlcnRpZXM6IHRvSnNvbl9DZm5EYXRhYmFzZVVzZXJQcm9wcyhwcm9wcykhLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5hdHRyVXNlckNGTklkZW50aWZpZXIgPSBjZGsuVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLmdldEF0dChcIlVzZXJDRk5JZGVudGlmaWVyXCIpXG4gICAgKTtcbiAgfVxufVxuIl19