@pepperi/lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.1.
252 lines • 29.4 kB
JavaScript
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
import { LAYOUT_TYPE } from '@pepperi/lib';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@angular/common";
import * as i3 from "@pepperi/lib/field-title";
import * as i4 from "@angular/cdk/bidi";
import * as i5 from "@pepperi/lib/textbox";
import * as i6 from "@pepperi/lib/select";
function PepperiAddressComponent_ng_container_1_div_3_pep_textbox_1_Template(rf, ctx) { if (rf & 1) {
const _r9 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "pep-textbox", 8);
i0.ɵɵlistener("valueChanged", function PepperiAddressComponent_ng_container_1_div_3_pep_textbox_1_Template_pep_textbox_valueChanged_0_listener($event) { i0.ɵɵrestoreView(_r9); const groupField_r4 = i0.ɵɵnextContext().$implicit; const ctx_r8 = i0.ɵɵnextContext(2); return ctx_r8.onValueChange($event, groupField_r4.key); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r4 = i0.ɵɵnextContext().$implicit;
const ctx_r6 = i0.ɵɵnextContext(2);
i0.ɵɵpropertyInterpolate("title", groupField_r4.formattedValue);
i0.ɵɵproperty("layoutType", ctx_r6.layoutType)("form", ctx_r6.form)("key", groupField_r4.key)("value", groupField_r4.value)("formattedValue", groupField_r4.formattedValue)("label", groupField_r4.label)("placeholder", groupField_r4.placeholder)("type", groupField_r4.type)("required", groupField_r4.required)("disabled", groupField_r4.disabled)("readonly", groupField_r4.readonly)("xAlignment", groupField_r4.xAlignment)("rowSpan", groupField_r4.rowSpan)("parentFieldKey", ctx_r6.key);
} }
function PepperiAddressComponent_ng_container_1_div_3_pep_select_2_Template(rf, ctx) { if (rf & 1) {
const _r13 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "pep-select", 9);
i0.ɵɵlistener("valueChanged", function PepperiAddressComponent_ng_container_1_div_3_pep_select_2_Template_pep_select_valueChanged_0_listener($event) { i0.ɵɵrestoreView(_r13); const groupField_r4 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.onValueChange($event, groupField_r4.key); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r4 = i0.ɵɵnextContext().$implicit;
const ctx_r7 = i0.ɵɵnextContext(2);
i0.ɵɵpropertyInterpolate("title", groupField_r4.formattedValue);
i0.ɵɵproperty("layoutType", ctx_r7.layoutType)("form", ctx_r7.form)("key", groupField_r4.key)("value", groupField_r4.value)("formattedValue", groupField_r4.formattedValue)("label", groupField_r4.label)("type", groupField_r4.type)("required", groupField_r4.required)("disabled", groupField_r4.disabled)("readonly", groupField_r4.readonly)("xAlignment", groupField_r4.xAlignment)("rowSpan", groupField_r4.rowSpan)("options", groupField_r4.options)("parentFieldKey", ctx_r7.key);
} }
function PepperiAddressComponent_ng_container_1_div_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 5);
i0.ɵɵtemplate(1, PepperiAddressComponent_ng_container_1_div_3_pep_textbox_1_Template, 1, 15, "pep-textbox", 6);
i0.ɵɵtemplate(2, PepperiAddressComponent_ng_container_1_div_3_pep_select_2_Template, 1, 15, "pep-select", 7);
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r4 = ctx.$implicit;
i0.ɵɵclassMapInterpolate1("pepperi-address-field columns-", groupField_r4.colSpan, "");
i0.ɵɵproperty("ngSwitch", groupField_r4.controlType);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngSwitchCase", "textbox");
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngSwitchCase", "select");
} }
function PepperiAddressComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelement(1, "pep-field-title", 2);
i0.ɵɵelementStart(2, "div", 3);
i0.ɵɵtemplate(3, PepperiAddressComponent_ng_container_1_div_3_Template, 3, 6, "div", 4);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("label", ctx_r0.label)("required", ctx_r0.required)("disabled", ctx_r0.disabled);
i0.ɵɵadvance(1);
i0.ɵɵpropertyInterpolate("dir", ctx_r0.xAlignment === "2" ? "rtl" : "ltr");
i0.ɵɵproperty("formGroupName", ctx_r0.key)("id", ctx_r0.key);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx_r0.groupFields);
} }
function PepperiAddressComponent_ng_container_2_span_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 13);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r16 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1("", ctx_r16.label, "\u00A0");
} }
function PepperiAddressComponent_ng_container_2_ng_container_3_span_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 15);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r18 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1("", groupField_r18.formattedValue, ",\u00A0");
} }
function PepperiAddressComponent_ng_container_2_ng_container_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PepperiAddressComponent_ng_container_2_ng_container_3_span_1_Template, 2, 1, "span", 14);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const groupField_r18 = ctx.$implicit;
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", (groupField_r18 == null ? null : groupField_r18.formattedValue) != "");
} }
const _c0 = function (a0) { return [a0]; };
function PepperiAddressComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "div", 10);
i0.ɵɵtemplate(2, PepperiAddressComponent_ng_container_2_span_2_Template, 2, 1, "span", 11);
i0.ɵɵtemplate(3, PepperiAddressComponent_ng_container_2_ng_container_3_Template, 2, 1, "ng-container", 12);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵpropertyInterpolate2("title", "", ctx_r1.label, "\u00A0", ctx_r1.formattedValue, "");
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0, "text-align-" + ctx_r1.xAlignment));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r1.label != "");
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx_r1.groupFields);
} }
function PepperiAddressComponent_ng_container_3_ng_container_2_span_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 15);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const groupField_r23 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1("", groupField_r23.formattedValue, ",\u00A0");
} }
function PepperiAddressComponent_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PepperiAddressComponent_ng_container_3_ng_container_2_span_1_Template, 2, 1, "span", 14);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const groupField_r23 = ctx.$implicit;
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", (groupField_r23 == null ? null : groupField_r23.formattedValue) != "");
} }
function PepperiAddressComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "div", 10);
i0.ɵɵtemplate(2, PepperiAddressComponent_ng_container_3_ng_container_2_Template, 2, 1, "ng-container", 12);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵpropertyInterpolate("title", ctx_r2.formattedValue);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, "text-align-" + ctx_r2.xAlignment));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx_r2.groupFields);
} }
export class PepperiAddressComponent {
constructor(element, renderer) {
this.element = element;
this.renderer = renderer;
this.key = '';
// @Input() value = '';
this.formattedValue = '';
this.label = '';
this.required = false;
this.disabled = false;
this.readonly = false;
this.xAlignment = '0';
this.rowSpan = 1;
this.form = null;
this.layoutType = LAYOUT_TYPE.PepperiForm;
this.valueChanged = new EventEmitter();
this.LAYOUT_TYPE = LAYOUT_TYPE;
}
ngOnInit() {
this.renderer.addClass(this.element.nativeElement, 'pep-grouped-field');
}
ngOnChanges(changes) {
setTimeout(() => {
const focusedFieldParent = this.groupFields.filter(groupField => groupField.lastFocusField)[0];
if (focusedFieldParent) {
focusedFieldParent.lastFocusField.focus();
}
}, 100);
}
ngOnDestroy() {
if (this.valueChanged) {
this.valueChanged.unsubscribe();
}
}
// Not in use for material
onBlur(e, apiName) {
const value = e.target ? e.target.value : e;
this.changeValue({ apiName, value }, e.relatedTarget);
}
onValueChange(e, apiName) {
if (e.target) {
const input = e.target ? e.target.value : e;
this.changeValue({ apiName, value: input.value });
}
else {
this.changeValue(e);
}
}
changeValue(obj, lastFocusedField = null) {
const currentGroupField = this.groupFields.filter(groupField => groupField.key === obj.apiName)[0];
if (currentGroupField.value !== obj.value) {
// Set the value in the form controls
if (this.form) {
const formCtrl = this.form.get(this.key);
if (formCtrl) {
formCtrl.get(obj.apiName).setValue(obj.value);
}
}
this.valueChanged.emit({ apiName: obj.apiName, value: obj.value, lastFocusedField });
}
}
}
PepperiAddressComponent.ɵfac = function PepperiAddressComponent_Factory(t) { return new (t || PepperiAddressComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2)); };
PepperiAddressComponent.ɵcmp = i0.ɵɵdefineComponent({ type: PepperiAddressComponent, selectors: [["pep-address"]], inputs: { key: "key", formattedValue: "formattedValue", label: "label", required: "required", disabled: "disabled", readonly: "readonly", xAlignment: "xAlignment", rowSpan: "rowSpan", groupFields: "groupFields", form: "form", layoutType: "layoutType" }, outputs: { valueChanged: "valueChanged" }, features: [i0.ɵɵNgOnChangesFeature], decls: 4, vars: 4, consts: [[3, "formGroup"], [4, "ngIf"], [1, "header", 3, "label", "required", "disabled"], [1, "pepperi-address-container", 3, "formGroupName", "id", "dir"], [3, "ngSwitch", "class", 4, "ngFor", "ngForOf"], [3, "ngSwitch"], [3, "layoutType", "title", "form", "key", "value", "formattedValue", "label", "placeholder", "type", "required", "disabled", "readonly", "xAlignment", "rowSpan", "parentFieldKey", "valueChanged", 4, "ngSwitchCase"], [3, "layoutType", "title", "form", "key", "value", "formattedValue", "label", "type", "required", "disabled", "readonly", "xAlignment", "rowSpan", "options", "parentFieldKey", "valueChanged", 4, "ngSwitchCase"], [3, "layoutType", "title", "form", "key", "value", "formattedValue", "label", "placeholder", "type", "required", "disabled", "readonly", "xAlignment", "rowSpan", "parentFieldKey", "valueChanged"], [3, "layoutType", "title", "form", "key", "value", "formattedValue", "label", "type", "required", "disabled", "readonly", "xAlignment", "rowSpan", "options", "parentFieldKey", "valueChanged"], [1, "pepperi-card-input", 3, "title", "ngClass"], ["class", "body-xs title", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "body-xs", "title"], ["class", "body-sm", 4, "ngIf"], [1, "body-sm"]], template: function PepperiAddressComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0, 0);
i0.ɵɵtemplate(1, PepperiAddressComponent_ng_container_1_Template, 4, 7, "ng-container", 1);
i0.ɵɵtemplate(2, PepperiAddressComponent_ng_container_2_Template, 4, 7, "ng-container", 1);
i0.ɵɵtemplate(3, PepperiAddressComponent_ng_container_3_Template, 3, 5, "ng-container", 1);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
i0.ɵɵproperty("formGroup", ctx.form);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiForm);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiCard);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiTable);
} }, directives: [i1.NgControlStatusGroup, i1.FormGroupDirective, i2.NgIf, i3.PepperiFieldTitleComponent, i1.FormGroupName, i4.Dir, i2.NgForOf, i2.NgSwitch, i2.NgSwitchCase, i5.PepperiTextboxComponent, i6.PepperiSelectComponent, i2.NgClass], styles: [".header[_ngcontent-%COMP%]{-ms-grid-column:1;-ms-grid-column-span:3;grid-column:1/span 3}.pepperi-address-container[_ngcontent-%COMP%]{-ms-grid-columns:(1fr)[3];border-radius:var(--pep-border-radius-md,.25rem);display:-ms-grid;display:grid;grid-column-gap:var(--pep-spacing-md,.75rem);grid-row-gap:var(--pep-spacing-md,.75rem);grid-template-columns:repeat(3,1fr);padding:.875rem var(--pep-spacing-md,.75rem)}.pepperi-address-container[_ngcontent-%COMP%] .columns-2[_ngcontent-%COMP%]{-ms-grid-column:1;-ms-grid-column-span:2;grid-column:1/span 2}.pepperi-address-container[_ngcontent-%COMP%] .columns-3[_ngcontent-%COMP%]{-ms-grid-column:1;-ms-grid-column-span:3;grid-column:1/span 3}"], changeDetection: 0 });
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(PepperiAddressComponent, [{
type: Component,
args: [{
selector: 'pep-address',
templateUrl: './address.component.html',
styleUrls: ['./address.component.scss'],
// host: { 'class': 'pepperi-grouped-field' },
changeDetection: ChangeDetectionStrategy.OnPush
}]
}], function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, { key: [{
type: Input
}], formattedValue: [{
type: Input
}], label: [{
type: Input
}], required: [{
type: Input
}], disabled: [{
type: Input
}], readonly: [{
type: Input
}], xAlignment: [{
type: Input
}], rowSpan: [{
type: Input
}], groupFields: [{
type: Input
}], form: [{
type: Input
}], layoutType: [{
type: Input
}], valueChanged: [{
type: Output
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wZXBwZXJpLWxpYi9hZGRyZXNzL2FkZHJlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGVwcGVyaS1saWIvYWRkcmVzcy9hZGRyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUVySixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7O0lDTTNCLHNDQU9jO0lBRFYsa1VBQXNEO0lBQzFELGlCQUFjOzs7O0lBUG1ELCtEQUF1QztJQUFqRSw4Q0FBeUIscUJBQUEsMEJBQUEsOEJBQUEsZ0RBQUEsOEJBQUEsMENBQUEsNEJBQUEsb0NBQUEsb0NBQUEsb0NBQUEsd0NBQUEsa0NBQUEsOEJBQUE7Ozs7SUFTaEUscUNBTWE7SUFEYyxtVUFBc0Q7SUFDakYsaUJBQWE7Ozs7SUFOa0QsK0RBQXVDO0lBQWpFLDhDQUF5QixxQkFBQSwwQkFBQSw4QkFBQSxnREFBQSw4QkFBQSw0QkFBQSxvQ0FBQSxvQ0FBQSxvQ0FBQSx3Q0FBQSxrQ0FBQSxrQ0FBQSw4QkFBQTs7O0lBWGxFLDhCQUVJO0lBQUEsOEdBT0E7SUFFQSw0R0FNQTtJQUNKLGlCQUFNOzs7SUFqQkYsc0ZBQThEO0lBRDdELG9EQUFtQztJQUV2QixlQUF5QjtJQUF6Qix3Q0FBeUI7SUFTMUIsZUFBd0I7SUFBeEIsdUNBQXdCOzs7SUFoQmhELDZCQUNJO0lBQUEscUNBQ2tCO0lBQ2xCLDhCQUVJO0lBQUEsdUZBRUk7SUFpQlIsaUJBQU07SUFDViwwQkFBZTs7O0lBeEJNLGVBQWU7SUFBZixvQ0FBZSw2QkFBQSw2QkFBQTtJQUc1QixlQUE4QztJQUE5QywwRUFBOEM7SUFEN0MsMENBQXFCLGtCQUFBO0lBRW1CLGVBQXFEO0lBQXJELDRDQUFxRDs7O0lBeUI5RixnQ0FBZ0Q7SUFBQSxZQUFpQjtJQUFBLGlCQUFPOzs7SUFBeEIsZUFBaUI7SUFBakIsa0RBQWlCOzs7SUFFN0QsZ0NBQ29CO0lBQUEsWUFBc0M7SUFBQSxpQkFBTzs7O0lBQTdDLGVBQXNDO0lBQXRDLG1FQUFzQzs7O0lBRjlELDZCQUNJO0lBQUEseUdBQ29CO0lBQ3hCLDBCQUFlOzs7SUFGTCxlQUF3QztJQUF4Qyw0RkFBd0M7Ozs7SUFMMUQsNkJBQ0k7SUFBQSwrQkFFSTtJQUFBLDBGQUFnRDtJQUNoRCwwR0FDSTtJQUdSLGlCQUFNO0lBQ1YsMEJBQWU7OztJQVJzQixlQUE2QztJQUE3Qyx5RkFBNkM7SUFDMUUsdUZBQXdDO0lBQ2xDLGVBQW1CO0lBQW5CLHlDQUFtQjtJQUNYLGVBQXFEO0lBQXJELDRDQUFxRDs7O0lBVS9ELGdDQUNvQjtJQUFBLFlBQXNDO0lBQUEsaUJBQU87OztJQUE3QyxlQUFzQztJQUF0QyxtRUFBc0M7OztJQUY5RCw2QkFDSTtJQUFBLHlHQUNvQjtJQUN4QiwwQkFBZTs7O0lBRkwsZUFBd0M7SUFBeEMsNEZBQXdDOzs7SUFIMUQsNkJBQ0k7SUFBQSwrQkFDSTtJQUFBLDBHQUNJO0lBR1IsaUJBQU07SUFDViwwQkFBZTs7O0lBTnNCLGVBQTRCO0lBQTVCLHdEQUE0QjtJQUFDLHVGQUF3QztJQUNwRixlQUFxRDtJQUFyRCw0Q0FBcUQ7O0FEOUIvRSxNQUFNLE9BQU8sdUJBQXVCO0lBbUJoQyxZQUNZLE9BQW1CLEVBQ25CLFFBQW1CO1FBRG5CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQXBCdEIsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNsQix1QkFBdUI7UUFDZCxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNqQixZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBR1osU0FBSSxHQUFjLElBQUksQ0FBQztRQUN2QixlQUFVLEdBQWdCLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFFakQsaUJBQVksR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVwRSxnQkFBVyxHQUFHLFdBQVcsQ0FBQztJQUt0QixDQUFDO0lBRUwsUUFBUTtRQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFPO1FBQ2YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxrQkFBa0IsRUFBRTtnQkFDcEIsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzdDO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsTUFBTSxDQUFDLENBQU0sRUFBRSxPQUFlO1FBQzFCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFNLEVBQUUsT0FBZTtRQUNqQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDVixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRLEVBQUUsbUJBQXdCLElBQUk7UUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5HLElBQUksaUJBQWlCLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDdkMscUNBQXFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDWCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRXpDLElBQUksUUFBUSxFQUFFO29CQUNWLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2pEO2FBQ0o7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztTQUN4RjtJQUNMLENBQUM7OzhGQXpFUSx1QkFBdUI7NERBQXZCLHVCQUF1QjtRQ1hwQyxnQ0FDSTtRQUFBLDBGQUNJO1FBMEJKLDBGQUNJO1FBVUosMEZBQ0k7UUFPUiwwQkFBZTs7UUEvQ0Qsb0NBQWtCO1FBQ2QsZUFBOEM7UUFBOUMscUVBQThDO1FBMkI5QyxlQUE4QztRQUE5QyxxRUFBOEM7UUFXOUMsZUFBK0M7UUFBL0Msc0VBQStDOztrREQ1QnBELHVCQUF1QjtjQVBuQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLFdBQVcsRUFBRSwwQkFBMEI7Z0JBQ3ZDLFNBQVMsRUFBRSxDQUFDLDBCQUEwQixDQUFDO2dCQUN2Qyw4Q0FBOEM7Z0JBQzlDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2xEO3FGQUVZLEdBQUc7a0JBQVgsS0FBSztZQUVHLGNBQWM7a0JBQXRCLEtBQUs7WUFDRyxLQUFLO2tCQUFiLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csV0FBVztrQkFBbkIsS0FBSztZQUVHLElBQUk7a0JBQVosS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFFSSxZQUFZO2tCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT25EZXN0cm95LCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBMQVlPVVRfVFlQRSB9IGZyb20gJ0BwZXBwZXJpL2xpYic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncGVwLWFkZHJlc3MnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkZHJlc3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYWRkcmVzcy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgLy8gaG9zdDogeyAnY2xhc3MnOiAncGVwcGVyaS1ncm91cGVkLWZpZWxkJyB9LFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcHBlcmlBZGRyZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoKSBrZXkgPSAnJztcclxuICAgIC8vIEBJbnB1dCgpIHZhbHVlID0gJyc7XHJcbiAgICBASW5wdXQoKSBmb3JtYXR0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgQElucHV0KCkgbGFiZWwgPSAnJztcclxuICAgIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHhBbGlnbm1lbnQgPSAnMCc7XHJcbiAgICBASW5wdXQoKSByb3dTcGFuID0gMTtcclxuICAgIEBJbnB1dCgpIGdyb3VwRmllbGRzOiBBcnJheTxhbnk+O1xyXG5cclxuICAgIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cCA9IG51bGw7XHJcbiAgICBASW5wdXQoKSBsYXlvdXRUeXBlOiBMQVlPVVRfVFlQRSA9IExBWU9VVF9UWVBFLlBlcHBlcmlGb3JtO1xyXG5cclxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgTEFZT1VUX1RZUEUgPSBMQVlPVVRfVFlQRTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdwZXAtZ3JvdXBlZC1maWVsZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9jdXNlZEZpZWxkUGFyZW50ID0gdGhpcy5ncm91cEZpZWxkcy5maWx0ZXIoZ3JvdXBGaWVsZCA9PiBncm91cEZpZWxkLmxhc3RGb2N1c0ZpZWxkKVswXTtcclxuICAgICAgICAgICAgaWYgKGZvY3VzZWRGaWVsZFBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgZm9jdXNlZEZpZWxkUGFyZW50Lmxhc3RGb2N1c0ZpZWxkLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3QgaW4gdXNlIGZvciBtYXRlcmlhbFxyXG4gICAgb25CbHVyKGU6IGFueSwgYXBpTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldCA/IGUudGFyZ2V0LnZhbHVlIDogZTtcclxuICAgICAgICB0aGlzLmNoYW5nZVZhbHVlKHsgYXBpTmFtZSwgdmFsdWUgfSwgZS5yZWxhdGVkVGFyZ2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBvblZhbHVlQ2hhbmdlKGU6IGFueSwgYXBpTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQgPyBlLnRhcmdldC52YWx1ZSA6IGU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVmFsdWUoeyBhcGlOYW1lLCB2YWx1ZTogaW5wdXQudmFsdWUgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZShlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVmFsdWUob2JqOiBhbnksIGxhc3RGb2N1c2VkRmllbGQ6IGFueSA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50R3JvdXBGaWVsZCA9IHRoaXMuZ3JvdXBGaWVsZHMuZmlsdGVyKGdyb3VwRmllbGQgPT4gZ3JvdXBGaWVsZC5rZXkgPT09IG9iai5hcGlOYW1lKVswXTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRHcm91cEZpZWxkLnZhbHVlICE9PSBvYmoudmFsdWUpIHtcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSB2YWx1ZSBpbiB0aGUgZm9ybSBjb250cm9sc1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtQ3RybCA9IHRoaXMuZm9ybS5nZXQodGhpcy5rZXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmb3JtQ3RybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1DdHJsLmdldChvYmouYXBpTmFtZSkuc2V0VmFsdWUob2JqLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh7IGFwaU5hbWU6IG9iai5hcGlOYW1lLCB2YWx1ZTogb2JqLnZhbHVlLCBsYXN0Rm9jdXNlZEZpZWxkIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09IExBWU9VVF9UWVBFLlBlcHBlcmlGb3JtXCI+XHJcbiAgICAgICAgPHBlcC1maWVsZC10aXRsZSBbbGFiZWxdPVwibGFiZWxcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgIDwvcGVwLWZpZWxkLXRpdGxlPlxyXG4gICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwia2V5XCIgW2lkXT1cImtleVwiIGNsYXNzPVwicGVwcGVyaS1hZGRyZXNzLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgIGRpcj1cInt7IHhBbGlnbm1lbnQgPT09ICcyJyA/ICdydGwnIDogJ2x0cicgfX1cIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiZ3JvdXBGaWVsZC5jb250cm9sVHlwZVwiICpuZ0Zvcj1cImxldCBncm91cEZpZWxkIG9mIGdyb3VwRmllbGRzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGVwcGVyaS1hZGRyZXNzLWZpZWxkIGNvbHVtbnMte3sgZ3JvdXBGaWVsZC5jb2xTcGFuIH19XCI+XHJcbiAgICAgICAgICAgICAgICA8cGVwLXRleHRib3ggKm5nU3dpdGNoQ2FzZT1cIid0ZXh0Ym94J1wiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIiB0aXRsZT1cInt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIiBba2V5XT1cImdyb3VwRmllbGQua2V5XCIgW3ZhbHVlXT1cImdyb3VwRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtYXR0ZWRWYWx1ZV09XCJncm91cEZpZWxkLmZvcm1hdHRlZFZhbHVlXCIgW2xhYmVsXT1cImdyb3VwRmllbGQubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJncm91cEZpZWxkLnBsYWNlaG9sZGVyXCIgW3R5cGVdPVwiZ3JvdXBGaWVsZC50eXBlXCIgW3JlcXVpcmVkXT1cImdyb3VwRmllbGQucmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncm91cEZpZWxkLmRpc2FibGVkXCIgW3JlYWRvbmx5XT1cImdyb3VwRmllbGQucmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt4QWxpZ25tZW50XT1cImdyb3VwRmllbGQueEFsaWdubWVudFwiIFtyb3dTcGFuXT1cImdyb3VwRmllbGQucm93U3BhblwiIFtwYXJlbnRGaWVsZEtleV09XCJrZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQsIGdyb3VwRmllbGQua2V5KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9wZXAtdGV4dGJveD5cclxuXHJcbiAgICAgICAgICAgICAgICA8cGVwLXNlbGVjdCAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIiBbbGF5b3V0VHlwZV09XCJsYXlvdXRUeXBlXCIgdGl0bGU9XCJ7eyBncm91cEZpZWxkLmZvcm1hdHRlZFZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCIgW2tleV09XCJncm91cEZpZWxkLmtleVwiIFt2YWx1ZV09XCJncm91cEZpZWxkLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybWF0dGVkVmFsdWVdPVwiZ3JvdXBGaWVsZC5mb3JtYXR0ZWRWYWx1ZVwiIFtsYWJlbF09XCJncm91cEZpZWxkLmxhYmVsXCIgW3R5cGVdPVwiZ3JvdXBGaWVsZC50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZ3JvdXBGaWVsZC5yZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJncm91cEZpZWxkLmRpc2FibGVkXCIgW3JlYWRvbmx5XT1cImdyb3VwRmllbGQucmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt4QWxpZ25tZW50XT1cImdyb3VwRmllbGQueEFsaWdubWVudFwiIFtyb3dTcGFuXT1cImdyb3VwRmllbGQucm93U3BhblwiIFtvcHRpb25zXT1cImdyb3VwRmllbGQub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmVudEZpZWxkS2V5XT1cImtleVwiICh2YWx1ZUNoYW5nZWQpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQsIGdyb3VwRmllbGQua2V5KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9wZXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSBMQVlPVVRfVFlQRS5QZXBwZXJpQ2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZXBwZXJpLWNhcmQtaW5wdXQgXCIgdGl0bGU9XCJ7eyBsYWJlbCB9fSZuYnNwO3t7IGZvcm1hdHRlZFZhbHVlIH19XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiWyd0ZXh0LWFsaWduLScgKyB4QWxpZ25tZW50XVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxhYmVsICE9ICcnXCIgY2xhc3M9XCJib2R5LXhzIHRpdGxlXCI+e3sgbGFiZWwgfX0mbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwRmllbGQgb2YgZ3JvdXBGaWVsZHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ3JvdXBGaWVsZD8uZm9ybWF0dGVkVmFsdWUgIT0gJydcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9keS1zbVwiPnt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfX0sJm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSBMQVlPVVRfVFlQRS5QZXBwZXJpVGFibGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVwcGVyaS1jYXJkLWlucHV0IFwiIHRpdGxlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIiBbbmdDbGFzc109XCJbJ3RleHQtYWxpZ24tJyArIHhBbGlnbm1lbnRdXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwRmllbGQgb2YgZ3JvdXBGaWVsZHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ3JvdXBGaWVsZD8uZm9ybWF0dGVkVmFsdWUgIT0gJydcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9keS1zbVwiPnt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfX0sJm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19