awscdk-resources-mongodbatlas
Version:
MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources
346 lines • 56.3 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnAlertConfiguration = exports.IntegerThresholdViewOperator = exports.NotificationViewTypeName = exports.NotificationViewSeverity = exports.NotificationViewRoles = exports.NotificationViewOpsGenieRegion = exports.NotificationViewDatadogRegion = exports.MetricThresholdViewOperator = exports.MetricThresholdViewMode = exports.MatcherOperator = exports.MatcherFieldName = void 0;
exports.toJson_CfnAlertConfigurationProps = toJson_CfnAlertConfigurationProps;
exports.toJson_Matcher = toJson_Matcher;
exports.toJson_MetricThresholdView = toJson_MetricThresholdView;
exports.toJson_NotificationView = toJson_NotificationView;
exports.toJson_IntegerThresholdView = toJson_IntegerThresholdView;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
// Generated by cdk-import
const cdk = require("aws-cdk-lib");
/**
* Converts an object of type 'CfnAlertConfigurationProps' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_CfnAlertConfigurationProps(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Profile: obj.profile,
EventTypeName: obj.eventTypeName,
ProjectId: obj.projectId,
Matchers: obj.matchers?.map((y) => toJson_Matcher(y)),
MetricThreshold: toJson_MetricThresholdView(obj.metricThreshold),
Notifications: obj.notifications?.map((y) => toJson_NotificationView(y)),
Threshold: toJson_IntegerThresholdView(obj.threshold),
TypeName: obj.typeName,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'Matcher' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_Matcher(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
FieldName: obj.fieldName,
Operator: obj.operator,
Value: obj.value,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'MetricThresholdView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_MetricThresholdView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
MetricName: obj.metricName,
Mode: obj.mode,
Operator: obj.operator,
Threshold: obj.threshold,
Units: obj.units,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'NotificationView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_NotificationView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
ApiToken: obj.apiToken,
ChannelName: obj.channelName,
DatadogApiKey: obj.datadogApiKey,
DatadogRegion: obj.datadogRegion,
DelayMin: obj.delayMin,
EmailAddress: obj.emailAddress,
EmailEnabled: obj.emailEnabled,
IntervalMin: obj.intervalMin,
MicrosoftTeamsWebhookUrl: obj.microsoftTeamsWebhookUrl,
MobileNumber: obj.mobileNumber,
NotificationToken: obj.notificationToken,
OpsGenieApiKey: obj.opsGenieApiKey,
OpsGenieRegion: obj.opsGenieRegion,
OrgName: obj.orgName,
Roles: obj.roles?.map((y) => y),
RoomName: obj.roomName,
ServiceKey: obj.serviceKey,
Severity: obj.severity,
SmsEnabled: obj.smsEnabled,
TeamId: obj.teamId,
TeamName: obj.teamName,
TypeName: obj.typeName,
Username: obj.username,
VictorOpsApiKey: obj.victorOpsApiKey,
VictorOpsRoutingKey: obj.victorOpsRoutingKey,
WebhookSecret: obj.webhookSecret,
WebhookUrl: obj.webhookUrl,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'IntegerThresholdView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_IntegerThresholdView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Operator: obj.operator,
Threshold: obj.threshold,
Units: obj.units,
};
// 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 */
/**
* Name of the parameter in the target object that MongoDB Cloud checks. The parameter must match all rules for MongoDB Cloud to check for alert configurations.
*
* @schema MatcherFieldName
*/
var MatcherFieldName;
(function (MatcherFieldName) {
/** CLUSTER_NAME */
MatcherFieldName["CLUSTER_NAME"] = "CLUSTER_NAME";
/** HOSTNAME */
MatcherFieldName["HOSTNAME"] = "HOSTNAME";
/** HOSTNAME_AND_PORT */
MatcherFieldName["HOSTNAME_AND_PORT"] = "HOSTNAME_AND_PORT";
/** PORT */
MatcherFieldName["PORT"] = "PORT";
/** REPLICA_SET_NAME */
MatcherFieldName["REPLICA_SET_NAME"] = "REPLICA_SET_NAME";
/** SHARD_NAME */
MatcherFieldName["SHARD_NAME"] = "SHARD_NAME";
/** TYPE_NAME */
MatcherFieldName["TYPE_NAME"] = "TYPE_NAME";
/** APPLICATION_ID */
MatcherFieldName["APPLICATION_ID"] = "APPLICATION_ID";
/** INSTANCE_NAME */
MatcherFieldName["INSTANCE_NAME"] = "INSTANCE_NAME";
/** PROCESSOR_NAME */
MatcherFieldName["PROCESSOR_NAME"] = "PROCESSOR_NAME";
})(MatcherFieldName || (exports.MatcherFieldName = MatcherFieldName = {}));
/**
* Comparison operator to apply when checking the current metric value against **matcher[n].value**.
*
* @schema MatcherOperator
*/
var MatcherOperator;
(function (MatcherOperator) {
/** EQUALS */
MatcherOperator["EQUALS"] = "EQUALS";
/** CONTAINS */
MatcherOperator["CONTAINS"] = "CONTAINS";
/** STARTS_WITH */
MatcherOperator["STARTS_WITH"] = "STARTS_WITH";
/** ENDS_WITH */
MatcherOperator["ENDS_WITH"] = "ENDS_WITH";
/** NOT_EQUALS */
MatcherOperator["NOT_EQUALS"] = "NOT_EQUALS";
/** NOT_CONTAINS */
MatcherOperator["NOT_CONTAINS"] = "NOT_CONTAINS";
/** REGEX */
MatcherOperator["REGEX"] = "REGEX";
})(MatcherOperator || (exports.MatcherOperator = MatcherOperator = {}));
/**
* MongoDB Cloud computes the current metric value as an average.
*
* @schema MetricThresholdViewMode
*/
var MetricThresholdViewMode;
(function (MetricThresholdViewMode) {
/** AVERAGE */
MetricThresholdViewMode["AVERAGE"] = "AVERAGE";
})(MetricThresholdViewMode || (exports.MetricThresholdViewMode = MetricThresholdViewMode = {}));
/**
* Comparison operator to apply when checking the current metric value.
*
* @schema MetricThresholdViewOperator
*/
var MetricThresholdViewOperator;
(function (MetricThresholdViewOperator) {
/** GREATER_THAN */
MetricThresholdViewOperator["GREATER_THAN"] = "GREATER_THAN";
/** LESS_THAN */
MetricThresholdViewOperator["LESS_THAN"] = "LESS_THAN";
})(MetricThresholdViewOperator || (exports.MetricThresholdViewOperator = MetricThresholdViewOperator = {}));
/**
* Datadog region that indicates which API Uniform Resource Locator (URL) to use. The resource requires this parameter when '"notifications.typeName" : "DATADOG"'.
*
* @schema NotificationViewDatadogRegion
*/
var NotificationViewDatadogRegion;
(function (NotificationViewDatadogRegion) {
/** EU */
NotificationViewDatadogRegion["EU"] = "EU";
/** US */
NotificationViewDatadogRegion["US"] = "US";
})(NotificationViewDatadogRegion || (exports.NotificationViewDatadogRegion = NotificationViewDatadogRegion = {}));
/**
* Opsgenie region that indicates which API Uniform Resource Locator (URL) to use.
*
* @schema NotificationViewOpsGenieRegion
*/
var NotificationViewOpsGenieRegion;
(function (NotificationViewOpsGenieRegion) {
/** EU */
NotificationViewOpsGenieRegion["EU"] = "EU";
/** US */
NotificationViewOpsGenieRegion["US"] = "US";
})(NotificationViewOpsGenieRegion || (exports.NotificationViewOpsGenieRegion = NotificationViewOpsGenieRegion = {}));
/**
* @schema NotificationViewRoles
*/
var NotificationViewRoles;
(function (NotificationViewRoles) {
/** GROUP_CLUSTER_MANAGER */
NotificationViewRoles["GROUP_CLUSTER_MANAGER"] = "GROUP_CLUSTER_MANAGER";
/** GROUP_DATA_ACCESS_ADMIN */
NotificationViewRoles["GROUP_DATA_ACCESS_ADMIN"] = "GROUP_DATA_ACCESS_ADMIN";
/** GROUP_DATA_ACCESS_READ_ONLY */
NotificationViewRoles["GROUP_DATA_ACCESS_READ_ONLY"] = "GROUP_DATA_ACCESS_READ_ONLY";
/** GROUP_DATA_ACCESS_READ_WRITE */
NotificationViewRoles["GROUP_DATA_ACCESS_READ_WRITE"] = "GROUP_DATA_ACCESS_READ_WRITE";
/** GROUP_OWNER */
NotificationViewRoles["GROUP_OWNER"] = "GROUP_OWNER";
/** GROUP_READ_WRITE */
NotificationViewRoles["GROUP_READ_WRITE"] = "GROUP_READ_WRITE";
/** ORG_OWNER */
NotificationViewRoles["ORG_OWNER"] = "ORG_OWNER";
/** ORG_MEMBER */
NotificationViewRoles["ORG_MEMBER"] = "ORG_MEMBER";
/** ORG_GROUP_CREATOR */
NotificationViewRoles["ORG_GROUP_CREATOR"] = "ORG_GROUP_CREATOR";
/** ORG_BILLING_ADMIN */
NotificationViewRoles["ORG_BILLING_ADMIN"] = "ORG_BILLING_ADMIN";
/** ORG_READ_ONLY */
NotificationViewRoles["ORG_READ_ONLY"] = "ORG_READ_ONLY";
})(NotificationViewRoles || (exports.NotificationViewRoles = NotificationViewRoles = {}));
/**
* Degree of seriousness given to this notification.
*
* @schema NotificationViewSeverity
*/
var NotificationViewSeverity;
(function (NotificationViewSeverity) {
/** CRITICAL */
NotificationViewSeverity["CRITICAL"] = "CRITICAL";
/** ERROR */
NotificationViewSeverity["ERROR"] = "ERROR";
/** WARNING */
NotificationViewSeverity["WARNING"] = "WARNING";
})(NotificationViewSeverity || (exports.NotificationViewSeverity = NotificationViewSeverity = {}));
/**
* Human-readable label that displays the alert notification type.
*
* @schema NotificationViewTypeName
*/
var NotificationViewTypeName;
(function (NotificationViewTypeName) {
/** DATADOG */
NotificationViewTypeName["DATADOG"] = "DATADOG";
/** EMAIL */
NotificationViewTypeName["EMAIL"] = "EMAIL";
/** FLOWDOCK */
NotificationViewTypeName["FLOWDOCK"] = "FLOWDOCK";
/** GROUP */
NotificationViewTypeName["GROUP"] = "GROUP";
/** MICROSOFT_TEAMS */
NotificationViewTypeName["MICROSOFT_TEAMS"] = "MICROSOFT_TEAMS";
/** OPS_GENIE */
NotificationViewTypeName["OPS_GENIE"] = "OPS_GENIE";
/** ORG */
NotificationViewTypeName["ORG"] = "ORG";
/** PAGER_DUTY */
NotificationViewTypeName["PAGER_DUTY"] = "PAGER_DUTY";
/** PROMETHEUS */
NotificationViewTypeName["PROMETHEUS"] = "PROMETHEUS";
/** SLACK */
NotificationViewTypeName["SLACK"] = "SLACK";
/** SMS */
NotificationViewTypeName["SMS"] = "SMS";
/** TEAM */
NotificationViewTypeName["TEAM"] = "TEAM";
/** USER */
NotificationViewTypeName["USER"] = "USER";
/** VICTOR_OPS */
NotificationViewTypeName["VICTOR_OPS"] = "VICTOR_OPS";
/** WEBHOOK */
NotificationViewTypeName["WEBHOOK"] = "WEBHOOK";
})(NotificationViewTypeName || (exports.NotificationViewTypeName = NotificationViewTypeName = {}));
/**
* Comparison operator to apply when checking the current metric value.
*
* @schema IntegerThresholdViewOperator
*/
var IntegerThresholdViewOperator;
(function (IntegerThresholdViewOperator) {
/** GREATER_THAN */
IntegerThresholdViewOperator["GREATER_THAN"] = "GREATER_THAN";
/** LESS_THAN */
IntegerThresholdViewOperator["LESS_THAN"] = "LESS_THAN";
})(IntegerThresholdViewOperator || (exports.IntegerThresholdViewOperator = IntegerThresholdViewOperator = {}));
/**
* A CloudFormation `MongoDB::Atlas::AlertConfiguration`
*
* @cloudformationResource MongoDB::Atlas::AlertConfiguration
* @stability external
*/
class CfnAlertConfiguration extends cdk.CfnResource {
/**
* Create a new `MongoDB::Atlas::AlertConfiguration`.
*
* @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: CfnAlertConfiguration.CFN_RESOURCE_TYPE_NAME,
properties: toJson_CfnAlertConfigurationProps(props),
});
this.props = props;
this.attrId = cdk.Token.asString(this.getAtt("Id"));
this.attrEnabled = this.getAtt("Enabled");
this.attrUpdated = cdk.Token.asString(this.getAtt("Updated"));
this.attrCreated = cdk.Token.asString(this.getAtt("Created"));
}
}
exports.CfnAlertConfiguration = CfnAlertConfiguration;
_a = JSII_RTTI_SYMBOL_1;
CfnAlertConfiguration[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnAlertConfiguration", version: "3.13.0" };
/**
* The CloudFormation resource type name for this resource class.
*/
CfnAlertConfiguration.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::AlertConfiguration";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2FsZXJ0LWNvbmZpZ3VyYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXVFQSw4RUFxQkM7QUFpQ0Qsd0NBZ0JDO0FBK0NELGdFQWtCQztBQTBORCwwREF3Q0M7QUFpQ0Qsa0VBZ0JDOztBQWpnQkQsMEJBQTBCO0FBQzFCLG1DQUFtQztBQWtFbkM7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IsaUNBQWlDLENBQy9DLEdBQTJDO0lBRTNDLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRztRQUNiLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztRQUNwQixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7UUFDaEMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ3hCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELGVBQWUsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQ2hFLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsU0FBUyxFQUFFLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDckQsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO0tBQ3ZCLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVB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LE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7O0FBcERILHNEQXFEQzs7O0FBcERDOztHQUVHO0FBQ29CLDRDQUFzQixHQUMzQyxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBjZGstaW1wb3J0XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogUmV0dXJucyBhbmQgZWRpdHMgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGFsZXJ0cyBhbmQgaG93IE1vbmdvREIgQ2xvdWQgbm90aWZpZXMgdXNlcnMuIFRoaXMgY29sbGVjdGlvbiByZW1haW5zIHVuZGVyIHJldmlzaW9uIGFuZCBtYXkgY2hhbmdlLiBSZWZlciB0byB0aGUgbGVnYWN5IGRvY3VtZW50YXRpb24gZm9yIHRoaXMgY29sbGVjdGlvbiBpbiB0aGUgZm9sbG93aW5nIGxpbmsuXG4gKlxuICogQHNjaGVtYSBDZm5BbGVydENvbmZpZ3VyYXRpb25Qcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkFsZXJ0Q29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFByb2ZpbGUgdXNlZCB0byBwcm92aWRlIGNyZWRlbnRpYWxzIGluZm9ybWF0aW9uLCAoYSBzZWNyZXQgd2l0aCB0aGUgY2ZuL2F0bGFzL3Byb2ZpbGUve1Byb2ZpbGV9LCBpcyByZXF1aXJlZCksIGlmIG5vdCBwcm92aWRlZCBkZWZhdWx0IGlzIHVzZWRcbiAgICpcbiAgICogQHNjaGVtYSBDZm5BbGVydENvbmZpZ3VyYXRpb25Qcm9wcyNQcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFdmVudCB0eXBlIHRoYXQgdHJpZ2dlcnMgYW4gYWxlcnQuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQWxlcnRDb25maWd1cmF0aW9uUHJvcHMjRXZlbnRUeXBlTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRUeXBlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIDI0LWhleGFkZWNpbWFsIGRpZ2l0IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgeW91ciBwcm9qZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkFsZXJ0Q29uZmlndXJhdGlvblByb3BzI1Byb2plY3RJZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgTW9uZ29EQiBDbG91ZCBjaGVja3MgYW4gb2JqZWN0IGZvciB0aGUgYWxlcnQgY29uZmlndXJhdGlvbi4gWW91IGNhbiBmaWx0ZXIgdXNpbmcgdGhlIG1hdGNoZXJzIGFycmF5IGlmIHRoZSAqKmV2ZW50VHlwZU5hbWUqKiBzcGVjaWZpZXMgYW4gZXZlbnQgZm9yIGEgaG9zdCwgcmVwbGljYSBzZXQsIG9yIHNoYXJkZWQgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5BbGVydENvbmZpZ3VyYXRpb25Qcm9wcyNNYXRjaGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hlcnM/OiBNYXRjaGVyW107XG5cbiAgLyoqXG4gICAqIFRocmVzaG9sZCBmb3IgdGhlIG1ldHJpYyB0aGF0LCB3aGVuIGV4Y2VlZGVkLCB0cmlnZ2VycyBhbiBhbGVydC4gVGhlIHJlc291cmNlIHJldHVybnMgdGhpcyBwYXJhbWV0ZXIgd2hlbiAnXCJldmVudFR5cGVOYW1lXCIgOiBcIk9VVFNJREVfTUVUUklDX1RIUkVTSE9MRFwiJy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5BbGVydENvbmZpZ3VyYXRpb25Qcm9wcyNNZXRyaWNUaHJlc2hvbGRcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY1RocmVzaG9sZD86IE1ldHJpY1RocmVzaG9sZFZpZXc7XG5cbiAgLyoqXG4gICAqIExpc3QgdGhhdCBjb250YWlucyB0aGUgdGFyZ2V0cyB0aGF0IE1vbmdvREIgQ2xvdWQgc2VuZHMgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5BbGVydENvbmZpZ3VyYXRpb25Qcm9wcyNOb3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25zPzogTm90aWZpY2F0aW9uVmlld1tdO1xuXG4gIC8qKlxuICAgKiBMaW1pdCB0aGF0IHRyaWdnZXJzIGFuIGFsZXJ0IHdoZW4gZXhjZWVkZWQuIFRoZSByZXNvdXJjZSByZXR1cm5zIHRoaXMgcGFyYW1ldGVyIHdoZW4gKipldmVudFR5cGVOYW1lKiogaGFzIG5vdCBiZWVuIHNldCB0byAnT1VUU0lERV9NRVRSSUNfVEhSRVNIT0xEJy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5BbGVydENvbmZpZ3VyYXRpb25Qcm9wcyNUaHJlc2hvbGRcbiAgICovXG4gIHJlYWRvbmx5IHRocmVzaG9sZD86IEludGVnZXJUaHJlc2hvbGRWaWV3O1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGRpc3BsYXlzIHRoZSBhbGVydCB0eXBlLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkFsZXJ0Q29uZmlndXJhdGlvblByb3BzI1R5cGVOYW1lXG4gICAqL1xuICByZWFkb25seSB0eXBlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ2ZuQWxlcnRDb25maWd1cmF0aW9uUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkFsZXJ0Q29uZmlndXJhdGlvblByb3BzKFxuICBvYmo6IENmbkFsZXJ0Q29uZmlndXJhdGlvblByb3BzIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgUHJvZmlsZTogb2JqLnByb2ZpbGUsXG4gICAgRXZlbnRUeXBlTmFtZTogb2JqLmV2ZW50VHlwZU5hbWUsXG4gICAgUHJvamVjdElkOiBvYmoucHJvamVjdElkLFxuICAgIE1hdGNoZXJzOiBvYmoubWF0Y2hlcnM/Lm1hcCgoeSkgPT4gdG9Kc29uX01hdGNoZXIoeSkpLFxuICAgIE1ldHJpY1RocmVzaG9sZDogdG9Kc29uX01ldHJpY1RocmVzaG9sZFZpZXcob2JqLm1ldHJpY1RocmVzaG9sZCksXG4gICAgTm90aWZpY2F0aW9uczogb2JqLm5vdGlmaWNhdGlvbnM/Lm1hcCgoeSkgPT4gdG9Kc29uX05vdGlmaWNhdGlvblZpZXcoeSkpLFxuICAgIFRocmVzaG9sZDogdG9Kc29uX0ludGVnZXJUaHJlc2hvbGRWaWV3KG9iai50aHJlc2hvbGQpLFxuICAgIFR5cGVOYW1lOiBvYmoudHlwZU5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgTWF0Y2hlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSB0YXJnZXQgb2JqZWN0IHRoYXQgTW9uZ29EQiBDbG91ZCBjaGVja3MuIFRoZSBwYXJhbWV0ZXIgbXVzdCBtYXRjaCBhbGwgcnVsZXMgZm9yIE1vbmdvREIgQ2xvdWQgdG8gY2hlY2sgZm9yIGFsZXJ0IGNvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIE1hdGNoZXIjRmllbGROYW1lXG4gICAqL1xuICByZWFkb25seSBmaWVsZE5hbWU/OiBNYXRjaGVyRmllbGROYW1lO1xuXG4gIC8qKlxuICAgKiBDb21wYXJpc29uIG9wZXJhdG9yIHRvIGFwcGx5IHdoZW4gY2hlY2tpbmcgdGhlIGN1cnJlbnQgbWV0cmljIHZhbHVlIGFnYWluc3QgKiptYXRjaGVyW25dLnZhbHVlKiouXG4gICAqXG4gICAqIEBzY2hlbWEgTWF0Y2hlciNPcGVyYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0b3I/OiBNYXRjaGVyT3BlcmF0b3I7XG5cbiAgLyoqXG4gICAqIFZhbHVlIHRvIG1hdGNoIG9yIGV4Y2VlZCB1c2luZyB0aGUgc3BlY2lmaWVkICoqbWF0Y2hlcnMub3BlcmF0b3IqKi5cbiAgICpcbiAgICogQHNjaGVtYSBNYXRjaGVyI1ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnTWF0Y2hlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fTWF0Y2hlcihcbiAgb2JqOiBNYXRjaGVyIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgRmllbGROYW1lOiBvYmouZmllbGROYW1lLFxuICAgIE9wZXJhdG9yOiBvYmoub3BlcmF0b3IsXG4gICAgVmFsdWU6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBNZXRyaWNUaHJlc2hvbGRWaWV3XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljVGhyZXNob2xkVmlldyB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIG1ldHJpYyBhZ2FpbnN0IHdoaWNoIE1vbmdvREIgQ2xvdWQgY2hlY2tzIHRoZSBjb25maWd1cmVkICoqbWV0cmljVGhyZXNob2xkLnRocmVzaG9sZCoqLlxuICAgKlxuICAgKiBAc2NoZW1hIE1ldHJpY1RocmVzaG9sZFZpZXcjTWV0cmljTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTW9uZ29EQiBDbG91ZCBjb21wdXRlcyB0aGUgY3VycmVudCBtZXRyaWMgdmFsdWUgYXMgYW4gYXZlcmFnZS5cbiAgICpcbiAgICogQHNjaGVtYSBNZXRyaWNUaHJlc2hvbGRWaWV3I01vZGVcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBNZXRyaWNUaHJlc2hvbGRWaWV3TW9kZTtcblxuICAvKipcbiAgICogQ29tcGFyaXNvbiBvcGVyYXRvciB0byBhcHBseSB3aGVuIGNoZWNraW5nIHRoZSBjdXJyZW50IG1ldHJpYyB2YWx1ZS5cbiAgICpcbiAgICogQHNjaGVtYSBNZXRyaWNUaHJlc2hvbGRWaWV3I09wZXJhdG9yXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRvcj86IE1ldHJpY1RocmVzaG9sZFZpZXdPcGVyYXRvcjtcblxuICAvKipcbiAgICogVmFsdWUgb2YgbWV0cmljIHRoYXQsIHdoZW4gZXhjZWVkZWQsIHRyaWdnZXJzIGFuIGFsZXJ0LlxuICAgKlxuICAgKiBAc2NoZW1hIE1ldHJpY1RocmVzaG9sZFZpZXcjVGhyZXNob2xkXG4gICAqL1xuICByZWFkb25seSB0aHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVsZW1lbnQgdXNlZCB0byBleHByZXNzIHRoZSBxdWFudGl0eS4gVGhpcyBjYW4gYmUgYW4gZWxlbWVudCBvZiB0aW1lLCBzdG9yYWdlIGNhcGFjaXR5LCBhbmQgdGhlIGxpa2UuXG4gICAqXG4gICAqIEBzY2hlbWEgTWV0cmljVGhyZXNob2xkVmlldyNVbml0c1xuICAgKi9cbiAgcmVhZG9ubHkgdW5pdHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ01ldHJpY1RocmVzaG9sZFZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX01ldHJpY1RocmVzaG9sZFZpZXcoXG4gIG9iajogTWV0cmljVGhyZXNob2xkVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIE1ldHJpY05hbWU6IG9iai5tZXRyaWNOYW1lLFxuICAgIE1vZGU6IG9iai5tb2RlLFxuICAgIE9wZXJhdG9yOiBvYmoub3BlcmF0b3IsXG4gICAgVGhyZXNob2xkOiBvYmoudGhyZXNob2xkLFxuICAgIFVuaXRzOiBvYmoudW5pdHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgTm90aWZpY2F0aW9uVmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvblZpZXcge1xuICAvKipcbiAgICogU2xhY2sgQVBJIHRva2VuIG9yIEJvdCB0b2tlbiB0aGF0IE1vbmdvREIgQ2xvdWQgbmVlZHMgdG8gc2VuZCBhbGVydCBub3RpZmljYXRpb25zIHZpYSBTbGFjay4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJTTEFDS1wiJy4gSWYgdGhlIHRva2VuIGxhdGVyIGJlY29tZXMgaW52YWxpZCwgTW9uZ29EQiBDbG91ZCBzZW5kcyBhbiBlbWFpbCB0byB0aGUgcHJvamVjdCBvd25lcnMuIElmIHRoZSB0b2tlbiByZW1haW5zIGludmFsaWQsIE1vbmdvREIgQ2xvdWQgcmVtb3ZlcyB0aGUgdG9rZW4uXG4gICAqXG4gICAqIEBzY2hlbWEgTm90aWZpY2F0aW9uVmlldyNBcGlUb2tlblxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIFNsYWNrIGNoYW5uZWwgdG8gd2hpY2ggTW9uZ29EQiBDbG91ZCBzZW5kcyBhbGVydCBub3RpZmljYXRpb25zLiBUaGUgcmVzb3VyY2UgcmVxdWlyZXMgdGhpcyBwYXJhbWV0ZXIgd2hlbiAnXCJub3RpZmljYXRpb25zLnR5cGVOYW1lXCIgOiBcIlNMQUNLXCInLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjQ2hhbm5lbE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5uZWxOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEYXRhZG9nIEFQSSBLZXkgdGhhdCBNb25nb0RCIENsb3VkIG5lZWRzIHRvIHNlbmQgYWxlcnQgbm90aWZpY2F0aW9ucyB0byBEYXRhZG9nLiBZb3UgY2FuIGZpbmQgdGhpcyBBUEkga2V5IGluIHRoZSBEYXRhZG9nIGRhc2hib2FyZC4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJEQVRBRE9HXCInLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjRGF0YWRvZ0FwaUtleVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ0FwaUtleT86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YWRvZyByZWdpb24gdGhhdCBpbmRpY2F0ZXMgd2hpY2ggQVBJIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvciAoVVJMKSB0byB1c2UuIFRoZSByZXNvdXJjZSByZXF1aXJlcyB0aGlzIHBhcmFtZXRlciB3aGVuICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiREFUQURPR1wiJy5cbiAgICpcbiAgICogQHNjaGVtYSBOb3RpZmljYXRpb25WaWV3I0RhdGFkb2dSZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFkb2dSZWdpb24/OiBOb3RpZmljYXRpb25WaWV3RGF0YWRvZ1JlZ2lvbjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIG1pbnV0ZXMgdGhhdCBNb25nb0RCIENsb3VkIHdhaXRzIGFmdGVyIGRldGVjdGluZyBhbiBhbGVydCBjb25kaXRpb24gYmVmb3JlIGl0IHNlbmRzIG91dCB0aGUgZmlyc3Qgbm90aWZpY2F0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjRGVsYXlNaW5cbiAgICovXG4gIHJlYWRvbmx5IGRlbGF5TWluPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbWFpbCBhZGRyZXNzIHRvIHdoaWNoIE1vbmdvREIgQ2xvdWQgc2VuZHMgYWxlcnQgbm90aWZpY2F0aW9ucy4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJFTUFJTFwiJy4gWW91IGRvbid0IG5lZWQgdG8gc2V0IHRoaXMgdmFsdWUgdG8gc2VuZCBlbWFpbHMgdG8gaW5kaXZpZHVhbCBvciBncm91cHMgb2YgTW9uZ29EQiBDbG91ZCB1c2VycyBpbmNsdWRpbmc6XG4gICAqXG4gICAqIC0gc3BlY2lmaWMgTW9uZ29EQiBDbG91ZCB1c2VycyAoJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJVU0VSXCInKVxuICAgKiAtIE1vbmdvREIgQ2xvdWQgdXNlcnMgd2l0aCBzcGVjaWZpYyBwcm9qZWN0IHJvbGVzICgnXCJub3RpZmljYXRpb25zLnR5cGVOYW1lXCIgOiBcIkdST1VQXCInKVxuICAgKiAtIE1vbmdvREIgQ2xvdWQgdXNlcnMgd2l0aCBzcGVjaWZpYyBvcmdhbml6YXRpb24gcm9sZXMgKCdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiT1JHXCInKVxuICAgKiAtIE1vbmdvREIgQ2xvdWQgdGVhbXMgKCdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiVEVBTVwiJylcbiAgICpcbiAgICogVG8gc2VuZCBlbWFpbHMgdG8gb25lIE1vbmdvREIgQ2xvdWQgdXNlciBvciBncm91cGluZyBvZiB1c2Vycywgc2V0IHRoZSAqKm5vdGlmaWNhdGlvbnMuZW1haWxFbmFibGVkKiogcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjRW1haWxBZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBlbWFpbEFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBNb25nb0RCIENsb3VkIHNob3VsZCBzZW5kIGVtYWlsIG5vdGlmaWNhdGlvbnMuIFRoZSByZXNvdXJjZSByZXF1aXJlcyB0aGlzIHBhcmFtZXRlciB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyBoYXZlIGJlZW4gc2V0OlxuICAgKlxuICAgKiAtICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiT1JHXCInXG4gICAqIC0gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJHUk9VUFwiJ1xuICAgKiAtICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiVVNFUlwiJ1xuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjRW1haWxFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbWFpbEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgbWludXRlcyB0byB3YWl0IGJldHdlZW4gc3VjY2Vzc2l2ZSBub3RpZmljYXRpb25zLiBNb25nb0RCIENsb3VkIHNlbmRzIG5vdGlmaWNhdGlvbnMgdW50aWwgc29tZW9uZSBhY2tub3dsZWRnZXMgdGhlIHVuYWNrbm93bGVkZ2VkIGFsZXJ0LlxuICAgKlxuICAgKiBQYWdlckR1dHksIFZpY3Rvck9wcywgYW5kIE9wc0dlbmllIG5vdGlmaWNhdGlvbnMgZG9uJ3QgcmV0dXJuIHRoaXMgZWxlbWVudC4gQ29uZmlndXJlIGFuZCBtYW5hZ2UgdGhlIG5vdGlmaWNhdGlvbiBpbnRlcnZhbCB3aXRoaW4gZWFjaCBvZiB0aG9zZSBzZXJ2aWNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBOb3RpZmljYXRpb25WaWV3I0ludGVydmFsTWluXG4gICAqL1xuICByZWFkb25seSBpbnRlcnZhbE1pbj86IG51bWJlcjtcblxuICAvKipcbiAgICogTWljcm9zb2Z0IFRlYW1zIFdlYmhvb2sgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yIChVUkwpIHRoYXQgTW9uZ29EQiBDbG91ZCBuZWVkcyB0byBzZW5kIHRoaXMgbm90aWZpY2F0aW9uIHZpYSBNaWNyb3NvZnQgVGVhbXMuIFRoZSByZXNvdXJjZSByZXF1aXJlcyB0aGlzIHBhcmFtZXRlciB3aGVuICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiTUlDUk9TT0ZUX1RFQU1TXCInLiBJZiB0aGUgVVJMIGxhdGVyIGJlY29tZXMgaW52YWxpZCwgTW9uZ29EQiBDbG91ZCBzZW5kcyBhbiBlbWFpbCB0byB0aGUgcHJvamVjdCBvd25lcnMuIElmIHRoZSBrZXkgcmVtYWlucyBpbnZhbGlkLCBNb25nb0RCIENsb3VkIHJlbW92ZXMgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgTm90aWZpY2F0aW9uVmlldyNNaWNyb3NvZnRUZWFtc1dlYmhvb2tVcmxcbiAgICovXG4gIHJlYWRvbmx5IG1pY3Jvc29mdFRlYW1zV2ViaG9va1VybD86IHN0cmluZztcblxuICAvKipcbiAgICogTW9iaWxlIHBob25lIG51bWJlciB0byB3aGljaCBNb25nb0RCIENsb3VkIHNlbmRzIGFsZXJ0IG5vdGlmaWNhdGlvbnMuIFRoZSByZXNvdXJjZSByZXF1aXJlcyB0aGlzIHBhcmFtZXRlciB3aGVuICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiU01TXCInLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjTW9iaWxlTnVtYmVyXG4gICAqL1xuICByZWFkb25seSBtb2JpbGVOdW1iZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhpcENoYXQgQVBJIHRva2VuIHRoYXQgTW9uZ29EQiBDbG91ZCBuZWVkcyB0byBzZW5kIGFsZXJ0IG5vdGlmaWNhdGlvbnMgdG8gSGlwQ2hhdC4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJISVBfQ0hBVFwiJ1wiLiBJZiB0aGUgdG9rZW4gbGF0ZXIgYmVjb21lcyBpbnZhbGlkLCBNb25nb0RCIENsb3VkIHNlbmRzIGFuIGVtYWlsIHRvIHRoZSBwcm9qZWN0IG93bmVycy4gSWYgdGhlIHRva2VuIHJlbWFpbnMgaW52YWxpZCwgTW9uZ29EQiBDbG91ZCByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjTm90aWZpY2F0aW9uVG9rZW5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvblRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUEkgS2V5IHRoYXQgTW9uZ29EQiBDbG91ZCBuZWVkcyB0byBzZW5kIHRoaXMgbm90aWZpY2F0aW9uIHZpYSBPcHNnZW5pZS4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJPUFNfR0VOSUVcIicuIElmIHRoZSBrZXkgbGF0ZXIgYmVjb21lcyBpbnZhbGlkLCBNb25nb0RCIENsb3VkIHNlbmRzIGFuIGVtYWlsIHRvIHRoZSBwcm9qZWN0IG93bmVycy4gSWYgdGhlIGtleSByZW1haW5zIGludmFsaWQsIE1vbmdvREIgQ2xvdWQgcmVtb3ZlcyBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBOb3RpZmljYXRpb25WaWV3I09wc0dlbmllQXBpS2V5XG4gICAqL1xuICByZWFkb25seSBvcHNHZW5pZUFwaUtleT86IHN0cmluZztcblxuICAvKipcbiAgICogT3BzZ2VuaWUgcmVnaW9uIHRoYXQgaW5kaWNhdGVzIHdoaWNoIEFQSSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkgdG8gdXNlLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjT3BzR2VuaWVSZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IG9wc0dlbmllUmVnaW9uPzogTm90aWZpY2F0aW9uVmlld09wc0dlbmllUmVnaW9uO1xuXG4gIC8qKlxuICAgKiBGbG93ZG9jayBvcmdhbml6YXRpb24gbmFtZSB0byB3aGljaCBNb25nb0RCIENsb3VkIHNlbmRzIGFsZXJ0IG5vdGlmaWNhdGlvbnMuIFRoaXMgbmFtZSBhcHBlYXJzIGFmdGVyICd3d3cuZmxvd2RvY2suY29tL2FwcC8nIGluIHRoZSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkgcGF0aC4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJGTE9XRE9DS1wiJy5cbiAgICpcbiAgICogQHNjaGVtYSBOb3RpZmljYXRpb25WaWV3I09yZ05hbWVcbiAgICovXG4gIHJlYWRvbmx5IG9yZ05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3QgdGhhdCBjb250YWlucyB0aGUgb25lIG9yIG1vcmUgb3JnYW5pemF0aW9uIG9yIHByb2plY3Qgcm9sZXMgdGhhdCByZWNlaXZlIHRoZSBjb25maWd1cmVkIGFsZXJ0LiBUaGUgcmVzb3VyY2UgcmVxdWlyZXMgdGhpcyBwYXJhbWV0ZXIgd2hlbiAnXCJub3RpZmljYXRpb25zLnR5cGVOYW1lXCIgOiBcIkdST1VQXCInIG9yICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiT1JHXCInLiBJZiB5b3UgaW5jbHVkZSB0aGlzIHBhcmFtZXRlciwgTW9uZ29EQiBDbG91ZCBzZW5kcyBhbGVydHMgb25seSB0byB1c2VycyBhc3NpZ25lZCB0aGUgcm9sZXMgeW91IHNwZWNpZnkgaW4gdGhlIGFycmF5LiBJZiB5b3Ugb21pdCB0aGlzIHBhcmFtZXRlciwgTW9uZ29EQiBDbG91ZCBzZW5kcyBhbGVydHMgdG8gdXNlcnMgYXNzaWduZWQgYW55IHJvbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgTm90aWZpY2F0aW9uVmlldyNSb2xlc1xuICAgKi9cbiAgcmVhZG9ubHkgcm9sZXM/OiBOb3RpZmljYXRpb25WaWV3Um9sZXNbXTtcblxuICAvKipcbiAgICogSGlwQ2hhdCBBUEkgcm9vbSBuYW1lIHRvIHdoaWNoIE1vbmdvREIgQ2xvdWQgc2VuZHMgYWxlcnQgbm90aWZpY2F0aW9ucy4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJISVBfQ0hBVFwiJ1wiLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjUm9vbU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvb21OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYWdlckR1dHkgc2VydmljZSBrZXkgdGhhdCBNb25nb0RCIENsb3VkIG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB2aWEgUGFnZXJEdXR5LiBUaGUgcmVzb3VyY2UgcmVxdWlyZXMgdGhpcyBwYXJhbWV0ZXIgd2hlbiAnXCJub3RpZmljYXRpb25zLnR5cGVOYW1lXCIgOiBcIlBBR0VSX0RVVFlcIicuIElmIHRoZSBrZXkgbGF0ZXIgYmVjb21lcyBpbnZhbGlkLCBNb25nb0RCIENsb3VkIHNlbmRzIGFuIGVtYWlsIHRvIHRoZSBwcm9qZWN0IG93bmVycy4gSWYgdGhlIGtleSByZW1haW5zIGludmFsaWQsIE1vbmdvREIgQ2xvdWQgcmVtb3ZlcyBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBOb3RpZmljYXRpb25WaWV3I1NlcnZpY2VLZXlcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VLZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZ3JlZSBvZiBzZXJpb3VzbmVzcyBnaXZlbiB0byB0aGlzIG5vdGlmaWNhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBOb3RpZmljYXRpb25WaWV3I1NldmVyaXR5XG4gICAqL1xuICByZWFkb25seSBzZXZlcml0eT86IE5vdGlmaWNhdGlvblZpZXdTZXZlcml0eTtcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIE1vbmdvREIgQ2xvdWQgc2hvdWxkIHNlbmQgdGV4dCBtZXNzYWdlIG5vdGlmaWNhdGlvbnMuIFRoZSByZXNvdXJjZSByZXF1aXJlcyB0aGlzIHBhcmFtZXRlciB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyBoYXZlIGJlZW4gc2V0OlxuICAgKlxuICAgKiAtICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiT1JHXCInXG4gICAqIC0gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJHUk9VUFwiJ1xuICAgKiAtICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiVVNFUlwiJ1xuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjU21zRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgc21zRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSAyNC1oZXhhZGVjaW1hbCBkaWdpdCBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIG9uZSBNb25nb0RCIENsb3VkIHRlYW0uIFRoZSByZXNvdXJjZSByZXF1aXJlcyB0aGlzIHBhcmFtZXRlciB3aGVuICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiVEVBTVwiJy5cbiAgICpcbiAgICogQHNjaGVtYSBOb3RpZmljYXRpb25WaWV3I1RlYW1JZFxuICAgKi9cbiAgcmVhZG9ubHkgdGVhbUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBNb25nb0RCIENsb3VkIHRlYW0gdGhhdCByZWNlaXZlcyB0aGlzIG5vdGlmaWNhdGlvbi4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJURUFNXCInLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjVGVhbU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHRlYW1OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGRpc3BsYXlzIHRoZSBhbGVydCBub3RpZmljYXRpb24gdHlwZS5cbiAgICpcbiAgICogQHNjaGVtYSBOb3RpZmljYXRpb25WaWV3I1R5cGVOYW1lXG4gICAqL1xuICByZWFkb25seSB0eXBlTmFtZT86IE5vdGlmaWNhdGlvblZpZXdUeXBlTmFtZTtcblxuICAvKipcbiAgICogTW9uZ29EQiBDbG91ZCB1c2VybmFtZSBvZiB0aGUgcGVyc29uIHRvIHdob20gTW9uZ29EQiBDbG91ZCBzZW5kcyBub3RpZmljYXRpb25zLiBTcGVjaWZ5IG9ubHkgTW9uZ29EQiBDbG91ZCB1c2VycyB3aG8gYmVsb25nIHRvIHRoZSBwcm9qZWN0IHRoYXQgb3ducyB0aGUgYWxlcnQgY29uZmlndXJhdGlvbi4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHRoaXMgcGFyYW1ldGVyIHdoZW4gJ1wibm90aWZpY2F0aW9ucy50eXBlTmFtZVwiIDogXCJVU0VSXCInLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjVXNlcm5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUEkga2V5IHRoYXQgTW9uZ29EQiBDbG91ZCBuZWVkcyB0byBzZW5kIGFsZXJ0IG5vdGlmaWNhdGlvbnMgdG8gU3BsdW5rIE9uLUNhbGwuIFRoZSByZXNvdXJjZSByZXF1aXJlcyB0aGlzIHBhcmFtZXRlciB3aGVuICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiVklDVE9SX09QU1wiJy4gSWYgdGhlIGtleSBsYXRlciBiZWNvbWVzIGludmFsaWQsIE1vbmdvREIgQ2xvdWQgc2VuZHMgYW4gZW1haWwgdG8gdGhlIHByb2plY3Qgb3duZXJzLiBJZiB0aGUga2V5IHJlbWFpbnMgaW52YWxpZCwgTW9uZ29EQiBDbG91ZCByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjVmljdG9yT3BzQXBpS2V5XG4gICAqL1xuICByZWFkb25seSB2aWN0b3JPcHNBcGlLZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJvdXRpbmcga2V5IHRoYXQgTW9uZ29EQiBDbG91ZCBuZWVkcyB0byBzZW5kIGFsZXJ0IG5vdGlmaWNhdGlvbnMgdG8gU3BsdW5rIE9uLUNhbGwuIFRoZSByZXNvdXJjZSByZXF1aXJlcyB0aGlzIHBhcmFtZXRlciB3aGVuICdcIm5vdGlmaWNhdGlvbnMudHlwZU5hbWVcIiA6IFwiVklDVE9SX09QU1wiJy4gSWYgdGhlIGtleSBsYXRlciBiZWNvbWVzIGludmFsaWQsIE1vbmdvREIgQ2xvdWQgc2VuZHMgYW4gZW1haWwgdG8gdGhlIHByb2plY3Qgb3duZXJzLiBJZiB0aGUga2V5IHJlbWFpbnMgaW52YWxpZCwgTW9uZ29EQiBDbG91ZCByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjVmljdG9yT3BzUm91dGluZ0tleVxuICAgKi9cbiAgcmVhZG9ubHkgdmljdG9yT3BzUm91dGluZ0tleT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZmllbGQgZm9yIHlvdXIgd2ViaG9vayBzZWNyZXQuXG4gICAqXG4gICAqIEBzY2hlbWEgTm90aWZpY2F0aW9uVmlldyNXZWJob29rU2VjcmV0XG4gICAqL1xuICByZWFkb25seSB3ZWJob29rU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBZb3VyIHdlYmhvb2sgVVJMLlxuICAgKlxuICAgKiBAc2NoZW1hIE5vdGlmaWNhdGlvblZpZXcjV2ViaG9va1VybFxuICAgKi9cbiAgcmVhZG9ubHkgd2ViaG9va1VybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnTm90aWZpY2F0aW9uVmlldycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fTm90aWZpY2F0aW9uVmlldyhcbiAgb2JqOiBOb3RpZmljYXRpb25WaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQXBpVG9rZW46IG9iai5hcGlUb2tlbixcbiAgICBDaGFubmVsTmFtZTogb2JqLmNoYW5uZWxOYW1lLFxuICAgIERhdGFkb2dBcGlLZXk6IG9iai5kYXRhZG9nQXBpS2V5LFxuICAgIERhdGFkb2dSZWdpb246IG9iai5kYXRhZG9nUmVnaW9uLFxuICAgIERlbGF5TWluOiBvYmouZGVsYXlNaW4sXG4gICAgRW1haWxBZGRyZXNzOiBvYmouZW1haWxBZGRyZXNzLFxuICAgIEVtYWlsRW5hYmxlZDogb2JqLmVtYWlsRW5hYmxlZCxcbiAgICBJbnRlcnZhbE1pbjogb2JqLmludGVydmFsTWluLFxuICAgIE1pY3Jvc29mdFRlYW1zV2ViaG9va1VybDogb2JqLm1pY3Jvc29mdFRlYW1zV2ViaG9va1VybCxcbiAgICBNb2JpbGVOdW1iZXI6IG9iai5tb2JpbGVOdW1iZXIsXG4gICAgTm90aWZpY2F0aW9uVG9rZW46IG9iai5ub3RpZmljYXRpb25Ub2tlbixcbiAgICBPcHNHZW5pZUFwaUtleTogb2JqLm9wc0dlbmllQXBpS2V5LFxuICAgIE9wc0dlbmllUmVnaW9uOiBvYmoub3BzR2VuaWVSZWdpb24sXG4gICAgT3JnTmFtZTogb2JqLm9yZ05hbWUsXG4gICAgUm9sZXM6IG9iai5yb2xlcz8ubWFwKCh5KSA9PiB5KSxcbiAgICBSb29tTmFtZTogb2JqLnJvb21OYW1lLFxuICAgIFNlcnZpY2VLZXk6IG9iai5zZXJ2aWNlS2V5LFxuICAgIFNldmVyaXR5OiBvYmouc2V2ZXJpdHksXG4gICAgU21zRW5hYmxlZDogb2JqLnNtc0VuYWJsZWQsXG4gICAgVGVhbUlkOiBvYmoudGVhbUlkLFxuICAgIFRlYW1OYW1lOiBvYmoudGVhbU5hbWUsXG4gICAgVHlwZU5hbWU6IG9iai50eXBlTmFtZSxcbiAgICBVc2VybmFtZTogb2JqLnVzZXJuYW1lLFxuICAgIFZpY3Rvck9wc0FwaUtleTogb2JqLnZpY3Rvck9wc0FwaUtleSxcbiAgICBWaWN0b3JPcHNSb3V0aW5nS2V5OiBvYmoudmljdG9yT3BzUm91dGluZ0tleSxcbiAgICBXZWJob29rU2VjcmV0OiBvYmoud2ViaG9va1NlY3JldCxcbiAgICBXZWJob29rVXJsOiBvYmoud2ViaG9va1VybCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBJbnRlZ2VyVGhyZXNob2xkVmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnZXJUaHJlc2hvbGRWaWV3IHtcbiAgLyoqXG4gICAqIENvbXBhcmlzb24gb3BlcmF0b3IgdG8gYXBwbHkgd2hlbiBjaGVja2luZyB0aGUgY3VycmVudCBtZXRyaWMgdmFsdWUuXG4gICAqXG4gICAqIEBzY2hlbWEgSW50ZWdlclRocmVzaG9sZFZpZXcjT3BlcmF0b3JcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdG9yPzogSW50ZWdlclRocmVzaG9sZFZpZXdPcGVyYXRvcjtcblxuICAvKipcbiAgICogVmFsdWUgb2YgbWV0cmljIHRoYXQsIHdoZW4gZXhjZWVkZWQsIHRyaWdnZXJzIGFuIGFsZXJ0LlxuICAgKlxuICAgKiBAc2NoZW1hIEludGVnZXJUaHJlc2hvbGRWaWV3I1RocmVzaG9sZFxuICAgKi9cbiAgcmVhZG9ubHkgdGhyZXNob2xkPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbGVtZW50IHVzZWQgdG8gZXhwcmVzcyB0aGUgcXVhbnRpdHkuIFRoaXMgY2FuIGJlIGFuIGVsZW1lbnQgb2YgdGltZSwgc3RvcmFnZSBjYXBhY2l0eSwgYW5kIHRoZSBsaWtlLlxuICAgKlxuICAgKiBAc2NoZW1hIEludGVnZXJUaHJlc2hvbGRWaWV3I1VuaXRzXG4gICAqL1xuICByZWFkb25seSB1bml0cz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSW50ZWdlclRocmVzaG9sZFZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ludGVnZXJUaHJlc2hvbGRWaWV3KFxuICBvYmo6IEludGVnZXJUaHJlc2hvbGRWaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgT3BlcmF0b3I6IG9iai5vcGVyYXRvcixcbiAgICBUaHJlc2hvbGQ6IG9iai50aHJlc2hvbGQsXG4gICAgVW5pdHM6IG9iai51bml0cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSB0YXJnZXQgb2JqZWN0IHRoYXQgTW9uZ29EQiBDbG91ZCBjaGVja3MuIFRoZSBwYXJhbWV0ZXIgbXVzdCBtYXRjaCBhbGwgcnVsZXMgZm9yIE1vbmdvREIgQ2xvdWQgdG8gY2hlY2sgZm9yIGFsZXJ0IGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBzY2hlbWEgTWF0Y2hlckZpZWxkTmFtZVxuICovXG5leHBvcnQgZW51bSBNYXRjaGVyRmllbGROYW1lIHtcbiAgLyoqIENMVVNURVJfTkFNRSAqL1xuICBDTFVTVEVSX05BTUUgPSBcIkNMVVNURVJfTkFNRVwiLFxuICAvKiogSE9TVE5BTUUgKi9cbiAgSE9TVE5BTUUgPSBcIkhPU1ROQU1FXCIsXG4gIC8qKiBIT1NUTkFNRV9BTkRfUE9SVCAqL1xuICBIT1NUTkFNRV9BTkRfUE9SVCA9IFwiSE9TVE5BTUVfQU5EX1BPUlRcIixcbiAgLyoqIFBPUlQgKi9cbiAgUE9SVCA9IFwiUE9SVFwiLFxuICAvKiogUkVQTElDQV9TRVRfTkFNRSAqL1xuICBSRVBMSUNBX1NFVF9OQU1FID0gXCJSRVBMSUNBX1NFVF9OQU1FXCIsXG4gIC8qKiBTSEFSRF9OQU1FICovXG4gIFNIQVJEX05BTUUgPSBcIlNIQVJEX05BTUVcIixcbiAgLyoqIFRZUEVfTkFNRSAqL1xuICBUWVBFX05BTUUgPSBcIlRZUEVfTkFNRVwiLFxuICAvKiogQVBQTElDQVRJT05fSUQgKi9cbiAgQVBQTElDQVRJT05fSUQgPSBcIkFQUExJQ0FUSU9OX0lEXCIsXG4gIC8qKiBJTlNUQU5DRV9OQU1FICovXG4gIElOU1RBTkNFX05BTUUgPSBcIklOU1RBTkNFX05BTUVcIixcbiAgLyoqIFBST0NFU1NPUl9OQU1FICovXG4gIFBST0NFU1NPUl9OQU1FID0gXCJQUk9DRVNTT1JfTkFNRVwiLFxufVxuXG4vKipcbiAqIENvbXBhcmlzb24gb3BlcmF0b3IgdG8gYXBwbHkgd2hlbiBjaGVja2luZyB0aGUgY3VycmVudCBtZXRyaWMgdmFsdWUgYWdhaW5zdCAqKm1hdGNoZXJbbl0udmFsdWUqKi5cbiAqXG4gKiBAc2NoZW1hIE1hdGNoZXJPcGVyYXRvclxuICovXG5leHBvcnQgZW51bSBNYXRjaGVyT3BlcmF0b3Ige1xuICAvKiogRVFVQUxTICovXG4gIEVRVUFMUyA9IFwiRVFVQUxTXCIsXG4gIC8qKiBDT05UQUlOUyAqL1xuICBDT05UQUlOUyA9IFwiQ09OVEFJTlNcIixcbiAgLyoqIFNUQVJUU19XSVRIICovXG4gIFNUQVJUU19XSVRIID0gXCJTVEFSVFNfV0lUSFwiLFxuICAvKiogRU5EU19XSVRIICovXG4gIEVORFNfV0lUSCA9IFwiRU5EU19XSVRIXCIsXG4gIC8qKiBOT1RfRVFVQUxTICovXG4gIE5PVF9FUVVBTFMgPSBcIk5PVF9FUVVBTFNcIixcbiAgLyoqIE5PVF9DT05UQUlOUyAqL1xuICBOT1RfQ09OVEFJTlMgPSBcIk5PVF9DT05UQUlOU1wiLFxuICAvKiogUkVHRVggKi9cbiAgUkVHRVggPSBcIlJFR0VYXCIsXG59XG5cbi8qKlxuICogTW9uZ29EQiBDbG91ZCBjb21wdXRlcyB0aGUgY3VycmVudCBtZXRyaWMgdmFsdWUgYXMgYW4gYXZlcmFnZS5cbiAqXG4gKiBAc2NoZW1hIE1ldHJpY1RocmVzaG9sZFZpZXdNb2RlXG4gKi9cbmV4cG9ydCBlbnVtIE1ldHJpY1RocmVzaG9sZFZpZXdNb2RlIHtcbiAgLyoqIEFWRVJBR0UgKi9cbiAgQVZFUkFHRSA9IFwiQVZFUkFHRVwiLFxufVxuXG4vKipcbiAqIENvbXBhcmlzb24gb3BlcmF0b3IgdG8gYXBwbHkgd2hlbiBjaGVja2luZyB0aGUgY3VycmVudCBtZXRyaWMgdmFsdWUuXG4gKlxuICogQHNjaGVtYSBNZXRyaWNUaHJlc2hvbGRWaWV3T3BlcmF0b3JcbiAqL1xuZXhwb3J0IGVudW0gTWV0cmljVGhyZXNob2xkVmlld09wZXJhdG9yIHtcbiAgLyoqIEdSRUFURVJfVEhBTiAqL1xuICBHUkVBVEVSX1RIQU4gPSBcIkdSRUFUR