@alauda-fe/common
Version:
Alauda frontend team common codes.
297 lines • 38.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ButtonModule, FormModule, IconModule, InputModule } from '@alauda/ui';
import { NgIf, NgTemplateOutlet } from '@angular/common';
import { ChangeDetectionStrategy, Component, Input, TemplateRef, } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms';
import { sortBy } from 'lodash-es';
import { ValueHook } from '../../core/public-api';
import { ValidateRowDuplicateService } from '../../core/services/form-row-duplicate/form-row-duplicate.service';
import { EffectDirectiveModule } from '../../effect-directive/module';
import { ErrorsMapperModule } from '../../form/public-api';
import { TranslateModule } from '../../translate/public-api';
import { BaseStringMapFormComponent } from '../base-string-map-form.component';
import { ArrayFormTableComponent } from '../form/component';
import { ArrayFormTableModule } from '../form/module';
import * as i0 from "@angular/core";
import * as i1 from "../form/component";
import * as i2 from "@angular/forms";
import * as i3 from "@alauda/ui";
import * as i4 from "../../translate/translate.pipe";
import * as i5 from "../../form/errors-mapper/errors-mapper-component/component";
import * as i6 from "../../effect-directive/e2e-attribute-binding.directive";
function KeyValueFormTableComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "th", 6);
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(4, "th", 7);
i0.ɵɵtext(5);
i0.ɵɵpipe(6, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "key"));
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 4, "value"));
} }
function KeyValueFormTableComponent_ng_container_2_ng_container_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtext(1);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const control_r3 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", control_r3.get("0").value, " ");
} }
function KeyValueFormTableComponent_ng_container_2_input_6_Template(rf, ctx) { if (rf & 1) {
const _r4 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "input", 12);
i0.ɵɵpipe(1, "translate");
i0.ɵɵlistener("blur", function KeyValueFormTableComponent_ng_container_2_input_6_Template_input_blur_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onBlur()); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const index_r5 = i0.ɵɵnextContext().index;
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵproperty("readonly", ctx_r1.readonly || ctx_r1.isLabelReadonly(index_r5))("placeholder", (ctx_r1.placeholder == null ? null : ctx_r1.placeholder.value) || i0.ɵɵpipeBind1(1, 2, "value"));
} }
function KeyValueFormTableComponent_ng_container_2_div_7_Template(rf, ctx) { if (rf & 1) {
const _r6 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 13)(1, "textarea", 14);
i0.ɵɵpipe(2, "translate");
i0.ɵɵlistener("blur", function KeyValueFormTableComponent_ng_container_2_div_7_Template_textarea_blur_1_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onBlur()); });
i0.ɵɵelementEnd()();
} if (rf & 2) {
const index_r5 = i0.ɵɵnextContext().index;
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵattribute("data-value", ctx_r1.getDataValueByIndex(index_r5));
i0.ɵɵadvance();
i0.ɵɵproperty("readonly", ctx_r1.readonly || ctx_r1.isLabelReadonly(index_r5))("placeholder", (ctx_r1.placeholder == null ? null : ctx_r1.placeholder.value) || i0.ɵɵpipeBind1(2, 3, "value"));
} }
function KeyValueFormTableComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
const _r1 = i0.ɵɵgetCurrentView();
i0.ɵɵelementContainerStart(0, 8);
i0.ɵɵelementStart(1, "td")(2, "input", 9);
i0.ɵɵpipe(3, "translate");
i0.ɵɵlistener("blur", function KeyValueFormTableComponent_ng_container_2_Template_input_blur_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onBlur()); });
i0.ɵɵelementEnd();
i0.ɵɵtemplate(4, KeyValueFormTableComponent_ng_container_2_ng_container_4_Template, 2, 1, "ng-container", 5);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(5, "td");
i0.ɵɵtemplate(6, KeyValueFormTableComponent_ng_container_2_input_6_Template, 2, 4, "input", 10)(7, KeyValueFormTableComponent_ng_container_2_div_7_Template, 3, 5, "div", 11);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const index_r5 = ctx.index;
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵproperty("formGroupName", index_r5);
i0.ɵɵadvance(2);
i0.ɵɵproperty("hidden", ctx_r1.textKey)("readonly", ctx_r1.readonly || ctx_r1.isLabelReadonly(index_r5))("placeholder", (ctx_r1.placeholder == null ? null : ctx_r1.placeholder.key) || i0.ɵɵpipeBind1(3, 7, "key"));
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx_r1.textKey);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", !ctx_r1.multiLineValue);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r1.multiLineValue);
} }
function KeyValueFormTableComponent_ng_container_3_td_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtext(1);
i0.ɵɵpipe(2, "translate");
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "k8s_resource_label_key_required"), " ");
} }
function KeyValueFormTableComponent_ng_container_3_td_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtext(1);
i0.ɵɵpipe(2, "translate");
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "k8s_resource_label_key_duplicated"), " ");
} }
function KeyValueFormTableComponent_ng_container_3_td_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "td", 16);
i0.ɵɵtemplate(1, KeyValueFormTableComponent_ng_container_3_td_1_ng_container_1_Template, 3, 3, "ng-container", 5)(2, KeyValueFormTableComponent_ng_container_3_td_1_ng_container_2_Template, 3, 3, "ng-container", 5);
i0.ɵɵelement(3, "acl-errors-mapper", 17)(4, "acl-errors-mapper", 17);
i0.ɵɵelementEnd();
} if (rf & 2) {
const control_r7 = i0.ɵɵnextContext().$implicit;
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", control_r7.errors == null ? null : control_r7.errors.keyIsMissing);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", control_r7.errors == null ? null : control_r7.errors.duplicateError);
i0.ɵɵadvance();
i0.ɵɵproperty("errors", control_r7.errors == null ? null : control_r7.errors.key)("errorsMapper", ctx_r1.errorMapper == null ? null : ctx_r1.errorMapper.key);
i0.ɵɵadvance();
i0.ɵɵproperty("errors", control_r7.errors == null ? null : control_r7.errors.value)("errorsMapper", ctx_r1.errorMapper == null ? null : ctx_r1.errorMapper.value);
} }
function KeyValueFormTableComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, KeyValueFormTableComponent_ng_container_3_td_1_Template, 5, 6, "td", 15);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const control_r7 = ctx.$implicit;
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", control_r7.invalid);
} }
function KeyValueFormTableComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
const _r8 = i0.ɵɵgetCurrentView();
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "button", 18);
i0.ɵɵlistener("click", function KeyValueFormTableComponent_ng_container_4_Template_button_click_1_listener() { const index_r9 = i0.ɵɵrestoreView(_r8).index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.remove(index_r9)); });
i0.ɵɵelement(2, "aui-icon", 19);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const index_r9 = ctx.index;
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("hidden", ctx_r1.readonly || ctx_r1.isLabelReadonly(index_r9))("square", true)("plain", true);
} }
function KeyValueFormTableComponent_ng_container_5_ng_container_1_ng_template_1_Template(rf, ctx) { }
function KeyValueFormTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, KeyValueFormTableComponent_ng_container_5_ng_container_1_ng_template_1_Template, 0, 0, "ng-template", 21);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.zeroStateTemplate);
} }
function KeyValueFormTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, KeyValueFormTableComponent_ng_container_5_ng_container_1_Template, 2, 1, "ng-container", 20);
i0.ɵɵelementContainerEnd();
} }
export class KeyValueFormTableComponent extends BaseStringMapFormComponent {
constructor() {
super(...arguments);
this.validator = {
key: [],
value: [],
};
this.errorMapper = {
key: {},
value: {},
};
this.maxRow = Infinity;
this.minRow = 0;
this.readonlyKeys = [];
}
isReadonly(key) {
return this.readonlyKeys.some(toCheckKey => {
if (!toCheckKey) {
return false;
}
if (typeof toCheckKey === 'string') {
return toCheckKey === key;
}
return toCheckKey.test(key);
});
}
getDataValueByIndex(index) {
return this.form.at(index).at(1).value;
}
adaptResourceModel(resource) {
let newFormModel = Object.entries(resource || {});
// 排序,先按字母排序,再把 readonly 的放前面
newFormModel = sortBy(newFormModel, (arr) => arr[0]);
newFormModel.sort((arr1, arr2) => {
const flag1 = this.isReadonly(arr1[0]);
const flag2 = this.isReadonly(arr2[0]);
if ((flag1 && flag2) || (!flag1 && !flag2)) {
return 0;
}
return flag1 ? -1 : 1;
});
if (newFormModel.length === 0) {
newFormModel = this.getDefaultFormModel();
}
return newFormModel;
}
getKeyValidators() {
return this.validator?.key;
}
getValueValidators() {
return this.validator?.value;
}
isLabelReadonly(index) {
const formArray = this.form.controls[index];
return formArray.valid && this.isReadonly(formArray.controls[0].value);
}
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵKeyValueFormTableComponent_BaseFactory; return function KeyValueFormTableComponent_Factory(t) { return (ɵKeyValueFormTableComponent_BaseFactory || (ɵKeyValueFormTableComponent_BaseFactory = i0.ɵɵgetInheritedFactory(KeyValueFormTableComponent)))(t || KeyValueFormTableComponent); }; })(); }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: KeyValueFormTableComponent, selectors: [["acl-key-value-form-table"]], inputs: { resourceName: "resourceName", resourceNameTranslated: "resourceNameTranslated", multiLineValue: "multiLineValue", validator: "validator", errorMapper: "errorMapper", placeholder: "placeholder", readonly: "readonly", textKey: "textKey", maxRow: "maxRow", minRow: "minRow", readonlyKeys: "readonlyKeys", zeroStateTemplate: "zeroStateTemplate" }, standalone: true, features: [i0.ɵɵProvidersFeature([ValidateRowDuplicateService]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 6, vars: 8, consts: [[3, "add", "remove", "resourceName", "resourceNameTranslated", "rows", "formGroup", "readonly", "maxRow", "minRow"], [4, "aclArrayFormTableHeader"], [3, "formGroupName", 4, "aclArrayFormTableRow"], [4, "aclArrayFormTableRowError"], [4, "aclArrayFormTableRowControl"], [4, "ngIf"], [2, "width", "33%"], [2, "width", "66%"], [3, "formGroupName"], ["aui-input", "", "formControlName", "0", 3, "blur", "hidden", "readonly", "placeholder"], ["aui-input", "", "formControlName", "1", 3, "readonly", "placeholder", "blur", 4, "ngIf"], ["class", "textarea-wrapper", 4, "ngIf"], ["aui-input", "", "formControlName", "1", 3, "blur", "readonly", "placeholder"], [1, "textarea-wrapper"], ["aui-input", "", "formControlName", "1", "rows", "1", 3, "blur", "readonly", "placeholder"], ["colspan", "3", "class", "acl-table-form-error-hint", 4, "ngIf"], ["colspan", "3", 1, "acl-table-form-error-hint"], ["auiFormItemError", "", 3, "errors", "errorsMapper"], ["aui-button", "text", "type", "button", 3, "click", "hidden", "square", "plain"], ["icon", "minus_circle"], [4, "aclArrayFormTableZeroState"], [3, "ngTemplateOutlet"]], template: function KeyValueFormTableComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "acl-array-form-table", 0);
i0.ɵɵlistener("add", function KeyValueFormTableComponent_Template_acl_array_form_table_add_0_listener() { return ctx.add(ctx.form.length); })("remove", function KeyValueFormTableComponent_Template_acl_array_form_table_remove_0_listener($event) { return ctx.remove($event); });
i0.ɵɵtemplate(1, KeyValueFormTableComponent_ng_container_1_Template, 7, 6, "ng-container", 1)(2, KeyValueFormTableComponent_ng_container_2_Template, 8, 9, "ng-container", 2)(3, KeyValueFormTableComponent_ng_container_3_Template, 2, 1, "ng-container", 3)(4, KeyValueFormTableComponent_ng_container_4_Template, 3, 3, "ng-container", 4)(5, KeyValueFormTableComponent_ng_container_5_Template, 2, 0, "ng-container", 5);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("resourceName", ctx.resourceName)("resourceNameTranslated", ctx.resourceNameTranslated)("rows", ctx.form.controls)("formGroup", ctx.form)("readonly", ctx.readonly)("maxRow", ctx.maxRow)("minRow", ctx.minRow);
i0.ɵɵadvance(5);
i0.ɵɵproperty("ngIf", ctx.zeroStateTemplate);
} }, dependencies: [ArrayFormTableModule, i1.ArrayFormTableComponent, i1.ArrayFormTableHeaderDirective, i1.ArrayFormTableRowControlDirective, i1.ArrayFormTableRowDirective, i1.ArrayFormTableRowErrorDirective, i1.ArrayFormTableZeroStateDirective, ReactiveFormsModule, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormGroupDirective, i2.FormControlName, i2.FormGroupName, InputModule, i3.InputComponent, NgIf,
NgTemplateOutlet,
TranslateModule, i4.TranslatePipe, ErrorsMapperModule, i5.ErrorsMapperComponent, ButtonModule, i3.ButtonComponent, IconModule, i3.IconComponent, FormModule, i3.FormItemErrorDirective, EffectDirectiveModule, i6.E2eAttributeBindingDirective], styles: ["[_nghost-%COMP%]{flex:1}[_nghost-%COMP%] .textarea-wrapper[_ngcontent-%COMP%]{display:grid;align-items:stretch}[_nghost-%COMP%] .textarea-wrapper[_ngcontent-%COMP%]:after, [_nghost-%COMP%] .textarea-wrapper[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{grid-area:1/1;width:auto;padding:3px 5px;font:inherit;resize:none;max-height:252px}[_nghost-%COMP%] .textarea-wrapper[_ngcontent-%COMP%]:after{content:attr(data-value) \" \";visibility:hidden;white-space:pre-wrap}[_nghost-%COMP%] .textarea-wrapper[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{overflow:auto;height:auto!important}[_nghost-%COMP%] .textarea-wrapper[_ngcontent-%COMP%]:focus-within textarea[_ngcontent-%COMP%]:focus{outline:none}td.acl-table-form-error-hint[_ngcontent-%COMP%]{padding-top:0;color:rgb(var(--aui-color-red));font-size:12px}"], changeDetection: 0 }); }
}
__decorate([
ValueHook(null, null, function () {
this.form?.controls.forEach((formArray) => {
const [key, value] = formArray.controls;
key.setValidators(this.getKeyValidators());
value.setValidators(this.getValueValidators());
});
}),
__metadata("design:type", Object)
], KeyValueFormTableComponent.prototype, "validator", void 0);
__decorate([
ValueHook(Boolean),
__metadata("design:type", Array)
], KeyValueFormTableComponent.prototype, "readonlyKeys", void 0);
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(KeyValueFormTableComponent, [{
type: Component,
args: [{ selector: 'acl-key-value-form-table', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
ArrayFormTableModule,
ReactiveFormsModule,
ArrayFormTableComponent,
InputModule,
NgIf,
NgTemplateOutlet,
TranslateModule,
ErrorsMapperModule,
ButtonModule,
IconModule,
FormModule,
EffectDirectiveModule,
], standalone: true, providers: [ValidateRowDuplicateService], template: "<acl-array-form-table\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n (add)=\"add(form.length)\"\n (remove)=\"remove($event)\"\n [rows]=\"form.controls\"\n [formGroup]=\"$any(form)\"\n [readonly]=\"readonly\"\n [maxRow]=\"maxRow\"\n [minRow]=\"minRow\"\n>\n <ng-container *aclArrayFormTableHeader>\n <th style=\"width: 33%\">{{ 'key' | translate }}</th>\n <th style=\"width: 66%\">{{ 'value' | translate }}</th>\n </ng-container>\n\n <!-- Input row -->\n <ng-container\n *aclArrayFormTableRow=\"let control; let index = index\"\n [formGroupName]=\"index\"\n >\n <td>\n <input\n [hidden]=\"textKey\"\n (blur)=\"onBlur()\"\n aui-input\n [readonly]=\"readonly || isLabelReadonly(index)\"\n formControlName=\"0\"\n [placeholder]=\"placeholder?.key || ('key' | translate)\"\n />\n <ng-container *ngIf=\"textKey\">\n {{ control.get('0').value }}\n </ng-container>\n </td>\n\n <td>\n <input\n *ngIf=\"!multiLineValue\"\n (blur)=\"onBlur()\"\n aui-input\n [readonly]=\"readonly || isLabelReadonly(index)\"\n formControlName=\"1\"\n [placeholder]=\"placeholder?.value || ('value' | translate)\"\n />\n <div\n *ngIf=\"multiLineValue\"\n class=\"textarea-wrapper\"\n [attr.data-value]=\"getDataValueByIndex(index)\"\n >\n <textarea\n (blur)=\"onBlur()\"\n [readonly]=\"readonly || isLabelReadonly(index)\"\n aui-input\n formControlName=\"1\"\n rows=\"1\"\n [placeholder]=\"placeholder?.value || ('value' | translate)\"\n ></textarea>\n </div>\n </td>\n </ng-container>\n\n <!-- Input error row -->\n <ng-container *aclArrayFormTableRowError=\"let control\">\n <td\n *ngIf=\"control.invalid\"\n colspan=\"3\"\n class=\"acl-table-form-error-hint\"\n >\n <ng-container *ngIf=\"control.errors?.keyIsMissing\">\n {{ 'k8s_resource_label_key_required' | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"control.errors?.duplicateError\">\n {{ 'k8s_resource_label_key_duplicated' | translate }}\n </ng-container>\n\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"control.errors?.key\"\n [errorsMapper]=\"errorMapper?.key\"\n ></acl-errors-mapper>\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"control.errors?.value\"\n [errorsMapper]=\"errorMapper?.value\"\n ></acl-errors-mapper>\n </td>\n </ng-container>\n\n <ng-container *aclArrayFormTableRowControl=\"let item; let index = index\">\n <button\n [hidden]=\"readonly || isLabelReadonly(index)\"\n aui-button=\"text\"\n type=\"button\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"zeroStateTemplate\">\n <ng-container *aclArrayFormTableZeroState>\n <ng-template [ngTemplateOutlet]=\"zeroStateTemplate\"></ng-template>\n </ng-container>\n </ng-container>\n</acl-array-form-table>\n", styles: [":host{flex:1}:host .textarea-wrapper{display:grid;align-items:stretch}:host .textarea-wrapper:after,:host .textarea-wrapper textarea{grid-area:1/1;width:auto;padding:3px 5px;font:inherit;resize:none;max-height:252px}:host .textarea-wrapper:after{content:attr(data-value) \" \";visibility:hidden;white-space:pre-wrap}:host .textarea-wrapper textarea{overflow:auto;height:auto!important}:host .textarea-wrapper:focus-within textarea:focus{outline:none}td.acl-table-form-error-hint{padding-top:0;color:rgb(var(--aui-color-red));font-size:12px}\n"] }]
}], null, { resourceName: [{
type: Input
}], resourceNameTranslated: [{
type: Input
}], multiLineValue: [{
type: Input
}], validator: [{
type: Input
}], errorMapper: [{
type: Input
}], placeholder: [{
type: Input
}], readonly: [{
type: Input
}], textKey: [{
type: Input
}], maxRow: [{
type: Input
}], minRow: [{
type: Input
}], readonlyKeys: [{
type: Input
}], zeroStateTemplate: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(KeyValueFormTableComponent, { className: "KeyValueFormTableComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2FycmF5LWZvcm0tdGFibGUva2V5LXZhbHVlLWZvcm0vY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2FycmF5LWZvcm0tdGFibGUva2V5LXZhbHVlLWZvcm0vdGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsbUJBQW1CLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRW5DLE9BQU8sRUFBYSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUNoSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztJ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Z0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQzs7NkRBUUE7QUErQkY7SUFGQyxTQUFTLENBQTZDLE9BQU8sQ0FBQzs4QkFFakQsS0FBSztnRUFBdUI7aUZBMUQvQiwwQkFBMEI7Y0F0QnRDLFNBQVM7MkJBQ0UsMEJBQTBCLG1CQUduQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO29CQUNQLG9CQUFvQjtvQkFDcEIsbUJBQW1CO29CQUNuQix1QkFBdUI7b0JBQ3ZCLFdBQVc7b0JBQ1gsSUFBSTtvQkFDSixnQkFBZ0I7b0JBQ2hCLGVBQWU7b0JBQ2Ysa0JBQWtCO29CQUNsQixZQUFZO29CQUNaLFVBQVU7b0JBQ1YsVUFBVTtvQkFDVixxQkFBcUI7aUJBQ3RCLGNBQ1csSUFBSSxhQUNMLENBQUMsMkJBQTJCLENBQUM7Z0JBT3hDLFlBQVk7a0JBRFgsS0FBSztZQUlOLHNCQUFzQjtrQkFEckIsS0FBSztZQUlOLGNBQWM7a0JBRGIsS0FBSztZQVdOLFNBQVM7a0JBRFIsS0FBSztZQVVOLFdBQVc7a0JBRFYsS0FBSztZQVVOLFdBQVc7a0JBRFYsS0FBSztZQU9OLFFBQVE7a0JBRFAsS0FBSztZQUlOLE9BQU87a0JBRE4sS0FBSztZQUlOLE1BQU07a0JBREwsS0FBSztZQUlOLE1BQU07a0JBREwsS0FBSztZQUtOLFlBQVk7a0JBRFgsS0FBSztZQUlOLGlCQUFpQjtrQkFEaEIsS0FBSzs7a0ZBNURLLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1dHRvbk1vZHVsZSwgRm9ybU1vZHVsZSwgSWNvbk1vZHVsZSwgSW5wdXRNb2R1bGUgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHNvcnRCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IFN0cmluZ01hcCwgVmFsdWVIb29rIH0gZnJvbSAnLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFZhbGlkYXRlUm93RHVwbGljYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZm9ybS1yb3ctZHVwbGljYXRlL2Zvcm0tcm93LWR1cGxpY2F0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVmZmVjdERpcmVjdGl2ZU1vZHVsZSB9IGZyb20gJy4uLy4uL2VmZmVjdC1kaXJlY3RpdmUvbW9kdWxlJztcbmltcG9ydCB7IEVycm9yc01hcHBlck1vZHVsZSB9IGZyb20gJy4uLy4uL2Zvcm0vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICcuLi8uLi90cmFuc2xhdGUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBCYXNlU3RyaW5nTWFwRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RyaW5nLW1hcC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcnJheUZvcm1UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vY29tcG9uZW50JztcbmltcG9ydCB7IEFycmF5Rm9ybVRhYmxlTW9kdWxlIH0gZnJvbSAnLi4vZm9ybS9tb2R1bGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wta2V5LXZhbHVlLWZvcm0tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3R5bGVzLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBBcnJheUZvcm1UYWJsZU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEFycmF5Rm9ybVRhYmxlQ29tcG9uZW50LFxuICAgIElucHV0TW9kdWxlLFxuICAgIE5nSWYsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgRXJyb3JzTWFwcGVyTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIEZvcm1Nb2R1bGUsXG4gICAgRWZmZWN0RGlyZWN0aXZlTW9kdWxlLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtWYWxpZGF0ZVJvd0R1cGxpY2F0ZVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBLZXlWYWx1ZUZvcm1UYWJsZUNvbXBvbmVudFxuICBleHRlbmRzIEJhc2VTdHJpbmdNYXBGb3JtQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBJbnB1dCgpXG4gIHJlc291cmNlTmFtZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHJlc291cmNlTmFtZVRyYW5zbGF0ZWQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBtdWx0aUxpbmVWYWx1ZTogYm9vbGVhbjtcblxuICBAVmFsdWVIb29rKG51bGwsIG51bGwsIGZ1bmN0aW9uICh0aGlzOiBLZXlWYWx1ZUZvcm1UYWJsZUNvbXBvbmVudCkge1xuICAgIHRoaXMuZm9ybT8uY29udHJvbHMuZm9yRWFjaCgoZm9ybUFycmF5OiBGb3JtQXJyYXkpID0+IHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGZvcm1BcnJheS5jb250cm9scztcbiAgICAgIGtleS5zZXRWYWxpZGF0b3JzKHRoaXMuZ2V0S2V5VmFsaWRhdG9ycygpKTtcbiAgICAgIHZhbHVlLnNldFZhbGlkYXRvcnModGhpcy5nZXRWYWx1ZVZhbGlkYXRvcnMoKSk7XG4gICAgfSk7XG4gIH0pXG4gIEBJbnB1dCgpXG4gIHZhbGlkYXRvcjoge1xuICAgIGtleT86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXTtcbiAgICB2YWx1ZT86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXTtcbiAgfSA9IHtcbiAgICBrZXk6IFtdLFxuICAgIHZhbHVlOiBbXSxcbiAgfTtcblxuICBASW5wdXQoKVxuICBlcnJvck1hcHBlcjoge1xuICAgIGtleT86IFN0cmluZ01hcDtcbiAgICB2YWx1ZT86IFN0cmluZ01hcDtcbiAgfSA9IHtcbiAgICBrZXk6IHt9LFxuICAgIHZhbHVlOiB7fSxcbiAgfTtcblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlcjoge1xuICAgIGtleT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZztcbiAgfTtcblxuICBASW5wdXQoKVxuICByZWFkb25seTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICB0ZXh0S2V5OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIG1heFJvdyA9IEluZmluaXR5O1xuXG4gIEBJbnB1dCgpXG4gIG1pblJvdyA9IDA7XG5cbiAgQFZhbHVlSG9vazxLZXlWYWx1ZUZvcm1UYWJsZUNvbXBvbmVudCwgJ3JlYWRvbmx5S2V5cyc+KEJvb2xlYW4pXG4gIEBJbnB1dCgpXG4gIHJlYWRvbmx5S2V5czogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPiA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHplcm9TdGF0ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGlzUmVhZG9ubHkoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seUtleXMuc29tZSh0b0NoZWNrS2V5ID0+IHtcbiAgICAgIGlmICghdG9DaGVja0tleSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRvQ2hlY2tLZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0b0NoZWNrS2V5ID09PSBrZXk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b0NoZWNrS2V5LnRlc3Qoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFWYWx1ZUJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiAodGhpcy5mb3JtLmF0KGluZGV4KSBhcyBGb3JtQXJyYXkpLmF0KDEpLnZhbHVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWRhcHRSZXNvdXJjZU1vZGVsKHJlc291cmNlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgbGV0IG5ld0Zvcm1Nb2RlbCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlIHx8IHt9KTtcbiAgICAvLyDmjpLluo/vvIzlhYjmjInlrZfmr43mjpLluo/vvIzlho3mioogcmVhZG9ubHkg55qE5pS+5YmN6Z2iXG4gICAgbmV3Rm9ybU1vZGVsID0gc29ydEJ5KG5ld0Zvcm1Nb2RlbCwgKGFycjogW3N0cmluZywgc3RyaW5nXSkgPT4gYXJyWzBdKTtcbiAgICBuZXdGb3JtTW9kZWwuc29ydCgoYXJyMTogW3N0cmluZywgc3RyaW5nXSwgYXJyMjogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgY29uc3QgZmxhZzEgPSB0aGlzLmlzUmVhZG9ubHkoYXJyMVswXSk7XG4gICAgICBjb25zdCBmbGFnMiA9IHRoaXMuaXNSZWFkb25seShhcnIyWzBdKTtcbiAgICAgIGlmICgoZmxhZzEgJiYgZmxhZzIpIHx8ICghZmxhZzEgJiYgIWZsYWcyKSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmbGFnMSA/IC0xIDogMTtcbiAgICB9KTtcbiAgICBpZiAobmV3Rm9ybU1vZGVsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbmV3Rm9ybU1vZGVsID0gdGhpcy5nZXREZWZhdWx0Rm9ybU1vZGVsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0Zvcm1Nb2RlbDtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldEtleVZhbGlkYXRvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yPy5rZXk7XG4gIH1cblxuICBvdmVycmlkZSBnZXRWYWx1ZVZhbGlkYXRvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yPy52YWx1ZTtcbiAgfVxuXG4gIGlzTGFiZWxSZWFkb25seShpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5mb3JtLmNvbnRyb2xzW2luZGV4XSBhcyBGb3JtQXJyYXk7XG4gICAgcmV0dXJuIGZvcm1BcnJheS52YWxpZCAmJiB0aGlzLmlzUmVhZG9ubHkoZm9ybUFycmF5LmNvbnRyb2xzWzBdLnZhbHVlKTtcbiAgfVxufVxuIiwiPGFjbC1hcnJheS1mb3JtLXRhYmxlXG4gIFtyZXNvdXJjZU5hbWVdPVwicmVzb3VyY2VOYW1lXCJcbiAgW3Jlc291cmNlTmFtZVRyYW5zbGF0ZWRdPVwicmVzb3VyY2VOYW1lVHJhbnNsYXRlZFwiXG4gIChhZGQpPVwiYWRkKGZvcm0ubGVuZ3RoKVwiXG4gIChyZW1vdmUpPVwicmVtb3ZlKCRldmVudClcIlxuICBbcm93c109XCJmb3JtLmNvbnRyb2xzXCJcbiAgW2Zvcm1Hcm91cF09XCIkYW55KGZvcm0pXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgW21heFJvd109XCJtYXhSb3dcIlxuICBbbWluUm93XT1cIm1pblJvd1wiXG4+XG4gIDxuZy1jb250YWluZXIgKmFjbEFycmF5Rm9ybVRhYmxlSGVhZGVyPlxuICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMyVcIj57eyAna2V5JyB8IHRyYW5zbGF0ZSB9fTwvdGg+XG4gICAgPHRoIHN0eWxlPVwid2lkdGg6IDY2JVwiPnt7ICd2YWx1ZScgfCB0cmFuc2xhdGUgfX08L3RoPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIElucHV0IHJvdyAtLT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICphY2xBcnJheUZvcm1UYWJsZVJvdz1cImxldCBjb250cm9sOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgW2Zvcm1Hcm91cE5hbWVdPVwiaW5kZXhcIlxuICA+XG4gICAgPHRkPlxuICAgICAgPGlucHV0XG4gICAgICAgIFtoaWRkZW5dPVwidGV4dEtleVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgYXVpLWlucHV0XG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSB8fCBpc0xhYmVsUmVhZG9ubHkoaW5kZXgpXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiMFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcj8ua2V5IHx8ICgna2V5JyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgLz5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZXh0S2V5XCI+XG4gICAgICAgIHt7IGNvbnRyb2wuZ2V0KCcwJykudmFsdWUgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGQ+XG5cbiAgICA8dGQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgKm5nSWY9XCIhbXVsdGlMaW5lVmFsdWVcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgIGF1aS1pbnB1dFxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkgfHwgaXNMYWJlbFJlYWRvbmx5KGluZGV4KVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIjFcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXI/LnZhbHVlIHx8ICgndmFsdWUnIHwgdHJhbnNsYXRlKVwiXG4gICAgICAvPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIm11bHRpTGluZVZhbHVlXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0YXJlYS13cmFwcGVyXCJcbiAgICAgICAgW2F0dHIuZGF0YS12YWx1ZV09XCJnZXREYXRhVmFsdWVCeUluZGV4KGluZGV4KVwiXG4gICAgICA+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkgfHwgaXNMYWJlbFJlYWRvbmx5KGluZGV4KVwiXG4gICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiMVwiXG4gICAgICAgICAgcm93cz1cIjFcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcj8udmFsdWUgfHwgKCd2YWx1ZScgfCB0cmFuc2xhdGUpXCJcbiAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICA8L2Rpdj5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIElucHV0IGVycm9yIHJvdyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqYWNsQXJyYXlGb3JtVGFibGVSb3dFcnJvcj1cImxldCBjb250cm9sXCI+XG4gICAgPHRkXG4gICAgICAqbmdJZj1cImNvbnRyb2wuaW52YWxpZFwiXG4gICAgICBjb2xzcGFuPVwiM1wiXG4gICAgICBjbGFzcz1cImFjbC10YWJsZS1mb3JtLWVycm9yLWhpbnRcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sLmVycm9ycz8ua2V5SXNNaXNzaW5nXCI+XG4gICAgICAgIHt7ICdrOHNfcmVzb3VyY2VfbGFiZWxfa2V5X3JlcXVpcmVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sLmVycm9ycz8uZHVwbGljYXRlRXJyb3JcIj5cbiAgICAgICAge3sgJ2s4c19yZXNvdXJjZV9sYWJlbF9rZXlfZHVwbGljYXRlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8YWNsLWVycm9ycy1tYXBwZXJcbiAgICAgICAgYXVpRm9ybUl0ZW1FcnJvclxuICAgICAgICBbZXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzPy5rZXlcIlxuICAgICAgICBbZXJyb3JzTWFwcGVyXT1cImVycm9yTWFwcGVyPy5rZXlcIlxuICAgICAgPjwvYWNsLWVycm9ycy1tYXBwZXI+XG4gICAgICA8YWNsLWVycm9ycy1tYXBwZXJcbiAgICAgICAgYXVpRm9ybUl0ZW1FcnJvclxuICAgICAgICBbZXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzPy52YWx1ZVwiXG4gICAgICAgIFtlcnJvcnNNYXBwZXJdPVwiZXJyb3JNYXBwZXI/LnZhbHVlXCJcbiAgICAgID48L2FjbC1lcnJvcnMtbWFwcGVyPlxuICAgIDwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKmFjbEFycmF5Rm9ybVRhYmxlUm93Q29udHJvbD1cImxldCBpdGVtOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgIDxidXR0b25cbiAgICAgIFtoaWRkZW5dPVwicmVhZG9ubHkgfHwgaXNMYWJlbFJlYWRvbmx5KGluZGV4KVwiXG4gICAgICBhdWktYnV0dG9uPVwidGV4dFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtzcXVhcmVdPVwidHJ1ZVwiXG4gICAgICBbcGxhaW5dPVwidHJ1ZVwiXG4gICAgICAoY2xpY2spPVwicmVtb3ZlKGluZGV4KVwiXG4gICAgPlxuICAgICAgPGF1aS1pY29uIGljb249XCJtaW51c19jaXJjbGVcIj48L2F1aS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiemVyb1N0YXRlVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICphY2xBcnJheUZvcm1UYWJsZVplcm9TdGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ6ZXJvU3RhdGVUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9hY2wtYXJyYXktZm9ybS10YWJsZT5cbiJdfQ==