@wemake4u/form-player-se 1.0.14 → 1.0.16

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.
@@ -382,7 +382,7 @@ export class DynamicFieldsComponent {
382
382
  RegisterService,
383
383
  ProgrammabilityService,
384
384
  GridService
385
- ], ngImport: i0, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"locale(Texts, 'TypeToSearch')\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaDateLabel') || locale(component, 'dateLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'dateLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaTimeLabel') || locale(component, 'timeLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'timeLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ locale(Texts, 'Upload') }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\"\r\n [rows]=\"createUploadTables(component)\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [collapse]=\"component.collapseTo\"\r\n [language]=\"language\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [attr.aria-label]=\"locale(Texts, 'Information')\"\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'tooltip')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(locale(component, 'content')))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(locale(component, 'alt'))\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\"> \r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true, 'group-outline-repeat': true }\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <label>{{ evaluateString(locale(component, 'label')) + ' ' + (i + 1) }}</label>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> \r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ evaluateString(locale(component, 'addLabel') || locale(Texts, 'AddItem')) }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <label [for]=\"component.id\">{{ evaluateString(locale(component, 'label')) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(locale(component, 'label'))\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"locale(Texts, 'Close')\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(locale(component, 'title'))\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(locale(component, 'title')) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(panel, 'label'))\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(panel, 'label'))\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-outline-repeat{margin-top:8px;margin-bottom:8px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.fp-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.fp-readonly label:hover{color:#454d56}.sirio-control.fp-readonly input.sirio-form-control,.sirio-control.fp-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.fp-readonly textarea.sirio-form-control{background:none!important;border:0px;padding:0}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.fp-readonly label,.sirio-upload.sirio-control.fp-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup", "language"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i10.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i11.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i11.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i11.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i11.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: DisableDirective, selector: "[disableControl], [readonly]", inputs: ["disableControl", "readonly", "placeholder", "componentRef"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat]", inputs: ["repeat"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource]", inputs: ["rowSource"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "directive", type: DateDirective, selector: "[isoDate]" }, { kind: "directive", type: NumberDirective, selector: "[number]", inputs: ["defaultValue", "minimum", "maximum", "decimalDigits"] }, { kind: "directive", type: TextDirective, selector: "[textcase], [maxlength]", inputs: ["textcase", "maxlength"] }, { kind: "directive", type: DisableFormDirective, selector: "[disableForm]", inputs: ["disableForm"] }, { kind: "directive", type: TabControlDirective, selector: "[tabControl]" }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["collapse", "language"] }, { kind: "directive", type: AccordionPanelDirective, selector: "[accordionPanel]" }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "directive", type: SirioValidationDirective, selector: "[validation]", inputs: ["canValidate", "isWarning", "showWhenValid"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "directive", type: SirioTooltipDirective, selector: "[sirioTooltip]", inputs: ["sirioTooltip", "content", "hasAction", "hasPopover", "actionLabel", "actionIconClass", "clickOutside", "position", "customTemplate"], outputs: ["clickEvent"] }, { kind: "component", type: TemplateWrapperComponent, selector: "app-template-wrapper", inputs: ["template", "context"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }], encapsulation: i0.ViewEncapsulation.None });
385
+ ], ngImport: i0, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"locale(Texts, 'TypeToSearch')\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaDateLabel') || locale(component, 'dateLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'dateLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaTimeLabel') || locale(component, 'timeLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'timeLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ locale(Texts, 'Upload') }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\"\r\n [rows]=\"createUploadTables(component)\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [collapse]=\"component.collapseTo\"\r\n [language]=\"language\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [attr.aria-label]=\"locale(Texts, 'Information')\"\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'tooltip')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(locale(component, 'content')))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(locale(component, 'alt'))\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\"\r\n [repeat]=\"evaluateNumber(component.repetitions)\"\r\n [allowAddRemove]=\"evaluateBoolean(component.allowAddRemove)\">\r\n <p *ngIf=\"component.description\">{{ evaluateString(locale(component, 'description')) }}</p>\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true, 'group-outline-repeat': true }\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <label>{{ evaluateString(locale(component, 'label')) + ' ' + (i + 1) }}</label>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ evaluateString(locale(component, 'addLabel') || locale(Texts, 'AddItem')) }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <label [for]=\"component.id\">{{ evaluateString(locale(component, 'label')) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(locale(component, 'label'))\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"locale(Texts, 'Close')\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(locale(component, 'title'))\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(locale(component, 'title')) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(panel, 'label'))\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(panel, 'label'))\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-outline-repeat{margin-top:8px;margin-bottom:8px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.fp-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.fp-readonly label:hover{color:#454d56}.sirio-control.fp-readonly input.sirio-form-control,.sirio-control.fp-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.fp-readonly textarea.sirio-form-control{background:none!important;border:0px;padding:0}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.fp-readonly label,.sirio-upload.sirio-control.fp-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.col-host .sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.col-host .sirio-accordion-body{overflow:unset!important}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup", "language"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i10.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i11.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i11.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i11.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i11.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: DisableDirective, selector: "[disableControl], [readonly]", inputs: ["disableControl", "readonly", "placeholder", "componentRef"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat], [allowAddRemove]", inputs: ["repeat", "allowAddRemove"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource]", inputs: ["rowSource"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "directive", type: DateDirective, selector: "[isoDate]" }, { kind: "directive", type: NumberDirective, selector: "[number]", inputs: ["defaultValue", "minimum", "maximum", "decimalDigits"] }, { kind: "directive", type: TextDirective, selector: "[textcase], [maxlength]", inputs: ["textcase", "maxlength"] }, { kind: "directive", type: DisableFormDirective, selector: "[disableForm]", inputs: ["disableForm"] }, { kind: "directive", type: TabControlDirective, selector: "[tabControl]" }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["collapse", "language"] }, { kind: "directive", type: AccordionPanelDirective, selector: "[accordionPanel]" }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "directive", type: SirioValidationDirective, selector: "[validation]", inputs: ["canValidate", "isWarning", "showWhenValid"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "directive", type: SirioTooltipDirective, selector: "[sirioTooltip]", inputs: ["sirioTooltip", "content", "hasAction", "hasPopover", "actionLabel", "actionIconClass", "clickOutside", "position", "customTemplate"], outputs: ["clickEvent"] }, { kind: "component", type: TemplateWrapperComponent, selector: "app-template-wrapper", inputs: ["template", "context"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }], encapsulation: i0.ViewEncapsulation.None });
386
386
  }
387
387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicFieldsComponent, decorators: [{
388
388
  type: Component,
@@ -406,7 +406,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
406
406
  RegisterService,
407
407
  ProgrammabilityService,
408
408
  GridService
409
- ], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"locale(Texts, 'TypeToSearch')\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaDateLabel') || locale(component, 'dateLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'dateLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaTimeLabel') || locale(component, 'timeLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'timeLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ locale(Texts, 'Upload') }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\"\r\n [rows]=\"createUploadTables(component)\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [collapse]=\"component.collapseTo\"\r\n [language]=\"language\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [attr.aria-label]=\"locale(Texts, 'Information')\"\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'tooltip')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(locale(component, 'content')))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(locale(component, 'alt'))\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\"> \r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true, 'group-outline-repeat': true }\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <label>{{ evaluateString(locale(component, 'label')) + ' ' + (i + 1) }}</label>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> \r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ evaluateString(locale(component, 'addLabel') || locale(Texts, 'AddItem')) }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <label [for]=\"component.id\">{{ evaluateString(locale(component, 'label')) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(locale(component, 'label'))\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"locale(Texts, 'Close')\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(locale(component, 'title'))\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(locale(component, 'title')) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(panel, 'label'))\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(panel, 'label'))\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-outline-repeat{margin-top:8px;margin-bottom:8px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.fp-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.fp-readonly label:hover{color:#454d56}.sirio-control.fp-readonly input.sirio-form-control,.sirio-control.fp-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.fp-readonly textarea.sirio-form-control{background:none!important;border:0px;padding:0}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.fp-readonly label,.sirio-upload.sirio-control.fp-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}\n"] }]
409
+ ], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"locale(Texts, 'TypeToSearch')\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaDateLabel') || locale(component, 'dateLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'dateLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaTimeLabel') || locale(component, 'timeLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'timeLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ locale(Texts, 'Upload') }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\"\r\n [rows]=\"createUploadTables(component)\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [collapse]=\"component.collapseTo\"\r\n [language]=\"language\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [attr.aria-label]=\"locale(Texts, 'Information')\"\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'tooltip')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(locale(component, 'content')))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(locale(component, 'alt'))\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\"\r\n [repeat]=\"evaluateNumber(component.repetitions)\"\r\n [allowAddRemove]=\"evaluateBoolean(component.allowAddRemove)\">\r\n <p *ngIf=\"component.description\">{{ evaluateString(locale(component, 'description')) }}</p>\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true, 'group-outline-repeat': true }\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <label>{{ evaluateString(locale(component, 'label')) + ' ' + (i + 1) }}</label>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ evaluateString(locale(component, 'addLabel') || locale(Texts, 'AddItem')) }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <label [for]=\"component.id\">{{ evaluateString(locale(component, 'label')) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(locale(component, 'label'))\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"locale(Texts, 'Close')\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(locale(component, 'title'))\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(locale(component, 'title')) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(panel, 'label'))\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(panel, 'label'))\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"\r\n [language]=\"language\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-outline-repeat{margin-top:8px;margin-bottom:8px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.fp-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.fp-readonly label:hover{color:#454d56}.sirio-control.fp-readonly input.sirio-form-control,.sirio-control.fp-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.fp-readonly textarea.sirio-form-control{background:none!important;border:0px;padding:0}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.fp-readonly label,.sirio-upload.sirio-control.fp-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.col-host .sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.col-host .sirio-accordion-body{overflow:unset!important}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}\n"] }]
410
410
  }], ctorParameters: () => [{ type: i1.SanitizeService }, { type: i2.MarkdownService }, { type: i3.MimeService }, { type: i4.ProgrammabilityService }, { type: i5.EventService }, { type: i6.WeakService }, { type: i7.RegisterService }, { type: i8.MetadataService }, { type: i9.GridService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { rows: [{
411
411
  type: Input
412
412
  }], formGroup: [{
@@ -414,4 +414,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
414
414
  }], language: [{
415
415
  type: Input
416
416
  }] } });
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQWdELE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFp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QUFFLG9CQUFvQjt3QkFDckUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCO3dCQUNwRyxxQkFBcUI7d0JBQ3JCLHdCQUF3Qjt3QkFDeEIsYUFBYSxDQUFDLGFBQ1A7d0JBQ1QsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLFdBQVc7cUJBQ1osaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTtxWEFHNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElEeW5hbWljRmllbGRzQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU2FmZUh0bWwsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBEYXRlcGlja2VyIH0gZnJvbSAndmFuaWxsYWpzLWRhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBTYW5pdGl6ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYW5pdGl6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFya2Rvd25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFya2Rvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1pbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWltZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlLCBDb21tYW5kRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2Vha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy93ZWFrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnV0dG9uQ29sb3JzIH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcbmltcG9ydCB7IEFkb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Fkb3JuZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGlzYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzYWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBEaXNwbGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kaXNwbGF5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlcGVhdERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmVwZWF0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZyYW1lU2VjdXJpdHlEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZyYW1lc2VjdXJpdHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Ryb3Bkb3duLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRhYkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGFiLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFjY29yZGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYWNjb3JkaW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUmVnaXN0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlZ2lzdGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFVwZGF0ZUJsdXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3VwZGF0ZWJsdXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBOdW1iZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL251bWJlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERpc2FibGVGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kaXNhYmxlZm9ybS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUYWJDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90YWJjb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbGxhcHNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb2xsYXBzZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYWNjb3JkaW9ucGFuZWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGVtcGxhdGVXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL3RlbXBsYXRlLXdyYXBwZXIvdGVtcGxhdGUtd3JhcHBlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNpcmlvSW5wdXRDb21wb25lbnQsIFNpcmlvVmFsaWRhdGlvbkRpcmVjdGl2ZVxyXG4gICwgU2lyaW9TZWxlY3RDb21wb25lbnQsIFNpcmlvU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBTaXJpb1NlbGVjdFBhbmVsQ29tcG9uZW50XHJcbiAgLCBTaXJpb0NoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hlY2tib3hDb21wb25lbnQsIFNpcmlvRGF0ZXBpY2tlckNvbXBvbmVudCwgU2lyaW9UaW1lcGlja2VyQ29tcG9uZW50XHJcbiAgLCBTaXJpb1JhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvUmFkaW9CdXR0b25Db21wb25lbnQsIFNpcmlvVGFiQ29tcG9uZW50LCBTaXJpb1RhYkl0ZW1Db21wb25lbnRcclxuICAsIFNpcmlvQWNjb3JkaW9uQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvblBhbmVsQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25Cb2R5Q29tcG9uZW50XHJcbiAgLCBTaXJpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9GaWxlVXBsb2FkQ29tcG9uZW50XHJcbiAgLCBTaXJpb1RvZ2dsZUNvbXBvbmVudCwgU2lyaW9DaGlwQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGlwUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9JbnB1dENoaXBDb21wb25lbnRcclxuICAsIFNpcmlvQWxlcnRDb21wb25lbnQsIFNpcmlvQWxlcnRNZXNzYWdlQ29tcG9uZW50LCBTaXJpb1NsaWRlckNvbXBvbmVudFxyXG4gICwgU2lyaW9Ob3RpZnlDb21wb25lbnQsIFNpcmlvTm90aWZ5Qm9keUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlBY3Rpb25Db21wb25lbnQsIFNpcmlvTm90aWZ5TGlua0NvbXBvbmVudFxyXG4gICwgU2lyaW9Ub29sdGlwRGlyZWN0aXZlXHJcbiAgLCBOZ3hTaXJpb0V2ZW50XHJcbn0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcblxyXG5pbXBvcnQgeyBBZ0dyaWRBbmd1bGFyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcclxuaW1wb3J0IHsgTW9kdWxlLCBHcmlkT3B0aW9ucyB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuXHJcbmltcG9ydCB7IFRleHRzIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsZSc7XHJcbmltcG9ydCB7IGxvY2FsaXplIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsaXplJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWR5bmFtaWMtZmllbGRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmNzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZVxyXG4gICAgLCBBZG9ybmVyRGlyZWN0aXZlLCBEaXNhYmxlRGlyZWN0aXZlLCBEaXNwbGF5RGlyZWN0aXZlLCBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlXHJcbiAgICAsIERyb3Bkb3duRGlyZWN0aXZlLCBVcGRhdGVCbHVyRGlyZWN0aXZlLCBSZXBlYXREaXJlY3RpdmUsIFRhYkRpcmVjdGl2ZSwgR3JpZERpcmVjdGl2ZVxyXG4gICAgLCBSZWdpc3RlckRpcmVjdGl2ZSwgQWNjb3JkaW9uRGlyZWN0aXZlLCBEYXRlRGlyZWN0aXZlLCBOdW1iZXJEaXJlY3RpdmUsIFRleHREaXJlY3RpdmVcclxuICAgICwgRGlzYWJsZUZvcm1EaXJlY3RpdmUsIFRhYkNvbnRyb2xEaXJlY3RpdmUsIENvbGxhcHNlRGlyZWN0aXZlLCBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZVxyXG4gICAgLCBTaXJpb0lucHV0Q29tcG9uZW50LCBTaXJpb1ZhbGlkYXRpb25EaXJlY3RpdmVcclxuICAgICwgU2lyaW9TZWxlY3RDb21wb25lbnQsIFNpcmlvU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBTaXJpb1NlbGVjdFBhbmVsQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGVja2JveENvbXBvbmVudCwgU2lyaW9EYXRlcGlja2VyQ29tcG9uZW50LCBTaXJpb1RpbWVwaWNrZXJDb21wb25lbnRcclxuICAgICwgU2lyaW9SYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb1JhZGlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb1RhYkNvbXBvbmVudCwgU2lyaW9UYWJJdGVtQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQWNjb3JkaW9uQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvblBhbmVsQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25Cb2R5Q29tcG9uZW50XHJcbiAgICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnRcclxuICAgICwgU2lyaW9Ub2dnbGVDb21wb25lbnQsIFNpcmlvQ2hpcENoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hpcFJhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvSW5wdXRDaGlwQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQWxlcnRDb21wb25lbnQsIFNpcmlvQWxlcnRNZXNzYWdlQ29tcG9uZW50LCBTaXJpb1NsaWRlckNvbXBvbmVudFxyXG4gICAgLCBTaXJpb05vdGlmeUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlCb2R5Q29tcG9uZW50LCBTaXJpb05vdGlmeUFjdGlvbkNvbXBvbmVudCwgU2lyaW9Ob3RpZnlMaW5rQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvVG9vbHRpcERpcmVjdGl2ZVxyXG4gICAgLCBUZW1wbGF0ZVdyYXBwZXJDb21wb25lbnRcclxuICAgICwgQWdHcmlkQW5ndWxhcl0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBSZWdpc3RlclNlcnZpY2UsXHJcbiAgICBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlLFxyXG4gICAgR3JpZFNlcnZpY2VcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIElEeW5hbWljRmllbGRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBsYW5ndWFnZSE6IHN0cmluZztcclxuXHJcbiAgVGV4dHMgPSBUZXh0cztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IFNhbml0aXplU2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1hcmtkb3duOiBNYXJrZG93blNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtaW1lOiBNaW1lU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgd2VhazogV2Vha1NlcnZpY2VcclxuICAgICwgcHJpdmF0ZSByZWdpc3RlcjogUmVnaXN0ZXJTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWV0YWRhdGE6IE1ldGFkYXRhU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGdyaWQ6IEdyaWRTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcclxuICAgICwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKVxyXG4gIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyAgICBcclxuICAgIHRoaXMuY29uZmlndXJlRGF0ZXBpY2tlcigpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXNGaXJzdCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZWdpc3RlcigpOiBSZWdpc3RlclNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXI7XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzcyhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb2xIb3N0ID0gXCJjb2wtaG9zdCBcIjtcclxuICAgIGlmIChjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zKSB7XHJcbiAgICAgIHJldHVybiBjb2xIb3N0ICsgXCJjb2wtbWQtXCIgKyBjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb2xIb3N0ICsgXCJjb2xcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRleHRGZWVkYmFjayhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgcmV0dXJuICFjb250cm9sIHx8IGNvbnRyb2wudmFsaWQgfHwgIWNvbnRyb2wuZXJyb3JzXHJcbiAgICAgID8gJydcclxuICAgICAgOiBjb250cm9sLmVycm9yc1snbWVzc2FnZSddO1xyXG4gIH1cclxuXHJcbiAgaXNXYXJuaW5nKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgcmV0dXJuIChjb250cm9sICYmIGNvbnRyb2wuZXJyb3JzICYmIGNvbnRyb2wuZXJyb3JzWyd3YXJuaW5nJ10pIHx8IGZhbHNlXHJcbiAgfVxyXG5cclxuICBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVN0cmluZyh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTsgICAgXHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUJvb2xlYW4odmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVOdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZU51bWJlcih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVVcmwodmFsdWU6IHN0cmluZyB8IG51bGwpOiBTYWZlUmVzb3VyY2VVcmwge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpzYWZlVXJsKCR7dXJsfSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemVTYWZlVXJsKHVybCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVGVtcGxhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlVGVtcGxhdGUodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlKHRleHQ6IHN0cmluZyB8IG51bGwsIGNhY2hlYWJsZTogYm9vbGVhbiA9IHRydWUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKHRoaXMuZm9ybUdyb3VwLCB0ZXh0LCB7IGNhY2hlYWJsZTogY2FjaGVhYmxlIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb2xvcih2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IEJ1dHRvbkNvbG9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmV2YWx1YXRlU3RyaW5nKHZhbHVlKTtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpidXR0b25Db2xvcigke2NvbG9yfSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBpZiAoY29sb3IgPT09IFwiZ2hvc3RcIilcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgY29uc3QgdmFsaWRDb2xvcnM6IEJ1dHRvbkNvbG9yc1tdID0gWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICd0ZXJ0aWFyeScsICd0ZXJ0aWFyeS1saWdodCcsICdkYW5nZXInXTtcclxuICAgICAgcmV0dXJuIHZhbGlkQ29sb3JzLmluY2x1ZGVzKGNvbG9yIGFzIEJ1dHRvbkNvbG9ycykgPyAoY29sb3IgYXMgQnV0dG9uQ29sb3JzKSA6ICdwcmltYXJ5JztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb25kaXRpb25hbChjb25kaXRpb25hbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBoaWRlID0gdGhpcy5ldmFsdWF0ZUJvb2xlYW4oY29uZGl0aW9uYWw/LmhpZGUpO1xyXG4gICAgY29uc3Qgc2hvdyA9IHRoaXMuZXZhbHVhdGVCb29sZWFuKGNvbmRpdGlvbmFsPy5zaG93KTtcclxuICAgIFxyXG4gICAgcmV0dXJuICEoaGlkZSA9PT0gdHJ1ZSB8fCBzaG93ID09PSBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLmdldEZvcm1CeU5hbWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUdyb3VwKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBGb3JtR3JvdXAge1xyXG4gICAgaWYgKCEoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250cm9sIGlzIG5vdCBhIEZvcm1Hcm91cCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCk6IEZvcm1BcnJheSB7XHJcbiAgICBpZiAoIShjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRyb2wgaXMgbm90IGEgRm9ybUFycmF5Jyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldENvbnRyb2xGcm9tUGF0aChwYXRoOiBzdHJpbmcgfCBudWxsKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb250cm9sID0gcGF0aFxyXG4gICAgICA/IHRoaXMuZm9ybUdyb3VwLmdldChwYXRoKVxyXG4gICAgICA6IHRoaXMuZm9ybUdyb3VwO1xyXG5cclxuICAgIGlmICghY29udHJvbCkgeyAgICAgIFxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvcm1Hcm91cCBkb2VzIG5vdCBjb250YWluIGEgY29udHJvbCB3aXRoIHBhdGggJyR7cGF0aH0nYCwgeyBjYXVzZTogdGhpcy5mb3JtR3JvdXAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIHRvSFRNTCh0ZXh0OiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6c2FmZUh0bWwoJHt0ZXh0fSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBjb25zdCBodG1sID0gdGhpcy5tYXJrZG93bi50b0h0bWwodGV4dCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVIdG1sKGh0bWwpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgc2FuaXRpemUoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZUh0bWwoaHRtbCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0TWltZVR5cGVzKGV4dGVuc2lvbnM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5taW1lLmdldE1pbWVUeXBlcyhleHRlbnNpb25zKTtcclxuICB9O1xyXG5cclxuICBjbGlja0J1dHRvbihjb21wb25lbnQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudC5jbGljaykge1xyXG4gICAgICB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5jbGljaywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXBvbmVudC5jb21tYW5kKSB7XHJcbiAgICAgIGNvbnN0IGNvbW1hbmQ6IENvbW1hbmRFdmVudCA9IHtcclxuICAgICAgICBuYW1lOiB0aGlzLmV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5jb21tYW5kKSxcclxuICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICBmb3JtR3JvdXA6IHRoaXMuZm9ybUdyb3VwLFxyXG4gICAgICAgIGV2ZW50OiBldmVudFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0Q29tbWFuZChjb21tYW5kKTtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZXMoY29tcG9uZW50OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGNvbXBvbmVudC52YWx1ZXMpIHtcclxuICAgICAgLy8gU3RhdGljXHJcbiAgICAgIHJldHVybiBvZihjb21wb25lbnQudmFsdWVzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBvbmVudC52YWx1ZXNLZXkpIHtcclxuICAgICAgLy8gRmllbGQgdmFsdWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZShjb21wb25lbnQudmFsdWVzS2V5KTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb21wb25lbnQudmFsdWVzRXhwcmVzc2lvbikge1xyXG4gICAgICAvLyBFeHByZXNzaW9uXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBc09ic2VydmFibGUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBOb3RoaW5nXHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50OiBhbnkpOiBHcmlkT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCBgZ2V0R3JpZE9wdGlvbnNfJHt0aGlzLmxhbmd1YWdlfWBcclxuICAgICAgLCAoKSA9PiB0aGlzLmdyaWQuZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50LCB0aGlzLmZvcm1Hcm91cCwgdGhpcy5sYW5ndWFnZSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE1vZHVsZXMoY29tcG9uZW50OiBhbnkpOiBNb2R1bGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnZ2V0R3JpZE1vZHVsZXMnLCAoKSA9PiB0aGlzLmdyaWQuZ2V0R3JpZE1vZHVsZXMoKSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcmlkRGF0YShjb21wb25lbnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoY29tcG9uZW50LmRhdGFTb3VyY2UpIHtcclxuICAgICAgLy8gRXhwcmVzc2lvblxyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5kYXRhU291cmNlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gTm90aGluZ1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkSXRlbShjb21wb25lbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXRGb3JtQXJyYXkodGhpcy5nZXRDb250cm9sRnJvbVBhdGgoY29tcG9uZW50LnBhdGgpKTtcclxuICAgIChmb3JtQXJyYXkgYXMgYW55KS5hZGRJdGVtKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGNvbXBvbmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldEZvcm1BcnJheSh0aGlzLmdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpO1xyXG4gICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVVwbG9hZFRhYmxlcyhjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnY3JlYXRlVXBsb2FkVGFibGVzJywgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInRhYmxlXCIsXHJcbiAgICAgICAgICAgICAgXCJsYXlvdXRcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IG51bGxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogdGhpcy5sb2NhbGUoVGV4dHMsICdOYW1lJyksXHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZsZXhcIjogMVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiB0aGlzLmxvY2FsZShUZXh0cywgJ1NpemUnKSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJzaXplXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiB0aGlzLmxvY2FsZShUZXh0cywgJ1R5cGUnKSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJ0eXBlXCIgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwidXJsXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA1MCxcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcIm9iamVjdFVSTFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogNTAsXHJcbiAgICAgICAgICAgICAgICAgIFwiYWxpZ25cIjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJkZWxldGVSb3dcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgXCJkYXRhU291cmNlXCI6IFwiPVwiICsgY29tcG9uZW50LmtleSxcclxuICAgICAgICAgICAgICBcImhlaWdodFwiOiAyMDAsXHJcbiAgICAgICAgICAgICAgXCJjb25kaXRpb25hbFwiOiBjb21wb25lbnQuY29uZGl0aW9uYWwsXHJcbiAgICAgICAgICAgICAgXCJkaXNhYmxlZFwiOiBjb21wb25lbnQuZGlzYWJsZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsZVVwbG9hZGVkKCRldmVudDogTmd4U2lyaW9FdmVudDxTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnQ+KSB7XHJcbiAgICBjb25zdCByZW1vdmVGaWxlID0gKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgaWYgKCRldmVudC5jb21wb25lbnQuY29udHJvbCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdC5maWx0ZXIoZiA9PiBmICE9PSBmaWxlKTtcclxuICAgICAgICAkZXZlbnQuY29tcG9uZW50LmNvbnRyb2wuc2V0VmFsdWUobmV3RmlsZXMpO1xyXG4gICAgICAgIGFkZFJlbW92ZShuZXdGaWxlcyk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0ZpbGVzO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRSZW1vdmUgPSAoZmlsZXM6IEZpbGVbXSkgPT4ge1xyXG4gICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghKCdyZW1vdmUnIGluIGZpbGUpKSB7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmlsZSwgJ3JlbW92ZScsIHtcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZW1vdmVGaWxlKHRoaXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgfSk7IFxyXG4gICAgfTtcclxuXHJcbiAgICBhZGRSZW1vdmUoJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzRmlyc3QoKSB7XHJcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAnYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXHJcbiAgICApO1xyXG5cclxuICAgIGZvciAobGV0IGVsIG9mIGZvY3VzYWJsZUVsZW1lbnRzKSB7XHJcbiAgICAgIGlmICghKGVsIGFzIEhUTUxFbGVtZW50KS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXNPYnNlcnZhYmxlKHZhbHVlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZURhdGVwaWNrZXIoKSB7XHJcbiAgICAoRGF0ZXBpY2tlci5sb2NhbGVzIGFzIGFueSlbJ2l0J10gPSB7XHJcbiAgICAgIGRheXM6IFtcclxuICAgICAgICAnRG9tZW5pY2EnLFxyXG4gICAgICAgICdMdW5lZMOsJyxcclxuICAgICAgICAnTWFydGVkw6wnLFxyXG4gICAgICAgICdNZXJjb2xlZMOsJyxcclxuICAgICAgICAnR2lvdmVkw6wnLFxyXG4gICAgICAgICdWZW5lcmTDrCcsXHJcbiAgICAgICAgJ1NhYmF0bycsXHJcbiAgICAgIF0sXHJcbiAgICAgIGRheXNNaW46IFsnRG9tJywgJ0x1bicsICdNYXInLCAnTWVyJywgJ0dpbycsICdWZW4nLCAnU2FiJ10sXHJcbiAgICAgIG1vbnRoczogW1xyXG4gICAgICAgICdHZW5uYWlvJyxcclxuICAgICAgICAnRmViYnJhaW8nLFxyXG4gICAgICAgICdNYXJ6bycsXHJcbiAgICAgICAgJ0FwcmlsZScsXHJcbiAgICAgICAgJ01hZ2dpbycsXHJcbiAgICAgICAgJ0dpdWdubycsXHJcbiAgICAgICAgJ0x1Z2xpbycsXHJcbiAgICAgICAgJ0Fnb3N0bycsXHJcbiAgICAgICAgJ1NldHRlbWJyZScsXHJcbiAgICAgICAgJ090dG9icmUnLFxyXG4gICAgICAgICdOb3ZlbWJyZScsXHJcbiAgICAgICAgJ0RpY2VtYnJlJyxcclxuICAgICAgXSxcclxuICAgICAgbW9udGhzU2hvcnQ6IFtcclxuICAgICAgICAnR2VuJyxcclxuICAgICAgICAnRmViJyxcclxuICAgICAgICAnTWFyJyxcclxuICAgICAgICAnQXByJyxcclxuICAgICAgICAnTWFnJyxcclxuICAgICAgICAnR2l1JyxcclxuICAgICAgICAnTHVnJyxcclxuICAgICAgICAnQWdvJyxcclxuICAgICAgICAnU2V0JyxcclxuICAgICAgICAnT3R0JyxcclxuICAgICAgICAnTm92JyxcclxuICAgICAgICAnRGljJyxcclxuICAgICAgXSxcclxuICAgICAgdG9kYXk6ICdPZ2dpJyxcclxuICAgICAgY2xlYXI6ICdQdWxpc2NpJyxcclxuICAgICAgZm9ybWF0OiAnZGQvbW0veXl5eScsXHJcbiAgICAgIHdlZWtTdGFydDogMVxyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGZpZWxkLXNldFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29tcG9uZW50IG9mIHJvdy5jb21wb25lbnRzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC50eXBlXCI+XHJcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiZ2V0Q2xhc3MoY29tcG9uZW50KVwiPlxyXG4gICAgICAgICAgPGRpdiBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCI+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0ZmllbGQgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0ZmllbGQnXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnByZWZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWZmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5zdWZmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dGNhc2VdPVwiY29tcG9uZW50LnRleHRDYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1heExlbmd0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dGZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzZWxlY3QgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKGNvbXBvbmVudCwgJ3BsYWNlaG9sZGVyJykgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCAqbmdJZj1cImNvbXBvbmVudC5zZWFyY2hhYmxlXCIgY2xhc3M9XCJzZWFyY2hhYmxlXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKFRleHRzLCAnVHlwZVRvU2VhcmNoJylcIj48L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19PC9uZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWdsaXN0IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFnbGlzdCdcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc011bHRpcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RhZ2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhZ2xpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+e3sgbG9jYWxlKG9wdGlvbiwgJ2xhYmVsJykgfX08L25neC1zaXJpby1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIG51bWJlciAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKGNvbXBvbmVudCwgJ3BsYWNlaG9sZGVyJykgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5wcmVmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VmZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8uc3VmZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5kZWZhdWx0VmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5pbXVtXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5taW5pbXVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4aW11bV09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQubWF4aW11bSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxEaWdpdHNdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LmRlY2ltYWxEaWdpdHMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cIm51bWJlclwiPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gZGF0ZXRpbWUgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1kYXRlcGlja2VyIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFEYXRlTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnZGF0ZUxhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGF0ZUxhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGltZSAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRpbWVwaWNrZXIgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYVRpbWVMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICd0aW1lTGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0aW1lTGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKGNvbXBvbmVudCwgJ3BsYWNlaG9sZGVyJykgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRpbWVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoZWNrYm94IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0b2dnbGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndG9nZ2xlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRvZ2dsZSBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoZWNrYm94IFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gcmFkaW8gLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hpcCdcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGlwLXJhZGlvLWdyb3VwIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXByYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoaXByYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQtY2hpcD5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hpcC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tcmFkaW8tZ3JvdXAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmFkaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1yYWRpby1idXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGUob3B0aW9uLCAnbGFiZWwnKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoZWNrbGlzdCAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrbGlzdCdcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hpcCdcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGlwLWNoZWNrYm94LWdyb3VwIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXBjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoaXBjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQtY2hpcD5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hpcC1jaGVja2JveC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3gtZ3JvdXAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGVja2JveCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoZWNrYm94LWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0YXJlYSAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgdHlwZT1cInRleHRhcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dGNhc2VdPVwiY29tcG9uZW50LnRleHRDYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1heExlbmd0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0YXJlYVwiPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gZmlsZXBpY2tlciAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGVwaWNrZXInXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1maWxlLXVwbG9hZCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZ2V0TWltZVR5cGVzKGNvbXBvbmVudC5hY2NlcHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50Lm11bHRpcGxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZVVwbG9hZGVkRXZlbnQpPVwiZmlsZVVwbG9hZGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dGaWxlbGlzdF09XCIhY29tcG9uZW50LnNob3dEZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmaWxlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZmlsZXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtYXJyb3ctdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB7eyBsb2NhbGUoVGV4dHMsICdVcGxvYWQnKSB9fVxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuc2hvd0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJjcmVhdGVVcGxvYWRUYWJsZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYW5ndWFnZV09XCJsYW5ndWFnZVwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gdGV4dCAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBbY29sbGFwc2VdPVwiY29tcG9uZW50LmNvbGxhcHNlVG9cIlxyXG4gICAgICAgICAgICAgICAgICAgW2xhbmd1YWdlXT1cImxhbmd1YWdlXCJcclxuICAgICAgICAgICAgICAgICAgICN0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLVJlc2V0IFZpZXcgQ29udGV4dC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cIjBcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC50b29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC10ZW1wbGF0ZS13cmFwcGVyICN0b29sdGlwV3JhcHBlciBbdGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCIgW2NvbnRleHRdPVwieyBjb21wb25lbnQ6IGNvbXBvbmVudCB9XCI+PC9hcHAtdGVtcGxhdGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2lyaW8tbGFiZWwtcG9wb3ZlciBmYXMgZmEtaW5mby1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyaW9Ub29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsZShUZXh0cywgJ0luZm9ybWF0aW9uJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc1BvcG92ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tVGVtcGxhdGVdPVwidG9vbHRpcFdyYXBwZXIuZ2V0VGVtcGxhdGVSZWYoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlIGxldC1jb21wb25lbnQ9XCJjb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby10b29sdGlwLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBodG1sIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHRtbC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzYW5pdGl6ZShldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICdjb250ZW50JykpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAjaHRtbFxyXG4gICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImh0bWxcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGltYWdlIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5zb3VyY2UpXCJcclxuICAgICAgICAgICAgICAgICAgIFthbHRdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FsdCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgI2ltYWdlXHJcbiAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGR5bmFtaWNsaXN0IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHluYW1pY2xpc3QnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUFycmF5TmFtZV09XCJjb21wb25lbnQucGF0aFwiIFtyZXBlYXRdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LnJlcGV0aXRpb25zKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZHluYW1pY2xpc3R0YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby10YWIgW2xlZnRBcnJvd0xhYmVsXT1cImxvY2FsZShUZXh0cywgJ1Njcm9sbExlZnQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyaWdodEFycm93TGFiZWxdPVwibG9jYWxlKFRleHRzLCAnU2Nyb2xsUmlnaHQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJDb3VudF09XCJnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkeW5hbWljbGlzdHRhYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby10YWItaXRlbSBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpICsgJyAnICsgKGkgKyAxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSA9PT0gZHluYW1pY2xpc3R0YWIuYWN0aXZlSW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuJ2dyb3VwLWNlbnRlcic6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2NlbnRlcicsXHJcbidncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYW5ndWFnZV09XCJsYW5ndWFnZVwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oY29tcG9uZW50LCBpKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAncmVtb3ZlTGFiZWwnKSB8fCBsb2NhbGUoVGV4dHMsICdSZW1vdmVJdGVtJykpIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRhYi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby10YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGFjY29yZGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWNjb3JkaW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkeW5hbWljbGlzdGFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbiBbYWNjb3JkaW9uQ291bnRdPVwiZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9scy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3RhY2NvcmRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4O1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsICNwYW5lbCBhY2NvcmRpb25QYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lclRleHRdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpICsgJyAnICsgKGkgKyAxKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwucGFuZWxJc09wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4nZ3JvdXAtdG9wJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4nZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJjb21wb25lbnQucm93c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFuZ3VhZ2VdPVwibGFuZ3VhZ2VcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oY29tcG9uZW50LCBpKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAncmVtb3ZlTGFiZWwnKSB8fCBsb2NhbGUoVGV4dHMsICdSZW1vdmVJdGVtJykpIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI2R5bmFtaWNsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0XCI+ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2dyb3VwLW91dGxpbmUnOiBjb21wb25lbnQuc2hvd091dGxpbmUgPT09IHRydWUsICdncm91cC1vdXRsaW5lLXJlcGVhdCc6IHRydWUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbidncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbidncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4nZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSArICcgJyArIChpICsgMSkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhbmd1YWdlXT1cImxhbmd1YWdlXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJyZW1vdmVJdGVtKGNvbXBvbmVudCwgaSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXRyYXNoXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3JlbW92ZUxhYmVsJykgfHwgbG9jYWxlKFRleHRzLCAnUmVtb3ZlSXRlbScpKSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cImFkZEl0ZW0oY29tcG9uZW50KVwiIGNsYXNzPVwiYWRkLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtcGx1c1wiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhZGRMYWJlbCcpIHx8IGxvY2FsZShUZXh0cywgJ0FkZEl0ZW0nKSkgfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGdyb3VwIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZ3JvdXAnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgJ2dyb3VwLW91dGxpbmUnOiBjb21wb25lbnQuc2hvd091dGxpbmUgPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAjZ3JvdXBcclxuICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChnZXRDb250cm9sRnJvbVBhdGgoY29tcG9uZW50LnBhdGgpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYW5ndWFnZV09XCJsYW5ndWFnZVwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWJsZSAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYmxlJ1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgW21vZHVsZXNdPVwiZ2V0R3JpZE1vZHVsZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93U291cmNlXT1cIihnZXRHcmlkRGF0YShjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWJsZVwiIC8+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBidXR0b24gLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrRXZlbnQpPVwiY2xpY2tCdXR0b24oY29tcG9uZW50LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZXZhbHVhdGVDb2xvcihjb21wb25lbnQuY29sb3IpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuaWNvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2J1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX1cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzZXBhcmF0b3IgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZXBhcmF0b3InXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAjc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic2VwYXJhdG9yXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzcGFjZXIgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGFjZXInXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAjc3BhY2VyXHJcbiAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic3BhY2VyXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBpZnJhbWUgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpZnJhbWUnXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50LmlkXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aWZyYW1lIFtzcmNdPVwiZXZhbHVhdGVVcmwoY29tcG9uZW50LnVybClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzEwMCUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZnJhbWVTZWN1cml0eV09XCJjb21wb25lbnQuc2VjdXJpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgI2lmcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImlmcmFtZVwiPlxyXG4gICAgICAgICAgICAgIDwvaWZyYW1lPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gYWxlcnQgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhbGVydCdcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFsZXJ0IFt0eXBlXT1cImNvbXBvbmVudC5yb2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENsb3NlXT1cImxvY2FsZShUZXh0cywgJ0Nsb3NlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FsZXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWxlcnQtbWVzc2FnZT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFsZXJ0LW1lc3NhZ2U+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWxlcnQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBub3RpY2UgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidub3RpY2UnXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1ub3RpZnkgI25vdGljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwibm90aWNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLW5vdGlmeS1ib2R5IFt0aXRsZV09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndGl0bGUnKSlcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLW5vdGlmeS1ib2R5PlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLW5vdGlmeT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHJhbmdlIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFuZ2UnXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1zbGlkZXIgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQucmFuZ2U/Lm1pbikgPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQucmFuZ2U/Lm1heCkgPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JhbmdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJyYW5nZVwiPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNsaWRlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRvb2x0aXAgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0b29sdGlwJ1wiPlxyXG4gICAgICAgICAgICAgIDxhcHAtdGVtcGxhdGUtd3JhcHBlciAjdG9vbHRpcFdyYXBwZXIgW3RlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZVwiIFtjb250ZXh0XT1cInsgY29tcG9uZW50OiBjb21wb25lbnQgfVwiPjwvYXBwLXRlbXBsYXRlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNpcmlvLWxhYmVsLXBvcG92ZXIgZmFzIGZhLWluZm8tY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHNpcmlvVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgW2hhc1BvcG92ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tVGVtcGxhdGVdPVwidG9vbHRpcFdyYXBwZXIuZ2V0VGVtcGxhdGVSZWYoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjdG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRvb2x0aXBcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Rvb2x0aXBUZW1wbGF0ZSBsZXQtY29tcG9uZW50PVwiY29tcG9uZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lyaW8tdG9vbHRpcC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY29tcG9uZW50LnRpdGxlXCIgY2xhc3M9XCJzaXJpby10b29sdGlwLWhlYWRpbmcgc2lyaW8tc3BhY2UtZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0aXRsZScpKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShsb2NhbGUoY29tcG9uZW50LCAndGV4dCcpKSlcIj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gdGFiIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFiJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiICN0YWJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xlZnRBcnJvd0xhYmVsXT1cImxvY2FsZShUZXh0cywgJ1Njcm9sbExlZnQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0QXJyb3dMYWJlbF09XCJsb2NhbGUoVGV4dHMsICdTY3JvbGxSaWdodCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJDb250cm9sPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgY29tcG9uZW50LnBhbmVsc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkaXNhYmxlRm9ybT1cIntcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZCksXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cDogZm9ybUdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoOiBwYW5lbC5wYXRoXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRhYi1pdGVtIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUocGFuZWwsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZCkgPz8gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXZhbHVhdGVDb25kaXRpb25hbChwYW5lbC5jb25kaXRpb25hbClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChnZXRDb250cm9sRnJvbVBhdGgocGFuZWwucGF0aCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJnZXRUZW1wbGF0ZShwYW5lbC50ZW1wbGF0ZSk/LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYW5ndWFnZV09XCJsYW5ndWFnZVwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRhYi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gYWNjb3JkaW9uIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWNjb3JkaW9uJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uICNhY2NvcmRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgY29tcG9uZW50LnBhbmVsc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkaXNhYmxlRm9ybT1cIntcclxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBldmFsdWF0ZUJvb2xlYW4ocGFuZWwuZGlzYWJsZWQpLFxyXG4gICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICBwYXRoOiBwYW5lbC5wYXRoXHJcbiAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tcGFuZWwgKm5nSWY9XCJldmFsdWF0ZUNvbmRpdGlvbmFsKHBhbmVsLmNvbmRpdGlvbmFsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJldmFsdWF0ZUJvb2xlYW4ocGFuZWwuZGlzYWJsZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVyVGV4dF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUocGFuZWwsICdsYWJlbCcpKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoZ2V0Q29udHJvbEZyb21QYXRoKHBhbmVsLnBhdGgpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJnZXRUZW1wbGF0ZShwYW5lbC50ZW1wbGF0ZSk/LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhbmd1YWdlXT1cImxhbmd1YWdlXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
417
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQWdELE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQzNDLG9CQUFvQixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUMzRSwyQkFBMkIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsRUFDdkcsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQzdGLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDJCQUEyQixFQUNqSCxvQkFBb0IsRUFBRSx3QkFBd0IsRUFDOUMsb0JBQW9CLEVBQUUsK0JBQStCLEVBQUUsNEJBQTRCLEVBQUUsdUJBQXVCLEVBQzVHLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUNyRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFDcEcscUJBQXFCLEVBRXhCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBZ0M5QyxNQUFNLE9BQU8sc0JBQXNCO0lBT2I7SUFDUjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQWhCSCxJQUFJLENBQXlCO0lBQzdCLFNBQVMsQ0FBYTtJQUN0QixRQUFRLENBQVU7SUFFM0IsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVkLFlBQW9CLFNBQTBCLEVBQ2xDLFFBQXlCLEVBQ3pCLElBQWlCLEVBQ2pCLGVBQXVDLEVBQ3ZDLE1BQW9CLEVBQ3BCLElBQWlCLEVBQ2pCLFFBQXlCLEVBQ3pCLFFBQXlCLEVBQ3pCLElBQWlCLEVBQ2pCLEVBQWMsRUFDZCxHQUFzQjtRQVZkLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUdsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFjO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUM1QixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDOUIsT0FBTyxPQUFPLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ3pELENBQUM7YUFDSSxDQUFDO1lBQ0osT0FBTyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQWM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBZ0IsQ0FBQztRQUNqRSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUNqRCxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTLENBQUMsU0FBYztRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFnQixDQUFDO1FBQ2pFLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFBO0lBQzFFLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBYyxFQUFFLEdBQVc7UUFDaEMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFvQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUE4QjtRQUM1QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUE2QjtRQUMxQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sUUFBUSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDbkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQW1CLEVBQUUsWUFBcUIsSUFBSTtRQUNyRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixLQUFLLEdBQUcsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNuRCxJQUFJLEtBQUssS0FBSyxPQUFPO2dCQUNuQixPQUFPLElBQUksQ0FBQztZQUNkLE1BQU0sV0FBVyxHQUFtQixDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3JHLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQXNCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMzRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxXQUFnQjtRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVyRCxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQStCO1FBQzFDLElBQUksQ0FBQyxDQUFDLE9BQU8sWUFBWSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUErQjtRQUMxQyxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFtQjtRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWTtRQUNqQixNQUFNLFFBQVEsR0FBRyxhQUFhLElBQUksR0FBRyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQSxDQUFDO0lBRUYsUUFBUSxDQUFDLElBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFBQSxDQUFDO0lBRUYsWUFBWSxDQUFDLFVBQWtCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUFBLENBQUM7SUFFRixXQUFXLENBQUMsU0FBYyxFQUFFLEtBQVU7UUFDcEMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixNQUFNLE9BQU8sR0FBaUI7Z0JBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7Z0JBQzVDLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQztZQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQWM7UUFDdEIsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsU0FBUztZQUNULE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQ0ksSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0IsY0FBYztZQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQ0ksSUFBSSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwQyxhQUFhO1lBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUNJLENBQUM7WUFDSixVQUFVO1lBQ1YsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsU0FBYztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUM5RCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxXQUFXLENBQUMsU0FBYztRQUN4QixJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QixhQUFhO1lBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFDSSxDQUFDO1lBQ0osVUFBVTtZQUNWLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQWM7UUFDcEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsU0FBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWMsRUFBRSxLQUFhO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQWM7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1lBQzFELE9BQU87Z0JBQ0w7b0JBQ0UsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLE1BQU0sRUFBRSxPQUFPOzRCQUNmLFFBQVEsRUFBRTtnQ0FDUixTQUFTLEVBQUUsSUFBSTs2QkFDaEI7NEJBQ0QsU0FBUyxFQUFFO2dDQUNUO29DQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7b0NBQ25DLEtBQUssRUFBRSxNQUFNO29DQUNiLE1BQU0sRUFBRSxDQUFDO2lDQUNWO2dDQUNEO29DQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7b0NBQ25DLEtBQUssRUFBRSxNQUFNO29DQUNiLFFBQVEsRUFBRSxTQUFTO29DQUNuQixPQUFPLEVBQUUsT0FBTztpQ0FDakI7Z0NBQ0Q7b0NBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztvQ0FDbkMsS0FBSyxFQUFFLE1BQU07aUNBQ2Q7Z0NBQ0Q7b0NBQ0UsS0FBSyxFQUFFLEtBQUs7b0NBQ1osT0FBTyxFQUFFLEVBQUU7b0NBQ1gsT0FBTyxFQUFFLEVBQUU7b0NBQ1gsT0FBTyxFQUFFLFFBQVE7b0NBQ2pCLFFBQVEsRUFBRSxXQUFXO2lDQUN0QjtnQ0FDRDtvQ0FDRSxPQUFPLEVBQUUsRUFBRTtvQ0FDWCxPQUFPLEVBQUUsRUFBRTtvQ0FDWCxPQUFPLEVBQUUsUUFBUTtvQ0FDakIsUUFBUSxFQUFFLFdBQVc7aUNBQ3RCOzZCQUNGOzRCQUNELFlBQVksRUFBRSxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUc7NEJBQ2pDLFFBQVEsRUFBRSxHQUFHOzRCQUNiLGFBQWEsRUFBRSxTQUFTLENBQUMsV0FBVzs0QkFDcEMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxRQUFRO3lCQUMvQjtxQkFDRjtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBK0M7UUFDMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUNoQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQTtRQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDbEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTt3QkFDcEMsS0FBSyxFQUFFOzRCQUNMLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQzt3QkFDRCxRQUFRLEVBQUUsS0FBSzt3QkFDZixVQUFVLEVBQUUsS0FBSztxQkFDbEIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQzlELDBFQUEwRSxDQUMzRSxDQUFDO1FBRUYsS0FBSyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBRSxFQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxFQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQVU7UUFDaEMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLG1CQUFtQjtRQUN4QixVQUFVLENBQUMsT0FBZSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ2xDLElBQUksRUFBRTtnQkFDSixVQUFVO2dCQUNWLFFBQVE7Z0JBQ1IsU0FBUztnQkFDVCxXQUFXO2dCQUNYLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxRQUFRO2FBQ1Q7WUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDMUQsTUFBTSxFQUFFO2dCQUNOLFNBQVM7Z0JBQ1QsVUFBVTtnQkFDVixPQUFPO2dCQUNQLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixRQUFRO2dCQUNSLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixXQUFXO2dCQUNYLFNBQVM7Z0JBQ1QsVUFBVTtnQkFDVixVQUFVO2FBQ1g7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7YUFDTjtZQUNELEtBQUssRUFBRSxNQUFNO1lBQ2IsS0FBSyxFQUFFLFNBQVM7WUFDaEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUFBLENBQUM7d0dBNVdTLHNCQUFzQjs0RkFBdEIsc0JBQXNCLHlJQVB0QjtZQUNULGVBQWU7WUFDZixzQkFBc0I7WUFDdEIsV0FBVztTQUNaLDBCQ3JGSCxveGdEQXF2QkEsNDVMRDdwQmEsc0JBQXNCLHlHQXhCdkIsWUFBWSxxcUJBQUUsbUJBQW1CLDQ4QkFDdkMsZ0JBQWdCLHlIQUFFLGdCQUFnQixnSkFBRSxnQkFBZ0IscUZBQUUsc0JBQXNCLHVGQUM1RSxpQkFBaUIsdURBQUUsbUJBQW1CLHlEQUFFLGVBQWUsNkdBQUUsWUFBWSw2RUFBRSxhQUFhLCtFQUNwRixpQkFBaUIsNkZBQUUsa0JBQWtCLHlGQUFFLGFBQWEsc0RBQUUsZUFBZSxzSEFBRSxhQUFhLHVHQUNwRixvQkFBb0IsbUZBQUUsbUJBQW1CLHlEQUFFLGlCQUFpQix5RkFBRSx1QkFBdUIsNkRBQ3JGLG1CQUFtQiwyWEFBRSx3QkFBd0IsZ0hBQzdDLG9CQUFvQixrVEFBRSwwQkFBMEIsaUlBQUUseUJBQXlCLDhIQUMzRSwyQkFBMkIsNFJBQUUsc0JBQXNCLHFQQUFFLHdCQUF3QixtWEFBRSx3QkFBd0IsZ1dBQ3ZHLHdCQUF3QixrU0FBRSx5QkFBeUIsc1BBQUUsaUJBQWlCLHlLQUFFLHFCQUFxQixzR0FDN0YsdUJBQXVCLGtGQUFFLDRCQUE0QixxSUFBRSw2QkFBNkIsdUVBQUUsMkJBQTJCLHFFQUNqSCxvQkFBb0IscVpBQUUsd0JBQXdCLHVhQUM5QyxvQkFBb0Isb1BBQUUsK0JBQStCLDBTQUFFLDRCQUE0Qix1U0FBRSx1QkFBdUIsbVBBQzVHLG1CQUFtQixrSUFBRSwwQkFBMEIsb0VBQUUsb0JBQW9CLGlVQUNyRSxvQkFBb0IsaUZBQUUsd0JBQXdCLHFGQUM5QyxxQkFBcUIsb09BQ3JCLHdCQUF3QixrR0FDeEIsYUFBYTs7NEZBUU4sc0JBQXNCO2tCQTlCbEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FJbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQjt3QkFDdkMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCO3dCQUM1RSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWE7d0JBQ3BGLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsYUFBYTt3QkFDcEYsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCO3dCQUNyRixtQkFBbUIsRUFBRSx3QkFBd0I7d0JBQzdDLG9CQUFvQixFQUFFLDBCQUEwQixFQUFFLHlCQUF5Qjt3QkFDM0UsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCO3dCQUN2Ryx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUI7d0JBQzdGLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDJCQUEyQjt3QkFDakgsb0JBQW9CLEVBQUUsd0JBQXdCO3dCQUM5QyxvQkFBb0IsRUFBRSwrQkFBK0IsRUFBRSw0QkFBNEIsRUFBRSx1QkFBdUI7d0JBQzVHLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQjt3QkFDckUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCO3dCQUNwRyxxQkFBcUI7d0JBQ3JCLHdCQUF3Qjt3QkFDeEIsYUFBYSxDQUFDLGFBQ1A7d0JBQ1QsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLFdBQVc7cUJBQ1osaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTtxWEFHNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElEeW5hbWljRmllbGRzQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU2FmZUh0bWwsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBEYXRlcGlja2VyIH0gZnJvbSAndmFuaWxsYWpzLWRhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBTYW5pdGl6ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYW5pdGl6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFya2Rvd25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFya2Rvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1pbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWltZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlLCBDb21tYW5kRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2Vha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy93ZWFrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnV0dG9uQ29sb3JzIH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcbmltcG9ydCB7IEFkb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Fkb3JuZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGlzYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzYWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBEaXNwbGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kaXNwbGF5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlcGVhdERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmVwZWF0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZyYW1lU2VjdXJpdHlEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZyYW1lc2VjdXJpdHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Ryb3Bkb3duLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRhYkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGFiLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFjY29yZGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYWNjb3JkaW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUmVnaXN0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlZ2lzdGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFVwZGF0ZUJsdXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3VwZGF0ZWJsdXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBOdW1iZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL251bWJlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERpc2FibGVGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kaXNhYmxlZm9ybS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUYWJDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90YWJjb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbGxhcHNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb2xsYXBzZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYWNjb3JkaW9ucGFuZWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGVtcGxhdGVXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL3RlbXBsYXRlLXdyYXBwZXIvdGVtcGxhdGUtd3JhcHBlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNpcmlvSW5wdXRDb21wb25lbnQsIFNpcmlvVmFsaWRhdGlvbkRpcmVjdGl2ZVxyXG4gICwgU2lyaW9TZWxlY3RDb21wb25lbnQsIFNpcmlvU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBTaXJpb1NlbGVjdFBhbmVsQ29tcG9uZW50XHJcbiAgLCBTaXJpb0NoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hlY2tib3hDb21wb25lbnQsIFNpcmlvRGF0ZXBpY2tlckNvbXBvbmVudCwgU2lyaW9UaW1lcGlja2VyQ29tcG9uZW50XHJcbiAgLCBTaXJpb1JhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvUmFkaW9CdXR0b25Db21wb25lbnQsIFNpcmlvVGFiQ29tcG9uZW50LCBTaXJpb1RhYkl0ZW1Db21wb25lbnRcclxuICAsIFNpcmlvQWNjb3JkaW9uQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvblBhbmVsQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25Cb2R5Q29tcG9uZW50XHJcbiAgLCBTaXJpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9GaWxlVXBsb2FkQ29tcG9uZW50XHJcbiAgLCBTaXJpb1RvZ2dsZUNvbXBvbmVudCwgU2lyaW9DaGlwQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGlwUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9JbnB1dENoaXBDb21wb25lbnRcclxuICAsIFNpcmlvQWxlcnRDb21wb25lbnQsIFNpcmlvQWxlcnRNZXNzYWdlQ29tcG9uZW50LCBTaXJpb1NsaWRlckNvbXBvbmVudFxyXG4gICwgU2lyaW9Ob3RpZnlDb21wb25lbnQsIFNpcmlvTm90aWZ5Qm9keUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlBY3Rpb25Db21wb25lbnQsIFNpcmlvTm90aWZ5TGlua0NvbXBvbmVudFxyXG4gICwgU2lyaW9Ub29sdGlwRGlyZWN0aXZlXHJcbiAgLCBOZ3hTaXJpb0V2ZW50XHJcbn0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcblxyXG5pbXBvcnQgeyBBZ0dyaWRBbmd1bGFyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcclxuaW1wb3J0IHsgTW9kdWxlLCBHcmlkT3B0aW9ucyB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuXHJcbmltcG9ydCB7IFRleHRzIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsZSc7XHJcbmltcG9ydCB7IGxvY2FsaXplIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsaXplJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWR5bmFtaWMtZmllbGRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmNzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZVxyXG4gICAgLCBBZG9ybmVyRGlyZWN0aXZlLCBEaXNhYmxlRGlyZWN0aXZlLCBEaXNwbGF5RGlyZWN0aXZlLCBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlXHJcbiAgICAsIERyb3Bkb3duRGlyZWN0aXZlLCBVcGRhdGVCbHVyRGlyZWN0aXZlLCBSZXBlYXREaXJlY3RpdmUsIFRhYkRpcmVjdGl2ZSwgR3JpZERpcmVjdGl2ZVxyXG4gICAgLCBSZWdpc3RlckRpcmVjdGl2ZSwgQWNjb3JkaW9uRGlyZWN0aXZlLCBEYXRlRGlyZWN0aXZlLCBOdW1iZXJEaXJlY3RpdmUsIFRleHREaXJlY3RpdmVcclxuICAgICwgRGlzYWJsZUZvcm1EaXJlY3RpdmUsIFRhYkNvbnRyb2xEaXJlY3RpdmUsIENvbGxhcHNlRGlyZWN0aXZlLCBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZVxyXG4gICAgLCBTaXJpb0lucHV0Q29tcG9uZW50LCBTaXJpb1ZhbGlkYXRpb25EaXJlY3RpdmVcclxuICAgICwgU2lyaW9TZWxlY3RDb21wb25lbnQsIFNpcmlvU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBTaXJpb1NlbGVjdFBhbmVsQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGVja2JveENvbXBvbmVudCwgU2lyaW9EYXRlcGlja2VyQ29tcG9uZW50LCBTaXJpb1RpbWVwaWNrZXJDb21wb25lbnRcclxuICAgICwgU2lyaW9SYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb1JhZGlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb1RhYkNvbXBvbmVudCwgU2lyaW9UYWJJdGVtQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQWNjb3JkaW9uQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvblBhbmVsQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25Cb2R5Q29tcG9uZW50XHJcbiAgICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnRcclxuICAgICwgU2lyaW9Ub2dnbGVDb21wb25lbnQsIFNpcmlvQ2hpcENoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hpcFJhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvSW5wdXRDaGlwQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQWxlcnRDb21wb25lbnQsIFNpcmlvQWxlcnRNZXNzYWdlQ29tcG9uZW50LCBTaXJpb1NsaWRlckNvbXBvbmVudFxyXG4gICAgLCBTaXJpb05vdGlmeUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlCb2R5Q29tcG9uZW50LCBTaXJpb05vdGlmeUFjdGlvbkNvbXBvbmVudCwgU2lyaW9Ob3RpZnlMaW5rQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvVG9vbHRpcERpcmVjdGl2ZVxyXG4gICAgLCBUZW1wbGF0ZVdyYXBwZXJDb21wb25lbnRcclxuICAgICwgQWdHcmlkQW5ndWxhcl0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBSZWdpc3RlclNlcnZpY2UsXHJcbiAgICBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlLFxyXG4gICAgR3JpZFNlcnZpY2VcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIElEeW5hbWljRmllbGRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBsYW5ndWFnZSE6IHN0cmluZztcclxuXHJcbiAgVGV4dHMgPSBUZXh0cztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IFNhbml0aXplU2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1hcmtkb3duOiBNYXJrZG93blNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtaW1lOiBNaW1lU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgd2VhazogV2Vha1NlcnZpY2VcclxuICAgICwgcHJpdmF0ZSByZWdpc3RlcjogUmVnaXN0ZXJTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWV0YWRhdGE6IE1ldGFkYXRhU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGdyaWQ6IEdyaWRTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcclxuICAgICwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKVxyXG4gIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyAgICBcclxuICAgIHRoaXMuY29uZmlndXJlRGF0ZXBpY2tlcigpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXNGaXJzdCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZWdpc3RlcigpOiBSZWdpc3RlclNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXI7XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzcyhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb2xIb3N0ID0gXCJjb2wtaG9zdCBcIjtcclxuICAgIGlmIChjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zKSB7XHJcbiAgICAgIHJldHVybiBjb2xIb3N0ICsgXCJjb2wtbWQtXCIgKyBjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb2xIb3N0ICsgXCJjb2xcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRleHRGZWVkYmFjayhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgcmV0dXJuICFjb250cm9sIHx8IGNvbnRyb2wudmFsaWQgfHwgIWNvbnRyb2wuZXJyb3JzXHJcbiAgICAgID8gJydcclxuICAgICAgOiBjb250cm9sLmVycm9yc1snbWVzc2FnZSddO1xyXG4gIH1cclxuXHJcbiAgaXNXYXJuaW5nKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgcmV0dXJuIChjb250cm9sICYmIGNvbnRyb2wuZXJyb3JzICYmIGNvbnRyb2wuZXJyb3JzWyd3YXJuaW5nJ10pIHx8IGZhbHNlXHJcbiAgfVxyXG5cclxuICBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVN0cmluZyh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTsgICAgXHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUJvb2xlYW4odmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVOdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZU51bWJlcih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVVcmwodmFsdWU6IHN0cmluZyB8IG51bGwpOiBTYWZlUmVzb3VyY2VVcmwge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpzYWZlVXJsKCR7dXJsfSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemVTYWZlVXJsKHVybCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVGVtcGxhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlVGVtcGxhdGUodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlKHRleHQ6IHN0cmluZyB8IG51bGwsIGNhY2hlYWJsZTogYm9vbGVhbiA9IHRydWUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKHRoaXMuZm9ybUdyb3VwLCB0ZXh0LCB7IGNhY2hlYWJsZTogY2FjaGVhYmxlIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb2xvcih2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IEJ1dHRvbkNvbG9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmV2YWx1YXRlU3RyaW5nKHZhbHVlKTtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpidXR0b25Db2xvcigke2NvbG9yfSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBpZiAoY29sb3IgPT09IFwiZ2hvc3RcIilcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgY29uc3QgdmFsaWRDb2xvcnM6IEJ1dHRvbkNvbG9yc1tdID0gWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICd0ZXJ0aWFyeScsICd0ZXJ0aWFyeS1saWdodCcsICdkYW5nZXInXTtcclxuICAgICAgcmV0dXJuIHZhbGlkQ29sb3JzLmluY2x1ZGVzKGNvbG9yIGFzIEJ1dHRvbkNvbG9ycykgPyAoY29sb3IgYXMgQnV0dG9uQ29sb3JzKSA6ICdwcmltYXJ5JztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb25kaXRpb25hbChjb25kaXRpb25hbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBoaWRlID0gdGhpcy5ldmFsdWF0ZUJvb2xlYW4oY29uZGl0aW9uYWw/LmhpZGUpO1xyXG4gICAgY29uc3Qgc2hvdyA9IHRoaXMuZXZhbHVhdGVCb29sZWFuKGNvbmRpdGlvbmFsPy5zaG93KTtcclxuICAgIFxyXG4gICAgcmV0dXJuICEoaGlkZSA9PT0gdHJ1ZSB8fCBzaG93ID09PSBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLmdldEZvcm1CeU5hbWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUdyb3VwKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBGb3JtR3JvdXAge1xyXG4gICAgaWYgKCEoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250cm9sIGlzIG5vdCBhIEZvcm1Hcm91cCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCk6IEZvcm1BcnJheSB7XHJcbiAgICBpZiAoIShjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRyb2wgaXMgbm90IGEgRm9ybUFycmF5Jyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldENvbnRyb2xGcm9tUGF0aChwYXRoOiBzdHJpbmcgfCBudWxsKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb250cm9sID0gcGF0aFxyXG4gICAgICA/IHRoaXMuZm9ybUdyb3VwLmdldChwYXRoKVxyXG4gICAgICA6IHRoaXMuZm9ybUdyb3VwO1xyXG5cclxuICAgIGlmICghY29udHJvbCkgeyAgICAgIFxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvcm1Hcm91cCBkb2VzIG5vdCBjb250YWluIGEgY29udHJvbCB3aXRoIHBhdGggJyR7cGF0aH0nYCwgeyBjYXVzZTogdGhpcy5mb3JtR3JvdXAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIHRvSFRNTCh0ZXh0OiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6c2FmZUh0bWwoJHt0ZXh0fSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBjb25zdCBodG1sID0gdGhpcy5tYXJrZG93bi50b0h0bWwodGV4dCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVIdG1sKGh0bWwpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgc2FuaXRpemUoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZUh0bWwoaHRtbCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0TWltZVR5cGVzKGV4dGVuc2lvbnM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5taW1lLmdldE1pbWVUeXBlcyhleHRlbnNpb25zKTtcclxuICB9O1xyXG5cclxuICBjbGlja0J1dHRvbihjb21wb25lbnQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudC5jbGljaykge1xyXG4gICAgICB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5jbGljaywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXBvbmVudC5jb21tYW5kKSB7XHJcbiAgICAgIGNvbnN0IGNvbW1hbmQ6IENvbW1hbmRFdmVudCA9IHtcclxuICAgICAgICBuYW1lOiB0aGlzLmV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5jb21tYW5kKSxcclxuICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICBmb3JtR3JvdXA6IHRoaXMuZm9ybUdyb3VwLFxyXG4gICAgICAgIGV2ZW50OiBldmVudFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0Q29tbWFuZChjb21tYW5kKTtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZXMoY29tcG9uZW50OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGNvbXBvbmVudC52YWx1ZXMpIHtcclxuICAgICAgLy8gU3RhdGljXHJcbiAgICAgIHJldHVybiBvZihjb21wb25lbnQudmFsdWVzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBvbmVudC52YWx1ZXNLZXkpIHtcclxuICAgICAgLy8gRmllbGQgdmFsdWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZShjb21wb25lbnQudmFsdWVzS2V5KTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb21wb25lbnQudmFsdWVzRXhwcmVzc2lvbikge1xyXG4gICAgICAvLyBFeHByZXNzaW9uXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBc09ic2VydmFibGUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBOb3RoaW5nXHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50OiBhbnkpOiBHcmlkT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCBgZ2V0R3JpZE9wdGlvbnNfJHt0aGlzLmxhbmd1YWdlfWBcclxuICAgICAgLCAoKSA9PiB0aGlzLmdyaWQuZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50LCB0aGlzLmZvcm1Hcm91cCwgdGhpcy5sYW5ndWFnZSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE1vZHVsZXMoY29tcG9uZW50OiBhbnkpOiBNb2R1bGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnZ2V0R3JpZE1vZHVsZXMnLCAoKSA9PiB0aGlzLmdyaWQuZ2V0R3JpZE1vZHVsZXMoKSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcmlkRGF0YShjb21wb25lbnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoY29tcG9uZW50LmRhdGFTb3VyY2UpIHtcclxuICAgICAgLy8gRXhwcmVzc2lvblxyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5kYXRhU291cmNlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gTm90aGluZ1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkSXRlbShjb21wb25lbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXRGb3JtQXJyYXkodGhpcy5nZXRDb250cm9sRnJvbVBhdGgoY29tcG9uZW50LnBhdGgpKTtcclxuICAgIChmb3JtQXJyYXkgYXMgYW55KS5hZGRJdGVtKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGNvbXBvbmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldEZvcm1BcnJheSh0aGlzLmdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpO1xyXG4gICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVVwbG9hZFRhYmxlcyhjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnY3JlYXRlVXBsb2FkVGFibGVzJywgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInRhYmxlXCIsXHJcbiAgICAgICAgICAgICAgXCJsYXlvdXRcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IG51bGxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogdGhpcy5sb2NhbGUoVGV4dHMsICdOYW1lJyksXHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZsZXhcIjogMVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiB0aGlzLmxvY2FsZShUZXh0cywgJ1NpemUnKSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJzaXplXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiB0aGlzLmxvY2FsZShUZXh0cywgJ1R5cGUnKSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJ0eXBlXCIgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwidXJsXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA1MCxcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcIm9iamVjdFVSTFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogNTAsXHJcbiAgICAgICAgICAgICAgICAgIFwiYWxpZ25cIjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJkZWxldGVSb3dcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgXCJkYXRhU291cmNlXCI6IFwiPVwiICsgY29tcG9uZW50LmtleSxcclxuICAgICAgICAgICAgICBcImhlaWdodFwiOiAyMDAsXHJcbiAgICAgICAgICAgICAgXCJjb25kaXRpb25hbFwiOiBjb21wb25lbnQuY29uZGl0aW9uYWwsXHJcbiAgICAgICAgICAgICAgXCJkaXNhYmxlZFwiOiBjb21wb25lbnQuZGlzYWJsZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsZVVwbG9hZGVkKCRldmVudDogTmd4U2lyaW9FdmVudDxTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnQ+KSB7XHJcbiAgICBjb25zdCByZW1vdmVGaWxlID0gKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgaWYgKCRldmVudC5jb21wb25lbnQuY29udHJvbCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdC5maWx0ZXIoZiA9PiBmICE9PSBmaWxlKTtcclxuICAgICAgICAkZXZlbnQuY29tcG9uZW50LmNvbnRyb2wuc2V0VmFsdWUobmV3RmlsZXMpO1xyXG4gICAgICAgIGFkZFJlbW92ZShuZXdGaWxlcyk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0ZpbGVzO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRSZW1vdmUgPSAoZmlsZXM6IEZpbGVbXSkgPT4ge1xyXG4gICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghKCdyZW1vdmUnIGluIGZpbGUpKSB7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmlsZSwgJ3JlbW92ZScsIHtcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZW1vdmVGaWxlKHRoaXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgfSk7IFxyXG4gICAgfTtcclxuXHJcbiAgICBhZGRSZW1vdmUoJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzRmlyc3QoKSB7XHJcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAnYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXHJcbiAgICApO1xyXG5cclxuICAgIGZvciAobGV0IGVsIG9mIGZvY3VzYWJsZUVsZW1lbnRzKSB7XHJcbiAgICAgIGlmICghKGVsIGFzIEhUTUxFbGVtZW50KS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXNPYnNlcnZhYmxlKHZhbHVlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZURhdGVwaWNrZXIoKSB7XHJcbiAgICAoRGF0ZXBpY2tlci5sb2NhbGVzIGFzIGFueSlbJ2l0J10gPSB7XHJcbiAgICAgIGRheXM6IFtcclxuICAgICAgICAnRG9tZW5pY2EnLFxyXG4gICAgICAgICdMdW5lZMOsJyxcclxuICAgICAgICAnTWFydGVkw6wnLFxyXG4gICAgICAgICdNZXJjb2xlZMOsJyxcclxuICAgICAgICAnR2lvdmVkw6wnLFxyXG4gICAgICAgICdWZW5lcmTDrCcsXHJcbiAgICAgICAgJ1NhYmF0bycsXHJcbiAgICAgIF0sXHJcbiAgICAgIGRheXNNaW46IFsnRG9tJywgJ0x1bicsICdNYXInLCAnTWVyJywgJ0dpbycsICdWZW4nLCAnU2FiJ10sXHJcbiAgICAgIG1vbnRoczogW1xyXG4gICAgICAgICdHZW5uYWlvJyxcclxuICAgICAgICAnRmViYnJhaW8nLFxyXG4gICAgICAgICdNYXJ6bycsXHJcbiAgICAgICAgJ0FwcmlsZScsXHJcbiAgICAgICAgJ01hZ2dpbycsXHJcbiAgICAgICAgJ0dpdWdubycsXHJcbiAgICAgICAgJ0x1Z2xpbycsXHJcbiAgICAgICAgJ0Fnb3N0bycsXHJcbiAgICAgICAgJ1NldHRlbWJyZScsXHJcbiAgICAgICAgJ090dG9icmUnLFxyXG4gICAgICAgICdOb3ZlbWJyZScsXHJcbiAgICAgICAgJ0RpY2VtYnJlJyxcclxuICAgICAgXSxcclxuICAgICAgbW9udGhzU2hvcnQ6IFtcclxuICAgICAgICAnR2VuJyxcclxuICAgICAgICAnRmViJyxcclxuICAgICAgICAnTWFyJyxcclxuICAgICAgICAnQXByJyxcclxuICAgICAgICAnTWFnJyxcclxuICAgICAgICAnR2l1JyxcclxuICAgICAgICAnTHVnJyxcclxuICAgICAgICAnQWdvJyxcclxuICAgICAgICAnU2V0JyxcclxuICAgICAgICAnT3R0JyxcclxuICAgICAgICAnTm92JyxcclxuICAgICAgICAnRGljJyxcclxuICAgICAgXSxcclxuICAgICAgdG9kYXk6ICdPZ2dpJyxcclxuICAgICAgY2xlYXI6ICdQdWxpc2NpJyxcclxuICAgICAgZm9ybWF0OiAnZGQvbW0veXl5eScsXHJcbiAgICAgIHdlZWtTdGFydDogMVxyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGZpZWxkLXNldFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29tcG9uZW50IG9mIHJvdy5jb21wb25lbnRzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC50eXBlXCI+XHJcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiZ2V0Q2xhc3MoY29tcG9uZW50KVwiPlxyXG4gICAgICAgICAgPGRpdiBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCI+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0ZmllbGQgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0ZmllbGQnXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnByZWZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWZmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5zdWZmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dGNhc2VdPVwiY29tcG9uZW50LnRleHRDYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1heExlbmd0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dGZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzZWxlY3QgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKGNvbXBvbmVudCwgJ3BsYWNlaG9sZGVyJykgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCAqbmdJZj1cImNvbXBvbmVudC5zZWFyY2hhYmxlXCIgY2xhc3M9XCJzZWFyY2hhYmxlXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKFRleHRzLCAnVHlwZVRvU2VhcmNoJylcIj48L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19PC9uZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWdsaXN0IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFnbGlzdCdcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc011bHRpcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RhZ2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhZ2xpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+e3sgbG9jYWxlKG9wdGlvbiwgJ2xhYmVsJykgfX08L25neC1zaXJpby1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIG51bWJlciAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKGNvbXBvbmVudCwgJ3BsYWNlaG9sZGVyJykgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5wcmVmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VmZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8uc3VmZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5kZWZhdWx0VmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5pbXVtXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5taW5pbXVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4aW11bV09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQubWF4aW11bSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxEaWdpdHNdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LmRlY2ltYWxEaWdpdHMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cIm51bWJlclwiPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gZGF0ZXRpbWUgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1kYXRlcGlja2VyIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFEYXRlTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnZGF0ZUxhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGF0ZUxhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGltZSAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRpbWVwaWNrZXIgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYVRpbWVMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICd0aW1lTGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0aW1lTGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKGNvbXBvbmVudCwgJ3BsYWNlaG9sZGVyJykgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRpbWVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoZWNrYm94IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0b2dnbGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndG9nZ2xlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRvZ2dsZSBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoZWNrYm94IFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gcmFkaW8gLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hpcCdcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGlwLXJhZGlvLWdyb3VwIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXByYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoaXByYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQtY2hpcD5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hpcC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tcmFkaW8tZ3JvdXAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmFkaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1yYWRpby1idXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGUob3B0aW9uLCAnbGFiZWwnKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoZWNrbGlzdCAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrbGlzdCdcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hpcCdcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGlwLWNoZWNrYm94LWdyb3VwIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXBjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoaXBjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQtY2hpcD5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hpcC1jaGVja2JveC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3gtZ3JvdXAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGVja2JveCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoZWNrYm94LWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0YXJlYSAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgdHlwZT1cInRleHRhcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dGNhc2VdPVwiY29tcG9uZW50LnRleHRDYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1heExlbmd0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0YXJlYVwiPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gZmlsZXBpY2tlciAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGVwaWNrZXInXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1maWxlLXVwbG9hZCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZ2V0TWltZVR5cGVzKGNvbXBvbmVudC5hY2NlcHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50Lm11bHRpcGxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZVVwbG9hZGVkRXZlbnQpPVwiZmlsZVVwbG9hZGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dGaWxlbGlzdF09XCIhY29tcG9uZW50LnNob3dEZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmaWxlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZmlsZXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtYXJyb3ctdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB7eyBsb2NhbGUoVGV4dHMsICdVcGxvYWQnKSB9fVxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuc2hvd0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJjcmVhdGVVcGxvYWRUYWJsZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYW5ndWFnZV09XCJsYW5ndWFnZVwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gdGV4dCAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBbY29sbGFwc2VdPVwiY29tcG9uZW50LmNvbGxhcHNlVG9cIlxyXG4gICAgICAgICAgICAgICAgICAgW2xhbmd1YWdlXT1cImxhbmd1YWdlXCJcclxuICAgICAgICAgICAgICAgICAgICN0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLVJlc2V0IFZpZXcgQ29udGV4dC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cIjBcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC50b29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC10ZW1wbGF0ZS13cmFwcGVyICN0b29sdGlwV3JhcHBlciBbdGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCIgW2NvbnRleHRdPVwieyBjb21wb25lbnQ6IGNvbXBvbmVudCB9XCI+PC9hcHAtdGVtcGxhdGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2lyaW8tbGFiZWwtcG9wb3ZlciBmYXMgZmEtaW5mby1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyaW9Ub29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsZShUZXh0cywgJ0luZm9ybWF0aW9uJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc1BvcG92ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tVGVtcGxhdGVdPVwidG9vbHRpcFdyYXBwZXIuZ2V0VGVtcGxhdGVSZWYoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlIGxldC1jb21wb25lbnQ9XCJjb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby10b29sdGlwLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBodG1sIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHRtbC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzYW5pdGl6ZShldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICdjb250ZW50JykpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAjaHRtbFxyXG4gICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImh0bWxcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGltYWdlIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5zb3VyY2UpXCJcclxuICAgICAgICAgICAgICAgICAgIFthbHRdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FsdCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgI2ltYWdlXHJcbiAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGR5bmFtaWNsaXN0IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHluYW1pY2xpc3QnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUFycmF5TmFtZV09XCJjb21wb25lbnQucGF0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVwZWF0XT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yZXBldGl0aW9ucylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93QWRkUmVtb3ZlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuYWxsb3dBZGRSZW1vdmUpXCI+XHJcbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNvbXBvbmVudC5kZXNjcmlwdGlvblwiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKSB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGFiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0dGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiIFtsZWZ0QXJyb3dMYWJlbF09XCJsb2NhbGUoVGV4dHMsICdTY3JvbGxMZWZ0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmlnaHRBcnJvd0xhYmVsXT1cImxvY2FsZShUZXh0cywgJ1Njcm9sbFJpZ2h0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiQ291bnRdPVwiZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9scy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3R0YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4O1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiLWl0ZW0gW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSArICcgJyArIChpICsgMSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkgPT09IGR5bmFtaWNsaXN0dGFiLmFjdGl2ZUluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbidncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbidncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4nZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFuZ3VhZ2VdPVwibGFuZ3VhZ2VcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJyZW1vdmVJdGVtKGNvbXBvbmVudCwgaSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXRyYXNoXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3JlbW92ZUxhYmVsJykgfHwgbG9jYWxlKFRleHRzLCAnUmVtb3ZlSXRlbScpKSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby10YWItaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBhY2NvcmRpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FjY29yZGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZHluYW1pY2xpc3RhY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24gW2FjY29yZGlvbkNvdW50XT1cImdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2R5bmFtaWNsaXN0YWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbCAjcGFuZWwgYWNjb3JkaW9uUGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSArICcgJyArIChpICsgMSlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsLnBhbmVsSXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuJ2dyb3VwLWNlbnRlcic6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2NlbnRlcicsXHJcbidncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhbmd1YWdlXT1cImxhbmd1YWdlXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJyZW1vdmVJdGVtKGNvbXBvbmVudCwgaSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXRyYXNoXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3JlbW92ZUxhYmVsJykgfHwgbG9jYWxlKFRleHRzLCAnUmVtb3ZlSXRlbScpKSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGVmYXVsdCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNkeW5hbWljbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkeW5hbWljbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydncm91cC1vdXRsaW5lJzogY29tcG9uZW50LnNob3dPdXRsaW5lID09PSB0cnVlLCAnZ3JvdXAtb3V0bGluZS1yZXBlYXQnOiB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4nZ3JvdXAtdG9wJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4nZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgKyAnICcgKyAoaSArIDEpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYW5ndWFnZV09XCJsYW5ndWFnZVwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlSXRlbShjb21wb25lbnQsIGkpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdyZW1vdmVMYWJlbCcpIHx8IGxvY2FsZShUZXh0cywgJ1JlbW92ZUl0ZW0nKSkgfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwiYWRkSXRlbShjb21wb25lbnQpXCIgY2xhc3M9XCJhZGQtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS1wbHVzXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FkZExhYmVsJykgfHwgbG9jYWxlKFRleHRzLCAnQWRkSXRlbScpKSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gZ3JvdXAgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtb3V0bGluZSc6IGNvbXBvbmVudC5zaG93T3V0bGluZSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtdG9wJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNncm91cFxyXG4gICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJjb21wb25lbnQucm93c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhbmd1YWdlXT1cImxhbmd1YWdlXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRhYmxlIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGFnLWdyaWQtYW5ndWxhciBbbW9kdWxlc109XCJnZXRHcmlkTW9kdWxlcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncmlkT3B0aW9uc109XCJnZXRHcmlkT3B0aW9ucyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dTb3VyY2VdPVwiKGdldEdyaWREYXRhKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhYmxlXCIgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2tFdmVudCk9XCJjbGlja0J1dHRvbihjb21wb25lbnQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJldmFsdWF0ZUNvbG9yKGNvbXBvbmVudC5jb2xvcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5pY29uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fVxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHNlcGFyYXRvciAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlcGFyYXRvcidcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICNzZXBhcmF0b3JcclxuICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzZXBhcmF0b3JcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHNwYWNlciAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NwYWNlcidcIj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICNzcGFjZXJcclxuICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzcGFjZXJcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGlmcmFtZSAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2lmcmFtZSdcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjb21wb25lbnQuaWRcIj57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpZnJhbWUgW3NyY109XCJldmFsdWF0ZVVybChjb21wb25lbnQudXJsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCInMTAwJSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtmcmFtZVNlY3VyaXR5XT1cImNvbXBvbmVudC5zZWN1cml0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjaWZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiaWZyYW1lXCI+XHJcbiAgICAgICAgICAgICAgPC9pZnJhbWU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBhbGVydCAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FsZXJ0J1wiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWxlcnQgW3R5cGVdPVwiY29tcG9uZW50LnJvbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ2xvc2VdPVwibG9jYWxlKFRleHRzLCAnQ2xvc2UnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYWxlcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJhbGVydFwiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1hbGVydC1tZXNzYWdlPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUobG9jYWxlKGNvbXBvbmVudCwgJ3RleHQnKSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWxlcnQtbWVzc2FnZT5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1hbGVydD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAjcmVnaW9uIG5vdGljZSAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ25vdGljZSdcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLW5vdGlmeSAjbm90aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJub3RpY2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tbm90aWZ5LWJvZHkgW3RpdGxlXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0aXRsZScpKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUobG9jYWxlKGNvbXBvbmVudCwgJ3RleHQnKSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tbm90aWZ5LWJvZHk+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tbm90aWZ5PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gcmFuZ2UgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYW5nZSdcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNsaWRlciBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yYW5nZT8ubWluKSA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yYW5nZT8ubWF4KSA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmFuZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInJhbmdlXCI+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2xpZGVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8IS0tICNyZWdpb24gdG9vbHRpcCAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Rvb2x0aXAnXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC10ZW1wbGF0ZS13cmFwcGVyICN0b29sdGlwV3JhcHBlciBbdGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCIgW2NvbnRleHRdPVwieyBjb21wb25lbnQ6IGNvbXBvbmVudCB9XCI+PC9hcHAtdGVtcGxhdGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2lyaW8tbGFiZWwtcG9wb3ZlciBmYXMgZmEtaW5mby1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc2lyaW9Ub29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaGFzUG9wb3Zlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21UZW1wbGF0ZV09XCJ0b29sdGlwV3JhcHBlci5nZXRUZW1wbGF0ZVJlZigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICN0b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidG9vbHRpcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlIGxldC1jb21wb25lbnQ9XCJjb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby10b29sdGlwLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjb21wb25lbnQudGl0bGVcIiBjbGFzcz1cInNpcmlvLXRvb2x0aXAtaGVhZGluZyBzaXJpby1zcGFjZS1kb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3RpdGxlJykpIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWIgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWInXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby10YWIgI3RhYlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGVmdEFycm93TGFiZWxdPVwibG9jYWxlKFRleHRzLCAnU2Nyb2xsTGVmdCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmlnaHRBcnJvd0xhYmVsXT1cImxvY2FsZShUZXh0cywgJ1Njcm9sbFJpZ2h0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBjb21wb25lbnQucGFuZWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRpc2FibGVGb3JtPVwie1xyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZXZhbHVhdGVCb29sZWFuKHBhbmVsLmRpc2FibGVkKSxcclxuICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGg6IHBhbmVsLnBhdGhcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiLWl0ZW0gW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShwYW5lbCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZXZhbHVhdGVCb29sZWFuKHBhbmVsLmRpc2FibGVkKSA/PyBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJldmFsdWF0ZUNvbmRpdGlvbmFsKHBhbmVsLmNvbmRpdGlvbmFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGdldENvbnRyb2xGcm9tUGF0aChwYW5lbC5wYXRoKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImdldFRlbXBsYXRlKHBhbmVsLnRlbXBsYXRlKT8ucm93c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhbmd1YWdlXT1cImxhbmd1YWdlXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby10YWI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBhY2NvcmRpb24gLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhY2NvcmRpb24nXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24gI2FjY29yZGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiYWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBjb21wb25lbnQucGFuZWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRpc2FibGVGb3JtPVwie1xyXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZCksXHJcbiAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IGZvcm1Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhbmVsLnBhdGhcclxuICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbCAqbmdJZj1cImV2YWx1YXRlQ29uZGl0aW9uYWwocGFuZWwuY29uZGl0aW9uYWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShwYW5lbCwgJ2xhYmVsJykpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChnZXRDb250cm9sRnJvbVBhdGgocGFuZWwucGF0aCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImdldFRlbXBsYXRlKHBhbmVsLnRlbXBsYXRlKT8ucm93c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFuZ3VhZ2VdPVwibGFuZ3VhZ2VcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=