@rangertechnologies/ngnxt
Version:
This library was used for creating dymanic UI based on the input JSON/data
100 lines • 17.2 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "../../services/change.service";
import * as i2 from "../../i18n.service";
import * as i3 from "../../services/data.service";
import * as i4 from "@angular/common";
import * as i5 from "@angular/forms";
export class CustomInputComponent {
changeService;
i18nService;
dataService;
value; // input value
question;
disabled = false; // input disabled or not
placeholder;
error;
fromShengel = false;
readOnly = false; // VD 12Jun24 - readonly change
ngClassValue;
idValue;
focusEvent;
inputValue = new EventEmitter();
subscription;
constructor(changeService, i18nService, dataService) {
this.changeService = changeService;
this.i18nService = i18nService;
this.dataService = dataService;
}
// RS 09DEC24 Changed keys
ngOnInit() {
// Since the idValue holds the Parent Question
// AP-25MAR25 Parse subText if it's not already an object
this.question['subText'] =
typeof this.question?.subText === 'object'
? this.question.subText
: (typeof this.question['subText'] === 'string' && this.question['subText'].trim() !== ''
? JSON.parse(this.question['subText'])
: {});
if (this.question.subText != undefined) {
this.disabled = true;
let dependencyObj = this.question.subText;
if (dependencyObj.disabled && dependencyObj.disabled == "false") {
this.disabled = false;
}
else {
this.disabled = true;
}
// Subscribe for the changes
this.subscription = this.changeService.changeAnnounced$.subscribe((changeValue) => {
if (changeValue != undefined) {
// console.log('inside subscription for the change');
if (changeValue.valueObj != undefined && changeValue.fromQuestionId == dependencyObj.sourceQuestionId) {
// VD 20Aug24 handling the multiple object
this.value = this.dataService.getValue(changeValue.valueObj, dependencyObj.valueField);
this.inputValue.emit(this.value);
}
this.changeService.confirmChange(dependencyObj.sourceQuestionId);
}
});
}
}
ngOnChange() {
}
ngOnDestroy() {
// prevent memory leak when component destroyed
this.subscription?.unsubscribe();
}
onInputChange(input) {
this.inputValue.emit(input.target.value);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomInputComponent, deps: [{ token: i1.ChangeService }, { token: i2.I18nService }, { token: i3.DataService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomInputComponent, selector: "app-custom-input", inputs: { value: "value", question: "question", disabled: "disabled", placeholder: "placeholder", error: "error", fromShengel: "fromShengel", readOnly: "readOnly", ngClassValue: "ngClassValue", idValue: "idValue", focusEvent: "focusEvent" }, outputs: { inputValue: "inputValue" }, ngImport: i0, template: " <!-- HA 19DEC23 Included Style value from Salesforce -->\n <!-- HA 18-JAN-24 Added these classes for style, HA 31-JAN-24 Added ternary for style -->\n <!-- HA 02FEB24 question input will hold the value to display -->\n <!-- // VD 12Jun24 - readonly change-->\n <!-- RS 09DEC24 Changed keys--> \n <input *ngIf=\"!fromShengel\" type=\"text\" \n [(ngModel)]=\"question.input\" \n [ngClass]=\"ngClassValue\"\n class=\"she-line-input form-control\"\n [id]=\"idValue\"\n (focus)=\"focusEvent\"\n [readOnly]=\"readOnly\"\n [style.border-color]=\"error ? 'red !important' : ''\"\n [style]=\"question?.style?.inputStyle\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n (input)=\"onInputChange($event)\" />\n\n<input *ngIf=\"fromShengel\" \n [(ngModel)]=\"question.input\"\n type=\"text\" \n [readOnly]=\"readOnly\"\n class=\"she-line-input form-control\" \n [placeholder]=\"placeholder ? placeholder : '' \"\n [disabled]=\"disabled\"\n [style]=\"question?.style?.inputStyle\"\n (input)=\"onInputChange($event)\" />\n<!-- HA 19DEC23 For translation -->\n<span *ngIf=\"error\" class=\"error-msg\">{{question?.errorMessage}}*</span>\n", styles: [".form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomInputComponent, decorators: [{
type: Component,
args: [{ selector: 'app-custom-input', template: " <!-- HA 19DEC23 Included Style value from Salesforce -->\n <!-- HA 18-JAN-24 Added these classes for style, HA 31-JAN-24 Added ternary for style -->\n <!-- HA 02FEB24 question input will hold the value to display -->\n <!-- // VD 12Jun24 - readonly change-->\n <!-- RS 09DEC24 Changed keys--> \n <input *ngIf=\"!fromShengel\" type=\"text\" \n [(ngModel)]=\"question.input\" \n [ngClass]=\"ngClassValue\"\n class=\"she-line-input form-control\"\n [id]=\"idValue\"\n (focus)=\"focusEvent\"\n [readOnly]=\"readOnly\"\n [style.border-color]=\"error ? 'red !important' : ''\"\n [style]=\"question?.style?.inputStyle\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n (input)=\"onInputChange($event)\" />\n\n<input *ngIf=\"fromShengel\" \n [(ngModel)]=\"question.input\"\n type=\"text\" \n [readOnly]=\"readOnly\"\n class=\"she-line-input form-control\" \n [placeholder]=\"placeholder ? placeholder : '' \"\n [disabled]=\"disabled\"\n [style]=\"question?.style?.inputStyle\"\n (input)=\"onInputChange($event)\" />\n<!-- HA 19DEC23 For translation -->\n<span *ngIf=\"error\" class=\"error-msg\">{{question?.errorMessage}}*</span>\n", styles: [".form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"] }]
}], ctorParameters: () => [{ type: i1.ChangeService }, { type: i2.I18nService }, { type: i3.DataService }], propDecorators: { value: [{
type: Input
}], question: [{
type: Input
}], disabled: [{
type: Input
}], placeholder: [{
type: Input
}], error: [{
type: Input
}], fromShengel: [{
type: Input
}], readOnly: [{
type: Input
}], ngClassValue: [{
type: Input
}], idValue: [{
type: Input
}], focusEvent: [{
type: Input
}], inputValue: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1pbnB1dC9jdXN0b20taW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWlucHV0L2N1c3RvbS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBZ0IvRSxNQUFNLE9BQU8sb0JBQW9CO0lBZ0JYO0lBQXFDO0lBQWtDO0lBZmxGLEtBQUssQ0FBYyxDQUFDLGNBQWM7SUFDbEMsUUFBUSxDQUFVO0lBQ2xCLFFBQVEsR0FBWSxLQUFLLENBQUMsQ0FBQyx3QkFBd0I7SUFDbkQsV0FBVyxDQUFRO0lBQ25CLEtBQUssQ0FBSztJQUNWLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsUUFBUSxHQUFZLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtJQUUxRCxZQUFZLENBQUs7SUFDakIsT0FBTyxDQUFLO0lBQ1osVUFBVSxDQUFNO0lBQ2YsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFL0MsWUFBWSxDQUFlO0lBRTNCLFlBQW9CLGFBQTRCLEVBQVMsV0FBd0IsRUFBVSxXQUF3QjtRQUEvRixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDbkgsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixRQUFRO1FBQ04sOENBQThDO1FBQzlDLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxLQUFLLFFBQVE7Z0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUNyRixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFWixJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksYUFBYSxHQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQy9DLElBQUcsYUFBYSxDQUFDLFFBQVEsSUFBSSxhQUFhLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDO2lCQUFJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztZQUNELDRCQUE0QjtZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUMvRCxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNkLElBQUcsV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUM1QixxREFBcUQ7b0JBQ3JELElBQUcsV0FBVyxDQUFDLFFBQVEsSUFBSSxTQUFTLElBQUksV0FBVyxDQUFDLGNBQWMsSUFBSSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDckcsMENBQTBDO3dCQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUN0RixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLENBQUM7b0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ25FLENBQUM7WUFDSCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtJQUNWLENBQUM7SUFFRCxXQUFXO1FBQ1QsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFTO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQzt3R0FqRVUsb0JBQW9COzRGQUFwQixvQkFBb0IsaVZDaEJqQyw0dENBNEJBOzs0RkRaYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCO3NJQU1uQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VXcmFwcGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvY2hhbmdlV3JhcHBlcic7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xuaW1wb3J0IHsgRGVwZW5kZW5jeU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RlcGVuZGVuY3lNZXRhJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1pbnB1dC5jb21wb25lbnQuY3NzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBDdXN0b21JbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHZhbHVlOiBhbnkgfCBhbnlbXTsgLy8gaW5wdXQgdmFsdWVcbiAgQElucHV0KCkgcXVlc3Rpb246IFF1ZXN0aW9uXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7IC8vIGlucHV0IGRpc2FibGVkIG9yIG5vdFxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjpzdHJpbmc7XG4gIEBJbnB1dCgpIGVycm9yOmFueTtcbiAgQElucHV0KCkgZnJvbVNoZW5nZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZE9ubHkgOmJvb2xlYW4gPSBmYWxzZTsgLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZVxuXG4gIEBJbnB1dCgpIG5nQ2xhc3NWYWx1ZTphbnk7XG4gIEBJbnB1dCgpIGlkVmFsdWU6YW55O1xuICBASW5wdXQoKSBmb2N1c0V2ZW50OiBhbnk7XG4gIEBPdXRwdXQoKSBpbnB1dFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IFxuXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSwgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSwgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UpIHsgXG4gIH1cblxuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTaW5jZSB0aGUgaWRWYWx1ZSBob2xkcyB0aGUgUGFyZW50IFF1ZXN0aW9uXG4gICAgLy8gQVAtMjVNQVIyNSBQYXJzZSBzdWJUZXh0IGlmIGl0J3Mgbm90IGFscmVhZHkgYW4gb2JqZWN0XG4gICAgdGhpcy5xdWVzdGlvblsnc3ViVGV4dCddID0gXG4gICAgdHlwZW9mIHRoaXMucXVlc3Rpb24/LnN1YlRleHQgPT09ICdvYmplY3QnXG4gICAgICA/IHRoaXMucXVlc3Rpb24uc3ViVGV4dFxuICAgICAgOiAodHlwZW9mIHRoaXMucXVlc3Rpb25bJ3N1YlRleHQnXSA9PT0gJ3N0cmluZycgJiYgdGhpcy5xdWVzdGlvblsnc3ViVGV4dCddLnRyaW0oKSAhPT0gJycgXG4gICAgICAgICAgPyBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ3N1YlRleHQnXSkgXG4gICAgICAgICAgOiB7fSk7XG4gIFxuICAgIGlmKHRoaXMucXVlc3Rpb24uc3ViVGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgbGV0IGRlcGVuZGVuY3lPYmo6IGFueSA9IHRoaXMucXVlc3Rpb24uc3ViVGV4dDtcbiAgICAgIGlmKGRlcGVuZGVuY3lPYmouZGlzYWJsZWQgJiYgZGVwZW5kZW5jeU9iai5kaXNhYmxlZCA9PSBcImZhbHNlXCIpe1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICAvLyBTdWJzY3JpYmUgZm9yIHRoZSBjaGFuZ2VzXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcbiAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHN1YnNjcmlwdGlvbiBmb3IgdGhlIGNoYW5nZScpO1xuICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUudmFsdWVPYmogIT0gdW5kZWZpbmVkICYmIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09IGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCkge1xuICAgICAgICAgICAgICAvLyBWRCAyMEF1ZzI0IGhhbmRsaW5nIHRoZSBtdWx0aXBsZSBvYmplY3RcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoY2hhbmdlVmFsdWUudmFsdWVPYmosZGVwZW5kZW5jeU9iai52YWx1ZUZpZWxkKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlKCk6IHZvaWQge1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gcHJldmVudCBtZW1vcnkgbGVhayB3aGVuIGNvbXBvbmVudCBkZXN0cm95ZWRcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuICBcbiAgb25JbnB1dENoYW5nZShpbnB1dDphbnkpe1xuICAgIHRoaXMuaW5wdXRWYWx1ZS5lbWl0KGlucHV0LnRhcmdldC52YWx1ZSk7XG4gIH1cbn1cbiIsIiA8IS0tIEhBIDE5REVDMjMgSW5jbHVkZWQgU3R5bGUgdmFsdWUgZnJvbSBTYWxlc2ZvcmNlIC0tPlxuICA8IS0tIEhBIDE4LUpBTi0yNCBBZGRlZCB0aGVzZSBjbGFzc2VzIGZvciBzdHlsZSwgSEEgMzEtSkFOLTI0IEFkZGVkIHRlcm5hcnkgZm9yIHN0eWxlIC0tPlxuICA8IS0tIEhBIDAyRkVCMjQgcXVlc3Rpb24gaW5wdXQgd2lsbCBob2xkIHRoZSB2YWx1ZSB0byBkaXNwbGF5IC0tPlxuICA8IS0tIC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UtLT5cbiAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPiBcbiAgPGlucHV0ICpuZ0lmPVwiIWZyb21TaGVuZ2VsXCIgdHlwZT1cInRleHRcIiBcbiAgICAgICBbKG5nTW9kZWwpXT1cInF1ZXN0aW9uLmlucHV0XCIgXG4gICAgICAgW25nQ2xhc3NdPVwibmdDbGFzc1ZhbHVlXCJcbiAgICAgICBjbGFzcz1cInNoZS1saW5lLWlucHV0IGZvcm0tY29udHJvbFwiXG4gICAgICAgW2lkXT1cImlkVmFsdWVcIlxuICAgICAgIChmb2N1cyk9XCJmb2N1c0V2ZW50XCJcbiAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgIFtzdHlsZS5ib3JkZXItY29sb3JdPVwiZXJyb3IgPyAncmVkICFpbXBvcnRhbnQnIDogJydcIlxuICAgICAgIFtzdHlsZV09XCJxdWVzdGlvbj8uc3R5bGU/LmlucHV0U3R5bGVcIlxuICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogJydcIlxuICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIiAvPlxuXG48aW5wdXQgKm5nSWY9XCJmcm9tU2hlbmdlbFwiIFxuICAgICAgIFsobmdNb2RlbCldPVwicXVlc3Rpb24uaW5wdXRcIlxuICAgICAgIHR5cGU9XCJ0ZXh0XCIgXG4gICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgICBjbGFzcz1cInNoZS1saW5lLWlucHV0IGZvcm0tY29udHJvbFwiIFxuICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogJycgXCJcbiAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgIFtzdHlsZV09XCJxdWVzdGlvbj8uc3R5bGU/LmlucHV0U3R5bGVcIlxuICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIiAvPlxuPCEtLSBIQSAxOURFQzIzIEZvciB0cmFuc2xhdGlvbiAtLT5cbjxzcGFuICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImVycm9yLW1zZ1wiPnt7cXVlc3Rpb24/LmVycm9yTWVzc2FnZX19Kjwvc3Bhbj5cbiJdfQ==