croco-html 3.0.7 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -57,6 +57,7 @@ export class VisualEditorComponent {
57
57
  this.showMarkUp = true;
58
58
  this.tags = [];
59
59
  this.videoPlayers = ExternalVideoPlayers;
60
+ this.selectedValue = null;
60
61
  this.ExternalVideoTagDataConsts = ExternalVideoTagDataConsts;
61
62
  this.HtmlRawTagDataConsts = HtmlRawTagDataConsts;
62
63
  this.ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;
@@ -66,6 +67,8 @@ export class VisualEditorComponent {
66
67
  this.rendered = new EventEmitter();
67
68
  this.bodyTags = [];
68
69
  this.saveBodyTags = [];
70
+ this.useCustomWidgetsButton = false;
71
+ this.useCustomWidgetsButton = this._options.useCustomWidgetsButton;
69
72
  }
70
73
  ngAfterViewInit() {
71
74
  this.rendered.emit(true);
@@ -73,7 +76,7 @@ export class VisualEditorComponent {
73
76
  ngAfterContentChecked() {
74
77
  this._cdref.detectChanges();
75
78
  }
76
- addTag() {
79
+ addTagClickHandler() {
77
80
  let tagDescription = this.tags
78
81
  .find(x => x.tag === this.selectedValue);
79
82
  let attrs = {};
@@ -114,7 +117,7 @@ export class VisualEditorComponent {
114
117
  attrs[CustomWidgetTagDataConsts.DataIdAttrName] = 'example-data-id';
115
118
  attrs[CustomWidgetTagDataConsts.WidgetIdAttrName] = 'example-widget-id';
116
119
  }
117
- else {
120
+ else if (tagDescription.tag === FileImageTagDataConsts.TagName) {
118
121
  attrs[FileImageTagDataConsts.FileIdAttrName] = null;
119
122
  }
120
123
  this.bodyTags.push({
@@ -127,7 +130,7 @@ export class VisualEditorComponent {
127
130
  this.recalculateHtml();
128
131
  }
129
132
  startAddingText(tag = '') {
130
- this.saveBodyTags = JSON.parse(JSON.stringify(this.bodyTags));
133
+ this.saveBodyTags = [...this.bodyTags];
131
134
  if (tag === 'text') {
132
135
  setTimeout(() => {
133
136
  this.textArea.nativeElement.focus();
@@ -142,7 +145,7 @@ export class VisualEditorComponent {
142
145
  }
143
146
  addTextTags() {
144
147
  let lines = this.text.split('\n');
145
- this.bodyTags = JSON.parse(JSON.stringify(this.saveBodyTags));
148
+ this.bodyTags = [...this.saveBodyTags];
146
149
  let tagDescription = this.textTagOptions?.find(x => x.tag === this.textTag);
147
150
  for (let i = 0; i < lines.length; i++) {
148
151
  if (lines[i].length > 0) {
@@ -162,7 +165,7 @@ export class VisualEditorComponent {
162
165
  this.loadingText = "Файлы загружаются на сервер";
163
166
  this.isLoading = true;
164
167
  }
165
- addTagCustom(tag) {
168
+ addTag(tag) {
166
169
  this.bodyTags.push(tag);
167
170
  this.recalculateHtml();
168
171
  }
@@ -197,6 +200,9 @@ export class VisualEditorComponent {
197
200
  this.selectedValue = data.tag;
198
201
  this.startAddingText(data.tag);
199
202
  }
203
+ customWidgetsClickHandler() {
204
+ this._options.customWidgetClickHandler(this);
205
+ }
200
206
  ngOnInit() {
201
207
  this.recalculateBodyTags();
202
208
  this.tags = DefaultTags.getTags();
@@ -210,7 +216,7 @@ export class VisualEditorComponent {
210
216
  return `align-${type}`;
211
217
  }
212
218
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: VisualEditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: CrocoHtmlOptionsToken }], target: i0.ɵɵFactoryTarget.Component }); }
213
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: VisualEditorComponent, isStandalone: true, selector: "croco-visual-editor", inputs: { showMarkUp: "showMarkUp", useHtmlRaw: "useHtmlRaw", html: "html" }, outputs: { html: "html", onHtmlChanged: "onHtmlChanged", rendered: "rendered" }, viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }], ngImport: i0, template: "@if (isLoading) {\n <div>\n <div>\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n <div style=\"text-align: center;\">{{loadingText}}</div>\n </div>\n <div style=\"height: 10px;\"></div>\n </div>\n}\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <div class=\"w-100\" style=\"margin-bottom: 22px\">\n <div class=\"tags\">\n @for (tag of tags; track tag) {\n <span class=\"tag-item\" (click)=\"selectTag(tag)\" [class.active]=\"selectedValue === tag.tag\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tag}\">\n </ng-container>\n </span>\n {{tag.displayValue}}\n </span>\n }\n </div>\n </div>\n </div>\n @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u043E\u043F\u043B\u0435\u0435\u0440</mat-label>\n <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n <mat-option [value]=\"videoPlayer.type\">\n {{videoPlayer.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430</mat-label>\n <input\n matInput\n placeholder=\"\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430\"\n [(ngModel)]=\"htmlRaw\"\n >\n </mat-form-field>\n </div>\n }\n }\n @if (selectedValue === HtmlRawTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\">\n <mat-label>\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"htmlRaw\"\n ></textarea>\n </mat-form-field>\n </div>\n }\n @if (selectedValue === 'text') {\n <div style=\"display: flex; justify-content: space-between; flex-wrap: wrap\">\n <div style=\"margin-bottom: 22px; overflow-x: auto;\">\n <mat-button-toggle-group\n [(ngModel)]=\"textTag\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of textTagOptions; track option) {\n <mat-button-toggle value=\"{{ option.tag }}\">\n {{ option.displayValue }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n\n <div style=\"margin-bottom: 22px\">\n <mat-button-toggle-group\n [(ngModel)]=\"alignment\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of alignmentOptions; track option) {\n <mat-button-toggle value=\"{{ option.value }}\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"textAlignToggleIcons\"\n [ngTemplateOutletContext]=\"{icon: option.value}\">\n </ng-container>\n </span>\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <mat-form-field class=\"w-100\">\n <mat-label>\u0422\u0435\u043A\u0441\u0442</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"text\"\n ></textarea>\n </mat-form-field>\n }\n <div class=\"col-12\">\n <button (click)=\"addTag()\" class=\"w-100\" mat-stroked-button>\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u0433\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <croco-html-add-files-btn (filesTagsReady)=\"filesTagsReadyHandler($event)\"\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" class=\"w-100\">\n </croco-html-add-files-btn>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (tag of bodyTags; track tag; let i = $index) {\n <div cdkDrag>\n <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between\">\n <div class=\"example-handle\" cdkDragHandle>\n <svg width=\"24\" height=\"24\" class=\"move-icon\">\n <use [attr.xlink:href]=\"'move-icon' | spriteIconPath\"></use>\n </svg>\n </div>\n <div>\n <div class=\"badge\" [matTooltip]=\"tag.tagDescription.tag\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tagDescription.tag}\">\n </ng-container>\n </span>\n </div>\n </div>\n </div>\n <div style=\"height: 15px;\"></div>\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagSavedHandler($event)\"\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\n </croco-html-main-editor-block>\n </mat-card-content>\n </mat-card>\n </div>\n }\n </div>\n</div>\n\n<ng-template #textAlignToggleIcons let-icon=\"icon\">\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setAlignButton(icon) | spriteIconPath\"></use>\n </svg>\n</ng-template>\n\n<ng-template #tagButtonIcons let-icon=\"icon\">\n @if (icon.indexOf('h') === 0 && icon.length === 2) {\n {{icon.toUpperCase()}}\n }\n @else {\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setTagButton(icon)| spriteIconPath\"></use>\n </svg>\n }\n</ng-template>\n\n\n\n\n\n\n", styles: [":host{--mat-standard-button-toggle-selected-state-background-color: #323E8B;--mat-standard-button-toggle-text-color: #323E8B;--mat-standard-button-toggle-selected-state-text-color: white;--mat-standard-button-toggle-height: 36px;--mat-standard-button-toggle-divider-color: #323E8B;--mdc-outlined-button-label-text-weight: 400;--mdc-outlined-button-label-text-color: #333333 !important;--mdc-outlined-button-container-shape: 30px;--mdc-outlined-button-outline-width: 2px;--mdc-outlined-button-container-height: 44px}:host ::ng-deep .mat-button-toggle-appearance-standard span.mat-button-toggle-label-content{padding:0 8px;min-width:36px}.text-align-icon,.mat-button-toggle .text-align-icon{color:#323e8b}.mat-button-toggle:hover,.mat-button-toggle:hover .text-align-icon{color:#747ebf}.mat-button-toggle-checked .text-align-icon{color:#fff}.example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.badge{width:44px;height:44px;border-radius:50%;border:1px solid #323E8B;display:flex;align-items:center;justify-content:center;color:#323e8b}.mat-card.special{border:1px solid #747EBF;border-radius:8px;box-shadow:none;margin:2px 2px 10px}.tags{display:flex;gap:10px;flex-wrap:wrap}.tag-item{display:flex;align-items:center;gap:5px;cursor:pointer;padding:10px 20px;border:1px solid #323E8B;border-radius:30px;background-color:#fff;color:#23262a;transition:.2s ease-in-out}.text-align-icon{color:#323e8b}.tag-item.active{background-color:#323e8b;color:#fff}.tag-item.active svg{color:#fff}.tag-item:hover{color:#747ebf;box-shadow:0 0 4px #747ebf}.tag-item:hover svg{color:#747ebf}@media (max-width: 760px){.tag-item:hover{color:inherit;box-shadow:none}.tag-item:hover svg{color:inherit}.tag-item:active{color:#747ebf;box-shadow:0 0 4px #747ebf}.tag-item:active svg{color:#747ebf}}.move-icon:hover{cursor:pointer;opacity:.7}.cdk-drag.cdk-drag-placeholder,.cdk-drag-preview{opacity:.5;transition:opacity .2s}.example-handle{color:#323e8b}\n"], dependencies: [{ kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: AddFilesBtnComponent, selector: "croco-html-add-files-btn", outputs: ["postFilesStarted", "filesTagsReady"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: MainEditorBlockComponent, selector: "croco-html-main-editor-block", inputs: ["tag"], outputs: ["onTagSaved", "onTagRemoved"] }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: SpriteIconPathPipe, name: "spriteIconPath" }] }); }
219
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: VisualEditorComponent, isStandalone: true, selector: "croco-visual-editor", inputs: { showMarkUp: "showMarkUp", useHtmlRaw: "useHtmlRaw", html: "html" }, outputs: { html: "html", onHtmlChanged: "onHtmlChanged", rendered: "rendered" }, viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }], ngImport: i0, template: "@if (isLoading) {\n <div>\n <div>\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n <div style=\"text-align: center;\">{{loadingText}}</div>\n </div>\n <div style=\"height: 10px;\"></div>\n </div>\n}\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <div class=\"w-100\" style=\"margin-bottom: 22px\">\n <div class=\"tags\">\n @for (tag of tags; track tag) {\n <span class=\"tag-item\" (click)=\"selectTag(tag)\" [class.active]=\"selectedValue === tag.tag\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tag}\">\n </ng-container>\n </span>\n {{tag.displayValue}}\n </span>\n }\n\n @if (useCustomWidgetsButton) {\n <span class=\"tag-item\" (click)=\"customWidgetsClickHandler()\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: 'custom-widget'}\">\n </ng-container>\n </span>\n \u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044B\n </span>\n }\n \n </div>\n </div>\n </div>\n @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u043E\u043F\u043B\u0435\u0435\u0440</mat-label>\n <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n <mat-option [value]=\"videoPlayer.type\">\n {{videoPlayer.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430</mat-label>\n <input\n matInput\n placeholder=\"\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430\"\n [(ngModel)]=\"htmlRaw\"\n >\n </mat-form-field>\n </div>\n }\n }\n @if (selectedValue === HtmlRawTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\">\n <mat-label>\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"htmlRaw\"\n ></textarea>\n </mat-form-field>\n </div>\n }\n @if (selectedValue === 'text') {\n <div style=\"display: flex; justify-content: space-between; flex-wrap: wrap\">\n <div style=\"margin-bottom: 22px; overflow-x: auto;\">\n <mat-button-toggle-group\n [(ngModel)]=\"textTag\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of textTagOptions; track option) {\n <mat-button-toggle value=\"{{ option.tag }}\">\n {{ option.displayValue }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n\n <div style=\"margin-bottom: 22px\">\n <mat-button-toggle-group\n [(ngModel)]=\"alignment\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of alignmentOptions; track option) {\n <mat-button-toggle value=\"{{ option.value }}\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"textAlignToggleIcons\"\n [ngTemplateOutletContext]=\"{icon: option.value}\">\n </ng-container>\n </span>\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <mat-form-field class=\"w-100\">\n <mat-label>\u0422\u0435\u043A\u0441\u0442</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"text\"\n ></textarea>\n </mat-form-field>\n }\n\n <div class=\"col-12\">\n <button (click)=\"addTagClickHandler()\" class=\"w-100\" mat-stroked-button>\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u0433\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <croco-html-add-files-btn (filesTagsReady)=\"filesTagsReadyHandler($event)\"\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" class=\"w-100\">\n </croco-html-add-files-btn>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (tag of bodyTags; track tag; let i = $index) {\n <div cdkDrag>\n <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between\">\n <div class=\"example-handle\" cdkDragHandle>\n <svg width=\"24\" height=\"24\" class=\"move-icon\">\n <use [attr.xlink:href]=\"'move-icon' | spriteIconPath\"></use>\n </svg>\n </div>\n <div>\n <div class=\"badge\" [matTooltip]=\"tag.tagDescription.tag\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tagDescription.tag}\">\n </ng-container>\n </span>\n </div>\n </div>\n </div>\n <div style=\"height: 15px;\"></div>\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagSavedHandler($event)\"\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\n </croco-html-main-editor-block>\n </mat-card-content>\n </mat-card>\n </div>\n }\n </div>\n</div>\n\n<ng-template #textAlignToggleIcons let-icon=\"icon\">\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setAlignButton(icon) | spriteIconPath\"></use>\n </svg>\n</ng-template>\n\n<ng-template #tagButtonIcons let-icon=\"icon\">\n @if (icon.indexOf('h') === 0 && icon.length === 2) {\n {{icon.toUpperCase()}}\n }\n @else {\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setTagButton(icon) | spriteIconPath\"></use>\n </svg>\n }\n</ng-template>", styles: [":host{--mat-standard-button-toggle-selected-state-background-color: #323E8B;--mat-standard-button-toggle-text-color: #323E8B;--mat-standard-button-toggle-selected-state-text-color: white;--mat-standard-button-toggle-height: 36px;--mat-standard-button-toggle-divider-color: #323E8B;--mdc-outlined-button-label-text-weight: 400;--mdc-outlined-button-label-text-color: #333333 !important;--mdc-outlined-button-container-shape: 30px;--mdc-outlined-button-outline-width: 2px;--mdc-outlined-button-container-height: 44px}:host ::ng-deep .mat-button-toggle-appearance-standard span.mat-button-toggle-label-content{padding:0 8px;min-width:36px}.text-align-icon,.mat-button-toggle .text-align-icon{color:#323e8b}.mat-button-toggle:hover,.mat-button-toggle:hover .text-align-icon{color:#747ebf}.mat-button-toggle-checked .text-align-icon{color:#fff}.example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.badge{width:44px;height:44px;border-radius:50%;border:1px solid #323E8B;display:flex;align-items:center;justify-content:center;color:#323e8b}.mat-card.special{border:1px solid #747EBF;border-radius:8px;box-shadow:none;margin:2px 2px 10px}.tags{display:flex;gap:10px;flex-wrap:wrap}.tag-item{display:flex;align-items:center;gap:5px;cursor:pointer;padding:10px 20px;border:1px solid #323E8B;border-radius:30px;background-color:#fff;color:#23262a;transition:.2s ease-in-out}.text-align-icon{color:#323e8b}.tag-item.active{background-color:#323e8b;color:#fff}.tag-item.active svg{color:#fff}.tag-item:hover{color:#747ebf;box-shadow:0 0 4px #747ebf}.tag-item:hover svg{color:#747ebf}@media (max-width: 760px){.tag-item:hover{color:inherit;box-shadow:none}.tag-item:hover svg{color:inherit}.tag-item:active{color:#747ebf;box-shadow:0 0 4px #747ebf}.tag-item:active svg{color:#747ebf}}.move-icon:hover{cursor:pointer;opacity:.7}.cdk-drag.cdk-drag-placeholder,.cdk-drag-preview{opacity:.5;transition:opacity .2s}.example-handle{color:#323e8b}\n"], dependencies: [{ kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: AddFilesBtnComponent, selector: "croco-html-add-files-btn", outputs: ["postFilesStarted", "filesTagsReady"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: MainEditorBlockComponent, selector: "croco-html-main-editor-block", inputs: ["tag"], outputs: ["onTagSaved", "onTagRemoved"] }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: SpriteIconPathPipe, name: "spriteIconPath" }] }); }
214
220
  }
215
221
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: VisualEditorComponent, decorators: [{
216
222
  type: Component,
@@ -236,7 +242,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
236
242
  NgTemplateOutlet,
237
243
  MatTooltip,
238
244
  SpriteIconPathPipe,
239
- ], template: "@if (isLoading) {\n <div>\n <div>\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n <div style=\"text-align: center;\">{{loadingText}}</div>\n </div>\n <div style=\"height: 10px;\"></div>\n </div>\n}\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <div class=\"w-100\" style=\"margin-bottom: 22px\">\n <div class=\"tags\">\n @for (tag of tags; track tag) {\n <span class=\"tag-item\" (click)=\"selectTag(tag)\" [class.active]=\"selectedValue === tag.tag\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tag}\">\n </ng-container>\n </span>\n {{tag.displayValue}}\n </span>\n }\n </div>\n </div>\n </div>\n @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u043E\u043F\u043B\u0435\u0435\u0440</mat-label>\n <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n <mat-option [value]=\"videoPlayer.type\">\n {{videoPlayer.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430</mat-label>\n <input\n matInput\n placeholder=\"\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430\"\n [(ngModel)]=\"htmlRaw\"\n >\n </mat-form-field>\n </div>\n }\n }\n @if (selectedValue === HtmlRawTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\">\n <mat-label>\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"htmlRaw\"\n ></textarea>\n </mat-form-field>\n </div>\n }\n @if (selectedValue === 'text') {\n <div style=\"display: flex; justify-content: space-between; flex-wrap: wrap\">\n <div style=\"margin-bottom: 22px; overflow-x: auto;\">\n <mat-button-toggle-group\n [(ngModel)]=\"textTag\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of textTagOptions; track option) {\n <mat-button-toggle value=\"{{ option.tag }}\">\n {{ option.displayValue }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n\n <div style=\"margin-bottom: 22px\">\n <mat-button-toggle-group\n [(ngModel)]=\"alignment\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of alignmentOptions; track option) {\n <mat-button-toggle value=\"{{ option.value }}\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"textAlignToggleIcons\"\n [ngTemplateOutletContext]=\"{icon: option.value}\">\n </ng-container>\n </span>\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <mat-form-field class=\"w-100\">\n <mat-label>\u0422\u0435\u043A\u0441\u0442</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"text\"\n ></textarea>\n </mat-form-field>\n }\n <div class=\"col-12\">\n <button (click)=\"addTag()\" class=\"w-100\" mat-stroked-button>\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u0433\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <croco-html-add-files-btn (filesTagsReady)=\"filesTagsReadyHandler($event)\"\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" class=\"w-100\">\n </croco-html-add-files-btn>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (tag of bodyTags; track tag; let i = $index) {\n <div cdkDrag>\n <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between\">\n <div class=\"example-handle\" cdkDragHandle>\n <svg width=\"24\" height=\"24\" class=\"move-icon\">\n <use [attr.xlink:href]=\"'move-icon' | spriteIconPath\"></use>\n </svg>\n </div>\n <div>\n <div class=\"badge\" [matTooltip]=\"tag.tagDescription.tag\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tagDescription.tag}\">\n </ng-container>\n </span>\n </div>\n </div>\n </div>\n <div style=\"height: 15px;\"></div>\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagSavedHandler($event)\"\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\n </croco-html-main-editor-block>\n </mat-card-content>\n </mat-card>\n </div>\n }\n </div>\n</div>\n\n<ng-template #textAlignToggleIcons let-icon=\"icon\">\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setAlignButton(icon) | spriteIconPath\"></use>\n </svg>\n</ng-template>\n\n<ng-template #tagButtonIcons let-icon=\"icon\">\n @if (icon.indexOf('h') === 0 && icon.length === 2) {\n {{icon.toUpperCase()}}\n }\n @else {\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setTagButton(icon)| spriteIconPath\"></use>\n </svg>\n }\n</ng-template>\n\n\n\n\n\n\n", styles: [":host{--mat-standard-button-toggle-selected-state-background-color: #323E8B;--mat-standard-button-toggle-text-color: #323E8B;--mat-standard-button-toggle-selected-state-text-color: white;--mat-standard-button-toggle-height: 36px;--mat-standard-button-toggle-divider-color: #323E8B;--mdc-outlined-button-label-text-weight: 400;--mdc-outlined-button-label-text-color: #333333 !important;--mdc-outlined-button-container-shape: 30px;--mdc-outlined-button-outline-width: 2px;--mdc-outlined-button-container-height: 44px}:host ::ng-deep .mat-button-toggle-appearance-standard span.mat-button-toggle-label-content{padding:0 8px;min-width:36px}.text-align-icon,.mat-button-toggle .text-align-icon{color:#323e8b}.mat-button-toggle:hover,.mat-button-toggle:hover .text-align-icon{color:#747ebf}.mat-button-toggle-checked .text-align-icon{color:#fff}.example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.badge{width:44px;height:44px;border-radius:50%;border:1px solid #323E8B;display:flex;align-items:center;justify-content:center;color:#323e8b}.mat-card.special{border:1px solid #747EBF;border-radius:8px;box-shadow:none;margin:2px 2px 10px}.tags{display:flex;gap:10px;flex-wrap:wrap}.tag-item{display:flex;align-items:center;gap:5px;cursor:pointer;padding:10px 20px;border:1px solid #323E8B;border-radius:30px;background-color:#fff;color:#23262a;transition:.2s ease-in-out}.text-align-icon{color:#323e8b}.tag-item.active{background-color:#323e8b;color:#fff}.tag-item.active svg{color:#fff}.tag-item:hover{color:#747ebf;box-shadow:0 0 4px #747ebf}.tag-item:hover svg{color:#747ebf}@media (max-width: 760px){.tag-item:hover{color:inherit;box-shadow:none}.tag-item:hover svg{color:inherit}.tag-item:active{color:#747ebf;box-shadow:0 0 4px #747ebf}.tag-item:active svg{color:#747ebf}}.move-icon:hover{cursor:pointer;opacity:.7}.cdk-drag.cdk-drag-placeholder,.cdk-drag-preview{opacity:.5;transition:opacity .2s}.example-handle{color:#323e8b}\n"] }]
245
+ ], template: "@if (isLoading) {\n <div>\n <div>\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n <div style=\"text-align: center;\">{{loadingText}}</div>\n </div>\n <div style=\"height: 10px;\"></div>\n </div>\n}\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <div class=\"w-100\" style=\"margin-bottom: 22px\">\n <div class=\"tags\">\n @for (tag of tags; track tag) {\n <span class=\"tag-item\" (click)=\"selectTag(tag)\" [class.active]=\"selectedValue === tag.tag\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tag}\">\n </ng-container>\n </span>\n {{tag.displayValue}}\n </span>\n }\n\n @if (useCustomWidgetsButton) {\n <span class=\"tag-item\" (click)=\"customWidgetsClickHandler()\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: 'custom-widget'}\">\n </ng-container>\n </span>\n \u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044B\n </span>\n }\n \n </div>\n </div>\n </div>\n @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u043E\u043F\u043B\u0435\u0435\u0440</mat-label>\n <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n <mat-option [value]=\"videoPlayer.type\">\n {{videoPlayer.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430</mat-label>\n <input\n matInput\n placeholder=\"\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430\"\n [(ngModel)]=\"htmlRaw\"\n >\n </mat-form-field>\n </div>\n }\n }\n @if (selectedValue === HtmlRawTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\">\n <mat-label>\u0420\u0430\u0437\u043C\u0435\u0442\u043A\u0430</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"htmlRaw\"\n ></textarea>\n </mat-form-field>\n </div>\n }\n @if (selectedValue === 'text') {\n <div style=\"display: flex; justify-content: space-between; flex-wrap: wrap\">\n <div style=\"margin-bottom: 22px; overflow-x: auto;\">\n <mat-button-toggle-group\n [(ngModel)]=\"textTag\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of textTagOptions; track option) {\n <mat-button-toggle value=\"{{ option.tag }}\">\n {{ option.displayValue }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n\n <div style=\"margin-bottom: 22px\">\n <mat-button-toggle-group\n [(ngModel)]=\"alignment\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of alignmentOptions; track option) {\n <mat-button-toggle value=\"{{ option.value }}\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"textAlignToggleIcons\"\n [ngTemplateOutletContext]=\"{icon: option.value}\">\n </ng-container>\n </span>\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <mat-form-field class=\"w-100\">\n <mat-label>\u0422\u0435\u043A\u0441\u0442</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"text\"\n ></textarea>\n </mat-form-field>\n }\n\n <div class=\"col-12\">\n <button (click)=\"addTagClickHandler()\" class=\"w-100\" mat-stroked-button>\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u0433\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <croco-html-add-files-btn (filesTagsReady)=\"filesTagsReadyHandler($event)\"\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" class=\"w-100\">\n </croco-html-add-files-btn>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (tag of bodyTags; track tag; let i = $index) {\n <div cdkDrag>\n <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between\">\n <div class=\"example-handle\" cdkDragHandle>\n <svg width=\"24\" height=\"24\" class=\"move-icon\">\n <use [attr.xlink:href]=\"'move-icon' | spriteIconPath\"></use>\n </svg>\n </div>\n <div>\n <div class=\"badge\" [matTooltip]=\"tag.tagDescription.tag\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tagDescription.tag}\">\n </ng-container>\n </span>\n </div>\n </div>\n </div>\n <div style=\"height: 15px;\"></div>\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagSavedHandler($event)\"\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\n </croco-html-main-editor-block>\n </mat-card-content>\n </mat-card>\n </div>\n }\n </div>\n</div>\n\n<ng-template #textAlignToggleIcons let-icon=\"icon\">\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setAlignButton(icon) | spriteIconPath\"></use>\n </svg>\n</ng-template>\n\n<ng-template #tagButtonIcons let-icon=\"icon\">\n @if (icon.indexOf('h') === 0 && icon.length === 2) {\n {{icon.toUpperCase()}}\n }\n @else {\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setTagButton(icon) | spriteIconPath\"></use>\n </svg>\n }\n</ng-template>", styles: [":host{--mat-standard-button-toggle-selected-state-background-color: #323E8B;--mat-standard-button-toggle-text-color: #323E8B;--mat-standard-button-toggle-selected-state-text-color: white;--mat-standard-button-toggle-height: 36px;--mat-standard-button-toggle-divider-color: #323E8B;--mdc-outlined-button-label-text-weight: 400;--mdc-outlined-button-label-text-color: #333333 !important;--mdc-outlined-button-container-shape: 30px;--mdc-outlined-button-outline-width: 2px;--mdc-outlined-button-container-height: 44px}:host ::ng-deep .mat-button-toggle-appearance-standard span.mat-button-toggle-label-content{padding:0 8px;min-width:36px}.text-align-icon,.mat-button-toggle .text-align-icon{color:#323e8b}.mat-button-toggle:hover,.mat-button-toggle:hover .text-align-icon{color:#747ebf}.mat-button-toggle-checked .text-align-icon{color:#fff}.example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.badge{width:44px;height:44px;border-radius:50%;border:1px solid #323E8B;display:flex;align-items:center;justify-content:center;color:#323e8b}.mat-card.special{border:1px solid #747EBF;border-radius:8px;box-shadow:none;margin:2px 2px 10px}.tags{display:flex;gap:10px;flex-wrap:wrap}.tag-item{display:flex;align-items:center;gap:5px;cursor:pointer;padding:10px 20px;border:1px solid #323E8B;border-radius:30px;background-color:#fff;color:#23262a;transition:.2s ease-in-out}.text-align-icon{color:#323e8b}.tag-item.active{background-color:#323e8b;color:#fff}.tag-item.active svg{color:#fff}.tag-item:hover{color:#747ebf;box-shadow:0 0 4px #747ebf}.tag-item:hover svg{color:#747ebf}@media (max-width: 760px){.tag-item:hover{color:inherit;box-shadow:none}.tag-item:hover svg{color:inherit}.tag-item:active{color:#747ebf;box-shadow:0 0 4px #747ebf}.tag-item:active svg{color:#747ebf}}.move-icon:hover{cursor:pointer;opacity:.7}.cdk-drag.cdk-drag-placeholder,.cdk-drag-preview{opacity:.5;transition:opacity .2s}.example-handle{color:#323e8b}\n"] }]
240
246
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
241
247
  type: Inject,
