@cdktn/provider-generator 0.25.0-pre.2 → 0.25.0-pre.21
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/build/__tests__/edge-provider-schema/builder.js +3 -3
- package/build/__tests__/edge-provider-schema/cli.js +18 -8
- package/build/__tests__/edge-provider-schema.test.js +18 -8
- package/build/__tests__/provider.test.js +21 -9
- package/build/get/__tests__/constructs-maker.test.js +91 -8
- package/build/get/__tests__/generator/complex-computed-types.test.js +18 -8
- package/build/get/__tests__/generator/deep-nested-attributes.test.js +18 -8
- package/build/get/__tests__/generator/description-escaping.test.js +18 -8
- package/build/get/__tests__/generator/empty-provider-resources.test.js +18 -8
- package/build/get/__tests__/generator/ephemeral-resources.test.js +18 -8
- package/build/get/__tests__/generator/export-sharding.test.js +18 -8
- package/build/get/__tests__/generator/import-style.test.js +18 -8
- package/build/get/__tests__/generator/module-generator.test.js +18 -8
- package/build/get/__tests__/generator/nested-types.test.js +18 -8
- package/build/get/__tests__/generator/provider-functions-name-collision.test.d.ts +2 -0
- package/build/get/__tests__/generator/provider-functions-name-collision.test.js +89 -0
- package/build/get/__tests__/generator/provider-functions.test.js +18 -8
- package/build/get/__tests__/generator/provider.test.js +18 -8
- package/build/get/__tests__/generator/resource-types.test.js +18 -8
- package/build/get/__tests__/generator/skipped-attributes.test.js +18 -8
- package/build/get/__tests__/generator/types.test.js +18 -8
- package/build/get/__tests__/generator/versions-file.test.js +18 -8
- package/build/get/__tests__/generator/write-only.test.js +18 -8
- package/build/get/__tests__/target-versions.test.js +18 -8
- package/build/get/__tests__/util.js +26 -12
- package/build/get/constructs-maker.d.ts +17 -0
- package/build/get/constructs-maker.js +72 -12
- package/build/get/generator/emitter/struct-emitter.js +18 -8
- package/build/get/generator/loop-detection.js +2 -3
- package/build/get/generator/models/attribute-model.js +3 -3
- package/build/get/generator/models/attribute-type-model.js +3 -3
- package/build/get/generator/models/provider-function-model.js +3 -4
- package/build/get/generator/models/supported-stored-classes.js +2 -3
- package/build/get/generator/provider-generator.d.ts +12 -0
- package/build/get/generator/provider-generator.js +18 -3
- package/build/get/generator/resource-parser.js +10 -4
- package/build/get/generator/sanitized-comments.js +2 -3
- package/build/get/generator/skipped-attributes.js +2 -3
- package/build/index.js +3 -3
- package/build/util.js +3 -4
- package/package.json +11 -11
- package/src/__tests__/provider.test.ts +3 -1
- package/src/get/__tests__/constructs-maker.test.ts +125 -1
- package/src/get/__tests__/generator/fixtures/provider-functions-name-collision.test.fixture.json +42 -0
- package/src/get/__tests__/generator/provider-functions-name-collision.test.ts +84 -0
- package/src/get/__tests__/util.ts +6 -1
- package/src/get/constructs-maker.ts +71 -2
- package/src/get/generator/models/attribute-type-model.ts +1 -2
- package/src/get/generator/provider-generator.ts +21 -2
- package/src/get/generator/resource-parser.ts +11 -2
- package/tsconfig.json +4 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MapAttributeTypeModel = exports.SetAttributeTypeModel = exports.ListAttributeTypeModel = exports.StructAttributeTypeModel = exports.SimpleAttributeTypeModel = exports.SkippedAttributeTypeModel =
|
|
3
|
+
exports.MapAttributeTypeModel = exports.SetAttributeTypeModel = exports.ListAttributeTypeModel = exports.StructAttributeTypeModel = exports.SimpleAttributeTypeModel = exports.SkippedAttributeTypeModel = void 0;
|
|
4
|
+
exports.describeTerraformType = describeTerraformType;
|
|
4
5
|
const util_1 = require("../../../util");
|
|
5
6
|
const supported_stored_classes_1 = require("./supported-stored-classes");
|
|
6
7
|
// Describes the Terraform type of an attribute as its `list(...)`/`set(...)`/`map(...)`
|
|
@@ -26,7 +27,6 @@ function describeTerraformType(model) {
|
|
|
26
27
|
: model.storedClassType;
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
|
-
exports.describeTerraformType = describeTerraformType;
|
|
30
30
|
class SkippedAttributeTypeModel {
|
|
31
31
|
constructor() { }
|
|
32
32
|
get typeModelType() {
|
|
@@ -459,4 +459,4 @@ class MapAttributeTypeModel {
|
|
|
459
459
|
}
|
|
460
460
|
}
|
|
461
461
|
exports.MapAttributeTypeModel = MapAttributeTypeModel;
|
|
462
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXR5cGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvYXR0cmlidXRlLXR5cGUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0Esd0NBQThEO0FBQzlELHlFQUFvRTtBQWlCcEUsd0ZBQXdGO0FBQ3hGLHVGQUF1RjtBQUN2Riw0RUFBNEU7QUFDNUUsMEZBQTBGO0FBQzFGLFNBQWdCLHFCQUFxQixDQUFDLEtBQXlCO0lBQzdELFFBQVEsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTTtZQUNULE9BQU8sUUFBUSxxQkFBcUIsQ0FDakMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssS0FBSztZQUNSLE9BQU8sT0FBTyxxQkFBcUIsQ0FDaEMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssS0FBSztZQUNSLE9BQU8sT0FBTyxxQkFBcUIsQ0FDaEMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCO1lBQ0UsbUZBQW1GO1lBQ25GLG9GQUFvRjtZQUNwRixxQ0FBcUM7WUFDckMsT0FBTyxLQUFLLENBQUMsZUFBZSxLQUFLLFNBQVM7Z0JBQ3hDLENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7QUFDSCxDQUFDO0FBeEJELHNEQXdCQztBQUVELE1BQWEseUJBQXlCO0lBQ3BDLGdCQUFlLENBQUM7SUFFaEIsSUFBSSxhQUFhO1FBQ2YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLEtBQUssQ0FB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SUFDckUsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sdUJBQXVCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEdBQUcsQ0FBQztJQUMzRSxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekMsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsc0ZBQXNGO0lBQ3RGLElBQUksd0JBQXdCO1FBQzFCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUE1RkQsc0RBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFN0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgdXBwZXJjYXNlRmlyc3QsIGRvd25jYXNlRmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbFwiO1xuaW1wb3J0IHsgcmVzb2x2ZVN0b3JlZENsYXNzTmFtZSB9IGZyb20gXCIuL3N1cHBvcnRlZC1zdG9yZWQtY2xhc3Nlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIHJlYWRvbmx5IHN0cnVjdD86IFN0cnVjdDsgLy8gY29tcGxleCBvYmplY3QgdHlwZSBjb250YWluZWQgd2l0aGluIHRoZSB0eXBlXG4gIHJlYWRvbmx5IGlzQ29tcGxleDogYm9vbGVhbjsgLy8gYmFzaWNhbGx5IHRoZSBzYW1lIGFzIGhhdmluZyBhIHN0cnVjdFxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZyk6IHN0cmluZzsgLy8gaW5pdGlhbGl6ZXIgZm9yIGtlZXBpbmcgY2xhc3MgbmVlZGVkIHRvIGtlZXAgdHJhY2sgb2YgcmVmZXJlbmNlIGFjY2Vzc1xuICByZWFkb25seSBzdG9yZWRDbGFzc1R5cGU6IHN0cmluZzsgLy8gdXNlZCBtYWlubHkgYnkgY29sbGVjdGlvbiB0eXBlcyB0byBnZW5lcmF0ZSB0aGVpciBzdG9yZWQgY2xhc3MgaW5pdGlhbGl6ZXJcbiAgcmVhZG9ubHkgaW5wdXRUeXBlRGVmaW5pdGlvbjogc3RyaW5nOyAvLyB0aGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGlucHV0dGluZyB2YWx1ZXNcbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKTogc3RyaW5nOyAvLyB0aGlzIGlzIGZvciBnZXR0aW5nIHJlZmVyZW5jZSBmb3Igc2ltcGxlIHR5cGVzXG4gIHJlYWRvbmx5IHRvVGVycmFmb3JtRnVuY3Rpb246IHN0cmluZzsgLy8gdGhpcyBpcyBmb3IgY29udmVydGluZyBpbnB1dCB2YWx1ZXMgdG8gVGVycmFmb3JtIHN5bnRheFxuICByZWFkb25seSB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uOiBzdHJpbmc7IC8vIHRoaXMgaXMgZm9yIGNvbnZlcnRpbmcgaW5wdXQgdmFsdWVzIHRvIFRlcnJhZm9ybSBzeW50YXggaW4gSENMXG4gIHJlYWRvbmx5IHR5cGVNb2RlbFR5cGU6IHN0cmluZzsgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgaW5zdGFuY2VvZlxuICByZWFkb25seSBoYXNSZWZlcmVuY2VDbGFzczogYm9vbGVhbjsgLy8gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBzdG9yZWRfY2xhc3MgZ2V0dGVyIHNob3VsZCBiZSB1c2VkXG4gIHJlYWRvbmx5IGlzVG9rZW5pemFibGU6IGJvb2xlYW47IC8vIGNhbiB0aGUgdHlwZSBiZSByZXByZXNlbnRlZCBieSBhIHRva2VuIHR5cGVcbiAgcmVhZG9ubHkgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlOiBib29sZWFuOyAvLyB0cnVlIHdoZW4gbm8gXCJjZGt0bi48TmFtZT5cIiBzdG9yZWQgY2xhc3MgKG5vdCBldmVuIGEgY29sbGFwc2VkIG5lYXJlc3QtQW55IHdyYXBwZXIpIGlzIGF2YWlsYWJsZSBmb3IgdGhpcyB0eXBlXG59XG5cbi8vIERlc2NyaWJlcyB0aGUgVGVycmFmb3JtIHR5cGUgb2YgYW4gYXR0cmlidXRlIGFzIGl0cyBgbGlzdCguLi4pYC9gc2V0KC4uLilgL2BtYXAoLi4uKWBcbi8vIGNvbXBvc2VkIG5vdGF0aW9uIChtYXRjaGluZyBob3cgVGVycmFmb3JtIGl0c2VsZiBkZXNjcmliZXMgbmVzdGVkIGNvbGxlY3Rpb24gdHlwZXMpLFxuLy8gZm9yIHVzZSBpbiBnZW5lcmF0ZWQgSlNEb2MuIFVzZWQgb25seSBmb3IgY29sbGFwc2VkL2ZhbGxiYWNrIGdldHRlcnMgKHNlZVxuLy8gQXR0cmlidXRlc0VtaXR0ZXIpIHNvIGl0IG5ldmVyIG5lZWRzIHRvIGJlIGV4aGF1c3RpdmUvcGVyZmVjdGx5IHN0YWJsZSBmb3IgZXZlcnkgc2hhcGUuXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVUZXJyYWZvcm1UeXBlKG1vZGVsOiBBdHRyaWJ1dGVUeXBlTW9kZWwpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG1vZGVsLnR5cGVNb2RlbFR5cGUpIHtcbiAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgcmV0dXJuIGBsaXN0KCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIHJldHVybiBgc2V0KCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgIHJldHVybiBgbWFwKCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJzdHJ1Y3RcIjpcbiAgICAgIHJldHVybiBcIm9iamVjdFwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBDb3ZlcnMgYm90aCBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwgKHN0b3JlZENsYXNzVHlwZSBpcyB0aGUgVGVycmFmb3JtIHByaW1pdGl2ZVxuICAgICAgLy8gbmFtZSwgZS5nLiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJhbnlcIikgYW5kIFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWxcbiAgICAgIC8vIChzdG9yZWRDbGFzc1R5cGUgaXMgYWx3YXlzIFwiYW55XCIpLlxuICAgICAgcmV0dXJuIG1vZGVsLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgPyBcImJvb2xcIlxuICAgICAgICA6IG1vZGVsLnN0b3JlZENsYXNzVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzaW1wbGVcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihfbmFtZTogc3RyaW5nKSB7XG4gICAgLy8gbm90IHVzZWRcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIFwiYW55XCI7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gXCJhbnlcIjtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi5hbnlUb1RlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmFueVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsIGltcGxlbWVudHMgQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHR5cGU6IHN0cmluZykge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzaW1wbGVcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihfbmFtZTogc3RyaW5nKSB7XG4gICAgLy8gbm90IHVzZWRcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYHRoaXMuZ2V0JHt1cHBlcmNhc2VGaXJzdCh0aGlzLnR5cGUpfUF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uJHt0aGlzLnR5cGV9VG9UZXJyYWZvcm1gO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi4ke3RoaXMudHlwZX1Ub0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsIGltcGxlbWVudHMgQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHN0cnVjdDogU3RydWN0KSB7fVxuXG4gIGdldCB0eXBlTW9kZWxUeXBlKCkge1xuICAgIHJldHVybiBcInN0cnVjdFwiO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJ1Y3QubmFtZTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0cnVjdC5uYW1lO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgLy8gVGhpcyBzaG91bG4ndCBhY3R1YWxseSBiZSBjYWxsZWRcbiAgICByZXR1cm4gYHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBpc1N0b3JlZENsYXNzVW5hdmFpbGFibGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCBleHRlbmRzIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gIC8vIFJlc29sdmVzIHRoZSBcImNka3RuLjxuYW1lPlwiIHN0b3JlZCBjbGFzcyB0byBpbnN0YW50aWF0ZSBmb3IgdGhpcyAobm9uLWNvbXBsZXgpXG4gIC8vIGNvbGxlY3Rpb24gdHlwZSwgYW5kIHdoZXRoZXIgdGhhdCByZXNvbHV0aW9uIGNvbGxhcHNlZCBhIGRlZXBlciwgdW5zdXBwb3J0ZWQgbmVzdGluZ1xuICAvLyBpbnRvIHRoZSBuZWFyZXN0IHR5cGVkIFwiQW55XCItd3JhcHBlci4gdW5kZWZpbmVkIG9ubHkgZGVmZW5zaXZlbHkgLSBzZWVcbiAgLy8gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZSBpbiBzdXBwb3J0ZWQtc3RvcmVkLWNsYXNzZXMudHMuXG4gIHJlYWRvbmx5IHJlc29sdmVkU3RvcmVkQ2xhc3M6XG4gICAgfCB7IG5hbWU6IHN0cmluZzsgY29sbGFwc2VkOiBib29sZWFuIH1cbiAgICB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWwsXG4gICAgcHVibGljIHJlYWRvbmx5IGlzU2luZ2xlSXRlbTogYm9vbGVhbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzQmxvY2s6IGJvb2xlYW4sXG4gICkge1xuICAgIGlmICh0aGlzLnN0cnVjdCkge1xuICAgICAgdGhpcy5zdHJ1Y3QuaXNTaW5nbGVJdGVtID0gdGhpcy5pc1NpbmdsZUl0ZW0gfHwgZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwibGlzdFwiO1xuICB9XG5cbiAgZ2V0IHN0cnVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5zdHJ1Y3Q7XG4gIH1cblxuICBnZXQgaXNDb21wbGV4KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gYG5ldyAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfU91dHB1dFJlZmVyZW5jZSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0b3JlZENsYXNzVHlwZX0odGhpcywgXCIke25hbWV9XCIsIGZhbHNlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3RoaXMucmVzb2x2ZWRTdG9yZWRDbGFzcyEubmFtZX0odGhpcywgXCIke25hbWV9XCIsIGZhbHNlKWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9TGlzdGA7XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRTdG9yZWRDbGFzcygpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZShcbiAgICAgIHRoaXMuc3RvcmVkQ2xhc3NUeXBlLFxuICAgICAgdGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlLFxuICAgICk7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb247XG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcIkFycmF5PGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZT4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1bXSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn1bXSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn1bXWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gYHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIGB0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlcigke3RoaXMuZWxlbWVudFR5cGUudG9UZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b0hjbFRlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlSXRlbSB8fCB0aGlzLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXggKHN0cnVjdCkgZWxlbWVudHMgZ2VuZXJhdGUgdGhlaXIgb3duIGNsYXNzIGluIHRoZSBwcm92aWRlciBvdXRwdXQsIHNvIHRoZXlcbiAgLy8gYXJlIGFsd2F5cyBmaW5lLiBPdGhlcndpc2UgYSBzdG9yZWQgY2xhc3MgaXMgb25seSBlbWl0dGVkIGlmIHJlc29sdmVkU3RvcmVkQ2xhc3NcbiAgLy8gZmluZHMgb25lIC0gc2VlIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIgYWJvdmUuIE5vdGU6IGhhc1JlZmVyZW5jZUNsYXNzICh3aGljaFxuICAvLyB0cmlnZ2VycyBhIHN0b3JlZF9jbGFzcyBnZXR0ZXIpIGlzIG9ubHkgZXZlciB0cnVlIGhlcmUgd2hlbiBpc1NpbmdsZUl0ZW0gb3IgaXNDb21wbGV4XG4gIC8vIGlzIHRydWUsIGFuZCBpc1NpbmdsZUl0ZW0gaXMgb25seSBzZXQgZm9yIHN0cnVjdC9ibG9jayBuZXN0aW5nICh3aGljaCBpcyBhbHNvXG4gIC8vIGlzQ29tcGxleCksIHNvIHRoaXMgY2hlY2sgb25seSBuZWVkcyB0byBndWFyZCB0aGUgbm9uLWNvbXBsZXgsIG5vbi1zaW5nbGUtaXRlbSBjYXNlLlxuICAvL1xuICAvLyBzdG9yZWRDbGFzc1R5cGUgaXMgaXRzZWxmIGJ1aWx0IHVwIHJlY3Vyc2l2ZWx5IChlbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgaXNcbiAgLy8gY29tcG9zZWQgdGhlIHNhbWUgd2F5IGZvciBuZXN0ZWQgY29sbGVjdGlvbnMpLCBzbyBpdCBhbHJlYWR5IGZ1bGx5IGVuY29kZXMgdGhlXG4gIC8vIGVudGlyZSBuZXN0ZWQgY2hhaW4gaW4gb25lIHN0cmluZyAoZS5nLiBtYXAobWFwKGxpc3Qoc3RyaW5nKSkpIGNvbXBvc2VzIGFsbCB0aGUgd2F5XG4gIC8vIHVwIHRvIFwic3RyaW5nTGlzdE1hcE1hcFwiKS4gcmVzb2x2ZWRTdG9yZWRDbGFzcyBmaXJzdCBjaGVja3MgdGhpcyB0eXBlJ3Mgb3duIGNvbXBvc2VkXG4gIC8vIG5hbWUgKGUuZy4gXCJTdHJpbmdMaXN0TWFwTWFwXCIpIGFnYWluc3QgdGhlIGZpeGVkIHNldCBvZiBoYW5kLXdyaXR0ZW4gY29yZSBjbGFzc2VzOyBpZlxuICAvLyB0aGF0IG5hbWUgZG9lc24ndCBleGlzdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgdGhhdCBzdGlsbFxuICAvLyBlbmNvZGVzIHRoaXMgdHlwZSdzIG93biBsYXllciBhbmQgaXRzIGVsZW1lbnQncyBsYXllciAoZS5nLiBcIkFueU1hcE1hcFwiKSwgY29sbGFwc2luZ1xuICAvLyBvbmx5IHRoZSB1bnN1cHBvcnRlZCBpbm5lciBzaGFwZSB3aGlsZSBwcmVzZXJ2aW5nIHR5cGVkIG5hdmlnYXRpb24gZm9yIHRoZSBvdXRlclxuICAvLyBsYXllcnM7IG9ubHkgaWYgbmVpdGhlciBleGlzdHMgZG9lcyBpdCBmYWxsIHRocm91Z2ggdG8gdGhlIHBsYWluLCB1bnR5cGVkIGdldHRlciAoc2VlXG4gIC8vIEF0dHJpYnV0ZU1vZGVsLmdldHRlclR5cGUpLiBJdCBtdXN0IE5PVCBhbHNvIE9SIGluXG4gIC8vIGVsZW1lbnRUeXBlLmlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZSwgc2luY2UgYW4gaW5uZXIgZWxlbWVudCdzIHVuLWNvbXBvc2VkIG5hbWUgKGUuZy5cbiAgLy8gXCJTdHJpbmdMaXN0XCIgZm9yIGEgcGxhaW4gbGlzdChzdHJpbmcpIG5lc3RlZCBpbnNpZGUgYSBtYXApIGlzIG5ldmVyIHNlcGFyYXRlbHlcbiAgLy8gaW5zdGFudGlhdGVkIGFuZCBpcyBpcnJlbGV2YW50IG9uIGl0cyBvd247IE9SaW5nIGl0IGluIHdvdWxkIHByb2R1Y2UgZmFsc2UgcG9zaXRpdmVzXG4gIC8vIHRoYXQgcmVncmVzcyBzdXBwb3J0ZWQgbmVzdGluZ3Mgc3VjaCBhcyBtYXAobGlzdChzdHJpbmcpKSA9PiBjZGt0bi5TdHJpbmdMaXN0TWFwLlxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFN0b3JlZENsYXNzID09PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNTaW5nbGVJdGVtOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCbG9jazogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0KSB7XG4gICAgICB0aGlzLnN0cnVjdC5pc1NpbmdsZUl0ZW0gPSB0aGlzLmlzU2luZ2xlSXRlbSB8fCBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzZXRcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1PdXRwdXRSZWZlcmVuY2UodGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdG9yZWRDbGFzc1R5cGV9KHRoaXMsIFwiJHtuYW1lfVwiLCB0cnVlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3RoaXMucmVzb2x2ZWRTdG9yZWRDbGFzcyEubmFtZX0odGhpcywgXCIke25hbWV9XCIsIHRydWUpYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1MaXN0YDtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFN0b3JlZENsYXNzKCkge1xuICAgIHJldHVybiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFwiQXJyYXk8Ym9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlPiB8IGNka3RuLklSZXNvbHZhYmxlXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfVtdIHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlICE9PSBcInNpbXBsZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufVtdIHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufVtdYDtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiBgY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpKWA7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiBgY2RrdG4uVG9rZW4uYXNOdW1iZXJMaXN0KGNka3RuLkZuLnRvbGlzdCh0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKSkpYDtcbiAgICB9XG5cbiAgICAvLyBUb2tlbi5hc0FueSBpcyByZXF1aXJlZCBiZWNhdXNlIHRvbGlzdCByZXR1cm5zIGFuIEFycmF5IGVuY29kZWQgdG9rZW4gd2hpY2ggdGhlIGxpc3RNYXBwZXJcbiAgICAvLyB3b3VsZCB0cnkgdG8gbWFwIG92ZXIgd2hlbiB0aGlzIGlzIHBhc3NlZCB0byBhbm90aGVyIHJlc291cmNlLiBXaXRoIFRva2VuLmFzQW55KCkgaXQgaXMgbGVmdFxuICAgIC8vIGFzIGlzIGJ5IHRoZSBsaXN0TWFwcGVyIGFuZCBpcyBsYXRlciBwcm9wZXJseSByZXNvbHZlZCB0byBhIHJlZmVyZW5jZVxuICAgIC8vICh0aGlzIG9ubHkgd29ya3MgaW4gVHlwZVNjcmlwdCBjdXJyZW50bHksIHNhbWUgYXMgZm9yIHJlZmVyZW5jaW5nIGxpc3RzXG4gICAgLy8gW3NlZSBcImludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoLi4uKVwiIGZ1cnRoZXIgYmVsb3ddKVxuICAgIHJldHVybiBgY2RrdG4uVG9rZW4uYXNBbnkoY2RrdG4uRm4udG9saXN0KHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpKSlgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b1RlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYGNka3RuLmxpc3RNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259LCAke3RoaXMuaXNCbG9ja30pYDtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlSXRlbSB8fCB0aGlzLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBjb21tZW50IG9uIExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwuaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlIGFib3ZlIC0gc2FtZVxuICAvLyByZWFzb25pbmcgYXBwbGllcyBoZXJlLlxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFN0b3JlZENsYXNzID09PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCkge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJtYXBcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0b3JlZENsYXNzVHlwZX0odGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBuZXcgY2RrdG4uJHt0aGlzLnJlc29sdmVkU3RvcmVkQ2xhc3MhLm5hbWV9KHRoaXMsIFwiJHtuYW1lfVwiKWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9TWFwYDtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFN0b3JlZENsYXNzKCkge1xuICAgIHJldHVybiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIC8vIG1hcCBvZiBib29sZWFucyBoYXMgdG9rZW4gc3VwcG9ydCwgYnV0IGJvb2xlYW5zIGRvbid0XG4gICAgaWYgKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICgke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfSB8IGNka3RuLklSZXNvbHZhYmxlKSB9YDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX0gfSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufSB9IHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX0gfWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmlzQ29tcGxleCAmJiB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICAgIH1cblxuICAgIHJldHVybiBgdGhpcy5nZXQke3VwcGVyY2FzZUZpcnN0KFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgKX1BdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmhhc2hNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259KWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmhhc2hNYXBwZXJIY2woJHt0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb259KWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGNvbW1lbnQgb24gTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbC5pc1N0b3JlZENsYXNzVW5hdmFpbGFibGUgYWJvdmUgLSBzYW1lXG4gIC8vIHJlYXNvbmluZyBhcHBsaWVzIGhlcmUgKE1hcEF0dHJpYnV0ZVR5cGVNb2RlbC5oYXNSZWZlcmVuY2VDbGFzcyBpcyBqdXN0IGlzQ29tcGxleCkuXG4gIGdldCBpc1N0b3JlZENsYXNzVW5hdmFpbGFibGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc29sdmVkU3RvcmVkQ2xhc3MgPT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
462
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXR5cGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvYXR0cmlidXRlLXR5cGUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeUJBLHNEQXdCQztBQTlDRCx3Q0FBOEQ7QUFDOUQseUVBQW9FO0FBaUJwRSx3RkFBd0Y7QUFDeEYsdUZBQXVGO0FBQ3ZGLDRFQUE0RTtBQUM1RSwwRkFBMEY7QUFDMUYsU0FBZ0IscUJBQXFCLENBQUMsS0FBeUI7SUFDN0QsUUFBUSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxRQUFRLHFCQUFxQixDQUNqQyxLQUFzQyxDQUFDLFdBQVcsQ0FDcEQsR0FBRyxDQUFDO1FBQ1AsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLHFCQUFxQixDQUNoQyxLQUFzQyxDQUFDLFdBQVcsQ0FDcEQsR0FBRyxDQUFDO1FBQ1AsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLHFCQUFxQixDQUNoQyxLQUFzQyxDQUFDLFdBQVcsQ0FDcEQsR0FBRyxDQUFDO1FBQ1AsS0FBSyxRQUFRO1lBQ1gsT0FBTyxRQUFRLENBQUM7UUFDbEI7WUFDRSxtRkFBbUY7WUFDbkYsb0ZBQW9GO1lBQ3BGLHFDQUFxQztZQUNyQyxPQUFPLEtBQUssQ0FBQyxlQUFlLEtBQUssU0FBUztnQkFDeEMsQ0FBQyxDQUFDLE1BQU07Z0JBQ1IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFhLHlCQUF5QjtJQUNwQyxnQkFBZSxDQUFDO0lBRWhCLElBQUksYUFBYTtRQUNmLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxLQUFLLENB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O0lBQ3JFLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLHVCQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixHQUFHLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLHNGQUFzRjtJQUN0RixJQUFJLHdCQUF3QjtRQUMxQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBNUZELHNEQTRGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBTdHJ1Y3QgfSBmcm9tIFwiLi9zdHJ1Y3RcIjtcbmltcG9ydCB7IHVwcGVyY2FzZUZpcnN0LCBkb3duY2FzZUZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxcIjtcbmltcG9ydCB7IHJlc29sdmVTdG9yZWRDbGFzc05hbWUgfSBmcm9tIFwiLi9zdXBwb3J0ZWQtc3RvcmVkLWNsYXNzZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICByZWFkb25seSBzdHJ1Y3Q/OiBTdHJ1Y3Q7IC8vIGNvbXBsZXggb2JqZWN0IHR5cGUgY29udGFpbmVkIHdpdGhpbiB0aGUgdHlwZVxuICByZWFkb25seSBpc0NvbXBsZXg6IGJvb2xlYW47IC8vIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBoYXZpbmcgYSBzdHJ1Y3RcbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihuYW1lOiBzdHJpbmcpOiBzdHJpbmc7IC8vIGluaXRpYWxpemVyIGZvciBrZWVwaW5nIGNsYXNzIG5lZWRlZCB0byBrZWVwIHRyYWNrIG9mIHJlZmVyZW5jZSBhY2Nlc3NcbiAgcmVhZG9ubHkgc3RvcmVkQ2xhc3NUeXBlOiBzdHJpbmc7IC8vIHVzZWQgbWFpbmx5IGJ5IGNvbGxlY3Rpb24gdHlwZXMgdG8gZ2VuZXJhdGUgdGhlaXIgc3RvcmVkIGNsYXNzIGluaXRpYWxpemVyXG4gIHJlYWRvbmx5IGlucHV0VHlwZURlZmluaXRpb246IHN0cmluZzsgLy8gdGhpcyBpcyB0aGUgdHlwZSB1c2VkIGZvciBpbnB1dHRpbmcgdmFsdWVzXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZyk6IHN0cmluZzsgLy8gdGhpcyBpcyBmb3IgZ2V0dGluZyByZWZlcmVuY2UgZm9yIHNpbXBsZSB0eXBlc1xuICByZWFkb25seSB0b1RlcnJhZm9ybUZ1bmN0aW9uOiBzdHJpbmc7IC8vIHRoaXMgaXMgZm9yIGNvbnZlcnRpbmcgaW5wdXQgdmFsdWVzIHRvIFRlcnJhZm9ybSBzeW50YXhcbiAgcmVhZG9ubHkgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbjogc3RyaW5nOyAvLyB0aGlzIGlzIGZvciBjb252ZXJ0aW5nIGlucHV0IHZhbHVlcyB0byBUZXJyYWZvcm0gc3ludGF4IGluIEhDTFxuICByZWFkb25seSB0eXBlTW9kZWxUeXBlOiBzdHJpbmc7IC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gdXNlIGluc3RhbmNlb2ZcbiAgcmVhZG9ubHkgaGFzUmVmZXJlbmNlQ2xhc3M6IGJvb2xlYW47IC8vIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgc3RvcmVkX2NsYXNzIGdldHRlciBzaG91bGQgYmUgdXNlZFxuICByZWFkb25seSBpc1Rva2VuaXphYmxlOiBib29sZWFuOyAvLyBjYW4gdGhlIHR5cGUgYmUgcmVwcmVzZW50ZWQgYnkgYSB0b2tlbiB0eXBlXG4gIHJlYWRvbmx5IGlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZTogYm9vbGVhbjsgLy8gdHJ1ZSB3aGVuIG5vIFwiY2RrdG4uPE5hbWU+XCIgc3RvcmVkIGNsYXNzIChub3QgZXZlbiBhIGNvbGxhcHNlZCBuZWFyZXN0LUFueSB3cmFwcGVyKSBpcyBhdmFpbGFibGUgZm9yIHRoaXMgdHlwZVxufVxuXG4vLyBEZXNjcmliZXMgdGhlIFRlcnJhZm9ybSB0eXBlIG9mIGFuIGF0dHJpYnV0ZSBhcyBpdHMgYGxpc3QoLi4uKWAvYHNldCguLi4pYC9gbWFwKC4uLilgXG4vLyBjb21wb3NlZCBub3RhdGlvbiAobWF0Y2hpbmcgaG93IFRlcnJhZm9ybSBpdHNlbGYgZGVzY3JpYmVzIG5lc3RlZCBjb2xsZWN0aW9uIHR5cGVzKSxcbi8vIGZvciB1c2UgaW4gZ2VuZXJhdGVkIEpTRG9jLiBVc2VkIG9ubHkgZm9yIGNvbGxhcHNlZC9mYWxsYmFjayBnZXR0ZXJzIChzZWVcbi8vIEF0dHJpYnV0ZXNFbWl0dGVyKSBzbyBpdCBuZXZlciBuZWVkcyB0byBiZSBleGhhdXN0aXZlL3BlcmZlY3RseSBzdGFibGUgZm9yIGV2ZXJ5IHNoYXBlLlxuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlVGVycmFmb3JtVHlwZShtb2RlbDogQXR0cmlidXRlVHlwZU1vZGVsKTogc3RyaW5nIHtcbiAgc3dpdGNoIChtb2RlbC50eXBlTW9kZWxUeXBlKSB7XG4gICAgY2FzZSBcImxpc3RcIjpcbiAgICAgIHJldHVybiBgbGlzdCgke2Rlc2NyaWJlVGVycmFmb3JtVHlwZShcbiAgICAgICAgKG1vZGVsIGFzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwpLmVsZW1lbnRUeXBlLFxuICAgICAgKX0pYDtcbiAgICBjYXNlIFwic2V0XCI6XG4gICAgICByZXR1cm4gYHNldCgke2Rlc2NyaWJlVGVycmFmb3JtVHlwZShcbiAgICAgICAgKG1vZGVsIGFzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwpLmVsZW1lbnRUeXBlLFxuICAgICAgKX0pYDtcbiAgICBjYXNlIFwibWFwXCI6XG4gICAgICByZXR1cm4gYG1hcCgke2Rlc2NyaWJlVGVycmFmb3JtVHlwZShcbiAgICAgICAgKG1vZGVsIGFzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwpLmVsZW1lbnRUeXBlLFxuICAgICAgKX0pYDtcbiAgICBjYXNlIFwic3RydWN0XCI6XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQ292ZXJzIGJvdGggU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsIChzdG9yZWRDbGFzc1R5cGUgaXMgdGhlIFRlcnJhZm9ybSBwcmltaXRpdmVcbiAgICAgIC8vIG5hbWUsIGUuZy4gXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIgfCBcImJvb2xlYW5cIiB8IFwiYW55XCIpIGFuZCBTa2lwcGVkQXR0cmlidXRlVHlwZU1vZGVsXG4gICAgICAvLyAoc3RvcmVkQ2xhc3NUeXBlIGlzIGFsd2F5cyBcImFueVwiKS5cbiAgICAgIHJldHVybiBtb2RlbC5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiXG4gICAgICAgID8gXCJib29sXCJcbiAgICAgICAgOiBtb2RlbC5zdG9yZWRDbGFzc1R5cGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwic2ltcGxlXCI7XG4gIH1cblxuICBnZXQgc3RydWN0KCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaXNDb21wbGV4KCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIoX25hbWU6IHN0cmluZykge1xuICAgIC8vIG5vdCB1c2VkXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBcImFueVwiO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIFwiYW55XCI7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uYW55VG9UZXJyYWZvcm1gO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi5hbnlUb0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmcpIHt9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwic2ltcGxlXCI7XG4gIH1cblxuICBnZXQgc3RydWN0KCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaXNDb21wbGV4KCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIoX25hbWU6IHN0cmluZykge1xuICAgIC8vIG5vdCB1c2VkXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFwiYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGB0aGlzLmdldCR7dXBwZXJjYXNlRmlyc3QodGhpcy50eXBlKX1BdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLiR7dGhpcy50eXBlfVRvVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uJHt0aGlzLnR5cGV9VG9IY2xUZXJyYWZvcm1gO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzdHJ1Y3Q6IFN0cnVjdCkge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzdHJ1Y3RcIjtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdHJ1Y3Qub3V0cHV0UmVmZXJlbmNlTmFtZX0odGhpcywgXCIke25hbWV9XCIpYDtcbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RydWN0Lm5hbWU7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJ1Y3QubmFtZTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIC8vIFRoaXMgc2hvdWxuJ3QgYWN0dWFsbHkgYmUgY2FsbGVkXG4gICAgcmV0dXJuIGB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYCR7ZG93bmNhc2VGaXJzdCh0aGlzLnN0cnVjdC5uYW1lKX1Ub1RlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYCR7ZG93bmNhc2VGaXJzdCh0aGlzLnN0cnVjdC5uYW1lKX1Ub0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwgZXh0ZW5kcyBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBlbGVtZW50VHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xuICAvLyBSZXNvbHZlcyB0aGUgXCJjZGt0bi48bmFtZT5cIiBzdG9yZWQgY2xhc3MgdG8gaW5zdGFudGlhdGUgZm9yIHRoaXMgKG5vbi1jb21wbGV4KVxuICAvLyBjb2xsZWN0aW9uIHR5cGUsIGFuZCB3aGV0aGVyIHRoYXQgcmVzb2x1dGlvbiBjb2xsYXBzZWQgYSBkZWVwZXIsIHVuc3VwcG9ydGVkIG5lc3RpbmdcbiAgLy8gaW50byB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIuIHVuZGVmaW5lZCBvbmx5IGRlZmVuc2l2ZWx5IC0gc2VlXG4gIC8vIHJlc29sdmVTdG9yZWRDbGFzc05hbWUgaW4gc3VwcG9ydGVkLXN0b3JlZC1jbGFzc2VzLnRzLlxuICByZWFkb25seSByZXNvbHZlZFN0b3JlZENsYXNzOlxuICAgIHsgbmFtZTogc3RyaW5nOyBjb2xsYXBzZWQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWwsXG4gICAgcHVibGljIHJlYWRvbmx5IGlzU2luZ2xlSXRlbTogYm9vbGVhbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzQmxvY2s6IGJvb2xlYW4sXG4gICkge1xuICAgIGlmICh0aGlzLnN0cnVjdCkge1xuICAgICAgdGhpcy5zdHJ1Y3QuaXNTaW5nbGVJdGVtID0gdGhpcy5pc1NpbmdsZUl0ZW0gfHwgZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwibGlzdFwiO1xuICB9XG5cbiAgZ2V0IHN0cnVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5zdHJ1Y3Q7XG4gIH1cblxuICBnZXQgaXNDb21wbGV4KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gYG5ldyAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfU91dHB1dFJlZmVyZW5jZSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0b3JlZENsYXNzVHlwZX0odGhpcywgXCIke25hbWV9XCIsIGZhbHNlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3RoaXMucmVzb2x2ZWRTdG9yZWRDbGFzcyEubmFtZX0odGhpcywgXCIke25hbWV9XCIsIGZhbHNlKWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9TGlzdGA7XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRTdG9yZWRDbGFzcygpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZShcbiAgICAgIHRoaXMuc3RvcmVkQ2xhc3NUeXBlLFxuICAgICAgdGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlLFxuICAgICk7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb247XG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcIkFycmF5PGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZT4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1bXSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn1bXSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn1bXWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gYHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIGB0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlcigke3RoaXMuZWxlbWVudFR5cGUudG9UZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b0hjbFRlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlSXRlbSB8fCB0aGlzLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXggKHN0cnVjdCkgZWxlbWVudHMgZ2VuZXJhdGUgdGhlaXIgb3duIGNsYXNzIGluIHRoZSBwcm92aWRlciBvdXRwdXQsIHNvIHRoZXlcbiAgLy8gYXJlIGFsd2F5cyBmaW5lLiBPdGhlcndpc2UgYSBzdG9yZWQgY2xhc3MgaXMgb25seSBlbWl0dGVkIGlmIHJlc29sdmVkU3RvcmVkQ2xhc3NcbiAgLy8gZmluZHMgb25lIC0gc2VlIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIgYWJvdmUuIE5vdGU6IGhhc1JlZmVyZW5jZUNsYXNzICh3aGljaFxuICAvLyB0cmlnZ2VycyBhIHN0b3JlZF9jbGFzcyBnZXR0ZXIpIGlzIG9ubHkgZXZlciB0cnVlIGhlcmUgd2hlbiBpc1NpbmdsZUl0ZW0gb3IgaXNDb21wbGV4XG4gIC8vIGlzIHRydWUsIGFuZCBpc1NpbmdsZUl0ZW0gaXMgb25seSBzZXQgZm9yIHN0cnVjdC9ibG9jayBuZXN0aW5nICh3aGljaCBpcyBhbHNvXG4gIC8vIGlzQ29tcGxleCksIHNvIHRoaXMgY2hlY2sgb25seSBuZWVkcyB0byBndWFyZCB0aGUgbm9uLWNvbXBsZXgsIG5vbi1zaW5nbGUtaXRlbSBjYXNlLlxuICAvL1xuICAvLyBzdG9yZWRDbGFzc1R5cGUgaXMgaXRzZWxmIGJ1aWx0IHVwIHJlY3Vyc2l2ZWx5IChlbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgaXNcbiAgLy8gY29tcG9zZWQgdGhlIHNhbWUgd2F5IGZvciBuZXN0ZWQgY29sbGVjdGlvbnMpLCBzbyBpdCBhbHJlYWR5IGZ1bGx5IGVuY29kZXMgdGhlXG4gIC8vIGVudGlyZSBuZXN0ZWQgY2hhaW4gaW4gb25lIHN0cmluZyAoZS5nLiBtYXAobWFwKGxpc3Qoc3RyaW5nKSkpIGNvbXBvc2VzIGFsbCB0aGUgd2F5XG4gIC8vIHVwIHRvIFwic3RyaW5nTGlzdE1hcE1hcFwiKS4gcmVzb2x2ZWRTdG9yZWRDbGFzcyBmaXJzdCBjaGVja3MgdGhpcyB0eXBlJ3Mgb3duIGNvbXBvc2VkXG4gIC8vIG5hbWUgKGUuZy4gXCJTdHJpbmdMaXN0TWFwTWFwXCIpIGFnYWluc3QgdGhlIGZpeGVkIHNldCBvZiBoYW5kLXdyaXR0ZW4gY29yZSBjbGFzc2VzOyBpZlxuICAvLyB0aGF0IG5hbWUgZG9lc24ndCBleGlzdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgdGhhdCBzdGlsbFxuICAvLyBlbmNvZGVzIHRoaXMgdHlwZSdzIG93biBsYXllciBhbmQgaXRzIGVsZW1lbnQncyBsYXllciAoZS5nLiBcIkFueU1hcE1hcFwiKSwgY29sbGFwc2luZ1xuICAvLyBvbmx5IHRoZSB1bnN1cHBvcnRlZCBpbm5lciBzaGFwZSB3aGlsZSBwcmVzZXJ2aW5nIHR5cGVkIG5hdmlnYXRpb24gZm9yIHRoZSBvdXRlclxuICAvLyBsYXllcnM7IG9ubHkgaWYgbmVpdGhlciBleGlzdHMgZG9lcyBpdCBmYWxsIHRocm91Z2ggdG8gdGhlIHBsYWluLCB1bnR5cGVkIGdldHRlciAoc2VlXG4gIC8vIEF0dHJpYnV0ZU1vZGVsLmdldHRlclR5cGUpLiBJdCBtdXN0IE5PVCBhbHNvIE9SIGluXG4gIC8vIGVsZW1lbnRUeXBlLmlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZSwgc2luY2UgYW4gaW5uZXIgZWxlbWVudCdzIHVuLWNvbXBvc2VkIG5hbWUgKGUuZy5cbiAgLy8gXCJTdHJpbmdMaXN0XCIgZm9yIGEgcGxhaW4gbGlzdChzdHJpbmcpIG5lc3RlZCBpbnNpZGUgYSBtYXApIGlzIG5ldmVyIHNlcGFyYXRlbHlcbiAgLy8gaW5zdGFudGlhdGVkIGFuZCBpcyBpcnJlbGV2YW50IG9uIGl0cyBvd247IE9SaW5nIGl0IGluIHdvdWxkIHByb2R1Y2UgZmFsc2UgcG9zaXRpdmVzXG4gIC8vIHRoYXQgcmVncmVzcyBzdXBwb3J0ZWQgbmVzdGluZ3Mgc3VjaCBhcyBtYXAobGlzdChzdHJpbmcpKSA9PiBjZGt0bi5TdHJpbmdMaXN0TWFwLlxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFN0b3JlZENsYXNzID09PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNTaW5nbGVJdGVtOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCbG9jazogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0KSB7XG4gICAgICB0aGlzLnN0cnVjdC5pc1NpbmdsZUl0ZW0gPSB0aGlzLmlzU2luZ2xlSXRlbSB8fCBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzZXRcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1PdXRwdXRSZWZlcmVuY2UodGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdG9yZWRDbGFzc1R5cGV9KHRoaXMsIFwiJHtuYW1lfVwiLCB0cnVlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3RoaXMucmVzb2x2ZWRTdG9yZWRDbGFzcyEubmFtZX0odGhpcywgXCIke25hbWV9XCIsIHRydWUpYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1MaXN0YDtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFN0b3JlZENsYXNzKCkge1xuICAgIHJldHVybiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFwiQXJyYXk8Ym9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlPiB8IGNka3RuLklSZXNvbHZhYmxlXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfVtdIHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlICE9PSBcInNpbXBsZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufVtdIHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufVtdYDtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiBgY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpKWA7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiBgY2RrdG4uVG9rZW4uYXNOdW1iZXJMaXN0KGNka3RuLkZuLnRvbGlzdCh0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKSkpYDtcbiAgICB9XG5cbiAgICAvLyBUb2tlbi5hc0FueSBpcyByZXF1aXJlZCBiZWNhdXNlIHRvbGlzdCByZXR1cm5zIGFuIEFycmF5IGVuY29kZWQgdG9rZW4gd2hpY2ggdGhlIGxpc3RNYXBwZXJcbiAgICAvLyB3b3VsZCB0cnkgdG8gbWFwIG92ZXIgd2hlbiB0aGlzIGlzIHBhc3NlZCB0byBhbm90aGVyIHJlc291cmNlLiBXaXRoIFRva2VuLmFzQW55KCkgaXQgaXMgbGVmdFxuICAgIC8vIGFzIGlzIGJ5IHRoZSBsaXN0TWFwcGVyIGFuZCBpcyBsYXRlciBwcm9wZXJseSByZXNvbHZlZCB0byBhIHJlZmVyZW5jZVxuICAgIC8vICh0aGlzIG9ubHkgd29ya3MgaW4gVHlwZVNjcmlwdCBjdXJyZW50bHksIHNhbWUgYXMgZm9yIHJlZmVyZW5jaW5nIGxpc3RzXG4gICAgLy8gW3NlZSBcImludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoLi4uKVwiIGZ1cnRoZXIgYmVsb3ddKVxuICAgIHJldHVybiBgY2RrdG4uVG9rZW4uYXNBbnkoY2RrdG4uRm4udG9saXN0KHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpKSlgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b1RlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYGNka3RuLmxpc3RNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259LCAke3RoaXMuaXNCbG9ja30pYDtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlSXRlbSB8fCB0aGlzLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBjb21tZW50IG9uIExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwuaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlIGFib3ZlIC0gc2FtZVxuICAvLyByZWFzb25pbmcgYXBwbGllcyBoZXJlLlxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFN0b3JlZENsYXNzID09PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCkge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJtYXBcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0b3JlZENsYXNzVHlwZX0odGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBuZXcgY2RrdG4uJHt0aGlzLnJlc29sdmVkU3RvcmVkQ2xhc3MhLm5hbWV9KHRoaXMsIFwiJHtuYW1lfVwiKWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9TWFwYDtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFN0b3JlZENsYXNzKCkge1xuICAgIHJldHVybiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIC8vIG1hcCBvZiBib29sZWFucyBoYXMgdG9rZW4gc3VwcG9ydCwgYnV0IGJvb2xlYW5zIGRvbid0XG4gICAgaWYgKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICgke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfSB8IGNka3RuLklSZXNvbHZhYmxlKSB9YDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX0gfSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufSB9IHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX0gfWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmlzQ29tcGxleCAmJiB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICAgIH1cblxuICAgIHJldHVybiBgdGhpcy5nZXQke3VwcGVyY2FzZUZpcnN0KFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgKX1BdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmhhc2hNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259KWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmhhc2hNYXBwZXJIY2woJHt0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb259KWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGNvbW1lbnQgb24gTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbC5pc1N0b3JlZENsYXNzVW5hdmFpbGFibGUgYWJvdmUgLSBzYW1lXG4gIC8vIHJlYXNvbmluZyBhcHBsaWVzIGhlcmUgKE1hcEF0dHJpYnV0ZVR5cGVNb2RlbC5oYXNSZWZlcmVuY2VDbGFzcyBpcyBqdXN0IGlzQ29tcGxleCkuXG4gIGdldCBpc1N0b3JlZENsYXNzVW5hdmFpbGFibGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc29sdmVkU3RvcmVkQ2xhc3MgPT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.assertNoFunctionsGetterCollision = assertNoFunctionsGetterCollision;
|
|
4
|
+
exports.buildProviderFunctionsModel = buildProviderFunctionsModel;
|
|
4
5
|
// Copyright (c) HashiCorp, Inc
|
|
5
6
|
// SPDX-License-Identifier: MPL-2.0
|
|
6
7
|
const codemaker_1 = require("codemaker");
|
|
@@ -639,7 +640,6 @@ function assertNoFunctionsGetterCollision(providerName, attributeNames) {
|
|
|
639
640
|
`the other - please report this as an issue.`);
|
|
640
641
|
}
|
|
641
642
|
}
|
|
642
|
-
exports.assertNoFunctionsGetterCollision = assertNoFunctionsGetterCollision;
|
|
643
643
|
/**
|
|
644
644
|
* Builds the model for a provider's `provider-functions/index.ts` file from
|
|
645
645
|
* its provider schema `functions` map. Returns `undefined` when the provider
|
|
@@ -663,5 +663,4 @@ function buildProviderFunctionsModel(providerName, functions) {
|
|
|
663
663
|
functions: mappedFunctions,
|
|
664
664
|
};
|
|
665
665
|
}
|
|
666
|
-
exports.buildProviderFunctionsModel = buildProviderFunctionsModel;
|
|
667
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZnVuY3Rpb24tbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcHJvdmlkZXItZnVuY3Rpb24tbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBc0Q7QUF5R3RELDZFQUE2RTtBQUM3RSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSx1RUFBdUU7QUFDdkUsNkVBQTZFO0FBQzdFLDZDQUE2QztBQUM3QyxNQUFNLHdCQUF3QixHQUErQjtJQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLDhCQUE4QjtJQUN2RCxNQUFNLEVBQUUsS0FBSyxFQUFFLHNCQUFzQjtDQUN0QyxDQUFDO0FBRUYsU0FBUyxxQkFBcUIsQ0FBQyxJQUFZOztJQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFBLHVCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsT0FBTyxNQUFBLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxtQ0FBSSxVQUFVLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBWTtJQUN0QyxJQUFJLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxVQUFVLENBQUMsQ0FBQyxxQ0FBcUM7SUFDL0UsT0FBTyxJQUFBLHVCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELHdGQUF3RjtBQUN4Riw4RUFBOEU7QUFDOUUscURBQXFEO0FBQ3JELDZFQUE2RTtBQUM3RSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLDZCQUE2QjtBQUM3Qiw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLDRFQUE0RTtBQUM1RSwwQ0FBMEM7QUFDMUMsOEVBQThFO0FBQzlFLHFCQUFxQjtBQUNyQixNQUFNLDZCQUE2QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzVDLGFBQWE7SUFDYixtQkFBbUI7Q0FDcEIsQ0FBQyxDQUFDO0FBbUJIOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMscUJBQXFCLENBQzVCLElBQW1CO0lBRW5CLElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUUsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUM1RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDN0IsT0FBTztZQUNMLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUk7WUFDM0IsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLGFBQWEsR0FBRztTQUNoRixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLHlCQUF5QixDQUNoQyxJQUFvQixFQUNwQixPQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNqRCxNQUFNLGFBQWEsR0FDakIsSUFBSSxLQUFLLEtBQUs7UUFDWixDQUFDLENBQUMsNkVBQTZFO1FBQy9FLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFaEIsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekIsdUVBQXVFO1FBQ3ZFLHFDQUFxQztRQUNyQyxPQUFPO1lBQ0wsTUFBTSxFQUFFLFVBQVU7WUFDbEIsYUFBYSxFQUFFLEdBQUcsT0FBTyxVQUFVO1lBQ25DLGFBQWE7WUFDYix3QkFBd0IsRUFBRSxLQUFLO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekIsb0NBQW9DO1FBQ3BDLE9BQU87WUFDTCxNQUFNLEVBQUUsVUFBVTtZQUNsQixhQUFhLEVBQUUsR0FBRyxPQUFPLFVBQVU7WUFDbkMsYUFBYTtZQUNiLHdCQUF3QixFQUFFLEtBQUs7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN2Qix1RUFBdUU7UUFDdkUsdUVBQXVFO1FBQ3ZFLCtDQUErQztRQUMvQyxPQUFPO1lBQ0wsTUFBTSxFQUFFLHdEQUF3RDtZQUNoRSxhQUFhLEVBQUUsR0FBRyxPQUFPLHlCQUF5QjtZQUNsRCxhQUFhO1lBQ2Isd0JBQXdCLEVBQUUsSUFBSTtTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsd0VBQXdFO1FBQ3hFLG9FQUFvRTtRQUNwRSx3RUFBd0U7UUFDeEUsc0VBQXNFO1FBQ3RFLE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsTUFBTSx3QkFBd0I7WUFDdEQsYUFBYSxFQUFFLEdBQUcsT0FBTyxJQUFJLFlBQVksQ0FBQyxhQUFhLEdBQUc7WUFDMUQsYUFBYTtZQUNiLHdCQUF3QixFQUFFLElBQUk7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSwwREFBMEQ7SUFDMUQsb0VBQW9FO0lBQ3BFLHlFQUF5RTtJQUN6RSx5RUFBeUU7SUFDekUseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSxTQUFTO0lBQ1QsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDbkUsT0FBTztRQUNMLE1BQU0sRUFBRSwyQkFBMkI7UUFDbkMsYUFBYSxFQUFFLEdBQUcsT0FBTyxJQUFJLGtCQUFrQixHQUFHO1FBQ2xELGFBQWE7UUFDYix3QkFBd0IsRUFBRSxJQUFJO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLE9BQXNCO0lBQ2pELElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDTCxNQUFNLEVBQUUsMkJBQTJCO1lBQ25DLGFBQWEsRUFBRSwyQkFBMkI7WUFDMUMsd0JBQXdCLEVBQUUsS0FBSztTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDTCxNQUFNLEVBQUUsMkJBQTJCO1lBQ25DLGFBQWEsRUFBRSwyQkFBMkI7WUFDMUMsd0JBQXdCLEVBQUUsS0FBSztTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSxPQUFPO1lBQ0wsTUFBTSxFQUFFLGtEQUFrRDtZQUMxRCxhQUFhLEVBQUUsNENBQTRDO1lBQzNELHdCQUF3QixFQUFFLEtBQUs7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFDRCx1RUFBdUU7SUFDdkUsK0RBQStEO0lBQy9ELGlDQUFpQztJQUNqQyxPQUFPO1FBQ0wsTUFBTSxFQUFFLEtBQUs7UUFDYixhQUFhLEVBQUUsS0FBSztRQUNwQix3QkFBd0IsRUFBRSxJQUFJO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFtQjtJQUMzQyxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QixPQUFPO1lBQ0wsTUFBTSxFQUFFLFFBQVE7WUFDaEIsYUFBYSxFQUFFLFFBQVE7WUFDdkIsd0JBQXdCLEVBQUUsS0FBSztTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU87WUFDTCxNQUFNLEVBQUUsUUFBUTtZQUNoQixhQUFhLEVBQUUsUUFBUTtZQUN2Qix3QkFBd0IsRUFBRSxLQUFLO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDcEIsT0FBTztZQUNMLE1BQU0sRUFBRSw2QkFBNkI7WUFDckMsYUFBYSxFQUFFLHVCQUF1QjtZQUN0Qyx3QkFBd0IsRUFBRSxJQUFJO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdkIsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLO1lBQ2IsYUFBYSxFQUFFLEtBQUs7WUFDcEIsd0JBQXdCLEVBQUUsSUFBSTtTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckUsT0FBTyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDN0MsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLE9BQU87UUFDTCxNQUFNLEVBQUUsS0FBSztRQUNiLGFBQWEsRUFBRSxRQUFRO1FBQ3ZCLHdCQUF3QixFQUFFLElBQUk7S0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUMxQixTQUE0QixFQUM1QixZQUFvQjs7SUFFcEIsTUFBTSxhQUFhLEdBQUcsTUFBQSxTQUFTLENBQUMsSUFBSSxtQ0FBSSxZQUFZLENBQUM7SUFDckQsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLEdBQ3RFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxPQUFPO1FBQ0wsYUFBYTtRQUNiLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxhQUFhLENBQUM7UUFDMUMsTUFBTTtRQUNOLGFBQWE7UUFDYixhQUFhO1FBQ2IsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO1FBQ2xDLHdCQUF3QjtLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsMkJBQTJCLENBQ2xDLEtBR0M7SUFFRCxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFDRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sc0JBQXNCO1FBQzdDLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLGdCQUFnQjtLQUN0RCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILFNBQVMsZ0JBQWdCLENBQ3ZCLFVBQStCLEVBQy9CLE1BQWdDO0lBRWhDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoRCxnQkFBZ0IsR0FBRyxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQztRQUMxRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV6QyxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQztZQUMvQyxDQUFDLENBQUMsNEVBQTRFO1lBQzlFLENBQUMsQ0FBQyw4REFBOEQsQ0FBQztRQUVuRSxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hELE1BQU07WUFDTixhQUFhO1lBQ2IsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUM7aUJBQ2xELE1BQU0sQ0FBQyxPQUFPLENBQUM7aUJBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNiLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxVQUF5QjtJQU05QyxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPO1lBQ0wsTUFBTSxFQUFFLFFBQVE7WUFDaEIsYUFBYSxFQUFFLFFBQVE7WUFDdkIsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyx3QkFBd0IsSUFBSSxHQUFHO1NBQ3RELENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNMLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsd0JBQXdCLElBQUksR0FBRztTQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzFCLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUsNkNBQTZDO1FBQzdDLE9BQU87WUFDTCxNQUFNLEVBQUUsbUJBQW1CO1lBQzNCLGFBQWEsRUFBRSx1QkFBdUI7WUFDdEMsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO1NBQzNCLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsT0FBTztZQUNMLE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsYUFBYSxFQUFFLEtBQUs7WUFDcEIsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO1NBQzNCLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFDRSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUNyRCxDQUFDO1FBQ0QscUVBQXFFO1FBQ3JFLHNFQUFzRTtRQUN0RSx5REFBeUQ7UUFDekQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQ2pCLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyw2RUFBNkU7WUFDL0UsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekIsT0FBTztnQkFDTCxNQUFNLEVBQUUsVUFBVTtnQkFDbEIsYUFBYSxFQUFFLEdBQUcsT0FBTyxVQUFVO2dCQUNuQyxhQUFhO2dCQUNiLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsc0JBQXNCLElBQUksR0FBRzthQUNwRCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pCLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLGFBQWEsRUFBRSxHQUFHLE9BQU8sVUFBVTtnQkFDbkMsYUFBYTtnQkFDYixVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLDRCQUE0QixJQUFJLEdBQUc7YUFDMUQsQ0FBQztRQUNKLENBQUM7UUFDRCxvRUFBb0U7UUFDcEUscUVBQXFFO1FBQ3JFLG9FQUFvRTtRQUNwRSx1RUFBdUU7UUFDdkUsNERBQTREO1FBQzVELE9BQU87WUFDTCxNQUFNLEVBQUUsbUJBQW1CO1lBQzNCLGFBQWEsRUFBRSxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEdBQUc7WUFDdkUsYUFBYTtZQUNiLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTtTQUMzQixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDekQsdUVBQXVFO1FBQ3ZFLG9FQUFvRTtRQUNwRSx5REFBeUQ7UUFDekQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pCLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLDJCQUEyQjtnQkFDbkMsYUFBYSxFQUFFLDJCQUEyQjtnQkFDMUMsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQywyQkFBMkIsSUFBSSxHQUFHO2FBQ3pELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekIsT0FBTztnQkFDTCxNQUFNLEVBQUUsMkJBQTJCO2dCQUNuQyxhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLDJCQUEyQixJQUFJLEdBQUc7YUFDekQsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN2QixpRUFBaUU7WUFDakUsOERBQThEO1lBQzlELG9FQUFvRTtZQUNwRSwyQkFBMkI7WUFDM0IsT0FBTztnQkFDTCxNQUFNLEVBQUUsNEJBQTRCO2dCQUNwQyxhQUFhLEVBQUUsNEJBQTRCO2dCQUMzQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLDRCQUE0QixJQUFJLEdBQUc7YUFDMUQsQ0FBQztRQUNKLENBQUM7UUFDRCxvRUFBb0U7UUFDcEUsb0VBQW9FO1FBQ3BFLCtCQUErQjtRQUMvQixPQUFPO1lBQ0wsTUFBTSxFQUFFLHdCQUF3QjtZQUNoQyxhQUFhLEVBQUUsd0JBQXdCO1lBQ3ZDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsd0JBQXdCLElBQUksR0FBRztTQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUNELHlFQUF5RTtJQUN6RSx5RUFBeUU7SUFDekUseUVBQXlFO0lBQ3pFLGtFQUFrRTtJQUNsRSx1REFBdUQ7SUFDdkQsT0FBTztRQUNMLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsYUFBYSxFQUFFLFFBQVE7UUFDdkIsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO0tBQzNCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FDekIsYUFBcUIsRUFDckIsU0FBNEI7O0lBRTVCLE1BQU0sRUFDSixNQUFNLEVBQUUsWUFBWSxFQUNwQixhQUFhLEVBQUUsbUJBQW1CLEVBQ2xDLGFBQWEsRUFBRSxtQkFBbUIsRUFDbEMsVUFBVSxHQUNYLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV6QyxNQUFNLGFBQWEsR0FBRyxNQUFBLFNBQVMsQ0FBQyxVQUFVLG1DQUFJLEVBQUUsQ0FBQztJQUNqRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FDakMsYUFBYSxFQUNiLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDckMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FDOUMsQ0FDRixDQUFDO0lBRUYsSUFBSSxpQkFBcUQsQ0FBQztJQUMxRCxJQUFJLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUN0QyxTQUFTLENBQUMsa0JBQWtCLEVBQzVCLFFBQVEsQ0FDVCxDQUFDO1FBQ0YsSUFBSSxTQUFTLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0MscUVBQXFFO1lBQ3JFLGdFQUFnRTtZQUNoRSxxRUFBcUU7WUFDckUsbUVBQW1FO1lBQ25FLGdFQUFnRTtZQUNoRSxvRUFBb0U7WUFDcEUsb0VBQW9FO1lBQ3BFLG9FQUFvRTtZQUNwRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUM3QiwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QyxpQkFBaUIsR0FBRztnQkFDbEIsR0FBRyxZQUFZO2dCQUNmLE1BQU07Z0JBQ04sYUFBYSxFQUFFLFNBQVMsYUFBYSxHQUFHO2dCQUN4QyxhQUFhLEVBQUU7b0JBQ2IsWUFBWSxDQUFDLGFBQWE7b0JBQzFCLDhEQUE4RDtpQkFDL0Q7cUJBQ0UsTUFBTSxDQUFDLE9BQU8sQ0FBQztxQkFDZixJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2IsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sb0VBQW9FO1lBQ3BFLHFFQUFxRTtZQUNyRSwrREFBK0Q7WUFDL0QsaUJBQWlCO1lBQ2pCLGlCQUFpQixHQUFHO2dCQUNsQixHQUFHLFlBQVk7Z0JBQ2YsYUFBYSxFQUFFLFNBQVMsWUFBWSxDQUFDLGFBQWEsR0FBRzthQUN0RCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsYUFBYTtRQUNiLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7UUFDN0MsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO1FBQ2xDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztRQUMxQixrQkFBa0IsRUFBRSxTQUFTLENBQUMsbUJBQW1CO1FBQ2pELFlBQVk7UUFDWixtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLFVBQVU7UUFDVixVQUFVO1FBQ1YsaUJBQWlCO0tBQ2xCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsNEJBQTRCLENBQ25DLFlBQW9CLEVBQ3BCLFNBQWtDO0lBRWxDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDLENBQUMsOEJBQThCO0lBRXhFLEtBQUssTUFBTSxFQUFFLElBQUksU0FBUyxFQUFFLENBQUM7UUFDM0IsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RCxJQUFJLHFCQUFxQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxZQUFZLDZDQUE2QztnQkFDcEUsSUFBSSxxQkFBcUIsVUFBVSxFQUFFLENBQUMsYUFBYSxlQUFlO2dCQUNsRSwwQ0FBMEMsRUFBRSxDQUFDLFVBQVUsS0FBSztnQkFDNUQsbUVBQW1FO2dCQUNuRSw2Q0FBNkMsQ0FDaEQsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLHVDQUF1QyxDQUM5QyxZQUFvQixFQUNwQixTQUFrQztJQUVsQyxLQUFLLE1BQU0sRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzNCLElBQUksNkJBQTZCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxZQUFZLHlDQUF5QztnQkFDaEUsSUFBSSxFQUFFLENBQUMsYUFBYSxnREFBZ0Q7Z0JBQ3BFLElBQUksRUFBRSxDQUFDLFVBQVUsdUNBQXVDO2dCQUN4RCxpREFBaUQ7Z0JBQ2pELHlEQUF5RDtnQkFDekQsNkRBQTZEO2dCQUM3RCwyREFBMkQ7Z0JBQzNELHlEQUF5RCxDQUM1RCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsK0JBQStCLENBQ3RDLFlBQW9CLEVBQ3BCLEVBQXlCO0lBRXpCLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDLENBQUMsa0NBQWtDO0lBQzVFLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUI7UUFDeEMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUMxQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUVsQixLQUFLLE1BQU0sS0FBSyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUNiLGFBQWEsWUFBWSxlQUFlLEVBQUUsQ0FBQyxhQUFhLGFBQWE7Z0JBQ25FLG9CQUFvQixxQkFBcUIsUUFBUTtnQkFDakQsSUFBSSxLQUFLLENBQUMsYUFBYSx5Q0FBeUM7Z0JBQ2hFLG1CQUFtQixLQUFLLENBQUMsSUFBSSxpQ0FBaUM7Z0JBQzlELG1FQUFtRSxDQUN0RSxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsZ0NBQWdDLENBQzlDLFlBQW9CLEVBQ3BCLGNBQXdCO0lBRXhCLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxZQUFZLGdEQUFnRDtZQUN2RSxzRUFBc0U7WUFDdEUsaUVBQWlFO1lBQ2pFLCtEQUErRDtZQUMvRCxxRUFBcUU7WUFDckUsNkNBQTZDLENBQ2hELENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQWRELDRFQWNDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLDJCQUEyQixDQUN6QyxZQUFvQixFQUNwQixTQUE0RDtJQUU1RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsYUFBVCxTQUFTLGNBQVQsU0FBUyxHQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFM0MsTUFBTSxlQUFlLEdBQUcsT0FBTztTQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRW5FLDRCQUE0QixDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM1RCx1Q0FBdUMsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdkUsS0FBSyxNQUFNLEVBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU87UUFDTCxZQUFZO1FBQ1osU0FBUyxFQUFFLEdBQUcsSUFBQSx3QkFBWSxFQUFDLFlBQVksQ0FBQyxtQkFBbUI7UUFDM0QsU0FBUyxFQUFFLGVBQWU7S0FDM0IsQ0FBQztBQUNKLENBQUM7QUF0QkQsa0VBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHRvQ2FtZWxDYXNlLCB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGVUeXBlLFxuICBGdW5jdGlvblBhcmFtZXRlcixcbiAgRnVuY3Rpb25TaWduYXR1cmUsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG4vKipcbiAqIEEgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiBwYXJhbWV0ZXIgKHBvc2l0aW9uYWwgb3IgdGhlIHRyYWlsaW5nXG4gKiB2YXJpYWRpYyBvbmUpLCBtYXBwZWQgdG8gdGhlIGpzaWktc2FmZSBUeXBlU2NyaXB0IHR5cGUgdXNlZCBpbiB0aGVcbiAqIGdlbmVyYXRlZCBtZXRob2Qgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRnVuY3Rpb25QYXJhbWV0ZXJNb2RlbCB7XG4gIHJlYWRvbmx5IHRlcnJhZm9ybU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0c1R5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBKU0RvYyB0eXBlIGV4cHJlc3Npb24gZW1pdHRlZCBpbnNpZGUgdGhlIGBAcGFyYW0gey4uLn1gIGJyYWNlcy5cbiAgICogQSBwdXJlIHR5cGUgZXhwcmVzc2lvbiBvbmx5IC0gcHJvc2UgKFRlcnJhZm9ybSBsaXN0L3NldCBzZW1hbnRpY3MsXG4gICAqIGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgZ3VpZGFuY2UpIGJlbG9uZ3MgaW4gYGRvY3N0cmluZ05vdGVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc3RyaW5nVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogUHJvc2UgYXBwZW5kZWQgYWZ0ZXIgdGhlIHBhcmFtZXRlciBuYW1lIChhbmQgYGRlc2NyaXB0aW9uYCwgaWYgYW55KSBpblxuICAgKiB0aGUgZW1pdHRlZCBgQHBhcmFtYCBsaW5lIC0gZS5nLiBzZXQtb3JkZXJpbmcgc2VtYW50aWNzIG9yIGhvdyB0byBwYXNzXG4gICAqIGFuIGV4cGxpY2l0IFRlcnJhZm9ybSBgbnVsbGAuIE9mZmljaWFsIEpTRG9jIHBsYWNlcyBvbmx5IHRoZSB0eXBlXG4gICAqIGV4cHJlc3Npb24gaW5zaWRlIHRoZSBicmFjZXMsIHNvIHRoaXMgbXVzdCBuZXZlciBiZSBmb2xkZWQgaW50b1xuICAgKiBgZG9jc3RyaW5nVHlwZWAuXG4gICAqL1xuICByZWFkb25seSBkb2NzdHJpbmdOb3RlPzogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRydWUgd2hlbiB0aGlzIChmaXhlZCwgbm9uLXZhcmlhZGljKSBwYXJhbWV0ZXIgaXMgZW1pdHRlZCBhcyBhXG4gICAqIGpzaWktb3B0aW9uYWwgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgKGBuYW1lPzogVGApIC0gc2VlIHRoZVxuICAgKiBpc19udWxsYWJsZS90cmFpbGluZy1jb21wYXRpYmlsaXR5IGhhbmRsaW5nIGluIGBhcHBseU51bGxhYmlsaXR5YC5cbiAgICogTmV2ZXIgc2V0IG9uIHRoZSB2YXJpYWRpYyBwYXJhbWV0ZXI6IGFuIGFycmF5IHBhcmFtZXRlciBjYW4ndCBiZSBgP2AuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25hbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogYFByb3ZpZGVyRnVuY3Rpb25QYXJhbWV0ZXJNb2RlbGAgcGx1cyB0aGUgb25lIGJpdCBvZiBpbmZvcm1hdGlvbiB0aGF0J3NcbiAqIG9ubHkgbmVlZGVkIHdoaWxlIGJ1aWxkaW5nIHRoZSBtb2RlbCAoc2VlIGBtYXBQYXJhbWV0ZXJUeXBlYC9cbiAqIGBhcHBseU51bGxhYmlsaXR5YCksIG5ldmVyIGJ5IHRoZSBlbWl0dGVyOiB3aGV0aGVyIGB0c1R5cGVgIGFscmVhZHlcbiAqIGFjY2VwdHMgYW4gYXJiaXRyYXJ5IGBjZGt0bi5JUmVzb2x2YWJsZWAgaW4gdGhpcyBwb3NpdGlvbiAoYSBiYXJlXG4gKiBib29sZWFuL2NvbGxlY3Rpb24tb2YtYm9vbGVhbiB0b2tlbiwgYGFueWAsIG9yIGFuIGV4cGxpY2l0XG4gKiBgfCBjZGt0bi5JUmVzb2x2YWJsZWAgdW5pb24gYWxyZWFkeSBwcmVzZW50KS4gTnVsbGFiaWxpdHkgaGFuZGxpbmcgdXNlc1xuICogdGhpcyB0byBkZWNpZGUgd2hldGhlciBpdCBuZWVkcyB0byBhcHBlbmQgYW5vdGhlciBgfCBjZGt0bi5JUmVzb2x2YWJsZWBcbiAqIHNvIGEgY2FsbGVyIGNhbiBwYXNzIGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgLSB3aXRob3V0IHJlc29ydGluZyB0b1xuICogcmUtZGVyaXZpbmcgdGhhdCBhbnN3ZXIgd2l0aCBhIHN0cmluZyBzZWFyY2ggb3ZlciBgdHNUeXBlYC5cbiAqL1xuaW50ZXJmYWNlIEludGVybmFsUGFyYW1ldGVyTW9kZWwgZXh0ZW5kcyBQcm92aWRlckZ1bmN0aW9uUGFyYW1ldGVyTW9kZWwge1xuICByZWFkb25seSBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBzaW5nbGUgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiwgbWFwcGVkIHRvIGEgc3RhdGljIG1ldGhvZCBvbiB0aGVcbiAqIGdlbmVyYXRlZCBgPFByb3ZpZGVyPlByb3ZpZGVyRnVuY3Rpb25zYCBjbGFzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckZ1bmN0aW9uTW9kZWwge1xuICByZWFkb25seSB0ZXJyYWZvcm1OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN1bW1hcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZXJyYWZvcm0gKD49MS44KSBkZXByZWNhdGlvbiBtZXNzYWdlIGZvciB0aGUgZnVuY3Rpb24sIHN1cmZhY2VkIGFzIGFuXG4gICAqIGBAZGVwcmVjYXRlZGAgSlNEb2MgdGFnLiBPcGVuVG9mdSBuZXZlciBlbWl0cyB0aGlzIGZpZWxkIC0gc2VlXG4gICAqIGBGdW5jdGlvblNpZ25hdHVyZS5kZXByZWNhdGlvbl9tZXNzYWdlYC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcHJlY2F0aW9uTWVzc2FnZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcmV0dXJuVHNUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYEByZXR1cm5zIHsuLi59YCBKU0RvYyB0eXBlLCBkZXNjcmliaW5nIHRoZSBjb25jZXB0dWFsL1RlcnJhZm9ybVxuICAgKiBzaGFwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIC0gc2VlIGBtYXBSZXR1cm5UeXBlYC4gVGhpcyBkZWxpYmVyYXRlbHkgY2FuXG4gICAqIGRpZmZlciBmcm9tIGByZXR1cm5Uc1R5cGVgIChlLmcuIGEgYGJvb2xgIHJldHVybiBpcyBkZWNsYXJlZFxuICAgKiBgY2RrdG4uSVJlc29sdmFibGVgIGJ1dCBkb2N1bWVudGVkIGFzIGBib29sZWFuIHwgSVJlc29sdmFibGVgKSwgdGhlIHNhbWVcbiAgICogd2F5IGEgcGFyYW1ldGVyJ3MgYGRvY3N0cmluZ1R5cGVgIGNhbiBkaWZmZXIgZnJvbSBpdHMgYHRzVHlwZWAuXG4gICAqL1xuICByZWFkb25seSByZXR1cm5Eb2NzdHJpbmdUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9zZSBhcHBlbmRlZCBhZnRlciB0aGUgYEByZXR1cm5zIHsuLi59YCBicmFjZXMgKGUuZy4gVGVycmFmb3JtXG4gICAqIGxpc3Qvc2V0IHNlbWFudGljcykgLSB0aGUgcmV0dXJuLXNpZGUgY291bnRlcnBhcnQgb2YgYSBwYXJhbWV0ZXInc1xuICAgKiBgZG9jc3RyaW5nTm90ZWAuXG4gICAqL1xuICByZWFkb25seSByZXR1cm5Eb2NzdHJpbmdOb3RlPzogc3RyaW5nO1xuICAvKipcbiAgICogV3JhcHMgdGhlIGBjZGt0bi5UZXJyYWZvcm1Qcm92aWRlckZ1bmN0aW9uLmludm9rZSguLi4pYCBjYWxsIGV4cHJlc3Npb25cbiAgICogaW50byB0aGUgbWV0aG9kJ3MgYHJldHVybmAgc3RhdGVtZW50IChlLmcuIHdyYXBwaW5nIGl0IGluXG4gICAqIGBjZGt0bi5Ub2tlbi5hc1N0cmluZyguLi4pYCwgb3IgcmV0dXJuaW5nIGl0IHVud3JhcHBlZCBmb3IgYGJvb2xgKS5cbiAgICovXG4gIHJlYWRvbmx5IHdyYXBSZXR1cm46IChpbnZva2VFeHByZXNzaW9uOiBzdHJpbmcpID0+IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyYW1ldGVyczogUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsW107XG4gIHJlYWRvbmx5IHZhcmlhZGljUGFyYW1ldGVyPzogUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsO1xufVxuXG4vKipcbiAqIEFsbCBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyBvZiBhIHNpbmdsZSBwcm92aWRlciwgbWFwcGVkIHRvIGEgc2luZ2xlXG4gKiBnZW5lcmF0ZWQgYHByb3ZpZGVycy88cHJvdmlkZXI+L3Byb3ZpZGVyLWZ1bmN0aW9ucy9pbmRleC50c2AgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckZ1bmN0aW9uc01vZGVsIHtcbiAgcmVhZG9ubHkgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsYXNzTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBmdW5jdGlvbnM6IFByb3ZpZGVyRnVuY3Rpb25Nb2RlbFtdO1xufVxuXG4vLyBQYXJhbWV0ZXIgbmFtZXMgdGhhdCBjb2xsaWRlIHdpdGggYSByZXNlcnZlZCB3b3JkL2lkZW50aWZpZXIgaW4gb25lIG9mIHRoZVxuLy8ganNpaSB0YXJnZXQgbGFuZ3VhZ2VzLiBUaGlzIGlzIHRoZSBzaWJsaW5nIHRhYmxlIGZvciBwcm92aWRlci1kZWZpbmVkXG4vLyBmdW5jdGlvbnM6IHRvb2xzL2dlbmVyYXRlLWZ1bmN0aW9uLWJpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUudHMgaG9sZHMgdGhlXG4vLyBjYW5vbmljYWwgKGFuZCBzZXBhcmF0ZWx5IG1haW50YWluZWQpIHRhYmxlIGZvciBidWlsdC1pbiBgRm4uKmAgZnVuY3Rpb25zLlxuLy8gVGhlIHR3byBhcmUgaW50ZW50aW9uYWxseSBub3Qgc2hhcmVkIC0gdGhhdCBzY3JpcHQgbGl2ZXMgb3V0c2lkZSB0aGVcbi8vIHBhY2thZ2VzLyBidWlsZCBhbmQgZ2VuZXJhdGVzIGEgZGlmZmVyZW50IGFydGlmYWN0IC0gYnV0IGFueSByZXNlcnZlZCBuYW1lXG4vLyBhZGRlZCB0aGVyZSBzaG91bGQgYmUgY29uc2lkZXJlZCBoZXJlIHRvby5cbmNvbnN0IFJFU0VSVkVEX1BBUkFNRVRFUl9OQU1FUzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gIGRlZmF1bHQ6IFwiZGVmYXVsdFZhbHVlXCIsIC8vIHJlc2VydmVkIHdvcmQgaW4gVHlwZVNjcmlwdFxuICBzdHJpbmc6IFwic3RyXCIsIC8vIGNhdXNlcyBpc3N1ZXMgaW4gR29cbn07XG5cbmZ1bmN0aW9uIHNhbml0aXplUGFyYW1ldGVyTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjYW1lbENhc2VkID0gdG9DYW1lbENhc2UobmFtZSk7XG4gIHJldHVybiBSRVNFUlZFRF9QQVJBTUVURVJfTkFNRVNbY2FtZWxDYXNlZF0gPz8gY2FtZWxDYXNlZDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVNZXRob2ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChuYW1lID09PSBcImxlbmd0aFwiKSByZXR1cm4gXCJsZW5ndGhPZlwiOyAvLyByZXNlcnZlZCBvbiBqc2lpLWdlbmVyYXRlZCBjbGFzc2VzXG4gIHJldHVybiB0b0NhbWVsQ2FzZShuYW1lKTtcbn1cblxuLy8gTWVtYmVycyB0aGF0IGBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXJgIChzZWUgYGVtaXR0ZXIvcHJvdmlkZXItZnVuY3Rpb25zLWVtaXR0ZXIudHNgKVxuLy8gaXRzZWxmIHB1dHMgb24gZXZlcnkgZ2VuZXJhdGVkIGA8UHJvdmlkZXI+UHJvdmlkZXJGdW5jdGlvbnNgIHdyYXBwZXIgY2xhc3MsXG4vLyByZWdhcmRsZXNzIG9mIHdoaWNoIGZ1bmN0aW9ucyBhIHByb3ZpZGVyIGRlY2xhcmVzOlxuLy8gICAtIFwiY29uc3RydWN0b3JcIjogdGhlIGNsYXNzJ3Mgb3duIGNvbnN0cnVjdG9yLCB3aGljaCB0YWtlcyB0aGUgcHJvdmlkZXInc1xuLy8gICAgIGBwcm92aWRlckxvY2FsTmFtZWAuIEEgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiBuYW1lZCBcImNvbnN0cnVjdG9yXCJcbi8vICAgICB3b3VsZCBzYW5pdGl6ZSB0byBhICpzZWNvbmQqIGBjb25zdHJ1Y3RvcmAgbWVtYmVyIG9uIHRoZSBjbGFzcywgd2hpY2hcbi8vICAgICBpcyBpbnZhbGlkIFR5cGVTY3JpcHQuXG4vLyAgIC0gXCJwcm92aWRlckxvY2FsTmFtZVwiOiB0aGUgYHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJMb2NhbE5hbWU6IHN0cmluZ2Bcbi8vICAgICBmaWVsZCB0aGUgY29uc3RydWN0b3IgYXNzaWducyAoc2VlIHRoZSBlbWl0dGVyJ3MgYGVtaXRDbGFzc0hlYWRlcmAvXG4vLyAgICAgY29uc3RydWN0b3IgZW1pc3Npb24pLiBBIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb24gc2FuaXRpemluZyB0byB0aGlzXG4vLyAgICAgbmFtZSB3b3VsZCBjb2xsaWRlIHdpdGggdGhhdCBmaWVsZC5cbi8vIElmIGBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXJgIGV2ZXIgZ3Jvd3MgbW9yZSBtZW1iZXJzIG9uIHRoZSB3cmFwcGVyIGNsYXNzLFxuLy8gYWRkIHRoZW0gaGVyZSB0b28uXG5jb25zdCBSRVNFUlZFRF9XUkFQUEVSX01FTUJFUl9OQU1FUyA9IG5ldyBTZXQoW1xuICBcImNvbnN0cnVjdG9yXCIsXG4gIFwicHJvdmlkZXJMb2NhbE5hbWVcIixcbl0pO1xuXG4vKipcbiAqIFJlc3VsdCBvZiBtYXBwaW5nIGEgc2luZ2xlIFRlcnJhZm9ybSBhdHRyaWJ1dGUgdHlwZSBpbnRvIGEganNpaS1zYWZlXG4gKiBwYXJhbWV0ZXIgc2hhcGUgKHNlZSBgbWFwUGFyYW1ldGVyVHlwZWApLlxuICovXG5pbnRlcmZhY2UgTWFwcGVkUGFyYW1ldGVyVHlwZSB7XG4gIHJlYWRvbmx5IHRzVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBkb2NzdHJpbmdUeXBlOiBzdHJpbmc7XG4gIC8qKiBTZWUgYFByb3ZpZGVyRnVuY3Rpb25QYXJhbWV0ZXJNb2RlbC5kb2NzdHJpbmdOb3RlYC4gKi9cbiAgcmVhZG9ubHkgZG9jc3RyaW5nTm90ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRydWUgd2hlbiBgdHNUeXBlYCBhbHJlYWR5IGFjY2VwdHMgYW4gYXJiaXRyYXJ5IGBjZGt0bi5JUmVzb2x2YWJsZWAgaW5cbiAgICogdGhpcyBwb3NpdGlvbiB3aXRob3V0IG5lZWRpbmcgYW4gZXh0cmEgYHwgY2RrdG4uSVJlc29sdmFibGVgIHVuaW9uIC1cbiAgICogc2VlIGBJbnRlcm5hbFBhcmFtZXRlck1vZGVsYC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgYnJhY2tldC1jb21wb3NhYmxlIChcIlRbXVwiLCBubyB0b3AtbGV2ZWwgdW5pb24pIFR5cGVTY3JpcHQvZG9jc3RyaW5nXG4gKiB0eXBlIGZvciBhbiBlbGVtZW50IHRoYXQgY2FuIG5lc3QgaW5zaWRlIGFuIGFycmF5IHdpdGhvdXQgSVRTRUxGIG5lZWRpbmdcbiAqIHRoZSB3aG9sZS1jb2xsZWN0aW9uIHRva2VuIHVuaW9uIGF0IHRoYXQgbGV2ZWw6IGBzdHJpbmdgLCBgbnVtYmVyYCwgb3IgYVxuICogbGlzdC9zZXQgb2Ygb25lIG9mIHRob3NlLCByZWN1cnNpdmVseSAoZS5nLiBgbGlzdChsaXN0KHN0cmluZykpYCBib3R0b21zXG4gKiBvdXQgYXQgYHN0cmluZ2ApLiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBhbnl0aGluZyBlbHNlIChgYm9vbGAsIGBtYXBgLFxuICogYG9iamVjdGAsIGBkeW5hbWljYCwgb3IgYSBuZXN0ZWQgY29sbGVjdGlvbiB0aGF0IGRvZXNuJ3QgaXRzZWxmIHF1YWxpZnkpLFxuICogc28gdGhlIGNhbGxlciBmYWxscyBiYWNrIHRvIHdpZGVuaW5nIHRoZSB3aG9sZSBwYXJhbWV0ZXIgdG9cbiAqIGBhbnlbXSB8IGNka3RuLklSZXNvbHZhYmxlYCBpbnN0ZWFkLlxuICovXG5mdW5jdGlvbiBwbGFpbkFycmF5RWxlbWVudFR5cGUoXG4gIHR5cGU6IEF0dHJpYnV0ZVR5cGUsXG4pOiB7IHRzVHlwZTogc3RyaW5nOyBkb2NzdHJpbmdUeXBlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSByZXR1cm4geyB0c1R5cGU6IFwic3RyaW5nXCIsIGRvY3N0cmluZ1R5cGU6IFwic3RyaW5nXCIgfTtcbiAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHJldHVybiB7IHRzVHlwZTogXCJudW1iZXJcIiwgZG9jc3RyaW5nVHlwZTogXCJudW1iZXJcIiB9O1xuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiAodHlwZVswXSA9PT0gXCJsaXN0XCIgfHwgdHlwZVswXSA9PT0gXCJzZXRcIikpIHtcbiAgICBjb25zdCBpbm5lciA9IHBsYWluQXJyYXlFbGVtZW50VHlwZSh0eXBlWzFdKTtcbiAgICBpZiAoIWlubmVyKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IGAke2lubmVyLnRzVHlwZX1bXWAsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt0eXBlWzBdID09PSBcInNldFwiID8gXCJTZXRcIiA6IFwiQXJyYXlcIn08JHtpbm5lci5kb2NzdHJpbmdUeXBlfT5gLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBNYXBzIGEgYGxpc3RgL2BzZXRgIHBhcmFtZXRlciB0byBpdHMganNpaS1zYWZlIHNoYXBlIC0gbWlycm9yc1xuICogYExpc3RBdHRyaWJ1dGVUeXBlTW9kZWxgL2BTZXRBdHRyaWJ1dGVUeXBlTW9kZWwuaW5wdXRUeXBlRGVmaW5pdGlvbmBcbiAqIChib3RoIGlkZW50aWNhbCkgYnJhbmNoIGZvciBicmFuY2gsIHNpbmNlIGpzaWkgcGFyYW1ldGVycywgbGlrZSByZXNvdXJjZVxuICogaW5wdXRzLCBhcmUgYWxsb3dlZCB0byB1bmlvbiBpbiBhIHdob2xlLWNvbGxlY3Rpb24gYGNka3RuLklSZXNvbHZhYmxlYFxuICogdG9rZW4uIGBraW5kYCBvbmx5IGFmZmVjdHMgdGhlIGRvY3VtZW50YXRpb246IHRoZSBkb2NzdHJpbmcgbm90YXRpb25cbiAqIChgQXJyYXk8Li4uPmAgZm9yIGEgVGVycmFmb3JtIGxpc3QsIGBTZXQ8Li4uPmAgZm9yIGEgVGVycmFmb3JtIHNldCxcbiAqIHJlY3Vyc2l2ZWx5IHZpYSBgcGxhaW5BcnJheUVsZW1lbnRUeXBlYC9gbWFwUGFyYW1ldGVyVHlwZWApIHBsdXMsIGZvclxuICogc2V0cywgYSBwcm9zZSBub3RlIC0gdGhlIGpzaWkgdHlwZSBpcyBhbiBhcnJheSBlaXRoZXIgd2F5LCBzbyB0aGUgbm90ZVxuICoga2VlcHMgYSByZWFkZXIgZnJvbSBsaXRlcmFsbHkgcGFzc2luZyBhIEpTIGBTZXRgIGFuZCBmbGFncyB0aGVcbiAqIG9yZGVyaW5nL2R1cGxpY2F0ZS1lbGVtZW50IHNlbWFudGljcyBkaWZmZXJlbmNlLiBUaGUgdHlwZS1sZXZlbCBoYW5kbGluZ1xuICogaXMgaWRlbnRpY2FsIGZvciBib3RoLlxuICovXG5mdW5jdGlvbiBtYXBMaXN0T3JTZXRQYXJhbWV0ZXJUeXBlKFxuICBraW5kOiBcImxpc3RcIiB8IFwic2V0XCIsXG4gIGVsZW1lbnQ6IEF0dHJpYnV0ZVR5cGUsXG4pOiBNYXBwZWRQYXJhbWV0ZXJUeXBlIHtcbiAgY29uc3Qgd3JhcHBlciA9IGtpbmQgPT09IFwic2V0XCIgPyBcIlNldFwiIDogXCJBcnJheVwiO1xuICBjb25zdCBkb2NzdHJpbmdOb3RlID1cbiAgICBraW5kID09PSBcInNldFwiXG4gICAgICA/IFwiVGVycmFmb3JtIHNldDsgb3JkZXJpbmcgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGR1cGxpY2F0ZSB2YWx1ZXMgYXJlIHJlbW92ZWQuXCJcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmIChlbGVtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgLy8gTWlycm9ycyB0aGUgZmluYWwgYGVsc2VgIGJyYW5jaDogZW5jb2RlZCBsaXN0IHRva2VucyBhbHJlYWR5IHNhdGlzZnlcbiAgICAvLyBgc3RyaW5nW11gLCBzbyBubyB1bmlvbiBpcyBuZWVkZWQuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJzdHJpbmdbXVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08c3RyaW5nPmAsXG4gICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgLy8gU2FtZSByZWFzb25pbmcgYXMgYHN0cmluZ2AgYWJvdmUuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJudW1iZXJbXVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08bnVtYmVyPmAsXG4gICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBcImJvb2xcIikge1xuICAgIC8vIE1pcnJvcnMgdGhlIGBlbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiYCBicmFuY2g6IGJvb2xcbiAgICAvLyBoYXMgbm8gbG9zc2xlc3MgcGVyLWVsZW1lbnQgdG9rZW4sIGJ1dCB0aGUgV0hPTEUgY29sbGVjdGlvbiBpcyBzdGlsbFxuICAgIC8vIHRva2VuaXphYmxlLCBzbyB0aGUgdW5pb24gaXMgb24gdGhlIG91dHNpZGUuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJBcnJheTxib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU+IHwgY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3dyYXBwZXJ9PGJvb2xlYW4gfCBJUmVzb2x2YWJsZT5gLFxuICAgICAgZG9jc3RyaW5nTm90ZSxcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGxhaW5FbGVtZW50ID0gcGxhaW5BcnJheUVsZW1lbnRUeXBlKGVsZW1lbnQpO1xuICBpZiAocGxhaW5FbGVtZW50KSB7XG4gICAgLy8gTWlycm9ycyB0aGUgYGVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCJgIGJyYW5jaDogYSBuZXN0ZWRcbiAgICAvLyBsaXN0L3NldCB0aGF0IGl0c2VsZiBib3R0b21zIG91dCBhdCBzdHJpbmcvbnVtYmVyIGNvbXBvc2VzIGludG8gYVxuICAgIC8vIHByb3BlciBuZXN0ZWQgYXJyYXkgdHlwZSAoZS5nLiBgbGlzdChsaXN0KHN0cmluZykpYCAtPiBgc3RyaW5nW11bXWApLFxuICAgIC8vIHdpdGggdGhlIHdob2xlLWNvbGxlY3Rpb24gdG9rZW4gYWRkaXRpb25hbGx5IGFjY2VwdGVkIGFsb25nc2lkZSBpdC5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBgJHtwbGFpbkVsZW1lbnQudHNUeXBlfVtdIHwgY2RrdG4uSVJlc29sdmFibGVgLFxuICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08JHtwbGFpbkVsZW1lbnQuZG9jc3RyaW5nVHlwZX0+YCxcbiAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIG1hcC9vYmplY3QvZHluYW1pYyBlbGVtZW50LCBvciBhIG5lc3RlZCBjb2xsZWN0aW9uIHRoYXQgZG9lc24ndCBpdHNlbGZcbiAgLy8gcmVkdWNlIHRvIHN0cmluZy9udW1iZXI6IG5vIGpzaWktc2FmZSBhcnJheS1vZi1YIHR5cGUgZXhpc3RzIC0gd2lkZW5cbiAgLy8gdGhlIHdob2xlIHBhcmFtZXRlciB0byBgYW55W11gLiBVbmxpa2UgYSBiYXJlIGBhbnlgIHBhcmFtZXRlciwgcGxhaW5cbiAgLy8gYGFueVtdYCBkb2VzIE5PVCBzdHJ1Y3R1cmFsbHkgYWNjZXB0IGEgd2hvbGUtY29sbGVjdGlvblxuICAvLyBgY2RrdG4uSVJlc29sdmFibGVgIHRva2VuLCBzbyB0aGUgdW5pb24gaXMgcmVxdWlyZWQgaGVyZSAodGhpcyBpc1xuICAvLyBzdHJpY3RlciB0aGFuIGBNYXBBdHRyaWJ1dGVUeXBlTW9kZWxgL2BMaXN0QXR0cmlidXRlVHlwZU1vZGVsYCBoYXZlIHRvXG4gIC8vIGJlLCBzaW5jZSB0aG9zZSBvbmx5IGV2ZXIgZmFsbCBiYWNrIHRvIGBhbnlbXSB8IGNka3RuLklSZXNvbHZhYmxlYCB2aWFcbiAgLy8gdGhlIHNhbWUgXCJub3Qgc2ltcGxlXCIgYnJhbmNoIGFib3ZlLCB3aGljaCBhbHJlYWR5IGdyYW50cyBpdCkuIEtlZXAgdGhlXG4gIC8vIGRvY3N0cmluZyBob25lc3QgYWJvdXQgdGhlIHJlYWwgZWxlbWVudCBzaGFwZSByYXRoZXIgdGhhbiBqdXN0IHNheWluZ1xuICAvLyBgYW55YC5cbiAgY29uc3QgZWxlbWVudERlc2NyaXB0aW9uID0gbWFwUGFyYW1ldGVyVHlwZShlbGVtZW50KS5kb2NzdHJpbmdUeXBlO1xuICByZXR1cm4ge1xuICAgIHRzVHlwZTogXCJhbnlbXSB8IGNka3RuLklSZXNvbHZhYmxlXCIsXG4gICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08JHtlbGVtZW50RGVzY3JpcHRpb259PmAsXG4gICAgZG9jc3RyaW5nTm90ZSxcbiAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gIH07XG59XG5cbi8qKlxuICogTWFwcyBhIGBtYXBgIHBhcmFtZXRlciB0byBpdHMganNpaS1zYWZlIHNoYXBlIC0gbWlycm9yc1xuICogYE1hcEF0dHJpYnV0ZVR5cGVNb2RlbC5pbnB1dFR5cGVEZWZpbml0aW9uYC4gT25seSB0aGUgYGJvb2xgLWVsZW1lbnQgY2FzZVxuICogaXMgcmVhY2hhYmxlIGZyb20gcmVhbCBwcm92aWRlciBzY2hlbWFzIHRvZGF5IChgc3RyaW5nYC9gbnVtYmVyYCBlbGVtZW50XG4gKiBtYXBzIHN0YXkgYSBwbGFpbiwgbm9uLXVuaW9uIHJlY29yZDsgbmVzdGVkL2NvbXBsZXggbWFwIGVsZW1lbnRzIGFyZW4ndFxuICogZW1pdHRlZCBmb3IgcHJvdmlkZXIgZnVuY3Rpb25zIC0gc2VlIHRoZSBgb2JqZWN0YCBmYWxsYmFjayBpblxuICogYG1hcFBhcmFtZXRlclR5cGVgKSwgYnV0IHRoZSBzaGFwZSBpcyBrZXB0IGJyYW5jaC1mb3ItYnJhbmNoIGFsaWduZWQgd2l0aFxuICogdGhlIG1vZGVsIGl0IG1pcnJvcnMgcmF0aGVyIHRoYW4gY29sbGFwc2VkLlxuICovXG5mdW5jdGlvbiBtYXBNYXBQYXJhbWV0ZXJUeXBlKGVsZW1lbnQ6IEF0dHJpYnV0ZVR5cGUpOiBNYXBwZWRQYXJhbWV0ZXJUeXBlIHtcbiAgaWYgKGVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVwiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IG51bWJlciB9XCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBcInsgW2tleTogc3RyaW5nXTogbnVtYmVyIH1cIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBpZiAoZWxlbWVudCA9PT0gXCJib29sXCIpIHtcbiAgICAvLyBNaXJyb3JzIHRoZSBgZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cImAgYnJhbmNoOiBtYXBcbiAgICAvLyBvZiBib29sZWFucyBoYXMgUEVSLUVOVFJZIHRva2VuIHN1cHBvcnQsIGJ1dCB0aGUgd2hvbGUgbWFwIGl0c2VsZiBpc1xuICAgIC8vIG5vdCBhZGRpdGlvbmFsbHkgdW5pb25lZCB3aXRoIGBjZGt0bi5JUmVzb2x2YWJsZWAgKHVubGlrZSB0aGUgbGlzdC9zZXRcbiAgICAvLyBjYXNlKSAtIG1hdGNoaW5nIGBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwuaW5wdXRUeXBlRGVmaW5pdGlvbmAgZXhhY3RseS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogKGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkgfVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IChib29sZWFuIHwgSVJlc29sdmFibGUpIH1cIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogZmFsc2UsXG4gICAgfTtcbiAgfVxuICAvLyBtYXAvb2JqZWN0L2R5bmFtaWMgZWxlbWVudDogbm8gc3RydWN0dXJhbCBpbnB1dCBoZWxwZXIgZXhpc3RzIGhlcmUgLVxuICAvLyBzdGF5cyBgYW55YCwgd2hpY2ggKGJlaW5nIGBhbnlgKSBhbHJlYWR5IGFjY2VwdHMgYSB3aG9sZS1tYXBcbiAgLy8gYGNka3RuLklSZXNvbHZhYmxlYCB0b2tlbiB0b28uXG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBcImFueVwiLFxuICAgIGRvY3N0cmluZ1R5cGU6IFwiYW55XCIsXG4gICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIE1hcHMgYSBwcm92aWRlciBmdW5jdGlvbiBwYXJhbWV0ZXIncyBkZWNsYXJlZCBUZXJyYWZvcm0gdHlwZSB0byBhXG4gKiBqc2lpLXNhZmUgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgdHlwZSwgcmVjdXJzaXZlbHkgZm9yIGNvbGxlY3Rpb24gdHlwZXMuXG4gKlxuICogVW5saWtlIHJldHVybiB0eXBlcywganNpaSBhbGxvd3MgdW5pb25zIGluICpwYXJhbWV0ZXIqIHBvc2l0aW9uLCBzb1xuICogYGJvb2xgIGlzIHR5cGVkIGBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVgIChtaXJyb3JpbmdcbiAqIGBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwuaW5wdXRUeXBlRGVmaW5pdGlvbmAncyBpbnB1dC1zaWRlIGNvbnZlbnRpb24pIC1cbiAqIHRoaXMgYm90aCBhY2NlcHRzIGEgcmVhbCBib29sZWFuIGFuZCBzdGlsbCBhY2NlcHRzIGEgdG9rZW4gaW4gcGxhY2Ugb2ZcbiAqIG9uZS4gYGR5bmFtaWNgIGhhcyBubyBzdHJ1Y3R1cmFsIHR5cGluZyBhbmQgc3RheXMgYGFueWAgKHdoaWNoIGFscmVhZHlcbiAqIGFjY2VwdHMgYW55dGhpbmcsIGluY2x1ZGluZyBhIHRva2VuKTsgYG9iamVjdGAgKHN0cnVjdHVyYWwgaW5wdXQgaGVscGVyc1xuICogYXJlIGRlZmVycmVkIHRvIGEgZm9sbG93LXVwIGlzc3VlKSBzdGF5cyBgYW55YCB0b28uXG4gKlxuICogYGxpc3RgL2BzZXRgIGFuZCBgbWFwYCBkZWxlZ2F0ZSB0byBgbWFwTGlzdE9yU2V0UGFyYW1ldGVyVHlwZWAvXG4gKiBgbWFwTWFwUGFyYW1ldGVyVHlwZWAsIHdoaWNoIG1pcnJvciBgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbGAvXG4gKiBgU2V0QXR0cmlidXRlVHlwZU1vZGVsYC9gTWFwQXR0cmlidXRlVHlwZU1vZGVsLmlucHV0VHlwZURlZmluaXRpb25gXG4gKiBicmFuY2ggZm9yIGJyYW5jaCAoc2VlIGBhdHRyaWJ1dGUtdHlwZS1tb2RlbC50c2ApIC0gdGhlIHNhbWVcbiAqIHdob2xlLWNvbGxlY3Rpb24tdG9rZW4gY29udmVudGlvbnMgYWxyZWFkeSB1c2VkIGZvciByZXNvdXJjZSBpbnB1dHMuXG4gKi9cbmZ1bmN0aW9uIG1hcFBhcmFtZXRlclR5cGUodHlwZTogQXR0cmlidXRlVHlwZSk6IE1hcHBlZFBhcmFtZXRlclR5cGUge1xuICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwibnVtYmVyXCIsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwiYm9vbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwiYm9vbGVhbiB8IElSZXNvbHZhYmxlXCIsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJkeW5hbWljXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcImFueVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJhbnlcIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkgJiYgKHR5cGVbMF0gPT09IFwibGlzdFwiIHx8IHR5cGVbMF0gPT09IFwic2V0XCIpKSB7XG4gICAgcmV0dXJuIG1hcExpc3RPclNldFBhcmFtZXRlclR5cGUodHlwZVswXSwgdHlwZVsxXSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiB0eXBlWzBdID09PSBcIm1hcFwiKSB7XG4gICAgcmV0dXJuIG1hcE1hcFBhcmFtZXRlclR5cGUodHlwZVsxXSk7XG4gIH1cblxuICAvLyBvYmplY3Q6IHN0cnVjdHVyYWwgaW5wdXQgaGVscGVycyBhcmUgZGVmZXJyZWQgdG8gYSBmb2xsb3ctdXAgaXNzdWUuXG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBcImFueVwiLFxuICAgIGRvY3N0cmluZ1R5cGU6IFwib2JqZWN0XCIsXG4gICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiB0cnVlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFBhcmFtZXRlck1vZGVsKFxuICBwYXJhbWV0ZXI6IEZ1bmN0aW9uUGFyYW1ldGVyLFxuICBmYWxsYmFja05hbWU6IHN0cmluZyxcbik6IEludGVybmFsUGFyYW1ldGVyTW9kZWwge1xuICBjb25zdCB0ZXJyYWZvcm1OYW1lID0gcGFyYW1ldGVyLm5hbWUgPz8gZmFsbGJhY2tOYW1lO1xuICBjb25zdCB7IHRzVHlwZSwgZG9jc3RyaW5nVHlwZSwgZG9jc3RyaW5nTm90ZSwgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5IH0gPVxuICAgIG1hcFBhcmFtZXRlclR5cGUocGFyYW1ldGVyLnR5cGUpO1xuICByZXR1cm4ge1xuICAgIHRlcnJhZm9ybU5hbWUsXG4gICAgbmFtZTogc2FuaXRpemVQYXJhbWV0ZXJOYW1lKHRlcnJhZm9ybU5hbWUpLFxuICAgIHRzVHlwZSxcbiAgICBkb2NzdHJpbmdUeXBlLFxuICAgIGRvY3N0cmluZ05vdGUsXG4gICAgZGVzY3JpcHRpb246IHBhcmFtZXRlci5kZXNjcmlwdGlvbixcbiAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHksXG4gIH07XG59XG5cbi8qKlxuICogV2lkZW5zIGEgbWFwcGVkIHR5cGUncyBgdHNUeXBlYC9gZG9jc3RyaW5nVHlwZWAgdG8gYWxzbyBhY2NlcHQgYW5cbiAqIGV4cGxpY2l0IGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgaW4gdGhpcyBwb3NpdGlvbiAtIHVubGVzc1xuICogYGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeWAgc2F5cyBpdCBhbHJlYWR5IGRvZXMgKGUuZy4gYSBgYm9vbGAgcGFyYW1ldGVyXG4gKiBpcyBhbHJlYWR5IGBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVgLCBzbyBudWxsYWJpbGl0eSBhZGRzIG5vdGhpbmcgdG9cbiAqIHRoZSB0eXBlIGl0c2VsZiwgb25seSB0byB0aGUgZG9jc3RyaW5nIG5vdGUgYXBwZW5kZWQgYnkgdGhlIGNhbGxlcikuXG4gKi9cbmZ1bmN0aW9uIHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbihcbiAgbW9kZWw6IFBpY2s8XG4gICAgSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbCxcbiAgICBcInRzVHlwZVwiIHwgXCJkb2NzdHJpbmdUeXBlXCIgfCBcImFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeVwiXG4gID4sXG4pOiB7IHRzVHlwZTogc3RyaW5nOyBkb2NzdHJpbmdUeXBlOiBzdHJpbmcgfSB7XG4gIGlmIChtb2RlbC5hY2NlcHRzUmVzb2x2YWJsZUFscmVhZHkpIHtcbiAgICByZXR1cm4geyB0c1R5cGU6IG1vZGVsLnRzVHlwZSwgZG9jc3RyaW5nVHlwZTogbW9kZWwuZG9jc3RyaW5nVHlwZSB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBgJHttb2RlbC50c1R5cGV9IHwgY2RrdG4uSVJlc29sdmFibGVgLFxuICAgIGRvY3N0cmluZ1R5cGU6IGAke21vZGVsLmRvY3N0cmluZ1R5cGV9IHwgSVJlc29sdmFibGVgLFxuICB9O1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYGlzX251bGxhYmxlYCB0cmFpbGluZy1jb21wYXRpYmlsaXR5IHJ1bGVzIGFjcm9zcyBhIGZ1bmN0aW9uJ3NcbiAqIGZpeGVkIChub24tdmFyaWFkaWMpIHBhcmFtZXRlciBsaXN0LiBUaGlzIG5lZWRzIHRoZSB3aG9sZSBsaXN0IGluIHZpZXdcbiAqIChzZWUgYGJ1aWxkRnVuY3Rpb25Nb2RlbGApLCBzaW5jZSB3aGV0aGVyIGEgbnVsbGFibGUgcGFyYW1ldGVyIGNhbiBiZWNvbWVcbiAqIGpzaWktb3B0aW9uYWwgZGVwZW5kcyBvbiBldmVyeSBwYXJhbWV0ZXIgKmFmdGVyKiBpdCB0b286XG4gKlxuICogLSBBIG51bGxhYmxlIHBhcmFtZXRlciB3aGVyZSBpdCBhbmQgZXZlcnkgbGF0ZXIgZml4ZWQgcGFyYW1ldGVyIGFyZSBhbHNvXG4gKiAgIG51bGxhYmxlIGJlY29tZXMganNpaS1vcHRpb25hbCAoYG5hbWU/OiBUYCk6IG9taXR0aW5nIGl0IGluIFR5cGVTY3JpcHRcbiAqICAgbGVhdmVzIGB1bmRlZmluZWRgIGluIHRoZSBpbnZva2UgYXJncyBhcnJheSwgd2hpY2ggYEZ1bmN0aW9uQ2FsbGBcbiAqICAgYWxyZWFkeSByZW5kZXJzIGFzIHRoZSBUZXJyYWZvcm0gYG51bGxgIGtleXdvcmQuIEl0IGFkZGl0aW9uYWxseSBnYWluc1xuICogICB0aGUgYHwgY2RrdG4uSVJlc29sdmFibGVgIHVuaW9uIChzZWUgYHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbmApLCBzb1xuICogICBhIGNhbGxlciB3aG8gZG9lcyBzdXBwbHkgdGhlIGFyZ3VtZW50IGNhbiBwYXNzXG4gKiAgIGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgZm9yIGFuIGV4cGxpY2l0IFRlcnJhZm9ybSBgbnVsbGAgd2l0aG91dFxuICogICBvbWl0dGluZyB0aGUgcGFyYW1ldGVyLlxuICogLSBBIG51bGxhYmxlIHBhcmFtZXRlciBmb2xsb3dlZCBieSBhIHJlcXVpcmVkIG9uZSBrZWVwcyBpdHMgcG9zaXRpb25cbiAqICAgKGpzaWkgY2FuJ3QgZXhwcmVzcyBcIm9wdGlvbmFsIGJ1dCBub3QgdHJhaWxpbmdcIiksIGFuZCBpbnN0ZWFkIGdhaW5zIHRoZVxuICogICBzYW1lIGB8IGNka3RuLklSZXNvbHZhYmxlYCB1bmlvbiBzbyBhIGNhbGxlciBjYW4gc3RpbGwgcGFzcyBhbiBleHBsaWNpdFxuICogICBgY2RrdG4uVG9rZW4ubnVsbFZhbHVlKClgIChhbiBgSVJlc29sdmFibGVgIHJlc29sdmluZyB0byBgbnVsbGAgLSBzZWVcbiAqICAgYFRva2VuLm51bGxWYWx1ZSgpYC9gVG9rZW4uYXNBbnkoKWApIGluIHRoYXQgZml4ZWQgcG9zaXRpb24gLSBrZWVwaW5nXG4gKiAgIHRoZSBwYXJhbWV0ZXIncyByZWFsIHR5cGUgcmF0aGVyIHRoYW4gZ2l2aW5nIHVwIGFsbCB0eXBlIHNhZmV0eSBieVxuICogICB3aWRlbmluZyBpdCB0byBgYW55YC5cbiAqXG4gKiBCb3RoIGNhc2VzIGRvY3VtZW50IHRoZSByZWFsIG1lY2hhbmlzbSBpbiB0aGUgZG9jc3RyaW5nIG5vdGUgcmF0aGVyIHRoYW5cbiAqIGltcGx5aW5nIHRoZSBwbGFpbiBUeXBlU2NyaXB0IGBudWxsYCBsaXRlcmFsIGlzIGFjY2VwdGVkOiB0aGUgdHJhaWxpbmdcbiAqIGNhc2UgY2FuIGFsc28ganVzdCBiZSBvbWl0dGVkLCB0aGUgbWlkLXBvc2l0aW9uIGNhc2UgY2FuJ3QgYmUgb21pdHRlZCBhdFxuICogYWxsIChqc2lpIGNhbid0IGV4cHJlc3MgXCJvcHRpb25hbCBidXQgbm90IHRyYWlsaW5nXCIpLlxuICovXG5mdW5jdGlvbiBhcHBseU51bGxhYmlsaXR5KFxuICBwYXJhbWV0ZXJzOiBGdW5jdGlvblBhcmFtZXRlcltdLFxuICBtb2RlbHM6IEludGVybmFsUGFyYW1ldGVyTW9kZWxbXSxcbik6IEludGVybmFsUGFyYW1ldGVyTW9kZWxbXSB7XG4gIGNvbnN0IHRyYWlsaW5nQ29tcGF0aWJsZSA9IG5ldyBBcnJheShwYXJhbWV0ZXJzLmxlbmd0aCkuZmlsbChmYWxzZSk7XG4gIGxldCBhbGxOdWxsYWJsZVNvRmFyID0gdHJ1ZTtcbiAgZm9yIChsZXQgaSA9IHBhcmFtZXRlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBhbGxOdWxsYWJsZVNvRmFyID0gYWxsTnVsbGFibGVTb0ZhciAmJiBwYXJhbWV0ZXJzW2ldLmlzX251bGxhYmxlID09PSB0cnVlO1xuICAgIHRyYWlsaW5nQ29tcGF0aWJsZVtpXSA9IGFsbE51bGxhYmxlU29GYXI7XG4gIH1cblxuICByZXR1cm4gbW9kZWxzLm1hcCgobW9kZWwsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpbmRleF07XG4gICAgaWYgKCFwYXJhbWV0ZXIuaXNfbnVsbGFibGUpIHJldHVybiBtb2RlbDtcblxuICAgIGNvbnN0IHsgdHNUeXBlLCBkb2NzdHJpbmdUeXBlIH0gPSB3aXRoTnVsbGFibGVSZXNvbHZhYmxlVW5pb24obW9kZWwpO1xuICAgIGNvbnN0IG51bGxhYmlsaXR5Tm90ZSA9IHRyYWlsaW5nQ29tcGF0aWJsZVtpbmRleF1cbiAgICAgID8gXCJPbWl0IG9yIHBhc3MgY2RrdG4uVG9rZW4ubnVsbFZhbHVlKCkgdG8gcmVuZGVyIHRoZSBUZXJyYWZvcm0gbnVsbCBrZXl3b3JkLlwiXG4gICAgICA6IFwiUGFzcyBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKSBmb3IgYW4gZXhwbGljaXQgVGVycmFmb3JtIG51bGwuXCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubW9kZWwsXG4gICAgICAuLi4odHJhaWxpbmdDb21wYXRpYmxlW2luZGV4XSA/IHsgb3B0aW9uYWw6IHRydWUgfSA6IHt9KSxcbiAgICAgIHRzVHlwZSxcbiAgICAgIGRvY3N0cmluZ1R5cGUsXG4gICAgICBkb2NzdHJpbmdOb3RlOiBbbW9kZWwuZG9jc3RyaW5nTm90ZSwgbnVsbGFiaWxpdHlOb3RlXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKFwiIFwiKSxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBNYXBzIGEgcHJvdmlkZXIgZnVuY3Rpb24ncyBkZWNsYXJlZCByZXR1cm4gdHlwZSB0byB0aGUganNpaS1zYWZlXG4gKiBUeXBlU2NyaXB0IHJldHVybiB0eXBlLCB0aGUgYEByZXR1cm5zYCBKU0RvYyB0eXBlLCBhbmQgdGhlIGV4cHJlc3Npb25cbiAqIHRoYXQgdW53cmFwcyB0aGUgYFRlcnJhZm9ybVByb3ZpZGVyRnVuY3Rpb24uaW52b2tlKC4uLilgIGBJUmVzb2x2YWJsZWBcbiAqIGludG8gaXQuXG4gKlxuICoganNpaSByZXR1cm4gcG9zaXRpb25zIGNhbid0IHVzZSB0aGUgYFQgfCBjZGt0bi5JUmVzb2x2YWJsZWAgdW5pb24gdGhhdFxuICogcGFyYW1ldGVycyBjYW4gKHNlZSBgbWFwUGFyYW1ldGVyVHlwZWApLCBzbyBldmVyeSBzaGFwZSB0aGF0IGNhbid0IGJlXG4gKiBsb3NzbGVzc2x5IHVud3JhcHBlZCB0aHJvdWdoIGFuIGBhc1h4eGAgVG9rZW4gaGVscGVyIGZhbGxzIGJhY2sgdG8gdGhlXG4gKiBwbGFpbiBgY2RrdG4uSVJlc29sdmFibGVgIHByb2R1Y2VkIGJ5IGBpbnZva2UoKWAgaXRzZWxmLCB1bndyYXBwZWQuXG4gKiBQcm92aWRlciBmdW5jdGlvbnMgZnJlcXVlbnRseSByZXR1cm4gb2JqZWN0cyAoZS5nLiBldmVyeSBmdW5jdGlvbiBpbiB0aGVcbiAqIGB0aW1lYCBwcm92aWRlciksIHNvIC0gdW5saWtlIGJ1aWx0LWluIGBGbi4qYCBmdW5jdGlvbnMgLSB0aGUgb2JqZWN0IGNhc2VcbiAqIGlzIGEgcHJpbWFyeSBwYXRoLCBub3QgYW4gZXJyb3I6IGl0IGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXNcbiAqIGBkeW5hbWljYC9hIGBsaXN0YC9gc2V0YCBvZiBhbnl0aGluZyBvdGhlciB0aGFuIGBzdHJpbmdgL2BudW1iZXJgIChub1xuICogYGFzQW55TGlzdGAgVG9rZW4gaGVscGVyIGV4aXN0cyksIGFuZCByZXR1cm5lZCBhcyB0aGUgUkFXIGBpbnZva2UoKWBcbiAqIHJlc3VsdC4gYG1hcGAgcmV0dXJucywgdW5saWtlIHRob3NlLCBETyBoYXZlIGEgZnVsbCBzZXQgb2YgdHlwZWQgVG9rZW5cbiAqIGhlbHBlcnMgKGBhc1N0cmluZ01hcGAvYGFzTnVtYmVyTWFwYC9gYXNCb29sZWFuTWFwYC9gYXNBbnlNYXBgKSwgc28gZXZlcnlcbiAqIGBtYXBgIHNoYXBlIGdldHMgYW4gYWN0dWFsIHR5cGVkIHJlY29yZCByZXR1cm4gaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG9cbiAqIGBjZGt0bi5JUmVzb2x2YWJsZWAuXG4gKlxuICogV2hlbmV2ZXIgdGhlIGRlY2xhcmVkIHJldHVybiB0eXBlIElTIGBjZGt0bi5JUmVzb2x2YWJsZWAgKG5vdCBgYW55YCk6XG4gKiB1bmxpa2UgYGhlbHBlcnMudHNgIGBhc0FueWAsIHRoaXMgbXVzdCBOT1QgZ28gdGhyb3VnaFxuICogYGNka3RuLlRva2VuLmFzU3RyaW5nKC4uLilgIC0gYFRva2VuLmFzU3RyaW5nKClgIHByb2R1Y2VzIGFuIGVuY29kZWRcbiAqIHN0cmluZyB0b2tlbiB0aGF0IGBUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKClgIGRvZXMgbm90IHJlY29nbml6ZSwgc29cbiAqIGdlbmVyYXRlZCBzdHJ1Y3Qgc2V0dGVycyAoZS5nLiBhbiBgT3V0cHV0UmVmZXJlbmNlYCBgaW50ZXJuYWxWYWx1ZWApIHRyZWF0XG4gKiBpdCBhcyBhIHBsYWluIG9iamVjdCB3aXRoIG5vIGtub3duIGtleXMgYW5kIHRoZSBhdHRyaWJ1dGUgc2lsZW50bHlcbiAqIHZhbmlzaGVzIGZyb20gc3ludGggb3V0cHV0LiBUaGUgcmF3IGBJUmVzb2x2YWJsZWAgZnJvbSBgaW52b2tlKClgIElTXG4gKiByZWNvZ25pemVkIGJ5IGBUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKClgIGFuZCByZXNvbHZlcyBjb3JyZWN0bHkuXG4gKiBEZWNsYXJpbmcgaXQgYXMgYGNka3RuLklSZXNvbHZhYmxlYCBpbnN0ZWFkIG9mIGBhbnlgIGFsc28gZ2l2ZXMgY2FsbGVyc1xuICogcmVhbCB0eXBlIHNhZmV0eTogYGFueWAgbGV0IGEgY2FsbGVyIHdyaXRlIGByZXN1bHQuaG91cnNgIG9uIGEgdG9rZW4gd2l0aFxuICogbm8gY29tcGlsZS10aW1lIGZlZWRiYWNrLCBzaWxlbnRseSBwcm9kdWNpbmcgYHVuZGVmaW5lZGAgYXQgcnVudGltZTtcbiAqIGBJUmVzb2x2YWJsZWAgaGFzIG5vIHN1Y2ggcHJvcGVydHkgYW5kIGZvcmNlcyB0aGUgY2FsbGVyIHRocm91Z2hcbiAqIGBjZGt0bi5Ub2tlbmAvdGhlIHByb3ZpZGVyJ3Mgc3RydWN0IHR5cGVzIGluc3RlYWQuIGBpbnZva2UoKWAgYWxyZWFkeVxuICogcmV0dXJucyBgSVJlc29sdmFibGVgLCBzbyBubyBjYXN0IGlzIG5lZWRlZCB0byByZXR1cm4gaXQgYXNcbiAqIGBjZGt0bi5JUmVzb2x2YWJsZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcFJldHVyblR5cGUocmV0dXJuVHlwZTogQXR0cmlidXRlVHlwZSk6IHtcbiAgdHNUeXBlOiBzdHJpbmc7XG4gIGRvY3N0cmluZ1R5cGU6IHN0cmluZztcbiAgZG9jc3RyaW5nTm90ZT86IHN0cmluZztcbiAgd3JhcFJldHVybjogKGludm9rZUV4cHJlc3Npb246IHN0cmluZykgPT4gc3RyaW5nO1xufSB7XG4gIGlmIChyZXR1cm5UeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzU3RyaW5nKCR7ZXhwcn0pYCxcbiAgICB9O1xuICB9XG4gIGlmIChyZXR1cm5UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwibnVtYmVyXCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzTnVtYmVyKCR7ZXhwcn0pYCxcbiAgICB9O1xuICB9XG4gIGlmIChyZXR1cm5UeXBlID09PSBcImJvb2xcIikge1xuICAgIC8vIEJvb2xlYW5zIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIHRva2VucyAoc2VlIGhlbHBlcnMudHMgYXNCb29sZWFuKTpcbiAgICAvLyByZXR1cm4gdGhlIElSZXNvbHZhYmxlIHByb2R1Y2VkIGJ5IGludm9rZSgpIHVud3JhcHBlZC4gVGhlIGRvY3N0cmluZ1xuICAgIC8vIHN0aWxsIGRvY3VtZW50cyB0aGUgcmVhbCBjb25jZXB0dWFsIHNoYXBlLlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwiY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwiYm9vbGVhbiB8IElSZXNvbHZhYmxlXCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gZXhwcixcbiAgICB9O1xuICB9XG4gIGlmIChyZXR1cm5UeXBlID09PSBcImR5bmFtaWNcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwiY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwiYW55XCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gZXhwcixcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KHJldHVyblR5cGUpICYmXG4gICAgKHJldHVyblR5cGVbMF0gPT09IFwibGlzdFwiIHx8IHJldHVyblR5cGVbMF0gPT09IFwic2V0XCIpXG4gICkge1xuICAgIC8vIFNhbWUgZG9jdW1lbnRhdGlvbiBjb252ZW50aW9ucyBhcyBgbWFwTGlzdE9yU2V0UGFyYW1ldGVyVHlwZWA6IHRoZVxuICAgIC8vIG5vdGF0aW9uIChgQXJyYXk8Li4uPmAvYFNldDwuLi4+YCkgY2FycmllcyB0aGUgVGVycmFmb3JtIGNvbGxlY3Rpb25cbiAgICAvLyBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHksIGFuZCBvbmx5IHNldHMgZ2V0IGEgcHJvc2Ugbm90ZS5cbiAgICBjb25zdCB3cmFwcGVyID0gcmV0dXJuVHlwZVswXSA9PT0gXCJzZXRcIiA/IFwiU2V0XCIgOiBcIkFycmF5XCI7XG4gICAgY29uc3QgZG9jc3RyaW5nTm90ZSA9XG4gICAgICByZXR1cm5UeXBlWzBdID09PSBcInNldFwiXG4gICAgICAgID8gXCJUZXJyYWZvcm0gc2V0OyBvcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBhbmQgZHVwbGljYXRlIHZhbHVlcyBhcmUgcmVtb3ZlZC5cIlxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlbGVtZW50ID0gcmV0dXJuVHlwZVsxXTtcbiAgICBpZiAoZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHNUeXBlOiBcInN0cmluZ1tdXCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3dyYXBwZXJ9PHN0cmluZz5gLFxuICAgICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzTGlzdCgke2V4cHJ9KWAsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHNUeXBlOiBcIm51bWJlcltdXCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3dyYXBwZXJ9PG51bWJlcj5gLFxuICAgICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzTnVtYmVyTGlzdCgke2V4cHJ9KWAsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBsaXN0L3NldCBvZiBhbnl0aGluZyBlbHNlOiB0aGVyZSBpcyBubyBgYXNBbnlMaXN0YCBUb2tlbiBoZWxwZXIgLVxuICAgIC8vIGZhbGwgYmFjayB0byB0aGUgcmF3IElSZXNvbHZhYmxlLCBzYW1lIHJlYXNvbmluZyBhcyBkeW5hbWljL29iamVjdFxuICAgIC8vIGJlbG93LCBidXQga2VlcCB0aGUgZG9jc3RyaW5nIGhvbmVzdCBhYm91dCB0aGUgcmVhbCBlbGVtZW50IHNoYXBlXG4gICAgLy8gKHJldXNpbmcgbWFwUGFyYW1ldGVyVHlwZSBwdXJlbHkgZm9yIGl0cyBkZXNjcmlwdGl2ZSBkb2NzdHJpbmdUeXBlIC1cbiAgICAvLyBpdHMgdHNUeXBlL2FjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeSBhcmUgaXJyZWxldmFudCBoZXJlKS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcImNka3RuLklSZXNvbHZhYmxlXCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTwke21hcFBhcmFtZXRlclR5cGUoZWxlbWVudCkuZG9jc3RyaW5nVHlwZX0+YCxcbiAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gZXhwcixcbiAgICB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHJldHVyblR5cGUpICYmIHJldHVyblR5cGVbMF0gPT09IFwibWFwXCIpIHtcbiAgICAvLyBVbmxpa2UgbGlzdC9zZXQgYW5kIG9iamVjdC9keW5hbWljLCBldmVyeSBgbWFwYCBzaGFwZSBoYXMgYSBtYXRjaGluZ1xuICAgIC8vIHR5cGVkIFRva2VuIGhlbHBlciAoc2VlIHRva2VuLnRzKSwgc28gaXQgZ2V0cyBhIHJlYWwgdHlwZWQgcmVjb3JkXG4gICAgLy8gcmV0dXJuIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIHRoZSByYXcgSVJlc29sdmFibGUuXG4gICAgY29uc3QgZWxlbWVudCA9IHJldHVyblR5cGVbMV07XG4gICAgaWYgKGVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRzVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVwiLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzU3RyaW5nTWFwKCR7ZXhwcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBudW1iZXIgfVwiLFxuICAgICAgICBkb2NzdHJpbmdUeXBlOiBcInsgW2tleTogc3RyaW5nXTogbnVtYmVyIH1cIixcbiAgICAgICAgd3JhcFJldHVybjogKGV4cHIpID0+IGBjZGt0bi5Ub2tlbi5hc051bWJlck1hcCgke2V4cHJ9KWAsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCA9PT0gXCJib29sXCIpIHtcbiAgICAgIC8vIFRva2VuLmFzQm9vbGVhbk1hcCdzIGRlY2xhcmVkIHJldHVybiB0eXBlIGlzIGB7IFtrZXk6IHN0cmluZ106XG4gICAgICAvLyBib29sZWFuIH1gIChzZWUgdG9rZW4udHMpIC0gdXNlZCB2ZXJiYXRpbSwgbm90IHVuaW9uZWQgd2l0aFxuICAgICAgLy8gSVJlc29sdmFibGU6IHRoZSBtYXAncyBpbmRpdmlkdWFsIGVudHJpZXMgYXJlIHBsYWluIGJvb2xlYW5zIG9uY2VcbiAgICAgIC8vIHVud3JhcHBlZCBieSB0aGUgaGVscGVyLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9XCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cIixcbiAgICAgICAgd3JhcFJldHVybjogKGV4cHIpID0+IGBjZGt0bi5Ub2tlbi5hc0Jvb2xlYW5NYXAoJHtleHByfSlgLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gbWFwIG9mIGFueXRoaW5nIGVsc2UgKG9iamVjdC9keW5hbWljL25lc3RlZCBjb2xsZWN0aW9uKTogYXNBbnlNYXBcbiAgICAvLyBzdGlsbCBnaXZlcyBhIHR5cGVkIChpZiBsb29zZWx5LXR5cGVkKSByZWNvcmQgcmF0aGVyIHRoYW4gZmFsbGluZ1xuICAgIC8vIGJhY2sgdG8gdGhlIHJhdyBJUmVzb2x2YWJsZS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogYW55IH1cIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBhbnkgfVwiLFxuICAgICAgd3JhcFJldHVybjogKGV4cHIpID0+IGBjZGt0bi5Ub2tlbi5hc0FueU1hcCgke2V4cHJ9KWAsXG4gICAgfTtcbiAgfVxuICAvLyBvYmplY3Q6IG5vIHN0cnVjdHVyYWwgdHlwaW5nIGZvciBhcmJpdHJhcnkgcHJvdmlkZXIgZnVuY3Rpb24gcmVzdWx0cyAtXG4gIC8vIGRlY2xhcmVkIGFzIGBjZGt0bi5JUmVzb2x2YWJsZWAsIGFuZCByZXR1cm5lZCBhcyB0aGUgcmF3IGBJUmVzb2x2YWJsZWBcbiAgLy8gZnJvbSBpbnZva2UoKSAoTk9UIHdyYXBwZWQgaW4gYGNka3RuLlRva2VuLmFzU3RyaW5nKC4uLilgLCB3aGljaCB3b3VsZFxuICAvLyBtYWtlIHRoZSByZXN1bHQgdW5yZWNvZ25pemFibGUgdG8gYFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoKWBcbiAgLy8gZG93bnN0cmVhbSAtIHNlZSB0aGUgbWFwUmV0dXJuVHlwZSBkb2NzdHJpbmcgYWJvdmUpLlxuICByZXR1cm4ge1xuICAgIHRzVHlwZTogXCJjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgIGRvY3N0cmluZ1R5cGU6IFwib2JqZWN0XCIsXG4gICAgd3JhcFJldHVybjogKGV4cHIpID0+IGV4cHIsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRnVuY3Rpb25Nb2RlbChcbiAgdGVycmFmb3JtTmFtZTogc3RyaW5nLFxuICBzaWduYXR1cmU6IEZ1bmN0aW9uU2lnbmF0dXJlLFxuKTogUHJvdmlkZXJGdW5jdGlvbk1vZGVsIHtcbiAgY29uc3Qge1xuICAgIHRzVHlwZTogcmV0dXJuVHNUeXBlLFxuICAgIGRvY3N0cmluZ1R5cGU6IHJldHVybkRvY3N0cmluZ1R5cGUsXG4gICAgZG9jc3RyaW5nTm90ZTogcmV0dXJuRG9jc3RyaW5nTm90ZSxcbiAgICB3cmFwUmV0dXJuLFxuICB9ID0gbWFwUmV0dXJuVHlwZShzaWduYXR1cmUucmV0dXJuX3R5cGUpO1xuXG4gIGNvbnN0IHJhd1BhcmFtZXRlcnMgPSBzaWduYXR1cmUucGFyYW1ldGVycyA/PyBbXTtcbiAgY29uc3QgcGFyYW1ldGVycyA9IGFwcGx5TnVsbGFiaWxpdHkoXG4gICAgcmF3UGFyYW1ldGVycyxcbiAgICByYXdQYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT5cbiAgICAgIGJ1aWxkUGFyYW1ldGVyTW9kZWwocGFyYW1ldGVyLCBgYXJnJHtpbmRleH1gKSxcbiAgICApLFxuICApO1xuXG4gIGxldCB2YXJpYWRpY1BhcmFtZXRlcjogSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbCB8IHVuZGVmaW5lZDtcbiAgaWYgKHNpZ25hdHVyZS52YXJpYWRpY19wYXJhbWV0ZXIpIHtcbiAgICBjb25zdCBlbGVtZW50TW9kZWwgPSBidWlsZFBhcmFtZXRlck1vZGVsKFxuICAgICAgc2lnbmF0dXJlLnZhcmlhZGljX3BhcmFtZXRlcixcbiAgICAgIFwidmFsdWVzXCIsXG4gICAgKTtcbiAgICBpZiAoc2lnbmF0dXJlLnZhcmlhZGljX3BhcmFtZXRlci5pc19udWxsYWJsZSkge1xuICAgICAgLy8gQSBudWxsYWJsZSB2YXJpYWRpYyBwYXJhbWV0ZXI6IGpzaWkgY2FuJ3QgZXhwcmVzcyBcImVhY2ggaW5kaXZpZHVhbFxuICAgICAgLy8gYXJndW1lbnQgbWF5IGluZGVwZW5kZW50bHkgYmUgbnVsbFwiIG9uIHRoZSBnZW5lcmF0ZWQgYHZhbHVlczpcbiAgICAgIC8vIEFycmF5PFQ+YCBhcnJheSBwYXJhbWV0ZXIgKGl0J3MgYW4gb3JkaW5hcnkgYXJyYXkgcGFyYW1ldGVyLCBub3QgYVxuICAgICAgLy8gdHJ1ZSByZXN0L3NwcmVhZCBwYXJhbWV0ZXIgLSBvbmx5IHRoZSBpbnZva2UoKSBjYWxsIHNpdGUgc3ByZWFkc1xuICAgICAgLy8gaXQpLCBzbyBldmVyeSBlbGVtZW50J3MgdHlwZSBpbnN0ZWFkIHdpZGVucyB0byBhbHNvIGFjY2VwdCBhblxuICAgICAgLy8gZXhwbGljaXQgYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCwgdGhlIHNhbWUgd2F5IGEgZml4ZWQgbnVsbGFibGVcbiAgICAgIC8vIHBhcmFtZXRlciBkb2VzIChzZWUgYHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbmApOyB0aGUgZG9jc3RyaW5nXG4gICAgICAvLyBrZWVwcyB0aGUgaG9uZXN0IHBlci1lbGVtZW50IHR5cGUgcGx1cyB0aGF0IGd1aWRhbmNlIGluIGl0cyBub3RlLlxuICAgICAgY29uc3QgeyB0c1R5cGUsIGRvY3N0cmluZ1R5cGUgfSA9XG4gICAgICAgIHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbihlbGVtZW50TW9kZWwpO1xuICAgICAgdmFyaWFkaWNQYXJhbWV0ZXIgPSB7XG4gICAgICAgIC4uLmVsZW1lbnRNb2RlbCxcbiAgICAgICAgdHNUeXBlLFxuICAgICAgICBkb2NzdHJpbmdUeXBlOiBgQXJyYXk8JHtkb2NzdHJpbmdUeXBlfT5gLFxuICAgICAgICBkb2NzdHJpbmdOb3RlOiBbXG4gICAgICAgICAgZWxlbWVudE1vZGVsLmRvY3N0cmluZ05vdGUsXG4gICAgICAgICAgXCJQYXNzIGNka3RuLlRva2VuLm51bGxWYWx1ZSgpIGZvciBhbiBleHBsaWNpdCBUZXJyYWZvcm0gbnVsbC5cIixcbiAgICAgICAgXVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuam9pbihcIiBcIiksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOb24tbnVsbGFibGU6IHRoZSBkb2NzdHJpbmcgd3JhcHMgdGhlIGVsZW1lbnQncyBkb2NzdHJpbmcgdHlwZSBpblxuICAgICAgLy8gYEFycmF5PC4uLj5gIGhlcmUgKHJhdGhlciB0aGFuIGluIHRoZSBlbWl0dGVyKSwgc28gZXZlcnkgcGFyYW1ldGVyXG4gICAgICAvLyAtIGZpeGVkIG9yIHZhcmlhZGljIC0gY2FuIHNoYXJlIG9uZSBgQHBhcmFtIHtkb2NzdHJpbmdUeXBlfWBcbiAgICAgIC8vIGVtaXNzaW9uIHBhdGguXG4gICAgICB2YXJpYWRpY1BhcmFtZXRlciA9IHtcbiAgICAgICAgLi4uZWxlbWVudE1vZGVsLFxuICAgICAgICBkb2NzdHJpbmdUeXBlOiBgQXJyYXk8JHtlbGVtZW50TW9kZWwuZG9jc3RyaW5nVHlwZX0+YCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0ZXJyYWZvcm1OYW1lLFxuICAgIG1ldGhvZE5hbWU6IHNhbml0aXplTWV0aG9kTmFtZSh0ZXJyYWZvcm1OYW1lKSxcbiAgICBkZXNjcmlwdGlvbjogc2lnbmF0dXJlLmRlc2NyaXB0aW9uLFxuICAgIHN1bW1hcnk6IHNpZ25hdHVyZS5zdW1tYXJ5LFxuICAgIGRlcHJlY2F0aW9uTWVzc2FnZTogc2lnbmF0dXJlLmRlcHJlY2F0aW9uX21lc3NhZ2UsXG4gICAgcmV0dXJuVHNUeXBlLFxuICAgIHJldHVybkRvY3N0cmluZ1R5cGUsXG4gICAgcmV0dXJuRG9jc3RyaW5nTm90ZSxcbiAgICB3cmFwUmV0dXJuLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgdmFyaWFkaWNQYXJhbWV0ZXIsXG4gIH07XG59XG5cbi8qKlxuICogVGhyb3dzIGlmIHR3byBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgcHJvdmlkZXIgc2FuaXRpemUgdG8gdGhlIHNhbWVcbiAqIGdlbmVyYXRlZCBtZXRob2QgbmFtZS4gVGVycmFmb3JtIGZ1bmN0aW9uIG5hbWVzIGFyZSB1bmlxdWUsIGJ1dFxuICogYHNhbml0aXplTWV0aG9kTmFtZWAgKGNhbWVsQ2FzaW5nLCBgbGVuZ3RoYCAtPiBgbGVuZ3RoT2ZgKSBpcyBub3RcbiAqIG5lY2Vzc2FyaWx5IGluamVjdGl2ZSwgc28gYSByZWFsIC0gaWYgdW5saWtlbHkgLSBwcm92aWRlciBzY2hlbWEgY291bGRcbiAqIHN0aWxsIHByb2R1Y2UgYSBkdXBsaWNhdGUgbWV0aG9kLiBHZW5lcmF0aW9uIGlzIGFib3J0ZWQgcmF0aGVyIHRoYW5cbiAqIHNpbGVudGx5IGVtaXR0aW5nIG9uZSBtZXRob2QgdGhhdCBzaGFkb3dzIHRoZSBvdGhlci5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9NZXRob2ROYW1lQ29sbGlzaW9ucyhcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uczogUHJvdmlkZXJGdW5jdGlvbk1vZGVsW10sXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VlbkJ5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTsgLy8gbWV0aG9kTmFtZSAtPiB0ZXJyYWZvcm1OYW1lXG5cbiAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICBjb25zdCBleGlzdGluZ1RlcnJhZm9ybU5hbWUgPSBzZWVuQnkuZ2V0KGZuLm1ldGhvZE5hbWUpO1xuICAgIGlmIChleGlzdGluZ1RlcnJhZm9ybU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvdmlkZXIgXCIke3Byb3ZpZGVyTmFtZX1cIiBkZWNsYXJlcyB0d28gcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbnMsIGAgK1xuICAgICAgICAgIGBcIiR7ZXhpc3RpbmdUZXJyYWZvcm1OYW1lfVwiIGFuZCBcIiR7Zm4udGVycmFmb3JtTmFtZX1cIiwgdGhhdCBib3RoIGAgK1xuICAgICAgICAgIGBzYW5pdGl6ZSB0byB0aGUgZ2VuZXJhdGVkIG1ldGhvZCBuYW1lIFwiJHtmbi5tZXRob2ROYW1lfVwiLiBgICtcbiAgICAgICAgICBgR2VuZXJhdGlvbiBhYm9ydGVkIHRvIGF2b2lkIHNpbGVudGx5IG92ZXJ3cml0aW5nIG9uZSBtZXRob2Qgd2l0aCBgICtcbiAgICAgICAgICBgdGhlIG90aGVyIC0gcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGFuIGlzc3VlLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBzZWVuQnkuc2V0KGZuLm1ldGhvZE5hbWUsIGZuLnRlcnJhZm9ybU5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGlmIGEgZnVuY3Rpb24ncyBzYW5pdGl6ZWQgYG1ldGhvZE5hbWVgIGxhbmRzIG9uIGEgbWVtYmVyIG5hbWVcbiAqIGBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXJgIGFscmVhZHkgcHV0cyBvbiBldmVyeSB3cmFwcGVyIGNsYXNzIChzZWVcbiAqIGBSRVNFUlZFRF9XUkFQUEVSX01FTUJFUl9OQU1FU2ApLiBVbmxpa2UgYGFzc2VydE5vTWV0aG9kTmFtZUNvbGxpc2lvbnNgLFxuICogd2hpY2ggb25seSBjYXRjaGVzIHR3byAqZnVuY3Rpb25zKiBjb2xsaWRpbmcgd2l0aCBlYWNoIG90aGVyLCB0aGlzIGNhdGNoZXNcbiAqIGEgc2luZ2xlIGZ1bmN0aW9uIGNvbGxpZGluZyB3aXRoIHRoZSB3cmFwcGVyIGNsYXNzIGl0c2VsZiAtIGUuZy4gYVxuICogVGVycmFmb3JtIGZ1bmN0aW9uIGxpdGVyYWxseSBuYW1lZCBcImNvbnN0cnVjdG9yXCIsIG9yIFwicHJvdmlkZXJfbG9jYWxfbmFtZVwiXG4gKiBjYW1lbENhc2luZyB0byBcInByb3ZpZGVyTG9jYWxOYW1lXCIuXG4gKlxuICogVGhpcyBpbnRlbnRpb25hbGx5IGRvZXMgTk9UIGFsc28gY2hlY2sgc2FuaXRpemVkICpwYXJhbWV0ZXIqIG5hbWVzIGFnYWluc3RcbiAqIFwicHJvdmlkZXJMb2NhbE5hbWVcIjogcGFyYW1ldGVycyBhcmUgZGVjbGFyZWQgaW4gdGhlIGdlbmVyYXRlZCBtZXRob2QncyBvd25cbiAqIHNjb3BlLCBub3QgdGhlIGNsYXNzJ3MsIHNvIGEgcGFyYW1ldGVyIG5hbWVkIGBwcm92aWRlckxvY2FsTmFtZWAgc2hhZG93c1xuICogdGhlIGNsYXNzIGZpZWxkIHdpdGhpbiB0aGF0IG1ldGhvZCBib2R5IHdpdGhvdXQgY29sbGlkaW5nIHdpdGggaXQgKHZhbGlkLFxuICogaWYgY29uZnVzaW5nLCBUeXBlU2NyaXB0KSAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gYWJvcnQgZ2VuZXJhdGlvbiBvdmVyLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb1Jlc2VydmVkV3JhcHBlck1lbWJlckNvbGxpc2lvbnMoXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBmdW5jdGlvbnM6IFByb3ZpZGVyRnVuY3Rpb25Nb2RlbFtdLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgZm4gb2YgZnVuY3Rpb25zKSB7XG4gICAgaWYgKFJFU0VSVkVEX1dSQVBQRVJfTUVNQkVSX05BTUVTLmhhcyhmbi5tZXRob2ROYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvdmlkZXIgXCIke3Byb3ZpZGVyTmFtZX1cIiBkZWNsYXJlcyBhIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb24gYCArXG4gICAgICAgICAgYFwiJHtmbi50ZXJyYWZvcm1OYW1lfVwiIHRoYXQgc2FuaXRpemVzIHRvIHRoZSBnZW5lcmF0ZWQgbWV0aG9kIG5hbWUgYCArXG4gICAgICAgICAgYFwiJHtmbi5tZXRob2ROYW1lfVwiLCB3aGljaCBjb2xsaWRlcyB3aXRoIGEgbWVtYmVyIHRoYXQgYCArXG4gICAgICAgICAgYFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlciBhbHJlYWR5IHB1dHMgb24gZXZlcnkgYCArXG4gICAgICAgICAgYFwiPFByb3ZpZGVyPlByb3ZpZGVyRnVuY3Rpb25zXCIgd3JhcHBlciBjbGFzcyAodGhlIGNsYXNzIGAgK1xuICAgICAgICAgIGBjb25zdHJ1Y3Rvciwgb3IgaXRzIFwicHJvdmlkZXJMb2NhbE5hbWVcIiBmaWVsZCkuIEdlbmVyYXRpb24gYCArXG4gICAgICAgICAgYGFib3J0ZWQgdG8gYXZvaWQgZW1pdHRpbmcgaW52YWxpZCBUeXBlU2NyaXB0IG9yIHNpbGVudGx5IGAgK1xuICAgICAgICAgIGBzaGFkb3dpbmcgdGhhdCBtZW1iZXIgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYW4gaXNzdWUuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGlmIHR3byBwYXJhbWV0ZXJzIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIChpbmNsdWRpbmcgdGhlIHZhcmlhZGljXG4gKiBwYXJhbWV0ZXIpIHNhbml0aXplIHRvIHRoZSBzYW1lIGdlbmVyYXRlZCBwYXJhbWV0ZXIgbmFtZSwgZm9yIHRoZSBzYW1lXG4gKiByZWFzb24gYXMgYGFzc2VydE5vTWV0aG9kTmFtZUNvbGxpc2lvbnNgIGFib3ZlIGJ1dCBhdCB0aGUgcGFyYW1ldGVyIGxldmVsLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb1BhcmFtZXRlck5hbWVDb2xsaXNpb25zKFxuICBwcm92aWRlck5hbWU6IHN0cmluZyxcbiAgZm46IFByb3ZpZGVyRnVuY3Rpb25Nb2RlbCxcbik6IHZvaWQge1xuICBjb25zdCBzZWVuQnkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpOyAvLyBzYW5pdGl6ZWQgbmFtZSAtPiB0ZXJyYWZvcm1OYW1lXG4gIGNvbnN0IGFsbFBhcmFtZXRlcnMgPSBmbi52YXJpYWRpY1BhcmFtZXRlclxuICAgID8gWy4uLmZuLnBhcmFtZXRlcnMsIGZuLnZhcmlhZGljUGFyYW1ldGVyXVxuICAgIDogZm4ucGFyYW1ldGVycztcblxuICBmb3IgKGNvbnN0IHBhcmFtIG9mIGFsbFBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBleGlzdGluZ1RlcnJhZm9ybU5hbWUgPSBzZWVuQnkuZ2V0KHBhcmFtLm5hbWUpO1xuICAgIGlmIChleGlzdGluZ1RlcnJhZm9ybU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvdmlkZXIgXCIke3Byb3ZpZGVyTmFtZX1cIiBmdW5jdGlvbiBcIiR7Zm4udGVycmFmb3JtTmFtZX1cIiBkZWNsYXJlcyBgICtcbiAgICAgICAgICBgdHdvIHBhcmFtZXRlcnMsIFwiJHtleGlzdGluZ1RlcnJhZm9ybU5hbWV9XCIgYW5kIGAgK1xuICAgICAgICAgIGBcIiR7cGFyYW0udGVycmFmb3JtTmFtZX1cIiwgdGhhdCBib3RoIHNhbml0aXplIHRvIHRoZSBnZW5lcmF0ZWQgYCArXG4gICAgICAgICAgYHBhcmFtZXRlciBuYW1lIFwiJHtwYXJhbS5uYW1lfVwiLiBHZW5lcmF0aW9uIGFib3J0ZWQgdG8gYXZvaWQgYCArXG4gICAgICAgICAgYHNpbGVudGx5IGRyb3BwaW5nIG9uZSBwYXJhbWV0ZXIgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYW4gaXNzdWUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlZW5CeS5zZXQocGFyYW0ubmFtZSwgcGFyYW0udGVycmFmb3JtTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgdGhlIHByb3ZpZGVyJ3Mgb3duIGNvbmZpZyBzY2hlbWEgZGVjbGFyZXMgYW4gYXR0cmlidXRlIHdob3NlXG4gKiBnZW5lcmF0ZWQgcHJvcGVydHkgbmFtZSAoc2VlIGBBdHRyaWJ1dGVNb2RlbC5uYW1lYCAvXG4gKiBgZXNjYXBlQXR0cmlidXRlTmFtZWApIGlzIGV4YWN0bHkgXCJmdW5jdGlvbnNcIiwgd2hpbGUgdGhlIHByb3ZpZGVyIGFsc29cbiAqIGRlY2xhcmVzIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb25zLiBUaGF0IGNvbWJpbmF0aW9uIHdvdWxkIGNvbGxpZGUgd2l0aFxuICogdGhlIG1lbW9pemVkIGBmdW5jdGlvbnNgIGdldHRlciBgUmVzb3VyY2VFbWl0dGVyYCBlbWl0cyBvbiB0aGUgcHJvdmlkZXJcbiAqIGNsYXNzIChzZWUgYHJlc291cmNlLWVtaXR0ZXIudHNgJ3MgYGVtaXRGdW5jdGlvbnNHZXR0ZXJgKSAtIG9uZSB3b3VsZFxuICogc2lsZW50bHkgc2hhZG93IHRoZSBvdGhlci4gU2FtZSBsb3VkLWZhaWx1cmUgY29udmVudGlvbiBhc1xuICogYGFzc2VydE5vTWV0aG9kTmFtZUNvbGxpc2lvbnNgL2Bhc3NlcnROb1BhcmFtZXRlck5hbWVDb2xsaXNpb25zYCBhYm92ZTpcbiAqIGdlbmVyYXRpb24gaXMgYWJvcnRlZCByYXRoZXIgdGhhbiBzaWxlbnRseSBwaWNraW5nIGEgd2lubmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm9GdW5jdGlvbnNHZXR0ZXJDb2xsaXNpb24oXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBhdHRyaWJ1dGVOYW1lczogc3RyaW5nW10sXG4pOiB2b2lkIHtcbiAgaWYgKGF0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKFwiZnVuY3Rpb25zXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFByb3ZpZGVyIFwiJHtwcm92aWRlck5hbWV9XCIgZGVjbGFyZXMgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kIGl0cyBgICtcbiAgICAgICAgYG93biBjb25maWcgc2NoZW1hIGFsc28gaGFzIGFuIGF0dHJpYnV0ZSB0aGF0IGdlbmVyYXRlcyB0aGUgcHJvcGVydHkgYCArXG4gICAgICAgIGBuYW1lIFwiZnVuY3Rpb25zXCIgb24gdGhlIHByb3ZpZGVyIGNsYXNzLiBUaGlzIGNvbGxpZGVzIHdpdGggdGhlIGAgK1xuICAgICAgICBgZ2VuZXJhdGVkIFwiZnVuY3Rpb25zXCIgZ2V0dGVyIHVzZWQgdG8gaW52b2tlIHByb3ZpZGVyLWRlZmluZWQgYCArXG4gICAgICAgIGBmdW5jdGlvbnMuIEdlbmVyYXRpb24gYWJvcnRlZCB0byBhdm9pZCBzaWxlbnRseSBzaGFkb3dpbmcgb25lIHdpdGggYCArXG4gICAgICAgIGB0aGUgb3RoZXIgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYW4gaXNzdWUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBtb2RlbCBmb3IgYSBwcm92aWRlcidzIGBwcm92aWRlci1mdW5jdGlvbnMvaW5kZXgudHNgIGZpbGUgZnJvbVxuICogaXRzIHByb3ZpZGVyIHNjaGVtYSBgZnVuY3Rpb25zYCBtYXAuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgcHJvdmlkZXJcbiAqIGRlY2xhcmVzIG5vIGZ1bmN0aW9ucyAtIGNhbGxlcnMgc2hvdWxkIHNraXAgZW1pdHRpbmcgdGhlIGZpbGUgZW50aXJlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwoXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBmdW5jdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IEZ1bmN0aW9uU2lnbmF0dXJlIH0gfCB1bmRlZmluZWQsXG4pOiBQcm92aWRlckZ1bmN0aW9uc01vZGVsIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGZ1bmN0aW9ucyA/PyB7fSk7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBtYXBwZWRGdW5jdGlvbnMgPSBlbnRyaWVzXG4gICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgLm1hcCgoW25hbWUsIHNpZ25hdHVyZV0pID0+IGJ1aWxkRnVuY3Rpb25Nb2RlbChuYW1lLCBzaWduYXR1cmUpKTtcblxuICBhc3NlcnROb01ldGhvZE5hbWVDb2xsaXNpb25zKHByb3ZpZGVyTmFtZSwgbWFwcGVkRnVuY3Rpb25zKTtcbiAgYXNzZXJ0Tm9SZXNlcnZlZFdyYXBwZXJNZW1iZXJDb2xsaXNpb25zKHByb3ZpZGVyTmFtZSwgbWFwcGVkRnVuY3Rpb25zKTtcbiAgZm9yIChjb25zdCBmbiBvZiBtYXBwZWRGdW5jdGlvbnMpIHtcbiAgICBhc3NlcnROb1BhcmFtZXRlck5hbWVDb2xsaXNpb25zKHByb3ZpZGVyTmFtZSwgZm4pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlck5hbWUsXG4gICAgY2xhc3NOYW1lOiBgJHt0b1Bhc2NhbENhc2UocHJvdmlkZXJOYW1lKX1Qcm92aWRlckZ1bmN0aW9uc2AsXG4gICAgZnVuY3Rpb25zOiBtYXBwZWRGdW5jdGlvbnMsXG4gIH07XG59XG4iXX0=
|
|
666
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZnVuY3Rpb24tbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcHJvdmlkZXItZnVuY3Rpb24tbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0ekJBLDRFQWNDO0FBT0Qsa0VBc0JDO0FBdjJCRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHlDQUFzRDtBQXlHdEQsNkVBQTZFO0FBQzdFLHdFQUF3RTtBQUN4RSw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLHVFQUF1RTtBQUN2RSw2RUFBNkU7QUFDN0UsNkNBQTZDO0FBQzdDLE1BQU0sd0JBQXdCLEdBQStCO0lBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsOEJBQThCO0lBQ3ZELE1BQU0sRUFBRSxLQUFLLEVBQUUsc0JBQXNCO0NBQ3RDLENBQUM7QUFFRixTQUFTLHFCQUFxQixDQUFDLElBQVk7O0lBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUEsdUJBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxPQUFPLE1BQUEsd0JBQXdCLENBQUMsVUFBVSxDQUFDLG1DQUFJLFVBQVUsQ0FBQztBQUM1RCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFZO0lBQ3RDLElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLFVBQVUsQ0FBQyxDQUFDLHFDQUFxQztJQUMvRSxPQUFPLElBQUEsdUJBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsd0ZBQXdGO0FBQ3hGLDhFQUE4RTtBQUM5RSxxREFBcUQ7QUFDckQsNkVBQTZFO0FBQzdFLDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsNkJBQTZCO0FBQzdCLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsNEVBQTRFO0FBQzVFLDBDQUEwQztBQUMxQyw4RUFBOEU7QUFDOUUscUJBQXFCO0FBQ3JCLE1BQU0sNkJBQTZCLEdBQUcs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Q2hELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFM0MsTUFBTSxlQUFlLEdBQUcsT0FBTztTQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRW5FLDRCQUE0QixDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM1RCx1Q0FBdUMsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdkUsS0FBSyxNQUFNLEVBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU87UUFDTCxZQUFZO1FBQ1osU0FBUyxFQUFFLEdBQUcsSUFBQSx3QkFBWSxFQUFDLFlBQVksQ0FBQyxtQkFBbUI7UUFDM0QsU0FBUyxFQUFFLGVBQWU7S0FDM0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgdG9DYW1lbENhc2UsIHRvUGFzY2FsQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZVR5cGUsXG4gIEZ1bmN0aW9uUGFyYW1ldGVyLFxuICBGdW5jdGlvblNpZ25hdHVyZSxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5cbi8qKlxuICogQSBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9uIHBhcmFtZXRlciAocG9zaXRpb25hbCBvciB0aGUgdHJhaWxpbmdcbiAqIHZhcmlhZGljIG9uZSksIG1hcHBlZCB0byB0aGUganNpaS1zYWZlIFR5cGVTY3JpcHQgdHlwZSB1c2VkIGluIHRoZVxuICogZ2VuZXJhdGVkIG1ldGhvZCBzaWduYXR1cmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsIHtcbiAgcmVhZG9ubHkgdGVycmFmb3JtTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRzVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEpTRG9jIHR5cGUgZXhwcmVzc2lvbiBlbWl0dGVkIGluc2lkZSB0aGUgYEBwYXJhbSB7Li4ufWAgYnJhY2VzLlxuICAgKiBBIHB1cmUgdHlwZSBleHByZXNzaW9uIG9ubHkgLSBwcm9zZSAoVGVycmFmb3JtIGxpc3Qvc2V0IHNlbWFudGljcyxcbiAgICogYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCBndWlkYW5jZSkgYmVsb25ncyBpbiBgZG9jc3RyaW5nTm90ZWAuXG4gICAqL1xuICByZWFkb25seSBkb2NzdHJpbmdUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9zZSBhcHBlbmRlZCBhZnRlciB0aGUgcGFyYW1ldGVyIG5hbWUgKGFuZCBgZGVzY3JpcHRpb25gLCBpZiBhbnkpIGluXG4gICAqIHRoZSBlbWl0dGVkIGBAcGFyYW1gIGxpbmUgLSBlLmcuIHNldC1vcmRlcmluZyBzZW1hbnRpY3Mgb3IgaG93IHRvIHBhc3NcbiAgICogYW4gZXhwbGljaXQgVGVycmFmb3JtIGBudWxsYC4gT2ZmaWNpYWwgSlNEb2MgcGxhY2VzIG9ubHkgdGhlIHR5cGVcbiAgICogZXhwcmVzc2lvbiBpbnNpZGUgdGhlIGJyYWNlcywgc28gdGhpcyBtdXN0IG5ldmVyIGJlIGZvbGRlZCBpbnRvXG4gICAqIGBkb2NzdHJpbmdUeXBlYC5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3N0cmluZ05vdGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVHJ1ZSB3aGVuIHRoaXMgKGZpeGVkLCBub24tdmFyaWFkaWMpIHBhcmFtZXRlciBpcyBlbWl0dGVkIGFzIGFcbiAgICoganNpaS1vcHRpb25hbCBUeXBlU2NyaXB0IHBhcmFtZXRlciAoYG5hbWU/OiBUYCkgLSBzZWUgdGhlXG4gICAqIGlzX251bGxhYmxlL3RyYWlsaW5nLWNvbXBhdGliaWxpdHkgaGFuZGxpbmcgaW4gYGFwcGx5TnVsbGFiaWxpdHlgLlxuICAgKiBOZXZlciBzZXQgb24gdGhlIHZhcmlhZGljIHBhcmFtZXRlcjogYW4gYXJyYXkgcGFyYW1ldGVyIGNhbid0IGJlIGA/YC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBgUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsYCBwbHVzIHRoZSBvbmUgYml0IG9mIGluZm9ybWF0aW9uIHRoYXQnc1xuICogb25seSBuZWVkZWQgd2hpbGUgYnVpbGRpbmcgdGhlIG1vZGVsIChzZWUgYG1hcFBhcmFtZXRlclR5cGVgL1xuICogYGFwcGx5TnVsbGFiaWxpdHlgKSwgbmV2ZXIgYnkgdGhlIGVtaXR0ZXI6IHdoZXRoZXIgYHRzVHlwZWAgYWxyZWFkeVxuICogYWNjZXB0cyBhbiBhcmJpdHJhcnkgYGNka3RuLklSZXNvbHZhYmxlYCBpbiB0aGlzIHBvc2l0aW9uIChhIGJhcmVcbiAqIGJvb2xlYW4vY29sbGVjdGlvbi1vZi1ib29sZWFuIHRva2VuLCBgYW55YCwgb3IgYW4gZXhwbGljaXRcbiAqIGB8IGNka3RuLklSZXNvbHZhYmxlYCB1bmlvbiBhbHJlYWR5IHByZXNlbnQpLiBOdWxsYWJpbGl0eSBoYW5kbGluZyB1c2VzXG4gKiB0aGlzIHRvIGRlY2lkZSB3aGV0aGVyIGl0IG5lZWRzIHRvIGFwcGVuZCBhbm90aGVyIGB8IGNka3RuLklSZXNvbHZhYmxlYFxuICogc28gYSBjYWxsZXIgY2FuIHBhc3MgYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCAtIHdpdGhvdXQgcmVzb3J0aW5nIHRvXG4gKiByZS1kZXJpdmluZyB0aGF0IGFuc3dlciB3aXRoIGEgc3RyaW5nIHNlYXJjaCBvdmVyIGB0c1R5cGVgLlxuICovXG5pbnRlcmZhY2UgSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbCBleHRlbmRzIFByb3ZpZGVyRnVuY3Rpb25QYXJhbWV0ZXJNb2RlbCB7XG4gIHJlYWRvbmx5IGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9uLCBtYXBwZWQgdG8gYSBzdGF0aWMgbWV0aG9kIG9uIHRoZVxuICogZ2VuZXJhdGVkIGA8UHJvdmlkZXI+UHJvdmlkZXJGdW5jdGlvbnNgIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRnVuY3Rpb25Nb2RlbCB7XG4gIHJlYWRvbmx5IHRlcnJhZm9ybU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbWV0aG9kTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgc3VtbWFyeT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRlcnJhZm9ybSAoPj0xLjgpIGRlcHJlY2F0aW9uIG1lc3NhZ2UgZm9yIHRoZSBmdW5jdGlvbiwgc3VyZmFjZWQgYXMgYW5cbiAgICogYEBkZXByZWNhdGVkYCBKU0RvYyB0YWcuIE9wZW5Ub2Z1IG5ldmVyIGVtaXRzIHRoaXMgZmllbGQgLSBzZWVcbiAgICogYEZ1bmN0aW9uU2lnbmF0dXJlLmRlcHJlY2F0aW9uX21lc3NhZ2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcmVjYXRpb25NZXNzYWdlPzogc3RyaW5nO1xuICByZWFkb25seSByZXR1cm5Uc1R5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBgQHJldHVybnMgey4uLn1gIEpTRG9jIHR5cGUsIGRlc2NyaWJpbmcgdGhlIGNvbmNlcHR1YWwvVGVycmFmb3JtXG4gICAqIHNoYXBlIG9mIHRoZSByZXR1cm4gdmFsdWUgLSBzZWUgYG1hcFJldHVyblR5cGVgLiBUaGlzIGRlbGliZXJhdGVseSBjYW5cbiAgICogZGlmZmVyIGZyb20gYHJldHVyblRzVHlwZWAgKGUuZy4gYSBgYm9vbGAgcmV0dXJuIGlzIGRlY2xhcmVkXG4gICAqIGBjZGt0bi5JUmVzb2x2YWJsZWAgYnV0IGRvY3VtZW50ZWQgYXMgYGJvb2xlYW4gfCBJUmVzb2x2YWJsZWApLCB0aGUgc2FtZVxuICAgKiB3YXkgYSBwYXJhbWV0ZXIncyBgZG9jc3RyaW5nVHlwZWAgY2FuIGRpZmZlciBmcm9tIGl0cyBgdHNUeXBlYC5cbiAgICovXG4gIHJlYWRvbmx5IHJldHVybkRvY3N0cmluZ1R5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIFByb3NlIGFwcGVuZGVkIGFmdGVyIHRoZSBgQHJldHVybnMgey4uLn1gIGJyYWNlcyAoZS5nLiBUZXJyYWZvcm1cbiAgICogbGlzdC9zZXQgc2VtYW50aWNzKSAtIHRoZSByZXR1cm4tc2lkZSBjb3VudGVycGFydCBvZiBhIHBhcmFtZXRlcidzXG4gICAqIGBkb2NzdHJpbmdOb3RlYC5cbiAgICovXG4gIHJlYWRvbmx5IHJldHVybkRvY3N0cmluZ05vdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXcmFwcyB0aGUgYGNka3RuLlRlcnJhZm9ybVByb3ZpZGVyRnVuY3Rpb24uaW52b2tlKC4uLilgIGNhbGwgZXhwcmVzc2lvblxuICAgKiBpbnRvIHRoZSBtZXRob2QncyBgcmV0dXJuYCBzdGF0ZW1lbnQgKGUuZy4gd3JhcHBpbmcgaXQgaW5cbiAgICogYGNka3RuLlRva2VuLmFzU3RyaW5nKC4uLilgLCBvciByZXR1cm5pbmcgaXQgdW53cmFwcGVkIGZvciBgYm9vbGApLlxuICAgKi9cbiAgcmVhZG9ubHkgd3JhcFJldHVybjogKGludm9rZUV4cHJlc3Npb246IHN0cmluZykgPT4gc3RyaW5nO1xuICByZWFkb25seSBwYXJhbWV0ZXJzOiBQcm92aWRlckZ1bmN0aW9uUGFyYW1ldGVyTW9kZWxbXTtcbiAgcmVhZG9ubHkgdmFyaWFkaWNQYXJhbWV0ZXI/OiBQcm92aWRlckZ1bmN0aW9uUGFyYW1ldGVyTW9kZWw7XG59XG5cbi8qKlxuICogQWxsIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb25zIG9mIGEgc2luZ2xlIHByb3ZpZGVyLCBtYXBwZWQgdG8gYSBzaW5nbGVcbiAqIGdlbmVyYXRlZCBgcHJvdmlkZXJzLzxwcm92aWRlcj4vcHJvdmlkZXItZnVuY3Rpb25zL2luZGV4LnRzYCBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwge1xuICByZWFkb25seSBwcm92aWRlck5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZ1bmN0aW9uczogUHJvdmlkZXJGdW5jdGlvbk1vZGVsW107XG59XG5cbi8vIFBhcmFtZXRlciBuYW1lcyB0aGF0IGNvbGxpZGUgd2l0aCBhIHJlc2VydmVkIHdvcmQvaWRlbnRpZmllciBpbiBvbmUgb2YgdGhlXG4vLyBqc2lpIHRhcmdldCBsYW5ndWFnZXMuIFRoaXMgaXMgdGhlIHNpYmxpbmcgdGFibGUgZm9yIHByb3ZpZGVyLWRlZmluZWRcbi8vIGZ1bmN0aW9uczogdG9vbHMvZ2VuZXJhdGUtZnVuY3Rpb24tYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS50cyBob2xkcyB0aGVcbi8vIGNhbm9uaWNhbCAoYW5kIHNlcGFyYXRlbHkgbWFpbnRhaW5lZCkgdGFibGUgZm9yIGJ1aWx0LWluIGBGbi4qYCBmdW5jdGlvbnMuXG4vLyBUaGUgdHdvIGFyZSBpbnRlbnRpb25hbGx5IG5vdCBzaGFyZWQgLSB0aGF0IHNjcmlwdCBsaXZlcyBvdXRzaWRlIHRoZVxuLy8gcGFja2FnZXMvIGJ1aWxkIGFuZCBnZW5lcmF0ZXMgYSBkaWZmZXJlbnQgYXJ0aWZhY3QgLSBidXQgYW55IHJlc2VydmVkIG5hbWVcbi8vIGFkZGVkIHRoZXJlIHNob3VsZCBiZSBjb25zaWRlcmVkIGhlcmUgdG9vLlxuY29uc3QgUkVTRVJWRURfUEFSQU1FVEVSX05BTUVTOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgZGVmYXVsdDogXCJkZWZhdWx0VmFsdWVcIiwgLy8gcmVzZXJ2ZWQgd29yZCBpbiBUeXBlU2NyaXB0XG4gIHN0cmluZzogXCJzdHJcIiwgLy8gY2F1c2VzIGlzc3VlcyBpbiBHb1xufTtcblxuZnVuY3Rpb24gc2FuaXRpemVQYXJhbWV0ZXJOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNhbWVsQ2FzZWQgPSB0b0NhbWVsQ2FzZShuYW1lKTtcbiAgcmV0dXJuIFJFU0VSVkVEX1BBUkFNRVRFUl9OQU1FU1tjYW1lbENhc2VkXSA/PyBjYW1lbENhc2VkO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1ldGhvZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG5hbWUgPT09IFwibGVuZ3RoXCIpIHJldHVybiBcImxlbmd0aE9mXCI7IC8vIHJlc2VydmVkIG9uIGpzaWktZ2VuZXJhdGVkIGNsYXNzZXNcbiAgcmV0dXJuIHRvQ2FtZWxDYXNlKG5hbWUpO1xufVxuXG4vLyBNZW1iZXJzIHRoYXQgYFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcmAgKHNlZSBgZW1pdHRlci9wcm92aWRlci1mdW5jdGlvbnMtZW1pdHRlci50c2ApXG4vLyBpdHNlbGYgcHV0cyBvbiBldmVyeSBnZW5lcmF0ZWQgYDxQcm92aWRlcj5Qcm92aWRlckZ1bmN0aW9uc2Agd3JhcHBlciBjbGFzcyxcbi8vIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggZnVuY3Rpb25zIGEgcHJvdmlkZXIgZGVjbGFyZXM6XG4vLyAgIC0gXCJjb25zdHJ1Y3RvclwiOiB0aGUgY2xhc3MncyBvd24gY29uc3RydWN0b3IsIHdoaWNoIHRha2VzIHRoZSBwcm92aWRlcidzXG4vLyAgICAgYHByb3ZpZGVyTG9jYWxOYW1lYC4gQSBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9uIG5hbWVkIFwiY29uc3RydWN0b3JcIlxuLy8gICAgIHdvdWxkIHNhbml0aXplIHRvIGEgKnNlY29uZCogYGNvbnN0cnVjdG9yYCBtZW1iZXIgb24gdGhlIGNsYXNzLCB3aGljaFxuLy8gICAgIGlzIGludmFsaWQgVHlwZVNjcmlwdC5cbi8vICAgLSBcInByb3ZpZGVyTG9jYWxOYW1lXCI6IHRoZSBgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlckxvY2FsTmFtZTogc3RyaW5nYFxuLy8gICAgIGZpZWxkIHRoZSBjb25zdHJ1Y3RvciBhc3NpZ25zIChzZWUgdGhlIGVtaXR0ZXIncyBgZW1pdENsYXNzSGVhZGVyYC9cbi8vICAgICBjb25zdHJ1Y3RvciBlbWlzc2lvbikuIEEgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiBzYW5pdGl6aW5nIHRvIHRoaXNcbi8vICAgICBuYW1lIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGF0IGZpZWxkLlxuLy8gSWYgYFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcmAgZXZlciBncm93cyBtb3JlIG1lbWJlcnMgb24gdGhlIHdyYXBwZXIgY2xhc3MsXG4vLyBhZGQgdGhlbSBoZXJlIHRvby5cbmNvbnN0IFJFU0VSVkVEX1dSQVBQRVJfTUVNQkVSX05BTUVTID0gbmV3IFNldChbXG4gIFwiY29uc3RydWN0b3JcIixcbiAgXCJwcm92aWRlckxvY2FsTmFtZVwiLFxuXSk7XG5cbi8qKlxuICogUmVzdWx0IG9mIG1hcHBpbmcgYSBzaW5nbGUgVGVycmFmb3JtIGF0dHJpYnV0ZSB0eXBlIGludG8gYSBqc2lpLXNhZmVcbiAqIHBhcmFtZXRlciBzaGFwZSAoc2VlIGBtYXBQYXJhbWV0ZXJUeXBlYCkuXG4gKi9cbmludGVyZmFjZSBNYXBwZWRQYXJhbWV0ZXJUeXBlIHtcbiAgcmVhZG9ubHkgdHNUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRvY3N0cmluZ1R5cGU6IHN0cmluZztcbiAgLyoqIFNlZSBgUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsLmRvY3N0cmluZ05vdGVgLiAqL1xuICByZWFkb25seSBkb2NzdHJpbmdOb3RlPzogc3RyaW5nO1xuICAvKipcbiAgICogVHJ1ZSB3aGVuIGB0c1R5cGVgIGFscmVhZHkgYWNjZXB0cyBhbiBhcmJpdHJhcnkgYGNka3RuLklSZXNvbHZhYmxlYCBpblxuICAgKiB0aGlzIHBvc2l0aW9uIHdpdGhvdXQgbmVlZGluZyBhbiBleHRyYSBgfCBjZGt0bi5JUmVzb2x2YWJsZWAgdW5pb24gLVxuICAgKiBzZWUgYEludGVybmFsUGFyYW1ldGVyTW9kZWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBicmFja2V0LWNvbXBvc2FibGUgKFwiVFtdXCIsIG5vIHRvcC1sZXZlbCB1bmlvbikgVHlwZVNjcmlwdC9kb2NzdHJpbmdcbiAqIHR5cGUgZm9yIGFuIGVsZW1lbnQgdGhhdCBjYW4gbmVzdCBpbnNpZGUgYW4gYXJyYXkgd2l0aG91dCBJVFNFTEYgbmVlZGluZ1xuICogdGhlIHdob2xlLWNvbGxlY3Rpb24gdG9rZW4gdW5pb24gYXQgdGhhdCBsZXZlbDogYHN0cmluZ2AsIGBudW1iZXJgLCBvciBhXG4gKiBsaXN0L3NldCBvZiBvbmUgb2YgdGhvc2UsIHJlY3Vyc2l2ZWx5IChlLmcuIGBsaXN0KGxpc3Qoc3RyaW5nKSlgIGJvdHRvbXNcbiAqIG91dCBhdCBgc3RyaW5nYCkuIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yIGFueXRoaW5nIGVsc2UgKGBib29sYCwgYG1hcGAsXG4gKiBgb2JqZWN0YCwgYGR5bmFtaWNgLCBvciBhIG5lc3RlZCBjb2xsZWN0aW9uIHRoYXQgZG9lc24ndCBpdHNlbGYgcXVhbGlmeSksXG4gKiBzbyB0aGUgY2FsbGVyIGZhbGxzIGJhY2sgdG8gd2lkZW5pbmcgdGhlIHdob2xlIHBhcmFtZXRlciB0b1xuICogYGFueVtdIHwgY2RrdG4uSVJlc29sdmFibGVgIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIHBsYWluQXJyYXlFbGVtZW50VHlwZShcbiAgdHlwZTogQXR0cmlidXRlVHlwZSxcbik6IHsgdHNUeXBlOiBzdHJpbmc7IGRvY3N0cmluZ1R5cGU6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHJldHVybiB7IHRzVHlwZTogXCJzdHJpbmdcIiwgZG9jc3RyaW5nVHlwZTogXCJzdHJpbmdcIiB9O1xuICBpZiAodHlwZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHsgdHNUeXBlOiBcIm51bWJlclwiLCBkb2NzdHJpbmdUeXBlOiBcIm51bWJlclwiIH07XG4gIGlmIChBcnJheS5pc0FycmF5KHR5cGUpICYmICh0eXBlWzBdID09PSBcImxpc3RcIiB8fCB0eXBlWzBdID09PSBcInNldFwiKSkge1xuICAgIGNvbnN0IGlubmVyID0gcGxhaW5BcnJheUVsZW1lbnRUeXBlKHR5cGVbMV0pO1xuICAgIGlmICghaW5uZXIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogYCR7aW5uZXIudHNUeXBlfVtdYCxcbiAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3R5cGVbMF0gPT09IFwic2V0XCIgPyBcIlNldFwiIDogXCJBcnJheVwifTwke2lubmVyLmRvY3N0cmluZ1R5cGV9PmAsXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE1hcHMgYSBgbGlzdGAvYHNldGAgcGFyYW1ldGVyIHRvIGl0cyBqc2lpLXNhZmUgc2hhcGUgLSBtaXJyb3JzXG4gKiBgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbGAvYFNldEF0dHJpYnV0ZVR5cGVNb2RlbC5pbnB1dFR5cGVEZWZpbml0aW9uYFxuICogKGJvdGggaWRlbnRpY2FsKSBicmFuY2ggZm9yIGJyYW5jaCwgc2luY2UganNpaSBwYXJhbWV0ZXJzLCBsaWtlIHJlc291cmNlXG4gKiBpbnB1dHMsIGFyZSBhbGxvd2VkIHRvIHVuaW9uIGluIGEgd2hvbGUtY29sbGVjdGlvbiBgY2RrdG4uSVJlc29sdmFibGVgXG4gKiB0b2tlbi4gYGtpbmRgIG9ubHkgYWZmZWN0cyB0aGUgZG9jdW1lbnRhdGlvbjogdGhlIGRvY3N0cmluZyBub3RhdGlvblxuICogKGBBcnJheTwuLi4+YCBmb3IgYSBUZXJyYWZvcm0gbGlzdCwgYFNldDwuLi4+YCBmb3IgYSBUZXJyYWZvcm0gc2V0LFxuICogcmVjdXJzaXZlbHkgdmlhIGBwbGFpbkFycmF5RWxlbWVudFR5cGVgL2BtYXBQYXJhbWV0ZXJUeXBlYCkgcGx1cywgZm9yXG4gKiBzZXRzLCBhIHByb3NlIG5vdGUgLSB0aGUganNpaSB0eXBlIGlzIGFuIGFycmF5IGVpdGhlciB3YXksIHNvIHRoZSBub3RlXG4gKiBrZWVwcyBhIHJlYWRlciBmcm9tIGxpdGVyYWxseSBwYXNzaW5nIGEgSlMgYFNldGAgYW5kIGZsYWdzIHRoZVxuICogb3JkZXJpbmcvZHVwbGljYXRlLWVsZW1lbnQgc2VtYW50aWNzIGRpZmZlcmVuY2UuIFRoZSB0eXBlLWxldmVsIGhhbmRsaW5nXG4gKiBpcyBpZGVudGljYWwgZm9yIGJvdGguXG4gKi9cbmZ1bmN0aW9uIG1hcExpc3RPclNldFBhcmFtZXRlclR5cGUoXG4gIGtpbmQ6IFwibGlzdFwiIHwgXCJzZXRcIixcbiAgZWxlbWVudDogQXR0cmlidXRlVHlwZSxcbik6IE1hcHBlZFBhcmFtZXRlclR5cGUge1xuICBjb25zdCB3cmFwcGVyID0ga2luZCA9PT0gXCJzZXRcIiA/IFwiU2V0XCIgOiBcIkFycmF5XCI7XG4gIGNvbnN0IGRvY3N0cmluZ05vdGUgPVxuICAgIGtpbmQgPT09IFwic2V0XCJcbiAgICAgID8gXCJUZXJyYWZvcm0gc2V0OyBvcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBhbmQgZHVwbGljYXRlIHZhbHVlcyBhcmUgcmVtb3ZlZC5cIlxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyBNaXJyb3JzIHRoZSBmaW5hbCBgZWxzZWAgYnJhbmNoOiBlbmNvZGVkIGxpc3QgdG9rZW5zIGFscmVhZHkgc2F0aXNmeVxuICAgIC8vIGBzdHJpbmdbXWAsIHNvIG5vIHVuaW9uIGlzIG5lZWRlZC5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInN0cmluZ1tdXCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTxzdHJpbmc+YCxcbiAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKGVsZW1lbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAvLyBTYW1lIHJlYXNvbmluZyBhcyBgc3RyaW5nYCBhYm92ZS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcIm51bWJlcltdXCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTxudW1iZXI+YCxcbiAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKGVsZW1lbnQgPT09IFwiYm9vbFwiKSB7XG4gICAgLy8gTWlycm9ycyB0aGUgYGVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCJgIGJyYW5jaDogYm9vbFxuICAgIC8vIGhhcyBubyBsb3NzbGVzcyBwZXItZWxlbWVudCB0b2tlbiwgYnV0IHRoZSBXSE9MRSBjb2xsZWN0aW9uIGlzIHN0aWxsXG4gICAgLy8gdG9rZW5pemFibGUsIHNvIHRoZSB1bmlvbiBpcyBvbiB0aGUgb3V0c2lkZS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcIkFycmF5PGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZT4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08Ym9vbGVhbiB8IElSZXNvbHZhYmxlPmAsXG4gICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwbGFpbkVsZW1lbnQgPSBwbGFpbkFycmF5RWxlbWVudFR5cGUoZWxlbWVudCk7XG4gIGlmIChwbGFpbkVsZW1lbnQpIHtcbiAgICAvLyBNaXJyb3JzIHRoZSBgZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcImAgYnJhbmNoOiBhIG5lc3RlZFxuICAgIC8vIGxpc3Qvc2V0IHRoYXQgaXRzZWxmIGJvdHRvbXMgb3V0IGF0IHN0cmluZy9udW1iZXIgY29tcG9zZXMgaW50byBhXG4gICAgLy8gcHJvcGVyIG5lc3RlZCBhcnJheSB0eXBlIChlLmcuIGBsaXN0KGxpc3Qoc3RyaW5nKSlgIC0+IGBzdHJpbmdbXVtdYCksXG4gICAgLy8gd2l0aCB0aGUgd2hvbGUtY29sbGVjdGlvbiB0b2tlbiBhZGRpdGlvbmFsbHkgYWNjZXB0ZWQgYWxvbmdzaWRlIGl0LlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IGAke3BsYWluRWxlbWVudC50c1R5cGV9W10gfCBjZGt0bi5JUmVzb2x2YWJsZWAsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTwke3BsYWluRWxlbWVudC5kb2NzdHJpbmdUeXBlfT5gLFxuICAgICAgZG9jc3RyaW5nTm90ZSxcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gbWFwL29iamVjdC9keW5hbWljIGVsZW1lbnQsIG9yIGEgbmVzdGVkIGNvbGxlY3Rpb24gdGhhdCBkb2Vzbid0IGl0c2VsZlxuICAvLyByZWR1Y2UgdG8gc3RyaW5nL251bWJlcjogbm8ganNpaS1zYWZlIGFycmF5LW9mLVggdHlwZSBleGlzdHMgLSB3aWRlblxuICAvLyB0aGUgd2hvbGUgcGFyYW1ldGVyIHRvIGBhbnlbXWAuIFVubGlrZSBhIGJhcmUgYGFueWAgcGFyYW1ldGVyLCBwbGFpblxuICAvLyBgYW55W11gIGRvZXMgTk9UIHN0cnVjdHVyYWxseSBhY2NlcHQgYSB3aG9sZS1jb2xsZWN0aW9uXG4gIC8vIGBjZGt0bi5JUmVzb2x2YWJsZWAgdG9rZW4sIHNvIHRoZSB1bmlvbiBpcyByZXF1aXJlZCBoZXJlICh0aGlzIGlzXG4gIC8vIHN0cmljdGVyIHRoYW4gYE1hcEF0dHJpYnV0ZVR5cGVNb2RlbGAvYExpc3RBdHRyaWJ1dGVUeXBlTW9kZWxgIGhhdmUgdG9cbiAgLy8gYmUsIHNpbmNlIHRob3NlIG9ubHkgZXZlciBmYWxsIGJhY2sgdG8gYGFueVtdIHwgY2RrdG4uSVJlc29sdmFibGVgIHZpYVxuICAvLyB0aGUgc2FtZSBcIm5vdCBzaW1wbGVcIiBicmFuY2ggYWJvdmUsIHdoaWNoIGFscmVhZHkgZ3JhbnRzIGl0KS4gS2VlcCB0aGVcbiAgLy8gZG9jc3RyaW5nIGhvbmVzdCBhYm91dCB0aGUgcmVhbCBlbGVtZW50IHNoYXBlIHJhdGhlciB0aGFuIGp1c3Qgc2F5aW5nXG4gIC8vIGBhbnlgLlxuICBjb25zdCBlbGVtZW50RGVzY3JpcHRpb24gPSBtYXBQYXJhbWV0ZXJUeXBlKGVsZW1lbnQpLmRvY3N0cmluZ1R5cGU7XG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBcImFueVtdIHwgY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTwke2VsZW1lbnREZXNjcmlwdGlvbn0+YCxcbiAgICBkb2NzdHJpbmdOb3RlLFxuICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBNYXBzIGEgYG1hcGAgcGFyYW1ldGVyIHRvIGl0cyBqc2lpLXNhZmUgc2hhcGUgLSBtaXJyb3JzXG4gKiBgTWFwQXR0cmlidXRlVHlwZU1vZGVsLmlucHV0VHlwZURlZmluaXRpb25gLiBPbmx5IHRoZSBgYm9vbGAtZWxlbWVudCBjYXNlXG4gKiBpcyByZWFjaGFibGUgZnJvbSByZWFsIHByb3ZpZGVyIHNjaGVtYXMgdG9kYXkgKGBzdHJpbmdgL2BudW1iZXJgIGVsZW1lbnRcbiAqIG1hcHMgc3RheSBhIHBsYWluLCBub24tdW5pb24gcmVjb3JkOyBuZXN0ZWQvY29tcGxleCBtYXAgZWxlbWVudHMgYXJlbid0XG4gKiBlbWl0dGVkIGZvciBwcm92aWRlciBmdW5jdGlvbnMgLSBzZWUgdGhlIGBvYmplY3RgIGZhbGxiYWNrIGluXG4gKiBgbWFwUGFyYW1ldGVyVHlwZWApLCBidXQgdGhlIHNoYXBlIGlzIGtlcHQgYnJhbmNoLWZvci1icmFuY2ggYWxpZ25lZCB3aXRoXG4gKiB0aGUgbW9kZWwgaXQgbWlycm9ycyByYXRoZXIgdGhhbiBjb2xsYXBzZWQuXG4gKi9cbmZ1bmN0aW9uIG1hcE1hcFBhcmFtZXRlclR5cGUoZWxlbWVudDogQXR0cmlidXRlVHlwZSk6IE1hcHBlZFBhcmFtZXRlclR5cGUge1xuICBpZiAoZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XCIsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKGVsZW1lbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogbnVtYmVyIH1cIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBudW1iZXIgfVwiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBcImJvb2xcIikge1xuICAgIC8vIE1pcnJvcnMgdGhlIGBlbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiYCBicmFuY2g6IG1hcFxuICAgIC8vIG9mIGJvb2xlYW5zIGhhcyBQRVItRU5UUlkgdG9rZW4gc3VwcG9ydCwgYnV0IHRoZSB3aG9sZSBtYXAgaXRzZWxmIGlzXG4gICAgLy8gbm90IGFkZGl0aW9uYWxseSB1bmlvbmVkIHdpdGggYGNka3RuLklSZXNvbHZhYmxlYCAodW5saWtlIHRoZSBsaXN0L3NldFxuICAgIC8vIGNhc2UpIC0gbWF0Y2hpbmcgYE1hcEF0dHJpYnV0ZVR5cGVNb2RlbC5pbnB1dFR5cGVEZWZpbml0aW9uYCBleGFjdGx5LlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiAoYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB9XCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBcInsgW2tleTogc3RyaW5nXTogKGJvb2xlYW4gfCBJUmVzb2x2YWJsZSkgfVwiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIC8vIG1hcC9vYmplY3QvZHluYW1pYyBlbGVtZW50OiBubyBzdHJ1Y3R1cmFsIGlucHV0IGhlbHBlciBleGlzdHMgaGVyZSAtXG4gIC8vIHN0YXlzIGBhbnlgLCB3aGljaCAoYmVpbmcgYGFueWApIGFscmVhZHkgYWNjZXB0cyBhIHdob2xlLW1hcFxuICAvLyBgY2RrdG4uSVJlc29sdmFibGVgIHRva2VuIHRvby5cbiAgcmV0dXJuIHtcbiAgICB0c1R5cGU6IFwiYW55XCIsXG4gICAgZG9jc3RyaW5nVHlwZTogXCJhbnlcIixcbiAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gIH07XG59XG5cbi8qKlxuICogTWFwcyBhIHByb3ZpZGVyIGZ1bmN0aW9uIHBhcmFtZXRlcidzIGRlY2xhcmVkIFRlcnJhZm9ybSB0eXBlIHRvIGFcbiAqIGpzaWktc2FmZSBUeXBlU2NyaXB0IHBhcmFtZXRlciB0eXBlLCByZWN1cnNpdmVseSBmb3IgY29sbGVjdGlvbiB0eXBlcy5cbiAqXG4gKiBVbmxpa2UgcmV0dXJuIHR5cGVzLCBqc2lpIGFsbG93cyB1bmlvbnMgaW4gKnBhcmFtZXRlciogcG9zaXRpb24sIHNvXG4gKiBgYm9vbGAgaXMgdHlwZWQgYGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZWAgKG1pcnJvcmluZ1xuICogYFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbC5pbnB1dFR5cGVEZWZpbml0aW9uYCdzIGlucHV0LXNpZGUgY29udmVudGlvbikgLVxuICogdGhpcyBib3RoIGFjY2VwdHMgYSByZWFsIGJvb2xlYW4gYW5kIHN0aWxsIGFjY2VwdHMgYSB0b2tlbiBpbiBwbGFjZSBvZlxuICogb25lLiBgZHluYW1pY2AgaGFzIG5vIHN0cnVjdHVyYWwgdHlwaW5nIGFuZCBzdGF5cyBgYW55YCAod2hpY2ggYWxyZWFkeVxuICogYWNjZXB0cyBhbnl0aGluZywgaW5jbHVkaW5nIGEgdG9rZW4pOyBgb2JqZWN0YCAoc3RydWN0dXJhbCBpbnB1dCBoZWxwZXJzXG4gKiBhcmUgZGVmZXJyZWQgdG8gYSBmb2xsb3ctdXAgaXNzdWUpIHN0YXlzIGBhbnlgIHRvby5cbiAqXG4gKiBgbGlzdGAvYHNldGAgYW5kIGBtYXBgIGRlbGVnYXRlIHRvIGBtYXBMaXN0T3JTZXRQYXJhbWV0ZXJUeXBlYC9cbiAqIGBtYXBNYXBQYXJhbWV0ZXJUeXBlYCwgd2hpY2ggbWlycm9yIGBMaXN0QXR0cmlidXRlVHlwZU1vZGVsYC9cbiAqIGBTZXRBdHRyaWJ1dGVUeXBlTW9kZWxgL2BNYXBBdHRyaWJ1dGVUeXBlTW9kZWwuaW5wdXRUeXBlRGVmaW5pdGlvbmBcbiAqIGJyYW5jaCBmb3IgYnJhbmNoIChzZWUgYGF0dHJpYnV0ZS10eXBlLW1vZGVsLnRzYCkgLSB0aGUgc2FtZVxuICogd2hvbGUtY29sbGVjdGlvbi10b2tlbiBjb252ZW50aW9ucyBhbHJlYWR5IHVzZWQgZm9yIHJlc291cmNlIGlucHV0cy5cbiAqL1xuZnVuY3Rpb24gbWFwUGFyYW1ldGVyVHlwZSh0eXBlOiBBdHRyaWJ1dGVUeXBlKTogTWFwcGVkUGFyYW1ldGVyVHlwZSB7XG4gIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcIm51bWJlclwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJudW1iZXJcIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJib29sXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcImJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJib29sZWFuIHwgSVJlc29sdmFibGVcIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcImR5bmFtaWNcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwiYW55XCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBcImFueVwiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiAodHlwZVswXSA9PT0gXCJsaXN0XCIgfHwgdHlwZVswXSA9PT0gXCJzZXRcIikpIHtcbiAgICByZXR1cm4gbWFwTGlzdE9yU2V0UGFyYW1ldGVyVHlwZSh0eXBlWzBdLCB0eXBlWzFdKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHR5cGUpICYmIHR5cGVbMF0gPT09IFwibWFwXCIpIHtcbiAgICByZXR1cm4gbWFwTWFwUGFyYW1ldGVyVHlwZSh0eXBlWzFdKTtcbiAgfVxuXG4gIC8vIG9iamVjdDogc3RydWN0dXJhbCBpbnB1dCBoZWxwZXJzIGFyZSBkZWZlcnJlZCB0byBhIGZvbGxvdy11cCBpc3N1ZS5cbiAgcmV0dXJuIHtcbiAgICB0c1R5cGU6IFwiYW55XCIsXG4gICAgZG9jc3RyaW5nVHlwZTogXCJvYmplY3RcIixcbiAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1ldGVyTW9kZWwoXG4gIHBhcmFtZXRlcjogRnVuY3Rpb25QYXJhbWV0ZXIsXG4gIGZhbGxiYWNrTmFtZTogc3RyaW5nLFxuKTogSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbCB7XG4gIGNvbnN0IHRlcnJhZm9ybU5hbWUgPSBwYXJhbWV0ZXIubmFtZSA/PyBmYWxsYmFja05hbWU7XG4gIGNvbnN0IHsgdHNUeXBlLCBkb2NzdHJpbmdUeXBlLCBkb2NzdHJpbmdOb3RlLCBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHkgfSA9XG4gICAgbWFwUGFyYW1ldGVyVHlwZShwYXJhbWV0ZXIudHlwZSk7XG4gIHJldHVybiB7XG4gICAgdGVycmFmb3JtTmFtZSxcbiAgICBuYW1lOiBzYW5pdGl6ZVBhcmFtZXRlck5hbWUodGVycmFmb3JtTmFtZSksXG4gICAgdHNUeXBlLFxuICAgIGRvY3N0cmluZ1R5cGUsXG4gICAgZG9jc3RyaW5nTm90ZSxcbiAgICBkZXNjcmlwdGlvbjogcGFyYW1ldGVyLmRlc2NyaXB0aW9uLFxuICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXaWRlbnMgYSBtYXBwZWQgdHlwZSdzIGB0c1R5cGVgL2Bkb2NzdHJpbmdUeXBlYCB0byBhbHNvIGFjY2VwdCBhblxuICogZXhwbGljaXQgYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCBpbiB0aGlzIHBvc2l0aW9uIC0gdW5sZXNzXG4gKiBgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5YCBzYXlzIGl0IGFscmVhZHkgZG9lcyAoZS5nLiBhIGBib29sYCBwYXJhbWV0ZXJcbiAqIGlzIGFscmVhZHkgYGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZWAsIHNvIG51bGxhYmlsaXR5IGFkZHMgbm90aGluZyB0b1xuICogdGhlIHR5cGUgaXRzZWxmLCBvbmx5IHRvIHRoZSBkb2NzdHJpbmcgbm90ZSBhcHBlbmRlZCBieSB0aGUgY2FsbGVyKS5cbiAqL1xuZnVuY3Rpb24gd2l0aE51bGxhYmxlUmVzb2x2YWJsZVVuaW9uKFxuICBtb2RlbDogUGljazxcbiAgICBJbnRlcm5hbFBhcmFtZXRlck1vZGVsLFxuICAgIFwidHNUeXBlXCIgfCBcImRvY3N0cmluZ1R5cGVcIiB8IFwiYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5XCJcbiAgPixcbik6IHsgdHNUeXBlOiBzdHJpbmc7IGRvY3N0cmluZ1R5cGU6IHN0cmluZyB9IHtcbiAgaWYgKG1vZGVsLmFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeSkge1xuICAgIHJldHVybiB7IHRzVHlwZTogbW9kZWwudHNUeXBlLCBkb2NzdHJpbmdUeXBlOiBtb2RlbC5kb2NzdHJpbmdUeXBlIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0c1R5cGU6IGAke21vZGVsLnRzVHlwZX0gfCBjZGt0bi5JUmVzb2x2YWJsZWAsXG4gICAgZG9jc3RyaW5nVHlwZTogYCR7bW9kZWwuZG9jc3RyaW5nVHlwZX0gfCBJUmVzb2x2YWJsZWAsXG4gIH07XG59XG5cbi8qKlxuICogQXBwbGllcyBgaXNfbnVsbGFibGVgIHRyYWlsaW5nLWNvbXBhdGliaWxpdHkgcnVsZXMgYWNyb3NzIGEgZnVuY3Rpb24nc1xuICogZml4ZWQgKG5vbi12YXJpYWRpYykgcGFyYW1ldGVyIGxpc3QuIFRoaXMgbmVlZHMgdGhlIHdob2xlIGxpc3QgaW4gdmlld1xuICogKHNlZSBgYnVpbGRGdW5jdGlvbk1vZGVsYCksIHNpbmNlIHdoZXRoZXIgYSBudWxsYWJsZSBwYXJhbWV0ZXIgY2FuIGJlY29tZVxuICoganNpaS1vcHRpb25hbCBkZXBlbmRzIG9uIGV2ZXJ5IHBhcmFtZXRlciAqYWZ0ZXIqIGl0IHRvbzpcbiAqXG4gKiAtIEEgbnVsbGFibGUgcGFyYW1ldGVyIHdoZXJlIGl0IGFuZCBldmVyeSBsYXRlciBmaXhlZCBwYXJhbWV0ZXIgYXJlIGFsc29cbiAqICAgbnVsbGFibGUgYmVjb21lcyBqc2lpLW9wdGlvbmFsIChgbmFtZT86IFRgKTogb21pdHRpbmcgaXQgaW4gVHlwZVNjcmlwdFxuICogICBsZWF2ZXMgYHVuZGVmaW5lZGAgaW4gdGhlIGludm9rZSBhcmdzIGFycmF5LCB3aGljaCBgRnVuY3Rpb25DYWxsYFxuICogICBhbHJlYWR5IHJlbmRlcnMgYXMgdGhlIFRlcnJhZm9ybSBgbnVsbGAga2V5d29yZC4gSXQgYWRkaXRpb25hbGx5IGdhaW5zXG4gKiAgIHRoZSBgfCBjZGt0bi5JUmVzb2x2YWJsZWAgdW5pb24gKHNlZSBgd2l0aE51bGxhYmxlUmVzb2x2YWJsZVVuaW9uYCksIHNvXG4gKiAgIGEgY2FsbGVyIHdobyBkb2VzIHN1cHBseSB0aGUgYXJndW1lbnQgY2FuIHBhc3NcbiAqICAgYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCBmb3IgYW4gZXhwbGljaXQgVGVycmFmb3JtIGBudWxsYCB3aXRob3V0XG4gKiAgIG9taXR0aW5nIHRoZSBwYXJhbWV0ZXIuXG4gKiAtIEEgbnVsbGFibGUgcGFyYW1ldGVyIGZvbGxvd2VkIGJ5IGEgcmVxdWlyZWQgb25lIGtlZXBzIGl0cyBwb3NpdGlvblxuICogICAoanNpaSBjYW4ndCBleHByZXNzIFwib3B0aW9uYWwgYnV0IG5vdCB0cmFpbGluZ1wiKSwgYW5kIGluc3RlYWQgZ2FpbnMgdGhlXG4gKiAgIHNhbWUgYHwgY2RrdG4uSVJlc29sdmFibGVgIHVuaW9uIHNvIGEgY2FsbGVyIGNhbiBzdGlsbCBwYXNzIGFuIGV4cGxpY2l0XG4gKiAgIGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgKGFuIGBJUmVzb2x2YWJsZWAgcmVzb2x2aW5nIHRvIGBudWxsYCAtIHNlZVxuICogICBgVG9rZW4ubnVsbFZhbHVlKClgL2BUb2tlbi5hc0FueSgpYCkgaW4gdGhhdCBmaXhlZCBwb3NpdGlvbiAtIGtlZXBpbmdcbiAqICAgdGhlIHBhcmFtZXRlcidzIHJlYWwgdHlwZSByYXRoZXIgdGhhbiBnaXZpbmcgdXAgYWxsIHR5cGUgc2FmZXR5IGJ5XG4gKiAgIHdpZGVuaW5nIGl0IHRvIGBhbnlgLlxuICpcbiAqIEJvdGggY2FzZXMgZG9jdW1lbnQgdGhlIHJlYWwgbWVjaGFuaXNtIGluIHRoZSBkb2NzdHJpbmcgbm90ZSByYXRoZXIgdGhhblxuICogaW1wbHlpbmcgdGhlIHBsYWluIFR5cGVTY3JpcHQgYG51bGxgIGxpdGVyYWwgaXMgYWNjZXB0ZWQ6IHRoZSB0cmFpbGluZ1xuICogY2FzZSBjYW4gYWxzbyBqdXN0IGJlIG9taXR0ZWQsIHRoZSBtaWQtcG9zaXRpb24gY2FzZSBjYW4ndCBiZSBvbWl0dGVkIGF0XG4gKiBhbGwgKGpzaWkgY2FuJ3QgZXhwcmVzcyBcIm9wdGlvbmFsIGJ1dCBub3QgdHJhaWxpbmdcIikuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5TnVsbGFiaWxpdHkoXG4gIHBhcmFtZXRlcnM6IEZ1bmN0aW9uUGFyYW1ldGVyW10sXG4gIG1vZGVsczogSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbFtdLFxuKTogSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbFtdIHtcbiAgY29uc3QgdHJhaWxpbmdDb21wYXRpYmxlID0gbmV3IEFycmF5KHBhcmFtZXRlcnMubGVuZ3RoKS5maWxsKGZhbHNlKTtcbiAgbGV0IGFsbE51bGxhYmxlU29GYXIgPSB0cnVlO1xuICBmb3IgKGxldCBpID0gcGFyYW1ldGVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGFsbE51bGxhYmxlU29GYXIgPSBhbGxOdWxsYWJsZVNvRmFyICYmIHBhcmFtZXRlcnNbaV0uaXNfbnVsbGFibGUgPT09IHRydWU7XG4gICAgdHJhaWxpbmdDb21wYXRpYmxlW2ldID0gYWxsTnVsbGFibGVTb0ZhcjtcbiAgfVxuXG4gIHJldHVybiBtb2RlbHMubWFwKChtb2RlbCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2luZGV4XTtcbiAgICBpZiAoIXBhcmFtZXRlci5pc19udWxsYWJsZSkgcmV0dXJuIG1vZGVsO1xuXG4gICAgY29uc3QgeyB0c1R5cGUsIGRvY3N0cmluZ1R5cGUgfSA9IHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbihtb2RlbCk7XG4gICAgY29uc3QgbnVsbGFiaWxpdHlOb3RlID0gdHJhaWxpbmdDb21wYXRpYmxlW2luZGV4XVxuICAgICAgPyBcIk9taXQgb3IgcGFzcyBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKSB0byByZW5kZXIgdGhlIFRlcnJhZm9ybSBudWxsIGtleXdvcmQuXCJcbiAgICAgIDogXCJQYXNzIGNka3RuLlRva2VuLm51bGxWYWx1ZSgpIGZvciBhbiBleHBsaWNpdCBUZXJyYWZvcm0gbnVsbC5cIjtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIC4uLih0cmFpbGluZ0NvbXBhdGlibGVbaW5kZXhdID8geyBvcHRpb25hbDogdHJ1ZSB9IDoge30pLFxuICAgICAgdHNUeXBlLFxuICAgICAgZG9jc3RyaW5nVHlwZSxcbiAgICAgIGRvY3N0cmluZ05vdGU6IFttb2RlbC5kb2NzdHJpbmdOb3RlLCBudWxsYWJpbGl0eU5vdGVdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oXCIgXCIpLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcHMgYSBwcm92aWRlciBmdW5jdGlvbidzIGRlY2xhcmVkIHJldHVybiB0eXBlIHRvIHRoZSBqc2lpLXNhZmVcbiAqIFR5cGVTY3JpcHQgcmV0dXJuIHR5cGUsIHRoZSBgQHJldHVybnNgIEpTRG9jIHR5cGUsIGFuZCB0aGUgZXhwcmVzc2lvblxuICogdGhhdCB1bndyYXBzIHRoZSBgVGVycmFmb3JtUHJvdmlkZXJGdW5jdGlvbi5pbnZva2UoLi4uKWAgYElSZXNvbHZhYmxlYFxuICogaW50byBpdC5cbiAqXG4gKiBqc2lpIHJldHVybiBwb3NpdGlvbnMgY2FuJ3QgdXNlIHRoZSBgVCB8IGNka3RuLklSZXNvbHZhYmxlYCB1bmlvbiB0aGF0XG4gKiBwYXJhbWV0ZXJzIGNhbiAoc2VlIGBtYXBQYXJhbWV0ZXJUeXBlYCksIHNvIGV2ZXJ5IHNoYXBlIHRoYXQgY2FuJ3QgYmVcbiAqIGxvc3NsZXNzbHkgdW53cmFwcGVkIHRocm91Z2ggYW4gYGFzWHh4YCBUb2tlbiBoZWxwZXIgZmFsbHMgYmFjayB0byB0aGVcbiAqIHBsYWluIGBjZGt0bi5JUmVzb2x2YWJsZWAgcHJvZHVjZWQgYnkgYGludm9rZSgpYCBpdHNlbGYsIHVud3JhcHBlZC5cbiAqIFByb3ZpZGVyIGZ1bmN0aW9ucyBmcmVxdWVudGx5IHJldHVybiBvYmplY3RzIChlLmcuIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZVxuICogYHRpbWVgIHByb3ZpZGVyKSwgc28gLSB1bmxpa2UgYnVpbHQtaW4gYEZuLipgIGZ1bmN0aW9ucyAtIHRoZSBvYmplY3QgY2FzZVxuICogaXMgYSBwcmltYXJ5IHBhdGgsIG5vdCBhbiBlcnJvcjogaXQgaXMgdHJlYXRlZCB0aGUgc2FtZSBhc1xuICogYGR5bmFtaWNgL2EgYGxpc3RgL2BzZXRgIG9mIGFueXRoaW5nIG90aGVyIHRoYW4gYHN0cmluZ2AvYG51bWJlcmAgKG5vXG4gKiBgYXNBbnlMaXN0YCBUb2tlbiBoZWxwZXIgZXhpc3RzKSwgYW5kIHJldHVybmVkIGFzIHRoZSBSQVcgYGludm9rZSgpYFxuICogcmVzdWx0LiBgbWFwYCByZXR1cm5zLCB1bmxpa2UgdGhvc2UsIERPIGhhdmUgYSBmdWxsIHNldCBvZiB0eXBlZCBUb2tlblxuICogaGVscGVycyAoYGFzU3RyaW5nTWFwYC9gYXNOdW1iZXJNYXBgL2Bhc0Jvb2xlYW5NYXBgL2Bhc0FueU1hcGApLCBzbyBldmVyeVxuICogYG1hcGAgc2hhcGUgZ2V0cyBhbiBhY3R1YWwgdHlwZWQgcmVjb3JkIHJldHVybiBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0b1xuICogYGNka3RuLklSZXNvbHZhYmxlYC5cbiAqXG4gKiBXaGVuZXZlciB0aGUgZGVjbGFyZWQgcmV0dXJuIHR5cGUgSVMgYGNka3RuLklSZXNvbHZhYmxlYCAobm90IGBhbnlgKTpcbiAqIHVubGlrZSBgaGVscGVycy50c2AgYGFzQW55YCwgdGhpcyBtdXN0IE5PVCBnbyB0aHJvdWdoXG4gKiBgY2RrdG4uVG9rZW4uYXNTdHJpbmcoLi4uKWAgLSBgVG9rZW4uYXNTdHJpbmcoKWAgcHJvZHVjZXMgYW4gZW5jb2RlZFxuICogc3RyaW5nIHRva2VuIHRoYXQgYFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoKWAgZG9lcyBub3QgcmVjb2duaXplLCBzb1xuICogZ2VuZXJhdGVkIHN0cnVjdCBzZXR0ZXJzIChlLmcuIGFuIGBPdXRwdXRSZWZlcmVuY2VgIGBpbnRlcm5hbFZhbHVlYCkgdHJlYXRcbiAqIGl0IGFzIGEgcGxhaW4gb2JqZWN0IHdpdGggbm8ga25vd24ga2V5cyBhbmQgdGhlIGF0dHJpYnV0ZSBzaWxlbnRseVxuICogdmFuaXNoZXMgZnJvbSBzeW50aCBvdXRwdXQuIFRoZSByYXcgYElSZXNvbHZhYmxlYCBmcm9tIGBpbnZva2UoKWAgSVNcbiAqIHJlY29nbml6ZWQgYnkgYFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoKWAgYW5kIHJlc29sdmVzIGNvcnJlY3RseS5cbiAqIERlY2xhcmluZyBpdCBhcyBgY2RrdG4uSVJlc29sdmFibGVgIGluc3RlYWQgb2YgYGFueWAgYWxzbyBnaXZlcyBjYWxsZXJzXG4gKiByZWFsIHR5cGUgc2FmZXR5OiBgYW55YCBsZXQgYSBjYWxsZXIgd3JpdGUgYHJlc3VsdC5ob3Vyc2Agb24gYSB0b2tlbiB3aXRoXG4gKiBubyBjb21waWxlLXRpbWUgZmVlZGJhY2ssIHNpbGVudGx5IHByb2R1Y2luZyBgdW5kZWZpbmVkYCBhdCBydW50aW1lO1xuICogYElSZXNvbHZhYmxlYCBoYXMgbm8gc3VjaCBwcm9wZXJ0eSBhbmQgZm9yY2VzIHRoZSBjYWxsZXIgdGhyb3VnaFxuICogYGNka3RuLlRva2VuYC90aGUgcHJvdmlkZXIncyBzdHJ1Y3QgdHlwZXMgaW5zdGVhZC4gYGludm9rZSgpYCBhbHJlYWR5XG4gKiByZXR1cm5zIGBJUmVzb2x2YWJsZWAsIHNvIG5vIGNhc3QgaXMgbmVlZGVkIHRvIHJldHVybiBpdCBhc1xuICogYGNka3RuLklSZXNvbHZhYmxlYC5cbiAqL1xuZnVuY3Rpb24gbWFwUmV0dXJuVHlwZShyZXR1cm5UeXBlOiBBdHRyaWJ1dGVUeXBlKToge1xuICB0c1R5cGU6IHN0cmluZztcbiAgZG9jc3RyaW5nVHlwZTogc3RyaW5nO1xuICBkb2NzdHJpbmdOb3RlPzogc3RyaW5nO1xuICB3cmFwUmV0dXJuOiAoaW52b2tlRXhwcmVzc2lvbjogc3RyaW5nKSA9PiBzdHJpbmc7XG59IHtcbiAgaWYgKHJldHVyblR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNTdHJpbmcoJHtleHByfSlgLFxuICAgIH07XG4gIH1cbiAgaWYgKHJldHVyblR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcIm51bWJlclwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJudW1iZXJcIixcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNOdW1iZXIoJHtleHByfSlgLFxuICAgIH07XG4gIH1cbiAgaWYgKHJldHVyblR5cGUgPT09IFwiYm9vbFwiKSB7XG4gICAgLy8gQm9vbGVhbnMgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgYXMgdG9rZW5zIChzZWUgaGVscGVycy50cyBhc0Jvb2xlYW4pOlxuICAgIC8vIHJldHVybiB0aGUgSVJlc29sdmFibGUgcHJvZHVjZWQgYnkgaW52b2tlKCkgdW53cmFwcGVkLiBUaGUgZG9jc3RyaW5nXG4gICAgLy8gc3RpbGwgZG9jdW1lbnRzIHRoZSByZWFsIGNvbmNlcHR1YWwgc2hhcGUuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJib29sZWFuIHwgSVJlc29sdmFibGVcIixcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBleHByLFxuICAgIH07XG4gIH1cbiAgaWYgKHJldHVyblR5cGUgPT09IFwiZHluYW1pY1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJhbnlcIixcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBleHByLFxuICAgIH07XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkocmV0dXJuVHlwZSkgJiZcbiAgICAocmV0dXJuVHlwZVswXSA9PT0gXCJsaXN0XCIgfHwgcmV0dXJuVHlwZVswXSA9PT0gXCJzZXRcIilcbiAgKSB7XG4gICAgLy8gU2FtZSBkb2N1bWVudGF0aW9uIGNvbnZlbnRpb25zIGFzIGBtYXBMaXN0T3JTZXRQYXJhbWV0ZXJUeXBlYDogdGhlXG4gICAgLy8gbm90YXRpb24gKGBBcnJheTwuLi4+YC9gU2V0PC4uLj5gKSBjYXJyaWVzIHRoZSBUZXJyYWZvcm0gY29sbGVjdGlvblxuICAgIC8vIHN0cnVjdHVyZSByZWN1cnNpdmVseSwgYW5kIG9ubHkgc2V0cyBnZXQgYSBwcm9zZSBub3RlLlxuICAgIGNvbnN0IHdyYXBwZXIgPSByZXR1cm5UeXBlWzBdID09PSBcInNldFwiID8gXCJTZXRcIiA6IFwiQXJyYXlcIjtcbiAgICBjb25zdCBkb2NzdHJpbmdOb3RlID1cbiAgICAgIHJldHVyblR5cGVbMF0gPT09IFwic2V0XCJcbiAgICAgICAgPyBcIlRlcnJhZm9ybSBzZXQ7IG9yZGVyaW5nIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBkdXBsaWNhdGUgdmFsdWVzIGFyZSByZW1vdmVkLlwiXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVsZW1lbnQgPSByZXR1cm5UeXBlWzFdO1xuICAgIGlmIChlbGVtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0c1R5cGU6IFwic3RyaW5nW11cIixcbiAgICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08c3RyaW5nPmAsXG4gICAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNMaXN0KCR7ZXhwcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0c1R5cGU6IFwibnVtYmVyW11cIixcbiAgICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08bnVtYmVyPmAsXG4gICAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNOdW1iZXJMaXN0KCR7ZXhwcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIGxpc3Qvc2V0IG9mIGFueXRoaW5nIGVsc2U6IHRoZXJlIGlzIG5vIGBhc0FueUxpc3RgIFRva2VuIGhlbHBlciAtXG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSByYXcgSVJlc29sdmFibGUsIHNhbWUgcmVhc29uaW5nIGFzIGR5bmFtaWMvb2JqZWN0XG4gICAgLy8gYmVsb3csIGJ1dCBrZWVwIHRoZSBkb2NzdHJpbmcgaG9uZXN0IGFib3V0IHRoZSByZWFsIGVsZW1lbnQgc2hhcGVcbiAgICAvLyAocmV1c2luZyBtYXBQYXJhbWV0ZXJUeXBlIHB1cmVseSBmb3IgaXRzIGRlc2NyaXB0aXZlIGRvY3N0cmluZ1R5cGUgLVxuICAgIC8vIGl0cyB0c1R5cGUvYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5IGFyZSBpcnJlbGV2YW50IGhlcmUpLlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwiY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3dyYXBwZXJ9PCR7bWFwUGFyYW1ldGVyVHlwZShlbGVtZW50KS5kb2NzdHJpbmdUeXBlfT5gLFxuICAgICAgZG9jc3RyaW5nTm90ZSxcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBleHByLFxuICAgIH07XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkocmV0dXJuVHlwZSkgJiYgcmV0dXJuVHlwZVswXSA9PT0gXCJtYXBcIikge1xuICAgIC8vIFVubGlrZSBsaXN0L3NldCBhbmQgb2JqZWN0L2R5bmFtaWMsIGV2ZXJ5IGBtYXBgIHNoYXBlIGhhcyBhIG1hdGNoaW5nXG4gICAgLy8gdHlwZWQgVG9rZW4gaGVscGVyIChzZWUgdG9rZW4udHMpLCBzbyBpdCBnZXRzIGEgcmVhbCB0eXBlZCByZWNvcmRcbiAgICAvLyByZXR1cm4gaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gdGhlIHJhdyBJUmVzb2x2YWJsZS5cbiAgICBjb25zdCBlbGVtZW50ID0gcmV0dXJuVHlwZVsxXTtcbiAgICBpZiAoZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cIixcbiAgICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XCIsXG4gICAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNTdHJpbmdNYXAoJHtleHByfSlgLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRzVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IG51bWJlciB9XCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBudW1iZXIgfVwiLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzTnVtYmVyTWFwKCR7ZXhwcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ID09PSBcImJvb2xcIikge1xuICAgICAgLy8gVG9rZW4uYXNCb29sZWFuTWFwJ3MgZGVjbGFyZWQgcmV0dXJuIHR5cGUgaXMgYHsgW2tleTogc3RyaW5nXTpcbiAgICAgIC8vIGJvb2xlYW4gfWAgKHNlZSB0b2tlbi50cykgLSB1c2VkIHZlcmJhdGltLCBub3QgdW5pb25lZCB3aXRoXG4gICAgICAvLyBJUmVzb2x2YWJsZTogdGhlIG1hcCdzIGluZGl2aWR1YWwgZW50cmllcyBhcmUgcGxhaW4gYm9vbGVhbnMgb25jZVxuICAgICAgLy8gdW53cmFwcGVkIGJ5IHRoZSBoZWxwZXIuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cIixcbiAgICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfVwiLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzQm9vbGVhbk1hcCgke2V4cHJ9KWAsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBtYXAgb2YgYW55dGhpbmcgZWxzZSAob2JqZWN0L2R5bmFtaWMvbmVzdGVkIGNvbGxlY3Rpb24pOiBhc0FueU1hcFxuICAgIC8vIHN0aWxsIGdpdmVzIGEgdHlwZWQgKGlmIGxvb3NlbHktdHlwZWQpIHJlY29yZCByYXRoZXIgdGhhbiBmYWxsaW5nXG4gICAgLy8gYmFjayB0byB0aGUgcmF3IElSZXNvbHZhYmxlLlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBhbnkgfVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IGFueSB9XCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzQW55TWFwKCR7ZXhwcn0pYCxcbiAgICB9O1xuICB9XG4gIC8vIG9iamVjdDogbm8gc3RydWN0dXJhbCB0eXBpbmcgZm9yIGFyYml0cmFyeSBwcm92aWRlciBmdW5jdGlvbiByZXN1bHRzIC1cbiAgLy8gZGVjbGFyZWQgYXMgYGNka3RuLklSZXNvbHZhYmxlYCwgYW5kIHJldHVybmVkIGFzIHRoZSByYXcgYElSZXNvbHZhYmxlYFxuICAvLyBmcm9tIGludm9rZSgpIChOT1Qgd3JhcHBlZCBpbiBgY2RrdG4uVG9rZW4uYXNTdHJpbmcoLi4uKWAsIHdoaWNoIHdvdWxkXG4gIC8vIG1ha2UgdGhlIHJlc3VsdCB1bnJlY29nbml6YWJsZSB0byBgVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSgpYFxuICAvLyBkb3duc3RyZWFtIC0gc2VlIHRoZSBtYXBSZXR1cm5UeXBlIGRvY3N0cmluZyBhYm92ZSkuXG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBcImNka3RuLklSZXNvbHZhYmxlXCIsXG4gICAgZG9jc3RyaW5nVHlwZTogXCJvYmplY3RcIixcbiAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gZXhwcixcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGdW5jdGlvbk1vZGVsKFxuICB0ZXJyYWZvcm1OYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogRnVuY3Rpb25TaWduYXR1cmUsXG4pOiBQcm92aWRlckZ1bmN0aW9uTW9kZWwge1xuICBjb25zdCB7XG4gICAgdHNUeXBlOiByZXR1cm5Uc1R5cGUsXG4gICAgZG9jc3RyaW5nVHlwZTogcmV0dXJuRG9jc3RyaW5nVHlwZSxcbiAgICBkb2NzdHJpbmdOb3RlOiByZXR1cm5Eb2NzdHJpbmdOb3RlLFxuICAgIHdyYXBSZXR1cm4sXG4gIH0gPSBtYXBSZXR1cm5UeXBlKHNpZ25hdHVyZS5yZXR1cm5fdHlwZSk7XG5cbiAgY29uc3QgcmF3UGFyYW1ldGVycyA9IHNpZ25hdHVyZS5wYXJhbWV0ZXJzID8/IFtdO1xuICBjb25zdCBwYXJhbWV0ZXJzID0gYXBwbHlOdWxsYWJpbGl0eShcbiAgICByYXdQYXJhbWV0ZXJzLFxuICAgIHJhd1BhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PlxuICAgICAgYnVpbGRQYXJhbWV0ZXJNb2RlbChwYXJhbWV0ZXIsIGBhcmcke2luZGV4fWApLFxuICAgICksXG4gICk7XG5cbiAgbGV0IHZhcmlhZGljUGFyYW1ldGVyOiBJbnRlcm5hbFBhcmFtZXRlck1vZGVsIHwgdW5kZWZpbmVkO1xuICBpZiAoc2lnbmF0dXJlLnZhcmlhZGljX3BhcmFtZXRlcikge1xuICAgIGNvbnN0IGVsZW1lbnRNb2RlbCA9IGJ1aWxkUGFyYW1ldGVyTW9kZWwoXG4gICAgICBzaWduYXR1cmUudmFyaWFkaWNfcGFyYW1ldGVyLFxuICAgICAgXCJ2YWx1ZXNcIixcbiAgICApO1xuICAgIGlmIChzaWduYXR1cmUudmFyaWFkaWNfcGFyYW1ldGVyLmlzX251bGxhYmxlKSB7XG4gICAgICAvLyBBIG51bGxhYmxlIHZhcmlhZGljIHBhcmFtZXRlcjoganNpaSBjYW4ndCBleHByZXNzIFwiZWFjaCBpbmRpdmlkdWFsXG4gICAgICAvLyBhcmd1bWVudCBtYXkgaW5kZXBlbmRlbnRseSBiZSBudWxsXCIgb24gdGhlIGdlbmVyYXRlZCBgdmFsdWVzOlxuICAgICAgLy8gQXJyYXk8VD5gIGFycmF5IHBhcmFtZXRlciAoaXQncyBhbiBvcmRpbmFyeSBhcnJheSBwYXJhbWV0ZXIsIG5vdCBhXG4gICAgICAvLyB0cnVlIHJlc3Qvc3ByZWFkIHBhcmFtZXRlciAtIG9ubHkgdGhlIGludm9rZSgpIGNhbGwgc2l0ZSBzcHJlYWRzXG4gICAgICAvLyBpdCksIHNvIGV2ZXJ5IGVsZW1lbnQncyB0eXBlIGluc3RlYWQgd2lkZW5zIHRvIGFsc28gYWNjZXB0IGFuXG4gICAgICAvLyBleHBsaWNpdCBgY2RrdG4uVG9rZW4ubnVsbFZhbHVlKClgLCB0aGUgc2FtZSB3YXkgYSBmaXhlZCBudWxsYWJsZVxuICAgICAgLy8gcGFyYW1ldGVyIGRvZXMgKHNlZSBgd2l0aE51bGxhYmxlUmVzb2x2YWJsZVVuaW9uYCk7IHRoZSBkb2NzdHJpbmdcbiAgICAgIC8vIGtlZXBzIHRoZSBob25lc3QgcGVyLWVsZW1lbnQgdHlwZSBwbHVzIHRoYXQgZ3VpZGFuY2UgaW4gaXRzIG5vdGUuXG4gICAgICBjb25zdCB7IHRzVHlwZSwgZG9jc3RyaW5nVHlwZSB9ID1cbiAgICAgICAgd2l0aE51bGxhYmxlUmVzb2x2YWJsZVVuaW9uKGVsZW1lbnRNb2RlbCk7XG4gICAgICB2YXJpYWRpY1BhcmFtZXRlciA9IHtcbiAgICAgICAgLi4uZWxlbWVudE1vZGVsLFxuICAgICAgICB0c1R5cGUsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IGBBcnJheTwke2RvY3N0cmluZ1R5cGV9PmAsXG4gICAgICAgIGRvY3N0cmluZ05vdGU6IFtcbiAgICAgICAgICBlbGVtZW50TW9kZWwuZG9jc3RyaW5nTm90ZSxcbiAgICAgICAgICBcIlBhc3MgY2RrdG4uVG9rZW4ubnVsbFZhbHVlKCkgZm9yIGFuIGV4cGxpY2l0IFRlcnJhZm9ybSBudWxsLlwiLFxuICAgICAgICBdXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIC5qb2luKFwiIFwiKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vbi1udWxsYWJsZTogdGhlIGRvY3N0cmluZyB3cmFwcyB0aGUgZWxlbWVudCdzIGRvY3N0cmluZyB0eXBlIGluXG4gICAgICAvLyBgQXJyYXk8Li4uPmAgaGVyZSAocmF0aGVyIHRoYW4gaW4gdGhlIGVtaXR0ZXIpLCBzbyBldmVyeSBwYXJhbWV0ZXJcbiAgICAgIC8vIC0gZml4ZWQgb3IgdmFyaWFkaWMgLSBjYW4gc2hhcmUgb25lIGBAcGFyYW0ge2RvY3N0cmluZ1R5cGV9YFxuICAgICAgLy8gZW1pc3Npb24gcGF0aC5cbiAgICAgIHZhcmlhZGljUGFyYW1ldGVyID0ge1xuICAgICAgICAuLi5lbGVtZW50TW9kZWwsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IGBBcnJheTwke2VsZW1lbnRNb2RlbC5kb2NzdHJpbmdUeXBlfT5gLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRlcnJhZm9ybU5hbWUsXG4gICAgbWV0aG9kTmFtZTogc2FuaXRpemVNZXRob2ROYW1lKHRlcnJhZm9ybU5hbWUpLFxuICAgIGRlc2NyaXB0aW9uOiBzaWduYXR1cmUuZGVzY3JpcHRpb24sXG4gICAgc3VtbWFyeTogc2lnbmF0dXJlLnN1bW1hcnksXG4gICAgZGVwcmVjYXRpb25NZXNzYWdlOiBzaWduYXR1cmUuZGVwcmVjYXRpb25fbWVzc2FnZSxcbiAgICByZXR1cm5Uc1R5cGUsXG4gICAgcmV0dXJuRG9jc3RyaW5nVHlwZSxcbiAgICByZXR1cm5Eb2NzdHJpbmdOb3RlLFxuICAgIHdyYXBSZXR1cm4sXG4gICAgcGFyYW1ldGVycyxcbiAgICB2YXJpYWRpY1BhcmFtZXRlcixcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgdHdvIGZ1bmN0aW9ucyBpbiB0aGUgc2FtZSBwcm92aWRlciBzYW5pdGl6ZSB0byB0aGUgc2FtZVxuICogZ2VuZXJhdGVkIG1ldGhvZCBuYW1lLiBUZXJyYWZvcm0gZnVuY3Rpb24gbmFtZXMgYXJlIHVuaXF1ZSwgYnV0XG4gKiBgc2FuaXRpemVNZXRob2ROYW1lYCAoY2FtZWxDYXNpbmcsIGBsZW5ndGhgIC0+IGBsZW5ndGhPZmApIGlzIG5vdFxuICogbmVjZXNzYXJpbHkgaW5qZWN0aXZlLCBzbyBhIHJlYWwgLSBpZiB1bmxpa2VseSAtIHByb3ZpZGVyIHNjaGVtYSBjb3VsZFxuICogc3RpbGwgcHJvZHVjZSBhIGR1cGxpY2F0ZSBtZXRob2QuIEdlbmVyYXRpb24gaXMgYWJvcnRlZCByYXRoZXIgdGhhblxuICogc2lsZW50bHkgZW1pdHRpbmcgb25lIG1ldGhvZCB0aGF0IHNoYWRvd3MgdGhlIG90aGVyLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb01ldGhvZE5hbWVDb2xsaXNpb25zKFxuICBwcm92aWRlck5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25zOiBQcm92aWRlckZ1bmN0aW9uTW9kZWxbXSxcbik6IHZvaWQge1xuICBjb25zdCBzZWVuQnkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpOyAvLyBtZXRob2ROYW1lIC0+IHRlcnJhZm9ybU5hbWVcblxuICBmb3IgKGNvbnN0IGZuIG9mIGZ1bmN0aW9ucykge1xuICAgIGNvbnN0IGV4aXN0aW5nVGVycmFmb3JtTmFtZSA9IHNlZW5CeS5nZXQoZm4ubWV0aG9kTmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nVGVycmFmb3JtTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIGRlY2xhcmVzIHR3byBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucywgYCArXG4gICAgICAgICAgYFwiJHtleGlzdGluZ1RlcnJhZm9ybU5hbWV9XCIgYW5kIFwiJHtmbi50ZXJyYWZvcm1OYW1lfVwiLCB0aGF0IGJvdGggYCArXG4gICAgICAgICAgYHNhbml0aXplIHRvIHRoZSBnZW5lcmF0ZWQgbWV0aG9kIG5hbWUgXCIke2ZuLm1ldGhvZE5hbWV9XCIuIGAgK1xuICAgICAgICAgIGBHZW5lcmF0aW9uIGFib3J0ZWQgdG8gYXZvaWQgc2lsZW50bHkgb3ZlcndyaXRpbmcgb25lIG1ldGhvZCB3aXRoIGAgK1xuICAgICAgICAgIGB0aGUgb3RoZXIgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYW4gaXNzdWUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlZW5CeS5zZXQoZm4ubWV0aG9kTmFtZSwgZm4udGVycmFmb3JtTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgYSBmdW5jdGlvbidzIHNhbml0aXplZCBgbWV0aG9kTmFtZWAgbGFuZHMgb24gYSBtZW1iZXIgbmFtZVxuICogYFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcmAgYWxyZWFkeSBwdXRzIG9uIGV2ZXJ5IHdyYXBwZXIgY2xhc3MgKHNlZVxuICogYFJFU0VSVkVEX1dSQVBQRVJfTUVNQkVSX05BTUVTYCkuIFVubGlrZSBgYXNzZXJ0Tm9NZXRob2ROYW1lQ29sbGlzaW9uc2AsXG4gKiB3aGljaCBvbmx5IGNhdGNoZXMgdHdvICpmdW5jdGlvbnMqIGNvbGxpZGluZyB3aXRoIGVhY2ggb3RoZXIsIHRoaXMgY2F0Y2hlc1xuICogYSBzaW5nbGUgZnVuY3Rpb24gY29sbGlkaW5nIHdpdGggdGhlIHdyYXBwZXIgY2xhc3MgaXRzZWxmIC0gZS5nLiBhXG4gKiBUZXJyYWZvcm0gZnVuY3Rpb24gbGl0ZXJhbGx5IG5hbWVkIFwiY29uc3RydWN0b3JcIiwgb3IgXCJwcm92aWRlcl9sb2NhbF9uYW1lXCJcbiAqIGNhbWVsQ2FzaW5nIHRvIFwicHJvdmlkZXJMb2NhbE5hbWVcIi5cbiAqXG4gKiBUaGlzIGludGVudGlvbmFsbHkgZG9lcyBOT1QgYWxzbyBjaGVjayBzYW5pdGl6ZWQgKnBhcmFtZXRlciogbmFtZXMgYWdhaW5zdFxuICogXCJwcm92aWRlckxvY2FsTmFtZVwiOiBwYXJhbWV0ZXJzIGFyZSBkZWNsYXJlZCBpbiB0aGUgZ2VuZXJhdGVkIG1ldGhvZCdzIG93blxuICogc2NvcGUsIG5vdCB0aGUgY2xhc3Mncywgc28gYSBwYXJhbWV0ZXIgbmFtZWQgYHByb3ZpZGVyTG9jYWxOYW1lYCBzaGFkb3dzXG4gKiB0aGUgY2xhc3MgZmllbGQgd2l0aGluIHRoYXQgbWV0aG9kIGJvZHkgd2l0aG91dCBjb2xsaWRpbmcgd2l0aCBpdCAodmFsaWQsXG4gKiBpZiBjb25mdXNpbmcsIFR5cGVTY3JpcHQpIC0gdGhlcmUgaXMgbm90aGluZyB0byBhYm9ydCBnZW5lcmF0aW9uIG92ZXIuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUmVzZXJ2ZWRXcmFwcGVyTWVtYmVyQ29sbGlzaW9ucyhcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uczogUHJvdmlkZXJGdW5jdGlvbk1vZGVsW10sXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICBpZiAoUkVTRVJWRURfV1JBUFBFUl9NRU1CRVJfTkFNRVMuaGFzKGZuLm1ldGhvZE5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIGRlY2xhcmVzIGEgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiBgICtcbiAgICAgICAgICBgXCIke2ZuLnRlcnJhZm9ybU5hbWV9XCIgdGhhdCBzYW5pdGl6ZXMgdG8gdGhlIGdlbmVyYXRlZCBtZXRob2QgbmFtZSBgICtcbiAgICAgICAgICBgXCIke2ZuLm1ldGhvZE5hbWV9XCIsIHdoaWNoIGNvbGxpZGVzIHdpdGggYSBtZW1iZXIgdGhhdCBgICtcbiAgICAgICAgICBgUHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyIGFscmVhZHkgcHV0cyBvbiBldmVyeSBgICtcbiAgICAgICAgICBgXCI8UHJvdmlkZXI+UHJvdmlkZXJGdW5jdGlvbnNcIiB3cmFwcGVyIGNsYXNzICh0aGUgY2xhc3MgYCArXG4gICAgICAgICAgYGNvbnN0cnVjdG9yLCBvciBpdHMgXCJwcm92aWRlckxvY2FsTmFtZVwiIGZpZWxkKS4gR2VuZXJhdGlvbiBgICtcbiAgICAgICAgICBgYWJvcnRlZCB0byBhdm9pZCBlbWl0dGluZyBpbnZhbGlkIFR5cGVTY3JpcHQgb3Igc2lsZW50bHkgYCArXG4gICAgICAgICAgYHNoYWRvd2luZyB0aGF0IG1lbWJlciAtIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhbiBpc3N1ZS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgdHdvIHBhcmFtZXRlcnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gKGluY2x1ZGluZyB0aGUgdmFyaWFkaWNcbiAqIHBhcmFtZXRlcikgc2FuaXRpemUgdG8gdGhlIHNhbWUgZ2VuZXJhdGVkIHBhcmFtZXRlciBuYW1lLCBmb3IgdGhlIHNhbWVcbiAqIHJlYXNvbiBhcyBgYXNzZXJ0Tm9NZXRob2ROYW1lQ29sbGlzaW9uc2AgYWJvdmUgYnV0IGF0IHRoZSBwYXJhbWV0ZXIgbGV2ZWwuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUGFyYW1ldGVyTmFtZUNvbGxpc2lvbnMoXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBmbjogUHJvdmlkZXJGdW5jdGlvbk1vZGVsLFxuKTogdm9pZCB7XG4gIGNvbnN0IHNlZW5CeSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7IC8vIHNhbml0aXplZCBuYW1lIC0+IHRlcnJhZm9ybU5hbWVcbiAgY29uc3QgYWxsUGFyYW1ldGVycyA9IGZuLnZhcmlhZGljUGFyYW1ldGVyXG4gICAgPyBbLi4uZm4ucGFyYW1ldGVycywgZm4udmFyaWFkaWNQYXJhbWV0ZXJdXG4gICAgOiBmbi5wYXJhbWV0ZXJzO1xuXG4gIGZvciAoY29uc3QgcGFyYW0gb2YgYWxsUGFyYW1ldGVycykge1xuICAgIGNvbnN0IGV4aXN0aW5nVGVycmFmb3JtTmFtZSA9IHNlZW5CeS5nZXQocGFyYW0ubmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nVGVycmFmb3JtTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIGZ1bmN0aW9uIFwiJHtmbi50ZXJyYWZvcm1OYW1lfVwiIGRlY2xhcmVzIGAgK1xuICAgICAgICAgIGB0d28gcGFyYW1ldGVycywgXCIke2V4aXN0aW5nVGVycmFmb3JtTmFtZX1cIiBhbmQgYCArXG4gICAgICAgICAgYFwiJHtwYXJhbS50ZXJyYWZvcm1OYW1lfVwiLCB0aGF0IGJvdGggc2FuaXRpemUgdG8gdGhlIGdlbmVyYXRlZCBgICtcbiAgICAgICAgICBgcGFyYW1ldGVyIG5hbWUgXCIke3BhcmFtLm5hbWV9XCIuIEdlbmVyYXRpb24gYWJvcnRlZCB0byBhdm9pZCBgICtcbiAgICAgICAgICBgc2lsZW50bHkgZHJvcHBpbmcgb25lIHBhcmFtZXRlciAtIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhbiBpc3N1ZS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VlbkJ5LnNldChwYXJhbS5uYW1lLCBwYXJhbS50ZXJyYWZvcm1OYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93cyBpZiB0aGUgcHJvdmlkZXIncyBvd24gY29uZmlnIHNjaGVtYSBkZWNsYXJlcyBhbiBhdHRyaWJ1dGUgd2hvc2VcbiAqIGdlbmVyYXRlZCBwcm9wZXJ0eSBuYW1lIChzZWUgYEF0dHJpYnV0ZU1vZGVsLm5hbWVgIC9cbiAqIGBlc2NhcGVBdHRyaWJ1dGVOYW1lYCkgaXMgZXhhY3RseSBcImZ1bmN0aW9uc1wiLCB3aGlsZSB0aGUgcHJvdmlkZXIgYWxzb1xuICogZGVjbGFyZXMgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbnMuIFRoYXQgY29tYmluYXRpb24gd291bGQgY29sbGlkZSB3aXRoXG4gKiB0aGUgbWVtb2l6ZWQgYGZ1bmN0aW9uc2AgZ2V0dGVyIGBSZXNvdXJjZUVtaXR0ZXJgIGVtaXRzIG9uIHRoZSBwcm92aWRlclxuICogY2xhc3MgKHNlZSBgcmVzb3VyY2UtZW1pdHRlci50c2AncyBgZW1pdEZ1bmN0aW9uc0dldHRlcmApIC0gb25lIHdvdWxkXG4gKiBzaWxlbnRseSBzaGFkb3cgdGhlIG90aGVyLiBTYW1lIGxvdWQtZmFpbHVyZSBjb252ZW50aW9uIGFzXG4gKiBgYXNzZXJ0Tm9NZXRob2ROYW1lQ29sbGlzaW9uc2AvYGFzc2VydE5vUGFyYW1ldGVyTmFtZUNvbGxpc2lvbnNgIGFib3ZlOlxuICogZ2VuZXJhdGlvbiBpcyBhYm9ydGVkIHJhdGhlciB0aGFuIHNpbGVudGx5IHBpY2tpbmcgYSB3aW5uZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbihcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGF0dHJpYnV0ZU5hbWVzOiBzdHJpbmdbXSxcbik6IHZvaWQge1xuICBpZiAoYXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoXCJmdW5jdGlvbnNcIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUHJvdmlkZXIgXCIke3Byb3ZpZGVyTmFtZX1cIiBkZWNsYXJlcyBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQgaXRzIGAgK1xuICAgICAgICBgb3duIGNvbmZpZyBzY2hlbWEgYWxzbyBoYXMgYW4gYXR0cmlidXRlIHRoYXQgZ2VuZXJhdGVzIHRoZSBwcm9wZXJ0eSBgICtcbiAgICAgICAgYG5hbWUgXCJmdW5jdGlvbnNcIiBvbiB0aGUgcHJvdmlkZXIgY2xhc3MuIFRoaXMgY29sbGlkZXMgd2l0aCB0aGUgYCArXG4gICAgICAgIGBnZW5lcmF0ZWQgXCJmdW5jdGlvbnNcIiBnZXR0ZXIgdXNlZCB0byBpbnZva2UgcHJvdmlkZXItZGVmaW5lZCBgICtcbiAgICAgICAgYGZ1bmN0aW9ucy4gR2VuZXJhdGlvbiBhYm9ydGVkIHRvIGF2b2lkIHNpbGVudGx5IHNoYWRvd2luZyBvbmUgd2l0aCBgICtcbiAgICAgICAgYHRoZSBvdGhlciAtIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhbiBpc3N1ZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIG1vZGVsIGZvciBhIHByb3ZpZGVyJ3MgYHByb3ZpZGVyLWZ1bmN0aW9ucy9pbmRleC50c2AgZmlsZSBmcm9tXG4gKiBpdHMgcHJvdmlkZXIgc2NoZW1hIGBmdW5jdGlvbnNgIG1hcC4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSBwcm92aWRlclxuICogZGVjbGFyZXMgbm8gZnVuY3Rpb25zIC0gY2FsbGVycyBzaG91bGQgc2tpcCBlbWl0dGluZyB0aGUgZmlsZSBlbnRpcmVseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJvdmlkZXJGdW5jdGlvbnNNb2RlbChcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uczogeyBbbmFtZTogc3RyaW5nXTogRnVuY3Rpb25TaWduYXR1cmUgfSB8IHVuZGVmaW5lZCxcbik6IFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgfCB1bmRlZmluZWQge1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZnVuY3Rpb25zID8/IHt9KTtcbiAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IG1hcHBlZEZ1bmN0aW9ucyA9IGVudHJpZXNcbiAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAubWFwKChbbmFtZSwgc2lnbmF0dXJlXSkgPT4gYnVpbGRGdW5jdGlvbk1vZGVsKG5hbWUsIHNpZ25hdHVyZSkpO1xuXG4gIGFzc2VydE5vTWV0aG9kTmFtZUNvbGxpc2lvbnMocHJvdmlkZXJOYW1lLCBtYXBwZWRGdW5jdGlvbnMpO1xuICBhc3NlcnROb1Jlc2VydmVkV3JhcHBlck1lbWJlckNvbGxpc2lvbnMocHJvdmlkZXJOYW1lLCBtYXBwZWRGdW5jdGlvbnMpO1xuICBmb3IgKGNvbnN0IGZuIG9mIG1hcHBlZEZ1bmN0aW9ucykge1xuICAgIGFzc2VydE5vUGFyYW1ldGVyTmFtZUNvbGxpc2lvbnMocHJvdmlkZXJOYW1lLCBmbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3ZpZGVyTmFtZSxcbiAgICBjbGFzc05hbWU6IGAke3RvUGFzY2FsQ2FzZShwcm92aWRlck5hbWUpfVByb3ZpZGVyRnVuY3Rpb25zYCxcbiAgICBmdW5jdGlvbnM6IG1hcHBlZEZ1bmN0aW9ucyxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resolveStoredClassName =
|
|
3
|
+
exports.resolveStoredClassName = resolveStoredClassName;
|
|
4
4
|
// Copyright (c) HashiCorp, Inc
|
|
5
5
|
// SPDX-License-Identifier: MPL-2.0
|
|
6
6
|
const util_1 = require("../../../util");
|
|
@@ -82,5 +82,4 @@ function resolveStoredClassName(ownStoredClassType, elementTypeModelType) {
|
|
|
82
82
|
}
|
|
83
83
|
return undefined;
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydGVkLXN0b3JlZC1jbGFzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL3N1cHBvcnRlZC1zdG9yZWQtY2xhc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHdDQUErQztBQUUvQyx3RkFBd0Y7QUFDeEYscUZBQXFGO0FBQ3JGLG9GQUFvRjtBQUNwRix5RkFBeUY7QUFDekYsdUZBQXVGO0FBQ3ZGLDBGQUEwRjtBQUMxRix5RkFBeUY7QUFDekYsbUZBQW1GO0FBQ25GLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdkMsV0FBVztJQUNYLFdBQVc7SUFDWCxZQUFZO0lBQ1osUUFBUTtJQUNSLGNBQWM7SUFDZCxjQUFjO0lBQ2QsZUFBZTtJQUNmLFdBQVc7SUFDWCxhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsYUFBYTtJQUNiLGVBQWU7SUFDZixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixlQUFlO0lBQ2YsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixZQUFZO0NBQ2IsQ0FBQyxDQUFDO0FBRUgsMkZBQTJGO0FBQzNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0YsNEZBQTRGO0FBQzVGLHdGQUF3RjtBQUN4Riw2Q0FBNkM7QUFDN0MsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQix3RkFBd0Y7QUFDeEYsdUVBQXVFO0FBQ3ZFLDBGQUEwRjtBQUMxRiwwRkFBMEY7QUFDMUYsMEZBQTBGO0FBQzFGLDZCQUE2QjtBQUM3Qix1RkFBdUY7QUFDdkYseURBQXlEO0FBQ3pELFNBQWdCLHNCQUFzQixDQUNwQyxrQkFBMEIsRUFDMUIsb0JBQTRCO0lBRTVCLE1BQU0sVUFBVSxHQUFHLElBQUEscUJBQWMsRUFBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RELElBQUksd0JBQXdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLFFBQW9DLENBQUM7SUFDekMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN4QyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQ3BCLENBQUM7U0FBTSxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFVBQXNDLENBQUM7SUFDM0MsSUFBSSxvQkFBb0IsS0FBSyxNQUFNLElBQUksb0JBQW9CLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDdEUsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUN0QixDQUFDO1NBQU0sSUFBSSxvQkFBb0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ2pELElBQUksd0JBQXdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBbkNELHdEQW1DQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyB1cHBlcmNhc2VGaXJzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsXCI7XG5cbi8vIFRoZSBjb3JlIGNka3RuIHBhY2thZ2UgKHBhY2thZ2VzL2Nka3RuL3NyYy9jb21wbGV4LWNvbXB1dGVkLWxpc3QudHMpIG9ubHkgaGFuZC13cml0ZXNcbi8vIHRoaXMgZml4ZWQgc2V0IG9mIHdyYXBwZXIgY2xhc3NlcyBmb3IgY29tcHV0ZWQsIG5vbi1jb21wbGV4IGNvbGxlY3Rpb24gYXR0cmlidXRlcy5cbi8vIEFyYml0cmFyaWx5IGRlZXAgbmVzdGluZ3Mgb2YgbGlzdC9zZXQvbWFwIChlLmcuIG1hcChtYXAobGlzdChzdHJpbmcpKSkpIGNvbXBvc2UgYVxuLy8gc3RvcmVkQ2xhc3NUeXBlIChlLmcuIFwic3RyaW5nTGlzdE1hcE1hcFwiKSB0aGF0IGhhcyBubyBjb3JyZXNwb25kaW5nIGNsYXNzLiBSYXRoZXIgdGhhblxuLy8gZmFsbGluZyBiYWNrIHN0cmFpZ2h0IHRvIGEgcGxhaW4sIHVudHlwZWQgZ2V0dGVyLCByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lIGJlbG93IGZpcnN0XG4vLyBsb29rcyBmb3IgdGhlIG5lYXJlc3QgdHlwZWQgXCJBbnlcIi13cmFwcGVyIHRoYXQgc3RpbGwgZXhpc3RzIGluIHRoaXMgc2V0LCBjb2xsYXBzaW5nIHRoZVxuLy8gdW5zdXBwb3J0ZWQgaW5uZXIgc2hhcGUgaW50byBhbiB1bnR5cGVkIGJvdW5kYXJ5IHdoaWxlIHByZXNlcnZpbmcgdHlwZWQgbmF2aWdhdGlvbiBmb3Jcbi8vIHRoZSBvdXRlciBsYXllcnMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluL2lzc3Vlcy8xMSkuXG5jb25zdCBTVVBQT1JURURfU1RPUkVEX0NMQVNTRVMgPSBuZXcgU2V0KFtcbiAgXCJTdHJpbmdNYXBcIixcbiAgXCJOdW1iZXJNYXBcIixcbiAgXCJCb29sZWFuTWFwXCIsXG4gIFwiQW55TWFwXCIsXG4gIFwiU3RyaW5nTWFwTWFwXCIsXG4gIFwiTnVtYmVyTWFwTWFwXCIsXG4gIFwiQm9vbGVhbk1hcE1hcFwiLFxuICBcIkFueU1hcE1hcFwiLFxuICBcIkJvb2xlYW5MaXN0XCIsXG4gIFwiU3RyaW5nTGlzdExpc3RcIixcbiAgXCJOdW1iZXJMaXN0TGlzdFwiLFxuICBcIkJvb2xlYW5MaXN0TGlzdFwiLFxuICBcIkFueUxpc3RMaXN0XCIsXG4gIFwiU3RyaW5nTWFwTGlzdFwiLFxuICBcIk51bWJlck1hcExpc3RcIixcbiAgXCJCb29sZWFuTWFwTGlzdFwiLFxuICBcIkFueU1hcExpc3RcIixcbiAgXCJTdHJpbmdMaXN0TWFwXCIsXG4gIFwiTnVtYmVyTGlzdE1hcFwiLFxuICBcIkJvb2xlYW5MaXN0TWFwXCIsXG4gIFwiQW55TGlzdE1hcFwiLFxuXSk7XG5cbi8vIFJlc29sdmVzIHRoZSBjb21wb3NlZCBzdG9yZWQgY2xhc3MgbmFtZSB0byB1c2UgZm9yIGEgY29sbGVjdGlvbiBhdHRyaWJ1dGUgKGxpc3Qvc2V0L21hcClcbi8vIHdob3NlIGVsZW1lbnQgaXMgaXRzZWxmIGEgbm9uLWNvbXBsZXggY29sbGVjdGlvbiAob3Igc2ltcGxlIHR5cGUpLlxuLy9cbi8vIGBvd25TdG9yZWRDbGFzc1R5cGVgIGlzIHRoaXMgdHlwZSdzIG93biBjb21wb3NlZCBzdG9yZWRDbGFzc1R5cGUgKGUuZy4gXCJzdHJpbmdMaXN0TWFwTWFwXCJcbi8vIGZvciBtYXAobWFwKGxpc3Qoc3RyaW5nKSkpKSBhbmQgYGVsZW1lbnRUeXBlTW9kZWxUeXBlYCBpcyB0aGUgZWxlbWVudCdzIHR5cGVNb2RlbFR5cGVcbi8vIChcImxpc3RcIiB8IFwic2V0XCIgfCBcIm1hcFwiIHwgXCJzaW1wbGVcIiB8IC4uLikuXG4vL1xuLy8gUmVzb2x1dGlvbiBvcmRlcjpcbi8vICAgMS4gVGhlIG93biBjb21wb3NlZCBuYW1lIChlLmcuIFwiU3RyaW5nTGlzdE1hcE1hcFwiKSAtIHVzZWQgYXMtaXMgd2hlbiBpdCByZWZlcnMgdG8gYVxuLy8gICAgICBjbGFzcyB0aGF0IGlzIGhhbmQtd3JpdHRlbiBpbiB0aGUgY29yZSBwYWNrYWdlIChub3QgY29sbGFwc2VkKS5cbi8vICAgMi4gT3RoZXJ3aXNlLCB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgdGhhdCBzdGlsbCBlbmNvZGVzIHRoZSBvdXRlciB0d28gbGF5ZXJzXG4vLyAgICAgICh0aGlzIHR5cGUncyBvd24gbGF5ZXIgYW5kIGl0cyBlbGVtZW50J3MgbGF5ZXIpLCBlLmcuIFwiQW55TWFwTWFwXCIgLSBjb2xsYXBzaW5nIHRoZVxuLy8gICAgICB1bnN1cHBvcnRlZCBpbm5lciBzaGFwZSBpbnRvIGFuIHVudHlwZWQgYm91bmRhcnkgd2hpbGUgcHJlc2VydmluZyB0eXBlZCBuYXZpZ2F0aW9uXG4vLyAgICAgIGZvciB0aGUgb3V0ZXIgbGF5ZXJzLlxuLy8gICAzLiBPdGhlcndpc2UgKGRlZmVuc2l2ZWx5OyBldmVyeSBkZXB0aCBzaG91bGQgcmVzb2x2ZSB2aWEgMSBvciAyKSwgdW5kZWZpbmVkIC0gdGhlXG4vLyAgICAgIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBhIHBsYWluLCB1bnR5cGVkIGdldHRlci5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICBvd25TdG9yZWRDbGFzc1R5cGU6IHN0cmluZyxcbiAgZWxlbWVudFR5cGVNb2RlbFR5cGU6IHN0cmluZyxcbik6IHsgbmFtZTogc3RyaW5nOyBjb2xsYXBzZWQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNhbmRpZGF0ZTEgPSB1cHBlcmNhc2VGaXJzdChvd25TdG9yZWRDbGFzc1R5cGUpO1xuICBpZiAoU1VQUE9SVEVEX1NUT1JFRF9DTEFTU0VTLmhhcyhjYW5kaWRhdGUxKSkge1xuICAgIHJldHVybiB7IG5hbWU6IGNhbmRpZGF0ZTEsIGNvbGxhcHNlZDogZmFsc2UgfTtcbiAgfVxuXG4gIGxldCBvd25MYXllcjogXCJMaXN0XCIgfCBcIk1hcFwiIHwgdW5kZWZpbmVkO1xuICBpZiAob3duU3RvcmVkQ2xhc3NUeXBlLmVuZHNXaXRoKFwiTGlzdFwiKSkge1xuICAgIG93bkxheWVyID0gXCJMaXN0XCI7XG4gIH0gZWxzZSBpZiAob3duU3RvcmVkQ2xhc3NUeXBlLmVuZHNXaXRoKFwiTWFwXCIpKSB7XG4gICAgb3duTGF5ZXIgPSBcIk1hcFwiO1xuICB9XG4gIGlmICghb3duTGF5ZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGlubmVyTGF5ZXI6IFwiTGlzdFwiIHwgXCJNYXBcIiB8IHVuZGVmaW5lZDtcbiAgaWYgKGVsZW1lbnRUeXBlTW9kZWxUeXBlID09PSBcImxpc3RcIiB8fCBlbGVtZW50VHlwZU1vZGVsVHlwZSA9PT0gXCJzZXRcIikge1xuICAgIGlubmVyTGF5ZXIgPSBcIkxpc3RcIjtcbiAgfSBlbHNlIGlmIChlbGVtZW50VHlwZU1vZGVsVHlwZSA9PT0gXCJtYXBcIikge1xuICAgIGlubmVyTGF5ZXIgPSBcIk1hcFwiO1xuICB9XG4gIGlmICghaW5uZXJMYXllcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUyID0gYEFueSR7aW5uZXJMYXllcn0ke293bkxheWVyfWA7XG4gIGlmIChTVVBQT1JURURfU1RPUkVEX0NMQVNTRVMuaGFzKGNhbmRpZGF0ZTIpKSB7XG4gICAgcmV0dXJuIHsgbmFtZTogY2FuZGlkYXRlMiwgY29sbGFwc2VkOiB0cnVlIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydGVkLXN0b3JlZC1jbGFzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL3N1cHBvcnRlZC1zdG9yZWQtY2xhc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW9EQSx3REFtQ0M7QUF2RkQsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx3Q0FBK0M7QUFFL0Msd0ZBQXdGO0FBQ3hGLHFGQUFxRjtBQUNyRixvRkFBb0Y7QUFDcEYseUZBQXlGO0FBQ3pGLHVGQUF1RjtBQUN2RiwwRkFBMEY7QUFDMUYseUZBQXlGO0FBQ3pGLG1GQUFtRjtBQUNuRixNQUFNLHdCQUF3QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLFdBQVc7SUFDWCxXQUFXO0lBQ1gsWUFBWTtJQUNaLFFBQVE7SUFDUixjQUFjO0lBQ2QsY0FBYztJQUNkLGVBQWU7SUFDZixXQUFXO0lBQ1gsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGFBQWE7SUFDYixlQUFlO0lBQ2YsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osZUFBZTtJQUNmLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsWUFBWTtDQUNiLENBQUMsQ0FBQztBQUVILDJGQUEyRjtBQUMzRixxRUFBcUU7QUFDckUsRUFBRTtBQUNGLDRGQUE0RjtBQUM1Rix3RkFBd0Y7QUFDeEYsNkNBQTZDO0FBQzdDLEVBQUU7QUFDRixvQkFBb0I7QUFDcEIsd0ZBQXdGO0FBQ3hGLHVFQUF1RTtBQUN2RSwwRkFBMEY7QUFDMUYsMEZBQTBGO0FBQzFGLDBGQUEwRjtBQUMxRiw2QkFBNkI7QUFDN0IsdUZBQXVGO0FBQ3ZGLHlEQUF5RDtBQUN6RCxTQUFnQixzQkFBc0IsQ0FDcEMsa0JBQTBCLEVBQzFCLG9CQUE0QjtJQUU1QixNQUFNLFVBQVUsR0FBRyxJQUFBLHFCQUFjLEVBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RCxJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxRQUFvQyxDQUFDO0lBQ3pDLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDeEMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUNwQixDQUFDO1NBQU0sSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxVQUFzQyxDQUFDO0lBQzNDLElBQUksb0JBQW9CLEtBQUssTUFBTSxJQUFJLG9CQUFvQixLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3RFLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDdEIsQ0FBQztTQUFNLElBQUksb0JBQW9CLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDMUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLFVBQVUsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUNqRCxJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyB1cHBlcmNhc2VGaXJzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsXCI7XG5cbi8vIFRoZSBjb3JlIGNka3RuIHBhY2thZ2UgKHBhY2thZ2VzL2Nka3RuL3NyYy9jb21wbGV4LWNvbXB1dGVkLWxpc3QudHMpIG9ubHkgaGFuZC13cml0ZXNcbi8vIHRoaXMgZml4ZWQgc2V0IG9mIHdyYXBwZXIgY2xhc3NlcyBmb3IgY29tcHV0ZWQsIG5vbi1jb21wbGV4IGNvbGxlY3Rpb24gYXR0cmlidXRlcy5cbi8vIEFyYml0cmFyaWx5IGRlZXAgbmVzdGluZ3Mgb2YgbGlzdC9zZXQvbWFwIChlLmcuIG1hcChtYXAobGlzdChzdHJpbmcpKSkpIGNvbXBvc2UgYVxuLy8gc3RvcmVkQ2xhc3NUeXBlIChlLmcuIFwic3RyaW5nTGlzdE1hcE1hcFwiKSB0aGF0IGhhcyBubyBjb3JyZXNwb25kaW5nIGNsYXNzLiBSYXRoZXIgdGhhblxuLy8gZmFsbGluZyBiYWNrIHN0cmFpZ2h0IHRvIGEgcGxhaW4sIHVudHlwZWQgZ2V0dGVyLCByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lIGJlbG93IGZpcnN0XG4vLyBsb29rcyBmb3IgdGhlIG5lYXJlc3QgdHlwZWQgXCJBbnlcIi13cmFwcGVyIHRoYXQgc3RpbGwgZXhpc3RzIGluIHRoaXMgc2V0LCBjb2xsYXBzaW5nIHRoZVxuLy8gdW5zdXBwb3J0ZWQgaW5uZXIgc2hhcGUgaW50byBhbiB1bnR5cGVkIGJvdW5kYXJ5IHdoaWxlIHByZXNlcnZpbmcgdHlwZWQgbmF2aWdhdGlvbiBmb3Jcbi8vIHRoZSBvdXRlciBsYXllcnMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluL2lzc3Vlcy8xMSkuXG5jb25zdCBTVVBQT1JURURfU1RPUkVEX0NMQVNTRVMgPSBuZXcgU2V0KFtcbiAgXCJTdHJpbmdNYXBcIixcbiAgXCJOdW1iZXJNYXBcIixcbiAgXCJCb29sZWFuTWFwXCIsXG4gIFwiQW55TWFwXCIsXG4gIFwiU3RyaW5nTWFwTWFwXCIsXG4gIFwiTnVtYmVyTWFwTWFwXCIsXG4gIFwiQm9vbGVhbk1hcE1hcFwiLFxuICBcIkFueU1hcE1hcFwiLFxuICBcIkJvb2xlYW5MaXN0XCIsXG4gIFwiU3RyaW5nTGlzdExpc3RcIixcbiAgXCJOdW1iZXJMaXN0TGlzdFwiLFxuICBcIkJvb2xlYW5MaXN0TGlzdFwiLFxuICBcIkFueUxpc3RMaXN0XCIsXG4gIFwiU3RyaW5nTWFwTGlzdFwiLFxuICBcIk51bWJlck1hcExpc3RcIixcbiAgXCJCb29sZWFuTWFwTGlzdFwiLFxuICBcIkFueU1hcExpc3RcIixcbiAgXCJTdHJpbmdMaXN0TWFwXCIsXG4gIFwiTnVtYmVyTGlzdE1hcFwiLFxuICBcIkJvb2xlYW5MaXN0TWFwXCIsXG4gIFwiQW55TGlzdE1hcFwiLFxuXSk7XG5cbi8vIFJlc29sdmVzIHRoZSBjb21wb3NlZCBzdG9yZWQgY2xhc3MgbmFtZSB0byB1c2UgZm9yIGEgY29sbGVjdGlvbiBhdHRyaWJ1dGUgKGxpc3Qvc2V0L21hcClcbi8vIHdob3NlIGVsZW1lbnQgaXMgaXRzZWxmIGEgbm9uLWNvbXBsZXggY29sbGVjdGlvbiAob3Igc2ltcGxlIHR5cGUpLlxuLy9cbi8vIGBvd25TdG9yZWRDbGFzc1R5cGVgIGlzIHRoaXMgdHlwZSdzIG93biBjb21wb3NlZCBzdG9yZWRDbGFzc1R5cGUgKGUuZy4gXCJzdHJpbmdMaXN0TWFwTWFwXCJcbi8vIGZvciBtYXAobWFwKGxpc3Qoc3RyaW5nKSkpKSBhbmQgYGVsZW1lbnRUeXBlTW9kZWxUeXBlYCBpcyB0aGUgZWxlbWVudCdzIHR5cGVNb2RlbFR5cGVcbi8vIChcImxpc3RcIiB8IFwic2V0XCIgfCBcIm1hcFwiIHwgXCJzaW1wbGVcIiB8IC4uLikuXG4vL1xuLy8gUmVzb2x1dGlvbiBvcmRlcjpcbi8vICAgMS4gVGhlIG93biBjb21wb3NlZCBuYW1lIChlLmcuIFwiU3RyaW5nTGlzdE1hcE1hcFwiKSAtIHVzZWQgYXMtaXMgd2hlbiBpdCByZWZlcnMgdG8gYVxuLy8gICAgICBjbGFzcyB0aGF0IGlzIGhhbmQtd3JpdHRlbiBpbiB0aGUgY29yZSBwYWNrYWdlIChub3QgY29sbGFwc2VkKS5cbi8vICAgMi4gT3RoZXJ3aXNlLCB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgdGhhdCBzdGlsbCBlbmNvZGVzIHRoZSBvdXRlciB0d28gbGF5ZXJzXG4vLyAgICAgICh0aGlzIHR5cGUncyBvd24gbGF5ZXIgYW5kIGl0cyBlbGVtZW50J3MgbGF5ZXIpLCBlLmcuIFwiQW55TWFwTWFwXCIgLSBjb2xsYXBzaW5nIHRoZVxuLy8gICAgICB1bnN1cHBvcnRlZCBpbm5lciBzaGFwZSBpbnRvIGFuIHVudHlwZWQgYm91bmRhcnkgd2hpbGUgcHJlc2VydmluZyB0eXBlZCBuYXZpZ2F0aW9uXG4vLyAgICAgIGZvciB0aGUgb3V0ZXIgbGF5ZXJzLlxuLy8gICAzLiBPdGhlcndpc2UgKGRlZmVuc2l2ZWx5OyBldmVyeSBkZXB0aCBzaG91bGQgcmVzb2x2ZSB2aWEgMSBvciAyKSwgdW5kZWZpbmVkIC0gdGhlXG4vLyAgICAgIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBhIHBsYWluLCB1bnR5cGVkIGdldHRlci5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICBvd25TdG9yZWRDbGFzc1R5cGU6IHN0cmluZyxcbiAgZWxlbWVudFR5cGVNb2RlbFR5cGU6IHN0cmluZyxcbik6IHsgbmFtZTogc3RyaW5nOyBjb2xsYXBzZWQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNhbmRpZGF0ZTEgPSB1cHBlcmNhc2VGaXJzdChvd25TdG9yZWRDbGFzc1R5cGUpO1xuICBpZiAoU1VQUE9SVEVEX1NUT1JFRF9DTEFTU0VTLmhhcyhjYW5kaWRhdGUxKSkge1xuICAgIHJldHVybiB7IG5hbWU6IGNhbmRpZGF0ZTEsIGNvbGxhcHNlZDogZmFsc2UgfTtcbiAgfVxuXG4gIGxldCBvd25MYXllcjogXCJMaXN0XCIgfCBcIk1hcFwiIHwgdW5kZWZpbmVkO1xuICBpZiAob3duU3RvcmVkQ2xhc3NUeXBlLmVuZHNXaXRoKFwiTGlzdFwiKSkge1xuICAgIG93bkxheWVyID0gXCJMaXN0XCI7XG4gIH0gZWxzZSBpZiAob3duU3RvcmVkQ2xhc3NUeXBlLmVuZHNXaXRoKFwiTWFwXCIpKSB7XG4gICAgb3duTGF5ZXIgPSBcIk1hcFwiO1xuICB9XG4gIGlmICghb3duTGF5ZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGlubmVyTGF5ZXI6IFwiTGlzdFwiIHwgXCJNYXBcIiB8IHVuZGVmaW5lZDtcbiAgaWYgKGVsZW1lbnRUeXBlTW9kZWxUeXBlID09PSBcImxpc3RcIiB8fCBlbGVtZW50VHlwZU1vZGVsVHlwZSA9PT0gXCJzZXRcIikge1xuICAgIGlubmVyTGF5ZXIgPSBcIkxpc3RcIjtcbiAgfSBlbHNlIGlmIChlbGVtZW50VHlwZU1vZGVsVHlwZSA9PT0gXCJtYXBcIikge1xuICAgIGlubmVyTGF5ZXIgPSBcIk1hcFwiO1xuICB9XG4gIGlmICghaW5uZXJMYXllcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUyID0gYEFueSR7aW5uZXJMYXllcn0ke293bkxheWVyfWA7XG4gIGlmIChTVVBQT1JURURfU1RPUkVEX0NMQVNTRVMuaGFzKGNhbmRpZGF0ZTIpKSB7XG4gICAgcmV0dXJuIHsgbmFtZTogY2FuZGlkYXRlMiwgY29sbGFwc2VkOiB0cnVlIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -28,6 +28,13 @@ export declare class TerraformProviderGenerator {
|
|
|
28
28
|
versions: {
|
|
29
29
|
[fqpn: string]: string | undefined;
|
|
30
30
|
};
|
|
31
|
+
/**
|
|
32
|
+
* Resource directory names emitted per provider folder Used to prune directories
|
|
33
|
+
* left over from a previous provider version.
|
|
34
|
+
*/
|
|
35
|
+
emittedResourceFolders: {
|
|
36
|
+
[provider: string]: string[];
|
|
37
|
+
};
|
|
31
38
|
constructor(code: CodeMaker, schema: ProviderSchema, options?: TerraformProviderGeneratorOptions);
|
|
32
39
|
private getProviderByConstraint;
|
|
33
40
|
generate(providerConstraint: ConstructsMakerTarget): void;
|
|
@@ -37,6 +44,11 @@ export declare class TerraformProviderGenerator {
|
|
|
37
44
|
getClassNameForResource(terraformType: string): string;
|
|
38
45
|
getNamespaceNameForResource(terraformType: string): string;
|
|
39
46
|
private emitProvider;
|
|
47
|
+
/**
|
|
48
|
+
* Map an emitted file path to the resource directory name it lives in, e.g.
|
|
49
|
+
* `providers/mongodbatlas/teams/index.ts` -> `teams`.
|
|
50
|
+
*/
|
|
51
|
+
private resourceFolderName;
|
|
40
52
|
private emitProviderFunctions;
|
|
41
53
|
private emitResourceReadme;
|
|
42
54
|
private emitIndexFile;
|