UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

78 lines 18 kB
import { CommonModule } from '@angular/common'; import { Component, forwardRef, Input, ViewEncapsulation } from '@angular/core'; import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms'; import { DefaultControlComponent, DsfrSizeConst } from '../../shared'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/forms"; export class DsfrRangeComponent extends DefaultControlComponent { constructor() { super(); /** Valeur minimale possible */ this.min = 0; /** Valeur max possible */ this.max = 100; /** Ne pas afficher le minimum et le maximum */ this.hideMinMax = false; /** Désactiver le curseur */ this.disabled = false; /** @internal Curseur double */ this.double = false; } get hintId() { return this.inputId + '-hint-text'; } /**@internal */ isDouble() { return Array.isArray(this.value); } /** @internal */ isSmall() { return this.size == DsfrSizeConst.SM; } /** @internal */ getValue(index) { return Array.isArray(this.value) ? this.value[index] : undefined; } /** @internal */ onInputChange(index, value) { if (Array.isArray(this.value)) { this.value[index] = value; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrRangeComponent, isStandalone: true, selector: "dsfr-range", inputs: { min: "min", max: "max", hideMinMax: "hideMinMax", size: "size", prefix: "prefix", suffix: "suffix", disabled: "disabled", error: "error" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DsfrRangeComponent), multi: true, }, ], usesInheritance: true, ngImport: i0, template: "<div\n class=\"fr-range-group\"\n id=\"{{ inputId }}-group\"\n [ngClass]=\"{ 'fr-range-group--disabled': disabled, 'fr-range-group--error': error }\">\n <label class=\"fr-label\">\n <ng-container *ngIf=\"label\">{{ label }}</ng-container>\n <ng-content *ngIf=\"!label\"></ng-content>\n <span *ngIf=\"hint\" class=\"fr-hint-text\">{{ hint }}</span>\n </label>\n <div\n class=\"fr-range\"\n [attr.data-fr-prefix]=\"prefix\"\n [attr.data-fr-suffix]=\"suffix\"\n [ngClass]=\"{ 'fr-range--double': isDouble(), 'fr-range--sm': isSmall() }\">\n <span class=\"fr-range__output\">{{ value }}</span>\n <ng-container *ngIf=\"!isDouble()\">\n <input\n id=\"{{ inputId }}\"\n name=\"{{ inputId }}\"\n type=\"range\"\n [attr.aria-labelledby]=\"inputId + '-label'\"\n min=\"{{ min }}\"\n max=\"{{ max }}\"\n [disabled]=\"disabled ?? false\"\n [attr.value]=\"value\"\n [(ngModel)]=\"value\"\n [attr.aria-describedby]=\"inputId + '-messages'\" />\n </ng-container>\n <ng-container *ngIf=\"isDouble()\">\n <input\n id=\"{{ inputId }}\"\n name=\"{{ inputId }}\"\n type=\"range\"\n [attr.aria-labelledby]=\"inputId + '-label'\"\n min=\"{{ min }}\"\n max=\"{{ max }}\"\n [disabled]=\"disabled ?? false\"\n [attr.value]=\"getValue(0)\"\n [ngModel]=\"getValue(0)\"\n (ngModelChange)=\"onInputChange(0, $event)\"\n [attr.aria-describedby]=\"inputId + '-messages'\" />\n <input\n id=\"{{ inputId }}-2\"\n name=\"{{ inputId }}-2\"\n type=\"range\"\n [attr.aria-labelledby]=\"inputId + '-label'\"\n max=\"{{ max }}\"\n [disabled]=\"disabled ?? false\"\n [attr.value]=\"getValue(1)\"\n [ngModel]=\"getValue(1)\"\n (ngModelChange)=\"onInputChange(1, $event)\"\n [attr.aria-describedby]=\"inputId + '-messages'\" />\n </ng-container>\n\n <ng-container *ngIf=\"!hideMinMax\">\n <span class=\"fr-range__min\" aria-hidden=\"true\">\n {{ min }}\n </span>\n <span class=\"fr-range__max\" aria-hidden=\"true\">\n {{ max }}\n </span>\n </ng-container>\n </div>\n <div class=\"fr-messages-group\" id=\"{{ inputId }}-messages\" aria-live=\"polite\">\n <p *ngIf=\"error\" class=\"fr-message fr-message--error\" id=\"range-2310-message-error\">\n {{ error }}\n </p>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { 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.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrRangeComponent, decorators: [{ type: Component, args: [{ selector: 'dsfr-range', encapsulation: ViewEncapsulation.None, imports: [CommonModule, FormsModule], standalone: true, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DsfrRangeComponent), multi: true, }, ], template: "<div\n class=\"fr-range-group\"\n id=\"{{ inputId }}-group\"\n [ngClass]=\"{ 'fr-range-group--disabled': disabled, 'fr-range-group--error': error }\">\n <label class=\"fr-label\">\n <ng-container *ngIf=\"label\">{{ label }}</ng-container>\n <ng-content *ngIf=\"!label\"></ng-content>\n <span *ngIf=\"hint\" class=\"fr-hint-text\">{{ hint }}</span>\n </label>\n <div\n class=\"fr-range\"\n [attr.data-fr-prefix]=\"prefix\"\n [attr.data-fr-suffix]=\"suffix\"\n [ngClass]=\"{ 'fr-range--double': isDouble(), 'fr-range--sm': isSmall() }\">\n <span class=\"fr-range__output\">{{ value }}</span>\n <ng-container *ngIf=\"!isDouble()\">\n <input\n id=\"{{ inputId }}\"\n name=\"{{ inputId }}\"\n type=\"range\"\n [attr.aria-labelledby]=\"inputId + '-label'\"\n min=\"{{ min }}\"\n max=\"{{ max }}\"\n [disabled]=\"disabled ?? false\"\n [attr.value]=\"value\"\n [(ngModel)]=\"value\"\n [attr.aria-describedby]=\"inputId + '-messages'\" />\n </ng-container>\n <ng-container *ngIf=\"isDouble()\">\n <input\n id=\"{{ inputId }}\"\n name=\"{{ inputId }}\"\n type=\"range\"\n [attr.aria-labelledby]=\"inputId + '-label'\"\n min=\"{{ min }}\"\n max=\"{{ max }}\"\n [disabled]=\"disabled ?? false\"\n [attr.value]=\"getValue(0)\"\n [ngModel]=\"getValue(0)\"\n (ngModelChange)=\"onInputChange(0, $event)\"\n [attr.aria-describedby]=\"inputId + '-messages'\" />\n <input\n id=\"{{ inputId }}-2\"\n name=\"{{ inputId }}-2\"\n type=\"range\"\n [attr.aria-labelledby]=\"inputId + '-label'\"\n max=\"{{ max }}\"\n [disabled]=\"disabled ?? false\"\n [attr.value]=\"getValue(1)\"\n [ngModel]=\"getValue(1)\"\n (ngModelChange)=\"onInputChange(1, $event)\"\n [attr.aria-describedby]=\"inputId + '-messages'\" />\n </ng-container>\n\n <ng-container *ngIf=\"!hideMinMax\">\n <span class=\"fr-range__min\" aria-hidden=\"true\">\n {{ min }}\n </span>\n <span class=\"fr-range__max\" aria-hidden=\"true\">\n {{ max }}\n </span>\n </ng-container>\n </div>\n <div class=\"fr-messages-group\" id=\"{{ inputId }}-messages\" aria-live=\"polite\">\n <p *ngIf=\"error\" class=\"fr-message fr-message--error\" id=\"range-2310-message-error\">\n {{ error }}\n </p>\n </div>\n</div>\n" }] }], ctorParameters: function () { return []; }, propDecorators: { min: [{ type: Input }], max: [{ type: Input }], hideMinMax: [{ type: Input }], size: [{ type: Input }], prefix: [{ type: Input }], suffix: [{ type: Input }], disabled: [{ type: Input }], error: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvcmFuZ2UvcmFuZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvcmFuZ2UvcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFZLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7OztBQWdCaEYsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHVCQUFrRDtJQStCeEY7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQS9CViwrQkFBK0I7UUFDdEIsUUFBRyxHQUFXLENBQUMsQ0FBQztRQUV6QiwwQkFBMEI7UUFDakIsUUFBRyxHQUFXLEdBQUcsQ0FBQztRQUUzQixnREFBZ0Q7UUFDdkMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQWNyQyw0QkFBNEI7UUFDbkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUtuQyxnQ0FBZ0M7UUFDaEMsV0FBTSxHQUFZLEtBQUssQ0FBQztJQUl4QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZTtJQUNmLFFBQVE7UUFDTixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsUUFBUSxDQUFDLEtBQWE7UUFDcEIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25FLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsYUFBYSxDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQ3hDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDM0I7SUFDSCxDQUFDOytHQTNEVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwrTUFSbEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUNqRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsaURDakJILHk2RUFxRUEsMkNENURZLFlBQVksZ09BQUUsV0FBVzs7NEZBVXhCLGtCQUFrQjtrQkFkOUIsU0FBUzsrQkFDRSxZQUFZLGlCQUVQLGlCQUFpQixDQUFDLElBQUksV0FDNUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLGNBQ3hCLElBQUksYUFDTDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7MEVBSVEsR0FBRztzQkFBWCxLQUFLO2dCQUdHLEdBQUc7c0JBQVgsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEZWZhdWx0Q29udHJvbENvbXBvbmVudCwgRHNmclNpemUsIERzZnJTaXplQ29uc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyLXJhbmdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhbmdlLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERzZnJSYW5nZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEc2ZyUmFuZ2VDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0Q29udHJvbENvbXBvbmVudDxudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdPiB7XG4gIC8qKiBWYWxldXIgbWluaW1hbGUgcG9zc2libGUgKi9cbiAgQElucHV0KCkgbWluOiBudW1iZXIgPSAwO1xuXG4gIC8qKiBWYWxldXIgbWF4IHBvc3NpYmxlICovXG4gIEBJbnB1dCgpIG1heDogbnVtYmVyID0gMTAwO1xuXG4gIC8qKiBOZSBwYXMgYWZmaWNoZXIgbGUgbWluaW11bSBldCBsZSBtYXhpbXVtICAqL1xuICBASW5wdXQoKSBoaWRlTWluTWF4OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluY3LDqW1lbnQgcXVlIGRvaXQgc3VpdnJlIGxhIHZhbGV1ciAoMSBwYXIgZMOpZmF1dCkgICovXG4gIC8vIEBJbnB1dCgpIHN0ZXA6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKiogVGFpbGxlIGR1IGN1cnNldXIgKFNNIGV0IE1EIHBvc3NpYmxlcywgTUQgcGFyIGTDqWZhdXQpICovXG4gIEBJbnB1dCgpIHNpemU6IERzZnJTaXplO1xuXG4gIC8qKiBQcsOpZml4ZSBhZmZpY2jDqSBhdmFudCBsZXMgdmFsZXVycyAgKi9cbiAgQElucHV0KCkgcHJlZml4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFN1ZmZpeGUgYWZmaWNow6kgYXByw6hzIGxlcyB2YWxldXJzICAqL1xuICBASW5wdXQoKSBzdWZmaXg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogRMOpc2FjdGl2ZXIgbGUgY3Vyc2V1ciAqL1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBZmZpY2hlIHVuIG1lc3NhZ2UgZCdlcnJldXIgICovXG4gIEBJbnB1dCgpIGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIEBpbnRlcm5hbCBDdXJzZXVyIGRvdWJsZSAgKi9cbiAgZG91YmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBoaW50SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArICctaGludC10ZXh0JztcbiAgfVxuXG4gIC8qKkBpbnRlcm5hbCAqL1xuICBpc0RvdWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgaXNTbWFsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID09IERzZnJTaXplQ29uc3QuU007XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldFZhbHVlKGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWVbaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvbklucHV0Q2hhbmdlKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJmci1yYW5nZS1ncm91cFwiXG4gIGlkPVwie3sgaW5wdXRJZCB9fS1ncm91cFwiXG4gIFtuZ0NsYXNzXT1cInsgJ2ZyLXJhbmdlLWdyb3VwLS1kaXNhYmxlZCc6IGRpc2FibGVkLCAnZnItcmFuZ2UtZ3JvdXAtLWVycm9yJzogZXJyb3IgfVwiPlxuICA8bGFiZWwgY2xhc3M9XCJmci1sYWJlbFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhbGFiZWxcIj48L25nLWNvbnRlbnQ+XG4gICAgPHNwYW4gKm5nSWY9XCJoaW50XCIgY2xhc3M9XCJmci1oaW50LXRleHRcIj57eyBoaW50IH19PC9zcGFuPlxuICA8L2xhYmVsPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmci1yYW5nZVwiXG4gICAgW2F0dHIuZGF0YS1mci1wcmVmaXhdPVwicHJlZml4XCJcbiAgICBbYXR0ci5kYXRhLWZyLXN1ZmZpeF09XCJzdWZmaXhcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2ZyLXJhbmdlLS1kb3VibGUnOiBpc0RvdWJsZSgpLCAnZnItcmFuZ2UtLXNtJzogaXNTbWFsbCgpIH1cIj5cbiAgICA8c3BhbiBjbGFzcz1cImZyLXJhbmdlX19vdXRwdXRcIj57eyB2YWx1ZSB9fTwvc3Bhbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRG91YmxlKClcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cInt7IGlucHV0SWQgfX1cIlxuICAgICAgICBuYW1lPVwie3sgaW5wdXRJZCB9fVwiXG4gICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpbnB1dElkICsgJy1sYWJlbCdcIlxuICAgICAgICBtaW49XCJ7eyBtaW4gfX1cIlxuICAgICAgICBtYXg9XCJ7eyBtYXggfX1cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgPz8gZmFsc2VcIlxuICAgICAgICBbYXR0ci52YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImlucHV0SWQgKyAnLW1lc3NhZ2VzJ1wiIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRG91YmxlKClcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cInt7IGlucHV0SWQgfX1cIlxuICAgICAgICBuYW1lPVwie3sgaW5wdXRJZCB9fVwiXG4gICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpbnB1dElkICsgJy1sYWJlbCdcIlxuICAgICAgICBtaW49XCJ7eyBtaW4gfX1cIlxuICAgICAgICBtYXg9XCJ7eyBtYXggfX1cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgPz8gZmFsc2VcIlxuICAgICAgICBbYXR0ci52YWx1ZV09XCJnZXRWYWx1ZSgwKVwiXG4gICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKDApXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgwLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpbnB1dElkICsgJy1tZXNzYWdlcydcIiAvPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwie3sgaW5wdXRJZCB9fS0yXCJcbiAgICAgICAgbmFtZT1cInt7IGlucHV0SWQgfX0tMlwiXG4gICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpbnB1dElkICsgJy1sYWJlbCdcIlxuICAgICAgICBtYXg9XCJ7eyBtYXggfX1cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgPz8gZmFsc2VcIlxuICAgICAgICBbYXR0ci52YWx1ZV09XCJnZXRWYWx1ZSgxKVwiXG4gICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKDEpXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgxLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpbnB1dElkICsgJy1tZXNzYWdlcydcIiAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoaWRlTWluTWF4XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZyLXJhbmdlX19taW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAge3sgbWluIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImZyLXJhbmdlX19tYXhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAge3sgbWF4IH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZnItbWVzc2FnZXMtZ3JvdXBcIiBpZD1cInt7IGlucHV0SWQgfX0tbWVzc2FnZXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICA8cCAqbmdJZj1cImVycm9yXCIgY2xhc3M9XCJmci1tZXNzYWdlIGZyLW1lc3NhZ2UtLWVycm9yXCIgaWQ9XCJyYW5nZS0yMzEwLW1lc3NhZ2UtZXJyb3JcIj5cbiAgICAgIHt7IGVycm9yIH19XG4gICAgPC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19