@aws-cdk/toolkit-lib 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api-extractor.json +6 -3
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/diff/index.d.ts +7 -1
- package/lib/actions/diff/index.js +1 -1
- package/lib/actions/diff/private/helpers.js +4 -3
- package/lib/actions/refactor/index.d.ts +32 -0
- package/lib/actions/refactor/index.js +1 -1
- package/lib/api/aws-auth/awscli-compatible.d.ts +6 -5
- package/lib/api/aws-auth/awscli-compatible.js +1 -1
- package/lib/api/aws-auth/credential-plugins.d.ts +2 -2
- package/lib/api/aws-auth/credential-plugins.js +1 -1
- package/lib/api/aws-auth/provider-caching.d.ts +3 -3
- package/lib/api/aws-auth/provider-caching.js +1 -1
- package/lib/api/aws-auth/sdk-logger.d.ts +8 -2
- package/lib/api/aws-auth/sdk-logger.js +4 -4
- package/lib/api/aws-auth/sdk-provider.d.ts +4 -3
- package/lib/api/aws-auth/sdk-provider.js +1 -1
- package/lib/api/aws-auth/sdk.d.ts +7 -6
- package/lib/api/aws-auth/sdk.js +3 -3
- package/lib/api/aws-auth/tracing.d.ts +2 -2
- package/lib/api/aws-auth/tracing.js +1 -1
- package/lib/api/aws-auth/types.d.ts +3 -3
- package/lib/api/aws-auth/types.js +1 -1
- package/lib/api/bootstrap/bootstrap-template.yaml +12 -1
- package/lib/api/cloud-assembly/index.d.ts +2 -1
- package/lib/api/cloud-assembly/index.js +1 -1
- package/lib/api/cloud-assembly/private/source-builder.d.ts +4 -4
- package/lib/api/cloud-assembly/private/source-builder.js +5 -5
- package/lib/api/deployments/cfn-api.d.ts +2 -0
- package/lib/api/deployments/cfn-api.js +3 -1
- package/lib/api/garbage-collection/garbage-collector.js +3 -3
- package/lib/api/hotswap/common.d.ts +2 -1
- package/lib/api/hotswap/common.js +8 -2
- package/lib/api/hotswap/ecs-services.js +3 -2
- package/lib/api/io/private/index.d.ts +0 -1
- package/lib/api/io/private/index.js +1 -2
- package/lib/api/plugin/plugin.d.ts +4 -4
- package/lib/api/plugin/plugin.js +5 -5
- package/lib/api/refactoring/execution.d.ts +7 -0
- package/lib/api/refactoring/execution.js +43 -0
- package/lib/api/refactoring/index.d.ts +3 -1
- package/lib/api/refactoring/index.js +64 -3
- package/lib/index_bg.wasm +0 -0
- package/lib/payloads/deploy.d.ts +1 -1
- package/lib/payloads/deploy.js +1 -1
- package/lib/toolkit/toolkit.js +46 -14
- package/package.json +18 -17
- package/tsdoc.json +6 -1
- package/lib/api/io/private/sdk-logger.d.ts +0 -3
- package/lib/api/io/private/sdk-logger.js +0 -124
- package/lib/api/private.d.ts +0 -1
- package/lib/api/private.js +0 -18
|
@@ -47,7 +47,7 @@ class ImageAsset {
|
|
|
47
47
|
if (!dateIsolated || dateIsolated == '') {
|
|
48
48
|
return false;
|
|
49
49
|
}
|
|
50
|
-
return new Date(dateIsolated) < date;
|
|
50
|
+
return new Date(Number(dateIsolated)) < date;
|
|
51
51
|
}
|
|
52
52
|
buildImageTag(inc) {
|
|
53
53
|
// isolatedTag will look like "X-aws-cdk.isolated-YYYYY"
|
|
@@ -103,7 +103,7 @@ class ObjectAsset {
|
|
|
103
103
|
if (!tagValue || tagValue == '') {
|
|
104
104
|
return false;
|
|
105
105
|
}
|
|
106
|
-
return new Date(tagValue) < date;
|
|
106
|
+
return new Date(Number(tagValue)) < date;
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
exports.ObjectAsset = ObjectAsset;
|
|
@@ -611,4 +611,4 @@ function imageMap(imageIds) {
|
|
|
611
611
|
}
|
|
612
612
|
return images;
|
|
613
613
|
}
|
|
614
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FyYmFnZS1jb2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnYXJiYWdlLWNvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSwrQkFBK0I7QUFDL0IscUNBQXFDO0FBRXJDLGtEQUEwRTtBQUMxRSx5REFBcUQ7QUFDckQsbURBQTBGO0FBQzFGLCtEQUEyRDtBQUMzRCwyQ0FBa0Q7QUFDbEQsc0NBQWlDO0FBRWpDLG1EQUFtRDtBQUNuRCw0R0FBNEc7QUFDNUcsTUFBTSxNQUFNLEdBQTZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUUvQyxRQUFBLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQztBQUNyQyxRQUFBLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLENBQUMsK0JBQStCO0FBQ25GLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxrQ0FBa0M7QUFJbkU7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFFSDtJQUNBO0lBQ0E7SUFDQTtJQUpsQixZQUNrQixNQUFjLEVBQ2QsSUFBWSxFQUNaLElBQWMsRUFDZCxRQUFnQjtRQUhoQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFNBQUksR0FBSixJQUFJLENBQVU7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFRO0lBRWxDLENBQUM7SUFFTyxNQUFNLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxNQUFNLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMs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Q0FDRjtBQTNqQkQsNENBMmpCQztBQUVELFNBQVMsU0FBUyxDQUFJLEVBQWUsRUFBRSxJQUF1QjtJQUM1RCxNQUFNLE1BQU0sR0FBRztRQUNiLFFBQVEsRUFBRSxFQUFTO1FBQ25CLFFBQVEsRUFBRSxFQUFTO0tBQ3BCLENBQUM7SUFFRixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLFFBQTJCO0lBQzNDLE1BQU0sTUFBTSxHQUE2QixFQUFFLENBQUM7SUFDNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUMsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IEltYWdlSWRlbnRpZmllciB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3InO1xuaW1wb3J0IHR5cGUgeyBUYWcgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgcHJvbXB0bHkgZnJvbSAncHJvbXB0bHknO1xuaW1wb3J0IHR5cGUgeyBJRUNSQ2xpZW50LCBJUzNDbGllbnQsIFNESywgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IERFRkFVTFRfVE9PTEtJVF9TVEFDS19OQU1FLCBUb29sa2l0SW5mbyB9IGZyb20gJy4uL3Rvb2xraXQtaW5mbyc7XG5pbXBvcnQgeyBQcm9ncmVzc1ByaW50ZXIgfSBmcm9tICcuL3Byb2dyZXNzLXByaW50ZXInO1xuaW1wb3J0IHsgQWN0aXZlQXNzZXRDYWNoZSwgQmFja2dyb3VuZFN0YWNrUmVmcmVzaCwgcmVmcmVzaFN0YWNrcyB9IGZyb20gJy4vc3RhY2stcmVmcmVzaCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuXG4vLyBNdXN0IHVzZSBhIHJlcXVpcmUoKSBvdGhlcndpc2UgZXNidWlsZCBjb21wbGFpbnNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtaW1wb3J0c1xuY29uc3QgcExpbWl0OiB0eXBlb2YgaW1wb3J0KCdwLWxpbWl0JykgPSByZXF1aXJlKCdwLWxpbWl0Jyk7XG5cbmV4cG9ydCBjb25zdCBTM19JU09MQVRFRF9UQUcgPSAnYXdzLWNkazppc29sYXRlZCc7XG5leHBvcnQgY29uc3QgRUNSX0lTT0xBVEVEX1RBRyA9ICdhd3MtY2RrLmlzb2xhdGVkJzsgLy8gJzonIGlzIG5vdCB2YWxpZCBpbiBFQ1IgdGFnc1xuY29uc3QgUF9MSU1JVCA9IDUwO1xuY29uc3QgREFZID0gMjQgKiA2MCAqIDYwICogMTAwMDsgLy8gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIGRheVxuXG5leHBvcnQgdHlwZSBHY0Fzc2V0ID0gSW1hZ2VBc3NldCB8IE9iamVjdEFzc2V0O1xuXG4vKipcbiAqIEFuIGltYWdlIGFzc2V0IHRoYXQgbGl2ZXMgaW4gdGhlIGJvb3RzdHJhcHBlZCBFQ1IgUmVwb3NpdG9yeVxuICovXG5leHBvcnQgY2xhc3MgSW1hZ2VBc3NldCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlnZXN0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHNpemU6IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGFnczogc3RyaW5nW10sXG4gICAgcHVibGljIHJlYWRvbmx5IG1hbmlmZXN0OiBzdHJpbmcsXG4gICkge1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWcodGFnOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YWdzLmZpbmQodCA9PiB0LmluY2x1ZGVzKHRhZykpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNUYWcodGFnOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YWdzLnNvbWUodCA9PiB0LmluY2x1ZGVzKHRhZykpO1xuICB9XG5cbiAgcHVibGljIGhhc0lzb2xhdGVkVGFnKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1RhZyhFQ1JfSVNPTEFURURfVEFHKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJc29sYXRlZFRhZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUYWcoRUNSX0lTT0xBVEVEX1RBRyk7XG4gIH1cblxuICBwdWJsaWMgaXNvbGF0ZWRUYWdCZWZvcmUoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IGRhdGVJc29sYXRlZCA9IHRoaXMuZGF0ZUlzb2xhdGVkKCk7XG4gICAgaWYgKCFkYXRlSXNvbGF0ZWQgfHwgZGF0ZUlzb2xhdGVkID09ICcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlSXNvbGF0ZWQpIDwgZGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZEltYWdlVGFnKGluYzogbnVtYmVyKSB7XG4gICAgLy8gaXNvbGF0ZWRUYWcgd2lsbCBsb29rIGxpa2UgXCJYLWF3cy1jZGsuaXNvbGF0ZWQtWVlZWVlcIlxuICAgIHJldHVybiBgJHtpbmN9LSR7RUNSX0lTT0xBVEVEX1RBR30tJHtTdHJpbmcoRGF0ZS5ub3coKSl9YDtcbiAgfVxuXG4gIHB1YmxpYyBkYXRlSXNvbGF0ZWQoKSB7XG4gICAgLy8gaXNvbGF0ZWRUYWcgd2lsbCBsb29rIGxpa2UgXCJYLWF3cy1jZGsuaXNvbGF0ZWQtWVlZWVlcIlxuICAgIHJldHVybiB0aGlzLmdldElzb2xhdGVkVGFnKCk/LnNwbGl0KCctJylbM107XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgYXNzZXQgdGhhdCBsaXZlcyBpbiB0aGUgYm9vdHN0cmFwcGVkIFMzIEJ1Y2tldFxuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0QXNzZXQge1xuICBwcml2YXRlIGNhY2hlZF90YWdzOiBUYWdbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBidWNrZXQ6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgc2l6ZTogbnVtYmVyKSB7XG4gIH1cblxuICBwdWJsaWMgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rZXkuc3BsaXQoJy4nKVswXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhbGxUYWdzKHMzOiBJUzNDbGllbnQpIHtcbiAgICBpZiAodGhpcy5jYWNoZWRfdGFncykge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkX3RhZ3M7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5nZXRPYmplY3RUYWdnaW5nKHsgQnVja2V0OiB0aGlzLmJ1Y2tldCwgS2V5OiB0aGlzLmtleSB9KTtcbiAgICB0aGlzLmNhY2hlZF90YWdzID0gcmVzcG9uc2UuVGFnU2V0O1xuICAgIHJldHVybiB0aGlzLmNhY2hlZF90YWdzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWcodGFnOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkX3RhZ3MpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0Nhbm5vdCBjYWxsIGdldFRhZyBiZWZvcmUgYWxsVGFncycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRfdGFncy5maW5kKCh0OiBhbnkpID0+IHQuS2V5ID09PSB0YWcpPy5WYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZF90YWdzKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDYW5ub3QgY2FsbCBoYXNUYWcgYmVmb3JlIGFsbFRhZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkX3RhZ3Muc29tZSgodDogYW55KSA9PiB0LktleSA9PT0gdGFnKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNJc29sYXRlZFRhZygpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUYWcoUzNfSVNPTEFURURfVEFHKTtcbiAgfVxuXG4gIHB1YmxpYyBpc29sYXRlZFRhZ0JlZm9yZShkYXRlOiBEYXRlKSB7XG4gICAgY29uc3QgdGFnVmFsdWUgPSB0aGlzLmdldFRhZyhTM19JU09MQVRFRF9UQUcpO1xuICAgIGlmICghdGFnVmFsdWUgfHwgdGFnVmFsdWUgPT0gJycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRhZ1ZhbHVlKSA8IGRhdGU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIEdhcmJhZ2UgQ29sbGVjdG9yXG4gKi9cbmludGVyZmFjZSBHYXJiYWdlQ29sbGVjdG9yUHJvcHMge1xuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byBwZXJmb3JtLiBTcGVjaWZ5IHRoaXMgaWYgeW91IHdhbnQgdG8gcGVyZm9ybSBhIHRydW5jYXRlZCBzZXRcbiAgICogb2YgYWN0aW9ucyBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb246ICdwcmludCcgfCAndGFnJyB8ICdkZWxldGUtdGFnZ2VkJyB8ICdmdWxsJztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgYXNzZXQgdG8gZ2FyYmFnZSBjb2xsZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ3MzJyB8ICdlY3InIHwgJ2FsbCc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXlzIGFuIGFzc2V0IG11c3QgYmUgaW4gaXNvbGF0aW9uIGJlZm9yZSBiZWluZyBhY3R1YWxseSBkZWxldGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2tCdWZmZXJEYXlzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlZnVzZSBkZWxldGlvbiBvZiBhbnkgYXNzZXRzIHlvdW5nZXIgdGhhbiB0aGlzIG51bWJlciBvZiBkYXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEJ1ZmZlckRheXM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IHRvIGRlcGxveSB0aGlzIHN0YWNrIGluXG4gICAqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBvbiB0aGUgc3RhY2sgYXJ0aWZhY3QgbWF5IGJlIHVucmVzb2x2ZWQsIHRoaXMgb25lXG4gICAqIG11c3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZEVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudDtcblxuICAvKipcbiAgICogU0RLIHByb3ZpZGVyIChzZWVkZWQgd2l0aCBkZWZhdWx0IGNyZWRlbnRpYWxzKVxuICAgKlxuICAgKiBXaWxsIGJlIHVzZWQgdG8gbWFrZSBTREsgY2FsbHMgdG8gQ2xvdWRGb3JtYXRpb24sIFMzLCBhbmQgRUNSLlxuICAgKi9cbiAgcmVhZG9ubHkgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHNlbmQgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBib290c3RyYXAgc3RhY2sgdG8gbG9vayBmb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IERFRkFVTFRfVE9PTEtJVF9TVEFDS19OQU1FXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBTdGFja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbmZpcm0gd2l0aCB0aGUgdXNlciBiZWZvcmUgYWN0dWFsIGRlbGV0aW9uIGhhcHBlbnNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlybT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBjbGFzcyB0byBmYWNpbGl0YXRlIEdhcmJhZ2UgQ29sbGVjdGlvbiBvZiBTMyBhbmQgRUNSIGFzc2V0c1xuICovXG5leHBvcnQgY2xhc3MgR2FyYmFnZUNvbGxlY3RvciB7XG4gIHByaXZhdGUgZ2FyYmFnZUNvbGxlY3RTM0Fzc2V0czogYm9vbGVhbjtcbiAgcHJpdmF0ZSBnYXJiYWdlQ29sbGVjdEVjckFzc2V0czogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwZXJtaXNzaW9uVG9EZWxldGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcGVybWlzc2lvblRvVGFnOiBib29sZWFuO1xuICBwcml2YXRlIGJvb3RzdHJhcFN0YWNrTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGNvbmZpcm06IGJvb2xlYW47XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihyZWFkb25seSBwcm9wczogR2FyYmFnZUNvbGxlY3RvclByb3BzKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IHByb3BzLmlvSGVscGVyO1xuXG4gICAgdGhpcy5nYXJiYWdlQ29sbGVjdFMzQXNzZXRzID0gWydzMycsICdhbGwnXS5pbmNsdWRlcyhwcm9wcy50eXBlKTtcbiAgICB0aGlzLmdhcmJhZ2VDb2xsZWN0RWNyQXNzZXRzID0gWydlY3InLCAnYWxsJ10uaW5jbHVkZXMocHJvcHMudHlwZSk7XG5cbiAgICB0aGlzLnBlcm1pc3Npb25Ub0RlbGV0ZSA9IFsnZGVsZXRlLXRhZ2dlZCcsICdmdWxsJ10uaW5jbHVkZXMocHJvcHMuYWN0aW9uKTtcbiAgICB0aGlzLnBlcm1pc3Npb25Ub1RhZyA9IFsndGFnJywgJ2Z1bGwnXS5pbmNsdWRlcyhwcm9wcy5hY3Rpb24pO1xuICAgIHRoaXMuY29uZmlybSA9IHByb3BzLmNvbmZpcm0gPz8gdHJ1ZTtcblxuICAgIHRoaXMuYm9vdHN0cmFwU3RhY2tOYW1lID0gcHJvcHMuYm9vdHN0cmFwU3RhY2tOYW1lID8/IERFRkFVTFRfVE9PTEtJVF9TVEFDS19OQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHRoZSByZXNvbHZlZCBlbnZpcm9ubWVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnYXJiYWdlQ29sbGVjdCgpIHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGAke3RoaXMuZ2FyYmFnZUNvbGxlY3RTM0Fzc2V0c30gJHt0aGlzLmdhcmJhZ2VDb2xsZWN0RWNyQXNzZXRzfWApKTtcblxuICAgIC8vIFNES3NcbiAgICBjb25zdCBzZGsgPSAoYXdhaXQgdGhpcy5wcm9wcy5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCh0aGlzLnByb3BzLnJlc29sdmVkRW52aXJvbm1lbnQsIE1vZGUuRm9yV3JpdGluZykpLnNkaztcbiAgICBjb25zdCBjZm4gPSBzZGsuY2xvdWRGb3JtYXRpb24oKTtcblxuICAgIGNvbnN0IHF1YWxpZmllciA9IGF3YWl0IHRoaXMuYm9vdHN0cmFwUXVhbGlmaWVyKHNkaywgdGhpcy5ib290c3RyYXBTdGFja05hbWUpO1xuICAgIGNvbnN0IGFjdGl2ZUFzc2V0cyA9IG5ldyBBY3RpdmVBc3NldENhY2hlKCk7XG5cbiAgICAvLyBHcmFiIHN0YWNrIHRlbXBsYXRlcyBmaXJzdFxuICAgIGF3YWl0IHJlZnJlc2hTdGFja3MoY2ZuLCB0aGlzLmlvSGVscGVyLCBhY3RpdmVBc3NldHMsIHF1YWxpZmllcik7XG4gICAgLy8gU3RhcnQgdGhlIGJhY2tncm91bmQgcmVmcmVzaFxuICAgIGNvbnN0IGJhY2tncm91bmRTdGFja1JlZnJlc2ggPSBuZXcgQmFja2dyb3VuZFN0YWNrUmVmcmVzaCh7XG4gICAgICBjZm4sXG4gICAgICBpb0hlbHBlcjogdGhpcy5pb0hlbHBlcixcbiAgICAgIGFjdGl2ZUFzc2V0cyxcbiAgICAgIHF1YWxpZmllcixcbiAgICB9KTtcbiAgICBiYWNrZ3JvdW5kU3RhY2tSZWZyZXNoLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZ2FyYmFnZUNvbGxlY3RTM0Fzc2V0cykge1xuICAgICAgICBhd2FpdCB0aGlzLmdhcmJhZ2VDb2xsZWN0UzMoc2RrLCBhY3RpdmVBc3NldHMsIGJhY2tncm91bmRTdGFja1JlZnJlc2gpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nYXJiYWdlQ29sbGVjdEVjckFzc2V0cykge1xuICAgICAgICBhd2FpdCB0aGlzLmdhcmJhZ2VDb2xsZWN0RWNyKHNkaywgYWN0aXZlQXNzZXRzLCBiYWNrZ3JvdW5kU3RhY2tSZWZyZXNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBiYWNrZ3JvdW5kU3RhY2tSZWZyZXNoLnN0b3AoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gRUNSIGFzc2V0c1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdhcmJhZ2VDb2xsZWN0RWNyKHNkazogU0RLLCBhY3RpdmVBc3NldHM6IEFjdGl2ZUFzc2V0Q2FjaGUsIGJhY2tncm91bmRTdGFja1JlZnJlc2g6IEJhY2tncm91bmRTdGFja1JlZnJlc2gpIHtcbiAgICBjb25zdCBlY3IgPSBzZGsuZWNyKCk7XG4gICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMuYm9vdHN0cmFwUmVwb3NpdG9yeU5hbWUoc2RrLCB0aGlzLmJvb3RzdHJhcFN0YWNrTmFtZSk7XG4gICAgY29uc3QgbnVtSW1hZ2VzID0gYXdhaXQgdGhpcy5udW1JbWFnZXNJblJlcG8oZWNyLCByZXBvKTtcbiAgICBjb25zdCBwcmludGVyID0gbmV3IFByb2dyZXNzUHJpbnRlcih0aGlzLmlvSGVscGVyLCBudW1JbWFnZXMsIDEwMDApO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgRm91bmQgYm9vdHN0cmFwIHJlcG8gJHtyZXBvfSB3aXRoICR7bnVtSW1hZ2VzfSBpbWFnZXNgKSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gY29uc3QgYmF0Y2hlcyA9IDE7XG4gICAgICBjb25zdCBiYXRjaFNpemUgPSAxMDAwO1xuICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgZ3JhY2VEYXlzID0gdGhpcy5wcm9wcy5yb2xsYmFja0J1ZmZlckRheXM7XG5cbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFBhcnNpbmcgdGhyb3VnaCAke251bUltYWdlc30gaW1hZ2VzIGluIGJhdGNoZXNgKSk7XG5cbiAgICAgIHByaW50ZXIuc3RhcnQoKTtcblxuICAgICAgZm9yIGF3YWl0IChjb25zdCBiYXRjaCBvZiB0aGlzLnJlYWRSZXBvSW5CYXRjaGVzKGVjciwgcmVwbywgYmF0Y2hTaXplLCBjdXJyZW50VGltZSkpIHtcbiAgICAgICAgYXdhaXQgYmFja2dyb3VuZFN0YWNrUmVmcmVzaC5ub09sZGVyVGhhbig2MDBfMDAwKTsgLy8gMTAgbWluc1xuXG4gICAgICAgIGNvbnN0IHsgaW5jbHVkZWQ6IGlzb2xhdGVkLCBleGNsdWRlZDogbm90SXNvbGF0ZWQgfSA9IHBhcnRpdGlvbihiYXRjaCwgYXNzZXQgPT4gIWFzc2V0LnRhZ3Muc29tZSh0ID0+IGFjdGl2ZUFzc2V0cy5jb250YWlucyh0KSkpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7aXNvbGF0ZWQubGVuZ3RofSBpc29sYXRlZCBpbWFnZXNgKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7bm90SXNvbGF0ZWQubGVuZ3RofSBub3QgaXNvbGF0ZWQgaW1hZ2VzYCkpO1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGAke2JhdGNoLmxlbmd0aH0gaW1hZ2VzIHRvdGFsYCkpO1xuXG4gICAgICAgIGxldCBkZWxldGFibGVzOiBJbWFnZUFzc2V0W10gPSBpc29sYXRlZDtcbiAgICAgICAgbGV0IHRhZ2dhYmxlczogSW1hZ2VBc3NldFtdID0gW107XG4gICAgICAgIGxldCB1bnRhZ2dhYmxlczogSW1hZ2VBc3NldFtdID0gW107XG5cbiAgICAgICAgaWYgKGdyYWNlRGF5cyA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKCdGaWx0ZXJpbmcgb3V0IGltYWdlcyB0aGF0IGFyZSBub3Qgb2xkIGVub3VnaCB0byBkZWxldGUnKSk7XG5cbiAgICAgICAgICAvLyBXZSBkZWxldGUgaW1hZ2VzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGluIEFjdGl2ZUFzc2V0cyBhbmQgaGF2ZSB0aGUgSXNvbGF0ZWQgVGFnIHdpdGggYSBkYXRlXG4gICAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBjdXJyZW50IHRpbWUgLSBncmFjZSBwZXJpb2QuXG4gICAgICAgICAgZGVsZXRhYmxlcyA9IGlzb2xhdGVkLmZpbHRlcihpbWcgPT4gaW1nLmlzb2xhdGVkVGFnQmVmb3JlKG5ldyBEYXRlKGN1cnJlbnRUaW1lIC0gKGdyYWNlRGF5cyAqIERBWSkpKSk7XG5cbiAgICAgICAgICAvLyBXZSB0YWcgaW1hZ2VzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGluIEFjdGl2ZUFzc2V0cyBhbmQgZG8gbm90IGhhdmUgdGhlIElzb2xhdGVkIFRhZy5cbiAgICAgICAgICB0YWdnYWJsZXMgPSBpc29sYXRlZC5maWx0ZXIoaW1nID0+ICFpbWcuaGFzSXNvbGF0ZWRUYWcoKSk7XG5cbiAgICAgICAgICAvLyBXZSB1bnRhZyBpbWFnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBpbiBBY3RpdmVBc3NldHMgYW5kIGN1cnJlbnRseSBoYXZlIHRoZSBJc29sYXRlZCBUYWcuXG4gICAgICAgICAgdW50YWdnYWJsZXMgPSBub3RJc29sYXRlZC5maWx0ZXIoaW1nID0+IGltZy5oYXNJc29sYXRlZFRhZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7ZGVsZXRhYmxlcy5sZW5ndGh9IGRlbGV0YWJsZSBhc3NldHNgKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7dGFnZ2FibGVzLmxlbmd0aH0gdGFnZ2FibGUgYXNzZXRzYCkpO1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGAke3VudGFnZ2FibGVzLmxlbmd0aH0gYXNzZXRzIHRvIHVudGFnYCkpO1xuXG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25Ub0RlbGV0ZSAmJiBkZWxldGFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1hdGlvblByb21wdChwcmludGVyLCBkZWxldGFibGVzLCAnaW1hZ2UnKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBhcmFsbGVsRGVsZXRlRWNyKGVjciwgcmVwbywgZGVsZXRhYmxlcywgcHJpbnRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9uVG9UYWcgJiYgdGFnZ2FibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBhcmFsbGVsVGFnRWNyKGVjciwgcmVwbywgdGFnZ2FibGVzLCBwcmludGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25Ub1RhZyAmJiB1bnRhZ2dhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYXJhbGxlbFVudGFnRWNyKGVjciwgcmVwbywgdW50YWdnYWJsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRlci5yZXBvcnRTY2FubmVkQXNzZXQoYmF0Y2gubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwcmludGVyLnN0b3AoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gUzMgYXNzZXRzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2FyYmFnZUNvbGxlY3RTMyhzZGs6IFNESywgYWN0aXZlQXNzZXRzOiBBY3RpdmVBc3NldENhY2hlLCBiYWNrZ3JvdW5kU3RhY2tSZWZyZXNoOiBCYWNrZ3JvdW5kU3RhY2tSZWZyZXNoKSB7XG4gICAgY29uc3QgczMgPSBzZGsuczMoKTtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLmJvb3RzdHJhcEJ1Y2tldE5hbWUoc2RrLCB0aGlzLmJvb3RzdHJhcFN0YWNrTmFtZSk7XG4gICAgY29uc3QgbnVtT2JqZWN0cyA9IGF3YWl0IHRoaXMubnVtT2JqZWN0c0luQnVja2V0KHMzLCBidWNrZXQpO1xuICAgIGNvbnN0IHByaW50ZXIgPSBuZXcgUHJvZ3Jlc3NQcmludGVyKHRoaXMuaW9IZWxwZXIsIG51bU9iamVjdHMsIDEwMDApO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgRm91bmQgYm9vdHN0cmFwIGJ1Y2tldCAke2J1Y2tldH0gd2l0aCAke251bU9iamVjdHN9IG9iamVjdHNgKSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gMTAwMDtcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGdyYWNlRGF5cyA9IHRoaXMucHJvcHMucm9sbGJhY2tCdWZmZXJEYXlzO1xuXG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBQYXJzaW5nIHRocm91Z2ggJHtudW1PYmplY3RzfSBvYmplY3RzIGluIGJhdGNoZXNgKSk7XG5cbiAgICAgIHByaW50ZXIuc3RhcnQoKTtcblxuICAgICAgLy8gUHJvY2VzcyBvYmplY3RzIGluIGJhdGNoZXMgb2YgMTAwMFxuICAgICAgLy8gVGhpcyBpcyB0aGUgYmF0Y2ggbGltaXQgb2YgczMuRGVsZXRlT2JqZWN0IGFuZCB3ZSBpbnRlbmQgdG8gb3B0aW1pemUgZm9yIHRoZSBcIndvcnN0IGNhc2VcIiBzY2VuYXJpb1xuICAgICAgLy8gd2hlcmUgZ2MgaXMgcnVuIGZvciB0aGUgZmlyc3QgdGltZSBvbiBhIGxvbmctc3RhbmRpbmcgYnVja2V0IHdoZXJlIH4xMDAlIG9mIG9iamVjdHMgYXJlIGlzb2xhdGVkLlxuICAgICAgZm9yIGF3YWl0IChjb25zdCBiYXRjaCBvZiB0aGlzLnJlYWRCdWNrZXRJbkJhdGNoZXMoczMsIGJ1Y2tldCwgYmF0Y2hTaXplLCBjdXJyZW50VGltZSkpIHtcbiAgICAgICAgYXdhaXQgYmFja2dyb3VuZFN0YWNrUmVmcmVzaC5ub09sZGVyVGhhbig2MDBfMDAwKTsgLy8gMTAgbWluc1xuXG4gICAgICAgIGNvbnN0IHsgaW5jbHVkZWQ6IGlzb2xhdGVkLCBleGNsdWRlZDogbm90SXNvbGF0ZWQgfSA9IHBhcnRpdGlvbihiYXRjaCwgYXNzZXQgPT4gIWFjdGl2ZUFzc2V0cy5jb250YWlucyhhc3NldC5maWxlTmFtZSgpKSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtpc29sYXRlZC5sZW5ndGh9IGlzb2xhdGVkIGFzc2V0c2ApKTtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtub3RJc29sYXRlZC5sZW5ndGh9IG5vdCBpc29sYXRlZCBhc3NldHNgKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7YmF0Y2gubGVuZ3RofSBvYmplY3RzIHRvdGFsYCkpO1xuXG4gICAgICAgIGxldCBkZWxldGFibGVzOiBPYmplY3RBc3NldFtdID0gaXNvbGF0ZWQ7XG4gICAgICAgIGxldCB0YWdnYWJsZXM6IE9iamVjdEFzc2V0W10gPSBbXTtcbiAgICAgICAgbGV0IHVudGFnZ2FibGVzOiBPYmplY3RBc3NldFtdID0gW107XG5cbiAgICAgICAgaWYgKGdyYWNlRGF5cyA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKCdGaWx0ZXJpbmcgb3V0IGFzc2V0cyB0aGF0IGFyZSBub3Qgb2xkIGVub3VnaCB0byBkZWxldGUnKSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYXJhbGxlbFJlYWRBbGxUYWdzKHMzLCBiYXRjaCk7XG5cbiAgICAgICAgICAvLyBXZSBkZWxldGUgb2JqZWN0cyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBpbiBBY3RpdmVBc3NldHMgYW5kIGhhdmUgdGhlIElzb2xhdGVkIFRhZyB3aXRoIGEgZGF0ZVxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgY3VycmVudCB0aW1lIC0gZ3JhY2UgcGVyaW9kLlxuICAgICAgICAgIGRlbGV0YWJsZXMgPSBpc29sYXRlZC5maWx0ZXIob2JqID0+IG9iai5pc29sYXRlZFRhZ0JlZm9yZShuZXcgRGF0ZShjdXJyZW50VGltZSAtIChncmFjZURheXMgKiBEQVkpKSkpO1xuXG4gICAgICAgICAgLy8gV2UgdGFnIG9iamVjdHMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgaW4gQWN0aXZlQXNzZXRzIGFuZCBkbyBub3QgaGF2ZSB0aGUgSXNvbGF0ZWQgVGFnLlxuICAgICAgICAgIHRhZ2dhYmxlcyA9IGlzb2xhdGVkLmZpbHRlcihvYmogPT4gIW9iai5oYXNJc29sYXRlZFRhZygpKTtcblxuICAgICAgICAgIC8vIFdlIHVudGFnIG9iamVjdHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBpbiBBY3RpdmVBc3NldHMgYW5kIGN1cnJlbnRseSBoYXZlIHRoZSBJc29sYXRlZCBUYWcuXG4gICAgICAgICAgdW50YWdnYWJsZXMgPSBub3RJc29sYXRlZC5maWx0ZXIob2JqID0+IG9iai5oYXNJc29sYXRlZFRhZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7ZGVsZXRhYmxlcy5sZW5ndGh9IGRlbGV0YWJsZSBhc3NldHNgKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7dGFnZ2FibGVzLmxlbmd0aH0gdGFnZ2FibGUgYXNzZXRzYCkpO1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGAke3VudGFnZ2FibGVzLmxlbmd0aH0gYXNzZXRzIHRvIHVudGFnYCkpO1xuXG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25Ub0RlbGV0ZSAmJiBkZWxldGFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1hdGlvblByb21wdChwcmludGVyLCBkZWxldGFibGVzLCAnb2JqZWN0Jyk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYXJhbGxlbERlbGV0ZVMzKHMzLCBidWNrZXQsIGRlbGV0YWJsZXMsIHByaW50ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblRvVGFnICYmIHRhZ2dhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYXJhbGxlbFRhZ1MzKHMzLCBidWNrZXQsIHRhZ2dhYmxlcywgY3VycmVudFRpbWUsIHByaW50ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblRvVGFnICYmIHVudGFnZ2FibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBhcmFsbGVsVW50YWdTMyhzMywgYnVja2V0LCB1bnRhZ2dhYmxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludGVyLnJlcG9ydFNjYW5uZWRBc3NldChiYXRjaC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHByaW50ZXIuc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGFyYWxsZWxSZWFkQWxsVGFncyhzMzogSVMzQ2xpZW50LCBvYmplY3RzOiBPYmplY3RBc3NldFtdKSB7XG4gICAgY29uc3QgbGltaXQgPSBwTGltaXQoUF9MSU1JVCk7XG5cbiAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XG4gICAgICBhd2FpdCBsaW1pdCgoKSA9PiBvYmouYWxsVGFncyhzMykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnRhZyBhc3NldHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdGFnZ2VkLCBidXQgbm93IGN1cnJlbnRseSByZWZlcmVuY2VkLlxuICAgKiBTaW5jZSB0aGlzIGlzIHRyZWF0ZWQgYXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCB3ZSBkbyBub3QgcHJpbnQgdGhlIHJlc3VsdHMgaW4gdGhlIHByaW50ZXIuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBhcmFsbGVsVW50YWdFY3IoZWNyOiBJRUNSQ2xpZW50LCByZXBvOiBzdHJpbmcsIHVudGFnZ2FibGVzOiBJbWFnZUFzc2V0W10pIHtcbiAgICBjb25zdCBsaW1pdCA9IHBMaW1pdChQX0xJTUlUKTtcblxuICAgIGZvciAoY29uc3QgaW1nIG9mIHVudGFnZ2FibGVzKSB7XG4gICAgICBjb25zdCB0YWcgPSBpbWcuZ2V0SXNvbGF0ZWRUYWcoKTtcbiAgICAgIGF3YWl0IGxpbWl0KCgpID0+XG4gICAgICAgIGVjci5iYXRjaERlbGV0ZUltYWdlKHtcbiAgICAgICAgICByZXBvc2l0b3J5TmFtZTogcmVwbyxcbiAgICAgICAgICBpbWFnZUlkczogW3tcbiAgICAgICAgICAgIGltYWdlVGFnOiB0YWcsXG4gICAgICAgICAgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBVbnRhZ2dlZCAke3VudGFnZ2FibGVzLmxlbmd0aH0gYXNzZXRzYCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVudGFnIGFzc2V0cyB0aGF0IHdlcmUgcHJldmlvdXNseSB0YWdnZWQsIGJ1dCBub3cgY3VycmVudGx5IHJlZmVyZW5jZWQuXG4gICAqIFNpbmNlIHRoaXMgaXMgdHJlYXRlZCBhcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIHdlIGRvIG5vdCBwcmludCB0aGUgcmVzdWx0cyBpbiB0aGUgcHJpbnRlci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGFyYWxsZWxVbnRhZ1MzKHMzOiBJUzNDbGllbnQsIGJ1Y2tldDogc3RyaW5nLCB1bnRhZ2dhYmxlczogT2JqZWN0QXNzZXRbXSkge1xuICAgIGNvbnN0IGxpbWl0ID0gcExpbWl0KFBfTElNSVQpO1xuXG4gICAgZm9yIChjb25zdCBvYmogb2YgdW50YWdnYWJsZXMpIHtcbiAgICAgIGNvbnN0IHRhZ3MgPSBhd2FpdCBvYmouYWxsVGFncyhzMykgPz8gW107XG4gICAgICBjb25zdCB1cGRhdGVkVGFncyA9IHRhZ3MuZmlsdGVyKCh0YWc6IFRhZykgPT4gdGFnLktleSAhPT0gUzNfSVNPTEFURURfVEFHKTtcbiAgICAgIGF3YWl0IGxpbWl0KCgpID0+XG4gICAgICAgIHMzLmRlbGV0ZU9iamVjdFRhZ2dpbmcoe1xuICAgICAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgICAgIEtleTogb2JqLmtleSxcblxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBsaW1pdCgoKSA9PlxuICAgICAgICBzMy5wdXRPYmplY3RUYWdnaW5nKHtcbiAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICBLZXk6IG9iai5rZXksXG4gICAgICAgICAgVGFnZ2luZzoge1xuICAgICAgICAgICAgVGFnU2V0OiB1cGRhdGVkVGFncyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgVW50YWdnZWQgJHt1bnRhZ2dhYmxlcy5sZW5ndGh9IGFzc2V0c2ApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWcgaW1hZ2VzIGluIHBhcmFsbGVsIHVzaW5nIHAtbGltaXRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGFyYWxsZWxUYWdFY3IoZWNyOiBJRUNSQ2xpZW50LCByZXBvOiBzdHJpbmcsIHRhZ2dhYmxlczogSW1hZ2VBc3NldFtdLCBwcmludGVyOiBQcm9ncmVzc1ByaW50ZXIpIHtcbiAgICBjb25zdCBsaW1pdCA9IHBMaW1pdChQX0xJTUlUKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnZ2FibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbWcgPSB0YWdnYWJsZXNbaV07XG4gICAgICBjb25zdCB0YWdFY3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZWNyLnB1dEltYWdlKHtcbiAgICAgICAgICAgIHJlcG9zaXRvcnlOYW1lOiByZXBvLFxuICAgICAgICAgICAgaW1hZ2VEaWdlc3Q6IGltZy5kaWdlc3QsXG4gICAgICAgICAgICBpbWFnZU1hbmlmZXN0OiBpbWcubWFuaWZlc3QsXG4gICAgICAgICAgICBpbWFnZVRhZzogaW1nLmJ1aWxkSW1hZ2VUYWcoaSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGZhbHNlIG5lZ2F0aXZlIC0tIGFuIGlzb2xhdGVkIGFzc2V0IGlzIHVudGFnZ2VkXG4gICAgICAgICAgLy8gbGlrZWx5IGR1ZSB0byBhbiBpbWFnZVRhZyBjb2xsaXNpb24uIFdlIGNhbiBzYWZlbHkgaWdub3JlLFxuICAgICAgICAgIC8vIGFuZCB0aGUgaXNvbGF0ZWQgYXNzZXQgd2lsbCBiZSB0YWdnZWQgbmV4dCB0aW1lLlxuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFdhcm5pbmc6IHVuYWJsZSB0byB0YWcgaW1hZ2UgJHtKU09OLnN0cmluZ2lmeShpbWcudGFncyl9IHdpdGggJHtpbWcuYnVpbGRJbWFnZVRhZyhpKX0gZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3I6ICR7ZXJyb3J9YCkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgYXdhaXQgbGltaXQoKCkgPT4gdGFnRWNyKCkpO1xuICAgIH1cblxuICAgIHByaW50ZXIucmVwb3J0VGFnZ2VkQXNzZXQodGFnZ2FibGVzKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBUYWdnZWQgJHt0YWdnYWJsZXMubGVuZ3RofSBhc3NldHNgKSk7XG4gIH1cblxuICAvKipcbiAgICogVGFnIG9iamVjdHMgaW4gcGFyYWxsZWwgdXNpbmcgcC1saW1pdC4gVGhlIHB1dE9iamVjdFRhZ2dpbmcgQVBJIGRvZXMgbm90XG4gICAqIHN1cHBvcnQgYmF0Y2ggdGFnZ2luZyBzbyB3ZSBtdXN0IGhhbmRsZSB0aGUgcGFyYWxsZWxpc20gY2xpZW50LXNpZGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBhcmFsbGVsVGFnUzMoczM6IElTM0NsaWVudCwgYnVja2V0OiBzdHJpbmcsIHRhZ2dhYmxlczogT2JqZWN0QXNzZXRbXSwgZGF0ZTogbnVtYmVyLCBwcmludGVyOiBQcm9ncmVzc1ByaW50ZXIpIHtcbiAgICBjb25zdCBsaW1pdCA9IHBMaW1pdChQX0xJTUlUKTtcblxuICAgIGZvciAoY29uc3Qgb2JqIG9mIHRhZ2dhYmxlcykge1xuICAgICAgYXdhaXQgbGltaXQoKCkgPT5cbiAgICAgICAgczMucHV0T2JqZWN0VGFnZ2luZyh7XG4gICAgICAgICAgQnVja2V0OiBidWNrZXQsXG4gICAgICAgICAgS2V5OiBvYmoua2V5LFxuICAgICAgICAgIFRhZ2dpbmc6IHtcbiAgICAgICAgICAgIFRhZ1NldDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgS2V5OiBTM19JU09MQVRFRF9UQUcsXG4gICAgICAgICAgICAgICAgVmFsdWU6IFN0cmluZyhkYXRlKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHByaW50ZXIucmVwb3J0VGFnZ2VkQXNzZXQodGFnZ2FibGVzKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBUYWdnZWQgJHt0YWdnYWJsZXMubGVuZ3RofSBhc3NldHNgKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGltYWdlcyBpbiBwYXJhbGxlbC4gVGhlIGRlbGV0ZUltYWdlIEFQSSBzdXBwb3J0cyBiYXRjaGVzIG9mIDEwMC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGFyYWxsZWxEZWxldGVFY3IoZWNyOiBJRUNSQ2xpZW50LCByZXBvOiBzdHJpbmcsIGRlbGV0YWJsZXM6IEltYWdlQXNzZXRbXSwgcHJpbnRlcjogUHJvZ3Jlc3NQcmludGVyKSB7XG4gICAgY29uc3QgYmF0Y2hTaXplID0gMTAwO1xuICAgIGNvbnN0IGltYWdlc1RvRGVsZXRlID0gZGVsZXRhYmxlcy5tYXAoaW1nID0+ICh7XG4gICAgICBpbWFnZURpZ2VzdDogaW1nLmRpZ2VzdCxcbiAgICB9KSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXNUb0RlbGV0ZS5sZW5ndGg7IGkgKz0gYmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoZXMucHVzaChpbWFnZXNUb0RlbGV0ZS5zbGljZShpLCBpICsgYmF0Y2hTaXplKSk7XG4gICAgICB9XG4gICAgICAvLyBEZWxldGUgaW1hZ2VzIGluIGJhdGNoZXNcbiAgICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgYmF0Y2hlcykge1xuICAgICAgICBhd2FpdCBlY3IuYmF0Y2hEZWxldGVJbWFnZSh7XG4gICAgICAgICAgaW1hZ2VJZHM6IGJhdGNoLFxuICAgICAgICAgIHJlcG9zaXRvcnlOYW1lOiByZXBvLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkZWxldGVkQ291bnQgPSBiYXRjaC5sZW5ndGg7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYERlbGV0ZWQgJHtkZWxldGVkQ291bnR9IGFzc2V0c2ApKTtcbiAgICAgICAgcHJpbnRlci5yZXBvcnREZWxldGVkQXNzZXQoZGVsZXRhYmxlcy5zbGljZSgwLCBkZWxldGVkQ291bnQpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9FUlJPUi5tc2coYEVycm9yIGRlbGV0aW5nIGltYWdlczogJHtlcnJ9YCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgb2JqZWN0cyBpbiBwYXJhbGxlbC4gVGhlIGRlbGV0ZU9iamVjdHMgQVBJIHN1cHBvcnRzIGJhdGNoZXMgb2YgMTAwMC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGFyYWxsZWxEZWxldGVTMyhzMzogSVMzQ2xpZW50LCBidWNrZXQ6IHN0cmluZywgZGVsZXRhYmxlczogT2JqZWN0QXNzZXRbXSwgcHJpbnRlcjogUHJvZ3Jlc3NQcmludGVyKSB7XG4gICAgY29uc3QgYmF0Y2hTaXplID0gMTAwMDtcbiAgICBjb25zdCBvYmplY3RzVG9EZWxldGUgPSBkZWxldGFibGVzLm1hcChhc3NldCA9PiAoe1xuICAgICAgS2V5OiBhc3NldC5rZXksXG4gICAgfSkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0c1RvRGVsZXRlLmxlbmd0aDsgaSArPSBiYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hlcy5wdXNoKG9iamVjdHNUb0RlbGV0ZS5zbGljZShpLCBpICsgYmF0Y2hTaXplKSk7XG4gICAgICB9XG4gICAgICAvLyBEZWxldGUgb2JqZWN0cyBpbiBiYXRjaGVzXG4gICAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIGJhdGNoZXMpIHtcbiAgICAgICAgYXdhaXQgczMuZGVsZXRlT2JqZWN0cyh7XG4gICAgICAgICAgQnVja2V0OiBidWNrZXQsXG4gICAgICAgICAgRGVsZXRlOiB7XG4gICAgICAgICAgICBPYmplY3RzOiBiYXRjaCxcbiAgICAgICAgICAgIFF1aWV0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDb3VudCA9IGJhdGNoLmxlbmd0aDtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgRGVsZXRlZCAke2RlbGV0ZWRDb3VudH0gYXNzZXRzYCkpO1xuICAgICAgICBwcmludGVyLnJlcG9ydERlbGV0ZWRBc3NldChkZWxldGFibGVzLnNsaWNlKDAsIGRlbGV0ZWRDb3VudCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhjaGFsay5yZWQoYEVycm9yIGRlbGV0aW5nIG9iamVjdHM6ICR7ZXJyfWApKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBib290c3RyYXBCdWNrZXROYW1lKHNkazogU0RLLCBib290c3RyYXBTdGFja05hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdG9vbGtpdEluZm8gPSBhd2FpdCBUb29sa2l0SW5mby5sb29rdXAodGhpcy5wcm9wcy5yZXNvbHZlZEVudmlyb25tZW50LCBzZGssIHRoaXMuaW9IZWxwZXIsIGJvb3RzdHJhcFN0YWNrTmFtZSk7XG4gICAgcmV0dXJuIHRvb2xraXRJbmZvLmJ1Y2tldE5hbWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJvb3RzdHJhcFJlcG9zaXRvcnlOYW1lKHNkazogU0RLLCBib290c3RyYXBTdGFja05hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdG9vbGtpdEluZm8gPSBhd2FpdCBUb29sa2l0SW5mby5sb29rdXAodGhpcy5wcm9wcy5yZXNvbHZlZEVudmlyb25tZW50LCBzZGssIHRoaXMuaW9IZWxwZXIsIGJvb3RzdHJhcFN0YWNrTmFtZSk7XG4gICAgcmV0dXJuIHRvb2xraXRJbmZvLnJlcG9zaXRvcnlOYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBib290c3RyYXBRdWFsaWZpZXIoc2RrOiBTREssIGJvb3RzdHJhcFN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB0b29sa2l0SW5mbyA9IGF3YWl0IFRvb2xraXRJbmZvLmxvb2t1cCh0aGlzLnByb3BzLnJlc29sdmVkRW52aXJvbm1lbnQsIHNkaywgdGhpcy5pb0hlbHBlciwgYm9vdHN0cmFwU3RhY2tOYW1lKTtcbiAgICByZXR1cm4gdG9vbGtpdEluZm8uYm9vdHN0cmFwU3RhY2sucGFyYW1ldGVycy5RdWFsaWZpZXI7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG51bU9iamVjdHNJbkJ1Y2tldChzMzogSVMzQ2xpZW50LCBidWNrZXQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IHRvdGFsQ291bnQgPSAwO1xuICAgIGxldCBjb250aW51YXRpb25Ub2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5saXN0T2JqZWN0c1YyKHtcbiAgICAgICAgQnVja2V0OiBidWNrZXQsXG4gICAgICAgIENvbnRpbnVhdGlvblRva2VuOiBjb250aW51YXRpb25Ub2tlbixcbiAgICAgIH0pO1xuXG4gICAgICB0b3RhbENvdW50ICs9IHJlc3BvbnNlLktleUNvdW50ID8/IDA7XG4gICAgICBjb250aW51YXRpb25Ub2tlbiA9IHJlc3BvbnNlLk5leHRDb250aW51YXRpb25Ub2tlbjtcbiAgICB9IHdoaWxlIChjb250aW51YXRpb25Ub2tlbik7XG5cbiAgICByZXR1cm4gdG90YWxDb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbnVtSW1hZ2VzSW5SZXBvKGVjcjogSUVDUkNsaWVudCwgcmVwbzogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgdG90YWxDb3VudCA9IDA7XG4gICAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlY3IubGlzdEltYWdlcyh7XG4gICAgICAgIHJlcG9zaXRvcnlOYW1lOiByZXBvLFxuICAgICAgICBuZXh0VG9rZW46IG5leHRUb2tlbixcbiAgICAgIH0pO1xuXG4gICAgICB0b3RhbENvdW50ICs9IHJlc3BvbnNlLmltYWdlSWRzPy5sZW5ndGggPz8gMDtcbiAgICAgIG5leHRUb2tlbiA9IHJlc3BvbnNlLm5leHRUb2tlbjtcbiAgICB9IHdoaWxlIChuZXh0VG9rZW4pO1xuXG4gICAgcmV0dXJuIHRvdGFsQ291bnQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jICpyZWFkUmVwb0luQmF0Y2hlcyhlY3I6IElFQ1JDbGllbnQsIHJlcG86IHN0cmluZywgYmF0Y2hTaXplOiBudW1iZXIgPSAxMDAwLCBjdXJyZW50VGltZTogbnVtYmVyKTogQXN5bmNHZW5lcmF0b3I8SW1hZ2VBc3NldFtdPiB7XG4gICAgbGV0IGNvbnRpbnVhdGlvblRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCBiYXRjaDogSW1hZ2VBc3NldFtdID0gW107XG5cbiAgICAgIHdoaWxlIChiYXRjaC5sZW5ndGggPCBiYXRjaFNpemUpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlY3IubGlzdEltYWdlcyh7XG4gICAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHJlcG8sXG4gICAgICAgICAgbmV4dFRva2VuOiBjb250aW51YXRpb25Ub2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTm8gaW1hZ2VzIGluIHRoZSByZXBvc2l0b3J5XG4gICAgICAgIGlmICghcmVzcG9uc2UuaW1hZ2VJZHMgfHwgcmVzcG9uc2UuaW1hZ2VJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYXAgdW5pcXVlIGltYWdlIGRpZ2VzdCB0byAocG9zc2libHkgbXVsdGlwbGUpIHRhZ3NcbiAgICAgICAgY29uc3QgaW1hZ2VzID0gaW1hZ2VNYXAocmVzcG9uc2UuaW1hZ2VJZHMgPz8gW10pO1xuXG4gICAgICAgIGNvbnN0IGltYWdlSWRzID0gT2JqZWN0LmtleXMoaW1hZ2VzKS5tYXAoa2V5ID0+ICh7XG4gICAgICAgICAgaW1hZ2VEaWdlc3Q6IGtleSxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGRlc2NyaWJlSW1hZ2VJbmZvID0gYXdhaXQgZWNyLmRlc2NyaWJlSW1hZ2VzKHtcbiAgICAgICAgICByZXBvc2l0b3J5TmFtZTogcmVwbyxcbiAgICAgICAgICBpbWFnZUlkczogaW1hZ2VJZHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdldEltYWdlSW5mbyA9IGF3YWl0IGVjci5iYXRjaEdldEltYWdlKHtcbiAgICAgICAgICByZXBvc2l0b3J5TmFtZTogcmVwbyxcbiAgICAgICAgICBpbWFnZUlkczogaW1hZ2VJZHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkSW1hZ2VJbmZvID0gZGVzY3JpYmVJbWFnZUluZm8uaW1hZ2VEZXRhaWxzPy5tYXAoaW1hZ2VEZXRhaWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nSW1hZ2UgPSBnZXRJbWFnZUluZm8uaW1hZ2VzPy5maW5kKFxuICAgICAgICAgICAgaW1nID0+IGltZy5pbWFnZUlkPy5pbWFnZURpZ2VzdCA9PT0gaW1hZ2VEZXRhaWwuaW1hZ2VEaWdlc3QsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5pbWFnZURldGFpbCxcbiAgICAgICAgICAgIG1hbmlmZXN0OiBtYXRjaGluZ0ltYWdlPy5pbWFnZU1hbmlmZXN0LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgY29tYmluZWRJbWFnZUluZm8gPz8gW10pIHtcbiAgICAgICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBpbWFnZS5pbWFnZVB1c2hlZEF0ID8/IG5ldyBEYXRlKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAvLyBTdG9yZSB0aGUgaW1hZ2UgaWYgaXQgd2FzIHB1c2hlZCBlYXJsaWVyIHRoYW4gdG9kYXkgLSBjcmVhdGVkQnVmZmVyRGF5c1xuICAgICAgICAgIGlmIChpbWFnZS5pbWFnZURpZ2VzdCAmJiBsYXN0TW9kaWZpZWQgPCBuZXcgRGF0ZShjdXJyZW50VGltZSAtICh0aGlzLnByb3BzLmNyZWF0ZWRCdWZmZXJEYXlzICogREFZKSkpIHtcbiAgICAgICAgICAgIGJhdGNoLnB1c2gobmV3IEltYWdlQXNzZXQoaW1hZ2UuaW1hZ2VEaWdlc3QsIGltYWdlLmltYWdlU2l6ZUluQnl0ZXMgPz8gMCwgaW1hZ2UuaW1hZ2VUYWdzID8/IFtdLCBpbWFnZS5tYW5pZmVzdCA/PyAnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvblRva2VuID0gcmVzcG9uc2UubmV4dFRva2VuO1xuXG4gICAgICAgIGlmICghY29udGludWF0aW9uVG9rZW4pIGJyZWFrOyAvLyBObyBtb3JlIGltYWdlcyB0byBmZXRjaFxuICAgICAgfVxuXG4gICAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCkge1xuICAgICAgICB5aWVsZCBiYXRjaDtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChjb250aW51YXRpb25Ub2tlbik7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdG9yIGZ1bmN0aW9uIHRoYXQgcmVhZHMgb2JqZWN0cyBmcm9tIHRoZSBTMyBCdWNrZXQgaW4gYmF0Y2hlcy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgKnJlYWRCdWNrZXRJbkJhdGNoZXMoczM6IElTM0NsaWVudCwgYnVja2V0OiBzdHJpbmcsIGJhdGNoU2l6ZTogbnVtYmVyID0gMTAwMCwgY3VycmVudFRpbWU6IG51bWJlcik6IEFzeW5jR2VuZXJhdG9yPE9iamVjdEFzc2V0W10+IHtcbiAgICBsZXQgY29udGludWF0aW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGJhdGNoOiBPYmplY3RBc3NldFtdID0gW107XG5cbiAgICAgIHdoaWxlIChiYXRjaC5sZW5ndGggPCBiYXRjaFNpemUpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5saXN0T2JqZWN0c1YyKHtcbiAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICBDb250aW51YXRpb25Ub2tlbjogY29udGludWF0aW9uVG9rZW4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlLkNvbnRlbnRzPy5mb3JFYWNoKChvYmo6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGtleSA9IG9iai5LZXkgPz8gJyc7XG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IG9iai5TaXplID8/IDA7XG4gICAgICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gb2JqLkxhc3RNb2RpZmllZCA/PyBuZXcgRGF0ZShjdXJyZW50VGltZSk7XG4gICAgICAgICAgLy8gU3RvcmUgdGhlIG9iamVjdCBpZiBpdCBoYXMgYSBLZXkgYW5kXG4gICAgICAgICAgLy8gaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRvZGF5IC0gY3JlYXRlZEJ1ZmZlckRheXNcbiAgICAgICAgICBpZiAoa2V5ICYmIGxhc3RNb2RpZmllZCA8IG5ldyBEYXRlKGN1cnJlbnRUaW1lIC0gKHRoaXMucHJvcHMuY3JlYXRlZEJ1ZmZlckRheXMgKiBEQVkpKSkge1xuICAgICAgICAgICAgYmF0Y2gucHVzaChuZXcgT2JqZWN0QXNzZXQoYnVja2V0LCBrZXksIHNpemUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnRpbnVhdGlvblRva2VuID0gcmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuO1xuXG4gICAgICAgIGlmICghY29udGludWF0aW9uVG9rZW4pIGJyZWFrOyAvLyBObyBtb3JlIG9iamVjdHMgdG8gZmV0Y2hcbiAgICAgIH1cblxuICAgICAgaWYgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgeWllbGQgYmF0Y2g7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoY29udGludWF0aW9uVG9rZW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25maXJtYXRpb25Qcm9tcHQocHJpbnRlcjogUHJvZ3Jlc3NQcmludGVyLCBkZWxldGFibGVzOiBHY0Fzc2V0W10sIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHBsdXJhbGl6ZSA9IChuYW1lOiBzdHJpbmcsIGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIGNvdW50ID09PSAxID8gbmFtZSA6IGAke25hbWV9c2A7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmNvbmZpcm0pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbXG4gICAgICAgIGBGb3VuZCAke2RlbGV0YWJsZXMubGVuZ3RofSAke3BsdXJhbGl6ZSh0eXBlLCBkZWxldGFibGVzLmxlbmd0aCl9IHRvIGRlbGV0ZSBiYXNlZCBvZmYgb2YgdGhlIGZvbGxvd2luZyBjcml0ZXJpYTpgLFxuICAgICAgICBgLSAke3R5cGV9cyBoYXZlIGJlZW4gaXNvbGF0ZWQgZm9yID4gJHt0aGlzLnByb3BzLnJvbGxiYWNrQnVmZmVyRGF5c30gZGF5c2AsXG4gICAgICAgIGAtICR7dHlwZX1zIHdlcmUgY3JlYXRlZCA+ICR7dGhpcy5wcm9wcy5jcmVhdGVkQnVmZmVyRGF5c30gZGF5cyBhZ29gLFxuICAgICAgICAnJyxcbiAgICAgICAgJ0RlbGV0ZSB0aGlzIGJhdGNoICh5ZXMvbm8vZGVsZXRlLWFsbCk/JyxcbiAgICAgIF0uam9pbignXFxuJyk7XG4gICAgICBwcmludGVyLnBhdXNlKCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHByb21wdGx5LnByb21wdChtZXNzYWdlLFxuICAgICAgICB7IHRyaW06IHRydWUgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEFueXRoaW5nIG90aGVyIHRoYW4geWVzL3kvZGVsZXRlLWFsbCBpcyB0cmVhdGVkIGFzIG5vXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFbJ3llcycsICd5JywgJ2RlbGV0ZS1hbGwnXS5pbmNsdWRlcyhyZXNwb25zZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdEZWxldGlvbiBhYm9ydGVkIGJ5IHVzZXInKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UudG9Mb3dlckNhc2UoKSA9PSAnZGVsZXRlLWFsbCcpIHtcbiAgICAgICAgdGhpcy5jb25maXJtID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHByaW50ZXIucmVzdW1lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFydGl0aW9uPEE+KHhzOiBJdGVyYWJsZTxBPiwgcHJlZDogKHg6IEEpID0+IGJvb2xlYW4pOiB7IGluY2x1ZGVkOiBBW107IGV4Y2x1ZGVkOiBBW10gfSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBpbmNsdWRlZDogW10gYXMgQVtdLFxuICAgIGV4Y2x1ZGVkOiBbXSBhcyBBW10sXG4gIH07XG5cbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgaWYgKHByZWQoeCkpIHtcbiAgICAgIHJlc3VsdC5pbmNsdWRlZC5wdXNoKHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQuZXhjbHVkZWQucHVzaCh4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpbWFnZU1hcChpbWFnZUlkczogSW1hZ2VJZGVudGlmaWVyW10pIHtcbiAgY29uc3QgaW1hZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBpbWFnZSBvZiBpbWFnZUlkcyA/PyBbXSkge1xuICAgIGlmICghaW1hZ2UuaW1hZ2VEaWdlc3QgfHwgIWltYWdlLmltYWdlVGFnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFpbWFnZXNbaW1hZ2UuaW1hZ2VEaWdlc3RdKSB7XG4gICAgICBpbWFnZXNbaW1hZ2UuaW1hZ2VEaWdlc3RdID0gW107XG4gICAgfVxuICAgIGltYWdlc1tpbWFnZS5pbWFnZURpZ2VzdF0ucHVzaChpbWFnZS5pbWFnZVRhZyk7XG4gIH1cbiAgcmV0dXJuIGltYWdlcztcbn1cbiJdfQ==
|
|
614
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FyYmFnZS1jb2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnYXJiYWdlLWNvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSwrQkFBK0I7QUFDL0IscUNBQXFDO0FBRXJDLGtEQUEwRTtBQUMxRSx5REFBcUQ7QUFDckQsbURBQTBGO0FBQzFGLCtEQUEyRDtBQUMzRCwyQ0FBa0Q7QUFDbEQsc0NBQWlDO0FBRWpDLG1EQUFtRDtBQUNuRCw0R0FBNEc7QUFDNUcsTUFBTSxNQUFNLEdBQTZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUUvQyxRQUFBLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQztBQUNyQyxRQUFBLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLENBQUMsK0JBQStCO0FBQ25GLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxrQ0FBa0M7QUFJbkU7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFFSDtJQUNBO0lBQ0E7SUFDQTtJQUpsQixZQUNrQixNQUFjLEVBQ2QsSUFBWSxFQUNaLElBQWMsRUFDZCxRQUFnQjtRQUhoQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFNBQUksR0FBSixJQUFJLENBQVU7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFRO0lBRWxDLENBQUM7SUFFTyxNQUFNLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxNQUFNLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMs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L2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IEltYWdlSWRlbnRpZmllciB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3InO1xuaW1wb3J0IHR5cGUgeyBUYWcgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgcHJvbXB0bHkgZnJvbSAncHJvbXB0bHknO1xuaW1wb3J0IHR5cGUgeyBJRUNSQ2xpZW50LCBJUzNDbGllbnQsIFNESywgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IERFRkFVTFRfVE9PTEtJVF9TVEFDS19OQU1FLCBUb29sa2l0SW5mbyB9IGZyb20gJy4uL3Rvb2xraXQtaW5mbyc7XG5pbXBvcnQgeyBQcm9ncmVzc1ByaW50ZXIgfSBmcm9tICcuL3Byb2dyZXNzLXByaW50ZXInO1xuaW1wb3J0IHsgQWN0aXZlQXNzZXRDYWNoZSwgQmFja2dyb3VuZFN0YWNrUmVmcmVzaCwgcmVmcmVzaFN0YWNrcyB9IGZyb20gJy4vc3RhY2stcmVmcmVzaCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuXG4vLyBNdXN0IHVzZSBhIHJlcXVpcmUoKSBvdGhlcndpc2UgZXNidWlsZCBjb21wbGFpbnNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtaW1wb3J0c1xuY29uc3QgcExpbWl0OiB0eXBlb2YgaW1wb3J0KCdwLWxpbWl0JykgPSByZXF1aXJlKCdwLWxpbWl0Jyk7XG5cbmV4cG9ydCBjb25zdCBTM19JU09MQVRFRF9UQUcgPSAnYXdzLWNkazppc29sYXRlZCc7XG5leHBvcnQgY29uc3QgRUNSX0lTT0xBVEVEX1RBRyA9ICdhd3MtY2RrLmlzb2xhdGVkJzsgLy8gJzonIGlzIG5vdCB2YWxpZCBpbiBFQ1IgdGFnc1xuY29uc3QgUF9MSU1JVCA9IDUwO1xuY29uc3QgREFZID0gMjQgKiA2MCAqIDYwICogMTAwMDsgLy8gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIGRheVxuXG5leHBvcnQgdHlwZSBHY0Fzc2V0ID0gSW1hZ2VBc3NldCB8IE9iamVjdEFzc2V0O1xuXG4vKipcbiAqIEFuIGltYWdlIGFzc2V0IHRoYXQgbGl2ZXMgaW4gdGhlIGJvb3RzdHJhcHBlZCBFQ1IgUmVwb3NpdG9yeVxuICovXG5leHBvcnQgY2xhc3MgSW1hZ2VBc3NldCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlnZXN0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHNpemU6IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGFnczogc3RyaW5nW10sXG4gICAgcHVibGljIHJlYWRvbmx5IG1hbmlmZXN0OiBzdHJpbmcsXG4gICkge1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWcodGFnOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YWdzLmZpbmQodCA9PiB0LmluY2x1ZGVzKHRhZykpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNUYWcodGFnOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YWdzLnNvbWUodCA9PiB0LmluY2x1ZGVzKHRhZykpO1xuICB9XG5cbiAgcHVibGljIGhhc0lzb2xhdGVkVGFnKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1RhZyhFQ1JfSVNPTEFURURfVEFHKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJc29sYXRlZFRhZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUYWcoRUNSX0lTT0xBVEVEX1RBRyk7XG4gIH1cblxuICBwdWJsaWMgaXNvbGF0ZWRUYWdCZWZvcmUoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IGRhdGVJc29sYXRlZCA9IHRoaXMuZGF0ZUlzb2xhdGVkKCk7XG4gICAgaWYgKCFkYXRlSXNvbGF0ZWQgfHwgZGF0ZUlzb2xhdGVkID09ICcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKE51bWJlcihkYXRlSXNvbGF0ZWQpKSA8IGRhdGU7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRJbWFnZVRhZyhpbmM6IG51bWJlcikge1xuICAgIC8vIGlzb2xhdGVkVGFnIHdpbGwgbG9vayBsaWtlIFwiWC1hd3MtY2RrLmlzb2xhdGVkLVlZWVlZXCJcbiAgICByZXR1cm4gYCR7aW5jfS0ke0VDUl9JU09MQVRFRF9UQUd9LSR7U3RyaW5nKERhdGUubm93KCkpfWA7XG4gIH1cblxuICBwdWJsaWMgZGF0ZUlzb2xhdGVkKCkge1xuICAgIC8vIGlzb2xhdGVkVGFnIHdpbGwgbG9vayBsaWtlIFwiWC1hd3MtY2RrLmlzb2xhdGVkLVlZWVlZXCJcbiAgICByZXR1cm4gdGhpcy5nZXRJc29sYXRlZFRhZygpPy5zcGxpdCgnLScpWzNdO1xuICB9XG59XG5cbi8qKlxuICogQW4gb2JqZWN0IGFzc2V0IHRoYXQgbGl2ZXMgaW4gdGhlIGJvb3RzdHJhcHBlZCBTMyBCdWNrZXRcbiAqL1xuZXhwb3J0IGNsYXNzIE9iamVjdEFzc2V0IHtcbiAgcHJpdmF0ZSBjYWNoZWRfdGFnczogVGFnW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnVja2V0OiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBrZXk6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IHNpemU6IG51bWJlcikge1xuICB9XG5cbiAgcHVibGljIGZpbGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua2V5LnNwbGl0KCcuJylbMF07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWxsVGFncyhzMzogSVMzQ2xpZW50KSB7XG4gICAgaWYgKHRoaXMuY2FjaGVkX3RhZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZF90YWdzO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgczMuZ2V0T2JqZWN0VGFnZ2luZyh7IEJ1Y2tldDogdGhpcy5idWNrZXQsIEtleTogdGhpcy5rZXkgfSk7XG4gICAgdGhpcy5jYWNoZWRfdGFncyA9IHJlc3BvbnNlLlRhZ1NldDtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRfdGFncztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFnKHRhZzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZF90YWdzKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDYW5ub3QgY2FsbCBnZXRUYWcgYmVmb3JlIGFsbFRhZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkX3RhZ3MuZmluZCgodDogYW55KSA9PiB0LktleSA9PT0gdGFnKT8uVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGhhc1RhZyh0YWc6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5jYWNoZWRfdGFncykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQ2Fubm90IGNhbGwgaGFzVGFnIGJlZm9yZSBhbGxUYWdzJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNhY2hlZF90YWdzLnNvbWUoKHQ6IGFueSkgPT4gdC5LZXkgPT09IHRhZyk7XG4gIH1cblxuICBwdWJsaWMgaGFzSXNvbGF0ZWRUYWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVGFnKFMzX0lTT0xBVEVEX1RBRyk7XG4gIH1cblxuICBwdWJsaWMgaXNvbGF0ZWRUYWdCZWZvcmUoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IHRhZ1ZhbHVlID0gdGhpcy5nZXRUYWcoUzNfSVNPTEFURURfVEFHKTtcbiAgICBpZiAoIXRhZ1ZhbHVlIHx8IHRhZ1ZhbHVlID09ICcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKE51bWJlcih0YWdWYWx1ZSkpIDwgZGF0ZTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgR2FyYmFnZSBDb2xsZWN0b3JcbiAqL1xuaW50ZXJmYWNlIEdhcmJhZ2VDb2xsZWN0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHBlcmZvcm0uIFNwZWNpZnkgdGhpcyBpZiB5b3Ugd2FudCB0byBwZXJmb3JtIGEgdHJ1bmNhdGVkIHNldFxuICAgKiBvZiBhY3Rpb25zIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbjogJ3ByaW50JyB8ICd0YWcnIHwgJ2RlbGV0ZS10YWdnZWQnIHwgJ2Z1bGwnO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBhc3NldCB0byBnYXJiYWdlIGNvbGxlY3QuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnczMnIHwgJ2VjcicgfCAnYWxsJztcblxuICAvKipcbiAgICogVGhlIGRheXMgYW4gYXNzZXQgbXVzdCBiZSBpbiBpc29sYXRpb24gYmVmb3JlIGJlaW5nIGFjdHVhbGx5IGRlbGV0ZWQuXG4gICAqL1xuICByZWFkb25seSByb2xsYmFja0J1ZmZlckRheXM6IG51bWJlcjtcblxuICAvKipcbiAgICogUmVmdXNlIGRlbGV0aW9uIG9mIGFueSBhc3NldHMgeW91bmdlciB0aGFuIHRoaXMgbnVtYmVyIG9mIGRheXMuXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQnVmZmVyRGF5czogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdG8gZGVwbG95IHRoaXMgc3RhY2sgaW5cbiAgICpcbiAgICogVGhlIGVudmlyb25tZW50IG9uIHRoZSBzdGFjayBhcnRpZmFjdCBtYXkgYmUgdW5yZXNvbHZlZCwgdGhpcyBvbmVcbiAgICogbXVzdCBiZSByZXNvbHZlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBTREsgcHJvdmlkZXIgKHNlZWRlZCB3aXRoIGRlZmF1bHQgY3JlZGVudGlhbHMpXG4gICAqXG4gICAqIFdpbGwgYmUgdXNlZCB0byBtYWtlIFNESyBjYWxscyB0byBDbG91ZEZvcm1hdGlvbiwgUzMsIGFuZCBFQ1IuXG4gICAqL1xuICByZWFkb25seSBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2VuZCBtZXNzYWdlcy5cbiAgICovXG4gIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGJvb3RzdHJhcCBzdGFjayB0byBsb29rIGZvci5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUVcbiAgICovXG4gIHJlYWRvbmx5IGJvb3RzdHJhcFN0YWNrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ29uZmlybSB3aXRoIHRoZSB1c2VyIGJlZm9yZSBhY3R1YWwgZGVsZXRpb24gaGFwcGVuc1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjb25maXJtPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRvIGZhY2lsaXRhdGUgR2FyYmFnZSBDb2xsZWN0aW9uIG9mIFMzIGFuZCBFQ1IgYXNzZXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yIHtcbiAgcHJpdmF0ZSBnYXJiYWdlQ29sbGVjdFMzQXNzZXRzOiBib29sZWFuO1xuICBwcml2YXRlIGdhcmJhZ2VDb2xsZWN0RWNyQXNzZXRzOiBib29sZWFuO1xuICBwcml2YXRlIHBlcm1pc3Npb25Ub0RlbGV0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwZXJtaXNzaW9uVG9UYWc6IGJvb2xlYW47XG4gIHByaXZhdGUgYm9vdHN0cmFwU3RhY2tOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgY29uZmlybTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHByb3BzOiBHYXJiYWdlQ29sbGVjdG9yUHJvcHMpIHtcbiAgICB0aGlzLmlvSGVscGVyID0gcHJvcHMuaW9IZWxwZXI7XG5cbiAgICB0aGlzLmdhcmJhZ2VDb2xsZWN0UzNBc3NldHMgPSBbJ3MzJywgJ2FsbCddLmluY2x1ZGVzKHByb3BzLnR5cGUpO1xuICAgIHRoaXMuZ2FyYmFnZUNvbGxlY3RFY3JBc3NldHMgPSBbJ2VjcicsICdhbGwnXS5pbmNsdWRlcyhwcm9wcy50eXBlKTtcblxuICAgIHRoaXMucGVybWlzc2lvblRvRGVsZXRlID0gWydkZWxldGUtdGFnZ2VkJywgJ2Z1bGwnXS5pbmNsdWRlcyhwcm9wcy5hY3Rpb24pO1xuICAgIHRoaXMucGVybWlzc2lvblRvVGFnID0gWyd0YWcnLCAnZnVsbCddLmluY2x1ZGVzKHByb3BzLmFjdGlvbik7XG4gICAgdGhpcy5jb25maXJtID0gcHJvcHMuY29uZmlybSA/PyB0cnVlO1xuXG4gICAgdGhpcy5ib290c3RyYXBTdGFja05hbWUgPSBwcm9wcy5ib290c3RyYXBTdGFja05hbWUgPz8gREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUU7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gdGhlIHJlc29sdmVkIGVudmlyb25tZW50LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdhcmJhZ2VDb2xsZWN0KCkge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7dGhpcy5nYXJiYWdlQ29sbGVjdFMzQXNzZXRzfSAke3RoaXMuZ2FyYmFnZUNvbGxlY3RFY3JBc3NldHN9YCkpO1xuXG4gICAgLy8gU0RLc1xuICAgIGNvbnN0IHNkayA9IChhd2FpdCB0aGlzLnByb3BzLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KHRoaXMucHJvcHMucmVzb2x2ZWRFbnZpcm9ubWVudCwgTW9kZS5Gb3JXcml0aW5nKSkuc2RrO1xuICAgIGNvbnN0IGNmbiA9IHNkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gICAgY29uc3QgcXVhbGlmaWVyID0gYXdhaXQgdGhpcy5ib290c3RyYXBRdWFsaWZpZXIoc2RrLCB0aGlzLmJvb3RzdHJhcFN0YWNrTmFtZSk7XG4gICAgY29uc3QgYWN0aXZlQXNzZXRzID0gbmV3IEFjdGl2ZUFzc2V0Q2FjaGUoKTtcblxuICAgIC8vIEdyYWIgc3RhY2sgdGVtcGxhdGVzIGZpcnN0XG4gICAgYXdhaXQgcmVmcmVzaFN0YWNrcyhjZm4sIHRoaXMuaW9IZWxwZXIsIGFjdGl2ZUFzc2V0cywgcXVhbGlmaWVyKTtcbiAgICAvLyBTdGFydCB0aGUgYmFja2dyb3VuZCByZWZyZXNoXG4gICAgY29uc3QgYmFja2dyb3VuZFN0YWNrUmVmcmVzaCA9IG5ldyBCYWNrZ3JvdW5kU3RhY2tSZWZyZXNoKHtcbiAgICAgIGNmbixcbiAgICAgIGlvSGVscGVyOiB0aGlzLmlvSGVscGVyLFxuICAgICAgYWN0aXZlQXNzZXRzLFxuICAgICAgcXVhbGlmaWVyLFxuICAgIH0pO1xuICAgIGJhY2tncm91bmRTdGFja1JlZnJlc2guc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5nYXJiYWdlQ29sbGVjdFMzQXNzZXRzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2FyYmFnZUNvbGxlY3RTMyhzZGssIGFjdGl2ZUFzc2V0cywgYmFja2dyb3VuZFN0YWNrUmVmcmVzaCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdhcmJhZ2VDb2xsZWN0RWNyQXNzZXRzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2FyYmFnZUNvbGxlY3RFY3Ioc2RrLCBhY3RpdmVBc3NldHMsIGJhY2tncm91bmRTdGFja1JlZnJlc2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGJhY2tncm91bmRTdGFja1JlZnJlc2guc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBFQ1IgYXNzZXRzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2FyYmFnZUNvbGxlY3RFY3Ioc2RrOiBTREssIGFjdGl2ZUFzc2V0czogQWN0aXZlQXNzZXRDYWNoZSwgYmFja2dyb3VuZFN0YWNrUmVmcmVzaDogQmFja2dyb3VuZFN0YWNrUmVmcmVzaCkge1xuICAgIGNvbnN0IGVjciA9IHNkay5lY3IoKTtcbiAgICBjb25zdCByZXBvID0gYXdhaXQgdGhpcy5ib290c3RyYXBSZXBvc2l0b3J5TmFtZShzZGssIHRoaXMuYm9vdHN0cmFwU3RhY2tOYW1lKTtcbiAgICBjb25zdCBudW1JbWFnZXMgPSBhd2FpdCB0aGlzLm51bUltYWdlc0luUmVwbyhlY3IsIHJlcG8pO1xuICAgIGNvbnN0IHByaW50ZXIgPSBuZXcgUHJvZ3Jlc3NQcmludGVyKHRoaXMuaW9IZWxwZXIsIG51bUltYWdlcywgMTAwMCk7XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBGb3VuZCBib290c3RyYXAgcmVwbyAke3JlcG99IHdpdGggJHtudW1JbWFnZXN9IGltYWdlc2ApKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBjb25zdCBiYXRjaGVzID0gMTtcbiAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IDEwMDA7XG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBncmFjZURheXMgPSB0aGlzLnByb3BzLnJvbGxiYWNrQnVmZmVyRGF5cztcblxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgUGFyc2luZyB0aHJvdWdoICR7bnVtSW1hZ2VzfSBpbWFnZXMgaW4gYmF0Y2hlc2ApKTtcblxuICAgICAgcHJpbnRlci5zdGFydCgpO1xuXG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGJhdGNoIG9mIHRoaXMucmVhZFJlcG9JbkJhdGNoZXMoZWNyLCByZXBvLCBiYXRjaFNpemUsIGN1cnJlbnRUaW1lKSkge1xuICAgICAgICBhd2FpdCBiYWNrZ3JvdW5kU3RhY2tSZWZyZXNoLm5vT2xkZXJUaGFuKDYwMF8wMDApOyAvLyAxMCBtaW5zXG5cbiAgICAgICAgY29uc3QgeyBpbmNsdWRlZDogaXNvbGF0ZWQsIGV4Y2x1ZGVkOiBub3RJc29sYXRlZCB9ID0gcGFydGl0aW9uKGJhdGNoLCBhc3NldCA9PiAhYXNzZXQudGFncy5zb21lKHQgPT4gYWN0aXZlQXNzZXRzLmNvbnRhaW5zKHQpKSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtpc29sYXRlZC5sZW5ndGh9IGlzb2xhdGVkIGltYWdlc2ApKTtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtub3RJc29sYXRlZC5sZW5ndGh9IG5vdCBpc29sYXRlZCBpbWFnZXNgKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7YmF0Y2gubGVuZ3RofSBpbWFnZXMgdG90YWxgKSk7XG5cbiAgICAgICAgbGV0IGRlbGV0YWJsZXM6IEltYWdlQXNzZXRbXSA9IGlzb2xhdGVkO1xuICAgICAgICBsZXQgdGFnZ2FibGVzOiBJbWFnZUFzc2V0W10gPSBbXTtcbiAgICAgICAgbGV0IHVudGFnZ2FibGVzOiBJbWFnZUFzc2V0W10gPSBbXTtcblxuICAgICAgICBpZiAoZ3JhY2VEYXlzID4gMCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coJ0ZpbHRlcmluZyBvdXQgaW1hZ2VzIHRoYXQgYXJlIG5vdCBvbGQgZW5vdWdoIHRvIGRlbGV0ZScpKTtcblxuICAgICAgICAgIC8vIFdlIGRlbGV0ZSBpbWFnZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgaW4gQWN0aXZlQXNzZXRzIGFuZCBoYXZlIHRoZSBJc29sYXRlZCBUYWcgd2l0aCBhIGRhdGVcbiAgICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIGN1cnJlbnQgdGltZSAtIGdyYWNlIHBlcmlvZC5cbiAgICAgICAgICBkZWxldGFibGVzID0gaXNvbGF0ZWQuZmlsdGVyKGltZyA9PiBpbWcuaXNvbGF0ZWRUYWdCZWZvcmUobmV3IERhdGUoY3VycmVudFRpbWUgLSAoZ3JhY2VEYXlzICogREFZKSkpKTtcblxuICAgICAgICAgIC8vIFdlIHRhZyBpbWFnZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgaW4gQWN0aXZlQXNzZXRzIGFuZCBkbyBub3QgaGF2ZSB0aGUgSXNvbGF0ZWQgVGFnLlxuICAgICAgICAgIHRhZ2dhYmxlcyA9IGlzb2xhdGVkLmZpbHRlcihpbWcgPT4gIWltZy5oYXNJc29sYXRlZFRhZygpKTtcblxuICAgICAgICAgIC8vIFdlIHVudGFnIGltYWdlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGluIEFjdGl2ZUFzc2V0cyBhbmQgY3VycmVudGx5IGhhdmUgdGhlIElzb2xhdGVkIFRhZy5cbiAgICAgICAgICB1bnRhZ2dhYmxlcyA9IG5vdElzb2xhdGVkLmZpbHRlcihpbWcgPT4gaW1nLmhhc0lzb2xhdGVkVGFnKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtkZWxldGFibGVzLmxlbmd0aH0gZGVsZXRhYmxlIGFzc2V0c2ApKTtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHt0YWdnYWJsZXMubGVuZ3RofSB0YWdnYWJsZSBhc3NldHNgKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7dW50YWdnYWJsZXMubGVuZ3RofSBhc3NldHMgdG8gdW50YWdgKSk7XG5cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblRvRGVsZXRlICYmIGRlbGV0YWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybWF0aW9uUHJvbXB0KHByaW50ZXIsIGRlbGV0YWJsZXMsICdpbWFnZScpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucGFyYWxsZWxEZWxldGVFY3IoZWNyLCByZXBvLCBkZWxldGFibGVzLCBwcmludGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25Ub1RhZyAmJiB0YWdnYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucGFyYWxsZWxUYWdFY3IoZWNyLCByZXBvLCB0YWdnYWJsZXMsIHByaW50ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblRvVGFnICYmIHVudGFnZ2FibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBhcmFsbGVsVW50YWdFY3IoZWNyLCByZXBvLCB1bnRhZ2dhYmxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludGVyLnJlcG9ydFNjYW5uZWRBc3NldChiYXRjaC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHByaW50ZXIuc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBTMyBhc3NldHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnYXJiYWdlQ29sbGVjdFMzKHNkazogU0RLLCBhY3RpdmVBc3NldHM6IEFjdGl2ZUFzc2V0Q2FjaGUsIGJhY2tncm91bmRTdGFja1JlZnJlc2g6IEJhY2tncm91bmRTdGFja1JlZnJlc2gpIHtcbiAgICBjb25zdCBzMyA9IHNkay5zMygpO1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuYm9vdHN0cmFwQnVja2V0TmFtZShzZGssIHRoaXMuYm9vdHN0cmFwU3RhY2tOYW1lKTtcbiAgICBjb25zdCBudW1PYmplY3RzID0gYXdhaXQgdGhpcy5udW1PYmplY3RzSW5CdWNrZXQoczMsIGJ1Y2tldCk7XG4gICAgY29uc3QgcHJpbnRlciA9IG5ldyBQcm9ncmVzc1ByaW50ZXIodGhpcy5pb0hlbHBlciwgbnVtT2JqZWN0cywgMTAwMCk7XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBGb3VuZCBib290c3RyYXAgYnVja2V0ICR7YnVja2V0fSB3aXRoICR7bnVtT2JqZWN0c30gb2JqZWN0c2ApKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFNpemUgPSAxMDAwO1xuICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgZ3JhY2VEYXlzID0gdGhpcy5wcm9wcy5yb2xsYmFja0J1ZmZlckRheXM7XG5cbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFBhcnNpbmcgdGhyb3VnaCAke251bU9iamVjdHN9IG9iamVjdHMgaW4gYmF0Y2hlc2ApKTtcblxuICAgICAgcHJpbnRlci5zdGFydCgpO1xuXG4gICAgICAvLyBQcm9jZXNzIG9iamVjdHMgaW4gYmF0Y2hlcyBvZiAxMDAwXG4gICAgICAvLyBUaGlzIGlzIHRoZSBiYXRjaCBsaW1pdCBvZiBzMy5EZWxldGVPYmplY3QgYW5kIHdlIGludGVuZCB0byBvcHRpbWl6ZSBmb3IgdGhlIFwid29yc3QgY2FzZVwiIHNjZW5hcmlvXG4gICAgICAvLyB3aGVyZSBnYyBpcyBydW4gZm9yIHRoZSBmaXJzdCB0aW1lIG9uIGEgbG9uZy1zdGFuZGluZyBidWNrZXQgd2hlcmUgfjEwMCUgb2Ygb2JqZWN0cyBhcmUgaXNvbGF0ZWQuXG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGJhdGNoIG9mIHRoaXMucmVhZEJ1Y2tldEluQmF0Y2hlcyhzMywgYnVja2V0LCBiYXRjaFNpemUsIGN1cnJlbnRUaW1lKSkge1xuICAgICAgICBhd2FpdCBiYWNrZ3JvdW5kU3RhY2tSZWZyZXNoLm5vT2xkZXJUaGFuKDYwMF8wMDApOyAvLyAxMCBtaW5zXG5cbiAgICAgICAgY29uc3QgeyBpbmNsdWRlZDogaXNvbGF0ZWQsIGV4Y2x1ZGVkOiBub3RJc29sYXRlZCB9ID0gcGFydGl0aW9uKGJhdGNoLCBhc3NldCA9PiAhYWN0aXZlQXNzZXRzLmNvbnRhaW5zKGFzc2V0LmZpbGVOYW1lKCkpKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGAke2lzb2xhdGVkLmxlbmd0aH0gaXNvbGF0ZWQgYXNzZXRzYCkpO1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGAke25vdElzb2xhdGVkLmxlbmd0aH0gbm90IGlzb2xhdGVkIGFzc2V0c2ApKTtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtiYXRjaC5sZW5ndGh9IG9iamVjdHMgdG90YWxgKSk7XG5cbiAgICAgICAgbGV0IGRlbGV0YWJsZXM6IE9iamVjdEFzc2V0W10gPSBpc29sYXRlZDtcbiAgICAgICAgbGV0IHRhZ2dhYmxlczogT2JqZWN0QXNzZXRbXSA9IFtdO1xuICAgICAgICBsZXQgdW50YWdnYWJsZXM6IE9iamVjdEFzc2V0W10gPSBbXTtcblxuICAgICAgICBpZiAoZ3JhY2VEYXlzID4gMCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coJ0ZpbHRlcmluZyBvdXQgYXNzZXRzIHRoYXQgYXJlIG5vdCBvbGQgZW5vdWdoIHRvIGRlbGV0ZScpKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBhcmFsbGVsUmVhZEFsbFRhZ3MoczMsIGJhdGNoKTtcblxuICAgICAgICAgIC8vIFdlIGRlbGV0ZSBvYmplY3RzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGluIEFjdGl2ZUFzc2V0cyBhbmQgaGF2ZSB0aGUgSXNvbGF0ZWQgVGFnIHdpdGggYSBkYXRlXG4gICAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBjdXJyZW50IHRpbWUgLSBncmFjZSBwZXJpb2QuXG4gICAgICAgICAgZGVsZXRhYmxlcyA9IGlzb2xhdGVkLmZpbHRlcihvYmogPT4gb2JqLmlzb2xhdGVkVGFnQmVmb3JlKG5ldyBEYXRlKGN1cnJlbnRUaW1lIC0gKGdyYWNlRGF5cyAqIERBWSkpKSk7XG5cbiAgICAgICAgICAvLyBXZSB0YWcgb2JqZWN0cyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBpbiBBY3RpdmVBc3NldHMgYW5kIGRvIG5vdCBoYXZlIHRoZSBJc29sYXRlZCBUYWcuXG4gICAgICAgICAgdGFnZ2FibGVzID0gaXNvbGF0ZWQuZmlsdGVyKG9iaiA9PiAhb2JqLmhhc0lzb2xhdGVkVGFnKCkpO1xuXG4gICAgICAgICAgLy8gV2UgdW50YWcgb2JqZWN0cyB0aGF0IGFyZSByZWZlcmVuY2VkIGluIEFjdGl2ZUFzc2V0cyBhbmQgY3VycmVudGx5IGhhdmUgdGhlIElzb2xhdGVkIFRhZy5cbiAgICAgICAgICB1bnRhZ2dhYmxlcyA9IG5vdElzb2xhdGVkLmZpbHRlcihvYmogPT4gb2JqLmhhc0lzb2xhdGVkVGFnKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtkZWxldGFibGVzLmxlbmd0aH0gZGVsZXRhYmxlIGFzc2V0c2ApKTtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHt0YWdnYWJsZXMubGVuZ3RofSB0YWdnYWJsZSBhc3NldHNgKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYCR7dW50YWdnYWJsZXMubGVuZ3RofSBhc3NldHMgdG8gdW50YWdgKSk7XG5cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblRvRGVsZXRlICYmIGRlbGV0YWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybWF0aW9uUHJvbXB0KHByaW50ZXIsIGRlbGV0YWJsZXMsICdvYmplY3QnKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBhcmFsbGVsRGVsZXRlUzMoczMsIGJ1Y2tldCwgZGVsZXRhYmxlcywgcHJpbnRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9uVG9UYWcgJiYgdGFnZ2FibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBhcmFsbGVsVGFnUzMoczMsIGJ1Y2tldCwgdGFnZ2FibGVzLCBjdXJyZW50VGltZSwgcHJpbnRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9uVG9UYWcgJiYgdW50YWdnYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucGFyYWxsZWxVbnRhZ1MzKHMzLCBidWNrZXQsIHVudGFnZ2FibGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50ZXIucmVwb3J0U2Nhbm5lZEFzc2V0KGJhdGNoLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcHJpbnRlci5zdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwYXJhbGxlbFJlYWRBbGxUYWdzKHMzOiBJUzNDbGllbnQsIG9iamVjdHM6IE9iamVjdEFzc2V0W10pIHtcbiAgICBjb25zdCBsaW1pdCA9IHBMaW1pdChQX0xJTUlUKTtcblxuICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcbiAgICAgIGF3YWl0IGxpbWl0KCgpID0+IG9iai5hbGxUYWdzKHMzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVudGFnIGFzc2V0cyB0aGF0IHdlcmUgcHJldmlvdXNseSB0YWdnZWQsIGJ1dCBub3cgY3VycmVudGx5IHJlZmVyZW5jZWQuXG4gICAqIFNpbmNlIHRoaXMgaXMgdHJlYXRlZCBhcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIHdlIGRvIG5vdCBwcmludCB0aGUgcmVzdWx0cyBpbiB0aGUgcHJpbnRlci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGFyYWxsZWxVbnRhZ0VjcihlY3I6IElFQ1JDbGllbnQsIHJlcG86IHN0cmluZywgdW50YWdnYWJsZXM6IEltYWdlQXNzZXRbXSkge1xuICAgIGNvbnN0IGxpbWl0ID0gcExpbWl0KFBfTElNSVQpO1xuXG4gICAgZm9yIChjb25zdCBpbWcgb2YgdW50YWdnYWJsZXMpIHtcbiAgICAgIGNvbnN0IHRhZyA9IGltZy5nZXRJc29sYXRlZFRhZygpO1xuICAgICAgYXdhaXQgbGltaXQoKCkgPT5cbiAgICAgICAgZWNyLmJhdGNoRGVsZXRlSW1hZ2Uoe1xuICAgICAgICAgIHJlcG9zaXRvcnlOYW1lOiByZXBvLFxuICAgICAgICAgIGltYWdlSWRzOiBbe1xuICAgICAgICAgICAgaW1hZ2VUYWc6IHRhZyxcbiAgICAgICAgICB9XSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFVudGFnZ2VkICR7dW50YWdnYWJsZXMubGVuZ3RofSBhc3NldHNgKSk7XG4gIH1cblxuICAvKipcbiAgICogVW50YWcgYXNzZXRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHRhZ2dlZCwgYnV0IG5vdyBjdXJyZW50bHkgcmVmZXJlbmNlZC5cbiAgICogU2luY2UgdGhpcyBpcyB0cmVhdGVkIGFzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgd2UgZG8gbm90IHByaW50IHRoZSByZXN1bHRzIGluIHRoZSBwcmludGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwYXJhbGxlbFVudGFnUzMoczM6IElTM0NsaWVudCwgYnVja2V0OiBzdHJpbmcsIHVudGFnZ2FibGVzOiBPYmplY3RBc3NldFtdKSB7XG4gICAgY29uc3QgbGltaXQgPSBwTGltaXQoUF9MSU1JVCk7XG5cbiAgICBmb3IgKGNvbnN0IG9iaiBvZiB1bnRhZ2dhYmxlcykge1xuICAgICAgY29uc3QgdGFncyA9IGF3YWl0IG9iai5hbGxUYWdzKHMzKSA/PyBbXTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gdGFncy5maWx0ZXIoKHRhZzogVGFnKSA9PiB0YWcuS2V5ICE9PSBTM19JU09MQVRFRF9UQUcpO1xuICAgICAgYXdhaXQgbGltaXQoKCkgPT5cbiAgICAgICAgczMuZGVsZXRlT2JqZWN0VGFnZ2luZyh7XG4gICAgICAgICAgQnVja2V0OiBidWNrZXQsXG4gICAgICAgICAgS2V5OiBvYmoua2V5LFxuXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGxpbWl0KCgpID0+XG4gICAgICAgIHMzLnB1dE9iamVjdFRhZ2dpbmcoe1xuICAgICAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgICAgIEtleTogb2JqLmtleSxcbiAgICAgICAgICBUYWdnaW5nOiB7XG4gICAgICAgICAgICBUYWdTZXQ6IHVwZGF0ZWRUYWdzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBVbnRhZ2dlZCAke3VudGFnZ2FibGVzLmxlbmd0aH0gYXNzZXRzYCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRhZyBpbWFnZXMgaW4gcGFyYWxsZWwgdXNpbmcgcC1saW1pdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwYXJhbGxlbFRhZ0VjcihlY3I6IElFQ1JDbGllbnQsIHJlcG86IHN0cmluZywgdGFnZ2FibGVzOiBJbWFnZUFzc2V0W10sIHByaW50ZXI6IFByb2dyZXNzUHJpbnRlcikge1xuICAgIGNvbnN0IGxpbWl0ID0gcExpbWl0KFBfTElNSVQpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdnYWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGltZyA9IHRhZ2dhYmxlc1tpXTtcbiAgICAgIGNvbnN0IHRhZ0VjciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBlY3IucHV0SW1hZ2Uoe1xuICAgICAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHJlcG8sXG4gICAgICAgICAgICBpbWFnZURpZ2VzdDogaW1nLmRpZ2VzdCxcbiAgICAgICAgICAgIGltYWdlTWFuaWZlc3Q6IGltZy5tYW5pZmVzdCxcbiAgICAgICAgICAgIGltYWdlVGFnOiBpbWcuYnVpbGRJbWFnZVRhZyhpKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgZmFsc2UgbmVnYXRpdmUgLS0gYW4gaXNvbGF0ZWQgYXNzZXQgaXMgdW50YWdnZWRcbiAgICAgICAgICAvLyBsaWtlbHkgZHVlIHRvIGFuIGltYWdlVGFnIGNvbGxpc2lvbi4gV2UgY2FuIHNhZmVseSBpZ25vcmUsXG4gICAgICAgICAgLy8gYW5kIHRoZSBpc29sYXRlZCBhc3NldCB3aWxsIGJlIHRhZ2dlZCBuZXh0IHRpbWUuXG4gICAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgV2FybmluZzogdW5hYmxlIHRvIHRhZyBpbWFnZSAke0pTT04uc3RyaW5naWZ5KGltZy50YWdzKX0gd2l0aCAke2ltZy5idWlsZEltYWdlVGFnKGkpfSBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcjogJHtlcnJvcn1gKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBhd2FpdCBsaW1pdCgoKSA9PiB0YWdFY3IoKSk7XG4gICAgfVxuXG4gICAgcHJpbnRlci5yZXBvcnRUYWdnZWRBc3NldCh0YWdnYWJsZXMpO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFRhZ2dlZCAke3RhZ2dhYmxlcy5sZW5ndGh9IGFzc2V0c2ApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWcgb2JqZWN0cyBpbiBwYXJhbGxlbCB1c2luZyBwLWxpbWl0LiBUaGUgcHV0T2JqZWN0VGFnZ2luZyBBUEkgZG9lcyBub3RcbiAgICogc3VwcG9ydCBiYXRjaCB0YWdnaW5nIHNvIHdlIG11c3QgaGFuZGxlIHRoZSBwYXJhbGxlbGlzbSBjbGllbnQtc2lkZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGFyYWxsZWxUYWdTMyhzMzogSVMzQ2xpZW50LCBidWNrZXQ6IHN0cmluZywgdGFnZ2FibGVzOiBPYmplY3RBc3NldFtdLCBkYXRlOiBudW1iZXIsIHByaW50ZXI6IFByb2dyZXNzUHJpbnRlcikge1xuICAgIGNvbnN0IGxpbWl0ID0gcExpbWl0KFBfTElNSVQpO1xuXG4gICAgZm9yIChjb25zdCBvYmogb2YgdGFnZ2FibGVzKSB7XG4gICAgICBhd2FpdCBsaW1pdCgoKSA9PlxuICAgICAgICBzMy5wdXRPYmplY3RUYWdnaW5nKHtcbiAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICBLZXk6IG9iai5rZXksXG4gICAgICAgICAgVGFnZ2luZzoge1xuICAgICAgICAgICAgVGFnU2V0OiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBLZXk6IFMzX0lTT0xBVEVEX1RBRyxcbiAgICAgICAgICAgICAgICBWYWx1ZTogU3RyaW5nKGRhdGUpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpbnRlci5yZXBvcnRUYWdnZWRBc3NldCh0YWdnYWJsZXMpO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFRhZ2dlZCAke3RhZ2dhYmxlcy5sZW5ndGh9IGFzc2V0c2ApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgaW1hZ2VzIGluIHBhcmFsbGVsLiBUaGUgZGVsZXRlSW1hZ2UgQVBJIHN1cHBvcnRzIGJhdGNoZXMgb2YgMTAwLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwYXJhbGxlbERlbGV0ZUVjcihlY3I6IElFQ1JDbGllbnQsIHJlcG86IHN0cmluZywgZGVsZXRhYmxlczogSW1hZ2VBc3NldFtdLCBwcmludGVyOiBQcm9ncmVzc1ByaW50ZXIpIHtcbiAgICBjb25zdCBiYXRjaFNpemUgPSAxMDA7XG4gICAgY29uc3QgaW1hZ2VzVG9EZWxldGUgPSBkZWxldGFibGVzLm1hcChpbWcgPT4gKHtcbiAgICAgIGltYWdlRGlnZXN0OiBpbWcuZGlnZXN0LFxuICAgIH0pKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaGVzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlc1RvRGVsZXRlLmxlbmd0aDsgaSArPSBiYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hlcy5wdXNoKGltYWdlc1RvRGVsZXRlLnNsaWNlKGksIGkgKyBiYXRjaFNpemUpKTtcbiAgICAgIH1cbiAgICAgIC8vIERlbGV0ZSBpbWFnZXMgaW4gYmF0Y2hlc1xuICAgICAgZm9yIChjb25zdCBiYXRjaCBvZiBiYXRjaGVzKSB7XG4gICAgICAgIGF3YWl0IGVjci5iYXRjaERlbGV0ZUltYWdlKHtcbiAgICAgICAgICBpbWFnZUlkczogYmF0Y2gsXG4gICAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHJlcG8sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDb3VudCA9IGJhdGNoLmxlbmd0aDtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgRGVsZXRlZCAke2RlbGV0ZWRDb3VudH0gYXNzZXRzYCkpO1xuICAgICAgICBwcmludGVyLnJlcG9ydERlbGV0ZWRBc3NldChkZWxldGFibGVzLnNsaWNlKDAsIGRlbGV0ZWRDb3VudCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0VSUk9SLm1zZyhgRXJyb3IgZGVsZXRpbmcgaW1hZ2VzOiAke2Vycn1gKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBvYmplY3RzIGluIHBhcmFsbGVsLiBUaGUgZGVsZXRlT2JqZWN0cyBBUEkgc3VwcG9ydHMgYmF0Y2hlcyBvZiAxMDAwLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwYXJhbGxlbERlbGV0ZVMzKHMzOiBJUzNDbGllbnQsIGJ1Y2tldDogc3RyaW5nLCBkZWxldGFibGVzOiBPYmplY3RBc3NldFtdLCBwcmludGVyOiBQcm9ncmVzc1ByaW50ZXIpIHtcbiAgICBjb25zdCBiYXRjaFNpemUgPSAxMDAwO1xuICAgIGNvbnN0IG9iamVjdHNUb0RlbGV0ZSA9IGRlbGV0YWJsZXMubWFwKGFzc2V0ID0+ICh7XG4gICAgICBLZXk6IGFzc2V0LmtleSxcbiAgICB9KSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzVG9EZWxldGUubGVuZ3RoOyBpICs9IGJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaGVzLnB1c2gob2JqZWN0c1RvRGVsZXRlLnNsaWNlKGksIGkgKyBiYXRjaFNpemUpKTtcbiAgICAgIH1cbiAgICAgIC8vIERlbGV0ZSBvYmplY3RzIGluIGJhdGNoZXNcbiAgICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgYmF0Y2hlcykge1xuICAgICAgICBhd2FpdCBzMy5kZWxldGVPYmplY3RzKHtcbiAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICBEZWxldGU6IHtcbiAgICAgICAgICAgIE9iamVjdHM6IGJhdGNoLFxuICAgICAgICAgICAgUXVpZXQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZENvdW50ID0gYmF0Y2gubGVuZ3RoO1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBEZWxldGVkICR7ZGVsZXRlZENvdW50fSBhc3NldHNgKSk7XG4gICAgICAgIHByaW50ZXIucmVwb3J0RGVsZXRlZEFzc2V0KGRlbGV0YWJsZXMuc2xpY2UoMCwgZGVsZXRlZENvdW50KSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGNoYWxrLnJlZChgRXJyb3IgZGVsZXRpbmcgb2JqZWN0czogJHtlcnJ9YCkpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJvb3RzdHJhcEJ1Y2tldE5hbWUoc2RrOiBTREssIGJvb3RzdHJhcFN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0b29sa2l0SW5mbyA9IGF3YWl0IFRvb2xraXRJbmZvLmxvb2t1cCh0aGlzLnByb3BzLnJlc29sdmVkRW52aXJvbm1lbnQsIHNkaywgdGhpcy5pb0hlbHBlciwgYm9vdHN0cmFwU3RhY2tOYW1lKTtcbiAgICByZXR1cm4gdG9vbGtpdEluZm8uYnVja2V0TmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYm9vdHN0cmFwUmVwb3NpdG9yeU5hbWUoc2RrOiBTREssIGJvb3RzdHJhcFN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0b29sa2l0SW5mbyA9IGF3YWl0IFRvb2xraXRJbmZvLmxvb2t1cCh0aGlzLnByb3BzLnJlc29sdmVkRW52aXJvbm1lbnQsIHNkaywgdGhpcy5pb0hlbHBlciwgYm9vdHN0cmFwU3RhY2tOYW1lKTtcbiAgICByZXR1cm4gdG9vbGtpdEluZm8ucmVwb3NpdG9yeU5hbWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJvb3RzdHJhcFF1YWxpZmllcihzZGs6IFNESywgYm9vdHN0cmFwU3RhY2tOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHRvb2xraXRJbmZvID0gYXdhaXQgVG9vbGtpdEluZm8ubG9va3VwKHRoaXMucHJvcHMucmVzb2x2ZWRFbnZpcm9ubWVudCwgc2RrLCB0aGlzLmlvSGVscGVyLCBib290c3RyYXBTdGFja05hbWUpO1xuICAgIHJldHVybiB0b29sa2l0SW5mby5ib290c3RyYXBTdGFjay5wYXJhbWV0ZXJzLlF1YWxpZmllcjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbnVtT2JqZWN0c0luQnVja2V0KHMzOiBJUzNDbGllbnQsIGJ1Y2tldDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgdG90YWxDb3VudCA9IDA7XG4gICAgbGV0IGNvbnRpbnVhdGlvblRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHMzLmxpc3RPYmplY3RzVjIoe1xuICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgQ29udGludWF0aW9uVG9rZW46IGNvbnRpbnVhdGlvblRva2VuLFxuICAgICAgfSk7XG5cbiAgICAgIHRvdGFsQ291bnQgKz0gcmVzcG9uc2UuS2V5Q291bnQgPz8gMDtcbiAgICAgIGNvbnRpbnVhdGlvblRva2VuID0gcmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuO1xuICAgIH0gd2hpbGUgKGNvbnRpbnVhdGlvblRva2VuKTtcblxuICAgIHJldHVybiB0b3RhbENvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBudW1JbWFnZXNJblJlcG8oZWNyOiBJRUNSQ2xpZW50LCByZXBvOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCB0b3RhbENvdW50ID0gMDtcbiAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGVjci5saXN0SW1hZ2VzKHtcbiAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHJlcG8sXG4gICAgICAgIG5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgfSk7XG5cbiAgICAgIHRvdGFsQ291bnQgKz0gcmVzcG9uc2UuaW1hZ2VJZHM/Lmxlbmd0aCA/PyAwO1xuICAgICAgbmV4dFRva2VuID0gcmVzcG9uc2UubmV4dFRva2VuO1xuICAgIH0gd2hpbGUgKG5leHRUb2tlbik7XG5cbiAgICByZXR1cm4gdG90YWxDb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgKnJlYWRSZXBvSW5CYXRjaGVzKGVjcjogSUVDUkNsaWVudCwgcmVwbzogc3RyaW5nLCBiYXRjaFNpemU6IG51bWJlciA9IDEwMDAsIGN1cnJlbnRUaW1lOiBudW1iZXIpOiBBc3luY0dlbmVyYXRvcjxJbWFnZUFzc2V0W10+IHtcbiAgICBsZXQgY29udGludWF0aW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGJhdGNoOiBJbWFnZUFzc2V0W10gPSBbXTtcblxuICAgICAgd2hpbGUgKGJhdGNoLmxlbmd0aCA8IGJhdGNoU2l6ZSkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGVjci5saXN0SW1hZ2VzKHtcbiAgICAgICAgICByZXBvc2l0b3J5TmFtZTogcmVwbyxcbiAgICAgICAgICBuZXh0VG9rZW46IGNvbnRpbnVhdGlvblRva2VuLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBObyBpbWFnZXMgaW4gdGhlIHJlcG9zaXRvcnlcbiAgICAgICAgaWYgKCFyZXNwb25zZS5pbWFnZUlkcyB8fCByZXNwb25zZS5pbWFnZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcCB1bmlxdWUgaW1hZ2UgZGlnZXN0IHRvIChwb3NzaWJseSBtdWx0aXBsZSkgdGFnc1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBpbWFnZU1hcChyZXNwb25zZS5pbWFnZUlkcyA/PyBbXSk7XG5cbiAgICAgICAgY29uc3QgaW1hZ2VJZHMgPSBPYmplY3Qua2V5cyhpbWFnZXMpLm1hcChrZXkgPT4gKHtcbiAgICAgICAgICBpbWFnZURpZ2VzdDoga2V5LFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc3QgZGVzY3JpYmVJbWFnZUluZm8gPSBhd2FpdCBlY3IuZGVzY3JpYmVJbWFnZXMoe1xuICAgICAgICAgIHJlcG9zaXRvcnlOYW1lOiByZXBvLFxuICAgICAgICAgIGltYWdlSWRzOiBpbWFnZUlkcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0SW1hZ2VJbmZvID0gYXdhaXQgZWNyLmJhdGNoR2V0SW1hZ2Uoe1xuICAgICAgICAgIHJlcG9zaXRvcnlOYW1lOiByZXBvLFxuICAgICAgICAgIGltYWdlSWRzOiBpbWFnZUlkcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY29tYmluZWRJbWFnZUluZm8gPSBkZXNjcmliZUltYWdlSW5mby5pbWFnZURldGFpbHM/Lm1hcChpbWFnZURldGFpbCA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdJbWFnZSA9IGdldEltYWdlSW5mby5pbWFnZXM/LmZpbmQoXG4gICAgICAgICAgICBpbWcgPT4gaW1nLmltYWdlSWQ/LmltYWdlRGlnZXN0ID09PSBpbWFnZURldGFpbC5pbWFnZURpZ2VzdCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmltYWdlRGV0YWlsLFxuICAgICAgICAgICAgbWFuaWZlc3Q6IG1hdGNoaW5nSW1hZ2U/LmltYWdlTWFuaWZlc3QsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBjb21iaW5lZEltYWdlSW5mbyA/PyBbXSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IGltYWdlLmltYWdlUHVzaGVkQXQgPz8gbmV3IERhdGUoY3VycmVudFRpbWUpO1xuICAgICAgICAgIC8vIFN0b3JlIHRoZSBpbWFnZSBpZiBpdCB3YXMgcHVzaGVkIGVhcmxpZXIgdGhhbiB0b2RheSAtIGNyZWF0ZWRCdWZmZXJEYXlzXG4gICAgICAgICAgaWYgKGltYWdlLmltYWdlRGlnZXN0ICYmIGxhc3RNb2RpZmllZCA8IG5ldyBEYXRlKGN1cnJlbnRUaW1lIC0gKHRoaXMucHJvcHMuY3JlYXRlZEJ1ZmZlckRheXMgKiBEQVkpKSkge1xuICAgICAgICAgICAgYmF0Y2gucHVzaChuZXcgSW1hZ2VBc3NldChpbWFnZS5pbWFnZURpZ2VzdCwgaW1hZ2UuaW1hZ2VTaXplSW5CeXRlcyA/PyAwLCBpbWFnZS5pbWFnZVRhZ3MgPz8gW10sIGltYWdlLm1hbmlmZXN0ID8/ICcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW9uVG9rZW4gPSByZXNwb25zZS5uZXh0VG9rZW47XG5cbiAgICAgICAgaWYgKCFjb250aW51YXRpb25Ub2tlbikgYnJlYWs7IC8vIE5vIG1vcmUgaW1hZ2VzIHRvIGZldGNoXG4gICAgICB9XG5cbiAgICAgIGlmIChiYXRjaC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHlpZWxkIGJhdGNoO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGNvbnRpbnVhdGlvblRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0b3IgZnVuY3Rpb24gdGhhdCByZWFkcyBvYmplY3RzIGZyb20gdGhlIFMzIEJ1Y2tldCBpbiBiYXRjaGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyAqcmVhZEJ1Y2tldEluQmF0Y2hlcyhzMzogSVMzQ2xpZW50LCBidWNrZXQ6IHN0cmluZywgYmF0Y2hTaXplOiBudW1iZXIgPSAxMDAwLCBjdXJyZW50VGltZTogbnVtYmVyKTogQXN5bmNHZW5lcmF0b3I8T2JqZWN0QXNzZXRbXT4ge1xuICAgIGxldCBjb250aW51YXRpb25Ub2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgYmF0Y2g6IE9iamVjdEFzc2V0W10gPSBbXTtcblxuICAgICAgd2hpbGUgKGJhdGNoLmxlbmd0aCA8IGJhdGNoU2l6ZSkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHMzLmxpc3RPYmplY3RzVjIoe1xuICAgICAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgICAgIENvbnRpbnVhdGlvblRva2VuOiBjb250aW51YXRpb25Ub2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2UuQ29udGVudHM/LmZvckVhY2goKG9iajogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gb2JqLktleSA/PyAnJztcbiAgICAgICAgICBjb25zdCBzaXplID0gb2JqLlNpemUgPz8gMDtcbiAgICAgICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBvYmouTGFzdE1vZGlmaWVkID8/IG5ldyBEYXRlKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAvLyBTdG9yZSB0aGUgb2JqZWN0IGlmIGl0IGhhcyBhIEtleSBhbmRcbiAgICAgICAgICAvLyBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdG9kYXkgLSBjcmVhdGVkQnVmZmVyRGF5c1xuICAgICAgICAgIGlmIChrZXkgJiYgbGFzdE1vZGlmaWVkIDwgbmV3IERhdGUoY3VycmVudFRpbWUgLSAodGhpcy5wcm9wcy5jcmVhdGVkQnVmZmVyRGF5cyAqIERBWSkpKSB7XG4gICAgICAgICAgICBiYXRjaC5wdXNoKG5ldyBPYmplY3RBc3NldChidWNrZXQsIGtleSwgc2l6ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29udGludWF0aW9uVG9rZW4gPSByZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW47XG5cbiAgICAgICAgaWYgKCFjb250aW51YXRpb25Ub2tlbikgYnJlYWs7IC8vIE5vIG1vcmUgb2JqZWN0cyB0byBmZXRjaFxuICAgICAgfVxuXG4gICAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCkge1xuICAgICAgICB5aWVsZCBiYXRjaDtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChjb250aW51YXRpb25Ub2tlbik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbmZpcm1hdGlvblByb21wdChwcmludGVyOiBQcm9ncmVzc1ByaW50ZXIsIGRlbGV0YWJsZXM6IEdjQXNzZXRbXSwgdHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGx1cmFsaXplID0gKG5hbWU6IHN0cmluZywgY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gY291bnQgPT09IDEgPyBuYW1lIDogYCR7bmFtZX1zYDtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlybSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IFtcbiAgICAgICAgYEZvdW5kICR7ZGVsZXRhYmxlcy5sZW5ndGh9ICR7cGx1cmFsaXplKHR5cGUsIGRlbGV0YWJsZXMubGVuZ3RoKX0gdG8gZGVsZXRlIGJhc2VkIG9mZiBvZiB0aGUgZm9sbG93aW5nIGNyaXRlcmlhOmAsXG4gICAgICAgIGAtICR7dHlwZX1zIGhhdmUgYmVlbiBpc29sYXRlZCBmb3IgPiAke3RoaXMucHJvcHMucm9sbGJhY2tCdWZmZXJEYXlzfSBkYXlzYCxcbiAgICAgICAgYC0gJHt0eXBlfXMgd2VyZSBjcmVhdGVkID4gJHt0aGlzLnByb3BzLmNyZWF0ZWRCdWZmZXJEYXlzfSBkYXlzIGFnb2AsXG4gICAgICAgICcnLFxuICAgICAgICAnRGVsZXRlIHRoaXMgYmF0Y2ggKHllcy9uby9kZWxldGUtYWxsKT8nLFxuICAgICAgXS5qb2luKCdcXG4nKTtcbiAgICAgIHByaW50ZXIucGF1c2UoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcHJvbXB0bHkucHJvbXB0KG1lc3NhZ2UsXG4gICAgICAgIHsgdHJpbTogdHJ1ZSB9LFxuICAgICAgKTtcblxuICAgICAgLy8gQW55dGhpbmcgb3RoZXIgdGhhbiB5ZXMveS9kZWxldGUtYWxsIGlzIHRyZWF0ZWQgYXMgbm9cbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIVsneWVzJywgJ3knLCAnZGVsZXRlLWFsbCddLmluY2x1ZGVzKHJlc3BvbnNlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0RlbGV0aW9uIGFib3J0ZWQgYnkgdXNlcicpO1xuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS50b0xvd2VyQ2FzZSgpID09ICdkZWxldGUtYWxsJykge1xuICAgICAgICB0aGlzLmNvbmZpcm0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHJpbnRlci5yZXN1bWUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJ0aXRpb248QT4oeHM6IEl0ZXJhYmxlPEE+LCBwcmVkOiAoeDogQSkgPT4gYm9vbGVhbik6IHsgaW5jbHVkZWQ6IEFbXTsgZXhjbHVkZWQ6IEFbXSB9IHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGluY2x1ZGVkOiBbXSBhcyBBW10sXG4gICAgZXhjbHVkZWQ6IFtdIGFzIEFbXSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICBpZiAocHJlZCh4KSkge1xuICAgICAgcmVzdWx0LmluY2x1ZGVkLnB1c2goeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5leGNsdWRlZC5wdXNoKHgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGltYWdlTWFwKGltYWdlSWRzOiBJbWFnZUlkZW50aWZpZXJbXSkge1xuICBjb25zdCBpbWFnZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlSWRzID8/IFtdKSB7XG4gICAgaWYgKCFpbWFnZS5pbWFnZURpZ2VzdCB8fCAhaW1hZ2UuaW1hZ2VUYWcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWltYWdlc1tpbWFnZS5pbWFnZURpZ2VzdF0pIHtcbiAgICAgIGltYWdlc1tpbWFnZS5pbWFnZURpZ2VzdF0gPSBbXTtcbiAgICB9XG4gICAgaW1hZ2VzW2ltYWdlLmltYWdlRGlnZXN0XS5wdXNoKGltYWdlLmltYWdlVGFnKTtcbiAgfVxuICByZXR1cm4gaW1hZ2VzO1xufVxuIl19
|
|
@@ -67,7 +67,8 @@ export declare class HotswapPropertyOverrides {
|
|
|
67
67
|
export declare class EcsHotswapProperties {
|
|
68
68
|
readonly minimumHealthyPercent?: number;
|
|
69
69
|
readonly maximumHealthyPercent?: number;
|
|
70
|
-
|
|
70
|
+
readonly stabilizationTimeoutSeconds?: number;
|
|
71
|
+
constructor(minimumHealthyPercent?: number, maximumHealthyPercent?: number, stabilizationTimeoutSeconds?: number);
|
|
71
72
|
/**
|
|
72
73
|
* Check if any hotswap properties are defined
|
|
73
74
|
* @returns true if all properties are undefined, false otherwise
|
|
@@ -41,13 +41,18 @@ class EcsHotswapProperties {
|
|
|
41
41
|
minimumHealthyPercent;
|
|
42
42
|
// The upper limit on the number of your service's tasks that are allowed in the RUNNING or PENDING state during a deployment, as a percentage of the desiredCount
|
|
43
43
|
maximumHealthyPercent;
|
|
44
|
-
|
|
44
|
+
// The number of seconds to wait for a single service to reach stable state.
|
|
45
|
+
stabilizationTimeoutSeconds;
|
|
46
|
+
constructor(minimumHealthyPercent, maximumHealthyPercent, stabilizationTimeoutSeconds) {
|
|
45
47
|
if (minimumHealthyPercent !== undefined && minimumHealthyPercent < 0) {
|
|
46
48
|
throw new toolkit_error_1.ToolkitError('hotswap-ecs-minimum-healthy-percent can\'t be a negative number');
|
|
47
49
|
}
|
|
48
50
|
if (maximumHealthyPercent !== undefined && maximumHealthyPercent < 0) {
|
|
49
51
|
throw new toolkit_error_1.ToolkitError('hotswap-ecs-maximum-healthy-percent can\'t be a negative number');
|
|
50
52
|
}
|
|
53
|
+
if (stabilizationTimeoutSeconds !== undefined && stabilizationTimeoutSeconds < 0) {
|
|
54
|
+
throw new toolkit_error_1.ToolkitError('hotswap-ecs-stabilization-timeout-seconds can\'t be a negative number');
|
|
55
|
+
}
|
|
51
56
|
// In order to preserve the current behaviour, when minimumHealthyPercent is not defined, it will be set to the currently default value of 0
|
|
52
57
|
if (minimumHealthyPercent == undefined) {
|
|
53
58
|
this.minimumHealthyPercent = 0;
|
|
@@ -56,6 +61,7 @@ class EcsHotswapProperties {
|
|
|
56
61
|
this.minimumHealthyPercent = minimumHealthyPercent;
|
|
57
62
|
}
|
|
58
63
|
this.maximumHealthyPercent = maximumHealthyPercent;
|
|
64
|
+
this.stabilizationTimeoutSeconds = stabilizationTimeoutSeconds;
|
|
59
65
|
}
|
|
60
66
|
/**
|
|
61
67
|
* Check if any hotswap properties are defined
|
|
@@ -134,4 +140,4 @@ function nonHotswappableResource(change) {
|
|
|
134
140
|
},
|
|
135
141
|
};
|
|
136
142
|
}
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWlKQSwwQ0FhQztBQUVELHNEQXNCQztBQUVELDBEQWVDO0FBck1ELG9EQUErRDtBQUMvRCwrREFBMkQ7QUFHOUMsUUFBQSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBNkN4QixJQUFZLFdBZVg7QUFmRCxXQUFZLFdBQVc7SUFDckI7O09BRUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILDRDQUE2QixDQUFBO0lBRTdCOztPQUVHO0lBQ0gsa0RBQW1DLENBQUE7QUFDckMsQ0FBQyxFQWZXLFdBQVcsMkJBQVgsV0FBVyxRQWV0QjtBQUVEOztHQUVHO0FBQ0gsTUFBYSx3QkFBd0I7SUFDbkMsbUZBQW1GO0lBQ25GLG9CQUFvQixDQUF3QjtJQUU1QyxZQUFvQixvQkFBMkM7UUFDN0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQVBELDREQU9DO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLG9CQUFvQjtJQUMvQix1SkFBdUo7SUFDOUkscUJBQXFCLENBQVU7SUFDeEMsa0tBQWtLO0lBQ3pKLHFCQUFxQixDQUFVO0lBRXhDLFlBQW9CLHFCQUE4QixFQUFFLHFCQUE4QjtRQUNoRixJQUFJLHFCQUFxQixLQUFLLFNBQVMsSUFBSSxxQkFBcUIsR0FBRyxDQUFDLEVBQUcsQ0FBQztZQUN0RSxNQUFNLElBQUksNEJBQVksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFDRCxJQUFJLHFCQUFxQixLQUFLLFNBQVMsSUFBSSxxQkFBcUIsR0FBRyxDQUFDLEVBQUcsQ0FBQztZQUN0RSxNQUFNLElBQUksNEJBQVksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFDRCw0SUFBNEk7UUFDNUksSUFBSSxxQkFBcUIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN2QyxJ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QUFNLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQ2xDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDL0UsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2FBQzFCO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLE1BQXNCO0lBQzVELE9BQU87UUFDTCxZQUFZLEVBQUUsS0FBSztRQUNuQixNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUsK0JBQXFCLENBQUMsb0JBQW9CO1lBQ2xELFdBQVcsRUFBRSw2REFBNkQ7WUFDMUUsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzNCLFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQ2xDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDdkQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2FBQzFCO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHlEaWZmZXJlbmNlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSB7IEhvdHN3YXBwYWJsZUNoYW5nZSwgTm9uSG90c3dhcHBhYmxlQ2hhbmdlLCBSZXNvdXJjZUNoYW5nZSB9IGZyb20gJy4uLy4uL3BheWxvYWRzL2hvdHN3YXAnO1xuaW1wb3J0IHsgTm9uSG90c3dhcHBhYmxlUmVhc29uIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMvaG90c3dhcCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcblxuZXhwb3J0IGNvbnN0IElDT04gPSAn4pyoJztcblxuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBvcGVyYXRpb24gYXMgaG90c3dhcHBhYmxlXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwcGFibGU6IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGJlaW5nIGhvdHN3YXBwZWQuXG4gICAqIFVzZWQgdG8gc2V0IGEgY3VzdG9tIFVzZXItQWdlbnQgZm9yIFNESyBjYWxscy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2U6IHN0cmluZztcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhlIGNoYW5nZSB0aGF0IGlzIGFwcGxpZWQgYXMgcGFydCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2U6IEhvdHN3YXBwYWJsZUNoYW5nZTtcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgaG90c3dhcCBvcGVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGFwcGx5OiAoc2RrOiBTREspID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVqZWN0ZWRDaGFuZ2Uge1xuICAvKipcbiAgICogTWFya3MgdGhlIGNoYW5nZSBhcyBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwcGFibGU6IGZhbHNlO1xuICAvKipcbiAgICogVGhlIGNoYW5nZSB0aGF0IGdvdCByZWplY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlOiBOb25Ib3Rzd2FwcGFibGVDaGFuZ2U7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoaXMgY2hhbmdlIHdoZW4gbGlzdGluZyBub24taG90c3dhcHBhYmxlIGNoYW5nZXMgaW4gSE9UU1dBUF9PTkxZIG1vZGUuIERvZXMgbm90IGFmZmVjdFxuICAgKiBsaXN0aW5nIGluIEZBTExfQkFDSyBtb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwT25seVZpc2libGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBIb3Rzd2FwQ2hhbmdlID0gSG90c3dhcE9wZXJhdGlvbiB8IFJlamVjdGVkQ2hhbmdlO1xuXG5leHBvcnQgZW51bSBIb3Rzd2FwTW9kZSB7XG4gIC8qKlxuICAgKiBXaWxsIGZhbGwgYmFjayB0byBDbG91ZEZvcm1hdGlvbiB3aGVuIGEgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2UgaXMgZGV0ZWN0ZWRcbiAgICovXG4gIEZBTExfQkFDSyA9ICdmYWxsLWJhY2snLFxuXG4gIC8qKlxuICAgKiBXaWxsIG5vdCBmYWxsIGJhY2sgdG8gQ2xvdWRGb3JtYXRpb24gd2hlbiBhIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlIGlzIGRldGVjdGVkXG4gICAqL1xuICBIT1RTV0FQX09OTFkgPSAnaG90c3dhcC1vbmx5JyxcblxuICAvKipcbiAgICogV2lsbCBub3QgYXR0ZW1wdCB0byBob3Rzd2FwIGFueXRoaW5nIGFuZCBpbnN0ZWFkIGdvIHN0cmFpZ2h0IHRvIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBGVUxMX0RFUExPWU1FTlQgPSAnZnVsbC1kZXBsb3ltZW50Jyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkgb3ZlcnJpZGVzIGZvciBob3Rzd2FwIGRlcGxveW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMge1xuICAvLyBFYWNoIHN1cHBvcnRlZCByZXNvdXJjZSB0eXBlIHdpbGwgaGF2ZSBpdHMgb3duIHByb3BlcnRpZXMuIEN1cnJlbnRseSB0aGlzIGlzIEVDU1xuICBlY3NIb3Rzd2FwUHJvcGVydGllcz86IEVjc0hvdHN3YXBQcm9wZXJ0aWVzO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvciAoZWNzSG90c3dhcFByb3BlcnRpZXM/OiBFY3NIb3Rzd2FwUHJvcGVydGllcykge1xuICAgIHRoaXMuZWNzSG90c3dhcFByb3BlcnRpZXMgPSBlY3NIb3Rzd2FwUHJvcGVydGllcztcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBFQ1MgaG90c3dhcCBkZXBsb3ltZW50c1xuICovXG5leHBvcnQgY2xhc3MgRWNzSG90c3dhcFByb3BlcnRpZXMge1xuICAvLyBUaGUgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBSVU5OSU5HIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGVzaXJlZENvdW50XG4gIHJlYWRvbmx5IG1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlcjtcbiAgLy8gVGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBhcmUgYWxsb3dlZCBpbiB0aGUgUlVOTklORyBvciBQRU5ESU5HIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGVzaXJlZENvdW50XG4gIHJlYWRvbmx5IG1heGltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IgKG1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlciwgbWF4aW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyKSB7XG4gICAgaWYgKG1pbmltdW1IZWFsdGh5UGVyY2VudCAhPT0gdW5kZWZpbmVkICYmIG1pbmltdW1IZWFsdGh5UGVyY2VudCA8IDAgKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdob3Rzd2FwLWVjcy1taW5pbXVtLWhlYWx0aHktcGVyY2VudCBjYW5cXCd0IGJlIGEgbmVnYXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuICAgIGlmIChtYXhpbXVtSGVhbHRoeVBlcmNlbnQgIT09IHVuZGVmaW5lZCAmJiBtYXhpbXVtSGVhbHRoeVBlcmNlbnQgPCAwICkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignaG90c3dhcC1lY3MtbWF4aW11bS1oZWFsdGh5LXBlcmNlbnQgY2FuXFwndCBiZSBhIG5lZ2F0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICAvLyBJbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgY3VycmVudCBiZWhhdmlvdXIsIHdoZW4gbWluaW11bUhlYWx0aHlQZXJjZW50IGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGJlIHNldCB0byB0aGUgY3VycmVudGx5IGRlZmF1bHQgdmFsdWUgb2YgMFxuICAgIGlmIChtaW5pbXVtSGVhbHRoeVBlcmNlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm1pbmltdW1IZWFsdGh5UGVyY2VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWluaW11bUhlYWx0aHlQZXJjZW50ID0gbWluaW11bUhlYWx0aHlQZXJjZW50O1xuICAgIH1cbiAgICB0aGlzLm1heGltdW1IZWFsdGh5UGVyY2VudCA9IG1heGltdW1IZWFsdGh5UGVyY2VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbnkgaG90c3dhcCBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYWxsIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5taW5pbXVtSGVhbHRoeVBlcmNlbnQgPT09IDAgJiYgdGhpcy5tYXhpbXVtSGVhbHRoeVBlcmNlbnQgPT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG50eXBlIFByb3BEaWZmcyA9IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+PjtcblxuY2xhc3MgQ2xhc3NpZmllZENoYW5nZXMge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGhvdHN3YXBwYWJsZVByb3BzOiBQcm9wRGlmZnMsXG4gICAgcHVibGljIHJlYWRvbmx5IG5vbkhvdHN3YXBwYWJsZVByb3BzOiBQcm9wRGlmZnMsXG4gICkge1xuICB9XG5cbiAgcHVibGljIHJlcG9ydE5vbkhvdHN3YXBwYWJsZVByb3BlcnR5Q2hhbmdlcyhyZXQ6IEhvdHN3YXBDaGFuZ2VbXSk6IHZvaWQge1xuICAgIGNvbnN0IG5vbkhvdHN3YXBwYWJsZVByb3BOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMubm9uSG90c3dhcHBhYmxlUHJvcHMpO1xuICAgIGlmIChub25Ib3Rzd2FwcGFibGVQcm9wTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFnT25seUNoYW5nZSA9IG5vbkhvdHN3YXBwYWJsZVByb3BOYW1lcy5sZW5ndGggPT09IDEgJiYgbm9uSG90c3dhcHBhYmxlUHJvcE5hbWVzWzBdID09PSAnVGFncyc7XG4gICAgICBjb25zdCByZWFzb24gPSB0YWdPbmx5Q2hhbmdlID8gTm9uSG90c3dhcHBhYmxlUmVhc29uLlRBR1MgOiBOb25Ib3Rzd2FwcGFibGVSZWFzb24uUFJPUEVSVElFUztcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGFnT25seUNoYW5nZSA/ICdUYWdzIGFyZSBub3QgaG90c3dhcHBhYmxlJyA6IGByZXNvdXJjZSBwcm9wZXJ0aWVzICcke25vbkhvdHN3YXBwYWJsZVByb3BOYW1lc30nIGFyZSBub3QgaG90c3dhcHBhYmxlIG9uIHRoaXMgcmVzb3VyY2UgdHlwZWA7XG5cbiAgICAgIHJldC5wdXNoKG5vbkhvdHN3YXBwYWJsZUNoYW5nZShcbiAgICAgICAgdGhpcy5jaGFuZ2UsXG4gICAgICAgIHJlYXNvbixcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIHRoaXMubm9uSG90c3dhcHBhYmxlUHJvcHMsXG4gICAgICApKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWVzT2ZIb3Rzd2FwcGFibGVQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaG90c3dhcHBhYmxlUHJvcHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUNoYW5nZXMoeHM6IFJlc291cmNlQ2hhbmdlLCBob3Rzd2FwcGFibGVQcm9wTmFtZXM6IHN0cmluZ1tdKTogQ2xhc3NpZmllZENoYW5nZXMge1xuICBjb25zdCBob3Rzd2FwcGFibGVQcm9wczogUHJvcERpZmZzID0ge307XG4gIGNvbnN0IG5vbkhvdHN3YXBwYWJsZVByb3BzOiBQcm9wRGlmZnMgPSB7fTtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9wRGlmZl0gb2YgT2JqZWN0LmVudHJpZXMoeHMucHJvcGVydHlVcGRhdGVzKSkge1xuICAgIGlmIChob3Rzd2FwcGFibGVQcm9wTmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIGhvdHN3YXBwYWJsZVByb3BzW25hbWVdID0gcHJvcERpZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vbkhvdHN3YXBwYWJsZVByb3BzW25hbWVdID0gcHJvcERpZmY7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBDbGFzc2lmaWVkQ2hhbmdlcyh4cywgaG90c3dhcHBhYmxlUHJvcHMsIG5vbkhvdHN3YXBwYWJsZVByb3BzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbkhvdHN3YXBwYWJsZUNoYW5nZShcbiAgY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSxcbiAgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb24sXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIG5vbkhvdHN3YXBwYWJsZVByb3BzPzogUHJvcERpZmZzLFxuICBob3Rzd2FwT25seVZpc2libGU6IGJvb2xlYW4gPSB0cnVlLFxuKTogUmVqZWN0ZWRDaGFuZ2Uge1xuICByZXR1cm4ge1xuICAgIGhvdHN3YXBwYWJsZTogZmFsc2UsXG4gICAgaG90c3dhcE9ubHlWaXNpYmxlLFxuICAgIGNoYW5nZToge1xuICAgICAgcmVhc29uLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBzdWJqZWN0OiB7XG4gICAgICAgIHR5cGU6ICdSZXNvdXJjZScsXG4gICAgICAgIGxvZ2ljYWxJZDogY2hhbmdlLmxvZ2ljYWxJZCxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUuVHlwZSxcbiAgICAgICAgcmVqZWN0ZWRQcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyhub25Ib3Rzd2FwcGFibGVQcm9wcyA/PyBjaGFuZ2UucHJvcGVydHlVcGRhdGVzKSxcbiAgICAgICAgbWV0YWRhdGE6IGNoYW5nZS5tZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbkhvdHN3YXBwYWJsZVJlc291cmNlKGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UpOiBSZWplY3RlZENoYW5nZSB7XG4gIHJldHVybiB7XG4gICAgaG90c3dhcHBhYmxlOiBmYWxzZSxcbiAgICBjaGFuZ2U6IHtcbiAgICAgIHJlYXNvbjogTm9uSG90c3dhcHBhYmxlUmVhc29uLlJFU09VUkNFX1VOU1VQUE9SVEVELFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHJlc291cmNlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgaG90c3dhcCBkZXBsb3ltZW50cycsXG4gICAgICBzdWJqZWN0OiB7XG4gICAgICAgIHR5cGU6ICdSZXNvdXJjZScsXG4gICAgICAgIGxvZ2ljYWxJZDogY2hhbmdlLmxvZ2ljYWxJZCxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUuVHlwZSxcbiAgICAgICAgcmVqZWN0ZWRQcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyhjaGFuZ2UucHJvcGVydHlVcGRhdGVzKSxcbiAgICAgICAgbWV0YWRhdGE6IGNoYW5nZS5tZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXVKQSwwQ0FhQztBQUVELHNEQXNCQztBQUVELDBEQWVDO0FBM01ELG9EQUErRDtBQUMvRCwrREFBMkQ7QUFHOUMsUUFBQSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBNkN4QixJQUFZLFdBZVg7QUFmRCxXQUFZLFdBQVc7SUFDckI7O09BRUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILDRDQUE2QixDQUFBO0lBRTdCOztPQUVHO0lBQ0gsa0RBQW1DLENBQUE7QUFDckMsQ0FBQyxFQWZXLFdBQVcsMkJBQVgsV0FBVyxRQWV0QjtBQUVEOztHQUVHO0FBQ0gsTUFBYSx3QkFBd0I7SUFDbkMsbUZBQW1GO0lBQ25GLG9CQUFvQixDQUF3QjtJQUU1QyxZQUFvQixvQkFBMkM7UUFDN0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQVBELDREQU9DO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLG9CQUFvQjtJQUMvQix1SkFBdUo7SUFDOUkscUJBQXFCLENBQVU7SUFDeEMsa0tBQWtLO0lBQ3pKLHFCQUFxQixDQUFVO0lBQ3hDLDRFQUE0RTtJQUNuRSwyQkFBMkIsQ0FBVTtJQUU5QyxZQUFvQixxQkFBOEIsRUFBRSxxQkFBOEIsRUFBRSwyQkFBb0M7UUFDdEgsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxFQUFHLENBQUM7WUFDdEUsTUFBTSxJQUFJLDRCQUFZLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxFQUFHLENBQUM7WUFDdEUsTUFBTSxJQUFJLDRCQUFZLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsSUFBSSwyQkFBMkIsS0FBSyxTQUFTLElBQUksMkJBQTJCLEdBQUcsQ0FBQyxFQUFHLENBQUM7WUFDbEYsTUFBTSxJQUFJLDRCQUFZLENBQUMsdUVBQXVFLENBQUMsQ0FBQztRQUNsRyxDQUFDO1FBQ0QsNElBQTRJO1FBQzVJLElBQUkscUJBQXFCLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQ25ELElBQUksQ0FBQywyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssU0FBUyxDQUFDO0lBQ3RGLENBQUM7Q0FDRjtBQW5DRCxvREFtQ0M7QUFJRCxNQUFNLGlCQUFpQjtJQUVIO0lBQ0E7SUFDQTtJQUhsQixZQUNrQixNQUFzQixFQUN0QixpQkFBNEIsRUFDNUIsb0JBQStCO1FBRi9CLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBVztRQUM1Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVc7SUFFakQsQ0FBQztJQUVNLG9DQUFvQyxDQUFDLEdBQW9CO1FBQzlELE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4RSxJQUFJLHdCQUF3QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLGFBQWEsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztZQUN0RyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsK0JBQXFCLENBQUMsVUFBVSxDQUFDO1lBQzdGLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLHdCQUF3Qix3QkFBd0IsOENBQThDLENBQUM7WUFFakssR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FDNUIsSUFBSSxDQUFDLE1BQU0sRUFDWCxNQUFNLEVBQ04sV0FBVyxFQUNYLElBQUksQ0FBQyxvQkFBb0IsQ0FDMUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFXLHdCQUF3QjtRQUNqQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLEVBQWtCLEVBQUUscUJBQStCO0lBQ2pGLE1BQU0saUJBQWlCLEdBQWMsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sb0JBQW9CLEdBQWMsRUFBRSxDQUFDO0lBRTNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ2xFLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FDbkMsTUFBc0IsRUFDdEIsTUFBNkIsRUFDN0IsV0FBbUIsRUFDbkIsb0JBQWdDLEVBQ2hDLHFCQUE4QixJQUFJO0lBRWxDLE9BQU87UUFDTCxZQUFZLEVBQUUsS0FBSztRQUNuQixrQkFBa0I7UUFDbEIsTUFBTSxFQUFFO1lBQ04sTUFBTTtZQUNOLFdBQVc7WUFDWCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDM0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDbEMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUMvRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDMUI7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsTUFBc0I7SUFDNUQsT0FBTztRQUNMLFlBQVksRUFBRSxLQUFLO1FBQ25CLE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSwrQkFBcUIsQ0FBQyxvQkFBb0I7WUFDbEQsV0FBVyxFQUFFLDZEQUE2RDtZQUMxRSxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDM0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDbEMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDMUI7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eURpZmZlcmVuY2UgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlIHsgSG90c3dhcHBhYmxlQ2hhbmdlLCBOb25Ib3Rzd2FwcGFibGVDaGFuZ2UsIFJlc291cmNlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMvaG90c3dhcCc7XG5pbXBvcnQgeyBOb25Ib3Rzd2FwcGFibGVSZWFzb24gfSBmcm9tICcuLi8uLi9wYXlsb2Fkcy9ob3Rzd2FwJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgdHlwZSB7IFNESyB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuXG5leHBvcnQgY29uc3QgSUNPTiA9ICfinKgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBPcGVyYXRpb24ge1xuICAvKipcbiAgICogTWFya3MgdGhlIG9wZXJhdGlvbiBhcyBob3Rzd2FwcGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBwYWJsZTogdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYmVpbmcgaG90c3dhcHBlZC5cbiAgICogVXNlZCB0byBzZXQgYSBjdXN0b20gVXNlci1BZ2VudCBmb3IgU0RLIGNhbGxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB0aGUgY2hhbmdlIHRoYXQgaXMgYXBwbGllZCBhcyBwYXJ0IG9mIHRoZSBvcGVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlO1xuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBob3Rzd2FwIG9wZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXBwbHk6IChzZGs6IFNESykgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWplY3RlZENoYW5nZSB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY2hhbmdlIGFzIG5vdCBob3Rzd2FwcGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBwYWJsZTogZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgY2hhbmdlIHRoYXQgZ290IHJlamVjdGVkXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2U6IE5vbkhvdHN3YXBwYWJsZUNoYW5nZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhpcyBjaGFuZ2Ugd2hlbiBsaXN0aW5nIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlcyBpbiBIT1RTV0FQX09OTFkgbW9kZS4gRG9lcyBub3QgYWZmZWN0XG4gICAqIGxpc3RpbmcgaW4gRkFMTF9CQUNLIG1vZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBPbmx5VmlzaWJsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEhvdHN3YXBDaGFuZ2UgPSBIb3Rzd2FwT3BlcmF0aW9uIHwgUmVqZWN0ZWRDaGFuZ2U7XG5cbmV4cG9ydCBlbnVtIEhvdHN3YXBNb2RlIHtcbiAgLyoqXG4gICAqIFdpbGwgZmFsbCBiYWNrIHRvIENsb3VkRm9ybWF0aW9uIHdoZW4gYSBub24taG90c3dhcHBhYmxlIGNoYW5nZSBpcyBkZXRlY3RlZFxuICAgKi9cbiAgRkFMTF9CQUNLID0gJ2ZhbGwtYmFjaycsXG5cbiAgLyoqXG4gICAqIFdpbGwgbm90IGZhbGwgYmFjayB0byBDbG91ZEZvcm1hdGlvbiB3aGVuIGEgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2UgaXMgZGV0ZWN0ZWRcbiAgICovXG4gIEhPVFNXQVBfT05MWSA9ICdob3Rzd2FwLW9ubHknLFxuXG4gIC8qKlxuICAgKiBXaWxsIG5vdCBhdHRlbXB0IHRvIGhvdHN3YXAgYW55dGhpbmcgYW5kIGluc3RlYWQgZ28gc3RyYWlnaHQgdG8gQ2xvdWRGb3JtYXRpb25cbiAgICovXG4gIEZVTExfREVQTE9ZTUVOVCA9ICdmdWxsLWRlcGxveW1lbnQnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBvdmVycmlkZXMgZm9yIGhvdHN3YXAgZGVwbG95bWVudHNcbiAqL1xuZXhwb3J0IGNsYXNzIEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyB7XG4gIC8vIEVhY2ggc3VwcG9ydGVkIHJlc291cmNlIHR5cGUgd2lsbCBoYXZlIGl0cyBvd24gcHJvcGVydGllcy4gQ3VycmVudGx5IHRoaXMgaXMgRUNTXG4gIGVjc0hvdHN3YXBQcm9wZXJ0aWVzPzogRWNzSG90c3dhcFByb3BlcnRpZXM7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yIChlY3NIb3Rzd2FwUHJvcGVydGllcz86IEVjc0hvdHN3YXBQcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5lY3NIb3Rzd2FwUHJvcGVydGllcyA9IGVjc0hvdHN3YXBQcm9wZXJ0aWVzO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIEVDUyBob3Rzd2FwIGRlcGxveW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBFY3NIb3Rzd2FwUHJvcGVydGllcyB7XG4gIC8vIFRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIFJVTk5JTkcgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkZXNpcmVkQ291bnRcbiAgcmVhZG9ubHkgbWluaW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyO1xuICAvLyBUaGUgdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBSVU5OSU5HIG9yIFBFTkRJTkcgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkZXNpcmVkQ291bnRcbiAgcmVhZG9ubHkgbWF4aW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyO1xuICAvLyBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgYSBzaW5nbGUgc2VydmljZSB0byByZWFjaCBzdGFibGUgc3RhdGUuXG4gIHJlYWRvbmx5IHN0YWJpbGl6YXRpb25UaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IgKG1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlciwgbWF4aW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyLCBzdGFiaWxpemF0aW9uVGltZW91dFNlY29uZHM/OiBudW1iZXIpIHtcbiAgICBpZiAobWluaW11bUhlYWx0aHlQZXJjZW50ICE9PSB1bmRlZmluZWQgJiYgbWluaW11bUhlYWx0aHlQZXJjZW50IDwgMCApIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ2hvdHN3YXAtZWNzLW1pbmltdW0taGVhbHRoeS1wZXJjZW50IGNhblxcJ3QgYmUgYSBuZWdhdGl2ZSBudW1iZXInKTtcbiAgICB9XG4gICAgaWYgKG1heGltdW1IZWFsdGh5UGVyY2VudCAhPT0gdW5kZWZpbmVkICYmIG1heGltdW1IZWFsdGh5UGVyY2VudCA8IDAgKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdob3Rzd2FwLWVjcy1tYXhpbXVtLWhlYWx0aHktcGVyY2VudCBjYW5cXCd0IGJlIGEgbmVnYXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuICAgIGlmIChzdGFiaWxpemF0aW9uVGltZW91dFNlY29uZHMgIT09IHVuZGVmaW5lZCAmJiBzdGFiaWxpemF0aW9uVGltZW91dFNlY29uZHMgPCAwICkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignaG90c3dhcC1lY3Mtc3RhYmlsaXphdGlvbi10aW1lb3V0LXNlY29uZHMgY2FuXFwndCBiZSBhIG5lZ2F0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICAvLyBJbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgY3VycmVudCBiZWhhdmlvdXIsIHdoZW4gbWluaW11bUhlYWx0aHlQZXJjZW50IGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGJlIHNldCB0byB0aGUgY3VycmVudGx5IGRlZmF1bHQgdmFsdWUgb2YgMFxuICAgIGlmIChtaW5pbXVtSGVhbHRoeVBlcmNlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm1pbmltdW1IZWFsdGh5UGVyY2VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWluaW11bUhlYWx0aHlQZXJjZW50ID0gbWluaW11bUhlYWx0aHlQZXJjZW50O1xuICAgIH1cbiAgICB0aGlzLm1heGltdW1IZWFsdGh5UGVyY2VudCA9IG1heGltdW1IZWFsdGh5UGVyY2VudDtcbiAgICB0aGlzLnN0YWJpbGl6YXRpb25UaW1lb3V0U2Vjb25kcyA9IHN0YWJpbGl6YXRpb25UaW1lb3V0U2Vjb25kcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbnkgaG90c3dhcCBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYWxsIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5taW5pbXVtSGVhbHRoeVBlcmNlbnQgPT09IDAgJiYgdGhpcy5tYXhpbXVtSGVhbHRoeVBlcmNlbnQgPT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG50eXBlIFByb3BEaWZmcyA9IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+PjtcblxuY2xhc3MgQ2xhc3NpZmllZENoYW5nZXMge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGhvdHN3YXBwYWJsZVByb3BzOiBQcm9wRGlmZnMsXG4gICAgcHVibGljIHJlYWRvbmx5IG5vbkhvdHN3YXBwYWJsZVByb3BzOiBQcm9wRGlmZnMsXG4gICkge1xuICB9XG5cbiAgcHVibGljIHJlcG9ydE5vbkhvdHN3YXBwYWJsZVByb3BlcnR5Q2hhbmdlcyhyZXQ6IEhvdHN3YXBDaGFuZ2VbXSk6IHZvaWQge1xuICAgIGNvbnN0IG5vbkhvdHN3YXBwYWJsZVByb3BOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMubm9uSG90c3dhcHBhYmxlUHJvcHMpO1xuICAgIGlmIChub25Ib3Rzd2FwcGFibGVQcm9wTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFnT25seUNoYW5nZSA9IG5vbkhvdHN3YXBwYWJsZVByb3BOYW1lcy5sZW5ndGggPT09IDEgJiYgbm9uSG90c3dhcHBhYmxlUHJvcE5hbWVzWzBdID09PSAnVGFncyc7XG4gICAgICBjb25zdCByZWFzb24gPSB0YWdPbmx5Q2hhbmdlID8gTm9uSG90c3dhcHBhYmxlUmVhc29uLlRBR1MgOiBOb25Ib3Rzd2FwcGFibGVSZWFzb24uUFJPUEVSVElFUztcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGFnT25seUNoYW5nZSA/ICdUYWdzIGFyZSBub3QgaG90c3dhcHBhYmxlJyA6IGByZXNvdXJjZSBwcm9wZXJ0aWVzICcke25vbkhvdHN3YXBwYWJsZVByb3BOYW1lc30nIGFyZSBub3QgaG90c3dhcHBhYmxlIG9uIHRoaXMgcmVzb3VyY2UgdHlwZWA7XG5cbiAgICAgIHJldC5wdXNoKG5vbkhvdHN3YXBwYWJsZUNoYW5nZShcbiAgICAgICAgdGhpcy5jaGFuZ2UsXG4gICAgICAgIHJlYXNvbixcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIHRoaXMubm9uSG90c3dhcHBhYmxlUHJvcHMsXG4gICAgICApKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWVzT2ZIb3Rzd2FwcGFibGVQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaG90c3dhcHBhYmxlUHJvcHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUNoYW5nZXMoeHM6IFJlc291cmNlQ2hhbmdlLCBob3Rzd2FwcGFibGVQcm9wTmFtZXM6IHN0cmluZ1tdKTogQ2xhc3NpZmllZENoYW5nZXMge1xuICBjb25zdCBob3Rzd2FwcGFibGVQcm9wczogUHJvcERpZmZzID0ge307XG4gIGNvbnN0IG5vbkhvdHN3YXBwYWJsZVByb3BzOiBQcm9wRGlmZnMgPSB7fTtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9wRGlmZl0gb2YgT2JqZWN0LmVudHJpZXMoeHMucHJvcGVydHlVcGRhdGVzKSkge1xuICAgIGlmIChob3Rzd2FwcGFibGVQcm9wTmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIGhvdHN3YXBwYWJsZVByb3BzW25hbWVdID0gcHJvcERpZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vbkhvdHN3YXBwYWJsZVByb3BzW25hbWVdID0gcHJvcERpZmY7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBDbGFzc2lmaWVkQ2hhbmdlcyh4cywgaG90c3dhcHBhYmxlUHJvcHMsIG5vbkhvdHN3YXBwYWJsZVByb3BzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbkhvdHN3YXBwYWJsZUNoYW5nZShcbiAgY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSxcbiAgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb24sXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIG5vbkhvdHN3YXBwYWJsZVByb3BzPzogUHJvcERpZmZzLFxuICBob3Rzd2FwT25seVZpc2libGU6IGJvb2xlYW4gPSB0cnVlLFxuKTogUmVqZWN0ZWRDaGFuZ2Uge1xuICByZXR1cm4ge1xuICAgIGhvdHN3YXBwYWJsZTogZmFsc2UsXG4gICAgaG90c3dhcE9ubHlWaXNpYmxlLFxuICAgIGNoYW5nZToge1xuICAgICAgcmVhc29uLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBzdWJqZWN0OiB7XG4gICAgICAgIHR5cGU6ICdSZXNvdXJjZScsXG4gICAgICAgIGxvZ2ljYWxJZDogY2hhbmdlLmxvZ2ljYWxJZCxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUuVHlwZSxcbiAgICAgICAgcmVqZWN0ZWRQcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyhub25Ib3Rzd2FwcGFibGVQcm9wcyA/PyBjaGFuZ2UucHJvcGVydHlVcGRhdGVzKSxcbiAgICAgICAgbWV0YWRhdGE6IGNoYW5nZS5tZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbkhvdHN3YXBwYWJsZVJlc291cmNlKGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UpOiBSZWplY3RlZENoYW5nZSB7XG4gIHJldHVybiB7XG4gICAgaG90c3dhcHBhYmxlOiBmYWxzZSxcbiAgICBjaGFuZ2U6IHtcbiAgICAgIHJlYXNvbjogTm9uSG90c3dhcHBhYmxlUmVhc29uLlJFU09VUkNFX1VOU1VQUE9SVEVELFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHJlc291cmNlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgaG90c3dhcCBkZXBsb3ltZW50cycsXG4gICAgICBzdWJqZWN0OiB7XG4gICAgICAgIHR5cGU6ICdSZXNvdXJjZScsXG4gICAgICAgIGxvZ2ljYWxJZDogY2hhbmdlLmxvZ2ljYWxJZCxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUuVHlwZSxcbiAgICAgICAgcmVqZWN0ZWRQcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyhjaGFuZ2UucHJvcGVydHlVcGRhdGVzKSxcbiAgICAgICAgbWV0YWRhdGE6IGNoYW5nZS5tZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -100,6 +100,7 @@ async function isHotswappableEcsServiceChange(logicalId, change, evaluateCfnTemp
|
|
|
100
100
|
let ecsHotswapProperties = hotswapPropertyOverrides.ecsHotswapProperties;
|
|
101
101
|
let minimumHealthyPercent = ecsHotswapProperties?.minimumHealthyPercent;
|
|
102
102
|
let maximumHealthyPercent = ecsHotswapProperties?.maximumHealthyPercent;
|
|
103
|
+
let stabilizationTimeoutSeconds = ecsHotswapProperties?.stabilizationTimeoutSeconds;
|
|
103
104
|
// Step 2 - update the services using that TaskDefinition to point to the new TaskDefinition Revision
|
|
104
105
|
// Forcing New Deployment and setting Minimum Healthy Percent to 0.
|
|
105
106
|
// As CDK HotSwap is development only, this seems the most efficient way to ensure all tasks are replaced immediately, regardless of original amount
|
|
@@ -119,7 +120,7 @@ async function isHotswappableEcsServiceChange(logicalId, change, evaluateCfnTemp
|
|
|
119
120
|
await sdk.ecs().waitUntilServicesStable({
|
|
120
121
|
cluster: update.service?.clusterArn,
|
|
121
122
|
services: [service.serviceArn],
|
|
122
|
-
});
|
|
123
|
+
}, stabilizationTimeoutSeconds);
|
|
123
124
|
}));
|
|
124
125
|
},
|
|
125
126
|
});
|
|
@@ -156,4 +157,4 @@ async function prepareTaskDefinitionChange(evaluateCfnTemplate, logicalId, chang
|
|
|
156
157
|
Family: family,
|
|
157
158
|
};
|
|
158
159
|
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLXNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZWNzLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZUEsd0VBb0pDO0FBL0pELHFDQUdrQjtBQUNsQixvREFBb0Y7QUFDcEYscUNBQTBFO0FBSTFFLE1BQU0seUJBQXlCLEdBQUcsbUJBQW1CLENBQUM7QUFFL0MsS0FBSyxVQUFVLDhCQUE4QixDQUNsRCxTQUFpQixFQUNqQixNQUFzQixFQUN0QixtQkFBbUQsRUFDbkQsd0JBQWtEO0lBRWxELHlFQUF5RTtJQUN6RSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLDBCQUEwQixFQUFFLENBQUM7UUFDeEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztJQUVoQyxxRkFBcUY7SUFDckYscUZBQXFGO0lBQ3JGLHVEQUF1RDtJQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUEsd0JBQWUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDNUUsaUJBQWlCLENBQUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFNUQsdUVBQXVFO0lBQ3ZFLE1BQU0sMkJBQTJCLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsTUFBTSxxQ0FBcUMsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQzlFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUM1QyxDQUFDO0lBQ0YsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLEtBQUssRUFBYyxDQUFDO0lBQzlELEtBQUssTUFBTSxrQkFBa0IsSUFBSSxxQ0FBcUMsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsU0FBUyxD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LEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsZ0dBQWdHO1lBQ2xHLGVBQWUsQ0FBQztJQUNwQiw4RkFBOEY7SUFDOUYsT0FBTztRQUNMLEdBQUcsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO1lBQ2xELEdBQUcsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUM7WUFDakMsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxFQUFFLE1BQU07S0FDZixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuICBIb3Rzd2FwQ2hhbmdlLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQge1xuICBjbGFzc2lmeUNoYW5nZXMsXG4gIG5vbkhvdHN3YXBwYWJsZUNoYW5nZSxcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgTm9uSG90c3dhcHBhYmxlUmVhc29uLCB0eXBlIFJlc291cmNlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMvaG90c3dhcCc7XG5pbXBvcnQgeyBsb3dlckNhc2VGaXJzdENoYXJhY3RlciwgdHJhbnNmb3JtT2JqZWN0S2V5cyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuXG5jb25zdCBFQ1NfU0VSVklDRV9SRVNPVVJDRV9UWVBFID0gJ0FXUzo6RUNTOjpTZXJ2aWNlJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzSG90c3dhcHBhYmxlRWNzU2VydmljZUNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbiAgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzOiBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4pOiBQcm9taXNlPEhvdHN3YXBDaGFuZ2VbXT4ge1xuICAvLyB0aGUgb25seSByZXNvdXJjZSBjaGFuZ2Ugd2UgY2FuIGV2YWx1YXRlIGhlcmUgaXMgYW4gRUNTIFRhc2tEZWZpbml0aW9uXG4gIGlmIChjaGFuZ2UubmV3VmFsdWUuVHlwZSAhPT0gJ0FXUzo6RUNTOjpUYXNrRGVmaW5pdGlvbicpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCByZXQ6IEhvdHN3YXBDaGFuZ2VbXSA9IFtdO1xuXG4gIC8vIFdlIG9ubHkgYWxsb3cgYSBjaGFuZ2UgaW4gdGhlIENvbnRhaW5lckRlZmluaXRpb25zIG9mIHRoZSBUYXNrRGVmaW5pdGlvbiBmb3Igbm93IC1cbiAgLy8gaXQgY29udGFpbnMgdGhlIGltYWdlIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHNvIHNlZW1zIGxpa2UgYSBzYWZlIGJldCBmb3Igbm93LlxuICAvLyBXZSBtaWdodCByZXZpc2l0IHRoaXMgZGVjaXNpb24gaW4gdGhlIGZ1dHVyZSB0aG91Z2ghXG4gIGNvbnN0IGNsYXNzaWZpZWRDaGFuZ2VzID0gY2xhc3NpZnlDaGFuZ2VzKGNoYW5nZSwgWydDb250YWluZXJEZWZpbml0aW9ucyddKTtcbiAgY2xhc3NpZmllZENoYW5nZXMucmVwb3J0Tm9uSG90c3dhcHBhYmxlUHJvcGVydHlDaGFuZ2VzKHJldCk7XG5cbiAgLy8gZmluZCBhbGwgRUNTIFNlcnZpY2VzIHRoYXQgcmVmZXJlbmNlIHRoZSBUYXNrRGVmaW5pdGlvbiB0aGF0IGNoYW5nZWRcbiAgY29uc3QgcmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmID0gZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUmVmZXJlbmNlc1RvKGxvZ2ljYWxJZCk7XG4gIGNvbnN0IGVjc1NlcnZpY2VSZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYgPSByZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYuZmlsdGVyKFxuICAgIChyKSA9PiByLlR5cGUgPT09IEVDU19TRVJWSUNFX1JFU09VUkNFX1RZUEUsXG4gICk7XG4gIGNvbnN0IGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmID0gbmV3IEFycmF5PEVjc1NlcnZpY2U+KCk7XG4gIGZvciAoY29uc3QgZWNzU2VydmljZVJlc291cmNlIG9mIGVjc1NlcnZpY2VSZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYpIHtcbiAgICBjb25zdCBzZXJ2aWNlQXJuID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUGh5c2ljYWxOYW1lRm9yKGVjc1NlcnZpY2VSZXNvdXJjZS5Mb2dpY2FsSWQpO1xuICAgIGlmIChzZXJ2aWNlQXJuKSB7XG4gICAgICBlY3NTZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZi5wdXNoKHtcbiAgICAgICAgbG9naWNhbElkOiBlY3NTZXJ2aWNlUmVzb3VyY2UuTG9naWNhbElkLFxuICAgICAgICBzZXJ2aWNlQXJuLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChlY3NTZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZi5sZW5ndGggPT09IDApIHtcbiAgICAvKipcbiAgICAgKiBFQ1MgU2VydmljZXMgY2FuIGhhdmUgYSB0YXNrIGRlZmluaXRpb24gdGhhdCBkb2Vzbid0IHJlZmVyIHRvIHRoZSB0YXNrIGRlZmluaXRpb24gYmVpbmcgdXBkYXRlZC5cbiAgICAgKiBXZSBoYXZlIHRvIGxvZyB0aGlzIGFzIGEgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2UgdG8gdGhlIHRhc2sgZGVmaW5pdGlvbiwgYnV0IHdoZW4gd2UgZG8sXG4gICAgICogd2Ugd2luZCB1cCBob3Rzd2FwcGluZyB0aGUgdGFzayBkZWZpbml0aW9uIGFuZCBsb2dnaW5nIGl0IGFzIGEgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBUaGlzIGxvZ2ljIHByZXZlbnRzIHVzIGZyb20gbG9nZ2luZyB0aGF0IGNoYW5nZSBhcyBub24taG90c3dhcHBhYmxlIHdoZW4gd2UgaG90c3dhcCBpdC5cbiAgICAgKi9cbiAgICByZXQucHVzaChub25Ib3Rzd2FwcGFibGVDaGFuZ2UoXG4gICAgICBjaGFuZ2UsXG4gICAgICBOb25Ib3Rzd2FwcGFibGVSZWFzb24uREVQRU5ERU5DWV9VTlNVUFBPUlRFRCxcbiAgICAgICdObyBFQ1Mgc2VydmljZXMgcmVmZXJlbmNlIHRoZSBjaGFuZ2VkIHRhc2sgZGVmaW5pdGlvbicsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBmYWxzZSxcbiAgICApKTtcbiAgfVxuICBpZiAocmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmxlbmd0aCA+IGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmxlbmd0aCkge1xuICAgIC8vIGlmIHNvbWV0aGluZyBiZXNpZGVzIGFuIEVDUyBTZXJ2aWNlIGlzIHJlZmVyZW5jaW5nIHRoZSBUYXNrRGVmaW5pdGlvbixcbiAgICAvLyBob3Rzd2FwIGlzIG5vdCBwb3NzaWJsZSBpbiBGQUxMX0JBQ0sgbW9kZVxuICAgIGNvbnN0IG5vbkVjc1NlcnZpY2VUYXNrRGVmUmVmcyA9IHJlc291cmNlc1JlZmVyZW5jaW5nVGFza0RlZi5maWx0ZXIoKHIpID0+IHIuVHlwZSAhPT0gRUNTX1NFUlZJQ0VfUkVTT1VSQ0VfVFlQRSk7XG4gICAgZm9yIChjb25zdCB0YXNrUmVmIG9mIG5vbkVjc1NlcnZpY2VUYXNrRGVmUmVmcykge1xuICAgICAgcmV0LnB1c2gobm9uSG90c3dhcHBhYmxlQ2hhbmdlKFxuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIE5vbkhvdHN3YXBwYWJsZVJlYXNvbi5ERVBFTkRFTkNZX1VOU1VQUE9SVEVELFxuICAgICAgICBgQSByZXNvdXJjZSAnJHt0YXNrUmVmLkxvZ2ljYWxJZH0nIHdpdGggVHlwZSAnJHt0YXNrUmVmLlR5cGV9JyB0aGF0IGlzIG5vdCBhbiBFQ1MgU2VydmljZSB3YXMgZm91bmQgcmVmZXJlbmNpbmcgdGhlIGNoYW5nZWQgVGFza0RlZmluaXRpb24gJyR7bG9naWNhbElkfSdgLFxuICAgICAgKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmFtZXNPZkhvdHN3YXBwYWJsZUNoYW5nZXMgPSBPYmplY3Qua2V5cyhjbGFzc2lmaWVkQ2hhbmdlcy5ob3Rzd2FwcGFibGVQcm9wcyk7XG4gIGlmIChuYW1lc09mSG90c3dhcHBhYmxlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdGFza0RlZmluaXRpb25SZXNvdXJjZSA9IGF3YWl0IHByZXBhcmVUYXNrRGVmaW5pdGlvbkNoYW5nZShldmFsdWF0ZUNmblRlbXBsYXRlLCBsb2dpY2FsSWQsIGNoYW5nZSk7XG4gICAgcmV0LnB1c2goe1xuICAgICAgY2hhbmdlOiB7XG4gICAgICAgIGNhdXNlOiBjaGFuZ2UsXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogY2hhbmdlLm5ld1ZhbHVlLlR5cGUsXG4gICAgICAgICAgICBwaHlzaWNhbE5hbWU6IGF3YWl0IHRhc2tEZWZpbml0aW9uUmVzb3VyY2UuRmFtaWx5LFxuICAgICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmLm1hcCgoZWNzU2VydmljZSkgPT4gKHtcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogRUNTX1NFUlZJQ0VfUkVTT1VSQ0VfVFlQRSxcbiAgICAgICAgICAgIHBoeXNpY2FsTmFtZTogZWNzU2VydmljZS5zZXJ2aWNlQXJuLnNwbGl0KCcvJylbMl0sXG4gICAgICAgICAgICBsb2dpY2FsSWQ6IGVjc1NlcnZpY2UubG9naWNhbElkLFxuICAgICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IoZWNzU2VydmljZS5sb2dpY2FsSWQpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBob3Rzd2FwcGFibGU6IHRydWUsXG4gICAgICBzZXJ2aWNlOiAnZWNzLXNlcnZpY2UnLFxuICAgICAgYXBwbHk6IGFzeW5jIChzZGs6IFNESykgPT4ge1xuICAgICAgICAvLyBTdGVwIDEgLSB1cGRhdGUgdGhlIGNoYW5nZWQgVGFza0RlZmluaXRpb24sIGNyZWF0aW5nIGEgbmV3IFRhc2tEZWZpbml0aW9uIFJldmlzaW9uXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbG93ZXJjYXNlIHRoZSBldmFsdWF0ZWQgVGFza0RlZiBmcm9tIENsb3VkRm9ybWF0aW9uLFxuICAgICAgICAvLyBhcyB0aGUgQVdTIFNESyB1c2VzIGxvd2VyY2FzZSBwcm9wZXJ0eSBuYW1lcyBmb3IgdGhlc2VcblxuICAgICAgICAvLyBUaGUgU0RLIHJlcXVpcmVzIG1vcmUgcHJvcGVydGllcyBoZXJlIHRoYW4gaXRzIHdvcnRoIGRvaW5nIGV4cGxpY2l0IHR5cGluZyBmb3JcbiAgICAgICAgLy8gaW5zdGVhZCwganVzdCB1c2UgYWxsIHRoZSBvbGQgdmFsdWVzIGluIHRoZSBkaWZmIHRvIGZpbGwgdGhlbSBpbiBpbXBsaWNpdGx5XG4gICAgICAgIGNvbnN0IGxvd2VyY2FzZWRUYXNrRGVmID0gdHJhbnNmb3JtT2JqZWN0S2V5cyh0YXNrRGVmaW5pdGlvblJlc291cmNlLCBsb3dlckNhc2VGaXJzdENoYXJhY3Rlciwge1xuICAgICAgICAgIC8vIEFsbCB0aGUgcHJvcGVydGllcyB0aGF0IHRha2UgYXJiaXRyYXJ5IHN0cmluZyBhcyBrZXlzIGkuZS4geyBcInN0cmluZ1wiIDogXCJzdHJpbmdcIiB9XG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlclRhc2tEZWZpbml0aW9uLmh0bWwjQVBJX1JlZ2lzdGVyVGFza0RlZmluaXRpb25fUmVxdWVzdFN5bnRheFxuICAgICAgICAgIENvbnRhaW5lckRlZmluaXRpb25zOiB7XG4gICAgICAgICAgICBEb2NrZXJMYWJlbHM6IHRydWUsXG4gICAgICAgICAgICBGaXJlbGVuc0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgT3B0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBMb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgIE9wdGlvbnM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgVm9sdW1lczoge1xuICAgICAgICAgICAgRG9ja2VyVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICBEcml2ZXJPcHRzOiB0cnVlLFxuICAgICAgICAgICAgICBMYWJlbHM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZWdpc3RlclRhc2tEZWZSZXNwb25zZSA9IGF3YWl0IHNkay5lY3MoKS5yZWdpc3RlclRhc2tEZWZpbml0aW9uKGxvd2VyY2FzZWRUYXNrRGVmKTtcbiAgICAgICAgY29uc3QgdGFza0RlZlJldkFybiA9IHJlZ2lzdGVyVGFza0RlZlJlc3BvbnNlLnRhc2tEZWZpbml0aW9uPy50YXNrRGVmaW5pdGlvbkFybjtcblxuICAgICAgICBsZXQgZWNzSG90c3dhcFByb3BlcnRpZXMgPSBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMuZWNzSG90c3dhcFByb3BlcnRpZXM7XG4gICAgICAgIGxldCBtaW5pbXVtSGVhbHRoeVBlcmNlbnQgPSBlY3NIb3Rzd2FwUHJvcGVydGllcz8ubWluaW11bUhlYWx0aHlQZXJjZW50O1xuICAgICAgICBsZXQgbWF4aW11bUhlYWx0aHlQZXJjZW50ID0gZWNzSG90c3dhcFByb3BlcnRpZXM/Lm1heGltdW1IZWFsdGh5UGVyY2VudDtcblxuICAgICAgICAvLyBTdGVwIDIgLSB1cGRhdGUgdGhlIHNlcnZpY2VzIHVzaW5nIHRoYXQgVGFza0RlZmluaXRpb24gdG8gcG9pbnQgdG8gdGhlIG5ldyBUYXNrRGVmaW5pdGlvbiBSZXZpc2lvblxuICAgICAgICAvLyBGb3JjaW5nIE5ldyBEZXBsb3ltZW50IGFuZCBzZXR0aW5nIE1pbmltdW0gSGVhbHRoeSBQZXJjZW50IHRvIDAuXG4gICAgICAgIC8vIEFzIENESyBIb3RTd2FwIGlzIGRldmVsb3BtZW50IG9ubHksIHRoaXMgc2VlbXMgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBlbnN1cmUgYWxsIHRhc2tzIGFyZSByZXBsYWNlZCBpbW1lZGlhdGVseSwgcmVnYXJkbGVzcyBvZiBvcmlnaW5hbCBhbW91bnRcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBjZGtsYWJzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmLm1hcChhc3luYyAoc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2x1c3RlciA9IHNlcnZpY2Uuc2VydmljZUFybi5zcGxpdCgnLycpWzFdO1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gYXdhaXQgc2RrLmVjcygpLnVwZGF0ZVNlcnZpY2Uoe1xuICAgICAgICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlLnNlcnZpY2VBcm4sXG4gICAgICAgICAgICAgIHRhc2tEZWZpbml0aW9uOiB0YXNrRGVmUmV2QXJuLFxuICAgICAgICAgICAgICBjbHVzdGVyLFxuICAgICAgICAgICAgICBmb3JjZU5ld0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICAgIGRlcGxveW1lbnRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgbWluaW11bUhlYWx0aHlQZXJjZW50OiBtaW5pbXVtSGVhbHRoeVBlcmNlbnQgIT09IHVuZGVmaW5lZCA/IG1pbmltdW1IZWFsdGh5UGVyY2VudCA6IDAsXG4gICAgICAgICAgICAgICAgbWF4aW11bVBlcmNlbnQ6IG1heGltdW1IZWFsdGh5UGVyY2VudCAhPT0gdW5kZWZpbmVkID8gbWF4aW11bUhlYWx0aHlQZXJjZW50IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHNkay5lY3MoKS53YWl0VW50aWxTZXJ2aWNlc1N0YWJsZSh7XG4gICAgICAgICAgICAgIGNsdXN0ZXI6IHVwZGF0ZS5zZXJ2aWNlPy5jbHVzdGVyQXJuLFxuICAgICAgICAgICAgICBzZXJ2aWNlczogW3NlcnZpY2Uuc2VydmljZUFybl0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5pbnRlcmZhY2UgRWNzU2VydmljZSB7XG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2aWNlQXJuOiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVUYXNrRGVmaW5pdGlvbkNoYW5nZShcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSxcbikge1xuICBjb25zdCB0YXNrRGVmaW5pdGlvblJlc291cmNlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHtcbiAgICAuLi5jaGFuZ2Uub2xkVmFsdWUuUHJvcGVydGllcyxcbiAgICBDb250YWluZXJEZWZpbml0aW9uczogY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/LkNvbnRhaW5lckRlZmluaXRpb25zLFxuICB9O1xuICAvLyBmaXJzdCwgbGV0J3MgZ2V0IHRoZSBuYW1lIG9mIHRoZSBmYW1pbHlcbiAgY29uc3QgZmFtaWx5TmFtZU9yQXJuID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5lc3RhYmxpc2hSZXNvdXJjZVBoeXNpY2FsTmFtZShcbiAgICBsb2dpY2FsSWQsXG4gICAgdGFza0RlZmluaXRpb25SZXNvdXJjZT8uRmFtaWx5LFxuICApO1xuICBpZiAoIWZhbWlseU5hbWVPckFybikge1xuICAgIC8vIGlmIHRoZSBGYW1pbHkgcHJvcGVydHkgaGFzIG5vdCBiZWVuIHByb3ZpZGVkLCBhbmQgd2UgY2FuJ3QgZmluZCBpdCBpbiB0aGUgY3VycmVudCBTdGFjayxcbiAgICAvLyB0aGlzIG1lYW5zIGhvdHN3YXBwaW5nIGlzIG5vdCBwb3NzaWJsZVxuICAgIHJldHVybjtcbiAgfVxuICAvLyB0aGUgcGh5c2ljYWwgbmFtZSBvZiB0aGUgVGFzayBEZWZpbml0aW9uIGluIENsb3VkRm9ybWF0aW9uIGluY2x1ZGVzIGl0cyBjdXJyZW50IHJldmlzaW9uIG51bWJlciBhdCB0aGUgZW5kLFxuICAvLyByZW1vdmUgaXQgaWYgbmVlZGVkXG4gIGNvbnN0IGZhbWlseU5hbWVPckFyblBhcnRzID0gZmFtaWx5TmFtZU9yQXJuLnNwbGl0KCc6Jyk7XG4gIGNvbnN0IGZhbWlseSA9XG4gICAgZmFtaWx5TmFtZU9yQXJuUGFydHMubGVuZ3RoID4gMVxuICAgICAgPyAvLyBmYW1pbHlOYW1lT3JBcm4gaXMgYWN0dWFsbHkgYW4gQVJOLCBvZiB0aGUgZm9ybWF0ICdhcm46YXdzOmVjczpyZWdpb246YWNjb3VudDp0YXNrLWRlZmluaXRpb24vPGZhbWlseS1uYW1lPjo8cmV2aXNpb24tbnI+J1xuICAgIC8vIHNvLCB0YWtlIHRoZSA2dGggZWxlbWVudCwgYXQgaW5kZXggNSwgYW5kIHNwbGl0IGl0IG9uICcvJ1xuICAgICAgZmFtaWx5TmFtZU9yQXJuUGFydHNbNV0uc3BsaXQoJy8nKVsxXVxuICAgICAgOiAvLyBvdGhlcndpc2UsIGZhbWlseU5hbWVPckFybiBpcyBqdXN0IHRoZSBzaW1wbGUgbmFtZSBldmFsdWF0ZWQgZnJvbSB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAgICAgIGZhbWlseU5hbWVPckFybjtcbiAgLy8gdGhlbiwgbGV0J3MgZXZhbHVhdGUgdGhlIGJvZHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgVGFza0RlZiAod2l0aG91dCB0aGUgRmFtaWx5IHByb3BlcnR5KVxuICByZXR1cm4ge1xuICAgIC4uLihhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih7XG4gICAgICAuLi4odGFza0RlZmluaXRpb25SZXNvdXJjZSA/PyB7fSksXG4gICAgICBGYW1pbHk6IHVuZGVmaW5lZCxcbiAgICB9KSksXG4gICAgRmFtaWx5OiBmYW1pbHksXG4gIH07XG59XG4iXX0=
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLXNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZWNzLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZUEsd0VBcUpDO0FBaEtELHFDQUdrQjtBQUNsQixvREFBb0Y7QUFDcEYscUNBQTBFO0FBSTFFLE1BQU0seUJBQXlCLEdBQUcsbUJBQW1CLENBQUM7QUFFL0MsS0FBSyxVQUFVLDhCQUE4QixDQUNsRCxTQUFpQixFQUNqQixNQUFzQixFQUN0QixtQkFBbUQsRUFDbkQsd0JBQWtEO0lBRWxELHlFQUF5RTtJQUN6RSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLDBCQUEwQixFQUFFLENBQUM7UUFDeEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztJQUVoQyxxRkFBcUY7SUFDckYscUZBQXFGO0lBQ3JGLHVEQUF1RDtJQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUEsd0JBQWUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDNUUsaUJBQWlCLENBQUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFNUQsdUVBQXVFO0lBQ3ZFLE1BQU0sMkJBQTJCLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsTUFBTSxxQ0FBcUMsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQzlFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUM1QyxDQUFDO0lBQ0YsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLEtBQUssRUFBYyxDQUFDO0lBQzlELEtBQUssTUFBTSxrQkFBa0IsSUFBSSxxQ0FBcUMsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsU0FBUyxD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SEFBNkg7WUFDakksNERBQTREO1lBQzFELG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLGdHQUFnRztZQUNsRyxlQUFlLENBQUM7SUFDcEIsOEZBQThGO0lBQzlGLE9BQU87UUFDTCxHQUFHLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztZQUNsRCxHQUFHLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNO0tBQ2YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbiAgSG90c3dhcENoYW5nZSxcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtcbiAgY2xhc3NpZnlDaGFuZ2VzLFxuICBub25Ib3Rzd2FwcGFibGVDaGFuZ2UsXG59IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IE5vbkhvdHN3YXBwYWJsZVJlYXNvbiwgdHlwZSBSZXNvdXJjZUNoYW5nZSB9IGZyb20gJy4uLy4uL3BheWxvYWRzL2hvdHN3YXAnO1xuaW1wb3J0IHsgbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIsIHRyYW5zZm9ybU9iamVjdEtleXMgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uJztcblxuY29uc3QgRUNTX1NFUlZJQ0VfUkVTT1VSQ0VfVFlQRSA9ICdBV1M6OkVDUzo6U2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0hvdHN3YXBwYWJsZUVjc1NlcnZpY2VDaGFuZ2UoXG4gIGxvZ2ljYWxJZDogc3RyaW5nLFxuICBjaGFuZ2U6IFJlc291cmNlQ2hhbmdlLFxuICBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4gIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlczogSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuKTogUHJvbWlzZTxIb3Rzd2FwQ2hhbmdlW10+IHtcbiAgLy8gdGhlIG9ubHkgcmVzb3VyY2UgY2hhbmdlIHdlIGNhbiBldmFsdWF0ZSBoZXJlIGlzIGFuIEVDUyBUYXNrRGVmaW5pdGlvblxuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgIT09ICdBV1M6OkVDUzo6VGFza0RlZmluaXRpb24nKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcmV0OiBIb3Rzd2FwQ2hhbmdlW10gPSBbXTtcblxuICAvLyBXZSBvbmx5IGFsbG93IGEgY2hhbmdlIGluIHRoZSBDb250YWluZXJEZWZpbml0aW9ucyBvZiB0aGUgVGFza0RlZmluaXRpb24gZm9yIG5vdyAtXG4gIC8vIGl0IGNvbnRhaW5zIHRoZSBpbWFnZSBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBzbyBzZWVtcyBsaWtlIGEgc2FmZSBiZXQgZm9yIG5vdy5cbiAgLy8gV2UgbWlnaHQgcmV2aXNpdCB0aGlzIGRlY2lzaW9uIGluIHRoZSBmdXR1cmUgdGhvdWdoIVxuICBjb25zdCBjbGFzc2lmaWVkQ2hhbmdlcyA9IGNsYXNzaWZ5Q2hhbmdlcyhjaGFuZ2UsIFsnQ29udGFpbmVyRGVmaW5pdGlvbnMnXSk7XG4gIGNsYXNzaWZpZWRDaGFuZ2VzLnJlcG9ydE5vbkhvdHN3YXBwYWJsZVByb3BlcnR5Q2hhbmdlcyhyZXQpO1xuXG4gIC8vIGZpbmQgYWxsIEVDUyBTZXJ2aWNlcyB0aGF0IHJlZmVyZW5jZSB0aGUgVGFza0RlZmluaXRpb24gdGhhdCBjaGFuZ2VkXG4gIGNvbnN0IHJlc291cmNlc1JlZmVyZW5jaW5nVGFza0RlZiA9IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFJlZmVyZW5jZXNUbyhsb2dpY2FsSWQpO1xuICBjb25zdCBlY3NTZXJ2aWNlUmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmID0gcmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmZpbHRlcihcbiAgICAocikgPT4gci5UeXBlID09PSBFQ1NfU0VSVklDRV9SRVNPVVJDRV9UWVBFLFxuICApO1xuICBjb25zdCBlY3NTZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZiA9IG5ldyBBcnJheTxFY3NTZXJ2aWNlPigpO1xuICBmb3IgKGNvbnN0IGVjc1NlcnZpY2VSZXNvdXJjZSBvZiBlY3NTZXJ2aWNlUmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmKSB7XG4gICAgY29uc3Qgc2VydmljZUFybiA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFBoeXNpY2FsTmFtZUZvcihlY3NTZXJ2aWNlUmVzb3VyY2UuTG9naWNhbElkKTtcbiAgICBpZiAoc2VydmljZUFybikge1xuICAgICAgZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYucHVzaCh7XG4gICAgICAgIGxvZ2ljYWxJZDogZWNzU2VydmljZVJlc291cmNlLkxvZ2ljYWxJZCxcbiAgICAgICAgc2VydmljZUFybixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpZiAoZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYubGVuZ3RoID09PSAwKSB7XG4gICAgLyoqXG4gICAgICogRUNTIFNlcnZpY2VzIGNhbiBoYXZlIGEgdGFzayBkZWZpbml0aW9uIHRoYXQgZG9lc24ndCByZWZlciB0byB0aGUgdGFzayBkZWZpbml0aW9uIGJlaW5nIHVwZGF0ZWQuXG4gICAgICogV2UgaGF2ZSB0byBsb2cgdGhpcyBhcyBhIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlIHRvIHRoZSB0YXNrIGRlZmluaXRpb24sIGJ1dCB3aGVuIHdlIGRvLFxuICAgICAqIHdlIHdpbmQgdXAgaG90c3dhcHBpbmcgdGhlIHRhc2sgZGVmaW5pdGlvbiBhbmQgbG9nZ2luZyBpdCBhcyBhIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlLlxuICAgICAqXG4gICAgICogVGhpcyBsb2dpYyBwcmV2ZW50cyB1cyBmcm9tIGxvZ2dpbmcgdGhhdCBjaGFuZ2UgYXMgbm9uLWhvdHN3YXBwYWJsZSB3aGVuIHdlIGhvdHN3YXAgaXQuXG4gICAgICovXG4gICAgcmV0LnB1c2gobm9uSG90c3dhcHBhYmxlQ2hhbmdlKFxuICAgICAgY2hhbmdlLFxuICAgICAgTm9uSG90c3dhcHBhYmxlUmVhc29uLkRFUEVOREVOQ1lfVU5TVVBQT1JURUQsXG4gICAgICAnTm8gRUNTIHNlcnZpY2VzIHJlZmVyZW5jZSB0aGUgY2hhbmdlZCB0YXNrIGRlZmluaXRpb24nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZmFsc2UsXG4gICAgKSk7XG4gIH1cbiAgaWYgKHJlc291cmNlc1JlZmVyZW5jaW5nVGFza0RlZi5sZW5ndGggPiBlY3NTZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZi5sZW5ndGgpIHtcbiAgICAvLyBpZiBzb21ldGhpbmcgYmVzaWRlcyBhbiBFQ1MgU2VydmljZSBpcyByZWZlcmVuY2luZyB0aGUgVGFza0RlZmluaXRpb24sXG4gICAgLy8gaG90c3dhcCBpcyBub3QgcG9zc2libGUgaW4gRkFMTF9CQUNLIG1vZGVcbiAgICBjb25zdCBub25FY3NTZXJ2aWNlVGFza0RlZlJlZnMgPSByZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYuZmlsdGVyKChyKSA9PiByLlR5cGUgIT09IEVDU19TRVJWSUNFX1JFU09VUkNFX1RZUEUpO1xuICAgIGZvciAoY29uc3QgdGFza1JlZiBvZiBub25FY3NTZXJ2aWNlVGFza0RlZlJlZnMpIHtcbiAgICAgIHJldC5wdXNoKG5vbkhvdHN3YXBwYWJsZUNoYW5nZShcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBOb25Ib3Rzd2FwcGFibGVSZWFzb24uREVQRU5ERU5DWV9VTlNVUFBPUlRFRCxcbiAgICAgICAgYEEgcmVzb3VyY2UgJyR7dGFza1JlZi5Mb2dpY2FsSWR9JyB3aXRoIFR5cGUgJyR7dGFza1JlZi5UeXBlfScgdGhhdCBpcyBub3QgYW4gRUNTIFNlcnZpY2Ugd2FzIGZvdW5kIHJlZmVyZW5jaW5nIHRoZSBjaGFuZ2VkIFRhc2tEZWZpbml0aW9uICcke2xvZ2ljYWxJZH0nYCxcbiAgICAgICkpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5hbWVzT2ZIb3Rzd2FwcGFibGVDaGFuZ2VzID0gT2JqZWN0LmtleXMoY2xhc3NpZmllZENoYW5nZXMuaG90c3dhcHBhYmxlUHJvcHMpO1xuICBpZiAobmFtZXNPZkhvdHN3YXBwYWJsZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHRhc2tEZWZpbml0aW9uUmVzb3VyY2UgPSBhd2FpdCBwcmVwYXJlVGFza0RlZmluaXRpb25DaGFuZ2UoZXZhbHVhdGVDZm5UZW1wbGF0ZSwgbG9naWNhbElkLCBjaGFuZ2UpO1xuICAgIHJldC5wdXNoKHtcbiAgICAgIGNoYW5nZToge1xuICAgICAgICBjYXVzZTogY2hhbmdlLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgICByZXNvdXJjZVR5cGU6IGNoYW5nZS5uZXdWYWx1ZS5UeXBlLFxuICAgICAgICAgICAgcGh5c2ljYWxOYW1lOiBhd2FpdCB0YXNrRGVmaW5pdGlvblJlc291cmNlLkZhbWlseSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGxvZ2ljYWxJZCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5lY3NTZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZi5tYXAoKGVjc1NlcnZpY2UpID0+ICh7XG4gICAgICAgICAgICByZXNvdXJjZVR5cGU6IEVDU19TRVJWSUNFX1JFU09VUkNFX1RZUEUsXG4gICAgICAgICAgICBwaHlzaWNhbE5hbWU6IGVjc1NlcnZpY2Uuc2VydmljZUFybi5zcGxpdCgnLycpWzJdLFxuICAgICAgICAgICAgbG9naWNhbElkOiBlY3NTZXJ2aWNlLmxvZ2ljYWxJZCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGVjc1NlcnZpY2UubG9naWNhbElkKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgaG90c3dhcHBhYmxlOiB0cnVlLFxuICAgICAgc2VydmljZTogJ2Vjcy1zZXJ2aWNlJyxcbiAgICAgIGFwcGx5OiBhc3luYyAoc2RrOiBTREspID0+IHtcbiAgICAgICAgLy8gU3RlcCAxIC0gdXBkYXRlIHRoZSBjaGFuZ2VkIFRhc2tEZWZpbml0aW9uLCBjcmVhdGluZyBhIG5ldyBUYXNrRGVmaW5pdGlvbiBSZXZpc2lvblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGxvd2VyY2FzZSB0aGUgZXZhbHVhdGVkIFRhc2tEZWYgZnJvbSBDbG91ZEZvcm1hdGlvbixcbiAgICAgICAgLy8gYXMgdGhlIEFXUyBTREsgdXNlcyBsb3dlcmNhc2UgcHJvcGVydHkgbmFtZXMgZm9yIHRoZXNlXG5cbiAgICAgICAgLy8gVGhlIFNESyByZXF1aXJlcyBtb3JlIHByb3BlcnRpZXMgaGVyZSB0aGFuIGl0cyB3b3J0aCBkb2luZyBleHBsaWNpdCB0eXBpbmcgZm9yXG4gICAgICAgIC8vIGluc3RlYWQsIGp1c3QgdXNlIGFsbCB0aGUgb2xkIHZhbHVlcyBpbiB0aGUgZGlmZiB0byBmaWxsIHRoZW0gaW4gaW1wbGljaXRseVxuICAgICAgICBjb25zdCBsb3dlcmNhc2VkVGFza0RlZiA9IHRyYW5zZm9ybU9iamVjdEtleXModGFza0RlZmluaXRpb25SZXNvdXJjZSwgbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIsIHtcbiAgICAgICAgICAvLyBBbGwgdGhlIHByb3BlcnRpZXMgdGhhdCB0YWtlIGFyYml0cmFyeSBzdHJpbmcgYXMga2V5cyBpLmUuIHsgXCJzdHJpbmdcIiA6IFwic3RyaW5nXCIgfVxuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbi5odG1sI0FQSV9SZWdpc3RlclRhc2tEZWZpbml0aW9uX1JlcXVlc3RTeW50YXhcbiAgICAgICAgICBDb250YWluZXJEZWZpbml0aW9uczoge1xuICAgICAgICAgICAgRG9ja2VyTGFiZWxzOiB0cnVlLFxuICAgICAgICAgICAgRmlyZWxlbnNDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgIE9wdGlvbnM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTG9nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICBPcHRpb25zOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFZvbHVtZXM6IHtcbiAgICAgICAgICAgIERvY2tlclZvbHVtZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgRHJpdmVyT3B0czogdHJ1ZSxcbiAgICAgICAgICAgICAgTGFiZWxzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJUYXNrRGVmUmVzcG9uc2UgPSBhd2FpdCBzZGsuZWNzKCkucmVnaXN0ZXJUYXNrRGVmaW5pdGlvbihsb3dlcmNhc2VkVGFza0RlZik7XG4gICAgICAgIGNvbnN0IHRhc2tEZWZSZXZBcm4gPSByZWdpc3RlclRhc2tEZWZSZXNwb25zZS50YXNrRGVmaW5pdGlvbj8udGFza0RlZmluaXRpb25Bcm47XG5cbiAgICAgICAgbGV0IGVjc0hvdHN3YXBQcm9wZXJ0aWVzID0gaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLmVjc0hvdHN3YXBQcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgbWluaW11bUhlYWx0aHlQZXJjZW50ID0gZWNzSG90c3dhcFByb3BlcnRpZXM/Lm1pbmltdW1IZWFsdGh5UGVyY2VudDtcbiAgICAgICAgbGV0IG1heGltdW1IZWFsdGh5UGVyY2VudCA9IGVjc0hvdHN3YXBQcm9wZXJ0aWVzPy5tYXhpbXVtSGVhbHRoeVBlcmNlbnQ7XG4gICAgICAgIGxldCBzdGFiaWxpemF0aW9uVGltZW91dFNlY29uZHMgPSBlY3NIb3Rzd2FwUHJvcGVydGllcz8uc3RhYmlsaXphdGlvblRpbWVvdXRTZWNvbmRzO1xuXG4gICAgICAgIC8vIFN0ZXAgMiAtIHVwZGF0ZSB0aGUgc2VydmljZXMgdXNpbmcgdGhhdCBUYXNrRGVmaW5pdGlvbiB0byBwb2ludCB0byB0aGUgbmV3IFRhc2tEZWZpbml0aW9uIFJldmlzaW9uXG4gICAgICAgIC8vIEZvcmNpbmcgTmV3IERlcGxveW1lbnQgYW5kIHNldHRpbmcgTWluaW11bSBIZWFsdGh5IFBlcmNlbnQgdG8gMC5cbiAgICAgICAgLy8gQXMgQ0RLIEhvdFN3YXAgaXMgZGV2ZWxvcG1lbnQgb25seSwgdGhpcyBzZWVtcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGVuc3VyZSBhbGwgdGFza3MgYXJlIHJlcGxhY2VkIGltbWVkaWF0ZWx5LCByZWdhcmRsZXNzIG9mIG9yaWdpbmFsIGFtb3VudFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYubWFwKGFzeW5jIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbHVzdGVyID0gc2VydmljZS5zZXJ2aWNlQXJuLnNwbGl0KCcvJylbMV07XG4gICAgICAgICAgICBjb25zdCB1cGRhdGUgPSBhd2FpdCBzZGsuZWNzKCkudXBkYXRlU2VydmljZSh7XG4gICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2Uuc2VydmljZUFybixcbiAgICAgICAgICAgICAgdGFza0RlZmluaXRpb246IHRhc2tEZWZSZXZBcm4sXG4gICAgICAgICAgICAgIGNsdXN0ZXIsXG4gICAgICAgICAgICAgIGZvcmNlTmV3RGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVwbG95bWVudENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBtaW5pbXVtSGVhbHRoeVBlcmNlbnQ6IG1pbmltdW1IZWFsdGh5UGVyY2VudCAhPT0gdW5kZWZpbmVkID8gbWluaW11bUhlYWx0aHlQZXJjZW50IDogMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtUGVyY2VudDogbWF4aW11bUhlYWx0aHlQZXJjZW50ICE9PSB1bmRlZmluZWQgPyBtYXhpbXVtSGVhbHRoeVBlcmNlbnQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgc2RrLmVjcygpLndhaXRVbnRpbFNlcnZpY2VzU3RhYmxlKHtcbiAgICAgICAgICAgICAgY2x1c3RlcjogdXBkYXRlLnNlcnZpY2U/LmNsdXN0ZXJBcm4sXG4gICAgICAgICAgICAgIHNlcnZpY2VzOiBbc2VydmljZS5zZXJ2aWNlQXJuXSxcbiAgICAgICAgICAgIH0sIHN0YWJpbGl6YXRpb25UaW1lb3V0U2Vjb25kcyk7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuaW50ZXJmYWNlIEVjc1NlcnZpY2Uge1xuICByZWFkb25seSBsb2dpY2FsSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZUFybjogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlVGFza0RlZmluaXRpb25DaGFuZ2UoXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4pIHtcbiAgY29uc3QgdGFza0RlZmluaXRpb25SZXNvdXJjZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgLi4uY2hhbmdlLm9sZFZhbHVlLlByb3BlcnRpZXMsXG4gICAgQ29udGFpbmVyRGVmaW5pdGlvbnM6IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5Db250YWluZXJEZWZpbml0aW9ucyxcbiAgfTtcbiAgLy8gZmlyc3QsIGxldCdzIGdldCB0aGUgbmFtZSBvZiB0aGUgZmFtaWx5XG4gIGNvbnN0IGZhbWlseU5hbWVPckFybiA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXN0YWJsaXNoUmVzb3VyY2VQaHlzaWNhbE5hbWUoXG4gICAgbG9naWNhbElkLFxuICAgIHRhc2tEZWZpbml0aW9uUmVzb3VyY2U/LkZhbWlseSxcbiAgKTtcbiAgaWYgKCFmYW1pbHlOYW1lT3JBcm4pIHtcbiAgICAvLyBpZiB0aGUgRmFtaWx5IHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZCwgYW5kIHdlIGNhbid0IGZpbmQgaXQgaW4gdGhlIGN1cnJlbnQgU3RhY2ssXG4gICAgLy8gdGhpcyBtZWFucyBob3Rzd2FwcGluZyBpcyBub3QgcG9zc2libGVcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gdGhlIHBoeXNpY2FsIG5hbWUgb2YgdGhlIFRhc2sgRGVmaW5pdGlvbiBpbiBDbG91ZEZvcm1hdGlvbiBpbmNsdWRlcyBpdHMgY3VycmVudCByZXZpc2lvbiBudW1iZXIgYXQgdGhlIGVuZCxcbiAgLy8gcmVtb3ZlIGl0IGlmIG5lZWRlZFxuICBjb25zdCBmYW1pbHlOYW1lT3JBcm5QYXJ0cyA9IGZhbWlseU5hbWVPckFybi5zcGxpdCgnOicpO1xuICBjb25zdCBmYW1pbHkgPVxuICAgIGZhbWlseU5hbWVPckFyblBhcnRzLmxlbmd0aCA+IDFcbiAgICAgID8gLy8gZmFtaWx5TmFtZU9yQXJuIGlzIGFjdHVhbGx5IGFuIEFSTiwgb2YgdGhlIGZvcm1hdCAnYXJuOmF3czplY3M6cmVnaW9uOmFjY291bnQ6dGFzay1kZWZpbml0aW9uLzxmYW1pbHktbmFtZT46PHJldmlzaW9uLW5yPidcbiAgICAvLyBzbywgdGFrZSB0aGUgNnRoIGVsZW1lbnQsIGF0IGluZGV4IDUsIGFuZCBzcGxpdCBpdCBvbiAnLydcbiAgICAgIGZhbWlseU5hbWVPckFyblBhcnRzWzVdLnNwbGl0KCcvJylbMV1cbiAgICAgIDogLy8gb3RoZXJ3aXNlLCBmYW1pbHlOYW1lT3JBcm4gaXMganVzdCB0aGUgc2ltcGxlIG5hbWUgZXZhbHVhdGVkIGZyb20gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlXG4gICAgICBmYW1pbHlOYW1lT3JBcm47XG4gIC8vIHRoZW4sIGxldCdzIGV2YWx1YXRlIHRoZSBib2R5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIFRhc2tEZWYgKHdpdGhvdXQgdGhlIEZhbWlseSBwcm9wZXJ0eSlcbiAgcmV0dXJuIHtcbiAgICAuLi4oYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgICAgLi4uKHRhc2tEZWZpbml0aW9uUmVzb3VyY2UgPz8ge30pLFxuICAgICAgRmFtaWx5OiB1bmRlZmluZWQsXG4gICAgfSkpLFxuICAgIEZhbWlseTogZmFtaWx5LFxuICB9O1xufVxuIl19
|
|
@@ -15,7 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./io-host-wrappers"), exports);
|
|
18
|
-
__exportStar(require("./sdk-logger"), exports);
|
|
19
18
|
__exportStar(require("./io-helper"), exports);
|
|
20
19
|
__exportStar(require("./level-priority"), exports);
|
|
21
20
|
__exportStar(require("./span"), exports);
|
|
@@ -23,4 +22,4 @@ __exportStar(require("./message-maker"), exports);
|
|
|
23
22
|
__exportStar(require("./messages"), exports);
|
|
24
23
|
__exportStar(require("./types"), exports);
|
|
25
24
|
__exportStar(require("./io-default-messages"), exports);
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQW1DO0FBQ25DLDhDQUE0QjtBQUM1QixtREFBaUM7QUFDakMseUNBQXVCO0FBQ3ZCLGtEQUFnQztBQUNoQyw2Q0FBMkI7QUFDM0IsMENBQXdCO0FBQ3hCLHdEQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW8taG9zdC13cmFwcGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2lvLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xldmVsLXByaW9yaXR5JztcbmV4cG9ydCAqIGZyb20gJy4vc3Bhbic7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2UtbWFrZXInO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vaW8tZGVmYXVsdC1tZXNzYWdlcyc7XG4iXX0=
|
|
@@ -22,16 +22,16 @@ export declare class PluginHost implements IPluginHost {
|
|
|
22
22
|
*
|
|
23
23
|
* Will use `require.resolve()` to get the most accurate representation of what
|
|
24
24
|
* code will get loaded in error messages. As such, it will not work in
|
|
25
|
-
* unit tests with Jest virtual modules becauase of
|
|
25
|
+
* unit tests with Jest virtual modules becauase of \<https://github.com/jestjs/jest/issues/9543\>.
|
|
26
26
|
*
|
|
27
|
-
* @param moduleSpec the specification (path or name) of the plug-in module to be loaded.
|
|
28
|
-
* @param ioHost the I/O host to use for printing progress information
|
|
27
|
+
* @param moduleSpec - the specification (path or name) of the plug-in module to be loaded.
|
|
28
|
+
* @param ioHost - the I/O host to use for printing progress information
|
|
29
29
|
*/
|
|
30
30
|
load(moduleSpec: string, ioHost?: IIoHost): void;
|
|
31
31
|
/**
|
|
32
32
|
* Allows plug-ins to register new CredentialProviderSources.
|
|
33
33
|
*
|
|
34
|
-
* @param source a new CredentialProviderSource to register.
|
|
34
|
+
* @param source - a new CredentialProviderSource to register.
|
|
35
35
|
*/
|
|
36
36
|
registerCredentialProviderSource(source: CredentialProviderSource): void;
|
|
37
37
|
/**
|