stimulsoft-forms
Version:
Stimulsoft PDF Forms
197 lines • 19.7 kB
JavaScript
import { Component, Input } from "@angular/core";
import { StiLabelElement } from "../../../../elements/StiLabelElement";
import { StiTableElement } from "../../../../elements/StiTableElement";
import { StiTotalsFieldItem } from "../../../../elements/table/StiTotalsFieldItem";
import { StiSingleSelectionElement } from "../../../../elements/StiSingleSelectionElement";
import { StiMultipleSelectionElement } from "../../../../elements/StiMultipleSelectionElement";
import * as i0 from "@angular/core";
import * as i1 from "../../../../services/model.service";
import * as i2 from "../../../../services/sti-helper.service";
import * as i3 from "../../../../services/theme.service";
import * as i4 from "../../../../services/sti-expression.service";
import * as i5 from "@angular/common";
import * as i6 from "@angular/forms";
import * as i7 from "../../../../directives/sti-input-text.directive";
export class StiTextEditorComponent {
constructor(model, helper, theme, expressionService) {
this.model = model;
this.helper = helper;
this.theme = theme;
this.expressionService = expressionService;
}
ngOnInit() { }
get haveExpression() {
return (this.model.selectedComponent?.element instanceof StiLabelElement &&
this.property.property == "text.value") ||
(this.model.selectedComponent?.element instanceof StiTableElement && this.property.property == "expression")
? true
: false;
}
setInfo() {
if (this.object instanceof StiLabelElement) {
this.model.currentExpressionInfo = 3;
}
else if (this.object instanceof StiTotalsFieldItem) {
this.model.currentExpressionInfo = 2;
}
else {
this.model.currentExpressionInfo = 1;
}
this.expressionService.currentSelectedObject = this.object;
this.model.showExpressionEditor = true;
}
get content() {
return this.helper.getProperty(this.object, this.property.property);
}
set content(value) {
if (this.property.property == "customOptionText") {
if (this.object instanceof StiSingleSelectionElement) {
if (this.object.selectedOption == this.object.customOptionText) {
this.object.selectedOption = value;
}
}
else if (this.object instanceof StiMultipleSelectionElement) {
if (this.object.selectedOptions.indexOf(this.object?.customOptionText) >= 0) {
this.object.selectedOptions?.forEach((option) => {
if (this.object.options?.indexOf(option) == -1) {
this.object.selectedOptions?.splice(this.object.selectedOptions.indexOf(option), 1);
}
});
this.object.selectedOptions.push(value);
}
}
}
this.helper.setProperty(this.object, this.property.property, value);
this.model.formEvents.next({ name: "ValueChanged" });
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiTextEditorComponent, deps: [{ token: i1.StiModelService }, { token: i2.StiHelperService }, { token: i3.StiThemeService }, { token: i4.StiExpressionService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StiTextEditorComponent, selector: "sti-text-editor", inputs: { property: "property", object: "object", disabled: "disabled" }, ngImport: i0, template: `
<table class="sti-clear" [style]="{ width: '100%' }">
<tr *ngIf="property.property != 'font' && content.length >= 0">
<td colspan="7" [style.width]="'100%'">
<input
type="text"
stiInputText
[(ngModel)]="content"
class="{{ disabled ? 'disabled' : '' }}"
spellcheck="false"
[style]="{ width: '100%' }"
[attr.maxLength]="
property.property == 'this' && this.model.selectedComponent.element.maximum
? this.model.selectedComponent.element.maximum
: null
"
/>
</td>
<td *ngIf="haveExpression">
<div class="expression-image" (click)="setInfo()">
<img [src]="model.getImage('images.Properties.Expression.png')" />
</div>
</td>
</tr>
</table>
<style>
tr {
padding: 3px 0px 3px 0px;
}
td {
padding: 0;
}
.disabled {
background-color: lightgray;
pointer-events: none;
}
.expression-image {
height: 23.6px;
width: 23.6px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
border: 1px solid var(--inputBorder-color);
border-radius: 3px;
margin-left: 3px;
margin-right: 0px;
float: right;
}
img {
height: 16px;
width: 16px;
}
.expression-image:hover {
background-color: var(--hover-color);
}
</style>
`, isInline: true, styles: ["\n tr {\n padding: 3px 0px 3px 0px;\n }\n td {\n padding: 0;\n }\n .disabled {\n background-color: lightgray;\n pointer-events: none;\n }\n .expression-image {\n height: 23.6px;\n width: 23.6px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: 1px solid var(--inputBorder-color);\n border-radius: 3px;\n margin-left: 3px;\n margin-right: 0px;\n float: right;\n }\n img {\n height: 16px;\n width: 16px;\n }\n .expression-image:hover {\n background-color: var(--hover-color);\n }\n "], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.StiInputTextDirective, selector: "[stiInputText]" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiTextEditorComponent, decorators: [{
type: Component,
args: [{
selector: "sti-text-editor",
template: `
<table class="sti-clear" [style]="{ width: '100%' }">
<tr *ngIf="property.property != 'font' && content.length >= 0">
<td colspan="7" [style.width]="'100%'">
<input
type="text"
stiInputText
[(ngModel)]="content"
class="{{ disabled ? 'disabled' : '' }}"
spellcheck="false"
[style]="{ width: '100%' }"
[attr.maxLength]="
property.property == 'this' && this.model.selectedComponent.element.maximum
? this.model.selectedComponent.element.maximum
: null
"
/>
</td>
<td *ngIf="haveExpression">
<div class="expression-image" (click)="setInfo()">
<img [src]="model.getImage('images.Properties.Expression.png')" />
</div>
</td>
</tr>
</table>
<style>
tr {
padding: 3px 0px 3px 0px;
}
td {
padding: 0;
}
.disabled {
background-color: lightgray;
pointer-events: none;
}
.expression-image {
height: 23.6px;
width: 23.6px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
border: 1px solid var(--inputBorder-color);
border-radius: 3px;
margin-left: 3px;
margin-right: 0px;
float: right;
}
img {
height: 16px;
width: 16px;
}
.expression-image:hover {
background-color: var(--hover-color);
}
</style>
`,
}]
}], ctorParameters: () => [{ type: i1.StiModelService }, { type: i2.StiHelperService }, { type: i3.StiThemeService }, { type: i4.StiExpressionService }], propDecorators: { property: [{
type: Input
}], object: [{
type: Input
}], disabled: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLXRleHQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0aW11bHNvZnQtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3Byb3BlcnR5R3JpZC9lZGl0b3JzL3N0aS10ZXh0LWVkaXRvci9zdGktdGV4dC1lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFNbkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7OztBQStEL0YsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNTLEtBQXNCLEVBQ3RCLE1BQXdCLEVBQ3hCLEtBQXNCLEVBQ3RCLGlCQUF1QztRQUh2QyxVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN4QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO0lBQzdDLENBQUM7SUFFSixRQUFRLEtBQVUsQ0FBQztJQUVuQixJQUFXLGNBQWM7UUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxZQUFZLGVBQWU7WUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDO1lBQ3ZDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFB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QUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RFQ7aUJBQ0Y7b0xBRVUsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN0aUxhYmVsRWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi8uLi9lbGVtZW50cy9TdGlMYWJlbEVsZW1lbnRcIjtcclxuaW1wb3J0IHsgU3RpVGFibGVFbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2VsZW1lbnRzL1N0aVRhYmxlRWxlbWVudFwiO1xyXG5pbXBvcnQgeyBTdGlUb3RhbHNGaWVsZEl0ZW0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vZWxlbWVudHMvdGFibGUvU3RpVG90YWxzRmllbGRJdGVtXCI7XHJcbmltcG9ydCB7IFN0aU1vZGVsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9tb2RlbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0aUVkaXRvclByb3BlcnR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL29iamVjdHNcIjtcclxuaW1wb3J0IHsgU3RpRXhwcmVzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvc3RpLWV4cHJlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3N0aS1oZWxwZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGlUaGVtZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGlTaW5nbGVTZWxlY3Rpb25FbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2VsZW1lbnRzL1N0aVNpbmdsZVNlbGVjdGlvbkVsZW1lbnRcIjtcclxuaW1wb3J0IHsgU3RpTXVsdGlwbGVTZWxlY3Rpb25FbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2VsZW1lbnRzL1N0aU11bHRpcGxlU2VsZWN0aW9uRWxlbWVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic3RpLXRleHQtZWRpdG9yXCIsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDx0YWJsZSBjbGFzcz1cInN0aS1jbGVhclwiIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiPlxyXG4gICAgICA8dHIgKm5nSWY9XCJwcm9wZXJ0eS5wcm9wZXJ0eSAhPSAnZm9udCcgJiYgY29udGVudC5sZW5ndGggPj0gMFwiPlxyXG4gICAgICAgIDx0ZCBjb2xzcGFuPVwiN1wiIFtzdHlsZS53aWR0aF09XCInMTAwJSdcIj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIHN0aUlucHV0VGV4dFxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbnRlbnRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInt7IGRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnIH19XCJcclxuICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCJcclxuICAgICAgICAgICAgW2F0dHIubWF4TGVuZ3RoXT1cIlxyXG4gICAgICAgICAgICAgIHByb3BlcnR5LnByb3BlcnR5ID09ICd0aGlzJyAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50LmVsZW1lbnQubWF4aW11bVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50LmVsZW1lbnQubWF4aW11bVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkICpuZ0lmPVwiaGF2ZUV4cHJlc3Npb25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHByZXNzaW9uLWltYWdlXCIgKGNsaWNrKT1cInNldEluZm8oKVwiPlxyXG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwibW9kZWwuZ2V0SW1hZ2UoJ2ltYWdlcy5Qcm9wZXJ0aWVzLkV4cHJlc3Npb24ucG5nJylcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICA8c3R5bGU+XHJcbiAgICAgIHRyIHtcclxuICAgICAgICBwYWRkaW5nOiAzcHggMHB4IDNweCAwcHg7XHJcbiAgICAgIH1cclxuICAgICAgdGQge1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgIH1cclxuICAgICAgLmRpc2FibGVkIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyYXk7XHJcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgICAgLmV4cHJlc3Npb24taW1hZ2Uge1xyXG4gICAgICAgIGhlaWdodDogMjMuNnB4O1xyXG4gICAgICAgIHdpZHRoOiAyMy42cHg7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pbnB1dEJvcmRlci1jb2xvcik7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7XHJcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIGltZyB7XHJcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xyXG4gICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICB9XHJcbiAgICAgIC5leHByZXNzaW9uLWltYWdlOmhvdmVyIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ob3Zlci1jb2xvcik7XHJcbiAgICAgIH1cclxuICAgIDwvc3R5bGU+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0aVRleHRFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHByb3BlcnR5OiBTdGlFZGl0b3JQcm9wZXJ0eTtcclxuICBASW5wdXQoKSBvYmplY3Q/OiBhbnk7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBtb2RlbDogU3RpTW9kZWxTZXJ2aWNlLFxyXG4gICAgcHVibGljIGhlbHBlcjogU3RpSGVscGVyU2VydmljZSxcclxuICAgIHB1YmxpYyB0aGVtZTogU3RpVGhlbWVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGV4cHJlc3Npb25TZXJ2aWNlOiBTdGlFeHByZXNzaW9uU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7fVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhdmVFeHByZXNzaW9uKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50IGluc3RhbmNlb2YgU3RpTGFiZWxFbGVtZW50ICYmXHJcbiAgICAgIHRoaXMucHJvcGVydHkucHJvcGVydHkgPT0gXCJ0ZXh0LnZhbHVlXCIpIHx8XHJcbiAgICAgICh0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50IGluc3RhbmNlb2YgU3RpVGFibGVFbGVtZW50ICYmIHRoaXMucHJvcGVydHkucHJvcGVydHkgPT0gXCJleHByZXNzaW9uXCIpXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuICBzZXRJbmZvKCkge1xyXG4gICAgaWYgKHRoaXMub2JqZWN0IGluc3RhbmNlb2YgU3RpTGFiZWxFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMubW9kZWwuY3VycmVudEV4cHJlc3Npb25JbmZvID0gMztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vYmplY3QgaW5zdGFuY2VvZiBTdGlUb3RhbHNGaWVsZEl0ZW0pIHtcclxuICAgICAgdGhpcy5tb2RlbC5jdXJyZW50RXhwcmVzc2lvbkluZm8gPSAyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RlbC5jdXJyZW50RXhwcmVzc2lvbkluZm8gPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHByZXNzaW9uU2VydmljZS5jdXJyZW50U2VsZWN0ZWRPYmplY3QgPSB0aGlzLm9iamVjdDtcclxuICAgIHRoaXMubW9kZWwuc2hvd0V4cHJlc3Npb25FZGl0b3IgPSB0cnVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIuZ2V0UHJvcGVydHkodGhpcy5vYmplY3QsIHRoaXMucHJvcGVydHkucHJvcGVydHkpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGNvbnRlbnQodmFsdWUpIHtcclxuICAgIGlmICh0aGlzLnByb3BlcnR5LnByb3BlcnR5ID09IFwiY3VzdG9tT3B0aW9uVGV4dFwiKSB7XHJcbiAgICAgIGlmICh0aGlzLm9iamVjdCBpbnN0YW5jZW9mIFN0aVNpbmdsZVNlbGVjdGlvbkVsZW1lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5vYmplY3Quc2VsZWN0ZWRPcHRpb24gPT0gdGhpcy5vYmplY3QuY3VzdG9tT3B0aW9uVGV4dCkge1xyXG4gICAgICAgICAgdGhpcy5vYmplY3Quc2VsZWN0ZWRPcHRpb24gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vYmplY3QgaW5zdGFuY2VvZiBTdGlNdWx0aXBsZVNlbGVjdGlvbkVsZW1lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5vYmplY3Quc2VsZWN0ZWRPcHRpb25zLmluZGV4T2YodGhpcy5vYmplY3Q/LmN1c3RvbU9wdGlvblRleHQpID49IDApIHtcclxuICAgICAgICAgIHRoaXMub2JqZWN0LnNlbGVjdGVkT3B0aW9ucz8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9iamVjdC5vcHRpb25zPy5pbmRleE9mKG9wdGlvbikgPT0gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9iamVjdC5zZWxlY3RlZE9wdGlvbnM/LnNwbGljZSh0aGlzLm9iamVjdC5zZWxlY3RlZE9wdGlvbnMuaW5kZXhPZihvcHRpb24pLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLm9iamVjdC5zZWxlY3RlZE9wdGlvbnMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlbHBlci5zZXRQcm9wZXJ0eSh0aGlzLm9iamVjdCwgdGhpcy5wcm9wZXJ0eS5wcm9wZXJ0eSwgdmFsdWUpO1xyXG4gICAgdGhpcy5tb2RlbC5mb3JtRXZlbnRzLm5leHQoeyBuYW1lOiBcIlZhbHVlQ2hhbmdlZFwiIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=