ng-configcat-publicapi-ui 4.2.0 → 4.2.1
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/esm2022/lib/_directives/input-display-normalizer.directive.mjs +4 -4
- package/esm2022/lib/_services/app-data-adapter.mjs +4 -4
- package/esm2022/lib/_services/comparison-value-list-helper.mjs +4 -4
- package/esm2022/lib/_services/form-generator.mjs +4 -4
- package/esm2022/lib/_services/messaging.service.mjs +4 -4
- package/esm2022/lib/_services/public-api.service.mjs +4 -4
- package/esm2022/lib/_services/setting-list-form-helper.mjs +4 -4
- package/esm2022/lib/_services/tracking.directive.mjs +4 -4
- package/esm2022/lib/ace-editor/ace-editor.component.mjs +4 -4
- package/esm2022/lib/authorization/authorization.component.mjs +4 -4
- package/esm2022/lib/base/base-select.component.mjs +4 -4
- package/esm2022/lib/base/base.component.mjs +4 -4
- package/esm2022/lib/configuration.mjs +4 -4
- package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +4 -4
- package/esm2022/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +4 -4
- package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +4 -4
- package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +4 -4
- package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +4 -4
- package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +4 -4
- package/esm2022/lib/dialogs/save-snackbar/save-snackbar.component.mjs +4 -4
- package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +5 -5
- package/esm2022/lib/selects/config-select/config-select.component.mjs +4 -4
- package/esm2022/lib/selects/environment-select/environment-select.component.mjs +4 -4
- package/esm2022/lib/selects/product-select/product-select.component.mjs +4 -4
- package/esm2022/lib/selects/setting-select/setting-select.component.mjs +4 -4
- package/esm2022/lib/setting-item/setting-item.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting/setting.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting/value/value.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting-list.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag-item.component.mjs +4 -4
- package/fesm2022/ng-configcat-publicapi-ui.mjs +145 -145
- package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -67,10 +67,10 @@ export class RolloutPercentageItemsComponent {
|
|
|
67
67
|
getPercentageFormControl(rolloutPercentageItem) {
|
|
68
68
|
return rolloutPercentageItem.controls.percentage;
|
|
69
69
|
}
|
|
70
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
71
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RolloutPercentageItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RolloutPercentageItemsComponent, selector: "configcat-rollout-percentage-items", inputs: { formGroup: "formGroup", readOnly: "readOnly" }, ngImport: i0, template: "<div class=\"percentage-wrapper\" [formGroup]=\"formGroup\">\n\n <div class=\"if\" *ngIf=\"rolloutRules().controls.length > 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n <div class=\"grow\">\n <div class=\"percentage-row flex\"\n *ngFor=\"let rolloutPercentageItem of getRolloutPercentageItemFormGroups(); let i = index\">\n <div class=\"flex\">\n <input type=\"number\" [formControl]=\"getPercentageFormControl(rolloutPercentageItem)\"\n (input)=\"percentageChanged(i)\" digitOnly>%\n <span class=\"users\">of <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </span>\n </div>\n\n <div class=\"delete-option\" matTooltip=\"Remove this % option\"\n *ngIf=\"!readOnly && rolloutPercentageItems().controls.length > 2\"\n (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n\n <span matTooltip=\"The sum of percentages must be equal to 100.\" matTooltipPosition=\"above\"\n *ngIf=\"(i === rolloutPercentageItems().controls.length -1) && (rolloutPercentageItemsSum().invalid)\">\n <mat-icon color=\"warn\">\n error_outline\n </mat-icon>\n </span>\n\n <div class=\"value flex\">\n <span class=\"value-name\" *ngIf=\"setting().settingType !== SettingType.Boolean\">Served value:</span>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\" *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n </div>\n</div>", styles: [".percentage-wrapper{border:1px solid #d5d5d5;background-color:#fff;margin:.5em 1em;position:relative;padding:.5em 0;display:flex;flex-wrap:wrap}.percentage-wrapper .delete{position:absolute;cursor:pointer;top:-9px;right:-10px;z-index:999;border-radius:50%;background-color:#fff;height:20px;width:20px;color:#ed5251}.percentage-wrapper .delete mat-icon{font-size:20px;height:20px;width:20px;opacity:.5}.percentage-wrapper .delete:hover mat-icon{opacity:1}.percentage-wrapper .delete-option{color:#ed5251;cursor:pointer;margin-left:1rem;margin-top:4px}.percentage-wrapper .delete-option:hover mat-icon{opacity:1}.percentage-wrapper .delete-option mat-icon{opacity:.5;font-size:20px}.if{display:flex;align-items:center}.if>*{margin:0 .5em}.if .spacing{margin-right:44px}.if .chip{font-size:12px;background-color:#67b1fc3d}.grow{flex-grow:1}.percentage-row{min-height:40px;margin-left:.5em}.flex{display:flex;flex-wrap:wrap;align-items:center}.value{margin-left:auto}.value .value-name{display:none}input{background-color:#fff;border:1px solid #e5e5e5;min-height:28px;width:40px;margin-top:3px;margin-right:5px;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}input:focus{outline-color:#e5e5e5;outline-offset:-1px}.users{margin-left:20px}@media (max-width: 920px){.value{min-width:0!important}.value .served-value{margin:3px 7px 3px 0}}@media (max-width: 650px){.users{margin-left:5px}}@media (max-width: 540px){.users{font-size:12px}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i5.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i6.ValueComponent, selector: "configcat-value", inputs: ["valueFormControl", "setting"] }] }); }
|
|
72
72
|
}
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RolloutPercentageItemsComponent, decorators: [{
|
|
74
74
|
type: Component,
|
|
75
75
|
args: [{ selector: 'configcat-rollout-percentage-items', template: "<div class=\"percentage-wrapper\" [formGroup]=\"formGroup\">\n\n <div class=\"if\" *ngIf=\"rolloutRules().controls.length > 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n <div class=\"grow\">\n <div class=\"percentage-row flex\"\n *ngFor=\"let rolloutPercentageItem of getRolloutPercentageItemFormGroups(); let i = index\">\n <div class=\"flex\">\n <input type=\"number\" [formControl]=\"getPercentageFormControl(rolloutPercentageItem)\"\n (input)=\"percentageChanged(i)\" digitOnly>%\n <span class=\"users\">of <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </span>\n </div>\n\n <div class=\"delete-option\" matTooltip=\"Remove this % option\"\n *ngIf=\"!readOnly && rolloutPercentageItems().controls.length > 2\"\n (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n\n <span matTooltip=\"The sum of percentages must be equal to 100.\" matTooltipPosition=\"above\"\n *ngIf=\"(i === rolloutPercentageItems().controls.length -1) && (rolloutPercentageItemsSum().invalid)\">\n <mat-icon color=\"warn\">\n error_outline\n </mat-icon>\n </span>\n\n <div class=\"value flex\">\n <span class=\"value-name\" *ngIf=\"setting().settingType !== SettingType.Boolean\">Served value:</span>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\" *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n </div>\n</div>", styles: [".percentage-wrapper{border:1px solid #d5d5d5;background-color:#fff;margin:.5em 1em;position:relative;padding:.5em 0;display:flex;flex-wrap:wrap}.percentage-wrapper .delete{position:absolute;cursor:pointer;top:-9px;right:-10px;z-index:999;border-radius:50%;background-color:#fff;height:20px;width:20px;color:#ed5251}.percentage-wrapper .delete mat-icon{font-size:20px;height:20px;width:20px;opacity:.5}.percentage-wrapper .delete:hover mat-icon{opacity:1}.percentage-wrapper .delete-option{color:#ed5251;cursor:pointer;margin-left:1rem;margin-top:4px}.percentage-wrapper .delete-option:hover mat-icon{opacity:1}.percentage-wrapper .delete-option mat-icon{opacity:.5;font-size:20px}.if{display:flex;align-items:center}.if>*{margin:0 .5em}.if .spacing{margin-right:44px}.if .chip{font-size:12px;background-color:#67b1fc3d}.grow{flex-grow:1}.percentage-row{min-height:40px;margin-left:.5em}.flex{display:flex;flex-wrap:wrap;align-items:center}.value{margin-left:auto}.value .value-name{display:none}input{background-color:#fff;border:1px solid #e5e5e5;min-height:28px;width:40px;margin-top:3px;margin-right:5px;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}input:focus{outline-color:#e5e5e5;outline-offset:-1px}.users{margin-left:20px}@media (max-width: 920px){.value{min-width:0!important}.value .served-value{margin:3px 7px 3px 0}}@media (max-width: 650px){.users{margin-left:5px}}@media (max-width: 540px){.users{font-size:12px}}\n"] }]
|
|
76
76
|
}], ctorParameters: () => [], propDecorators: { formGroup: [{
|
|
@@ -78,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
78
78
|
}], readOnly: [{
|
|
79
79
|
type: Input
|
|
80
80
|
}] } });
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXBlcmNlbnRhZ2UtaXRlbXMvcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXBlcmNlbnRhZ2UtaXRlbXMvcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7QUFPckQsTUFBTSxPQUFPLCtCQUErQjtJQU8xQyxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBcUIsQ0FBQztJQUNoRSxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQXFCLENBQUM7SUFDMUUsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUF1QixDQUFDO0lBQy9FLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXVDO1FBQzNDLE9BQU8sSUFB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LENBQXFCLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsd0JBQXdCLENBQUMscUJBQTBCO1FBQ2pELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLFVBQWdDLENBQUM7SUFDekUsQ0FBQzs4R0E1RVUsK0JBQStCO2tHQUEvQiwrQkFBK0Isb0lDVDVDLGtqRUEwQ007OzJGRGpDTywrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0Usb0NBQW9DO3dEQU1yQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZXR0aW5nVHlwZSB9IGZyb20gJ25nLWNvbmZpZ2NhdC1wdWJsaWNhcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb25maWdjYXQtcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGxvdXQtcGVyY2VudGFnZS1pdGVtcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JvbGxvdXQtcGVyY2VudGFnZS1pdGVtcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJvbGxvdXRQZXJjZW50YWdlSXRlbXNDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IFVudHlwZWRGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gIFNldHRpbmdUeXBlID0gU2V0dGluZ1R5cGU7XG5cblxuICBzZXR0aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3NldHRpbmcnKT8udmFsdWU7XG4gIH1cblxuICByb2xsb3V0UnVsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgncm9sbG91dFJ1bGVzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgfVxuXG4gIHJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgncm9sbG91dFBlcmNlbnRhZ2VJdGVtcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gIH1cblxuICByb2xsb3V0UGVyY2VudGFnZUl0ZW1zU3VtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3JvbGxvdXRQZXJjZW50YWdlSXRlbXNTdW0nKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICB2YWx1ZShyb2xsb3V0UGVyY2VudGFnZUl0ZW06IFVudHlwZWRGb3JtR3JvdXApOiBVbnR5cGVkRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmcoKS5zZXR0aW5nVHlwZSA9PT0gU2V0dGluZ1R5cGUuQm9vbGVhbiA/XG4gICAgICByb2xsb3V0UGVyY2VudGFnZUl0ZW0uZ2V0KCd2YWx1ZURpc2FibGVkJykgYXMgVW50eXBlZEZvcm1Db250cm9sIDpcbiAgICAgIHJvbGxvdXRQZXJjZW50YWdlSXRlbS5nZXQoJ3ZhbHVlJykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBwZXJjZW50YWdlQ2hhbmdlZChpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XS52YWx1ZS5wZXJjZW50YWdlIDwgMCkge1xuICAgICAgKHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XSBhcyBVbnR5cGVkRm9ybUdyb3VwKS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDApO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb2xsb3V0UGVyY2VudGFnZUl0ZW1zKCkuY29udHJvbHNbaW5kZXhdLnZhbHVlLnBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9sc1tpbmRleF0gYXMgVW50eXBlZEZvcm1Hcm91cCkuY29udHJvbHMucGVyY2VudGFnZS5zZXRWYWx1ZSgxMDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggPT09IDIpIHtcbiAgICAgICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9sc1sxIC0gaW5kZXhdIGFzIFVudHlwZWRGb3JtR3JvdXApLmNvbnRyb2xzLnBlcmNlbnRhZ2VcbiAgICAgICAgLnNldFZhbHVlKDEwMCAtIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XS52YWx1ZS5wZXJjZW50YWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN1bSgpO1xuICB9XG5cbiAgdXBkYXRlU3VtKCkge1xuICAgIGlmICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtc1N1bSgpLnNldFZhbHVlKDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtc1N1bSgpLnNldFZhbHVlKFxuICAgICAgICB0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5tYXAodiA9PiB2LnZhbHVlLnBlcmNlbnRhZ2UpXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVJvbGxvdXRQZXJjZW50YWdlSXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5yb2xsb3V0UGVyY2VudGFnZUl0ZW1zKCkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgfVxuXG4gIHJlbW92ZUFsbCgpIHtcbiAgICB0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jbGVhcigpO1xuICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgfVxuXG4gIGdldFJvbGxvdXRQZXJjZW50YWdlSXRlbUZvcm1Hcm91cHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpPy5jb250cm9scz8ubWFwKGMgPT4gYyBhcyBVbnR5cGVkRm9ybUdyb3VwKTtcbiAgfVxuXG4gIGdldFBlcmNlbnRhZ2VGb3JtQ29udHJvbChyb2xsb3V0UGVyY2VudGFnZUl0ZW06IGFueSkge1xuICAgIHJldHVybiByb2xsb3V0UGVyY2VudGFnZUl0ZW0uY29udHJvbHMucGVyY2VudGFnZSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwZXJjZW50YWdlLXdyYXBwZXJcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImlmXCIgKm5nSWY9XCJyb2xsb3V0UnVsZXMoKS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxtYXQtY2hpcC1zZXQ+XG4gICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9XCJjaGlwXCI+RUxTRSBJRjwvbWF0LWNoaXA+XG4gICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJncm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlLXJvdyBmbGV4XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb2xsb3V0UGVyY2VudGFnZUl0ZW0gb2YgZ2V0Um9sbG91dFBlcmNlbnRhZ2VJdGVtRm9ybUdyb3VwcygpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgW2Zvcm1Db250cm9sXT1cImdldFBlcmNlbnRhZ2VGb3JtQ29udHJvbChyb2xsb3V0UGVyY2VudGFnZUl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInBlcmNlbnRhZ2VDaGFuZ2VkKGkpXCIgZGlnaXRPbmx5PiVcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXJzXCI+b2YgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL2FkdmFuY2VkL3VzZXItb2JqZWN0XCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj51c2VyczwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZS1vcHRpb25cIiBtYXRUb29sdGlwPVwiUmVtb3ZlIHRoaXMgJSBvcHRpb25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJlYWRPbmx5ICYmIHJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggPiAyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUm9sbG91dFBlcmNlbnRhZ2VJdGVtKGkpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHNwYW4gbWF0VG9vbHRpcD1cIlRoZSBzdW0gb2YgcGVyY2VudGFnZXMgbXVzdCBiZSBlcXVhbCB0byAxMDAuXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGkgPT09IHJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggLTEpICYmIChyb2xsb3V0UGVyY2VudGFnZUl0ZW1zU3VtKCkuaW52YWxpZClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJ3YXJuXCI+XG4gICAgICAgICAgICAgICAgICAgIGVycm9yX291dGxpbmVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWUgZmxleFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWUtbmFtZVwiICpuZ0lmPVwic2V0dGluZygpLnNldHRpbmdUeXBlICE9PSBTZXR0aW5nVHlwZS5Cb29sZWFuXCI+U2VydmVkIHZhbHVlOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8Y29uZmlnY2F0LXZhbHVlIGNsYXNzPVwic2VydmVkLXZhbHVlXCIgW3ZhbHVlRm9ybUNvbnRyb2xdPVwidmFsdWUocm9sbG91dFBlcmNlbnRhZ2VJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZXR0aW5nXT1cInNldHRpbmcoKVwiPlxuICAgICAgICAgICAgICAgIDwvY29uZmlnY2F0LXZhbHVlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCIgbWF0VG9vbHRpcD1cIlJlbW92ZSAlIG9wdGlvbnNcIiAoY2xpY2spPVwicmVtb3ZlQWxsKClcIiAqbmdJZj1cIiFyZWFkT25seVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXBlcmNlbnRhZ2UtaXRlbXMvcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXBlcmNlbnRhZ2UtaXRlbXMvcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7QUFPckQsTUFBTSxPQUFPLCtCQUErQjtJQU8xQyxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBcUIsQ0FBQztJQUNoRSxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQXFCLENBQUM7SUFDMUUsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUF1QixDQUFDO0lBQy9FLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXVDO1FBQzNDLE9BQU8sSUFB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LENBQXFCLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsd0JBQXdCLENBQUMscUJBQTBCO1FBQ2pELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLFVBQWdDLENBQUM7SUFDekUsQ0FBQzsrR0E1RVUsK0JBQStCO21HQUEvQiwrQkFBK0Isb0lDVDVDLGtqRUEwQ007OzRGRGpDTywrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0Usb0NBQW9DO3dEQU1yQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZXR0aW5nVHlwZSB9IGZyb20gJ25nLWNvbmZpZ2NhdC1wdWJsaWNhcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb25maWdjYXQtcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGxvdXQtcGVyY2VudGFnZS1pdGVtcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JvbGxvdXQtcGVyY2VudGFnZS1pdGVtcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJvbGxvdXRQZXJjZW50YWdlSXRlbXNDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IFVudHlwZWRGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gIFNldHRpbmdUeXBlID0gU2V0dGluZ1R5cGU7XG5cblxuICBzZXR0aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3NldHRpbmcnKT8udmFsdWU7XG4gIH1cblxuICByb2xsb3V0UnVsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgncm9sbG91dFJ1bGVzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgfVxuXG4gIHJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgncm9sbG91dFBlcmNlbnRhZ2VJdGVtcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gIH1cblxuICByb2xsb3V0UGVyY2VudGFnZUl0ZW1zU3VtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3JvbGxvdXRQZXJjZW50YWdlSXRlbXNTdW0nKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICB2YWx1ZShyb2xsb3V0UGVyY2VudGFnZUl0ZW06IFVudHlwZWRGb3JtR3JvdXApOiBVbnR5cGVkRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmcoKS5zZXR0aW5nVHlwZSA9PT0gU2V0dGluZ1R5cGUuQm9vbGVhbiA/XG4gICAgICByb2xsb3V0UGVyY2VudGFnZUl0ZW0uZ2V0KCd2YWx1ZURpc2FibGVkJykgYXMgVW50eXBlZEZvcm1Db250cm9sIDpcbiAgICAgIHJvbGxvdXRQZXJjZW50YWdlSXRlbS5nZXQoJ3ZhbHVlJykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBwZXJjZW50YWdlQ2hhbmdlZChpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XS52YWx1ZS5wZXJjZW50YWdlIDwgMCkge1xuICAgICAgKHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XSBhcyBVbnR5cGVkRm9ybUdyb3VwKS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDApO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb2xsb3V0UGVyY2VudGFnZUl0ZW1zKCkuY29udHJvbHNbaW5kZXhdLnZhbHVlLnBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9sc1tpbmRleF0gYXMgVW50eXBlZEZvcm1Hcm91cCkuY29udHJvbHMucGVyY2VudGFnZS5zZXRWYWx1ZSgxMDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggPT09IDIpIHtcbiAgICAgICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9sc1sxIC0gaW5kZXhdIGFzIFVudHlwZWRGb3JtR3JvdXApLmNvbnRyb2xzLnBlcmNlbnRhZ2VcbiAgICAgICAgLnNldFZhbHVlKDEwMCAtIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLmNvbnRyb2xzW2luZGV4XS52YWx1ZS5wZXJjZW50YWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN1bSgpO1xuICB9XG5cbiAgdXBkYXRlU3VtKCkge1xuICAgIGlmICh0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtc1N1bSgpLnNldFZhbHVlKDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtc1N1bSgpLnNldFZhbHVlKFxuICAgICAgICB0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5tYXAodiA9PiB2LnZhbHVlLnBlcmNlbnRhZ2UpXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVJvbGxvdXRQZXJjZW50YWdlSXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5yb2xsb3V0UGVyY2VudGFnZUl0ZW1zKCkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgfVxuXG4gIHJlbW92ZUFsbCgpIHtcbiAgICB0aGlzLnJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jbGVhcigpO1xuICAgIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVTdW0oKTtcbiAgfVxuXG4gIGdldFJvbGxvdXRQZXJjZW50YWdlSXRlbUZvcm1Hcm91cHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucm9sbG91dFBlcmNlbnRhZ2VJdGVtcygpPy5jb250cm9scz8ubWFwKGMgPT4gYyBhcyBVbnR5cGVkRm9ybUdyb3VwKTtcbiAgfVxuXG4gIGdldFBlcmNlbnRhZ2VGb3JtQ29udHJvbChyb2xsb3V0UGVyY2VudGFnZUl0ZW06IGFueSkge1xuICAgIHJldHVybiByb2xsb3V0UGVyY2VudGFnZUl0ZW0uY29udHJvbHMucGVyY2VudGFnZSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwZXJjZW50YWdlLXdyYXBwZXJcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImlmXCIgKm5nSWY9XCJyb2xsb3V0UnVsZXMoKS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxtYXQtY2hpcC1zZXQ+XG4gICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9XCJjaGlwXCI+RUxTRSBJRjwvbWF0LWNoaXA+XG4gICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJncm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlLXJvdyBmbGV4XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb2xsb3V0UGVyY2VudGFnZUl0ZW0gb2YgZ2V0Um9sbG91dFBlcmNlbnRhZ2VJdGVtRm9ybUdyb3VwcygpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgW2Zvcm1Db250cm9sXT1cImdldFBlcmNlbnRhZ2VGb3JtQ29udHJvbChyb2xsb3V0UGVyY2VudGFnZUl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInBlcmNlbnRhZ2VDaGFuZ2VkKGkpXCIgZGlnaXRPbmx5PiVcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXJzXCI+b2YgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL2FkdmFuY2VkL3VzZXItb2JqZWN0XCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj51c2VyczwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZS1vcHRpb25cIiBtYXRUb29sdGlwPVwiUmVtb3ZlIHRoaXMgJSBvcHRpb25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJlYWRPbmx5ICYmIHJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggPiAyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUm9sbG91dFBlcmNlbnRhZ2VJdGVtKGkpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHNwYW4gbWF0VG9vbHRpcD1cIlRoZSBzdW0gb2YgcGVyY2VudGFnZXMgbXVzdCBiZSBlcXVhbCB0byAxMDAuXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGkgPT09IHJvbGxvdXRQZXJjZW50YWdlSXRlbXMoKS5jb250cm9scy5sZW5ndGggLTEpICYmIChyb2xsb3V0UGVyY2VudGFnZUl0ZW1zU3VtKCkuaW52YWxpZClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJ3YXJuXCI+XG4gICAgICAgICAgICAgICAgICAgIGVycm9yX291dGxpbmVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWUgZmxleFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWUtbmFtZVwiICpuZ0lmPVwic2V0dGluZygpLnNldHRpbmdUeXBlICE9PSBTZXR0aW5nVHlwZS5Cb29sZWFuXCI+U2VydmVkIHZhbHVlOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8Y29uZmlnY2F0LXZhbHVlIGNsYXNzPVwic2VydmVkLXZhbHVlXCIgW3ZhbHVlRm9ybUNvbnRyb2xdPVwidmFsdWUocm9sbG91dFBlcmNlbnRhZ2VJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZXR0aW5nXT1cInNldHRpbmcoKVwiPlxuICAgICAgICAgICAgICAgIDwvY29uZmlnY2F0LXZhbHVlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCIgbWF0VG9vbHRpcD1cIlJlbW92ZSAlIG9wdGlvbnNcIiAoY2xpY2spPVwicmVtb3ZlQWxsKClcIiAqbmdJZj1cIiFyZWFkT25seVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -277,10 +277,10 @@ export class RolloutRulesComponent {
|
|
|
277
277
|
getRolloutRuleSegmentIdFormControl(rolloutRule) {
|
|
278
278
|
return rolloutRule.controls.segmentId;
|
|
279
279
|
}
|
|
280
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
281
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RolloutRulesComponent, selector: "configcat-rollout-rules", inputs: { formGroup: "formGroup", readOnly: "readOnly", segments: "segments" }, ngImport: i0, template: "<div [formGroup]=\"formGroup\">\n <div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"readOnly\"\n [cdkDropListData]=\"rolloutRules().controls\">\n <div *ngFor=\"let rolloutRule of rolloutRules().controls; trackBy: trackByIndex; let i = index\" cdkDrag>\n <div class=\"targeting-row\">\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 0\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user's</a>\n </div>\n\n <select class=\"custom-select attribute-select\" matTooltip=\"Comparison attribute\"\n matTooltipPosition=\"above\"\n (change)=\"attributeChanged($event.target, getRolloutRuleComparisonAttributeFormControl(rolloutRule))\"\n [disabled]=\"readOnly\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === getRolloutRuleComparisonAttributeFormControl(rolloutRule).value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) === -1\">\n Custom\n </option>\n </select>\n\n\n <span class=\"attribute-span\" matTooltip=\"Custom user attribute\" matTooltipPosition=\"above\"\n [hidden]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) !== -1\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid\">*</span>\n <input\n [ngClass]=\"{'invalid': getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid}\"\n type=\"text\" matInput [matAutocomplete]=\"auto\"\n [formControl]=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule)\" class=\"attribute\"\n placeholder=\"e.g. Eye color\">\n </span>\n\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of comparisonAttributes()\" [value]=\"option\">\n {{option}}\n </mat-option>\n </mat-autocomplete>\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select\" [formControl]=\"getRolloutRuleComparatorFormControl(rolloutRule)\"\n matTooltip=\"Comparator\" matTooltipPosition=\"above\"\n (change)=\"comparatorChanged(rolloutRule)\">\n <optgroup label=\"CONFIDENTIAL TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(16, 18)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(0, 4)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"SEMANTIC VERSION\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(4, 10)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"NUMBER\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(10, 16)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n </select>\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\">\n <a href=\"https://configcat.com/docs/advanced/targeting/#comparator\" target=\"_blank\"\n rel=\"noopener noreferrer\">\n <mat-icon>info</mat-icon>\n </a>\n </div>\n </div>\n\n <div class=\"comparison-value\">\n <span class=\"error\"\n *ngIf=\"getRolloutRuleComparisonValueFormControl(rolloutRule).invalid\">*</span>\n\n <input [ngClass]=\"{'invalid': getRolloutRuleComparisonValueFormControl(rolloutRule).invalid}\"\n [formControl]=\"getRolloutRuleComparisonValueFormControl(rolloutRule)\"\n [type]=\"getComparisonValueType(rolloutRule)\" [placeholder]=\"getPlaceHolder(rolloutRule)\"\n matTooltip=\"Comparison value\" matTooltipPosition=\"above\" inputDisplayNormalizer>\n <div class=\"expand\" matTooltip=\"Pop-out Editor\" matTooltipPosition=\"above\"\n (click)=\"popOut(rolloutRule)\" *ngIf=\"getComparisonValueType(rolloutRule)==='text'\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 1\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user</a>\n </div>\n\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select segment-comparator\"\n [formControl]=\"getRolloutRuleSegmentComparatorFormControl(rolloutRule)\"\n matTooltip=\"Segment comparator\" matTooltipPosition=\"above\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n </div>\n\n <div class=\"select-wrapper\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleSegmentIdFormControl(rolloutRule).invalid\">*</span>\n <select class=\"custom-select segment-select\"\n [formControl]=\"getRolloutRuleSegmentIdFormControl(rolloutRule)\" matTooltip=\"Segment\"\n matTooltipPosition=\"above\"\n [ngClass]=\"{'invalid': getRolloutRuleSegmentIdFormControl(rolloutRule).invalid}\">\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\">\n {{segment.name}}\n </option>\n </select>\n </div>\n\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n\n <div class=\"value flex\">\n <div class=\"serve\" *ngIf=\"setting().settingType !== SettingType.Boolean\">\n <mat-chip-set>\n <mat-chip class=\"chip\">Serve:</mat-chip>\n </mat-chip-set>\n </div>\n\n <configcat-value class=\"served-value\"\n [valueFormControl]=\"getRolloutRuleValueFormControl(rolloutRule)\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.targeting-row{border:1px solid #d5d5d5;background-color:#fff;margin:1em;display:flex;position:relative;padding:.5em 0}.targeting-row:hover{background-color:#dbedff}.targeting-row .select-wrapper{position:relative}.targeting-row .info{position:absolute;cursor:pointer;top:-8px;left:166px;border-radius:50%;background-color:#fff;height:18px;width:18px}.targeting-row .info a{color:#0068f0;opacity:.5}.targeting-row .info a:hover{opacity:1}.targeting-row .info mat-icon{font-size:18px;height:18px;width:18px}.targeting-row .warn{position:absolute;cursor:pointer;top:-8px;left:166px;height:18px;width:18px;border-radius:50%;background-color:#fff}.targeting-row .warn a{color:#fdc67f}.targeting-row .warn a:hover{color:#ff9200}.targeting-row .warn mat-icon{font-size:18px;height:18px;width:18px}.custom-select{margin-left:.5em;width:170px;background-color:#fff;border:1px solid #e5e5e5;height:30px;min-height:30px;line-height:30px;min-width:170px;font-size:.8em;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}.custom-select:focus{outline-color:#e5e5e5;outline-offset:-1px}.fields{justify-content:left;max-width:1060px;flex-grow:100}.fields .if{display:flex;align-items:center}.fields .if>*{margin:0 .5em}.fields .if .spacing{margin-right:41px}.fields .if .user-link{width:40px}.fields .if .chip{font-size:12px;background-color:#67b1fc3d}.fields .attribute-span{margin-left:.5em;display:flex;align-items:center}.fields .attribute-span[hidden]{display:none}.fields .attribute{width:170px;background-color:#fff;border:1px solid #e5e5e5;margin:3px 0;min-height:28px;flex-grow:100;min-width:170px;padding:0 30px 0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300;font-size:13.3px}.fields .invalid{border:1px solid #ff5252}.fields .attribute-error{color:#ff5252;margin:0 5px}.fields .delete{position:absolute;cursor:pointer;top:-9px;right:-10px;z-index:999;border-radius:50%;background-color:#fff;height:20px;width:20px;color:#ed5251}.fields .delete mat-icon{font-size:20px;height:20px;width:20px;opacity:.5}.fields .delete:hover mat-icon{opacity:1}.fields .drag-handle{position:absolute;cursor:-webkit-grab;cursor:-moz-grab;left:-20px;top:14px}.fields .drag-handle mat-icon{font-size:20px}.fields .attribute-select{min-width:100px;width:100px;margin-left:0}.fields .segment-comparator,.fields .segment-select{margin-left:0;margin-right:.5em}.fields .segment-more mat-icon{position:relative;top:3px;cursor:pointer;font-size:16px;height:16px;width:16px;color:#797979;margin-top:3px}.fields .comparison-value{flex-grow:100;min-width:150px;display:flex;align-items:center;margin-left:.5em;margin-right:.5em}.fields .comparison-value .error{color:#ff5252;margin:0 5px}.fields .comparison-value input{background-color:#fff;border:1px solid #e5e5e5;margin:3px 0;min-height:28px;min-width:150px;flex-grow:100;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}.fields .comparison-value input[type=text]{padding-right:30px}.fields .comparison-value input:focus{outline-color:#e5e5e5;outline-offset:-1px}.fields .comparison-value .invalid{border:1px solid #ff5252}.fields .comparison-value .expand{position:relative;height:24px;cursor:pointer;margin-left:-28px;z-index:1;color:#b3b3b3;background-color:#fff}.fields .comparison-value .expand mat-icon{transform:rotate(45deg)}.value{margin-left:auto;flex-wrap:nowrap}.value .serve{margin:0 2px 0 5px}.value .serve .chip{font-size:12px;background-color:#67b1fc3d}.value .served-value{margin:3px 0}.flex{display:flex;flex-wrap:wrap;align-items:center}@media (max-width: 1200px){.targeting-row{flex-wrap:wrap}.targeting-row .fields{max-width:500px}}@media (max-width: 920px){.value .served-value{margin:3px 7px 3px 0}.targeting-row .fields .drag-handle{left:-18px}}@media (max-width: 410px){.value .served-value{margin:7px 7px 3px 4px}}@media (max-width: 510px){.fields .comparison-value .error{display:none}}@media (max-width: 650px){.targeting-row{flex-direction:column}.targeting-row .help{left:161px}.targeting-row .fields{flex-direction:column;align-items:stretch}.targeting-row .fields .custom-select{margin:7px 7px 0}.targeting-row .fields .comparison-value{margin:7px}.targeting-row .fields .comparison-value input{margin:0 4px 0 0}.targeting-row .fields .attribute-span{margin:7px 7px 0}.targeting-row .fields .if{font-size:12px}.targeting-row .fields .if .spacing{margin-right:3px}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i9.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i9.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i10.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i10.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i12.ValueComponent, selector: "configcat-value", inputs: ["valueFormControl", "setting"] }, { kind: "directive", type: i13.InputDisplayNormalizerDirective, selector: "input[inputDisplayNormalizer]" }] }); }
|
|
280
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RolloutRulesComponent, deps: [{ token: i1.MatDialog }, { token: i2.SettingListFormHelper }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
281
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RolloutRulesComponent, selector: "configcat-rollout-rules", inputs: { formGroup: "formGroup", readOnly: "readOnly", segments: "segments" }, ngImport: i0, template: "<div [formGroup]=\"formGroup\">\n <div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"readOnly\"\n [cdkDropListData]=\"rolloutRules().controls\">\n <div *ngFor=\"let rolloutRule of rolloutRules().controls; trackBy: trackByIndex; let i = index\" cdkDrag>\n <div class=\"targeting-row\">\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 0\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user's</a>\n </div>\n\n <select class=\"custom-select attribute-select\" matTooltip=\"Comparison attribute\"\n matTooltipPosition=\"above\"\n (change)=\"attributeChanged($event.target, getRolloutRuleComparisonAttributeFormControl(rolloutRule))\"\n [disabled]=\"readOnly\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === getRolloutRuleComparisonAttributeFormControl(rolloutRule).value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) === -1\">\n Custom\n </option>\n </select>\n\n\n <span class=\"attribute-span\" matTooltip=\"Custom user attribute\" matTooltipPosition=\"above\"\n [hidden]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) !== -1\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid\">*</span>\n <input\n [ngClass]=\"{'invalid': getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid}\"\n type=\"text\" matInput [matAutocomplete]=\"auto\"\n [formControl]=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule)\" class=\"attribute\"\n placeholder=\"e.g. Eye color\">\n </span>\n\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of comparisonAttributes()\" [value]=\"option\">\n {{option}}\n </mat-option>\n </mat-autocomplete>\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select\" [formControl]=\"getRolloutRuleComparatorFormControl(rolloutRule)\"\n matTooltip=\"Comparator\" matTooltipPosition=\"above\"\n (change)=\"comparatorChanged(rolloutRule)\">\n <optgroup label=\"CONFIDENTIAL TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(16, 18)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(0, 4)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"SEMANTIC VERSION\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(4, 10)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"NUMBER\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(10, 16)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n </select>\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\">\n <a href=\"https://configcat.com/docs/advanced/targeting/#comparator\" target=\"_blank\"\n rel=\"noopener noreferrer\">\n <mat-icon>info</mat-icon>\n </a>\n </div>\n </div>\n\n <div class=\"comparison-value\">\n <span class=\"error\"\n *ngIf=\"getRolloutRuleComparisonValueFormControl(rolloutRule).invalid\">*</span>\n\n <input [ngClass]=\"{'invalid': getRolloutRuleComparisonValueFormControl(rolloutRule).invalid}\"\n [formControl]=\"getRolloutRuleComparisonValueFormControl(rolloutRule)\"\n [type]=\"getComparisonValueType(rolloutRule)\" [placeholder]=\"getPlaceHolder(rolloutRule)\"\n matTooltip=\"Comparison value\" matTooltipPosition=\"above\" inputDisplayNormalizer>\n <div class=\"expand\" matTooltip=\"Pop-out Editor\" matTooltipPosition=\"above\"\n (click)=\"popOut(rolloutRule)\" *ngIf=\"getComparisonValueType(rolloutRule)==='text'\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 1\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user</a>\n </div>\n\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select segment-comparator\"\n [formControl]=\"getRolloutRuleSegmentComparatorFormControl(rolloutRule)\"\n matTooltip=\"Segment comparator\" matTooltipPosition=\"above\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n </div>\n\n <div class=\"select-wrapper\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleSegmentIdFormControl(rolloutRule).invalid\">*</span>\n <select class=\"custom-select segment-select\"\n [formControl]=\"getRolloutRuleSegmentIdFormControl(rolloutRule)\" matTooltip=\"Segment\"\n matTooltipPosition=\"above\"\n [ngClass]=\"{'invalid': getRolloutRuleSegmentIdFormControl(rolloutRule).invalid}\">\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\">\n {{segment.name}}\n </option>\n </select>\n </div>\n\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n\n <div class=\"value flex\">\n <div class=\"serve\" *ngIf=\"setting().settingType !== SettingType.Boolean\">\n <mat-chip-set>\n <mat-chip class=\"chip\">Serve:</mat-chip>\n </mat-chip-set>\n </div>\n\n <configcat-value class=\"served-value\"\n [valueFormControl]=\"getRolloutRuleValueFormControl(rolloutRule)\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.targeting-row{border:1px solid #d5d5d5;background-color:#fff;margin:1em;display:flex;position:relative;padding:.5em 0}.targeting-row:hover{background-color:#dbedff}.targeting-row .select-wrapper{position:relative}.targeting-row .info{position:absolute;cursor:pointer;top:-8px;left:166px;border-radius:50%;background-color:#fff;height:18px;width:18px}.targeting-row .info a{color:#0068f0;opacity:.5}.targeting-row .info a:hover{opacity:1}.targeting-row .info mat-icon{font-size:18px;height:18px;width:18px}.targeting-row .warn{position:absolute;cursor:pointer;top:-8px;left:166px;height:18px;width:18px;border-radius:50%;background-color:#fff}.targeting-row .warn a{color:#fdc67f}.targeting-row .warn a:hover{color:#ff9200}.targeting-row .warn mat-icon{font-size:18px;height:18px;width:18px}.custom-select{margin-left:.5em;width:170px;background-color:#fff;border:1px solid #e5e5e5;height:30px;min-height:30px;line-height:30px;min-width:170px;font-size:.8em;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}.custom-select:focus{outline-color:#e5e5e5;outline-offset:-1px}.fields{justify-content:left;max-width:1060px;flex-grow:100}.fields .if{display:flex;align-items:center}.fields .if>*{margin:0 .5em}.fields .if .spacing{margin-right:41px}.fields .if .user-link{width:40px}.fields .if .chip{font-size:12px;background-color:#67b1fc3d}.fields .attribute-span{margin-left:.5em;display:flex;align-items:center}.fields .attribute-span[hidden]{display:none}.fields .attribute{width:170px;background-color:#fff;border:1px solid #e5e5e5;margin:3px 0;min-height:28px;flex-grow:100;min-width:170px;padding:0 30px 0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300;font-size:13.3px}.fields .invalid{border:1px solid #ff5252}.fields .attribute-error{color:#ff5252;margin:0 5px}.fields .delete{position:absolute;cursor:pointer;top:-9px;right:-10px;z-index:999;border-radius:50%;background-color:#fff;height:20px;width:20px;color:#ed5251}.fields .delete mat-icon{font-size:20px;height:20px;width:20px;opacity:.5}.fields .delete:hover mat-icon{opacity:1}.fields .drag-handle{position:absolute;cursor:-webkit-grab;cursor:-moz-grab;left:-20px;top:14px}.fields .drag-handle mat-icon{font-size:20px}.fields .attribute-select{min-width:100px;width:100px;margin-left:0}.fields .segment-comparator,.fields .segment-select{margin-left:0;margin-right:.5em}.fields .segment-more mat-icon{position:relative;top:3px;cursor:pointer;font-size:16px;height:16px;width:16px;color:#797979;margin-top:3px}.fields .comparison-value{flex-grow:100;min-width:150px;display:flex;align-items:center;margin-left:.5em;margin-right:.5em}.fields .comparison-value .error{color:#ff5252;margin:0 5px}.fields .comparison-value input{background-color:#fff;border:1px solid #e5e5e5;margin:3px 0;min-height:28px;min-width:150px;flex-grow:100;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}.fields .comparison-value input[type=text]{padding-right:30px}.fields .comparison-value input:focus{outline-color:#e5e5e5;outline-offset:-1px}.fields .comparison-value .invalid{border:1px solid #ff5252}.fields .comparison-value .expand{position:relative;height:24px;cursor:pointer;margin-left:-28px;z-index:1;color:#b3b3b3;background-color:#fff}.fields .comparison-value .expand mat-icon{transform:rotate(45deg)}.value{margin-left:auto;flex-wrap:nowrap}.value .serve{margin:0 2px 0 5px}.value .serve .chip{font-size:12px;background-color:#67b1fc3d}.value .served-value{margin:3px 0}.flex{display:flex;flex-wrap:wrap;align-items:center}@media (max-width: 1200px){.targeting-row{flex-wrap:wrap}.targeting-row .fields{max-width:500px}}@media (max-width: 920px){.value .served-value{margin:3px 7px 3px 0}.targeting-row .fields .drag-handle{left:-18px}}@media (max-width: 410px){.value .served-value{margin:7px 7px 3px 4px}}@media (max-width: 510px){.fields .comparison-value .error{display:none}}@media (max-width: 650px){.targeting-row{flex-direction:column}.targeting-row .help{left:161px}.targeting-row .fields{flex-direction:column;align-items:stretch}.targeting-row .fields .custom-select{margin:7px 7px 0}.targeting-row .fields .comparison-value{margin:7px}.targeting-row .fields .comparison-value input{margin:0 4px 0 0}.targeting-row .fields .attribute-span{margin:7px 7px 0}.targeting-row .fields .if{font-size:12px}.targeting-row .fields .if .spacing{margin-right:3px}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i9.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i9.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i10.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i10.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i12.ValueComponent, selector: "configcat-value", inputs: ["valueFormControl", "setting"] }, { kind: "directive", type: i13.InputDisplayNormalizerDirective, selector: "input[inputDisplayNormalizer]" }] }); }
|
|
282
282
|
}
|
|
283
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RolloutRulesComponent, decorators: [{
|
|
284
284
|
type: Component,
|
|
285
285
|
args: [{ selector: 'configcat-rollout-rules', template: "<div [formGroup]=\"formGroup\">\n <div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"readOnly\"\n [cdkDropListData]=\"rolloutRules().controls\">\n <div *ngFor=\"let rolloutRule of rolloutRules().controls; trackBy: trackByIndex; let i = index\" cdkDrag>\n <div class=\"targeting-row\">\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 0\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user's</a>\n </div>\n\n <select class=\"custom-select attribute-select\" matTooltip=\"Comparison attribute\"\n matTooltipPosition=\"above\"\n (change)=\"attributeChanged($event.target, getRolloutRuleComparisonAttributeFormControl(rolloutRule))\"\n [disabled]=\"readOnly\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === getRolloutRuleComparisonAttributeFormControl(rolloutRule).value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) === -1\">\n Custom\n </option>\n </select>\n\n\n <span class=\"attribute-span\" matTooltip=\"Custom user attribute\" matTooltipPosition=\"above\"\n [hidden]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) !== -1\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid\">*</span>\n <input\n [ngClass]=\"{'invalid': getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid}\"\n type=\"text\" matInput [matAutocomplete]=\"auto\"\n [formControl]=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule)\" class=\"attribute\"\n placeholder=\"e.g. Eye color\">\n </span>\n\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of comparisonAttributes()\" [value]=\"option\">\n {{option}}\n </mat-option>\n </mat-autocomplete>\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select\" [formControl]=\"getRolloutRuleComparatorFormControl(rolloutRule)\"\n matTooltip=\"Comparator\" matTooltipPosition=\"above\"\n (change)=\"comparatorChanged(rolloutRule)\">\n <optgroup label=\"CONFIDENTIAL TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(16, 18)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(0, 4)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"SEMANTIC VERSION\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(4, 10)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"NUMBER\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(10, 16)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n </select>\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\">\n <a href=\"https://configcat.com/docs/advanced/targeting/#comparator\" target=\"_blank\"\n rel=\"noopener noreferrer\">\n <mat-icon>info</mat-icon>\n </a>\n </div>\n </div>\n\n <div class=\"comparison-value\">\n <span class=\"error\"\n *ngIf=\"getRolloutRuleComparisonValueFormControl(rolloutRule).invalid\">*</span>\n\n <input [ngClass]=\"{'invalid': getRolloutRuleComparisonValueFormControl(rolloutRule).invalid}\"\n [formControl]=\"getRolloutRuleComparisonValueFormControl(rolloutRule)\"\n [type]=\"getComparisonValueType(rolloutRule)\" [placeholder]=\"getPlaceHolder(rolloutRule)\"\n matTooltip=\"Comparison value\" matTooltipPosition=\"above\" inputDisplayNormalizer>\n <div class=\"expand\" matTooltip=\"Pop-out Editor\" matTooltipPosition=\"above\"\n (click)=\"popOut(rolloutRule)\" *ngIf=\"getComparisonValueType(rolloutRule)==='text'\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 1\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user</a>\n </div>\n\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select segment-comparator\"\n [formControl]=\"getRolloutRuleSegmentComparatorFormControl(rolloutRule)\"\n matTooltip=\"Segment comparator\" matTooltipPosition=\"above\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n </div>\n\n <div class=\"select-wrapper\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleSegmentIdFormControl(rolloutRule).invalid\">*</span>\n <select class=\"custom-select segment-select\"\n [formControl]=\"getRolloutRuleSegmentIdFormControl(rolloutRule)\" matTooltip=\"Segment\"\n matTooltipPosition=\"above\"\n [ngClass]=\"{'invalid': getRolloutRuleSegmentIdFormControl(rolloutRule).invalid}\">\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\">\n {{segment.name}}\n </option>\n </select>\n </div>\n\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n\n <div class=\"value flex\">\n <div class=\"serve\" *ngIf=\"setting().settingType !== SettingType.Boolean\">\n <mat-chip-set>\n <mat-chip class=\"chip\">Serve:</mat-chip>\n </mat-chip-set>\n </div>\n\n <configcat-value class=\"served-value\"\n [valueFormControl]=\"getRolloutRuleValueFormControl(rolloutRule)\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.targeting-row{border:1px solid #d5d5d5;background-color:#fff;margin:1em;display:flex;position:relative;padding:.5em 0}.targeting-row:hover{background-color:#dbedff}.targeting-row .select-wrapper{position:relative}.targeting-row .info{position:absolute;cursor:pointer;top:-8px;left:166px;border-radius:50%;background-color:#fff;height:18px;width:18px}.targeting-row .info a{color:#0068f0;opacity:.5}.targeting-row .info a:hover{opacity:1}.targeting-row .info mat-icon{font-size:18px;height:18px;width:18px}.targeting-row .warn{position:absolute;cursor:pointer;top:-8px;left:166px;height:18px;width:18px;border-radius:50%;background-color:#fff}.targeting-row .warn a{color:#fdc67f}.targeting-row .warn a:hover{color:#ff9200}.targeting-row .warn mat-icon{font-size:18px;height:18px;width:18px}.custom-select{margin-left:.5em;width:170px;background-color:#fff;border:1px solid #e5e5e5;height:30px;min-height:30px;line-height:30px;min-width:170px;font-size:.8em;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}.custom-select:focus{outline-color:#e5e5e5;outline-offset:-1px}.fields{justify-content:left;max-width:1060px;flex-grow:100}.fields .if{display:flex;align-items:center}.fields .if>*{margin:0 .5em}.fields .if .spacing{margin-right:41px}.fields .if .user-link{width:40px}.fields .if .chip{font-size:12px;background-color:#67b1fc3d}.fields .attribute-span{margin-left:.5em;display:flex;align-items:center}.fields .attribute-span[hidden]{display:none}.fields .attribute{width:170px;background-color:#fff;border:1px solid #e5e5e5;margin:3px 0;min-height:28px;flex-grow:100;min-width:170px;padding:0 30px 0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300;font-size:13.3px}.fields .invalid{border:1px solid #ff5252}.fields .attribute-error{color:#ff5252;margin:0 5px}.fields .delete{position:absolute;cursor:pointer;top:-9px;right:-10px;z-index:999;border-radius:50%;background-color:#fff;height:20px;width:20px;color:#ed5251}.fields .delete mat-icon{font-size:20px;height:20px;width:20px;opacity:.5}.fields .delete:hover mat-icon{opacity:1}.fields .drag-handle{position:absolute;cursor:-webkit-grab;cursor:-moz-grab;left:-20px;top:14px}.fields .drag-handle mat-icon{font-size:20px}.fields .attribute-select{min-width:100px;width:100px;margin-left:0}.fields .segment-comparator,.fields .segment-select{margin-left:0;margin-right:.5em}.fields .segment-more mat-icon{position:relative;top:3px;cursor:pointer;font-size:16px;height:16px;width:16px;color:#797979;margin-top:3px}.fields .comparison-value{flex-grow:100;min-width:150px;display:flex;align-items:center;margin-left:.5em;margin-right:.5em}.fields .comparison-value .error{color:#ff5252;margin:0 5px}.fields .comparison-value input{background-color:#fff;border:1px solid #e5e5e5;margin:3px 0;min-height:28px;min-width:150px;flex-grow:100;padding:0 5px;font-family:Montserrat,Roboto,Helvetica Neue,sans-serif;font-weight:300}.fields .comparison-value input[type=text]{padding-right:30px}.fields .comparison-value input:focus{outline-color:#e5e5e5;outline-offset:-1px}.fields .comparison-value .invalid{border:1px solid #ff5252}.fields .comparison-value .expand{position:relative;height:24px;cursor:pointer;margin-left:-28px;z-index:1;color:#b3b3b3;background-color:#fff}.fields .comparison-value .expand mat-icon{transform:rotate(45deg)}.value{margin-left:auto;flex-wrap:nowrap}.value .serve{margin:0 2px 0 5px}.value .serve .chip{font-size:12px;background-color:#67b1fc3d}.value .served-value{margin:3px 0}.flex{display:flex;flex-wrap:wrap;align-items:center}@media (max-width: 1200px){.targeting-row{flex-wrap:wrap}.targeting-row .fields{max-width:500px}}@media (max-width: 920px){.value .served-value{margin:3px 7px 3px 0}.targeting-row .fields .drag-handle{left:-18px}}@media (max-width: 410px){.value .served-value{margin:7px 7px 3px 4px}}@media (max-width: 510px){.fields .comparison-value .error{display:none}}@media (max-width: 650px){.targeting-row{flex-direction:column}.targeting-row .help{left:161px}.targeting-row .fields{flex-direction:column;align-items:stretch}.targeting-row .fields .custom-select{margin:7px 7px 0}.targeting-row .fields .comparison-value{margin:7px}.targeting-row .fields .comparison-value input{margin:0 4px 0 0}.targeting-row .fields .attribute-span{margin:7px 7px 0}.targeting-row .fields .if{font-size:12px}.targeting-row .fields .if .spacing{margin-right:3px}}\n"] }]
|
|
286
286
|
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.SettingListFormHelper }], propDecorators: { formGroup: [{
|
|
@@ -290,4 +290,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
290
290
|
}], segments: [{
|
|
291
291
|
type: Input
|
|
292
292
|
}] } });
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbG91dC1ydWxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvc2V0dGluZy1saXN0L3NldHRpbmcvcm9sbG91dC1ydWxlcy9yb2xsb3V0LXJ1bGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXJ1bGVzL3JvbGxvdXQtcnVsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUEwRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBTzVELE1BQU0sT0FBTyxxQkFBcUI7SUF1Q2hDLFlBQ1UsTUFBaUIsRUFDakIscUJBQTRDO1FBRDVDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQXRDN0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUcxQixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUUxQixnQ0FBMkIsR0FBRyxDQUFDLFlBQVks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LENBQUM7OEdBNVNVLHFCQUFxQjtrR0FBckIscUJBQXFCLCtJQ2ZsQywwdVRBbUtNOzsyRkRwSk8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHlCQUF5QjtrSEFNMUIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IHZhbGlkIH0gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IEV4cGFuZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2RpYWxvZ3MvZXhwYW5kLWRpYWxvZy9leHBhbmQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgU2V0dGluZ1R5cGUsIFJvbGxvdXRSdWxlQ29tcGFyYXRvciwgU2VnbWVudExpc3RNb2RlbCwgU2VnbWVudENvbXBhcmF0b3IgfSBmcm9tICduZy1jb25maWdjYXQtcHVibGljYXBpJztcbmltcG9ydCB7IFNldHRpbmdMaXN0Rm9ybUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy9zZXR0aW5nLWxpc3QtZm9ybS1oZWxwZXInO1xuaW1wb3J0IHsgRm9ybUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy9mb3JtLWhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvbmZpZ2NhdC1yb2xsb3V0LXJ1bGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGxvdXQtcnVsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yb2xsb3V0LXJ1bGVzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUm9sbG91dFJ1bGVzQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWdtZW50cyE6IFNlZ21lbnRMaXN0TW9kZWxbXTtcblxuICBTZXR0aW5nVHlwZSA9IFNldHRpbmdUeXBlO1xuXG4gIGRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcyA9IFsnSWRlbnRpZmllcicsICdFbWFpbCcsICdDb3VudHJ5J107XG5cbiAgcm9sbG91dFJ1bGVDb21wYXJhdG9ycyA9IFtcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNPbmVPZiwgbGFiZWw6ICdJUyBPTkUgT0YgKGNsZWFydGV4dCknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLklzTm90T25lT2YsIGxhYmVsOiAnSVMgTk9UIE9ORSBPRiAoY2xlYXJ0ZXh0KScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuQ29udGFpbnMsIGxhYmVsOiAnQ09OVEFJTlMgKGNsZWFydGV4dCknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLkRvZXNOb3RDb250YWluLCBsYWJlbDogJ0RPRVMgTk9UIENPTlRBSU4gKGNsZWFydGV4dCknIH0sXG5cbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVySXNPbmVPZiwgbGFiZWw6ICdJUyBPTkUgT0YgKFNlbVZlciknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlcklzTm90T25lT2YsIGxhYmVsOiAnSVMgTk9UIE9ORSBPRiAoU2VtVmVyKScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVyTGVzcywgbGFiZWw6ICc8IChTZW1WZXIpJyB9LFxuICAgIHsgdmFsdWU6IFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzT3JFcXVhbHMsIGxhYmVsOiAnPD0gKFNlbVZlciknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXIsIGxhYmVsOiAnPiAoU2VtVmVyKScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlck9yRXF1YWxzLCBsYWJlbDogJz49IChTZW1WZXIpJyB9LFxuXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckVxdWFscywgbGFiZWw6ICc9IChOdW1iZXIpJyB9LFxuICAgIHsgdmFsdWU6IFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJEb2VzTm90RXF1YWwsIGxhYmVsOiAnIT0gKE51bWJlciknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckxlc3MsIGxhYmVsOiAnPCAoTnVtYmVyKScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuTnVtYmVyTGVzc09yRXF1YWxzLCBsYWJlbDogJzw9IChOdW1iZXIpJyB9LFxuICAgIHsgdmFsdWU6IFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJHcmVhdGVyLCBsYWJlbDogJz4gKE51bWJlciknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckdyZWF0ZXJPckVxdWFscywgbGFiZWw6ICc+PSAoTnVtYmVyKScgfSxcblxuICAgIHsgdmFsdWU6IFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW5zaXRpdmVJc09uZU9mLCBsYWJlbDogJ0lTIE9ORSBPRiAoaGFzaGVkKScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNOb3RPbmVPZiwgbGFiZWw6ICdJUyBOT1QgT05FIE9GIChoYXNoZWQpJyB9LFxuICBdO1xuXG4gIHNlZ21lbnRDb21wYXJhdG9ycyA9IFtcbiAgICB7IHZhbHVlOiBTZWdtZW50Q29tcGFyYXRvci5Jc0luLCBsYWJlbDogJ0lTIElOIFNFR01FTlQnIH0sXG4gICAgeyB2YWx1ZTogU2VnbWVudENvbXBhcmF0b3IuSXNOb3RJbiwgbGFiZWw6ICdJUyBOT1QgSU4gU0VHTUVOVCcgfSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgc2V0dGluZ0xpc3RGb3JtSGVscGVyOiBTZXR0aW5nTGlzdEZvcm1IZWxwZXIpIHsgfVxuXG4gIHNldHRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgnc2V0dGluZycpPy52YWx1ZTtcbiAgfVxuXG4gIHJvbGxvdXRSdWxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdyb2xsb3V0UnVsZXMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICB9XG5cbiAgY29tcGFyaXNvbkF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLnJvb3QuZ2V0KCdjb21wYXJpc29uQXR0cmlidXRlcycpPy52YWx1ZTtcbiAgfVxuXG4gIHJlbW92ZVJ1bGUoaW5kZXg6IGFueSkge1xuICAgIHRoaXMucm9sbG91dFJ1bGVzKCkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMucm9sbG91dFJ1bGVzKCkubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogYW55KSB7XG4gICAgY29uc3Qgcm9sbG91dFJ1bGVzID0gdGhpcy5yb2xsb3V0UnVsZXMoKS5jb250cm9scztcbiAgICBtb3ZlSXRlbUluQXJyYXkocm9sbG91dFJ1bGVzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBhdHRyaWJ1dGVDaGFuZ2VkKGV2ZW50OiBhbnksIGNvbXBhcmlzb25BdHRyaWJ1dGU6IFVudHlwZWRGb3JtQ29udHJvbCkge1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGV2ZW50LnZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIGlmIChjb21wYXJpc29uQXR0cmlidXRlLnZhbHVlICE9PSBldmVudC52YWx1ZSkge1xuICAgICAgICBjb21wYXJpc29uQXR0cmlidXRlLnNldFZhbHVlKGV2ZW50LnZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FzRGlydHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbXBhcmlzb25BdHRyaWJ1dGUuc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFBsYWNlSG9sZGVyKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICBpZiAoIXJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUpIHtcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLklzT25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Jc05vdE9uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbnNpdGl2ZUlzTm90T25lT2Y6XG4gICAgICAgIHN3aXRjaCAocm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS52YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAnaWRlbnRpZmllcic6XG4gICAgICAgICAgICByZXR1cm4gJ2UuZzogdXNlcl9pZDEsIHVzZXJfaWQyLCB1c2VyX2lkMyc7XG4gICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgICAgcmV0dXJuICdlLmc6IGphbmVAZXhhbXBsZS5jb20sIGpvaG5AZXhhbXBsZS5jb20nO1xuICAgICAgICAgIGNhc2UgJ2NvdW50cnknOlxuICAgICAgICAgICAgcmV0dXJuICdlLmc6IEZyYW5jZSwgQnJhemlsJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdlLmc6IHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTMnO1xuICAgICAgICB9XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Db250YWluczpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLkRvZXNOb3RDb250YWluOlxuICAgICAgICBzd2l0Y2ggKHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ2lkZW50aWZpZXInOlxuICAgICAgICAgICAgcmV0dXJuICdwYXJ0LW9mLWlkJztcbiAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICByZXR1cm4gJ2UuZzogQGV4YW1wbGUuY29tJztcbiAgICAgICAgICBjYXNlICdjb3VudHJ5JzpcbiAgICAgICAgICAgIHJldHVybiAnZS5nOiBVbml0ZWQnO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJ2UuZzogYW55LXBhcnQtb2YteW91ci12YWx1ZS1zdHJpbmcnO1xuICAgICAgICB9XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJJc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVySXNOb3RPbmVPZjpcbiAgICAgICAgcmV0dXJuICdlLmc6IDEuMC4wLCAyLjAuMSc7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzT3JFcXVhbHM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlcjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXJPckVxdWFsczpcbiAgICAgICAgcmV0dXJuICdlLmc6IDEuMC4wJztcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckVxdWFsczpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckRvZXNOb3RFcXVhbDpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckxlc3M6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJMZXNzT3JFcXVhbHM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJHcmVhdGVyOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuTnVtYmVyR3JlYXRlck9yRXF1YWxzOlxuICAgICAgICByZXR1cm4gJ2UuZzogNDInO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldENvbXBhcmlzb25WYWx1ZVR5cGUocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdMaXN0Rm9ybUhlbHBlci5nZXRDb21wYXJpc29uVmFsdWVUeXBlKHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUpO1xuICB9XG5cbiAgZ2V0SW5mb0NsYXNzKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICBpZiAoIXJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUpIHtcbiAgICAgIHJldHVybiAnaW5mbyc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKSB7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Jc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLkNvbnRhaW5zOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuRG9lc05vdENvbnRhaW46XG4gICAgICAgIHJldHVybiAnd2Fybic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2luZm8nO1xuICAgIH1cbiAgfVxuXG4gIGdldEluZm9Ub29sdGlwKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICBpZiAoIXJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUpIHtcbiAgICAgIHJldHVybiAnTGVhcm4gbW9yZSBhYm91dCBjb21wYXJhdG9ycyc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKSB7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Jc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLkNvbnRhaW5zOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuRG9lc05vdENvbnRhaW46XG4gICAgICAgIHJldHVybiAnQ29uc2lkZXIgdXNpbmcgc2Vuc2l0aXZlIHRleHQgY29tcGFyYXRvcnMuIENsaWNrIHRvIGxlYXJuIG1vcmUuJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnQ2xpY2sgdG8gbGVhcm4gbW9yZSBhYm91dCBjb21wYXJhdG9ycyc7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyYXRvckNoYW5nZWQocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIGxldCB2YWxpZGF0b3JzOiBhbnlbXSA9IFtdO1xuXG4gICAgc3dpdGNoIChyb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKSB7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Jc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbnNpdGl2ZUlzT25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW5zaXRpdmVJc05vdE9uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuQ29udGFpbnM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Eb2VzTm90Q29udGFpbjpcbiAgICAgICAgdmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg2NTUzNSldO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlcklzT25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJJc05vdE9uZU9mOlxuICAgICAgICB2YWxpZGF0b3JzID0gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMudmFsaWRhdGVTZW1WZXJMaXN0XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzT3JFcXVhbHM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlcjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXJPckVxdWFsczpcbiAgICAgICAgdmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnZhbGlkYXRlU2VtVmVyXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJFcXVhbHM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJEb2VzTm90RXF1YWw6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJMZXNzOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuTnVtYmVyTGVzc09yRXF1YWxzOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuTnVtYmVyR3JlYXRlcjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckdyZWF0ZXJPckVxdWFsczpcbiAgICAgICAgdmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigtMS43OTc2OTMxMzQ4NjIzMkUrMzA4KSwgVmFsaWRhdG9ycy5tYXgoMS43OTc2OTMxMzQ4NjIzMkUrMzA4KV07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIGlmICh0aGlzLmdldENvbXBhcmlzb25WYWx1ZVR5cGUocm9sbG91dFJ1bGUpID09PSBcIm51bWJlclwiKSB7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS52YWx1ZTtcbiAgICAgIHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5zZXRWYWx1ZShGb3JtSGVscGVyLm5vcm1hbGl6ZU51bWJlclN0b3JlZEFzU3RyaW5nKHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS52YWx1ZSkpO1xuICAgICAgaWYgKG9sZFZhbHVlICE9PSByb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJpc29uVmFsdWUudmFsdWUpIHtcbiAgICAgICAgcm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIGlzTGlzdFR5cGUocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIHN3aXRjaCAocm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSkge1xuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLklzTm90T25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW5zaXRpdmVJc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlcklzT25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJJc05vdE9uZU9mOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVNlbVZlcihjOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcblxuICAgIGlmICh2YWxpZChjLnZhbHVlKSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWRhdGVTZW1WZXI6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhbGlkYXRlU2VtVmVyTGlzdChjOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICBpZiAoIWMudmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRlU2VtVmVyTGlzdDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHNlbXZlcnMgPSBjLnZhbHVlLnNwbGl0KCcsJykubWFwKChzOiBhbnkpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoc2VtdmVycy5maW5kKChzOiBhbnkpID0+IHMgJiYgcyAhPT0gJycgJiYgdmFsaWQocykgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZGF0ZVNlbVZlckxpc3Q6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHBvcE91dChyb2xsb3V0UnVsZTogYW55KSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihFeHBhbmREaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjQwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBjb250cm9sOiByb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJpc29uVmFsdWUsXG4gICAgICAgIG11bHRpbGluZTogdGhpcy5pc0xpc3RUeXBlKHJvbGxvdXRSdWxlKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgZ2V0Um9sbG91dFJ1bGVWYWx1ZUZvcm1Db250cm9sKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICByZXR1cm4gcm9sbG91dFJ1bGUuY29udHJvbHMudmFsdWUgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgZ2V0Um9sbG91dFJ1bGVDb21wYXJpc29uVmFsdWVGb3JtQ29udHJvbChyb2xsb3V0UnVsZTogYW55KSB7XG4gICAgcmV0dXJuIHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZTogYW55KSB7XG4gICAgcmV0dXJuIHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgZ2V0Um9sbG91dFJ1bGVUeXBlRm9ybUNvbnRyb2wocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIHJldHVybiByb2xsb3V0UnVsZS5jb250cm9scy50eXBlIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGdldFJvbGxvdXRSdWxlQ29tcGFyYXRvckZvcm1Db250cm9sKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICByZXR1cm4gcm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyYXRvciBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRSb2xsb3V0UnVsZVNlZ21lbnRDb21wYXJhdG9yRm9ybUNvbnRyb2wocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIHJldHVybiByb2xsb3V0UnVsZS5jb250cm9scy5zZWdtZW50Q29tcGFyYXRvciBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRSb2xsb3V0UnVsZVNlZ21lbnRJZEZvcm1Db250cm9sKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICByZXR1cm4gcm9sbG91dFJ1bGUuY29udHJvbHMuc2VnbWVudElkIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJyb2xsb3V0UnVsZXMoKS5jb250cm9sc1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb2xsb3V0UnVsZSBvZiByb2xsb3V0UnVsZXMoKS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUluZGV4OyBsZXQgaSA9IGluZGV4XCIgY2RrRHJhZz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXRpbmctcm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkcyBmbGV4XCIgKm5nSWY9XCJnZXRSb2xsb3V0UnVsZVR5cGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkudmFsdWUgPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlXCIgY2RrRHJhZ0hhbmRsZSBtYXRUb29sdGlwPVwiRHJhZyBoZXJlIHRvIHJlb3JkZXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZWFkT25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLXNldCBbY2xhc3Muc3BhY2luZ109XCJpID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPVwiY2hpcFwiPnt7IGkgPT09IDAgPyAnSUYnIDogJ0VMU0UgSUYnIH19PC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL2FkdmFuY2VkL3VzZXItb2JqZWN0XCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+dXNlcidzPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBhdHRyaWJ1dGUtc2VsZWN0XCIgbWF0VG9vbHRpcD1cIkNvbXBhcmlzb24gYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQudGFyZ2V0LCBnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkT25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyaXNvbkF0dHJpYnV0ZSBvZiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjb21wYXJpc29uQXR0cmlidXRlID09PSBnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmlzb25BdHRyaWJ1dGV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZihnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkudmFsdWUpID09PSAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGUtc3BhblwiIG1hdFRvb2x0aXA9XCJDdXN0b20gdXNlciBhdHRyaWJ1dGVcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGdldFJvbGxvdXRSdWxlQ29tcGFyaXNvbkF0dHJpYnV0ZUZvcm1Db250cm9sKHJvbGxvdXRSdWxlKS52YWx1ZSkgIT09IC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZS1lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkuaW52YWxpZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQnOiBnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkuaW52YWxpZH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0Um9sbG91dFJ1bGVDb21wYXJpc29uQXR0cmlidXRlRm9ybUNvbnRyb2wocm9sbG91dFJ1bGUpXCIgY2xhc3M9XCJhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBFeWUgY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbXBhcmlzb25BdHRyaWJ1dGVzKClcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiY3VzdG9tLXNlbGVjdFwiIFtmb3JtQ29udHJvbF09XCJnZXRSb2xsb3V0UnVsZUNvbXBhcmF0b3JGb3JtQ29udHJvbChyb2xsb3V0UnVsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDb21wYXJhdG9yXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY29tcGFyYXRvckNoYW5nZWQocm9sbG91dFJ1bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIGxhYmVsPVwiQ09ORklERU5USUFMIFRFWFRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyYXRvciBvZiByb2xsb3V0UnVsZUNvbXBhcmF0b3JzLnNsaWNlKDE2LCAxOClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiY29tcGFyYXRvci52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wYXJhdG9yLmxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9XCJURVhUXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNvbXBhcmF0b3Igb2Ygcm9sbG91dFJ1bGVDb21wYXJhdG9ycy5zbGljZSgwLCA0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjb21wYXJhdG9yLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIlNFTUFOVElDIFZFUlNJT05cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyYXRvciBvZiByb2xsb3V0UnVsZUNvbXBhcmF0b3JzLnNsaWNlKDQsIDEwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjb21wYXJhdG9yLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIk5VTUJFUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb21wYXJhdG9yIG9mIHJvbGxvdXRSdWxlQ29tcGFyYXRvcnMuc2xpY2UoMTAsIDE2KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjb21wYXJhdG9yLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJnZXRJbmZvQ2xhc3Mocm9sbG91dFJ1bGUpXCIgW21hdFRvb2x0aXBdPVwiZ2V0SW5mb1Rvb2x0aXAocm9sbG91dFJ1bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL2FkdmFuY2VkL3RhcmdldGluZy8jY29tcGFyYXRvclwiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmluZm88L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGFyaXNvbi12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25WYWx1ZUZvcm1Db250cm9sKHJvbGxvdXRSdWxlKS5pbnZhbGlkXCI+Kjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ0NsYXNzXT1cInsnaW52YWxpZCc6IGdldFJvbGxvdXRSdWxlQ29tcGFyaXNvblZhbHVlRm9ybUNvbnRyb2wocm9sbG91dFJ1bGUpLmludmFsaWR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0Um9sbG91dFJ1bGVDb21wYXJpc29uVmFsdWVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImdldENvbXBhcmlzb25WYWx1ZVR5cGUocm9sbG91dFJ1bGUpXCIgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlSG9sZGVyKHJvbGxvdXRSdWxlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbXBhcmlzb24gdmFsdWVcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIGlucHV0RGlzcGxheU5vcm1hbGl6ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kXCIgbWF0VG9vbHRpcD1cIlBvcC1vdXQgRWRpdG9yXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb3BPdXQocm9sbG91dFJ1bGUpXCIgKm5nSWY9XCJnZXRDb21wYXJpc29uVmFsdWVUeXBlKHJvbGxvdXRSdWxlKT09PSd0ZXh0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5oZWlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGVcIiBtYXRUb29sdGlwPVwiUmVtb3ZlIHRhcmdldGluZyBydWxlXCIgKm5nSWY9XCIhcmVhZE9ubHlcIiAoY2xpY2spPVwicmVtb3ZlUnVsZShpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkcyBmbGV4XCIgKm5nSWY9XCJnZXRSb2xsb3V0UnVsZVR5cGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkudmFsdWUgPT09IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlXCIgY2RrRHJhZ0hhbmRsZSBtYXRUb29sdGlwPVwiRHJhZyBoZXJlIHRvIHJlb3JkZXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZWFkT25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLXNldCBbY2xhc3Muc3BhY2luZ109XCJpID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPVwiY2hpcFwiPnt7IGkgPT09IDAgPyAnSUYnIDogJ0VMU0UgSUYnIH19PC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL2FkdmFuY2VkL3VzZXItb2JqZWN0XCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+dXNlcjwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJjdXN0b20tc2VsZWN0IHNlZ21lbnQtY29tcGFyYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImdldFJvbGxvdXRSdWxlU2VnbWVudENvbXBhcmF0b3JGb3JtQ29udHJvbChyb2xsb3V0UnVsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJTZWdtZW50IGNvbXBhcmF0b3JcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNvbXBhcmF0b3Igb2Ygc2VnbWVudENvbXBhcmF0b3JzXCIgW25nVmFsdWVdPVwiY29tcGFyYXRvci52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGUtZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Um9sbG91dFJ1bGVTZWdtZW50SWRGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkuaW52YWxpZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBzZWdtZW50LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImdldFJvbGxvdXRSdWxlU2VnbWVudElkRm9ybUNvbnRyb2wocm9sbG91dFJ1bGUpXCIgbWF0VG9vbHRpcD1cIlNlZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQnOiBnZXRSb2xsb3V0UnVsZVNlZ21lbnRJZEZvcm1Db250cm9sKHJvbGxvdXRSdWxlKS5pbnZhbGlkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNlZ21lbnQgb2Ygc2VnbWVudHNcIiBbbmdWYWx1ZV09XCJzZWdtZW50LnNlZ21lbnRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlZ21lbnQubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCIgbWF0VG9vbHRpcD1cIlJlbW92ZSB0YXJnZXRpbmcgcnVsZVwiICpuZ0lmPVwiIXJlYWRPbmx5XCIgKGNsaWNrKT1cInJlbW92ZVJ1bGUoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlIGZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZlXCIgKm5nSWY9XCJzZXR0aW5nKCkuc2V0dGluZ1R5cGUgIT09IFNldHRpbmdUeXBlLkJvb2xlYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1zZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPVwiY2hpcFwiPlNlcnZlOjwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLXNldD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ2NhdC12YWx1ZSBjbGFzcz1cInNlcnZlZC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVGb3JtQ29udHJvbF09XCJnZXRSb2xsb3V0UnVsZVZhbHVlRm9ybUNvbnRyb2wocm9sbG91dFJ1bGUpXCIgW3NldHRpbmddPVwic2V0dGluZygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvY29uZmlnY2F0LXZhbHVlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbG91dC1ydWxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvc2V0dGluZy1saXN0L3NldHRpbmcvcm9sbG91dC1ydWxlcy9yb2xsb3V0LXJ1bGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXJ1bGVzL3JvbGxvdXQtcnVsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUEwRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBTzVELE1BQU0sT0FBTyxxQkFBcUI7SUF1Q2hDLFlBQ1UsTUFBaUIsRUFDakIscUJBQTRDO1FBRDVDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQXRDN0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUcxQixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUUxQixnQ0FBMkIsR0FBRyxDQUFDLFlBQVks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LENBQUM7K0dBNVNVLHFCQUFxQjttR0FBckIscUJBQXFCLCtJQ2ZsQywwdVRBbUtNOzs0RkRwSk8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHlCQUF5QjtrSEFNMUIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IHZhbGlkIH0gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IEV4cGFuZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2RpYWxvZ3MvZXhwYW5kLWRpYWxvZy9leHBhbmQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgU2V0dGluZ1R5cGUsIFJvbGxvdXRSdWxlQ29tcGFyYXRvciwgU2VnbWVudExpc3RNb2RlbCwgU2VnbWVudENvbXBhcmF0b3IgfSBmcm9tICduZy1jb25maWdjYXQtcHVibGljYXBpJztcbmltcG9ydCB7IFNldHRpbmdMaXN0Rm9ybUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy9zZXR0aW5nLWxpc3QtZm9ybS1oZWxwZXInO1xuaW1wb3J0IHsgRm9ybUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy9mb3JtLWhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvbmZpZ2NhdC1yb2xsb3V0LXJ1bGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGxvdXQtcnVsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yb2xsb3V0LXJ1bGVzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUm9sbG91dFJ1bGVzQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWdtZW50cyE6IFNlZ21lbnRMaXN0TW9kZWxbXTtcblxuICBTZXR0aW5nVHlwZSA9IFNldHRpbmdUeXBlO1xuXG4gIGRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcyA9IFsnSWRlbnRpZmllcicsICdFbWFpbCcsICdDb3VudHJ5J107XG5cbiAgcm9sbG91dFJ1bGVDb21wYXJhdG9ycyA9IFtcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNPbmVPZiwgbGFiZWw6ICdJUyBPTkUgT0YgKGNsZWFydGV4dCknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLklzTm90T25lT2YsIGxhYmVsOiAnSVMgTk9UIE9ORSBPRiAoY2xlYXJ0ZXh0KScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuQ29udGFpbnMsIGxhYmVsOiAnQ09OVEFJTlMgKGNsZWFydGV4dCknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLkRvZXNOb3RDb250YWluLCBsYWJlbDogJ0RPRVMgTk9UIENPTlRBSU4gKGNsZWFydGV4dCknIH0sXG5cbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVySXNPbmVPZiwgbGFiZWw6ICdJUyBPTkUgT0YgKFNlbVZlciknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlcklzTm90T25lT2YsIGxhYmVsOiAnSVMgTk9UIE9ORSBPRiAoU2VtVmVyKScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVyTGVzcywgbGFiZWw6ICc8IChTZW1WZXIpJyB9LFxuICAgIHsgdmFsdWU6IFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzT3JFcXVhbHMsIGxhYmVsOiAnPD0gKFNlbVZlciknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXIsIGxhYmVsOiAnPiAoU2VtVmVyKScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlck9yRXF1YWxzLCBsYWJlbDogJz49IChTZW1WZXIpJyB9LFxuXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckVxdWFscywgbGFiZWw6ICc9IChOdW1iZXIpJyB9LFxuICAgIHsgdmFsdWU6IFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJEb2VzTm90RXF1YWwsIGxhYmVsOiAnIT0gKE51bWJlciknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckxlc3MsIGxhYmVsOiAnPCAoTnVtYmVyKScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuTnVtYmVyTGVzc09yRXF1YWxzLCBsYWJlbDogJzw9IChOdW1iZXIpJyB9LFxuICAgIHsgdmFsdWU6IFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJHcmVhdGVyLCBsYWJlbDogJz4gKE51bWJlciknIH0sXG4gICAgeyB2YWx1ZTogUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckdyZWF0ZXJPckVxdWFscywgbGFiZWw6ICc+PSAoTnVtYmVyKScgfSxcblxuICAgIHsgdmFsdWU6IFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW5zaXRpdmVJc09uZU9mLCBsYWJlbDogJ0lTIE9ORSBPRiAoaGFzaGVkKScgfSxcbiAgICB7IHZhbHVlOiBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNOb3RPbmVPZiwgbGFiZWw6ICdJUyBOT1QgT05FIE9GIChoYXNoZWQpJyB9LFxuICBdO1xuXG4gIHNlZ21lbnRDb21wYXJhdG9ycyA9IFtcbiAgICB7IHZhbHVlOiBTZWdtZW50Q29tcGFyYXRvci5Jc0luLCBsYWJlbDogJ0lTIElOIFNFR01FTlQnIH0sXG4gICAgeyB2YWx1ZTogU2VnbWVudENvbXBhcmF0b3IuSXNOb3RJbiwgbGFiZWw6ICdJUyBOT1QgSU4gU0VHTUVOVCcgfSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgc2V0dGluZ0xpc3RGb3JtSGVscGVyOiBTZXR0aW5nTGlzdEZvcm1IZWxwZXIpIHsgfVxuXG4gIHNldHRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgnc2V0dGluZycpPy52YWx1ZTtcbiAgfVxuXG4gIHJvbGxvdXRSdWxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdyb2xsb3V0UnVsZXMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICB9XG5cbiAgY29tcGFyaXNvbkF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLnJvb3QuZ2V0KCdjb21wYXJpc29uQXR0cmlidXRlcycpPy52YWx1ZTtcbiAgfVxuXG4gIHJlbW92ZVJ1bGUoaW5kZXg6IGFueSkge1xuICAgIHRoaXMucm9sbG91dFJ1bGVzKCkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMucm9sbG91dFJ1bGVzKCkubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogYW55KSB7XG4gICAgY29uc3Qgcm9sbG91dFJ1bGVzID0gdGhpcy5yb2xsb3V0UnVsZXMoKS5jb250cm9scztcbiAgICBtb3ZlSXRlbUluQXJyYXkocm9sbG91dFJ1bGVzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBhdHRyaWJ1dGVDaGFuZ2VkKGV2ZW50OiBhbnksIGNvbXBhcmlzb25BdHRyaWJ1dGU6IFVudHlwZWRGb3JtQ29udHJvbCkge1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGV2ZW50LnZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIGlmIChjb21wYXJpc29uQXR0cmlidXRlLnZhbHVlICE9PSBldmVudC52YWx1ZSkge1xuICAgICAgICBjb21wYXJpc29uQXR0cmlidXRlLnNldFZhbHVlKGV2ZW50LnZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FzRGlydHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbXBhcmlzb25BdHRyaWJ1dGUuc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFBsYWNlSG9sZGVyKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICBpZiAoIXJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUpIHtcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLklzT25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Jc05vdE9uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbnNpdGl2ZUlzTm90T25lT2Y6XG4gICAgICAgIHN3aXRjaCAocm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS52YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAnaWRlbnRpZmllcic6XG4gICAgICAgICAgICByZXR1cm4gJ2UuZzogdXNlcl9pZDEsIHVzZXJfaWQyLCB1c2VyX2lkMyc7XG4gICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgICAgcmV0dXJuICdlLmc6IGphbmVAZXhhbXBsZS5jb20sIGpvaG5AZXhhbXBsZS5jb20nO1xuICAgICAgICAgIGNhc2UgJ2NvdW50cnknOlxuICAgICAgICAgICAgcmV0dXJuICdlLmc6IEZyYW5jZSwgQnJhemlsJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdlLmc6IHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTMnO1xuICAgICAgICB9XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Db250YWluczpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLkRvZXNOb3RDb250YWluOlxuICAgICAgICBzd2l0Y2ggKHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ2lkZW50aWZpZXInOlxuICAgICAgICAgICAgcmV0dXJuICdwYXJ0LW9mLWlkJztcbiAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICByZXR1cm4gJ2UuZzogQGV4YW1wbGUuY29tJztcbiAgICAgICAgICBjYXNlICdjb3VudHJ5JzpcbiAgICAgICAgICAgIHJldHVybiAnZS5nOiBVbml0ZWQnO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJ2UuZzogYW55LXBhcnQtb2YteW91ci12YWx1ZS1zdHJpbmcnO1xuICAgICAgICB9XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJJc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVySXNOb3RPbmVPZjpcbiAgICAgICAgcmV0dXJuICdlLmc6IDEuMC4wLCAyLjAuMSc7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzT3JFcXVhbHM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlcjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXJPckVxdWFsczpcbiAgICAgICAgcmV0dXJuICdlLmc6IDEuMC4wJztcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckVxdWFsczpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckRvZXNOb3RFcXVhbDpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckxlc3M6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJMZXNzT3JFcXVhbHM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJHcmVhdGVyOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuTnVtYmVyR3JlYXRlck9yRXF1YWxzOlxuICAgICAgICByZXR1cm4gJ2UuZzogNDInO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldENvbXBhcmlzb25WYWx1ZVR5cGUocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdMaXN0Rm9ybUhlbHBlci5nZXRDb21wYXJpc29uVmFsdWVUeXBlKHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUpO1xuICB9XG5cbiAgZ2V0SW5mb0NsYXNzKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICBpZiAoIXJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUpIHtcbiAgICAgIHJldHVybiAnaW5mbyc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKSB7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Jc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLkNvbnRhaW5zOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuRG9lc05vdENvbnRhaW46XG4gICAgICAgIHJldHVybiAnd2Fybic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2luZm8nO1xuICAgIH1cbiAgfVxuXG4gIGdldEluZm9Ub29sdGlwKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICBpZiAoIXJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUudmFsdWUpIHtcbiAgICAgIHJldHVybiAnTGVhcm4gbW9yZSBhYm91dCBjb21wYXJhdG9ycyc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKSB7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Jc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLkNvbnRhaW5zOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuRG9lc05vdENvbnRhaW46XG4gICAgICAgIHJldHVybiAnQ29uc2lkZXIgdXNpbmcgc2Vuc2l0aXZlIHRleHQgY29tcGFyYXRvcnMuIENsaWNrIHRvIGxlYXJuIG1vcmUuJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnQ2xpY2sgdG8gbGVhcm4gbW9yZSBhYm91dCBjb21wYXJhdG9ycyc7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyYXRvckNoYW5nZWQocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIGxldCB2YWxpZGF0b3JzOiBhbnlbXSA9IFtdO1xuXG4gICAgc3dpdGNoIChyb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKSB7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Jc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbnNpdGl2ZUlzT25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW5zaXRpdmVJc05vdE9uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuQ29udGFpbnM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5Eb2VzTm90Q29udGFpbjpcbiAgICAgICAgdmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg2NTUzNSldO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlcklzT25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJJc05vdE9uZU9mOlxuICAgICAgICB2YWxpZGF0b3JzID0gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMudmFsaWRhdGVTZW1WZXJMaXN0XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzT3JFcXVhbHM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJMZXNzOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlcjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXJPckVxdWFsczpcbiAgICAgICAgdmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnZhbGlkYXRlU2VtVmVyXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJFcXVhbHM6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJEb2VzTm90RXF1YWw6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5OdW1iZXJMZXNzOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuTnVtYmVyTGVzc09yRXF1YWxzOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuTnVtYmVyR3JlYXRlcjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLk51bWJlckdyZWF0ZXJPckVxdWFsczpcbiAgICAgICAgdmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigtMS43OTc2OTMxMzQ4NjIzMkUrMzA4KSwgVmFsaWRhdG9ycy5tYXgoMS43OTc2OTMxMzQ4NjIzMkUrMzA4KV07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIGlmICh0aGlzLmdldENvbXBhcmlzb25WYWx1ZVR5cGUocm9sbG91dFJ1bGUpID09PSBcIm51bWJlclwiKSB7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS52YWx1ZTtcbiAgICAgIHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5zZXRWYWx1ZShGb3JtSGVscGVyLm5vcm1hbGl6ZU51bWJlclN0b3JlZEFzU3RyaW5nKHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS52YWx1ZSkpO1xuICAgICAgaWYgKG9sZFZhbHVlICE9PSByb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJpc29uVmFsdWUudmFsdWUpIHtcbiAgICAgICAgcm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIGlzTGlzdFR5cGUocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIHN3aXRjaCAocm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSkge1xuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuSXNPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLklzTm90T25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW5zaXRpdmVJc09uZU9mOlxuICAgICAgY2FzZSBSb2xsb3V0UnVsZUNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgUm9sbG91dFJ1bGVDb21wYXJhdG9yLlNlbVZlcklzT25lT2Y6XG4gICAgICBjYXNlIFJvbGxvdXRSdWxlQ29tcGFyYXRvci5TZW1WZXJJc05vdE9uZU9mOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVNlbVZlcihjOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcblxuICAgIGlmICh2YWxpZChjLnZhbHVlKSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWRhdGVTZW1WZXI6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhbGlkYXRlU2VtVmVyTGlzdChjOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICBpZiAoIWMudmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRlU2VtVmVyTGlzdDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHNlbXZlcnMgPSBjLnZhbHVlLnNwbGl0KCcsJykubWFwKChzOiBhbnkpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoc2VtdmVycy5maW5kKChzOiBhbnkpID0+IHMgJiYgcyAhPT0gJycgJiYgdmFsaWQocykgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZGF0ZVNlbVZlckxpc3Q6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHBvcE91dChyb2xsb3V0UnVsZTogYW55KSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihFeHBhbmREaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjQwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBjb250cm9sOiByb2xsb3V0UnVsZS5jb250cm9scy5jb21wYXJpc29uVmFsdWUsXG4gICAgICAgIG11bHRpbGluZTogdGhpcy5pc0xpc3RUeXBlKHJvbGxvdXRSdWxlKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgZ2V0Um9sbG91dFJ1bGVWYWx1ZUZvcm1Db250cm9sKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICByZXR1cm4gcm9sbG91dFJ1bGUuY29udHJvbHMudmFsdWUgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgZ2V0Um9sbG91dFJ1bGVDb21wYXJpc29uVmFsdWVGb3JtQ29udHJvbChyb2xsb3V0UnVsZTogYW55KSB7XG4gICAgcmV0dXJuIHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZTogYW55KSB7XG4gICAgcmV0dXJuIHJvbGxvdXRSdWxlLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgZ2V0Um9sbG91dFJ1bGVUeXBlRm9ybUNvbnRyb2wocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIHJldHVybiByb2xsb3V0UnVsZS5jb250cm9scy50eXBlIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGdldFJvbGxvdXRSdWxlQ29tcGFyYXRvckZvcm1Db250cm9sKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICByZXR1cm4gcm9sbG91dFJ1bGUuY29udHJvbHMuY29tcGFyYXRvciBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRSb2xsb3V0UnVsZVNlZ21lbnRDb21wYXJhdG9yRm9ybUNvbnRyb2wocm9sbG91dFJ1bGU6IGFueSkge1xuICAgIHJldHVybiByb2xsb3V0UnVsZS5jb250cm9scy5zZWdtZW50Q29tcGFyYXRvciBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRSb2xsb3V0UnVsZVNlZ21lbnRJZEZvcm1Db250cm9sKHJvbGxvdXRSdWxlOiBhbnkpIHtcbiAgICByZXR1cm4gcm9sbG91dFJ1bGUuY29udHJvbHMuc2VnbWVudElkIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJyb2xsb3V0UnVsZXMoKS5jb250cm9sc1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb2xsb3V0UnVsZSBvZiByb2xsb3V0UnVsZXMoKS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUluZGV4OyBsZXQgaSA9IGluZGV4XCIgY2RrRHJhZz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXRpbmctcm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkcyBmbGV4XCIgKm5nSWY9XCJnZXRSb2xsb3V0UnVsZVR5cGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkudmFsdWUgPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlXCIgY2RrRHJhZ0hhbmRsZSBtYXRUb29sdGlwPVwiRHJhZyBoZXJlIHRvIHJlb3JkZXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZWFkT25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLXNldCBbY2xhc3Muc3BhY2luZ109XCJpID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPVwiY2hpcFwiPnt7IGkgPT09IDAgPyAnSUYnIDogJ0VMU0UgSUYnIH19PC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL2FkdmFuY2VkL3VzZXItb2JqZWN0XCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+dXNlcidzPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBhdHRyaWJ1dGUtc2VsZWN0XCIgbWF0VG9vbHRpcD1cIkNvbXBhcmlzb24gYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQudGFyZ2V0LCBnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkT25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyaXNvbkF0dHJpYnV0ZSBvZiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjb21wYXJpc29uQXR0cmlidXRlID09PSBnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmlzb25BdHRyaWJ1dGV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZihnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkudmFsdWUpID09PSAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGUtc3BhblwiIG1hdFRvb2x0aXA9XCJDdXN0b20gdXNlciBhdHRyaWJ1dGVcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGdldFJvbGxvdXRSdWxlQ29tcGFyaXNvbkF0dHJpYnV0ZUZvcm1Db250cm9sKHJvbGxvdXRSdWxlKS52YWx1ZSkgIT09IC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZS1lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkuaW52YWxpZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQnOiBnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25BdHRyaWJ1dGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkuaW52YWxpZH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0Um9sbG91dFJ1bGVDb21wYXJpc29uQXR0cmlidXRlRm9ybUNvbnRyb2wocm9sbG91dFJ1bGUpXCIgY2xhc3M9XCJhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBFeWUgY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbXBhcmlzb25BdHRyaWJ1dGVzKClcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiY3VzdG9tLXNlbGVjdFwiIFtmb3JtQ29udHJvbF09XCJnZXRSb2xsb3V0UnVsZUNvbXBhcmF0b3JGb3JtQ29udHJvbChyb2xsb3V0UnVsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDb21wYXJhdG9yXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY29tcGFyYXRvckNoYW5nZWQocm9sbG91dFJ1bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIGxhYmVsPVwiQ09ORklERU5USUFMIFRFWFRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyYXRvciBvZiByb2xsb3V0UnVsZUNvbXBhcmF0b3JzLnNsaWNlKDE2LCAxOClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiY29tcGFyYXRvci52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wYXJhdG9yLmxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9XCJURVhUXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNvbXBhcmF0b3Igb2Ygcm9sbG91dFJ1bGVDb21wYXJhdG9ycy5zbGljZSgwLCA0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjb21wYXJhdG9yLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIlNFTUFOVElDIFZFUlNJT05cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyYXRvciBvZiByb2xsb3V0UnVsZUNvbXBhcmF0b3JzLnNsaWNlKDQsIDEwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjb21wYXJhdG9yLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIk5VTUJFUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb21wYXJhdG9yIG9mIHJvbGxvdXRSdWxlQ29tcGFyYXRvcnMuc2xpY2UoMTAsIDE2KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjb21wYXJhdG9yLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJnZXRJbmZvQ2xhc3Mocm9sbG91dFJ1bGUpXCIgW21hdFRvb2x0aXBdPVwiZ2V0SW5mb1Rvb2x0aXAocm9sbG91dFJ1bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL2FkdmFuY2VkL3RhcmdldGluZy8jY29tcGFyYXRvclwiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmluZm88L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGFyaXNvbi12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRSb2xsb3V0UnVsZUNvbXBhcmlzb25WYWx1ZUZvcm1Db250cm9sKHJvbGxvdXRSdWxlKS5pbnZhbGlkXCI+Kjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ0NsYXNzXT1cInsnaW52YWxpZCc6IGdldFJvbGxvdXRSdWxlQ29tcGFyaXNvblZhbHVlRm9ybUNvbnRyb2wocm9sbG91dFJ1bGUpLmludmFsaWR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0Um9sbG91dFJ1bGVDb21wYXJpc29uVmFsdWVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImdldENvbXBhcmlzb25WYWx1ZVR5cGUocm9sbG91dFJ1bGUpXCIgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlSG9sZGVyKHJvbGxvdXRSdWxlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbXBhcmlzb24gdmFsdWVcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIGlucHV0RGlzcGxheU5vcm1hbGl6ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kXCIgbWF0VG9vbHRpcD1cIlBvcC1vdXQgRWRpdG9yXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb3BPdXQocm9sbG91dFJ1bGUpXCIgKm5nSWY9XCJnZXRDb21wYXJpc29uVmFsdWVUeXBlKHJvbGxvdXRSdWxlKT09PSd0ZXh0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5oZWlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGVcIiBtYXRUb29sdGlwPVwiUmVtb3ZlIHRhcmdldGluZyBydWxlXCIgKm5nSWY9XCIhcmVhZE9ubHlcIiAoY2xpY2spPVwicmVtb3ZlUnVsZShpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkcyBmbGV4XCIgKm5nSWY9XCJnZXRSb2xsb3V0UnVsZVR5cGVGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkudmFsdWUgPT09IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlXCIgY2RrRHJhZ0hhbmRsZSBtYXRUb29sdGlwPVwiRHJhZyBoZXJlIHRvIHJlb3JkZXJcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZWFkT25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLXNldCBbY2xhc3Muc3BhY2luZ109XCJpID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPVwiY2hpcFwiPnt7IGkgPT09IDAgPyAnSUYnIDogJ0VMU0UgSUYnIH19PC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL2FkdmFuY2VkL3VzZXItb2JqZWN0XCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+dXNlcjwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJjdXN0b20tc2VsZWN0IHNlZ21lbnQtY29tcGFyYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImdldFJvbGxvdXRSdWxlU2VnbWVudENvbXBhcmF0b3JGb3JtQ29udHJvbChyb2xsb3V0UnVsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJTZWdtZW50IGNvbXBhcmF0b3JcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNvbXBhcmF0b3Igb2Ygc2VnbWVudENvbXBhcmF0b3JzXCIgW25nVmFsdWVdPVwiY29tcGFyYXRvci52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGUtZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Um9sbG91dFJ1bGVTZWdtZW50SWRGb3JtQ29udHJvbChyb2xsb3V0UnVsZSkuaW52YWxpZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBzZWdtZW50LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImdldFJvbGxvdXRSdWxlU2VnbWVudElkRm9ybUNvbnRyb2wocm9sbG91dFJ1bGUpXCIgbWF0VG9vbHRpcD1cIlNlZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQnOiBnZXRSb2xsb3V0UnVsZVNlZ21lbnRJZEZvcm1Db250cm9sKHJvbGxvdXRSdWxlKS5pbnZhbGlkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNlZ21lbnQgb2Ygc2VnbWVudHNcIiBbbmdWYWx1ZV09XCJzZWdtZW50LnNlZ21lbnRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlZ21lbnQubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCIgbWF0VG9vbHRpcD1cIlJlbW92ZSB0YXJnZXRpbmcgcnVsZVwiICpuZ0lmPVwiIXJlYWRPbmx5XCIgKGNsaWNrKT1cInJlbW92ZVJ1bGUoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlIGZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZlXCIgKm5nSWY9XCJzZXR0aW5nKCkuc2V0dGluZ1R5cGUgIT09IFNldHRpbmdUeXBlLkJvb2xlYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1zZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPVwiY2hpcFwiPlNlcnZlOjwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLXNldD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ2NhdC12YWx1ZSBjbGFzcz1cInNlcnZlZC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVGb3JtQ29udHJvbF09XCJnZXRSb2xsb3V0UnVsZVZhbHVlRm9ybUNvbnRyb2wocm9sbG91dFJ1bGUpXCIgW3NldHRpbmddPVwic2V0dGluZygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvY29uZmlnY2F0LXZhbHVlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|