UNPKG

survey-angular-ui

Version:

survey.js is a JavaScript Survey Library. It is a modern way to add a survey to your website. It uses JSON for survey metadata and results.

118 lines 21.6 kB
import { Component, Input, ViewChild } from "@angular/core"; import { BaseAngular } from "../base-angular"; import { getComponentName } from "../question"; import * as i0 from "@angular/core"; import * as i1 from "../components/matrix-actions/drag-drop-icon/drag-drop-icon"; import * as i2 from "../components/action-bar/action-bar.component"; import * as i3 from "../errors.component"; import * as i4 from "../survey-string.component"; import * as i5 from "./matrixrequiredheader.component"; import * as i6 from "./selectbase-item"; import * as i7 from "../comment-other.component"; import * as i8 from "@angular/common"; import * as i9 from "../utils/dynamic.directive"; import * as i10 from "../utils/ng-show.directive"; export class MatrixDropdownCellComponent extends BaseAngular { getModel() { if (this.cell.hasQuestion) { return this.cell.question; } if (!!this.cell.column) { return this.cell.column; } return null; } get row() { return this.cell.row; } ngDoCheck() { var _a; super.ngDoCheck(); if (this.cell.isErrorsCell && ((_a = this.cell) === null || _a === void 0 ? void 0 : _a.question)) { this.cell.question.registerFunctionOnPropertiesValueChanged(["errors", "visible"], () => { this.update(); }, "__ngSubscription"); } } get panelComponentName() { const panel = this.cell.panel; const survey = panel.survey; if (!!survey) { const name = survey.getElementWrapperComponentName(panel); if (!!name) { return name; } } return "panel"; } get panelComponentData() { const panel = this.cell.panel; const survey = panel.survey; let data; if (!!survey) { data = survey.getElementWrapperComponentData(panel); } return { componentName: "panel", componentData: { model: panel, data: data } }; } getComponentName(element) { return getComponentName(element); } getCellStyle() { if (!!this.cell.width || !!this.cell.minWidth) return { width: this.cell.width, minWidth: this.cell.minWidth }; return null; } get isRequiredCell() { return !!this.cell.column && this.cell.column.isRenderedRequired; } ngAfterViewInit() { var _a; if (!this.cell.hasQuestion || !this.question || !this.question.survey) return; const el = (_a = this.cellContainer) === null || _a === void 0 ? void 0 : _a.nativeElement; if (el) { const cellQ = this.cell.question; var options = { cell: this.cell.cell, cellQuestion: cellQ, htmlElement: el, row: this.cell.row, column: this.cell.cell.column, }; this.question.survey.matrixAfterCellRender(this.question, options); cellQ.afterRenderCore(el); } } ngOnDestroy() { var _a; super.ngOnDestroy(); if (this.cell.isErrorsCell && ((_a = this.cell) === null || _a === void 0 ? void 0 : _a.question)) { this.cell.question.unRegisterFunctionOnPropertiesValueChanged(["errors", "visible"], "__ngSubscription"); } } get canRender() { return this.question && this.question.survey && this.cell.isVisible; } } MatrixDropdownCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDropdownCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); MatrixDropdownCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixDropdownCellComponent, selector: "sv-ng-matrixdropdown-cell", inputs: { question: "question", cell: "cell" }, viewQueries: [{ propertyName: "cellContainer", first: true, predicate: ["cellContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <td [class]=\"cell.className\" *ngIf=\"canRender\" [title]=\"cell.getTitle()\"\n [style]=\"getCellStyle()\" [attr.colspan]=\"cell.colSpans\" (focusin)=\"cell.focusIn()\" #cellContainer>\n <sv-ng-matrix-drag-drop-icon *ngIf=\"cell.isDragHandlerCell\"\n [model]=\"$any({ data: { row: row, question: question } })\"></sv-ng-matrix-drag-drop-icon>\n <sv-action-bar *ngIf=\"cell.isActionsCell\" [model]=\"cell.item.getData()\" [handleClick]=\"false\"></sv-action-bar>\n <ng-container *ngIf=\"cell.hasPanel\">\n <ng-template [component]=\"{ name: panelComponentName, data: panelComponentData }\"></ng-template>\n </ng-container>\n <div *ngIf=\"cell.isErrorsCell && cell.question?.hasVisibleErrors\" [element]=\"cell.question\" sv-ng-errors></div>\n <span *ngIf=\"cell.showResponsiveTitle\" [class]=\"cell.responsiveTitleCss\">\n <sv-ng-string [model]=\"cell.responsiveLocTitle\"></sv-ng-string>\n <sv-ng-matrixheaderrequired [column]=\"cell.column\" [question]=\"cell.matrix\">\n </sv-ng-matrixheaderrequired>\n </span>\n <div *ngIf=\"cell.hasQuestion\" [class]=\"cell.cellQuestionWrapperClassName\"\n [visible]=\"cell.question.isVisible\">\n <ng-container *ngIf=\"!cell.isChoice && cell.question.isDefaultRendering()\">\n <ng-template\n [component]=\"{ name: question.getCellWrapperComponentName(cell.cell), data: { componentData: question.getCellWrapperComponentData(cell.cell)} }\">\n <ng-template\n [component]=\"{ name: getComponentName(cell.question), data: { model: cell.question } }\"></ng-template>\n </ng-template>\n </ng-container>\n <ng-template *ngIf=\"!cell.isChoice && !cell.question.isDefaultRendering()\"\n [component]=\"{ name: cell.question.getComponentName(), data: { model: cell.question } }\">\n </ng-template>\n <ng-container *ngIf=\"cell.isItemChoice\">\n <ng-template\n [component]=\"{ name: question.getCellWrapperComponentName(cell.cell), data: { componentData: question.getCellWrapperComponentData(cell.cell)} }\">\n <sv-ng-selebase-item [showLabel]=\"false\" [inputType]=\"cell.isCheckbox ? 'checkbox': 'radio'\"\n [question]=\"cell.question\" [model]=\"cell.item\"></sv-ng-selebase-item>\n </ng-template>\n </ng-container>\n <div *ngIf=\"cell.isOtherChoice\" [class]=\"cell.question.getCommentAreaCss(true)\" [question]=\"cell.question\"\n sv-ng-comment-other></div>\n </div>\n <ng-container *ngIf=\"cell.hasTitle\">\n <ng-template\n [component]=\"{ name: question.getCellWrapperComponentName($any(cell)), data: { componentData: question.getCellWrapperComponentData($any(cell))} }\">\n <sv-ng-string [model]=\"cell.locTitle\"></sv-ng-string>\n <span *ngIf=\"isRequiredCell\" [class]=\"question.cssClasses.cellRequiredMark\">{{ cell.requiredMark }}</span>\n </ng-template>\n </ng-container>\n </td>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: i1.MatrixDynamicDragDropIconComponent, selector: "sv-ng-matrix-drag-drop-icon", inputs: ["model"] }, { type: i2.ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: i3.ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: ["element", "location"] }, { type: i4.SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: i5.MatrixRequiredHeader, selector: "sv-ng-matrixheaderrequired", inputs: ["column", "question"] }, { type: i6.SelectBaseItemComponent, selector: "['sv-ng-selectbase-item'], sv-ng-selebase-item", inputs: ["question", "model", "inputType", "showLabel"] }, { type: i7.SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.DynamicComponentDirective, selector: "[component]", inputs: ["component"] }, { type: i10.VisibleDirective, selector: "[visible]", inputs: ["visible"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDropdownCellComponent, decorators: [{ type: Component, args: [{ selector: "sv-ng-matrixdropdown-cell", templateUrl: "./matrixdropdowncell.component.html", styles: [":host { display: none; }"] }] }], propDecorators: { question: [{ type: Input }], cell: [{ type: Input }], cellContainer: [{ type: ViewChild, args: ["cellContainer"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cml4ZHJvcGRvd25jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9xdWVzdGlvbnMvbWF0cml4ZHJvcGRvd25jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9xdWVzdGlvbnMvbWF0cml4ZHJvcGRvd25jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFROUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7QUFPL0MsTUFBTSxPQUFPLDJCQUE0QixTQUFRLFdBQXFCO0lBS3BFLFFBQVE7UUFDTixJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDM0I7UUFDRCxJQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxJQUFXLENBQUM7SUFDckIsQ0FBQztJQUNELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUNlLFNBQVM7O1FBQ3ZCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQixJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFJLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsUUFBUSxDQUFBLEVBQUU7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFD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QUksQ0FBQyxZQUFZLEtBQUksTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxRQUFRLENBQUEsRUFBRTtZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1NBQ3pHO0lBQ0gsQ0FBQztJQUNELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDdEUsQ0FBQzs7eUhBckZVLDJCQUEyQjs2R0FBM0IsMkJBQTJCLHdQQ2hCeEMsdTdGQTZDYzs0RkQ3QkQsMkJBQTJCO2tCQUx2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFdBQVcsRUFBRSxxQ0FBcUM7b0JBQ2xELE1BQU0sRUFBRSxDQUFDLDBCQUEwQixDQUFDO2lCQUNyQzs4QkFFVSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFc0IsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJhc2VBbmd1bGFyIH0gZnJvbSBcIi4uL2Jhc2UtYW5ndWxhclwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb24sXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGdldENvbXBvbmVudE5hbWUgfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInN2LW5nLW1hdHJpeGRyb3Bkb3duLWNlbGxcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9tYXRyaXhkcm9wZG93bmNlbGwuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVzOiBbXCI6aG9zdCB7IGRpc3BsYXk6IG5vbmU7IH1cIl1cbn0pXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25DZWxsQ29tcG9uZW50IGV4dGVuZHMgQmFzZUFuZ3VsYXI8UXVlc3Rpb24+IHtcbiAgQElucHV0KCkgcXVlc3Rpb24hOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xuICBASW5wdXQoKSBjZWxsITogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbDtcblxuICBAVmlld0NoaWxkKFwiY2VsbENvbnRhaW5lclwiKSBjZWxsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIGdldE1vZGVsKCkge1xuICAgIGlmKHRoaXMuY2VsbC5oYXNRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuY2VsbC5xdWVzdGlvbjtcbiAgICB9XG4gICAgaWYoISF0aGlzLmNlbGwuY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZWxsLmNvbHVtbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGwgYXMgYW55O1xuICB9XG4gIHB1YmxpYyBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsLnJvdztcbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGUgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLm5nRG9DaGVjaygpO1xuICAgIGlmKHRoaXMuY2VsbC5pc0Vycm9yc0NlbGwgJiYgdGhpcy5jZWxsPy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5jZWxsLnF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoW1wiZXJyb3JzXCIsIFwidmlzaWJsZVwiXSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgfSwgXCJfX25nU3Vic2NyaXB0aW9uXCIpXG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWxDb21wb25lbnROYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLmNlbGwucGFuZWw7XG4gICAgY29uc3Qgc3VydmV5ID0gPFN1cnZleU1vZGVsPnBhbmVsLnN1cnZleTtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgY29uc3QgbmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUocGFuZWwpO1xuICAgICAgaWYoISFuYW1lKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJwYW5lbFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWxDb21wb25lbnREYXRhKCk6IGFueSB7XG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLmNlbGwucGFuZWw7XG4gICAgY29uc3Qgc3VydmV5ID0gPFN1cnZleU1vZGVsPnBhbmVsLnN1cnZleTtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIGlmKCEhc3VydmV5KSB7XG4gICAgICBkYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShwYW5lbCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjb21wb25lbnROYW1lOiBcInBhbmVsXCIsXG4gICAgICBjb21wb25lbnREYXRhOiB7XG4gICAgICAgIG1vZGVsOiBwYW5lbCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7IHJldHVybiBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQpOyB9XG4gIGdldENlbGxTdHlsZSgpIHtcbiAgICBpZiAoISF0aGlzLmNlbGwud2lkdGggfHwgISF0aGlzLmNlbGwubWluV2lkdGgpXG4gICAgICByZXR1cm4geyB3aWR0aDogdGhpcy5jZWxsLndpZHRoLCBtaW5XaWR0aDogdGhpcy5jZWxsLm1pbldpZHRoIH07XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkQ2VsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNlbGwuY29sdW1uICYmIHRoaXMuY2VsbC5jb2x1bW4uaXNSZW5kZXJlZFJlcXVpcmVkO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuY2VsbC5oYXNRdWVzdGlvbiB8fCAhdGhpcy5xdWVzdGlvbiB8fCAhdGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2VsbENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZihlbCkge1xuICAgICAgY29uc3QgY2VsbFEgPSB0aGlzLmNlbGwucXVlc3Rpb247XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLmNlbGwsXG4gICAgICAgIGNlbGxRdWVzdGlvbjogY2VsbFEsXG4gICAgICAgIGh0bWxFbGVtZW50OiBlbCxcbiAgICAgICAgcm93OiB0aGlzLmNlbGwucm93LFxuICAgICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5tYXRyaXhBZnRlckNlbGxSZW5kZXIodGhpcy5xdWVzdGlvbiwgb3B0aW9ucyk7XG4gICAgICBjZWxsUS5hZnRlclJlbmRlckNvcmUoZWwpO1xuICAgIH1cbiAgfVxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIGlmKHRoaXMuY2VsbC5pc0Vycm9yc0NlbGwgJiYgdGhpcy5jZWxsPy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5jZWxsLnF1ZXN0aW9uLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChbXCJlcnJvcnNcIiwgXCJ2aXNpYmxlXCJdLCBcIl9fbmdTdWJzY3JpcHRpb25cIikgICAgXG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgY2FuUmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uICYmIHRoaXMucXVlc3Rpb24uc3VydmV5ICYmIHRoaXMuY2VsbC5pc1Zpc2libGU7XG4gIH1cbn0iLCI8bmctdGVtcGxhdGUgI3RlbXBsYXRlPlxuICA8dGQgW2NsYXNzXT1cImNlbGwuY2xhc3NOYW1lXCIgKm5nSWY9XCJjYW5SZW5kZXJcIiBbdGl0bGVdPVwiY2VsbC5nZXRUaXRsZSgpXCJcbiAgICBbc3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKClcIiBbYXR0ci5jb2xzcGFuXT1cImNlbGwuY29sU3BhbnNcIiAoZm9jdXNpbik9XCJjZWxsLmZvY3VzSW4oKVwiICNjZWxsQ29udGFpbmVyPlxuICAgIDxzdi1uZy1tYXRyaXgtZHJhZy1kcm9wLWljb24gKm5nSWY9XCJjZWxsLmlzRHJhZ0hhbmRsZXJDZWxsXCJcbiAgICAgIFttb2RlbF09XCIkYW55KHsgZGF0YTogeyByb3c6IHJvdywgcXVlc3Rpb246IHF1ZXN0aW9uIH0gfSlcIj48L3N2LW5nLW1hdHJpeC1kcmFnLWRyb3AtaWNvbj5cbiAgICA8c3YtYWN0aW9uLWJhciAqbmdJZj1cImNlbGwuaXNBY3Rpb25zQ2VsbFwiIFttb2RlbF09XCJjZWxsLml0ZW0uZ2V0RGF0YSgpXCIgW2hhbmRsZUNsaWNrXT1cImZhbHNlXCI+PC9zdi1hY3Rpb24tYmFyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsLmhhc1BhbmVsXCI+XG4gICAgICA8bmctdGVtcGxhdGUgW2NvbXBvbmVudF09XCJ7IG5hbWU6IHBhbmVsQ29tcG9uZW50TmFtZSwgZGF0YTogcGFuZWxDb21wb25lbnREYXRhIH1cIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgKm5nSWY9XCJjZWxsLmlzRXJyb3JzQ2VsbCAmJiBjZWxsLnF1ZXN0aW9uPy5oYXNWaXNpYmxlRXJyb3JzXCIgW2VsZW1lbnRdPVwiY2VsbC5xdWVzdGlvblwiIHN2LW5nLWVycm9ycz48L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cImNlbGwuc2hvd1Jlc3BvbnNpdmVUaXRsZVwiIFtjbGFzc109XCJjZWxsLnJlc3BvbnNpdmVUaXRsZUNzc1wiPlxuICAgICAgPHN2LW5nLXN0cmluZyBbbW9kZWxdPVwiY2VsbC5yZXNwb25zaXZlTG9jVGl0bGVcIj48L3N2LW5nLXN0cmluZz5cbiAgICAgIDxzdi1uZy1tYXRyaXhoZWFkZXJyZXF1aXJlZCBbY29sdW1uXT1cImNlbGwuY29sdW1uXCIgW3F1ZXN0aW9uXT1cImNlbGwubWF0cml4XCI+XG4gICAgICA8L3N2LW5nLW1hdHJpeGhlYWRlcnJlcXVpcmVkPlxuICAgIDwvc3Bhbj5cbiAgICA8ZGl2ICpuZ0lmPVwiY2VsbC5oYXNRdWVzdGlvblwiIFtjbGFzc109XCJjZWxsLmNlbGxRdWVzdGlvbldyYXBwZXJDbGFzc05hbWVcIlxuICAgICAgW3Zpc2libGVdPVwiY2VsbC5xdWVzdGlvbi5pc1Zpc2libGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2VsbC5pc0Nob2ljZSAmJiBjZWxsLnF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgIFtjb21wb25lbnRdPVwieyBuYW1lOiBxdWVzdGlvbi5nZXRDZWxsV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbC5jZWxsKSwgZGF0YTogeyBjb21wb25lbnREYXRhOiBxdWVzdGlvbi5nZXRDZWxsV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbC5jZWxsKX0gfVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW2NvbXBvbmVudF09XCJ7IG5hbWU6IGdldENvbXBvbmVudE5hbWUoY2VsbC5xdWVzdGlvbiksIGRhdGE6IHsgbW9kZWw6IGNlbGwucXVlc3Rpb24gfSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIWNlbGwuaXNDaG9pY2UgJiYgIWNlbGwucXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcIlxuICAgICAgICBbY29tcG9uZW50XT1cInsgbmFtZTogY2VsbC5xdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksIGRhdGE6IHsgbW9kZWw6IGNlbGwucXVlc3Rpb24gfSB9XCI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGwuaXNJdGVtQ2hvaWNlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgIFtjb21wb25lbnRdPVwieyBuYW1lOiBxdWVzdGlvbi5nZXRDZWxsV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbC5jZWxsKSwgZGF0YTogeyBjb21wb25lbnREYXRhOiBxdWVzdGlvbi5nZXRDZWxsV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbC5jZWxsKX0gfVwiPlxuICAgICAgICAgIDxzdi1uZy1zZWxlYmFzZS1pdGVtIFtzaG93TGFiZWxdPVwiZmFsc2VcIiBbaW5wdXRUeXBlXT1cImNlbGwuaXNDaGVja2JveCA/ICdjaGVja2JveCc6ICdyYWRpbydcIlxuICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImNlbGwucXVlc3Rpb25cIiBbbW9kZWxdPVwiY2VsbC5pdGVtXCI+PC9zdi1uZy1zZWxlYmFzZS1pdGVtPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2VsbC5pc090aGVyQ2hvaWNlXCIgW2NsYXNzXT1cImNlbGwucXVlc3Rpb24uZ2V0Q29tbWVudEFyZWFDc3ModHJ1ZSlcIiBbcXVlc3Rpb25dPVwiY2VsbC5xdWVzdGlvblwiXG4gICAgICAgIHN2LW5nLWNvbW1lbnQtb3RoZXI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGwuaGFzVGl0bGVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbY29tcG9uZW50XT1cInsgbmFtZTogcXVlc3Rpb24uZ2V0Q2VsbFdyYXBwZXJDb21wb25lbnROYW1lKCRhbnkoY2VsbCkpLCBkYXRhOiB7IGNvbXBvbmVudERhdGE6IHF1ZXN0aW9uLmdldENlbGxXcmFwcGVyQ29tcG9uZW50RGF0YSgkYW55KGNlbGwpKX0gfVwiPlxuICAgICAgICA8c3Ytbmctc3RyaW5nIFttb2RlbF09XCJjZWxsLmxvY1RpdGxlXCI+PC9zdi1uZy1zdHJpbmc+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZXF1aXJlZENlbGxcIiBbY2xhc3NdPVwicXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsUmVxdWlyZWRNYXJrXCI+e3sgY2VsbC5yZXF1aXJlZE1hcmsgfX08L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3RkPlxuPC9uZy10ZW1wbGF0ZT4iXX0=