UNPKG

cdktg

Version:
164 lines 24.8 kB
"use strict"; var _a, _b; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataBreachProbability = exports.ExploitationImpact = exports.ExploitationLikelihood = exports.Severity = exports.Stride = exports.RiskFunction = exports.RiskCategory = exports.Risk = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const data_asset_1 = require("./data-asset"); const resource_1 = require("./resource"); const shared_runtime_1 = require("./shared-runtime"); const technical_asset_1 = require("./technical-asset"); const trust_boundary_1 = require("./trust-boundary"); class Risk { constructor(id, props) { this.id = id; this.severity = props.severity; this.exploitationLikelihood = props.exploitationLikelihood; this.exploitationImpact = props.exploitationImpact; this.dataBreachProbability = props.dataBreachProbability; this.dataBreachTechnicalAssets = props.dataBreachTechnicalAssets; this.mostRelevantTechnicalAsset = props.mostRelevantTechnicalAsset; this.mostRelevantDataAsset = props.mostRelevantDataAsset; this.mostRelevantCommunicationLink = props.mostRelevantCommunicationLink; this.mostRelevantTrustBoundary = props.mostRelevantTrustBoundary; this.mostRelevantSharedRuntime = props.mostRelevantSharedRuntime; } /** * @internal */ _toThreagile() { return { [this.id]: { severity: this.severity, exploitation_likelihood: this.exploitationLikelihood, exploitation_impact: this.exploitationImpact, data_breach_probability: this.dataBreachProbability, data_breach_technical_assets: this.dataBreachTechnicalAssets.map((a) => a.id), most_relevant_data_asset: this.mostRelevantDataAsset?.id, most_relevant_technical_asset: this.mostRelevantTechnicalAsset?.id, most_relevant_communication_link: this.mostRelevantCommunicationLink?.id, most_relevant_trust_boundary: this.mostRelevantTrustBoundary?.id, most_relevant_shared_runtime: this.mostRelevantSharedRuntime?.id, }, }; } } exports.Risk = Risk; _a = JSII_RTTI_SYMBOL_1; Risk[_a] = { fqn: "cdktg.Risk", version: "0.0.40" }; class RiskCategory extends resource_1.Resource { constructor(scope, id, props) { super(scope, id, props); this.impact = props.impact; this.asvs = props.asvs; this.cheatSheet = props.cheatSheet; this.action = props.action; this.mitigation = props.mitigation; this.check = props.check; this.function = props.function; this.stride = props.stride; this.detectionLogic = props.detectionLogic; this.riskAssessment = props.riskAssessment; this.falsePositives = props.falsePositives; this.modelFailurePossibleReason = props.modelFailurePossibleReason; this.cwe = props.cwe; this.risks = new Array(); } identifiedAtDataAsset(target, options) { this.identifiedAtResource(target, options); } identifiedAtTechnicalAsset(target, options) { this.identifiedAtResource(target, options); } identifiedAtTrustBoundary(target, options) { this.identifiedAtResource(target, options); } identifiedAtSharedRuntime(target, options) { this.identifiedAtResource(target, options); } addIdentifiedRisk(risk) { this.risks.push(risk); } identifiedAtResource(target, options) { this.addIdentifiedRisk(new Risk(`<b>${this.node.id}</b> risk at <b>${target.node.id}</b>`, { ...options, mostRelevantDataAsset: target instanceof data_asset_1.DataAsset ? target : undefined, mostRelevantTechnicalAsset: target instanceof technical_asset_1.TechnicalAsset ? target : undefined, mostRelevantTrustBoundary: target instanceof trust_boundary_1.TrustBoundary ? target : undefined, mostRelevantSharedRuntime: target instanceof shared_runtime_1.SharedRuntime ? target : undefined, })); } /** * @internal */ _toThreagile() { const threagile = { [this.title]: { id: this.id, description: this.description, impact: this.impact, asvs: this.asvs, cheat_sheet: this.cheatSheet, action: this.action, mitigation: this.mitigation, check: this.check, function: this.function, stride: this.stride, detection_logic: this.detectionLogic, risk_assessment: this.riskAssessment, false_positives: this.falsePositives, model_failure_possible_reason: this.modelFailurePossibleReason ?? false, cwe: this.cwe, }, }; threagile[this.node.id].risks_identified = this.risks.reduce((prev, current) => Object.assign(prev, current._toThreagile()), {}); return threagile; } } exports.RiskCategory = RiskCategory; _b = JSII_RTTI_SYMBOL_1; RiskCategory[_b] = { fqn: "cdktg.RiskCategory", version: "0.0.40" }; var RiskFunction; (function (RiskFunction) { RiskFunction["BUSINESS_SIDE"] = "business-side"; RiskFunction["ARCHITECTURE"] = "architecture"; RiskFunction["DEVELOPMENT"] = "development"; RiskFunction["OPERATIONS"] = "operations"; })(RiskFunction = exports.RiskFunction || (exports.RiskFunction = {})); var Stride; (function (Stride) { Stride["SPOOFING"] = "spoofing"; Stride["TAMPERING"] = "tampering"; Stride["REPUDIATION"] = "repudiation"; Stride["INFORMATION_DISCLOSURE"] = "information-disclosure"; Stride["DENIAL_OF_SERVICE"] = "denial-of-service"; Stride["ELEVATION_OF_PRIVILEGE"] = "elevation-of-privilege"; })(Stride = exports.Stride || (exports.Stride = {})); var Severity; (function (Severity) { Severity["LOW"] = "low"; Severity["MEDIUM"] = "medium"; Severity["ELEVATED"] = "elevated"; Severity["HIGH"] = "high"; Severity["CRITICAL"] = "critical"; })(Severity = exports.Severity || (exports.Severity = {})); var ExploitationLikelihood; (function (ExploitationLikelihood) { ExploitationLikelihood["UNLIKELY"] = "unlikely"; ExploitationLikelihood["LIKELY"] = "likely"; ExploitationLikelihood["VERY_LIKELY"] = "very-likely"; ExploitationLikelihood["FREQUENT"] = "frequent"; })(ExploitationLikelihood = exports.ExploitationLikelihood || (exports.ExploitationLikelihood = {})); var ExploitationImpact; (function (ExploitationImpact) { ExploitationImpact["LOW"] = "low"; ExploitationImpact["MEDIUM"] = "medium"; ExploitationImpact["HIGH"] = "high"; ExploitationImpact["VERY_HIGH"] = "very-high"; })(ExploitationImpact = exports.ExploitationImpact || (exports.ExploitationImpact = {})); var DataBreachProbability; (function (DataBreachProbability) { DataBreachProbability["IMPROBABLE"] = "improbable"; DataBreachProbability["POSSIBLE"] = "possible"; DataBreachProbability["PROBABLE"] = "probable"; })(DataBreachProbability = exports.DataBreachProbability || (exports.DataBreachProbability = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlzay1jYXRlZ29yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yaXNrLWNhdGVnb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsNkNBQXlDO0FBRXpDLHlDQUFxRDtBQUNyRCxxREFBaUQ7QUFFakQsdURBQW1EO0FBQ25ELHFEQUFpRDtBQWtCakQsTUFBYSxJQUFJO0lBYWYsWUFBWSxFQUFVLEVBQUUsS0FBZ0I7UUFDdEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztRQUMzRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ25ELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUM7UUFDekQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztRQUNqRSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixDQUFDO1FBQ25FLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUM7UUFDekQsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQztRQUN6RSxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixDQUFDO1FBQ2pFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNqQixPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2Qix1QkFBdUIsRUFBRSxJQUFJLENBQUMsc0JB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QUE7SUFDakIscURBQTJCLENBQUE7SUFDM0IsK0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUxXLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBS2pDO0FBRUQsSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzVCLGlDQUFXLENBQUE7SUFDWCx1Q0FBaUIsQ0FBQTtJQUNqQixtQ0FBYSxDQUFBO0lBQ2IsNkNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUxXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBSzdCO0FBRUQsSUFBWSxxQkFJWDtBQUpELFdBQVkscUJBQXFCO0lBQy9CLGtEQUF5QixDQUFBO0lBQ3pCLDhDQUFxQixDQUFBO0lBQ3JCLDhDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQUloQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uIH0gZnJvbSBcIi4vY29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHsgRGF0YUFzc2V0IH0gZnJvbSBcIi4vZGF0YS1hc3NldFwiO1xuXG5pbXBvcnQgeyBSZXNvdXJjZSwgUmVzb3VyY2VQcm9wcyB9IGZyb20gXCIuL3Jlc291cmNlXCI7XG5pbXBvcnQgeyBTaGFyZWRSdW50aW1lIH0gZnJvbSBcIi4vc2hhcmVkLXJ1bnRpbWVcIjtcbmltcG9ydCAqIGFzIHNwZWMgZnJvbSBcIi4vc3BlYy90aHJlYXRnaWxlLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgVGVjaG5pY2FsQXNzZXQgfSBmcm9tIFwiLi90ZWNobmljYWwtYXNzZXRcIjtcbmltcG9ydCB7IFRydXN0Qm91bmRhcnkgfSBmcm9tIFwiLi90cnVzdC1ib3VuZGFyeVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJpc2tPcHRpb25zIHtcbiAgcmVhZG9ubHkgc2V2ZXJpdHk6IFNldmVyaXR5O1xuICByZWFkb25seSBleHBsb2l0YXRpb25MaWtlbGlob29kOiBFeHBsb2l0YXRpb25MaWtlbGlob29kO1xuICByZWFkb25seSBleHBsb2l0YXRpb25JbXBhY3Q6IEV4cGxvaXRhdGlvbkltcGFjdDtcbiAgcmVhZG9ubHkgZGF0YUJyZWFjaFByb2JhYmlsaXR5OiBEYXRhQnJlYWNoUHJvYmFiaWxpdHk7XG4gIHJlYWRvbmx5IGRhdGFCcmVhY2hUZWNobmljYWxBc3NldHM6IFRlY2huaWNhbEFzc2V0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmlza1Byb3BzIGV4dGVuZHMgUmlza09wdGlvbnMge1xuICByZWFkb25seSBtb3N0UmVsZXZhbnRUZWNobmljYWxBc3NldD86IFRlY2huaWNhbEFzc2V0O1xuICByZWFkb25seSBtb3N0UmVsZXZhbnREYXRhQXNzZXQ/OiBEYXRhQXNzZXQ7XG4gIHJlYWRvbmx5IG1vc3RSZWxldmFudENvbW11bmljYXRpb25MaW5rPzogQ29tbXVuaWNhdGlvbjtcbiAgcmVhZG9ubHkgbW9zdFJlbGV2YW50VHJ1c3RCb3VuZGFyeT86IFRydXN0Qm91bmRhcnk7XG4gIHJlYWRvbmx5IG1vc3RSZWxldmFudFNoYXJlZFJ1bnRpbWU/OiBTaGFyZWRSdW50aW1lO1xufVxuXG5leHBvcnQgY2xhc3MgUmlzayB7XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2V2ZXJpdHk6IFNldmVyaXR5O1xuICBwdWJsaWMgcmVhZG9ubHkgZXhwbG9pdGF0aW9uTGlrZWxpaG9vZDogRXhwbG9pdGF0aW9uTGlrZWxpaG9vZDtcbiAgcHVibGljIHJlYWRvbmx5IGV4cGxvaXRhdGlvbkltcGFjdDogRXhwbG9pdGF0aW9uSW1wYWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YUJyZWFjaFByb2JhYmlsaXR5OiBEYXRhQnJlYWNoUHJvYmFiaWxpdHk7XG4gIHB1YmxpYyByZWFkb25seSBkYXRhQnJlYWNoVGVjaG5pY2FsQXNzZXRzOiBUZWNobmljYWxBc3NldFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9zdFJlbGV2YW50VGVjaG5pY2FsQXNzZXQ/OiBUZWNobmljYWxBc3NldDtcbiAgcHVibGljIHJlYWRvbmx5IG1vc3RSZWxldmFudERhdGFBc3NldD86IERhdGFBc3NldDtcbiAgcHVibGljIHJlYWRvbmx5IG1vc3RSZWxldmFudENvbW11bmljYXRpb25MaW5rPzogQ29tbXVuaWNhdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IG1vc3RSZWxldmFudFRydXN0Qm91bmRhcnk/OiBUcnVzdEJvdW5kYXJ5O1xuICBwdWJsaWMgcmVhZG9ubHkgbW9zdFJlbGV2YW50U2hhcmVkUnVudGltZT86IFNoYXJlZFJ1bnRpbWU7XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgcHJvcHM6IFJpc2tQcm9wcykge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnNldmVyaXR5ID0gcHJvcHMuc2V2ZXJpdHk7XG4gICAgdGhpcy5leHBsb2l0YXRpb25MaWtlbGlob29kID0gcHJvcHMuZXhwbG9pdGF0aW9uTGlrZWxpaG9vZDtcbiAgICB0aGlzLmV4cGxvaXRhdGlvbkltcGFjdCA9IHByb3BzLmV4cGxvaXRhdGlvbkltcGFjdDtcbiAgICB0aGlzLmRhdGFCcmVhY2hQcm9iYWJpbGl0eSA9IHByb3BzLmRhdGFCcmVhY2hQcm9iYWJpbGl0eTtcbiAgICB0aGlzLmRhdGFCcmVhY2hUZWNobmljYWxBc3NldHMgPSBwcm9wcy5kYXRhQnJlYWNoVGVjaG5pY2FsQXNzZXRzO1xuICAgIHRoaXMubW9zdFJlbGV2YW50VGVjaG5pY2FsQXNzZXQgPSBwcm9wcy5tb3N0UmVsZXZhbnRUZWNobmljYWxBc3NldDtcbiAgICB0aGlzLm1vc3RSZWxldmFudERhdGFBc3NldCA9IHByb3BzLm1vc3RSZWxldmFudERhdGFBc3NldDtcbiAgICB0aGlzLm1vc3RSZWxldmFudENvbW11bmljYXRpb25MaW5rID0gcHJvcHMubW9zdFJlbGV2YW50Q29tbXVuaWNhdGlvbkxpbms7XG4gICAgdGhpcy5tb3N0UmVsZXZhbnRUcnVzdEJvdW5kYXJ5ID0gcHJvcHMubW9zdFJlbGV2YW50VHJ1c3RCb3VuZGFyeTtcbiAgICB0aGlzLm1vc3RSZWxldmFudFNoYXJlZFJ1bnRpbWUgPSBwcm9wcy5tb3N0UmVsZXZhbnRTaGFyZWRSdW50aW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b1RocmVhZ2lsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMuaWRdOiB7XG4gICAgICAgIHNldmVyaXR5OiB0aGlzLnNldmVyaXR5LFxuICAgICAgICBleHBsb2l0YXRpb25fbGlrZWxpaG9vZDogdGhpcy5leHBsb2l0YXRpb25MaWtlbGlob29kLFxuICAgICAgICBleHBsb2l0YXRpb25faW1wYWN0OiB0aGlzLmV4cGxvaXRhdGlvbkltcGFjdCxcbiAgICAgICAgZGF0YV9icmVhY2hfcHJvYmFiaWxpdHk6IHRoaXMuZGF0YUJyZWFjaFByb2JhYmlsaXR5LFxuICAgICAgICBkYXRhX2JyZWFjaF90ZWNobmljYWxfYXNzZXRzOiB0aGlzLmRhdGFCcmVhY2hUZWNobmljYWxBc3NldHMubWFwKFxuICAgICAgICAgIChhKSA9PiBhLmlkXG4gICAgICAgICksXG4gICAgICAgIG1vc3RfcmVsZXZhbnRfZGF0YV9hc3NldDogdGhpcy5tb3N0UmVsZXZhbnREYXRhQXNzZXQ/LmlkLFxuICAgICAgICBtb3N0X3JlbGV2YW50X3RlY2huaWNhbF9hc3NldDogdGhpcy5tb3N0UmVsZXZhbnRUZWNobmljYWxBc3NldD8uaWQsXG4gICAgICAgIG1vc3RfcmVsZXZhbnRfY29tbXVuaWNhdGlvbl9saW5rOlxuICAgICAgICAgIHRoaXMubW9zdFJlbGV2YW50Q29tbXVuaWNhdGlvbkxpbms/LmlkLFxuICAgICAgICBtb3N0X3JlbGV2YW50X3RydXN0X2JvdW5kYXJ5OiB0aGlzLm1vc3RSZWxldmFudFRydXN0Qm91bmRhcnk/LmlkLFxuICAgICAgICBtb3N0X3JlbGV2YW50X3NoYXJlZF9ydW50aW1lOiB0aGlzLm1vc3RSZWxldmFudFNoYXJlZFJ1bnRpbWU/LmlkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmlza0NhdGVnb3J5UHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgcmVhZG9ubHkgaW1wYWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFzdnM6IHN0cmluZztcbiAgcmVhZG9ubHkgY2hlYXRTaGVldDogc3RyaW5nO1xuICByZWFkb25seSBhY3Rpb246IHN0cmluZztcbiAgcmVhZG9ubHkgbWl0aWdhdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBjaGVjazogc3RyaW5nO1xuICByZWFkb25seSBmdW5jdGlvbjogUmlza0Z1bmN0aW9uO1xuICByZWFkb25seSBzdHJpZGU6IFN0cmlkZTtcbiAgcmVhZG9ubHkgZGV0ZWN0aW9uTG9naWM6IHN0cmluZztcbiAgcmVhZG9ubHkgcmlza0Fzc2Vzc21lbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZmFsc2VQb3NpdGl2ZXM6IHN0cmluZztcbiAgcmVhZG9ubHkgbW9kZWxGYWlsdXJlUG9zc2libGVSZWFzb24/OiBib29sZWFuO1xuICByZWFkb25seSBjd2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFJpc2tDYXRlZ29yeSBleHRlbmRzIFJlc291cmNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGltcGFjdDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgYXN2czogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2hlYXRTaGVldDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtaXRpZ2F0aW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjaGVjazogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZnVuY3Rpb246IFJpc2tGdW5jdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IHN0cmlkZTogU3RyaWRlO1xuICBwdWJsaWMgcmVhZG9ubHkgZGV0ZWN0aW9uTG9naWM6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJpc2tBc3Nlc3NtZW50OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBmYWxzZVBvc2l0aXZlczogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWxGYWlsdXJlUG9zc2libGVSZWFzb24/OiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgY3dlOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByaXNrczogUmlza1tdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSaXNrQ2F0ZWdvcnlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5pbXBhY3QgPSBwcm9wcy5pbXBhY3Q7XG4gICAgdGhpcy5hc3ZzID0gcHJvcHMuYXN2cztcbiAgICB0aGlzLmNoZWF0U2hlZXQgPSBwcm9wcy5jaGVhdFNoZWV0O1xuICAgIHRoaXMuYWN0aW9uID0gcHJvcHMuYWN0aW9uO1xuICAgIHRoaXMubWl0aWdhdGlvbiA9IHByb3BzLm1pdGlnYXRpb247XG4gICAgdGhpcy5jaGVjayA9IHByb3BzLmNoZWNrO1xuICAgIHRoaXMuZnVuY3Rpb24gPSBwcm9wcy5mdW5jdGlvbjtcbiAgICB0aGlzLnN0cmlkZSA9IHByb3BzLnN0cmlkZTtcbiAgICB0aGlzLmRldGVjdGlvbkxvZ2ljID0gcHJvcHMuZGV0ZWN0aW9uTG9naWM7XG4gICAgdGhpcy5yaXNrQXNzZXNzbWVudCA9IHByb3BzLnJpc2tBc3Nlc3NtZW50O1xuICAgIHRoaXMuZmFsc2VQb3NpdGl2ZXMgPSBwcm9wcy5mYWxzZVBvc2l0aXZlcztcbiAgICB0aGlzLm1vZGVsRmFpbHVyZVBvc3NpYmxlUmVhc29uID0gcHJvcHMubW9kZWxGYWlsdXJlUG9zc2libGVSZWFzb247XG4gICAgdGhpcy5jd2UgPSBwcm9wcy5jd2U7XG5cbiAgICB0aGlzLnJpc2tzID0gbmV3IEFycmF5PFJpc2s+KCk7XG4gIH1cblxuICBwdWJsaWMgaWRlbnRpZmllZEF0RGF0YUFzc2V0KHRhcmdldDogRGF0YUFzc2V0LCBvcHRpb25zOiBSaXNrT3B0aW9ucykge1xuICAgIHRoaXMuaWRlbnRpZmllZEF0UmVzb3VyY2UodGFyZ2V0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBpZGVudGlmaWVkQXRUZWNobmljYWxBc3NldChcbiAgICB0YXJnZXQ6IFRlY2huaWNhbEFzc2V0LFxuICAgIG9wdGlvbnM6IFJpc2tPcHRpb25zXG4gICkge1xuICAgIHRoaXMuaWRlbnRpZmllZEF0UmVzb3VyY2UodGFyZ2V0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBpZGVudGlmaWVkQXRUcnVzdEJvdW5kYXJ5KFxuICAgIHRhcmdldDogU2hhcmVkUnVudGltZSxcbiAgICBvcHRpb25zOiBSaXNrT3B0aW9uc1xuICApIHtcbiAgICB0aGlzLmlkZW50aWZpZWRBdFJlc291cmNlKHRhcmdldCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgaWRlbnRpZmllZEF0U2hhcmVkUnVudGltZShcbiAgICB0YXJnZXQ6IFNoYXJlZFJ1bnRpbWUsXG4gICAgb3B0aW9uczogUmlza09wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5pZGVudGlmaWVkQXRSZXNvdXJjZSh0YXJnZXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZElkZW50aWZpZWRSaXNrKHJpc2s6IFJpc2spIHtcbiAgICB0aGlzLnJpc2tzLnB1c2gocmlzayk7XG4gIH1cblxuICBwcml2YXRlIGlkZW50aWZpZWRBdFJlc291cmNlKHRhcmdldDogUmVzb3VyY2UsIG9wdGlvbnM6IFJpc2tPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRJZGVudGlmaWVkUmlzayhcbiAgICAgIG5ldyBSaXNrKGA8Yj4ke3RoaXMubm9kZS5pZH08L2I+IHJpc2sgYXQgPGI+JHt0YXJnZXQubm9kZS5pZH08L2I+YCwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBtb3N0UmVsZXZhbnREYXRhQXNzZXQ6IHRhcmdldCBpbnN0YW5jZW9mIERhdGFBc3NldCA/IHRhcmdldCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbW9zdFJlbGV2YW50VGVjaG5pY2FsQXNzZXQ6XG4gICAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgVGVjaG5pY2FsQXNzZXQgPyB0YXJnZXQgOiB1bmRlZmluZWQsXG4gICAgICAgIG1vc3RSZWxldmFudFRydXN0Qm91bmRhcnk6XG4gICAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgVHJ1c3RCb3VuZGFyeSA/IHRhcmdldCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbW9zdFJlbGV2YW50U2hhcmVkUnVudGltZTpcbiAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBTaGFyZWRSdW50aW1lID8gdGFyZ2V0IDogdW5kZWZpbmVkLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b1RocmVhZ2lsZSgpOiBzcGVjLlRocmVhZ2lsZVtcImluZGl2aWR1YWxfcmlza19jYXRlZ29yaWVzXCJdIHtcbiAgICBjb25zdCB0aHJlYWdpbGU6IGFueSA9IHtcbiAgICAgIFt0aGlzLnRpdGxlXToge1xuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgIGltcGFjdDogdGhpcy5pbXBhY3QsXG4gICAgICAgIGFzdnM6IHRoaXMuYXN2cyxcbiAgICAgICAgY2hlYXRfc2hlZXQ6IHRoaXMuY2hlYXRTaGVldCxcbiAgICAgICAgYWN0aW9uOiB0aGlzLmFjdGlvbixcbiAgICAgICAgbWl0aWdhdGlvbjogdGhpcy5taXRpZ2F0aW9uLFxuICAgICAgICBjaGVjazogdGhpcy5jaGVjayxcbiAgICAgICAgZnVuY3Rpb246IHRoaXMuZnVuY3Rpb24sXG4gICAgICAgIHN0cmlkZTogdGhpcy5zdHJpZGUsXG4gICAgICAgIGRldGVjdGlvbl9sb2dpYzogdGhpcy5kZXRlY3Rpb25Mb2dpYyxcbiAgICAgICAgcmlza19hc3Nlc3NtZW50OiB0aGlzLnJpc2tBc3Nlc3NtZW50LFxuICAgICAgICBmYWxzZV9wb3NpdGl2ZXM6IHRoaXMuZmFsc2VQb3NpdGl2ZXMsXG4gICAgICAgIG1vZGVsX2ZhaWx1cmVfcG9zc2libGVfcmVhc29uOiB0aGlzLm1vZGVsRmFpbHVyZVBvc3NpYmxlUmVhc29uID8/IGZhbHNlLFxuICAgICAgICBjd2U6IHRoaXMuY3dlLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhyZWFnaWxlW3RoaXMubm9kZS5pZF0ucmlza3NfaWRlbnRpZmllZCA9IHRoaXMucmlza3MucmVkdWNlKFxuICAgICAgKHByZXYsIGN1cnJlbnQpID0+IE9iamVjdC5hc3NpZ24ocHJldiwgY3VycmVudC5fdG9UaHJlYWdpbGUoKSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhyZWFnaWxlO1xuICB9XG59XG5cbmV4cG9ydCBlbnVtIFJpc2tGdW5jdGlvbiB7XG4gIEJVU0lORVNTX1NJREUgPSBcImJ1c2luZXNzLXNpZGVcIixcbiAgQVJDSElURUNUVVJFID0gXCJhcmNoaXRlY3R1cmVcIixcbiAgREVWRUxPUE1FTlQgPSBcImRldmVsb3BtZW50XCIsXG4gIE9QRVJBVElPTlMgPSBcIm9wZXJhdGlvbnNcIixcbn1cblxuZXhwb3J0IGVudW0gU3RyaWRlIHtcbiAgU1BPT0ZJTkcgPSBcInNwb29maW5nXCIsXG4gIFRBTVBFUklORyA9IFwidGFtcGVyaW5nXCIsXG4gIFJFUFVESUFUSU9OID0gXCJyZXB1ZGlhdGlvblwiLFxuICBJTkZPUk1BVElPTl9ESVNDTE9TVVJFID0gXCJpbmZvcm1hdGlvbi1kaXNjbG9zdXJlXCIsXG4gIERFTklBTF9PRl9TRVJWSUNFID0gXCJkZW5pYWwtb2Ytc2VydmljZVwiLFxuICBFTEVWQVRJT05fT0ZfUFJJVklMRUdFID0gXCJlbGV2YXRpb24tb2YtcHJpdmlsZWdlXCIsXG59XG5cbmV4cG9ydCBlbnVtIFNldmVyaXR5IHtcbiAgTE9XID0gXCJsb3dcIixcbiAgTUVESVVNID0gXCJtZWRpdW1cIixcbiAgRUxFVkFURUQgPSBcImVsZXZhdGVkXCIsXG4gIEhJR0ggPSBcImhpZ2hcIixcbiAgQ1JJVElDQUwgPSBcImNyaXRpY2FsXCIsXG59XG5cbmV4cG9ydCBlbnVtIEV4cGxvaXRhdGlvbkxpa2VsaWhvb2Qge1xuICBVTkxJS0VMWSA9IFwidW5saWtlbHlcIixcbiAgTElLRUxZID0gXCJsaWtlbHlcIixcbiAgVkVSWV9MSUtFTFkgPSBcInZlcnktbGlrZWx5XCIsXG4gIEZSRVFVRU5UID0gXCJmcmVxdWVudFwiLFxufVxuXG5leHBvcnQgZW51bSBFeHBsb2l0YXRpb25JbXBhY3Qge1xuICBMT1cgPSBcImxvd1wiLFxuICBNRURJVU0gPSBcIm1lZGl1bVwiLFxuICBISUdIID0gXCJoaWdoXCIsXG4gIFZFUllfSElHSCA9IFwidmVyeS1oaWdoXCIsXG59XG5cbmV4cG9ydCBlbnVtIERhdGFCcmVhY2hQcm9iYWJpbGl0eSB7XG4gIElNUFJPQkFCTEUgPSBcImltcHJvYmFibGVcIixcbiAgUE9TU0lCTEUgPSBcInBvc3NpYmxlXCIsXG4gIFBST0JBQkxFID0gXCJwcm9iYWJsZVwiLFxufVxuIl19