242
248
  args: [CrocoHtmlOptionsToken]
@@ -256,4 +262,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
256
262
  }], rendered: [{
257
263
  type: Output
258
264
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy9lZGl0b3IvdmlzdWFsLWVkaXRvci92aXN1YWwtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci92aXN1YWwtZWRpdG9yL3Zpc3VhbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNHLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQ3hDLDJCQUEyQixFQUMzQixRQUFRLEVBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsMEJBQTBCLEdBQzNCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUs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Z0JBQWdCLG9KQUNoQixVQUFVLDRRQUNWLGtCQUFrQjs7MkZBR1QscUJBQXFCO2tCQTdCakMsU0FBUzsrQkFDRSxxQkFBcUIsY0FHbkIsSUFBSSxXQUNQO3dCQUNQLGtCQUFrQjt3QkFDbEIsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixRQUFRO3dCQUNSLFFBQVE7d0JBQ1IsbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLFNBQVM7d0JBQ1QsU0FBUzt3QkFDVCxvQkFBb0I7d0JBQ3BCLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsVUFBVTt3QkFDVixrQkFBa0I7cUJBQ25COzswQkEwREUsTUFBTTsyQkFBQyxxQkFBcUI7eUNBdkRSLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFhckIsVUFBVTtzQkFEVCxLQUFLO2dCQVlOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixJQUFJO3NCQUZILEtBQUs7O3NCQUNMLE1BQU07Z0JBa0JQLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxRQUFRO3NCQURQLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCBDZGtEcm9wTGlzdCwgQ2RrRHJhZywgQ2RrRHJhZ0hhbmRsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCwgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQm9keVRhZ3NFeHRlbnNpb25zLCBFeHRlcm5hbFZpZGVvUGxheWVycyxcbiAgRXh0ZXJuYWxWaWRlb1N1cHBvcnRlZFR5cGVzLFxuICBUZXh0VGFnc1xufSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zJztcbmltcG9ydCB7IEZpbGVJbWFnZVRhZ0RhdGFDb25zdHMgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zJztcbmltcG9ydCB7XG4gIEV4dGVybmFsVmlkZW9UYWdEYXRhQ29uc3RzLFxufSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zJztcbmltcG9ydCB7IFhtbEV4dGVuc2lvbnMgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zJztcbmltcG9ydCB7IFRhZ0l0ZW0sIEh0bWxCb2R5VGFnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL21vZGVscyc7XG5pbXBvcnQgeyBGaWxlUG9zdGluZ1N0YXJ0ZWQgfSBmcm9tICcuLi8uLi91cGxvYWQtZmlsZXMtYnRuL3VwbG9hZC1maWxlcy1idG4uY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRUYWdzIH0gZnJvbSAnLi9EZWZhdWx0VGFncyc7XG5pbXBvcnQgeyBBbGlnbm1lbnRzRGF0YSwgRUFsaWdubWVudHMgfSBmcm9tIFwiLi9EZWZhdWx0QWxpZ21lbnRzXCI7XG5pbXBvcnQgeyBDcm9jb0h0bWxPcHRpb25zVG9rZW4gfSBmcm9tICcuLi8uLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgRG93bmxvYWRCdXR0b25UYWdEYXRhQ29uc3RzIH0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuc2lvbnMvRG93bmxvYWRCdXR0b25NZXRob2RzXCI7XG5pbXBvcnQgeyBNYWluRWRpdG9yQmxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9tYWluLWVkaXRvci1ibG9jay9tYWluLWVkaXRvci1ibG9jay5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkRmlsZXNCdG5Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hZGQtZmlsZXMtYnRuL2FkZC1maWxlcy1idG4uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2RrVGV4dGFyZWFBdXRvc2l6ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXh0LWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IEJ1dHRvblRhZ0RhdGFDb25zdHMgfSBmcm9tIFwiLi4vLi4vLi4vZXh0ZW5zaW9ucy9CdXR0b25NZXRob2RzXCI7XG5pbXBvcnQgeyBDcm9jb0h0bWxPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vb3B0aW9ucyc7XG5pbXBvcnQgeyBDdXN0b21XaWRnZXRUYWdEYXRhQ29uc3RzIH0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuc2lvbnMvQ3VzdG9tV2lkZ2V0TWV0aG9kc1wiO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlLCBNYXRCdXR0b25Ub2dnbGVHcm91cCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlXCI7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0LCBVcHBlckNhc2VQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHRtbFJhd1RhZ0RhdGFDb25zdHMgfSBmcm9tIFwiLi4vLi4vLi4vZXh0ZW5zaW9ucy9IdG1sUmF3VGFnRGF0YUNvbnN0c1wiO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XG5pbXBvcnQgeyBTcHJpdGVJY29uUGF0aFBpcGUgfSBmcm9tIFwiLi4vLi4vLi4vcGlwZXMvc3ByaXRlLWljb24tcGF0aC5waXBlXCI7XG5pbXBvcnQgeyBTcHJpdGVJZHNUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3Nwcml0ZXMtaWRzLnR5cGVcIjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5rWW91VHViZSA9IFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvNEN0U0FuSkRmc0k/c2k9c2N5Qk5KYTBIczJ0NWFMRVwiO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5rVmsgPSBcImh0dHBzOi8vdmsuY29tL3ZpZGVvX2V4dC5waHA/b2lkPS0yMjgyMjMwNSZpZD00NTYyNDE4NjQmaGQ9MlwiO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5rRm9yRG93bmxvYWQgPSBcImh0dHBzOi8vc3RvcmFnZS55YW5kZXhjbG91ZC5uZXQvbWVnYS1hY2FkZW15L3ByZXNlbnRhdGlvbi5wZGZcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3JvY28tdmlzdWFsLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aXN1YWwtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmlzdWFsLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyLFxuICAgIE1hdENhcmQsXG4gICAgTWF0Q2FyZENvbnRlbnQsXG4gICAgTWF0QnV0dG9uLFxuICAgIE1hdEZvcm1GaWVsZCxcbiAgICBNYXRMYWJlbCxcbiAgICBNYXRJbnB1dCxcbiAgICBDZGtUZXh0YXJlYUF1dG9zaXplLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdFNlbGVjdCxcbiAgICBNYXRPcHRpb24sXG4gICAgQWRkRmlsZXNCdG5Db21wb25lbnQsXG4gICAgQ2RrRHJvcExpc3QsXG4gICAgQ2RrRHJhZyxcbiAgICBDZGtEcmFnSGFuZGxlLFxuICAgIE1haW5FZGl0b3JCbG9ja0NvbXBvbmVudCxcbiAgICBNYXRCdXR0b25Ub2dnbGVHcm91cCxcbiAgICBNYXRCdXR0b25Ub2dnbGUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBNYXRUb29sdGlwLFxuICAgIFNwcml0ZUljb25QYXRoUGlwZSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBWaXN1YWxFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCd0ZXh0QXJlYScpIHRleHRBcmVhOiBFbGVtZW50UmVmO1xuXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBsb2FkaW5nVGV4dCA9IFwi0JjQtNGR0YIg0LfQsNCz0YDRg9C30LrQsFwiO1xuICB0ZXh0ID0gJyc7XG4gIGh0bWxSYXcgPSAnJztcblxuICBhbGlnbm1lbnQgPSBFQWxpZ25tZW50cy5MZWZ0O1xuICB0ZXh0VGFnID0gRGVmYXVsdFRhZ3MudGV4dFRhZ3NbMF0udGFnO1xuICB0ZXh0VGFnT3B0aW9ucyA9IERlZmF1bHRUYWdzLnRleHRUYWdzXG4gIGFsaWdubWVudE9wdGlvbnMgPSBBbGlnbm1lbnRzRGF0YVxuXG4gIEBJbnB1dCgpXG4gIHNob3dNYXJrVXAgPSB0cnVlO1xuXG4gIHRhZ3M6IFRhZ0l0ZW1bXSA9IFtdO1xuICB2aWRlb1BsYXllcnMgPSBFeHRlcm5hbFZpZGVvUGxheWVyc1xuICBzZWxlY3RlZFZhbHVlOiBzdHJpbmc7XG4gIHNlbGVjdGVkVmlkZW9QbGF5ZXI6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEV4dGVybmFsVmlkZW9UYWdEYXRhQ29uc3RzID0gRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHM7XG4gIHByb3RlY3RlZCByZWFkb25seSBIdG1sUmF3VGFnRGF0YUNvbnN0cyA9IEh0bWxSYXdUYWdEYXRhQ29uc3RzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRXh0ZXJuYWxWaWRlb1N1cHBvcnRlZFR5cGVzID0gRXh0ZXJuYWxWaWRlb1N1cHBvcnRlZFR5cGVzO1xuXG4gIEBJbnB1dCgpXG4gIHVzZUh0bWxSYXcgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIEBPdXRwdXQoKVxuICBodG1sOiBzdHJpbmcgPSBcIlwiO1xuXG4gIGlzSHRtbFNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5odG1sLnN0YXJ0c1dpdGgoXCI8Ym9keT5cIik7XG4gIH1cblxuICBjbGVhckh0bWwoKSB7XG4gICAgdGhpcy5odG1sID0gXCJcIjtcbiAgICB0aGlzLnJlY2FsY3VsYXRlQm9keVRhZ3MoKTtcbiAgfVxuXG4gIGdldEh0bWwoKSB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgICByZXR1cm4gdGhpcy5odG1sO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIG9uSHRtbENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVuZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgYm9keVRhZ3M6IEh0bWxCb2R5VGFnW10gPSBbXTtcbiAgc2F2ZUJvZHlUYWdzOiBIdG1sQm9keVRhZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoQ3JvY29IdG1sT3B0aW9uc1Rva2VuKSBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDcm9jb0h0bWxPcHRpb25zKSB7IH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuX2NkcmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFkZFRhZygpOiB2b2lkIHtcbiAgICBsZXQgdGFnRGVzY3JpcHRpb24gPSB0aGlzLnRhZ3NcbiAgICAgIC5maW5kKHggPT4geC50YWcgPT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG5cbiAgICBsZXQgYXR0cnMgPSB7fTtcbiAgICBsZXQgaW5uZXJIdG1sID0gXCJcIjtcblxuICAgIGlmIChUZXh0VGFncy5hbGxUZXh0VGFncy5pbmNsdWRlcyh0YWdEZXNjcmlwdGlvbi50YWcpKSB7XG4gICAgICB0aGlzLmFkZFRleHRUYWdzKCk7XG4gICAgICB0aGlzLnN0YXJ0QWRkaW5nVGV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmICh0YWdEZXNjcmlwdGlvbi50YWcgPT0gRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgYXR0cnNbRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMuVmlkZW9UeXBlQXR0ck5hbWVdID0gdGhpcy5zZWxlY3RlZFZpZGVvUGxheWVyO1xuICAgICAgYXR0cnNbRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMuVXNlUmVzcG9uc2l2ZVdyYXBwZXJBdHRyTmFtZV0gPSBmYWxzZTtcbiAgICAgIGF0dHJzW0V4dGVybmFsVmlkZW9UYWdEYXRhQ29uc3RzLkxpbmtBdHRyTmFtZV0gPSB0aGlzLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPT09IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Db2RlID8gJycgOlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPT09IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Wa1ZpZGVvXG4gICAgICAgICAgPyBkZWZhdWx0TGlua1ZrXG4gICAgICAgICAgOiBkZWZhdWx0TGlua1lvdVR1YmU7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPT09IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Db2RlKSB7XG4gICAgICAgIGlubmVySHRtbCA9IHRoaXMuaHRtbFJhd1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0YWdEZXNjcmlwdGlvbi50YWcgPT0gRmlsZUltYWdlVGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XG4gICAgICBhdHRyc1tGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLlNjcmVlbk1lZGlhUmVxdWVzdF0gPSBGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLkRlZmF1bHRWYWx1ZUZvckZpbGVJbWFnZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnRGVzY3JpcHRpb24udGFnID09IERvd25sb2FkQnV0dG9uVGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XG4gICAgICBhdHRyc1tEb3dubG9hZEJ1dHRvblRhZ0RhdGFDb25zdHMuTGlua0F0dHJOYW1lXSA9IGRlZmF1bHRMaW5rRm9yRG93bmxvYWRcbiAgICAgIGF0dHJzW0Rvd25sb2FkQnV0dG9uVGFnRGF0YUNvbnN0cy5UaXRsZUF0dHJOYW1lXSA9ICfQodC60LDRh9Cw0YLRjCdcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnRGVzY3JpcHRpb24udGFnID09IEJ1dHRvblRhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgYXR0cnNbQnV0dG9uVGFnRGF0YUNvbnN0cy5DbGlja0F0dHJOYW1lXSA9ICcnXG4gICAgICBhdHRyc1tCdXR0b25UYWdEYXRhQ29uc3RzLlR5cGVBdHRyTmFtZV0gPSAnYnV0dG9uJ1xuICAgICAgYXR0cnNbQnV0dG9uVGFnRGF0YUNvbnN0cy5UZXh0QXR0ck5hbWVdID0gJ9Ca0L3QvtC/0LrQsCdcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnRGVzY3JpcHRpb24udGFnID09PSBIdG1sUmF3VGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XG4gICAgICBpbm5lckh0bWwgPSB0aGlzLmh0bWxSYXc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZ0Rlc2NyaXB0aW9uLnRhZyA9PSBDdXN0b21XaWRnZXRUYWdEYXRhQ29uc3RzLlRhZ05hbWUpIHtcbiAgICAgIGF0dHJzW0N1c3RvbVdpZGdldFRhZ0RhdGFDb25zdHMuVHlwZUF0dHJOYW1lXSA9ICdleGFtcGxlLXR5cGUnXG4gICAgICBhdHRyc1tDdXN0b21XaWRnZXRUYWdEYXRhQ29uc3RzLkRhdGFJZEF0dHJOYW1lXSA9ICdleGFtcGxlLWRhdGEtaWQnXG4gICAgICBhdHRyc1tDdXN0b21XaWRnZXRUYWdEYXRhQ29uc3RzLldpZGdldElkQXR0ck5hbWVdID0gJ2V4YW1wbGUtd2lkZ2V0LWlkJ1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGF0dHJzW0ZpbGVJbWFnZVRhZ0RhdGFDb25zdHMuRmlsZUlkQXR0ck5hbWVdID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5ib2R5VGFncy5wdXNoKHtcbiAgICAgIHRhZ0Rlc2NyaXB0aW9uLFxuICAgICAgaW5uZXJIdG1sLFxuICAgICAgYXR0cmlidXRlczogYXR0cnMsXG4gICAgICBwcmVzZW50T3JFZGl0OiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLmh0bWxSYXcgPSAnJztcbiAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xuICB9XG5cbiAgc3RhcnRBZGRpbmdUZXh0KHRhZyA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlQm9keVRhZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYm9keVRhZ3MpKTtcbiAgICBpZiAodGFnID09PSAndGV4dCcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRBcmVhLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMucmVzZXRUZXh0U3R5bGUoKTtcbiAgfVxuXG4gIHJlc2V0VGV4dFN0eWxlKCk6IHZvaWQge1xuICAgIHRoaXMudGV4dCA9ICcnO1xuICAgIHRoaXMuYWxpZ25tZW50ID0gRUFsaWdubWVudHMuTGVmdDtcbiAgICB0aGlzLnRleHRUYWcgPSBEZWZhdWx0VGFncy50ZXh0VGFnc1swXS50YWc7XG4gIH1cblxuICBhZGRUZXh0VGFncygpIHtcbiAgICBsZXQgbGluZXMgPSB0aGlzLnRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHRoaXMuYm9keVRhZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2F2ZUJvZHlUYWdzKSk7XG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uID0gdGhpcy50ZXh0VGFnT3B0aW9ucz8uZmluZCh4ID0+IHgudGFnID09PSB0aGlzLnRleHRUYWcpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpbmVzW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5ib2R5VGFncy5wdXNoKHtcbiAgICAgICAgICB0YWdEZXNjcmlwdGlvbixcbiAgICAgICAgICBpbm5lckh0bWw6IGxpbmVzW2ldLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIFwiaC1hbGlnblwiOiBgJHt0aGlzLmFsaWdubWVudH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmVzZW50T3JFZGl0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBvc3RGaWxlc1N0YXJ0ZWRFdmVudEhhbmRsZXIobW9kZWw6IEZpbGVQb3N0aW5nU3RhcnRlZCkge1xuICAgIHRoaXMubG9hZGluZ1RleHQgPSBcItCk0LDQudC70Ysg0LfQsNCz0YDRg9C20LDRjtGC0YHRjyDQvdCwINGB0LXRgNCy0LXRgFwiO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGFkZFRhZ0N1c3RvbSh0YWc6IEh0bWxCb2R5VGFnKSB7XG4gICAgdGhpcy5ib2R5VGFncy5wdXNoKHRhZyk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgfVxuXG4gIGZpbGVzVGFnc1JlYWR5SGFuZGxlcih0YWdzOiBIdG1sQm9keVRhZ1tdKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmJvZHlUYWdzLnB1c2godGFnc1tpXSk7XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPG9iamVjdFtdPikge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmJvZHlUYWdzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XG4gIH1cblxuICBvblRhZ1NhdmVkSGFuZGxlcih0YWc6IEh0bWxCb2R5VGFnKSB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgfVxuXG4gIG9uVGFnUmVtb3ZlZEhhbmRsZXIoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuYm9keVRhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xuICB9XG5cbiAgcmVjYWxjdWxhdGVIdG1sKCkge1xuICAgIGxldCByZXN1bHQgPSBCb2R5VGFnc0V4dGVuc2lvbnMudG9IdG1sKHRoaXMuYm9keVRhZ3MpO1xuICAgIHRoaXMuaHRtbCA9IFhtbEV4dGVuc2lvbnMuZm9ybWF0WG1sKFwiPGJvZHk+XCIgKyByZXN1bHQgKyBcIjwvYm9keT5cIik7XG4gICAgdGhpcy5vbkh0bWxDaGFuZ2VkLmVtaXQodGhpcy5odG1sKTtcbiAgfVxuXG4gIHJlY2FsY3VsYXRlQm9keVRhZ3MoKSB7XG4gICAgdGhpcy5ib2R5VGFncyA9IEJvZHlUYWdzRXh0ZW5zaW9ucy5nZXRCb2R5VGFncyh0aGlzLmh0bWwsIHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgc2VsZWN0VGFnKGRhdGE6IFRhZ0l0ZW0pIHtcbiAgICB0aGlzLmh0bWxSYXcgPSAnJztcblxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGRhdGEudGFnO1xuICAgIHRoaXMuc3RhcnRBZGRpbmdUZXh0KGRhdGEudGFnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVjYWxjdWxhdGVCb2R5VGFncygpO1xuXG4gICAgdGhpcy50YWdzID0gRGVmYXVsdFRhZ3MuZ2V0VGFncygpO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMudGFnc1swXS50YWc7XG4gICAgdGhpcy5zZWxlY3RlZFZpZGVvUGxheWVyID0gdGhpcy52aWRlb1BsYXllcnNbMF0udHlwZTtcbiAgfVxuXG4gIHNldFRhZ0J1dHRvbih0eXBlOiBzdHJpbmcpOiBTcHJpdGVJZHNUeXBlIHtcbiAgICByZXR1cm4gYHRhZy1idXR0b24tJHt0eXBlfWAgYXMgU3ByaXRlSWRzVHlwZVxuICB9XG5cbiAgc2V0QWxpZ25CdXR0b24odHlwZTogc3RyaW5nKTogU3ByaXRlSWRzVHlwZSB7XG4gICAgcmV0dXJuIGBhbGlnbi0ke3R5cGV9YCBhcyBTcHJpdGVJZHNUeXBlXG4gIH1cbn1cbiIsIkBpZiAoaXNMb2FkaW5nKSB7XG4gIDxkaXY+XG4gICAgPGRpdj5cbiAgICAgIDxtYXQtc3Bpbm5lciBzdHlsZT1cIm1hcmdpbjowIGF1dG87XCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+e3tsb2FkaW5nVGV4dH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj48L2Rpdj5cbiAgPC9kaXY+XG59XG48ZGl2IFtoaWRkZW5dPVwiaXNMb2FkaW5nXCI+XG4gIDxtYXQtY2FyZCBzdHlsZT1cIm1hcmdpbjogMnB4O1wiIGNsYXNzPVwibWF0LWNhcmRcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAyMnB4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFnc1wiPlxuICAgICAgICAgICAgICBAZm9yICh0YWcgb2YgdGFnczsgdHJhY2sgdGFnKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWctaXRlbVwiIChjbGljayk9XCJzZWxlY3RUYWcodGFnKVwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRWYWx1ZSA9PT0gdGFnLnRhZ1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWFsaWduLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWdCdXR0b25JY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpY29uOiB0YWcudGFnfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7dGFnLmRpc3BsYXlWYWx1ZX19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoc2VsZWN0ZWRWYWx1ZSA9PT0gRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD7QktGL0LHQtdGA0LjRgtC1INCy0LjQtNC10L7Qv9C70LXQtdGAPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRWaWRlb1BsYXllclwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHZpZGVvUGxheWVyIG9mIHZpZGVvUGxheWVyczsgdHJhY2sgdmlkZW9QbGF5ZXIudHlwZSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInZpZGVvUGxheWVyLnR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3t2aWRlb1BsYXllci5kaXNwbGF5VmFsdWV9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKHNlbGVjdGVkVmlkZW9QbGF5ZXIgPT09IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Db2RlKSB7XG4gICAgICAgICAgICA8ZGl2ICBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD7QoNCw0LfQvNC10YLQutCwPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLQoNCw0LfQvNC10YLQutCwXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaHRtbFJhd1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2VsZWN0ZWRWYWx1ZSA9PT0gSHRtbFJhd1RhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPtCg0LDQt9C80LXRgtC60LA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICNhdXRvc2l6ZT1cImNka1RleHRhcmVhQXV0b3NpemVcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIGNka1RleHRhcmVhQXV0b3NpemVcbiAgICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWluUm93cz1cIjFcIlxuICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNYXhSb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItCi0LXQutGB0YJcIlxuICAgICAgICAgICAgICAgICAgI3RleHRBcmVhXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImh0bWxSYXdcIlxuICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNlbGVjdGVkVmFsdWUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGZsZXgtd3JhcDogd3JhcFwiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIycHg7IG92ZXJmbG93LXg6IGF1dG87XCI+XG4gICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGV4dFRhZ1wiXG4gICAgICAgICAgICAgICAgW2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgdGV4dFRhZ09wdGlvbnM7IHRyYWNrIG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwie3sgb3B0aW9uLnRhZyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24uZGlzcGxheVZhbHVlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjJweFwiPlxuICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgW2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgYWxpZ25tZW50T3B0aW9uczsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJ7eyBvcHRpb24udmFsdWUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWFsaWduLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRleHRBbGlnblRvZ2dsZUljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aWNvbjogb3B0aW9uLnZhbHVlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPtCi0LXQutGB0YI8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAjYXV0b3NpemU9XCJjZGtUZXh0YXJlYUF1dG9zaXplXCJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgY2RrVGV4dGFyZWFBdXRvc2l6ZVxuICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1pblJvd3M9XCIxXCJcbiAgICAgICAgICAgICAgY2RrQXV0b3NpemVNYXhSb3dzPVwiNVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0KLQtdC60YHRglwiXG4gICAgICAgICAgICAgICN0ZXh0QXJlYVxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRleHRcIlxuICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkVGFnKClcIiBjbGFzcz1cInctMTAwXCIgbWF0LXN0cm9rZWQtYnV0dG9uPlxuICAgICAgICAgICAg0JTQvtCx0LDQstC40YLRjCDRgtC10LNcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG5cbiAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgW2hpZGRlbl09XCJpc0xvYWRpbmdcIj5cbiAgPG1hdC1jYXJkIHN0eWxlPVwibWFyZ2luOiAycHg7XCIgY2xhc3M9XCJtYXQtY2FyZFwiPlxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICA8Y3JvY28taHRtbC1hZGQtZmlsZXMtYnRuIChmaWxlc1RhZ3NSZWFkeSk9XCJmaWxlc1RhZ3NSZWFkeUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAocG9zdEZpbGVzU3RhcnRlZCk9XCJwb3N0RmlsZXNTdGFydGVkRXZlbnRIYW5kbGVyKCRldmVudClcIiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgPC9jcm9jby1odG1sLWFkZC1maWxlcy1idG4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICA8L21hdC1jYXJkPlxuXG4gIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IFtoaWRkZW5dPVwiaXNMb2FkaW5nXCI+XG4gIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICBAZm9yICh0YWcgb2YgYm9keVRhZ3M7IHRyYWNrIHRhZzsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDxkaXYgY2RrRHJhZz5cbiAgICAgICAgPG1hdC1jYXJkIHN0eWxlPVwibWFyZ2luOiAycHg7XCIgY2xhc3M9XCJtYXQtY2FyZCBzcGVjaWFsXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBjbGFzcz1cIm1vdmUtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPHVzZSBbYXR0ci54bGluazpocmVmXT1cIidtb3ZlLWljb24nIHwgc3ByaXRlSWNvblBhdGhcIj48L3VzZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlXCIgW21hdFRvb2x0aXBdPVwidGFnLnRhZ0Rlc2NyaXB0aW9uLnRhZ1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWFsaWduLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWdCdXR0b25JY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpY29uOiB0YWcudGFnRGVzY3JpcHRpb24udGFnfVwiPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxNXB4O1wiPjwvZGl2PlxuICAgICAgICAgICAgPGNyb2NvLWh0bWwtbWFpbi1lZGl0b3ItYmxvY2sgW3RhZ109XCJ0YWdcIiAob25UYWdTYXZlZCk9XCJvblRhZ1NhdmVkSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uVGFnUmVtb3ZlZCk9XCJvblRhZ1JlbW92ZWRIYW5kbGVyKGkpXCI+XG4gICAgICAgICAgICA8L2Nyb2NvLWh0bWwtbWFpbi1lZGl0b3ItYmxvY2s+XG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RleHRBbGlnblRvZ2dsZUljb25zIGxldC1pY29uPVwiaWNvblwiPlxuICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiPlxuICAgIDx1c2UgW2F0dHIueGxpbms6aHJlZl09XCJzZXRBbGlnbkJ1dHRvbihpY29uKSB8IHNwcml0ZUljb25QYXRoXCI+PC91c2U+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWdCdXR0b25JY29ucyBsZXQtaWNvbj1cImljb25cIj5cbiAgQGlmIChpY29uLmluZGV4T2YoJ2gnKSA9PT0gMCAmJiBpY29uLmxlbmd0aCA9PT0gMikge1xuICAgIHt7aWNvbi50b1VwcGVyQ2FzZSgpfX1cbiAgfVxuICBAZWxzZSB7XG4gICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIj5cbiAgICAgIDx1c2UgW2F0dHIueGxpbms6aHJlZl09XCJzZXRUYWdCdXR0b24oaWNvbil8IHNwcml0ZUljb25QYXRoXCI+PC91c2U+XG4gICAgPC9zdmc+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cblxuXG5cblxuXG4iXX0=
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy9lZGl0b3IvdmlzdWFsLWVkaXRvci92aXN1YWwtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci92aXN1YWwtZWRpdG9yL3Zpc3VhbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNHLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQ3hDLDJCQUEyQixFQUMzQixRQUFRLEVBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsMEJBQTBCLEdBQzNCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUs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VCxZQUFZLDRMQUNaLFFBQVEsc0RBQ1IsUUFBUSxpVUFDUixtQkFBbUIsd01BQ25CLFdBQVcsK21CQUNYLFNBQVMsd2VBQ1QsU0FBUyxxSkFDVCxvQkFBb0Isc0hBQ3BCLFdBQVcsK2RBQ1gsT0FBTyx3YkFDUCxhQUFhLCtGQUNiLHdCQUF3QixtSUFDeEIsb0JBQW9CLDJSQUNwQixlQUFlLHNQQUNmLGdCQUFnQixvSkFDaEIsVUFBVSw0UUFDVixrQkFBa0I7OzJGQUdULHFCQUFxQjtrQkE3QmpDLFNBQVM7K0JBQ0UscUJBQXFCLGNBR25CLElBQUksV0FDUDt3QkFDUCxrQkFBa0I7d0JBQ2xCLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osUUFBUTt3QkFDUixRQUFRO3dCQUNSLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxTQUFTO3dCQUNULFNBQVM7d0JBQ1Qsb0JBQW9CO3dCQUNwQixXQUFXO3dCQUNYLE9BQU87d0JBQ1AsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLFVBQVU7d0JBQ1Ysa0JBQWtCO3FCQUNuQjs7MEJBNkRFLE1BQU07MkJBQUMscUJBQXFCO3lDQTFEUixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBYXJCLFVBQVU7c0JBRFQsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBS04sSUFBSTtzQkFGSCxLQUFLOztzQkFDTCxNQUFNO2dCQWtCUCxhQUFhO3NCQURaLE1BQU07Z0JBSVAsUUFBUTtzQkFEUCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSwgQ2RrRHJvcExpc3QsIENka0RyYWcsIENka0RyYWdIYW5kbGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJvZHlUYWdzRXh0ZW5zaW9ucywgRXh0ZXJuYWxWaWRlb1BsYXllcnMsXG4gIEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcyxcbiAgVGV4dFRhZ3Ncbn0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQge1xuICBFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cyxcbn0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBYbWxFeHRlbnNpb25zIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBUYWdJdGVtLCBIdG1sQm9keVRhZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9tb2RlbHMnO1xuaW1wb3J0IHsgRmlsZVBvc3RpbmdTdGFydGVkIH0gZnJvbSAnLi4vLi4vdXBsb2FkLWZpbGVzLWJ0bi91cGxvYWQtZmlsZXMtYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWZhdWx0VGFncyB9IGZyb20gJy4vRGVmYXVsdFRhZ3MnO1xuaW1wb3J0IHsgQWxpZ25tZW50c0RhdGEsIEVBbGlnbm1lbnRzIH0gZnJvbSBcIi4vRGVmYXVsdEFsaWdtZW50c1wiO1xuaW1wb3J0IHsgQ3JvY29IdG1sT3B0aW9uc1Rva2VuIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IERvd25sb2FkQnV0dG9uVGFnRGF0YUNvbnN0cyB9IGZyb20gXCIuLi8uLi8uLi9leHRlbnNpb25zL0Rvd25sb2FkQnV0dG9uTWV0aG9kc1wiO1xuaW1wb3J0IHsgTWFpbkVkaXRvckJsb2NrQ29tcG9uZW50IH0gZnJvbSAnLi4vbWFpbi1lZGl0b3ItYmxvY2svbWFpbi1lZGl0b3ItYmxvY2suY29tcG9uZW50JztcbmltcG9ydCB7IEFkZEZpbGVzQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWRkLWZpbGVzLWJ0bi9hZGQtZmlsZXMtYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENka1RleHRhcmVhQXV0b3NpemUgfSBmcm9tICdAYW5ndWxhci9jZGsvdGV4dC1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDYXJkLCBNYXRDYXJkQ29udGVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBCdXR0b25UYWdEYXRhQ29uc3RzIH0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuc2lvbnMvQnV0dG9uTWV0aG9kc1wiO1xuaW1wb3J0IHsgQ3JvY29IdG1sT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL29wdGlvbnMnO1xuaW1wb3J0IHsgQ3VzdG9tV2lkZ2V0VGFnRGF0YUNvbnN0cyB9IGZyb20gXCIuLi8uLi8uLi9leHRlbnNpb25zL0N1c3RvbVdpZGdldE1ldGhvZHNcIjtcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZSwgTWF0QnV0dG9uVG9nZ2xlR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZVwiO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEh0bWxSYXdUYWdEYXRhQ29uc3RzIH0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuc2lvbnMvSHRtbFJhd1RhZ0RhdGFDb25zdHNcIjtcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xuaW1wb3J0IHsgU3ByaXRlSWNvblBhdGhQaXBlIH0gZnJvbSBcIi4uLy4uLy4uL3BpcGVzL3Nwcml0ZS1pY29uLXBhdGgucGlwZVwiO1xuaW1wb3J0IHsgU3ByaXRlSWRzVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zcHJpdGVzLWlkcy50eXBlXCI7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TGlua1lvdVR1YmUgPSBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLzRDdFNBbkpEZnNJP3NpPXNjeUJOSmEwSHMydDVhTEVcIjtcbmV4cG9ydCBjb25zdCBkZWZhdWx0TGlua1ZrID0gXCJodHRwczovL3ZrLmNvbS92aWRlb19leHQucGhwP29pZD0tMjI4MjIzMDUmaWQ9NDU2MjQxODY0JmhkPTJcIjtcbmV4cG9ydCBjb25zdCBkZWZhdWx0TGlua0ZvckRvd25sb2FkID0gXCJodHRwczovL3N0b3JhZ2UueWFuZGV4Y2xvdWQubmV0L21lZ2EtYWNhZGVteS9wcmVzZW50YXRpb24ucGRmXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nyb2NvLXZpc3VhbC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlzdWFsLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Zpc3VhbC1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdFByb2dyZXNzU3Bpbm5lcixcbiAgICBNYXRDYXJkLFxuICAgIE1hdENhcmRDb250ZW50LFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRGb3JtRmllbGQsXG4gICAgTWF0TGFiZWwsXG4gICAgTWF0SW5wdXQsXG4gICAgQ2RrVGV4dGFyZWFBdXRvc2l6ZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRTZWxlY3QsXG4gICAgTWF0T3B0aW9uLFxuICAgIEFkZEZpbGVzQnRuQ29tcG9uZW50LFxuICAgIENka0Ryb3BMaXN0LFxuICAgIENka0RyYWcsXG4gICAgQ2RrRHJhZ0hhbmRsZSxcbiAgICBNYWluRWRpdG9yQmxvY2tDb21wb25lbnQsXG4gICAgTWF0QnV0dG9uVG9nZ2xlR3JvdXAsXG4gICAgTWF0QnV0dG9uVG9nZ2xlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTWF0VG9vbHRpcCxcbiAgICBTcHJpdGVJY29uUGF0aFBpcGUsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVmlzdWFsRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndGV4dEFyZWEnKSB0ZXh0QXJlYTogRWxlbWVudFJlZjtcblxuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgbG9hZGluZ1RleHQgPSBcItCY0LTRkdGCINC30LDQs9GA0YPQt9C60LBcIjtcbiAgdGV4dCA9ICcnO1xuICBodG1sUmF3ID0gJyc7XG5cbiAgYWxpZ25tZW50ID0gRUFsaWdubWVudHMuTGVmdDtcbiAgdGV4dFRhZyA9IERlZmF1bHRUYWdzLnRleHRUYWdzWzBdLnRhZztcbiAgdGV4dFRhZ09wdGlvbnMgPSBEZWZhdWx0VGFncy50ZXh0VGFnc1xuICBhbGlnbm1lbnRPcHRpb25zID0gQWxpZ25tZW50c0RhdGFcblxuICBASW5wdXQoKVxuICBzaG93TWFya1VwID0gdHJ1ZTtcblxuICB0YWdzOiBUYWdJdGVtW10gPSBbXTtcbiAgdmlkZW9QbGF5ZXJzID0gRXh0ZXJuYWxWaWRlb1BsYXllcnNcbiAgc2VsZWN0ZWRWYWx1ZTogc3RyaW5nID0gbnVsbDtcbiAgc2VsZWN0ZWRWaWRlb1BsYXllcjogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cyA9IEV4dGVybmFsVmlkZW9UYWdEYXRhQ29uc3RzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgSHRtbFJhd1RhZ0RhdGFDb25zdHMgPSBIdG1sUmF3VGFnRGF0YUNvbnN0cztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcyA9IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcztcblxuICBASW5wdXQoKVxuICB1c2VIdG1sUmF3ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBAT3V0cHV0KClcbiAgaHRtbDogc3RyaW5nID0gXCJcIjtcblxuICBpc0h0bWxTZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHRtbC5zdGFydHNXaXRoKFwiPGJvZHk+XCIpO1xuICB9XG5cbiAgY2xlYXJIdG1sKCkge1xuICAgIHRoaXMuaHRtbCA9IFwiXCI7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUJvZHlUYWdzKCk7XG4gIH1cblxuICBnZXRIdG1sKCkge1xuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XG4gICAgcmV0dXJuIHRoaXMuaHRtbDtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBvbkh0bWxDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJlbmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGJvZHlUYWdzOiBIdG1sQm9keVRhZ1tdID0gW107XG4gIHNhdmVCb2R5VGFnczogSHRtbEJvZHlUYWdbXSA9IFtdO1xuXG4gIHVzZUN1c3RvbVdpZGdldHNCdXR0b24gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChDcm9jb0h0bWxPcHRpb25zVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENyb2NvSHRtbE9wdGlvbnMpIHsgXG5cbiAgICB0aGlzLnVzZUN1c3RvbVdpZGdldHNCdXR0b24gPSB0aGlzLl9vcHRpb25zLnVzZUN1c3RvbVdpZGdldHNCdXR0b247XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuX2NkcmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFkZFRhZ0NsaWNrSGFuZGxlcigpOiB2b2lkIHtcbiAgICBsZXQgdGFnRGVzY3JpcHRpb24gPSB0aGlzLnRhZ3NcbiAgICAgIC5maW5kKHggPT4geC50YWcgPT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG5cbiAgICBsZXQgYXR0cnMgPSB7fTtcbiAgICBsZXQgaW5uZXJIdG1sID0gXCJcIjtcblxuICAgIGlmIChUZXh0VGFncy5hbGxUZXh0VGFncy5pbmNsdWRlcyh0YWdEZXNjcmlwdGlvbi50YWcpKSB7XG4gICAgICB0aGlzLmFkZFRleHRUYWdzKCk7XG4gICAgICB0aGlzLnN0YXJ0QWRkaW5nVGV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmICh0YWdEZXNjcmlwdGlvbi50YWcgPT0gRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgYXR0cnNbRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMuVmlkZW9UeXBlQXR0ck5hbWVdID0gdGhpcy5zZWxlY3RlZFZpZGVvUGxheWVyO1xuICAgICAgYXR0cnNbRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMuVXNlUmVzcG9uc2l2ZVdyYXBwZXJBdHRyTmFtZV0gPSBmYWxzZTtcbiAgICAgIGF0dHJzW0V4dGVybmFsVmlkZW9UYWdEYXRhQ29uc3RzLkxpbmtBdHRyTmFtZV0gPSB0aGlzLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPT09IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Db2RlID8gJycgOlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPT09IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Wa1ZpZGVvXG4gICAgICAgICAgPyBkZWZhdWx0TGlua1ZrXG4gICAgICAgICAgOiBkZWZhdWx0TGlua1lvdVR1YmU7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPT09IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Db2RlKSB7XG4gICAgICAgIGlubmVySHRtbCA9IHRoaXMuaHRtbFJhd1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0YWdEZXNjcmlwdGlvbi50YWcgPT0gRmlsZUltYWdlVGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XG4gICAgICBhdHRyc1tGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLlNjcmVlbk1lZGlhUmVxdWVzdF0gPSBGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLkRlZmF1bHRWYWx1ZUZvckZpbGVJbWFnZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnRGVzY3JpcHRpb24udGFnID09IERvd25sb2FkQnV0dG9uVGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XG4gICAgICBhdHRyc1tEb3dubG9hZEJ1dHRvblRhZ0RhdGFDb25zdHMuTGlua0F0dHJOYW1lXSA9IGRlZmF1bHRMaW5rRm9yRG93bmxvYWRcbiAgICAgIGF0dHJzW0Rvd25sb2FkQnV0dG9uVGFnRGF0YUNvbnN0cy5UaXRsZUF0dHJOYW1lXSA9ICfQodC60LDRh9Cw0YLRjCdcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnRGVzY3JpcHRpb24udGFnID09IEJ1dHRvblRhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgYXR0cnNbQnV0dG9uVGFnRGF0YUNvbnN0cy5DbGlja0F0dHJOYW1lXSA9ICcnXG4gICAgICBhdHRyc1tCdXR0b25UYWdEYXRhQ29uc3RzLlR5cGVBdHRyTmFtZV0gPSAnYnV0dG9uJ1xuICAgICAgYXR0cnNbQnV0dG9uVGFnRGF0YUNvbnN0cy5UZXh0QXR0ck5hbWVdID0gJ9Ca0L3QvtC/0LrQsCdcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnRGVzY3JpcHRpb24udGFnID09PSBIdG1sUmF3VGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XG4gICAgICBpbm5lckh0bWwgPSB0aGlzLmh0bWxSYXc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZ0Rlc2NyaXB0aW9uLnRhZyA9PSBDdXN0b21XaWRnZXRUYWdEYXRhQ29uc3RzLlRhZ05hbWUpIHtcbiAgICAgIGF0dHJzW0N1c3RvbVdpZGdldFRhZ0RhdGFDb25zdHMuVHlwZUF0dHJOYW1lXSA9ICdleGFtcGxlLXR5cGUnXG4gICAgICBhdHRyc1tDdXN0b21XaWRnZXRUYWdEYXRhQ29uc3RzLkRhdGFJZEF0dHJOYW1lXSA9ICdleGFtcGxlLWRhdGEtaWQnXG4gICAgICBhdHRyc1tDdXN0b21XaWRnZXRUYWdEYXRhQ29uc3RzLldpZGdldElkQXR0ck5hbWVdID0gJ2V4YW1wbGUtd2lkZ2V0LWlkJ1xuICAgIH1cbiAgICBlbHNlIGlmICh0YWdEZXNjcmlwdGlvbi50YWcgPT09IEZpbGVJbWFnZVRhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgYXR0cnNbRmlsZUltYWdlVGFnRGF0YUNvbnN0cy5GaWxlSWRBdHRyTmFtZV0gPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuYm9keVRhZ3MucHVzaCh7XG4gICAgICB0YWdEZXNjcmlwdGlvbixcbiAgICAgIGlubmVySHRtbCxcbiAgICAgIGF0dHJpYnV0ZXM6IGF0dHJzLFxuICAgICAgcHJlc2VudE9yRWRpdDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5odG1sUmF3ID0gJyc7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgfVxuXG4gIHN0YXJ0QWRkaW5nVGV4dCh0YWcgPSAnJyk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZUJvZHlUYWdzID0gWy4uLnRoaXMuYm9keVRhZ3NdO1xuICAgIGlmICh0YWcgPT09ICd0ZXh0Jykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEFyZWEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5yZXNldFRleHRTdHlsZSgpO1xuICB9XG5cbiAgcmVzZXRUZXh0U3R5bGUoKTogdm9pZCB7XG4gICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgdGhpcy5hbGlnbm1lbnQgPSBFQWxpZ25tZW50cy5MZWZ0O1xuICAgIHRoaXMudGV4dFRhZyA9IERlZmF1bHRUYWdzLnRleHRUYWdzWzBdLnRhZztcbiAgfVxuXG4gIGFkZFRleHRUYWdzKCkge1xuICAgIGxldCBsaW5lcyA9IHRoaXMudGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdGhpcy5ib2R5VGFncyA9IFsuLi50aGlzLnNhdmVCb2R5VGFnc107XG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uID0gdGhpcy50ZXh0VGFnT3B0aW9ucz8uZmluZCh4ID0+IHgudGFnID09PSB0aGlzLnRleHRUYWcpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpbmVzW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5ib2R5VGFncy5wdXNoKHtcbiAgICAgICAgICB0YWdEZXNjcmlwdGlvbixcbiAgICAgICAgICBpbm5lckh0bWw6IGxpbmVzW2ldLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIFwiaC1hbGlnblwiOiBgJHt0aGlzLmFsaWdubWVudH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmVzZW50T3JFZGl0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBvc3RGaWxlc1N0YXJ0ZWRFdmVudEhhbmRsZXIobW9kZWw6IEZpbGVQb3N0aW5nU3RhcnRlZCkge1xuICAgIHRoaXMubG9hZGluZ1RleHQgPSBcItCk0LDQudC70Ysg0LfQsNCz0YDRg9C20LDRjtGC0YHRjyDQvdCwINGB0LXRgNCy0LXRgFwiO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGFkZFRhZyh0YWc6IEh0bWxCb2R5VGFnKSB7XG4gICAgdGhpcy5ib2R5VGFncy5wdXNoKHRhZyk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgfVxuXG4gIGZpbGVzVGFnc1JlYWR5SGFuZGxlcih0YWdzOiBIdG1sQm9keVRhZ1tdKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmJvZHlUYWdzLnB1c2godGFnc1tpXSk7XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPG9iamVjdFtdPikge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmJvZHlUYWdzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XG4gIH1cblxuICBvblRhZ1NhdmVkSGFuZGxlcih0YWc6IEh0bWxCb2R5VGFnKSB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgfVxuXG4gIG9uVGFnUmVtb3ZlZEhhbmRsZXIoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuYm9keVRhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xuICB9XG5cbiAgcmVjYWxjdWxhdGVIdG1sKCkge1xuICAgIGxldCByZXN1bHQgPSBCb2R5VGFnc0V4dGVuc2lvbnMudG9IdG1sKHRoaXMuYm9keVRhZ3MpO1xuICAgIHRoaXMuaHRtbCA9IFhtbEV4dGVuc2lvbnMuZm9ybWF0WG1sKFwiPGJvZHk+XCIgKyByZXN1bHQgKyBcIjwvYm9keT5cIik7XG4gICAgdGhpcy5vbkh0bWxDaGFuZ2VkLmVtaXQodGhpcy5odG1sKTtcbiAgfVxuXG4gIHJlY2FsY3VsYXRlQm9keVRhZ3MoKSB7XG4gICAgdGhpcy5ib2R5VGFncyA9IEJvZHlUYWdzRXh0ZW5zaW9ucy5nZXRCb2R5VGFncyh0aGlzLmh0bWwsIHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgc2VsZWN0VGFnKGRhdGE6IFRhZ0l0ZW0pIHtcbiAgICB0aGlzLmh0bWxSYXcgPSAnJztcblxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGRhdGEudGFnO1xuICAgIHRoaXMuc3RhcnRBZGRpbmdUZXh0KGRhdGEudGFnKTtcbiAgfVxuXG4gIGN1c3RvbVdpZGdldHNDbGlja0hhbmRsZXIoKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5jdXN0b21XaWRnZXRDbGlja0hhbmRsZXIodGhpcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY2FsY3VsYXRlQm9keVRhZ3MoKTtcblxuICAgIHRoaXMudGFncyA9IERlZmF1bHRUYWdzLmdldFRhZ3MoKTtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnRhZ3NbMF0udGFnO1xuICAgIHRoaXMuc2VsZWN0ZWRWaWRlb1BsYXllciA9IHRoaXMudmlkZW9QbGF5ZXJzWzBdLnR5cGU7XG4gIH1cblxuICBzZXRUYWdCdXR0b24odHlwZTogc3RyaW5nKTogU3ByaXRlSWRzVHlwZSB7XG4gICAgcmV0dXJuIGB0YWctYnV0dG9uLSR7dHlwZX1gIGFzIFNwcml0ZUlkc1R5cGVcbiAgfVxuXG4gIHNldEFsaWduQnV0dG9uKHR5cGU6IHN0cmluZyk6IFNwcml0ZUlkc1R5cGUge1xuICAgIHJldHVybiBgYWxpZ24tJHt0eXBlfWAgYXMgU3ByaXRlSWRzVHlwZVxuICB9XG59XG4iLCJAaWYgKGlzTG9hZGluZykge1xuICA8ZGl2PlxuICAgIDxkaXY+XG4gICAgICA8bWF0LXNwaW5uZXIgc3R5bGU9XCJtYXJnaW46MCBhdXRvO1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPnt7bG9hZGluZ1RleHR9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+PC9kaXY+XG4gIDwvZGl2PlxufVxuPGRpdiBbaGlkZGVuXT1cImlzTG9hZGluZ1wiPlxuICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjJweFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZ3NcIj5cbiAgICAgICAgICAgICAgQGZvciAodGFnIG9mIHRhZ3M7IHRyYWNrIHRhZykge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnLWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0VGFnKHRhZylcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkVmFsdWUgPT09IHRhZy50YWdcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1hbGlnbi1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFnQnV0dG9uSWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aWNvbjogdGFnLnRhZ31cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICB7e3RhZy5kaXNwbGF5VmFsdWV9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIEBpZiAodXNlQ3VzdG9tV2lkZ2V0c0J1dHRvbikge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnLWl0ZW1cIiAoY2xpY2spPVwiY3VzdG9tV2lkZ2V0c0NsaWNrSGFuZGxlcigpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYWxpZ24taWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhZ0J1dHRvbkljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2ljb246ICdjdXN0b20td2lkZ2V0J31cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICDQlNGA0YPQs9C40LUg0LLQuNC00LbQtdGC0YtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoc2VsZWN0ZWRWYWx1ZSA9PT0gRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD7QktGL0LHQtdGA0LjRgtC1INCy0LjQtNC10L7Qv9C70LXQtdGAPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRWaWRlb1BsYXllclwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHZpZGVvUGxheWVyIG9mIHZpZGVvUGxheWVyczsgdHJhY2sgdmlkZW9QbGF5ZXIudHlwZSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInZpZGVvUGxheWVyLnR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3t2aWRlb1BsYXllci5kaXNwbGF5VmFsdWV9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKHNlbGVjdGVkVmlkZW9QbGF5ZXIgPT09IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Db2RlKSB7XG4gICAgICAgICAgICA8ZGl2ICBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD7QoNCw0LfQvNC10YLQutCwPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLQoNCw0LfQvNC10YLQutCwXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaHRtbFJhd1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2VsZWN0ZWRWYWx1ZSA9PT0gSHRtbFJhd1RhZ0RhdGFDb25zdHMuVGFnTmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPtCg0LDQt9C80LXRgtC60LA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICNhdXRvc2l6ZT1cImNka1RleHRhcmVhQXV0b3NpemVcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIGNka1RleHRhcmVhQXV0b3NpemVcbiAgICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWluUm93cz1cIjFcIlxuICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNYXhSb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItCi0LXQutGB0YJcIlxuICAgICAgICAgICAgICAgICAgI3RleHRBcmVhXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImh0bWxSYXdcIlxuICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNlbGVjdGVkVmFsdWUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGZsZXgtd3JhcDogd3JhcFwiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIycHg7IG92ZXJmbG93LXg6IGF1dG87XCI+XG4gICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGV4dFRhZ1wiXG4gICAgICAgICAgICAgICAgW2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgdGV4dFRhZ09wdGlvbnM7IHRyYWNrIG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwie3sgb3B0aW9uLnRhZyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24uZGlzcGxheVZhbHVlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjJweFwiPlxuICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgW2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgYWxpZ25tZW50T3B0aW9uczsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJ7eyBvcHRpb24udmFsdWUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWFsaWduLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRleHRBbGlnblRvZ2dsZUljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aWNvbjogb3B0aW9uLnZhbHVlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPtCi0LXQutGB0YI8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAjYXV0b3NpemU9XCJjZGtUZXh0YXJlYUF1dG9zaXplXCJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgY2RrVGV4dGFyZWFBdXRvc2l6ZVxuICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1pblJvd3M9XCIxXCJcbiAgICAgICAgICAgICAgY2RrQXV0b3NpemVNYXhSb3dzPVwiNVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0KLQtdC60YHRglwiXG4gICAgICAgICAgICAgICN0ZXh0QXJlYVxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRleHRcIlxuICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRUYWdDbGlja0hhbmRsZXIoKVwiIGNsYXNzPVwidy0xMDBcIiBtYXQtc3Ryb2tlZC1idXR0b24+XG4gICAgICAgICAgICDQlNC+0LHQsNCy0LjRgtGMINGC0LXQs1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMHB4O1wiPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBbaGlkZGVuXT1cImlzTG9hZGluZ1wiPlxuICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgIDxjcm9jby1odG1sLWFkZC1maWxlcy1idG4gKGZpbGVzVGFnc1JlYWR5KT1cImZpbGVzVGFnc1JlYWR5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIChwb3N0RmlsZXNTdGFydGVkKT1cInBvc3RGaWxlc1N0YXJ0ZWRFdmVudEhhbmRsZXIoJGV2ZW50KVwiIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICA8L2Nyb2NvLWh0bWwtYWRkLWZpbGVzLWJ0bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG5cbiAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgW2hpZGRlbl09XCJpc0xvYWRpbmdcIj5cbiAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxuICAgIEBmb3IgKHRhZyBvZiBib2R5VGFnczsgdHJhY2sgdGFnOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgPGRpdiBjZGtEcmFnPlxuICAgICAgICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkIHNwZWNpYWxcIj5cbiAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtaGFuZGxlXCIgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGNsYXNzPVwibW92ZS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8dXNlIFthdHRyLnhsaW5rOmhyZWZdPVwiJ21vdmUtaWNvbicgfCBzcHJpdGVJY29uUGF0aFwiPjwvdXNlPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2VcIiBbbWF0VG9vbHRpcF09XCJ0YWcudGFnRGVzY3JpcHRpb24udGFnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYWxpZ24taWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhZ0J1dHRvbkljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2ljb246IHRhZy50YWdEZXNjcmlwdGlvbi50YWd9XCI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDE1cHg7XCI+PC9kaXY+XG4gICAgICAgICAgICA8Y3JvY28taHRtbC1tYWluLWVkaXRvci1ibG9jayBbdGFnXT1cInRhZ1wiIChvblRhZ1NhdmVkKT1cIm9uVGFnU2F2ZWRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAob25UYWdSZW1vdmVkKT1cIm9uVGFnUmVtb3ZlZEhhbmRsZXIoaSlcIj5cbiAgICAgICAgICAgIDwvY3JvY28taHRtbC1tYWluLWVkaXRvci1ibG9jaz5cbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdGV4dEFsaWduVG9nZ2xlSWNvbnMgbGV0LWljb249XCJpY29uXCI+XG4gIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCI+XG4gICAgPHVzZSBbYXR0ci54bGluazpocmVmXT1cInNldEFsaWduQnV0dG9uKGljb24pIHwgc3ByaXRlSWNvblBhdGhcIj48L3VzZT5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhZ0J1dHRvbkljb25zIGxldC1pY29uPVwiaWNvblwiPlxuICBAaWYgKGljb24uaW5kZXhPZignaCcpID09PSAwICYmIGljb24ubGVuZ3RoID09PSAyKSB7XG4gICAge3tpY29uLnRvVXBwZXJDYXNlKCl9fVxuICB9XG4gIEBlbHNlIHtcbiAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiPlxuICAgICAgPHVzZSBbYXR0ci54bGluazpocmVmXT1cInNldFRhZ0J1dHRvbihpY29uKSB8IHNwcml0ZUljb25QYXRoXCI+PC91c2U+XG4gICAgPC9zdmc+XG4gIH1cbjwvbmctdGVtcGxhdGU+Il19
@@ -8,7 +8,6 @@ import { FileImageTagViewComponent } from '../file-image-tag-view/file-image-tag
8
8
  import { XmlTagHeaderTextViewComponent } from '../xml-tag-header-text-view/xml-tag-header-text-view.component';
9
9
  import { HtmlRawViewComponent } from '../html-raw-view/html-raw-view.component';
10
10
  import { XmlTagTextViewComponent } from '../xml-tag-text-view/xml-tag-text-view.component';
11
- import { ButtonEditorComponent } from "../../editor/button-editor/button-editor.component";
12
11
  import { XmlTagButtonComponent } from "../xml-tag-custom-button/xml-tag-button.component";
13
12
  import { XmlTagCustomWidgetComponent } from "../xml-tag-custom-widget/xml-tag-custom-widget.component";
14
13
  import * as i0 from "@angular/core";
@@ -33,11 +32,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
33
32
  ErrorBannerComponent,
34
33
  XmlTagExternalVideoComponent,
35
34
  XmlTagDownloadFileButtonComponent,
36
- ButtonEditorComponent,
37
35
  XmlTagButtonComponent,
38
36
  XmlTagCustomWidgetComponent,
39
37
  ], template: "<div>\n @for (item of data; track $index) {\n <div class=\"row\">\n\n @if (item.type === 'text') {\n <div>\n <croco-html-xml-tag-text-view [item]=\"item\"></croco-html-xml-tag-text-view>\n </div>\n }\n\n @if (item.type === 'html-raw') {\n <div>\n <croco-html-raw-view [rawHtml]=\"item.data.innerHTML\"></croco-html-raw-view>\n </div>\n }\n\n @if (isHeaderTextTag(item)) {\n <div>\n <croco-html-xml-tag-header-text-view [item]=\"item\"></croco-html-xml-tag-header-text-view>\n </div>\n }\n\n @if (item.type === 'file-image') {\n <div>\n <croco-html-file-image-tag-view [item]=\"item\"></croco-html-file-image-tag-view>\n </div>\n }\n\n @if (item.type === 'custom-widget') {\n <div>\n <croco-html-xml-tag-custom-widget [tagData]=\"item.data\"></croco-html-xml-tag-custom-widget>\n </div>\n }\n\n @if (item.type === 'table' && item.validationResult) {\n\n @if (item.validationResult.isSucceeded){\n <croco-html-xml-tag-html-view [html]=\"item.bootstrapHtml\">\n </croco-html-xml-tag-html-view>\n }\n @else {\n <croco-html-error-banner [message]=\"item.validationResult.message\">\n </croco-html-error-banner>\n }\n }\n\n @if (item.type === 'rich-text') {\n <div>\n <croco-html-xml-tag-text-view></croco-html-xml-tag-text-view>\n </div>\n }\n\n @if (item.type === 'external-video') {\n <div>\n <croco-html-xml-tag-external-video [data]=\"item\"></croco-html-xml-tag-external-video>\n </div>\n }\n\n @if (item.type === 'download-file-button') {\n <div>\n <croco-html-xml-tag-download-file-button [data]=\"item\"></croco-html-xml-tag-download-file-button>\n </div>\n }\n\n @if (item.type === 'button') {\n <div>\n <croco-html-xml-tag-button [data]=\"item\"></croco-html-xml-tag-button>\n </div>\n }\n @if (item.type === 'unsupported-tag') {\n <div class=\"red\" style=\"margin-top: 10px;\">\n <h4>\u0414\u0430\u043D\u043D\u044B\u0439 \u0442\u0435\u0433 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F</h4>\n <span>\n {{item.data.tagString}}\n </span>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".red{background-color:#c94444;color:#fff}\n"] }]
40
38
  }], propDecorators: { data: [{
41
39
  type: Input
42
40
  }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXRhZy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL3htbC10YWdzL3htbC10YWctdmlldy94bWwtdGFnLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JvY28taHRtbC9zcmMvbGliL2NvbXBvbmVudHMveG1sLXRhZ3MveG1sLXRhZy12aWV3L3htbC10YWctdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDM0gsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDMUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDakcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDL0csT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDMUYsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sMERBQTBELENBQUM7O0FBc0JyRyxNQUFNLE9BQU8sbUJBQW1CO0lBcEJoQztRQXVCRSxTQUFJLEdBQXFCLEVBQUUsQ0FBQztLQUs3QjtJQUhDLGVBQWUsQ0FBQyxJQUFvQjtRQUNsQyxPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDOzhHQVBVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDZHQ25DaEMsbXRFQWdGQSxxR0QxREksdUJBQXVCLDJGQUN2QixvQkFBb0IscUZBQ3BCLDZCQUE2QixrR0FDN0IseUJBQXlCLDZGQUN6Qix1QkFBdUIsMkZBQ3ZCLG9CQUFvQix5RkFDcEIsNEJBQTRCLDJHQUM1QixpQ0FBaUMsaUhBRWpDLHFCQUFxQixtR0FDckIsMkJBQTJCOzsyRkFHbEIsbUJBQW1CO2tCQXBCL0IsU0FBUzsrQkFDRSx5QkFBeUIsaUJBR3BCLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQO3dCQUNQLHVCQUF1Qjt3QkFDdkIsb0JBQW9CO3dCQUNwQiw2QkFBNkI7d0JBQzdCLHlCQUF5Qjt3QkFDekIsdUJBQXVCO3dCQUN2QixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFDNUIsaUNBQWlDO3dCQUNqQyxxQkFBcUI7d0JBQ3JCLHFCQUFxQjt3QkFDckIsMkJBQTJCO3FCQUM1Qjs4QkFLRCxJQUFJO3NCQURILEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEludGVyZmFjZUJsb2NrIH0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuc2lvbnMvSW50ZXJmYWNlQmxvY2tcIjtcbmltcG9ydCB7IFRleHRUYWdzIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBYbWxUYWdEb3dubG9hZEZpbGVCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLWRvd25sb2FkLWZpbGUtYnV0dG9uL3htbC10YWctZG93bmxvYWQtZmlsZS1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFhtbFRhZ0V4dGVybmFsVmlkZW9Db21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLWV4dGVybmFsLXZpZGVvL3htbC10YWctZXh0ZXJuYWwtdmlkZW8uY29tcG9uZW50JztcbmltcG9ydCB7IEVycm9yQmFubmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZXJyb3ItYmFubmVyL2Vycm9yLWJhbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgWG1sVGFnSHRtbFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLWh0bWwtdmlldy94bWwtdGFnLWh0bWwtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZUltYWdlVGFnVmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbGUtaW1hZ2UtdGFnLXZpZXcvZmlsZS1pbWFnZS10YWctdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgWG1sVGFnSGVhZGVyVGV4dFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLWhlYWRlci10ZXh0LXZpZXcveG1sLXRhZy1oZWFkZXItdGV4dC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIdG1sUmF3Vmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2h0bWwtcmF3LXZpZXcvaHRtbC1yYXctdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgWG1sVGFnVGV4dFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLXRleHQtdmlldy94bWwtdGFnLXRleHQtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uRWRpdG9yQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2VkaXRvci9idXR0b24tZWRpdG9yL2J1dHRvbi1lZGl0b3IuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBYbWxUYWdCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiLi4veG1sLXRhZy1jdXN0b20tYnV0dG9uL3htbC10YWctYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtYbWxUYWdDdXN0b21XaWRnZXRDb21wb25lbnR9IGZyb20gXCIuLi94bWwtdGFnLWN1c3RvbS13aWRnZXQveG1sLXRhZy1jdXN0b20td2lkZ2V0LmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcm9jby1odG1sLXhtbC10YWctdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi94bWwtdGFnLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi94bWwtdGFnLXZpZXcuY29tcG9uZW50LmNzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgWG1sVGFnVGV4dFZpZXdDb21wb25lbnQsXG4gICAgSHRtbFJhd1ZpZXdDb21wb25lbnQsXG4gICAgWG1sVGFnSGVhZGVyVGV4dFZpZXdDb21wb25lbnQsXG4gICAgRmlsZUltYWdlVGFnVmlld0NvbXBvbmVudCxcbiAgICBYbWxUYWdIdG1sVmlld0NvbXBvbmVudCxcbiAgICBFcnJvckJhbm5lckNvbXBvbmVudCxcbiAgICBYbWxUYWdFeHRlcm5hbFZpZGVvQ29tcG9uZW50LFxuICAgIFhtbFRhZ0Rvd25sb2FkRmlsZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBCdXR0b25FZGl0b3JDb21wb25lbnQsXG4gICAgWG1sVGFnQnV0dG9uQ29tcG9uZW50LFxuICAgIFhtbFRhZ0N1c3RvbVdpZGdldENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgWG1sVGFnVmlld0NvbXBvbmVudCB7XG5cbiAgQElucHV0KClcbiAgZGF0YTogSW50ZXJmYWNlQmxvY2tbXSA9IFtdO1xuXG4gIGlzSGVhZGVyVGV4dFRhZyhpdGVtOiBJbnRlcmZhY2VCbG9jaykge1xuICAgIHJldHVybiBUZXh0VGFncy5oZWFkZXJUZXh0VGFncy5pbmNsdWRlcyhpdGVtLnR5cGUpO1xuICB9XG59XG4iLCI8ZGl2PlxuICBAZm9yIChpdGVtIG9mIGRhdGE7IHRyYWNrICRpbmRleCkge1xuICA8ZGl2IGNsYXNzPVwicm93XCI+XG5cbiAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgPGRpdj5cbiAgICAgIDxjcm9jby1odG1sLXhtbC10YWctdGV4dC12aWV3IFtpdGVtXT1cIml0ZW1cIj48L2Nyb2NvLWh0bWwteG1sLXRhZy10ZXh0LXZpZXc+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICdodG1sLXJhdycpIHtcbiAgICA8ZGl2PlxuICAgICAgPGNyb2NvLWh0bWwtcmF3LXZpZXcgW3Jhd0h0bWxdPVwiaXRlbS5kYXRhLmlubmVySFRNTFwiPjwvY3JvY28taHRtbC1yYXctdmlldz5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGlzSGVhZGVyVGV4dFRhZyhpdGVtKSkge1xuICAgIDxkaXY+XG4gICAgICA8Y3JvY28taHRtbC14bWwtdGFnLWhlYWRlci10ZXh0LXZpZXcgW2l0ZW1dPVwiaXRlbVwiPjwvY3JvY28taHRtbC14bWwtdGFnLWhlYWRlci10ZXh0LXZpZXc+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICdmaWxlLWltYWdlJykge1xuICAgIDxkaXY+XG4gICAgICA8Y3JvY28taHRtbC1maWxlLWltYWdlLXRhZy12aWV3IFtpdGVtXT1cIml0ZW1cIj48L2Nyb2NvLWh0bWwtZmlsZS1pbWFnZS10YWctdmlldz5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2N1c3RvbS13aWRnZXQnKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8Y3JvY28taHRtbC14bWwtdGFnLWN1c3RvbS13aWRnZXQgW3RhZ0RhdGFdPVwiaXRlbS5kYXRhXCI+PC9jcm9jby1odG1sLXhtbC10YWctY3VzdG9tLXdpZGdldD5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaXRlbS50eXBlID09PSAndGFibGUnICYmIGl0ZW0udmFsaWRhdGlvblJlc3VsdCkge1xuXG4gICAgQGlmIChpdGVtLnZhbGlkYXRpb25SZXN1bHQuaXNTdWNjZWVkZWQpe1xuICAgIDxjcm9jby1odG1sLXhtbC10YWctaHRtbC12aWV3IFtodG1sXT1cIml0ZW0uYm9vdHN0cmFwSHRtbFwiPlxuICAgIDwvY3JvY28taHRtbC14bWwtdGFnLWh0bWwtdmlldz5cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgIDxjcm9jby1odG1sLWVycm9yLWJhbm5lciBbbWVzc2FnZV09XCJpdGVtLnZhbGlkYXRpb25SZXN1bHQubWVzc2FnZVwiPlxuICAgIDwvY3JvY28taHRtbC1lcnJvci1iYW5uZXI+XG4gICAgfVxuICAgIH1cblxuICAgIEBpZiAoaXRlbS50eXBlID09PSAncmljaC10ZXh0Jykge1xuICAgIDxkaXY+XG4gICAgICA8Y3JvY28taHRtbC14bWwtdGFnLXRleHQtdmlldz48L2Nyb2NvLWh0bWwteG1sLXRhZy10ZXh0LXZpZXc+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICdleHRlcm5hbC12aWRlbycpIHtcbiAgICA8ZGl2PlxuICAgICAgPGNyb2NvLWh0bWwteG1sLXRhZy1leHRlcm5hbC12aWRlbyBbZGF0YV09XCJpdGVtXCI+PC9jcm9jby1odG1sLXhtbC10YWctZXh0ZXJuYWwtdmlkZW8+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICdkb3dubG9hZC1maWxlLWJ1dHRvbicpIHtcbiAgICA8ZGl2PlxuICAgICAgPGNyb2NvLWh0bWwteG1sLXRhZy1kb3dubG9hZC1maWxlLWJ1dHRvbiBbZGF0YV09XCJpdGVtXCI+PC9jcm9jby1odG1sLXhtbC10YWctZG93bmxvYWQtZmlsZS1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICdidXR0b24nKSB7XG4gICAgPGRpdj5cbiAgICAgIDxjcm9jby1odG1sLXhtbC10YWctYnV0dG9uIFtkYXRhXT1cIml0ZW1cIj48L2Nyb2NvLWh0bWwteG1sLXRhZy1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoaXRlbS50eXBlID09PSAndW5zdXBwb3J0ZWQtdGFnJykge1xuICAgIDxkaXYgY2xhc3M9XCJyZWRcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCI+XG4gICAgICA8aDQ+0JTQsNC90L3Ri9C5INGC0LXQsyDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y88L2g0PlxuICAgICAgPHNwYW4+XG4gICAgICAgIHt7aXRlbS5kYXRhLnRhZ1N0cmluZ319XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXRhZy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL3htbC10YWdzL3htbC10YWctdmlldy94bWwtdGFnLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JvY28taHRtbC9zcmMvbGliL2NvbXBvbmVudHMveG1sLXRhZ3MveG1sLXRhZy12aWV3L3htbC10YWctdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDM0gsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDMUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDakcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDL0csT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDMUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMERBQTBELENBQUM7O0FBcUJ2RyxNQUFNLE9BQU8sbUJBQW1CO0lBbkJoQztRQXNCRSxTQUFJLEdBQXFCLEVBQUUsQ0FBQztLQUs3QjtJQUhDLGVBQWUsQ0FBQyxJQUFvQjtRQUNsQyxPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDOzhHQVBVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDZHQ2pDaEMsbXRFQWdGQSxxR0QzREksdUJBQXVCLDJGQUN2QixvQkFBb0IscUZBQ3BCLDZCQUE2QixrR0FDN0IseUJBQXlCLDZGQUN6Qix1QkFBdUIsMkZBQ3ZCLG9CQUFvQix5RkFDcEIsNEJBQTRCLDJHQUM1QixpQ0FBaUMsaUhBQ2pDLHFCQUFxQixtR0FDckIsMkJBQTJCOzsyRkFHbEIsbUJBQW1CO2tCQW5CL0IsU0FBUzsrQkFDRSx5QkFBeUIsaUJBR3BCLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQO3dCQUNQLHVCQUF1Qjt3QkFDdkIsb0JBQW9CO3dCQUNwQiw2QkFBNkI7d0JBQzdCLHlCQUF5Qjt3QkFDekIsdUJBQXVCO3dCQUN2QixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFDNUIsaUNBQWlDO3dCQUNqQyxxQkFBcUI7d0JBQ3JCLDJCQUEyQjtxQkFDNUI7OEJBS0QsSUFBSTtzQkFESCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEludGVyZmFjZUJsb2NrIH0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuc2lvbnMvSW50ZXJmYWNlQmxvY2tcIjtcbmltcG9ydCB7IFRleHRUYWdzIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBYbWxUYWdEb3dubG9hZEZpbGVCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLWRvd25sb2FkLWZpbGUtYnV0dG9uL3htbC10YWctZG93bmxvYWQtZmlsZS1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFhtbFRhZ0V4dGVybmFsVmlkZW9Db21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLWV4dGVybmFsLXZpZGVvL3htbC10YWctZXh0ZXJuYWwtdmlkZW8uY29tcG9uZW50JztcbmltcG9ydCB7IEVycm9yQmFubmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZXJyb3ItYmFubmVyL2Vycm9yLWJhbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgWG1sVGFnSHRtbFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLWh0bWwtdmlldy94bWwtdGFnLWh0bWwtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZUltYWdlVGFnVmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbGUtaW1hZ2UtdGFnLXZpZXcvZmlsZS1pbWFnZS10YWctdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgWG1sVGFnSGVhZGVyVGV4dFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLWhlYWRlci10ZXh0LXZpZXcveG1sLXRhZy1oZWFkZXItdGV4dC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIdG1sUmF3Vmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2h0bWwtcmF3LXZpZXcvaHRtbC1yYXctdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgWG1sVGFnVGV4dFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi94bWwtdGFnLXRleHQtdmlldy94bWwtdGFnLXRleHQtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgWG1sVGFnQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3htbC10YWctY3VzdG9tLWJ1dHRvbi94bWwtdGFnLWJ1dHRvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IFhtbFRhZ0N1c3RvbVdpZGdldENvbXBvbmVudCB9IGZyb20gXCIuLi94bWwtdGFnLWN1c3RvbS13aWRnZXQveG1sLXRhZy1jdXN0b20td2lkZ2V0LmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcm9jby1odG1sLXhtbC10YWctdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi94bWwtdGFnLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi94bWwtdGFnLXZpZXcuY29tcG9uZW50LmNzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgWG1sVGFnVGV4dFZpZXdDb21wb25lbnQsXG4gICAgSHRtbFJhd1ZpZXdDb21wb25lbnQsXG4gICAgWG1sVGFnSGVhZGVyVGV4dFZpZXdDb21wb25lbnQsXG4gICAgRmlsZUltYWdlVGFnVmlld0NvbXBvbmVudCxcbiAgICBYbWxUYWdIdG1sVmlld0NvbXBvbmVudCxcbiAgICBFcnJvckJhbm5lckNvbXBvbmVudCxcbiAgICBYbWxUYWdFeHRlcm5hbFZpZGVvQ29tcG9uZW50LFxuICAgIFhtbFRhZ0Rvd25sb2FkRmlsZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBYbWxUYWdCdXR0b25Db21wb25lbnQsXG4gICAgWG1sVGFnQ3VzdG9tV2lkZ2V0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBYbWxUYWdWaWV3Q29tcG9uZW50IHtcblxuICBASW5wdXQoKVxuICBkYXRhOiBJbnRlcmZhY2VCbG9ja1tdID0gW107XG5cbiAgaXNIZWFkZXJUZXh0VGFnKGl0ZW06IEludGVyZmFjZUJsb2NrKSB7XG4gICAgcmV0dXJuIFRleHRUYWdzLmhlYWRlclRleHRUYWdzLmluY2x1ZGVzKGl0ZW0udHlwZSk7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIEBmb3IgKGl0ZW0gb2YgZGF0YTsgdHJhY2sgJGluZGV4KSB7XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cblxuICAgIEBpZiAoaXRlbS50eXBlID09PSAndGV4dCcpIHtcbiAgICA8ZGl2PlxuICAgICAgPGNyb2NvLWh0bWwteG1sLXRhZy10ZXh0LXZpZXcgW2l0ZW1dPVwiaXRlbVwiPjwvY3JvY28taHRtbC14bWwtdGFnLXRleHQtdmlldz5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2h0bWwtcmF3Jykge1xuICAgIDxkaXY+XG4gICAgICA8Y3JvY28taHRtbC1yYXctdmlldyBbcmF3SHRtbF09XCJpdGVtLmRhdGEuaW5uZXJIVE1MXCI+PC9jcm9jby1odG1sLXJhdy12aWV3PlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaXNIZWFkZXJUZXh0VGFnKGl0ZW0pKSB7XG4gICAgPGRpdj5cbiAgICAgIDxjcm9jby1odG1sLXhtbC10YWctaGVhZGVyLXRleHQtdmlldyBbaXRlbV09XCJpdGVtXCI+PC9jcm9jby1odG1sLXhtbC10YWctaGVhZGVyLXRleHQtdmlldz5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2ZpbGUtaW1hZ2UnKSB7XG4gICAgPGRpdj5cbiAgICAgIDxjcm9jby1odG1sLWZpbGUtaW1hZ2UtdGFnLXZpZXcgW2l0ZW1dPVwiaXRlbVwiPjwvY3JvY28taHRtbC1maWxlLWltYWdlLXRhZy12aWV3PlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaXRlbS50eXBlID09PSAnY3VzdG9tLXdpZGdldCcpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxjcm9jby1odG1sLXhtbC10YWctY3VzdG9tLXdpZGdldCBbdGFnRGF0YV09XCJpdGVtLmRhdGFcIj48L2Nyb2NvLWh0bWwteG1sLXRhZy1jdXN0b20td2lkZ2V0PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICd0YWJsZScgJiYgaXRlbS52YWxpZGF0aW9uUmVzdWx0KSB7XG5cbiAgICBAaWYgKGl0ZW0udmFsaWRhdGlvblJlc3VsdC5pc1N1Y2NlZWRlZCl7XG4gICAgPGNyb2NvLWh0bWwteG1sLXRhZy1odG1sLXZpZXcgW2h0bWxdPVwiaXRlbS5ib290c3RyYXBIdG1sXCI+XG4gICAgPC9jcm9jby1odG1sLXhtbC10YWctaHRtbC12aWV3PlxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgPGNyb2NvLWh0bWwtZXJyb3ItYmFubmVyIFttZXNzYWdlXT1cIml0ZW0udmFsaWRhdGlvblJlc3VsdC5tZXNzYWdlXCI+XG4gICAgPC9jcm9jby1odG1sLWVycm9yLWJhbm5lcj5cbiAgICB9XG4gICAgfVxuXG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICdyaWNoLXRleHQnKSB7XG4gICAgPGRpdj5cbiAgICAgIDxjcm9jby1odG1sLXhtbC10YWctdGV4dC12aWV3PjwvY3JvY28taHRtbC14bWwtdGFnLXRleHQtdmlldz5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2V4dGVybmFsLXZpZGVvJykge1xuICAgIDxkaXY+XG4gICAgICA8Y3JvY28taHRtbC14bWwtdGFnLWV4dGVybmFsLXZpZGVvIFtkYXRhXT1cIml0ZW1cIj48L2Nyb2NvLWh0bWwteG1sLXRhZy1leHRlcm5hbC12aWRlbz5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2Rvd25sb2FkLWZpbGUtYnV0dG9uJykge1xuICAgIDxkaXY+XG4gICAgICA8Y3JvY28taHRtbC14bWwtdGFnLWRvd25sb2FkLWZpbGUtYnV0dG9uIFtkYXRhXT1cIml0ZW1cIj48L2Nyb2NvLWh0bWwteG1sLXRhZy1kb3dubG9hZC1maWxlLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2J1dHRvbicpIHtcbiAgICA8ZGl2PlxuICAgICAgPGNyb2NvLWh0bWwteG1sLXRhZy1idXR0b24gW2RhdGFdPVwiaXRlbVwiPjwvY3JvY28taHRtbC14bWwtdGFnLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICd1bnN1cHBvcnRlZC10YWcnKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlZFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMTBweDtcIj5cbiAgICAgIDxoND7QlNCw0L3QvdGL0Lkg0YLQtdCzINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjzwvaDQ+XG4gICAgICA8c3Bhbj5cbiAgICAgICAge3tpdGVtLmRhdGEudGFnU3RyaW5nfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==