@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).
65 lines • 20.3 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../../forms/fieldset/form-fieldset.component";
import * as i3 from "../../forms/fieldset/form-fieldset-element.directive";
import * as i4 from "../../forms/form-input/form-input.component";
import * as i5 from "../../forms/form-checkbox/form-checkbox.component";
import * as i6 from "../../components/button/button.component";
import * as i7 from "../../forms/form-select/form-select.component";
import * as i8 from "@angular/forms";
export class DsfrNameComponent {
constructor() {
/**
* Permet d'afficher l'option "Je n'ai pas de prénom".
*/
this.noFirstName = false;
/**
* Permet d'afficher un bouton qui ajoute un nouveau champ de de saisi pour un prénom additionnel.
*/
this.addFirstName = false;
/**
* Notifie que l'utilisateur a cliqué sur le bouton d'ajout de prénom.
*/
this.addFirstNameSelect = new EventEmitter();
/**
* Notifie la suppression d'un prénom additionnel (le tableau 'firstnames' devrait être mis à jour en conséquence).
*/
this.deleteFirstNameSelect = new EventEmitter();
}
/** @internal */
onAddFirstNameInput() {
this.addFirstNameSelect.emit();
}
/** @internal */
onDeleteFirstNameInput(index) {
this.deleteFirstNameSelect.emit(index);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrNameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrNameComponent, selector: "dsfr-name", inputs: { legend: "legend", lastName: "lastName", usualName: "usualName", firstNames: "firstNames", noFirstName: "noFirstName", addFirstName: "addFirstName", country: "country" }, outputs: { addFirstNameSelect: "addFirstNameSelect", deleteFirstNameSelect: "deleteFirstNameSelect" }, ngImport: i0, template: "<dsfr-fieldset legend=\"Nom\" [legendSrOnly]=\"true\">\n <ng-container *ngIf=\"country\">\n <dsfr-form-select\n *fieldsetElement\n [label]=\"country.label || 'Pays'\"\n [placeHolder]=\"country.placeHolder || 'S\u00E9lectionner une option'\"\n [options]=\"country.options ?? []\"\n [(ngModel)]=\"country.value\"></dsfr-form-select>\n </ng-container>\n <dsfr-form-input\n *fieldsetElement\n [name]=\"lastName.name || 'family-name'\"\n [spellcheck]=\"false\"\n [label]=\"lastName.label || 'Nom'\"\n [autocomplete]=\"'family-name'\"\n [(ngModel)]=\"lastName.value\"></dsfr-form-input>\n <ng-container *ngIf=\"usualName\">\n <dsfr-form-input\n *fieldsetElement\n [name]=\"usualName.name || 'married-name'\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'family-name'\"\n [label]=\"usualName.label || 'Nom d\\'usage'\"\n [hint]=\"usualName.hint || 'Ancien nom...'\"\n [(ngModel)]=\"usualName.value\"></dsfr-form-input>\n </ng-container>\n <ng-container *ngIf=\"!noFirstName\">\n <ng-container *ngFor=\"let item of firstNames; let index = index\">\n <dsfr-form-input\n *fieldsetElement\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"noFirstName\">\n <dsfr-fieldset *fieldsetElement legend=\"Pr\u00E9nom(s)\" [legendSrOnly]=\"true\">\n <ng-container *ngFor=\"let item of firstNames; let index = index\">\n <ng-container *ngIf=\"index === 0\">\n <dsfr-form-input\n *fieldsetElement\n [disabled]=\"item.disabled || noFirstNameModel === true\"\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n <ng-container *ngIf=\"index > 0\">\n <dsfr-form-input\n *fieldsetElement\n [disabled]=\"item.disabled || noFirstNameModel === true\"\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n inputWrapMode=\"action\"\n [buttonIcon]=\"index !== 0 ? 'fr-icon-delete-line' : undefined\"\n buttonVariant=\"tertiary\"\n (buttonSelect)=\"onDeleteFirstNameInput(index)\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"addFirstName\">\n <dsfr-button\n *fieldsetElement\n label=\"Ajouter un pr\u00E9nom\"\n iconPosition=\"left\"\n variant=\"tertiary\"\n size=\"SM\"\n icon=\"fr-icon-add-line\"\n [disabled]=\"noFirstNameModel === true\"\n (click)=\"onAddFirstNameInput()\"></dsfr-button>\n </ng-container>\n\n <dsfr-form-checkbox\n *fieldsetElement\n [small]=\"true\"\n name=\"firstname-disabled\"\n label=\"Je n'ai pas de pr\u00E9nom\"\n [(ngModel)]=\"noFirstNameModel\"></dsfr-form-checkbox>\n </dsfr-fieldset>\n </ng-container>\n</dsfr-fieldset>\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: "component", type: i2.DsfrFormFieldsetComponent, selector: "dsfr-fieldset, dsfr-form-fieldset", inputs: ["inline"] }, { kind: "directive", type: i3.DsfrFormFieldsetElementDirective, selector: "[fieldsetElement]", inputs: ["fieldsetElement"] }, { kind: "component", type: i4.DsfrFormInputComponent, selector: "dsfr-form-input", inputs: ["rows", "width", "textarea"] }, { kind: "component", type: i5.DsfrFormCheckboxComponent, selector: "dsfr-form-checkbox", inputs: ["error", "valid", "small", "indeterminate"] }, { kind: "component", type: i6.DsfrButtonComponent, selector: "dsfr-button", inputs: ["label", "type", "tooltipMessage", "variant", "size", "icon", "iconPosition", "disabled", "uppercase", "loader", "ariaLabel", "invertedOutlineContrast", "id", "ariaControls", "customClass"] }, { kind: "component", type: i7.DsfrFormSelectComponent, selector: "dsfr-form-select", inputs: ["placeholder", "options", "required", "ariaLabel", "error", "valid", "placeHolder", "compareWith"], outputs: ["selectChange"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.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: DsfrNameComponent, decorators: [{
type: Component,
args: [{ selector: 'dsfr-name', encapsulation: ViewEncapsulation.None, template: "<dsfr-fieldset legend=\"Nom\" [legendSrOnly]=\"true\">\n <ng-container *ngIf=\"country\">\n <dsfr-form-select\n *fieldsetElement\n [label]=\"country.label || 'Pays'\"\n [placeHolder]=\"country.placeHolder || 'S\u00E9lectionner une option'\"\n [options]=\"country.options ?? []\"\n [(ngModel)]=\"country.value\"></dsfr-form-select>\n </ng-container>\n <dsfr-form-input\n *fieldsetElement\n [name]=\"lastName.name || 'family-name'\"\n [spellcheck]=\"false\"\n [label]=\"lastName.label || 'Nom'\"\n [autocomplete]=\"'family-name'\"\n [(ngModel)]=\"lastName.value\"></dsfr-form-input>\n <ng-container *ngIf=\"usualName\">\n <dsfr-form-input\n *fieldsetElement\n [name]=\"usualName.name || 'married-name'\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'family-name'\"\n [label]=\"usualName.label || 'Nom d\\'usage'\"\n [hint]=\"usualName.hint || 'Ancien nom...'\"\n [(ngModel)]=\"usualName.value\"></dsfr-form-input>\n </ng-container>\n <ng-container *ngIf=\"!noFirstName\">\n <ng-container *ngFor=\"let item of firstNames; let index = index\">\n <dsfr-form-input\n *fieldsetElement\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"noFirstName\">\n <dsfr-fieldset *fieldsetElement legend=\"Pr\u00E9nom(s)\" [legendSrOnly]=\"true\">\n <ng-container *ngFor=\"let item of firstNames; let index = index\">\n <ng-container *ngIf=\"index === 0\">\n <dsfr-form-input\n *fieldsetElement\n [disabled]=\"item.disabled || noFirstNameModel === true\"\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n <ng-container *ngIf=\"index > 0\">\n <dsfr-form-input\n *fieldsetElement\n [disabled]=\"item.disabled || noFirstNameModel === true\"\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n inputWrapMode=\"action\"\n [buttonIcon]=\"index !== 0 ? 'fr-icon-delete-line' : undefined\"\n buttonVariant=\"tertiary\"\n (buttonSelect)=\"onDeleteFirstNameInput(index)\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"addFirstName\">\n <dsfr-button\n *fieldsetElement\n label=\"Ajouter un pr\u00E9nom\"\n iconPosition=\"left\"\n variant=\"tertiary\"\n size=\"SM\"\n icon=\"fr-icon-add-line\"\n [disabled]=\"noFirstNameModel === true\"\n (click)=\"onAddFirstNameInput()\"></dsfr-button>\n </ng-container>\n\n <dsfr-form-checkbox\n *fieldsetElement\n [small]=\"true\"\n name=\"firstname-disabled\"\n label=\"Je n'ai pas de pr\u00E9nom\"\n [(ngModel)]=\"noFirstNameModel\"></dsfr-form-checkbox>\n </dsfr-fieldset>\n </ng-container>\n</dsfr-fieldset>\n" }]
}], propDecorators: { legend: [{
type: Input
}], lastName: [{
type: Input,
args: [{ required: true }]
}], usualName: [{
type: Input
}], firstNames: [{
type: Input,
args: [{ required: true }]
}], noFirstName: [{
type: Input
}], addFirstName: [{
type: Input
}], country: [{
type: Input
}], addFirstNameSelect: [{
type: Output
}], deleteFirstNameSelect: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvcGF0dGVybnMvbmFtZS9uYW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9wYXR0ZXJucy9uYW1lL25hbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQVMxRixNQUFNLE9BQU8saUJBQWlCO0lBTDlCO1FBMEJFOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFN0I7O1dBRUc7UUFDTSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQU85Qjs7V0FFRztRQUNPLHVCQUFrQixHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhFOztXQUVHO1FBQ08sMEJBQXFCLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7S0FjNUU7SUFUQyxnQkFBZ0I7SUFDaEIsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDOytHQXpEVSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw0VUNUOUIsZzZHQXVGQTs7NEZEOUVhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxXQUFXLGlCQUVOLGlCQUFpQixDQUFDLElBQUk7OEJBTTVCLE1BQU07c0JBQWQsS0FBSztnQkFLcUIsUUFBUTtzQkFBbEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS2hCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS3FCLFVBQVU7c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUtoQixXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFLRyxxQkFBcUI7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERzZnJJbnB1dFRleHQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2lucHV0Lm1vZGVsJztcbmltcG9ydCB7IERzZnJTZWxlY3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3NlbGVjdC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RzZnItbmFtZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYW1lLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmck5hbWVDb21wb25lbnQge1xuICAvKipcbiAgICogTMOpZ2VuZGUgZHUgZmllbGRzZXQuXG4gICAqL1xuICBASW5wdXQoKSBsZWdlbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YSBkdSBjaGFtcCBuYW1lLlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgbGFzdE5hbWU6IERzZnJJbnB1dFRleHQ7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkJ2luZGlxdWVyIHVuIG5vbSBkJ3VzYWdlIChvcHRpb25uZWwpLlxuICAgKi9cbiAgQElucHV0KCkgdXN1YWxOYW1lOiBEc2ZySW5wdXRUZXh0O1xuXG4gIC8qKlxuICAgKiBEYXRhIGR1IGNoYW1wIGZpcnN0bmFtZS5cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGZpcnN0TmFtZXM6IERzZnJJbnB1dFRleHRbXTtcblxuICAvKipcbiAgICogUGVybWV0IGQnYWZmaWNoZXIgbCdvcHRpb24gXCJKZSBuJ2FpIHBhcyBkZSBwcsOpbm9tXCIuXG4gICAqL1xuICBASW5wdXQoKSBub0ZpcnN0TmFtZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQZXJtZXQgZCdhZmZpY2hlciB1biBib3V0b24gcXVpIGFqb3V0ZSB1biBub3V2ZWF1IGNoYW1wIGRlIGRlIHNhaXNpIHBvdXIgdW4gcHLDqW5vbSBhZGRpdGlvbm5lbC5cbiAgICovXG4gIEBJbnB1dCgpIGFkZEZpcnN0TmFtZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEYXRhIGR1IHNlbGVjdGV1ciBkZSBwYXlzIChvcHRpb25uZWwpLlxuICAgKi9cbiAgQElucHV0KCkgY291bnRyeTogRHNmclNlbGVjdDtcblxuICAvKipcbiAgICogTm90aWZpZSBxdWUgbCd1dGlsaXNhdGV1ciBhIGNsaXF1w6kgc3VyIGxlIGJvdXRvbiBkJ2Fqb3V0IGRlIHByw6lub20uXG4gICAqL1xuICBAT3V0cHV0KCkgYWRkRmlyc3ROYW1lU2VsZWN0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogTm90aWZpZSBsYSBzdXBwcmVzc2lvbiBkJ3VuIHByw6lub20gYWRkaXRpb25uZWwgKGxlIHRhYmxlYXUgJ2ZpcnN0bmFtZXMnIGRldnJhaXQgw6p0cmUgbWlzIMOgIGpvdXIgZW4gY29uc8OpcXVlbmNlKS5cbiAgICovXG4gIEBPdXRwdXQoKSBkZWxldGVGaXJzdE5hbWVTZWxlY3Q6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm9GaXJzdE5hbWVNb2RlbDogYm9vbGVhbjtcblxuICAvKiogQGludGVybmFsICovXG4gIG9uQWRkRmlyc3ROYW1lSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRGaXJzdE5hbWVTZWxlY3QuZW1pdCgpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvbkRlbGV0ZUZpcnN0TmFtZUlucHV0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZUZpcnN0TmFtZVNlbGVjdC5lbWl0KGluZGV4KTtcbiAgfVxufVxuIiwiPGRzZnItZmllbGRzZXQgbGVnZW5kPVwiTm9tXCIgW2xlZ2VuZFNyT25seV09XCJ0cnVlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb3VudHJ5XCI+XG4gICAgPGRzZnItZm9ybS1zZWxlY3RcbiAgICAgICpmaWVsZHNldEVsZW1lbnRcbiAgICAgIFtsYWJlbF09XCJjb3VudHJ5LmxhYmVsIHx8ICdQYXlzJ1wiXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiY291bnRyeS5wbGFjZUhvbGRlciB8fCAnU8OpbGVjdGlvbm5lciB1bmUgb3B0aW9uJ1wiXG4gICAgICBbb3B0aW9uc109XCJjb3VudHJ5Lm9wdGlvbnMgPz8gW11cIlxuICAgICAgWyhuZ01vZGVsKV09XCJjb3VudHJ5LnZhbHVlXCI+PC9kc2ZyLWZvcm0tc2VsZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRzZnItZm9ybS1pbnB1dFxuICAgICpmaWVsZHNldEVsZW1lbnRcbiAgICBbbmFtZV09XCJsYXN0TmFtZS5uYW1lIHx8ICdmYW1pbHktbmFtZSdcIlxuICAgIFtzcGVsbGNoZWNrXT1cImZhbHNlXCJcbiAgICBbbGFiZWxdPVwibGFzdE5hbWUubGFiZWwgfHwgJ05vbSdcIlxuICAgIFthdXRvY29tcGxldGVdPVwiJ2ZhbWlseS1uYW1lJ1wiXG4gICAgWyhuZ01vZGVsKV09XCJsYXN0TmFtZS52YWx1ZVwiPjwvZHNmci1mb3JtLWlucHV0PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidXN1YWxOYW1lXCI+XG4gICAgPGRzZnItZm9ybS1pbnB1dFxuICAgICAgKmZpZWxkc2V0RWxlbWVudFxuICAgICAgW25hbWVdPVwidXN1YWxOYW1lLm5hbWUgfHwgJ21hcnJpZWQtbmFtZSdcIlxuICAgICAgW3NwZWxsY2hlY2tdPVwiZmFsc2VcIlxuICAgICAgW2F1dG9jb21wbGV0ZV09XCInZmFtaWx5LW5hbWUnXCJcbiAgICAgIFtsYWJlbF09XCJ1c3VhbE5hbWUubGFiZWwgfHwgJ05vbSBkXFwndXNhZ2UnXCJcbiAgICAgIFtoaW50XT1cInVzdWFsTmFtZS5oaW50IHx8ICdBbmNpZW4gbm9tLi4uJ1wiXG4gICAgICBbKG5nTW9kZWwpXT1cInVzdWFsTmFtZS52YWx1ZVwiPjwvZHNmci1mb3JtLWlucHV0PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFub0ZpcnN0TmFtZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlyc3ROYW1lczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgIDxkc2ZyLWZvcm0taW5wdXRcbiAgICAgICAgKmZpZWxkc2V0RWxlbWVudFxuICAgICAgICBbbmFtZV09XCJpdGVtLm5hbWUgfHwgJ2dpdmVuLW5hbWUnICsgaW5kZXhcIlxuICAgICAgICBbc3BlbGxjaGVja109XCJmYWxzZVwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiJ2dpdmVuLW5hbWUnXCJcbiAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWwgfHwgJ1Byw6lub20nXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCI+PC9kc2ZyLWZvcm0taW5wdXQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9GaXJzdE5hbWVcIj5cbiAgICA8ZHNmci1maWVsZHNldCAqZmllbGRzZXRFbGVtZW50IGxlZ2VuZD1cIlByw6lub20ocylcIiBbbGVnZW5kU3JPbmx5XT1cInRydWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlyc3ROYW1lczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGV4ID09PSAwXCI+XG4gICAgICAgICAgPGRzZnItZm9ybS1pbnB1dFxuICAgICAgICAgICAgKmZpZWxkc2V0RWxlbWVudFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgfHwgbm9GaXJzdE5hbWVNb2RlbCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICBbbmFtZV09XCJpdGVtLm5hbWUgfHwgJ2dpdmVuLW5hbWUnICsgaW5kZXhcIlxuICAgICAgICAgICAgW3NwZWxsY2hlY2tdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCInZ2l2ZW4tbmFtZSdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWwgfHwgJ1Byw6lub20nXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvZHNmci1mb3JtLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGV4ID4gMFwiPlxuICAgICAgICAgIDxkc2ZyLWZvcm0taW5wdXRcbiAgICAgICAgICAgICpmaWVsZHNldEVsZW1lbnRcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkIHx8IG5vRmlyc3ROYW1lTW9kZWwgPT09IHRydWVcIlxuICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5uYW1lIHx8ICdnaXZlbi1uYW1lJyArIGluZGV4XCJcbiAgICAgICAgICAgIFtzcGVsbGNoZWNrXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiJ2dpdmVuLW5hbWUnXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsIHx8ICdQcsOpbm9tJ1wiXG4gICAgICAgICAgICBpbnB1dFdyYXBNb2RlPVwiYWN0aW9uXCJcbiAgICAgICAgICAgIFtidXR0b25JY29uXT1cImluZGV4ICE9PSAwID8gJ2ZyLWljb24tZGVsZXRlLWxpbmUnIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIGJ1dHRvblZhcmlhbnQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAoYnV0dG9uU2VsZWN0KT1cIm9uRGVsZXRlRmlyc3ROYW1lSW5wdXQoaW5kZXgpXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvZHNmci1mb3JtLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWRkRmlyc3ROYW1lXCI+XG4gICAgICAgIDxkc2ZyLWJ1dHRvblxuICAgICAgICAgICpmaWVsZHNldEVsZW1lbnRcbiAgICAgICAgICBsYWJlbD1cIkFqb3V0ZXIgdW4gcHLDqW5vbVwiXG4gICAgICAgICAgaWNvblBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgdmFyaWFudD1cInRlcnRpYXJ5XCJcbiAgICAgICAgICBzaXplPVwiU01cIlxuICAgICAgICAgIGljb249XCJmci1pY29uLWFkZC1saW5lXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibm9GaXJzdE5hbWVNb2RlbCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQWRkRmlyc3ROYW1lSW5wdXQoKVwiPjwvZHNmci1idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRzZnItZm9ybS1jaGVja2JveFxuICAgICAgICAqZmllbGRzZXRFbGVtZW50XG4gICAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICAgICAgbmFtZT1cImZpcnN0bmFtZS1kaXNhYmxlZFwiXG4gICAgICAgIGxhYmVsPVwiSmUgbidhaSBwYXMgZGUgcHLDqW5vbVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwibm9GaXJzdE5hbWVNb2RlbFwiPjwvZHNmci1mb3JtLWNoZWNrYm94PlxuICAgIDwvZHNmci1maWVsZHNldD5cbiAgPC9uZy1jb250YWluZXI+XG48L2RzZnItZmllbGRzZXQ+XG4iXX0=