@firestitch/app-message 12.7.5 → 12.7.7

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.
Files changed (29) hide show
  1. package/app/modules/message-queues/components/queues/queues.component.d.ts +1 -1
  2. package/app/modules/message-queues/services/message-queue.service.d.ts +4 -6
  3. package/app/modules/messages/components/message/message.component.d.ts +2 -2
  4. package/bundles/firestitch-app-message.umd.js +691 -553
  5. package/bundles/firestitch-app-message.umd.js.map +1 -1
  6. package/esm2015/app/modules/app-message/app-message.module.js +4 -4
  7. package/esm2015/app/modules/message-preview/components/preview/preview.component.js +3 -3
  8. package/esm2015/app/modules/message-preview/message-preview.module.js +4 -4
  9. package/esm2015/app/modules/message-queues/components/queue/queue.component.js +5 -4
  10. package/esm2015/app/modules/message-queues/components/queues/queues.component.js +20 -18
  11. package/esm2015/app/modules/message-queues/components/recipient/recipient.component.js +3 -3
  12. package/esm2015/app/modules/message-queues/message-queues.module.js +12 -18
  13. package/esm2015/app/modules/message-queues/pipes/linkify.pipe.js +3 -3
  14. package/esm2015/app/modules/message-queues/pipes/truncate.pipe.js +3 -3
  15. package/esm2015/app/modules/message-queues/services/message-queue.service.js +13 -17
  16. package/esm2015/app/modules/message-templates/components/template/template.component.js +3 -3
  17. package/esm2015/app/modules/message-templates/components/templates/templates.component.js +3 -3
  18. package/esm2015/app/modules/message-templates/message-templates.module.js +4 -4
  19. package/esm2015/app/modules/messages/components/attachments/attachments.component.js +3 -3
  20. package/esm2015/app/modules/messages/components/message/message.component.js +11 -11
  21. package/esm2015/app/modules/messages/components/messages/messages.component.js +3 -3
  22. package/esm2015/app/modules/messages/messages.module.js +4 -4
  23. package/esm2015/app/modules/webhooks/components/webhooks/webhooks.component.js +3 -3
  24. package/esm2015/app/modules/webhooks/webhooks.module.js +4 -4
  25. package/esm2015/public_api.js +7 -10
  26. package/fesm2015/firestitch-app-message.js +150 -158
  27. package/fesm2015/firestitch-app-message.js.map +1 -1
  28. package/package.json +2 -2
  29. package/public_api.d.ts +6 -6
@@ -1,13 +1,13 @@
1
- import { Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
2
- import { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
3
3
  import { FsMessage } from '@firestitch/message';
4
4
  import { FsPrompt } from '@firestitch/prompt';
5
5
  import { switchMap, tap } from 'rxjs/operators';
6
- import { EmailMessageFormats } from '../../consts';
7
- import { EmailMessageFormat } from '../../enums';
6
+ import { of } from 'rxjs';
8
7
  import { PreviewComponent } from '../../../../modules/message-preview/components';
9
8
  import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
10
- import { of } from 'rxjs';
9
+ import { EmailMessageFormats } from '../../consts';
10
+ import { EmailMessageFormat } from '../../enums';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@firestitch/prompt";
13
13
  import * as i2 from "@firestitch/message";
@@ -74,7 +74,7 @@ export class MessageComponent {
74
74
  openPreview() {
75
75
  const emailMessage = this.message.emailMessage;
76
76
  let html = emailMessage.customize ? emailMessage.body : this.message.defaultEmailBody;
77
- let styles = emailMessage.styles;
77
+ let styles = emailMessage.styles || '';
78
78
  if (emailMessage.messageTemplateId) {
79
79
  const messageTemplate = this.messageTemplates
80
80
  .find((item) => {
@@ -82,7 +82,7 @@ export class MessageComponent {
82
82
  });
83
83
  if (messageTemplate) {
84
84
  html = messageTemplate.content.replace('{$content}', html);
85
- styles = messageTemplate.styles.concat(styles);
85
+ styles = `${messageTemplate.styles || ''}\n\n${styles}`;
86
86
  }
87
87
  }
88
88
  this._dialog.open(PreviewComponent, {
@@ -115,9 +115,9 @@ export class MessageComponent {
115
115
  });
116
116
  }
117
117
  }
118
- MessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MessageComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: MAT_DIALOG_DATA }, { token: i1.FsPrompt }, { token: i2.FsMessage }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
119
- MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: MessageComponent, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"message\"\n [confirmTabs]=\"false\">\n <fs-dialog *ngIf=\"message\">\n <div mat-dialog-title>Edit Message</div>\n <mat-dialog-content>\n <mat-tab-group \n fsTabs \n [(selected)]=\"tab\">\n <mat-tab label=\"General\" name=\"general\">\n <ng-template matTabContent>\n <div fxLayout=\"column\">\n <div fxLayoutGap=\"20px\">\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"Name\"\n [(ngModel)]=\"message.name\"\n name=\"Name\"\n required>\n </mat-form-field>\n <fs-label-field>\n <fs-label>Reference</fs-label>\n {{message.reference}}\n </fs-label-field>\n </div>\n <mat-form-field>\n <input\n matInput\n placeholder=\"Description\"\n [(ngModel)]=\"message.description\"\n name=\"description\">\n </mat-form-field>\n\n <div\n fxLayout=\"row\"\n fxLayoutGap=\"10px\"\n fxLayout.xs=\"column\"\n fxLayout.sm=\"column\">\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"From Email\"\n [(ngModel)]=\"message.emailMessage.fromEmail\"\n name=\"from_email\">\n </mat-form-field>\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"From Name\"\n [(ngModel)]=\"message.emailMessage.fromName\"\n name=\"from_name\">\n </mat-form-field>\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"Reply To\"\n [(ngModel)]=\"message.emailMessage.replyTo\"\n name=\"reply_to\">\n </mat-form-field>\n </div>\n\n <div\n fxLayout=\"row\"\n fxLayoutGap=\"10px\"\n fxLayout.xs=\"column\"\n fxLayout.sm=\"column\">\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"To\"\n [(ngModel)]=\"message.emailMessage.toRecipients\"\n name=\"to\">\n </mat-form-field>\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"CC\"\n [(ngModel)]=\"message.emailMessage.ccRecipients\"\n name=\"cc\">\n </mat-form-field>\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"BCC\"\n [(ngModel)]=\"message.emailMessage.bccRecipients\"\n name=\"bcc\">\n </mat-form-field>\n </div>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Email Message\" *ngIf=\"message.emailMessage\" name=\"email\">\n <ng-template matTabContent>\n <div fxLayout=\"column\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Customize Message\"\n [(ngModel)]=\"message.emailMessage.customize\"\n name=\"customizeEmail\">\n <mat-option [value]=\"true\">Yes</mat-option>\n <mat-option [value]=\"false\">No</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Format\"\n [(ngModel)]=\"message.emailMessage.format\"\n name=\"format\">\n <mat-option *ngFor=\"let item of emailMessageFormats\" [value]=\"item.value\">\n {{item.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-select\n placeholder=\"Template\"\n [(ngModel)]=\"message.emailMessage.messageTemplateId\"\n name=\"template\">\n <mat-option [value]=\"null\">None</mat-option>\n <mat-option *ngFor=\"let item of messageTemplates\" [value]=\"item.id\">\n {{item.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngIf=\"message.emailMessage.customize\">\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"Subject\"\n [(ngModel)]=\"message.emailMessage.subject\"\n name=\"name\"\n required>\n </mat-form-field>\n\n <div [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <fs-text-editor\n *ngIf=\"message.emailMessage.format===emailMessageFormat.HTML\"\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\"\n [config]=\"{ language: 'html '}\">\n </fs-text-editor>\n\n <fs-html-editor\n *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText\"\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\">\n </fs-html-editor>\n\n <fs-text-editor\n *ngIf=\"message.emailMessage.format===emailMessageFormat.Text\"\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"emailMessageBody\"\n [config]=\"{ language: 'text' }\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n <mat-tab\n *ngIf=\"message.emailMessage.format===emailMessageFormat.HTML || message.emailMessage.format===emailMessageFormat.RichText\"\n label=\"Styles\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.styles\"\n name=\"styles\"\n [config]=\"{ language: 'scss' }\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!message.emailMessage.customize\">\n <fs-label-field>\n <fs-label>Subject</fs-label>\n {{message.defaultEmailSubject}}\n </fs-label-field>\n <div>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"email-body-html-default\">\n <fs-html-renderer\n *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText || message.emailMessage.format===emailMessageFormat.HTML\"\n [html]=\"message.defaultEmailBody\">\n </fs-html-renderer>\n </div>\n <div\n class=\"email-body-text-default\"\n *ngIf=\"message.emailMessage.format===emailMessageFormat.Text\">\n {{message.defaultEmailBody}}\n </div>\n </fs-label-field>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"!!message.smsMessage\">\n <mat-tab label=\"SMS Message\" name=\"sms\">\n <ng-template matTabContent>\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Customize Message\"\n [(ngModel)]=\"message.smsMessage.customize\"\n name=\"customizeSms\">\n <mat-option [value]=\"true\">Yes</mat-option>\n <mat-option [value]=\"false\">No</mat-option>\n </mat-select>\n </mat-form-field>\n <div\n *ngIf=\"message.smsMessage.customize\"\n [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.smsMessage.message\"\n name=\"smsMessageMessage\"\n [config]=\"{ language: 'text '}\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n <fs-label-field *ngIf=\"!message.smsMessage.customize\">\n <fs-label>Message</fs-label>\n {{message.defaultSmsMessage}}\n </fs-label-field>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <mat-tab label=\"Attachments\" *ngIf=\"message.emailMessage\" name=\"attachments\">\n <ng-template matTabContent>\n <fs-app-message-attachments \n [message]=\"message\">\n </fs-app-message-attachments>\n </ng-template>\n </mat-tab>\n\n <mat-tab label=\"Variables\" *ngIf=\"message.variables\">\n <ng-template matTabContent>\n <div *ngFor=\"let variable of message.variables\" class=\"variable\">\n {{variable.name}}\n </div>\n </ng-template>\n </mat-tab>\n\n <mat-tab label=\"Defaults\">\n <ng-template matTabContent>\n <ng-container *ngIf=\"message.emailMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">Email</h2>\n <fs-label-field>\n <fs-label>Subject</fs-label>\n <div class=\"content\">{{message.defaultEmailSubject}}</div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"content\">{{message.defaultEmailBody}}</div>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"message.smsMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">SMS</h2>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"content\">{{message.defaultSmsMessage}}</div>\n </fs-label-field>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"tab==='email' || tab==='sms' || tab==='general'; else done\">\n <button \n mat-button \n color=\"primary\">\n Save\n </button> \n <ng-container *ngIf=\"tab==='email'\">\n <button \n mat-button\n type=\"button\"\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('email')\"\n type=\"button\">\n Send Test Email\n </button>\n </ng-container>\n <ng-container *ngIf=\"tab==='sms'\">\n <button \n mat-button\n type=\"button\"\n (click)=\"sendTest('sms')\"\n type=\"button\">\n Send Test SMS\n </button>\n </ng-container>\n <button \n mat-button \n [mat-dialog-close]=\"null\" \n type=\"button\">\n Cancel\n </button>\n </ng-container> \n <ng-template #done>\n <button \n mat-button \n color=\"primary\"\n [mat-dialog-close]=\"null\" \n type=\"button\">\n Close\n </button>\n </ng-template>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: ["fs-label-field .content{white-space:pre-wrap}:host ::ng-deep .mat-tab-body-content,:host ::ng-deep .mat-tab-body{overflow:visible}:host ::ng-deep .sms-message{width:100%}:host ::ng-deep .email-body-text-default{white-space:pre-line}.email-body-text{width:100%}.variable{margin-bottom:4px}\n"], components: [{ type: i4.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i7.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i7.FsLabelComponent, selector: "fs-label" }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["init", "blur"] }, { type: i11.FsHtmlEditorComponent, selector: "fs-html-editor", inputs: ["config"] }, { type: i11.FsHtmlRendererComponent, selector: "fs-html-renderer", inputs: ["html"] }, { type: i12.AttachmentsComponent, selector: "fs-app-message-attachments", inputs: ["message"] }, { type: i13.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i14.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i15.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i15.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i16.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i18.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { type: i18.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { type: i5.MatTabContent, selector: "[matTabContent]" }, { type: i19.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i19.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i19.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i20.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i15.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i16.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MessageComponent, decorators: [{
118
+ MessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MessageComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: MAT_DIALOG_DATA }, { token: i1.FsPrompt }, { token: i2.FsMessage }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
119
+ MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MessageComponent, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"message\"\n [confirmTabs]=\"false\">\n <fs-dialog *ngIf=\"message\">\n <div mat-dialog-title>Edit Message</div>\n <mat-dialog-content>\n <mat-tab-group \n fsTabs \n [(selected)]=\"tab\">\n <mat-tab label=\"General\" name=\"general\">\n <ng-template matTabContent>\n <div fxLayout=\"column\">\n <div fxLayoutGap=\"20px\">\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"Name\"\n [(ngModel)]=\"message.name\"\n name=\"Name\"\n required>\n </mat-form-field>\n <fs-label-field>\n <fs-label>Reference</fs-label>\n {{message.reference}}\n </fs-label-field>\n </div>\n <mat-form-field>\n <input\n matInput\n placeholder=\"Description\"\n [(ngModel)]=\"message.description\"\n name=\"description\">\n </mat-form-field>\n\n <div\n fxLayout=\"row\"\n fxLayoutGap=\"10px\"\n fxLayout.xs=\"column\"\n fxLayout.sm=\"column\">\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"From Email\"\n [(ngModel)]=\"message.emailMessage.fromEmail\"\n name=\"from_email\">\n </mat-form-field>\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"From Name\"\n [(ngModel)]=\"message.emailMessage.fromName\"\n name=\"from_name\">\n </mat-form-field>\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"Reply To\"\n [(ngModel)]=\"message.emailMessage.replyTo\"\n name=\"reply_to\">\n </mat-form-field>\n </div>\n\n <div\n fxLayout=\"row\"\n fxLayoutGap=\"10px\"\n fxLayout.xs=\"column\"\n fxLayout.sm=\"column\">\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"To\"\n [(ngModel)]=\"message.emailMessage.toRecipients\"\n name=\"to\">\n </mat-form-field>\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"CC\"\n [(ngModel)]=\"message.emailMessage.ccRecipients\"\n name=\"cc\">\n </mat-form-field>\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"BCC\"\n [(ngModel)]=\"message.emailMessage.bccRecipients\"\n name=\"bcc\">\n </mat-form-field>\n </div>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Email Message\" *ngIf=\"message.emailMessage\" name=\"email\">\n <ng-template matTabContent>\n <div fxLayout=\"column\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Customize Message\"\n [(ngModel)]=\"message.emailMessage.customize\"\n name=\"customizeEmail\">\n <mat-option [value]=\"true\">Yes</mat-option>\n <mat-option [value]=\"false\">No</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Format\"\n [(ngModel)]=\"message.emailMessage.format\"\n name=\"format\">\n <mat-option *ngFor=\"let item of emailMessageFormats\" [value]=\"item.value\">\n {{item.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-select\n placeholder=\"Template\"\n [(ngModel)]=\"message.emailMessage.messageTemplateId\"\n name=\"template\">\n <mat-option [value]=\"null\">None</mat-option>\n <mat-option *ngFor=\"let item of messageTemplates\" [value]=\"item.id\">\n {{item.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngIf=\"message.emailMessage.customize\">\n <mat-form-field fxFlex>\n <input\n matInput\n placeholder=\"Subject\"\n [(ngModel)]=\"message.emailMessage.subject\"\n name=\"name\"\n required>\n </mat-form-field>\n\n <div [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <ng-container *ngIf=\"message.emailMessage.format===emailMessageFormat.HTML\">\n <fs-text-editor \n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\"\n [config]=\"{ language: 'html '}\">\n </fs-text-editor>\n </ng-container>\n\n <ng-container *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText\">\n <fs-html-editor \n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\">\n </fs-html-editor>\n </ng-container>\n\n <ng-container *ngIf=\"message.emailMessage.format===emailMessageFormat.Text\">\n <fs-text-editor \n [(ngModel)]=\"message.emailMessage.body\"\n name=\"emailMessageBody\"\n [config]=\"{ language: 'text' }\">\n </fs-text-editor>\n </ng-container>\n </ng-template>\n </mat-tab>\n <mat-tab\n *ngIf=\"message.emailMessage.format===emailMessageFormat.HTML || message.emailMessage.format===emailMessageFormat.RichText\"\n label=\"Styles\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.styles\"\n name=\"styles\"\n [config]=\"{ language: 'scss' }\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!message.emailMessage.customize\">\n <fs-label-field>\n <fs-label>Subject</fs-label>\n {{message.defaultEmailSubject}}\n </fs-label-field>\n <div>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"email-body-html-default\">\n <fs-html-renderer\n *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText || message.emailMessage.format===emailMessageFormat.HTML\"\n [html]=\"message.defaultEmailBody\">\n </fs-html-renderer>\n </div>\n <div\n class=\"email-body-text-default\"\n *ngIf=\"message.emailMessage.format===emailMessageFormat.Text\">\n {{message.defaultEmailBody}}\n </div>\n </fs-label-field>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"!!message.smsMessage\">\n <mat-tab label=\"SMS Message\" name=\"sms\">\n <ng-template matTabContent>\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Customize Message\"\n [(ngModel)]=\"message.smsMessage.customize\"\n name=\"customizeSms\">\n <mat-option [value]=\"true\">Yes</mat-option>\n <mat-option [value]=\"false\">No</mat-option>\n </mat-select>\n </mat-form-field>\n <div\n *ngIf=\"message.smsMessage.customize\"\n [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.smsMessage.message\"\n name=\"smsMessageMessage\"\n [config]=\"{ language: 'text '}\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n <fs-label-field *ngIf=\"!message.smsMessage.customize\">\n <fs-label>Message</fs-label>\n {{message.defaultSmsMessage}}\n </fs-label-field>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <mat-tab label=\"Attachments\" *ngIf=\"message.emailMessage\" name=\"attachments\">\n <ng-template matTabContent>\n <fs-app-message-attachments \n [message]=\"message\">\n </fs-app-message-attachments>\n </ng-template>\n </mat-tab>\n\n <mat-tab label=\"Variables\" *ngIf=\"message.variables\">\n <ng-template matTabContent>\n <div *ngFor=\"let variable of message.variables\" class=\"variable\">\n {{variable.name}}\n </div>\n </ng-template>\n </mat-tab>\n\n <mat-tab label=\"Defaults\">\n <ng-template matTabContent>\n <ng-container *ngIf=\"message.emailMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">Email</h2>\n <fs-label-field>\n <fs-label>Subject</fs-label>\n <div class=\"content\">{{message.defaultEmailSubject}}</div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"content\">{{message.defaultEmailBody}}</div>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"message.smsMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">SMS</h2>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"content\">{{message.defaultSmsMessage}}</div>\n </fs-label-field>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"tab==='email' || tab==='sms' || tab==='general'; else done\">\n <button \n mat-button \n color=\"primary\">\n Save\n </button> \n <ng-container *ngIf=\"tab==='email'\">\n <button \n mat-button\n type=\"button\"\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('email')\"\n type=\"button\">\n Send Test Email\n </button>\n </ng-container>\n <ng-container *ngIf=\"tab==='sms'\">\n <button \n mat-button\n type=\"button\"\n (click)=\"sendTest('sms')\"\n type=\"button\">\n Send Test SMS\n </button>\n </ng-container>\n <button \n mat-button \n [mat-dialog-close]=\"null\" \n type=\"button\">\n Cancel\n </button>\n </ng-container> \n <ng-template #done>\n <button \n mat-button \n color=\"primary\"\n [mat-dialog-close]=\"null\" \n type=\"button\">\n Close\n </button>\n </ng-template>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: ["fs-label-field .content{white-space:pre-wrap}:host ::ng-deep .mat-tab-body-content,:host ::ng-deep .mat-tab-body{overflow:visible}:host ::ng-deep .sms-message{width:100%}:host ::ng-deep .email-body-text-default{white-space:pre-line}.email-body-text{width:100%}.variable{margin-bottom:4px}\n"], components: [{ type: i4.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileActionPlacement", "mobileWidth", "mode"] }, { type: i5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i7.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i7.FsLabelComponent, selector: "fs-label" }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["init", "blur"] }, { type: i11.FsHtmlEditorComponent, selector: "fs-html-editor", inputs: ["config", "hint"] }, { type: i11.FsHtmlRendererComponent, selector: "fs-html-renderer", inputs: ["html"] }, { type: i12.AttachmentsComponent, selector: "fs-app-message-attachments", inputs: ["message"] }, { type: i13.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i14.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i15.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i15.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i16.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i18.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { type: i18.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { type: i5.MatTabContent, selector: "[matTabContent]" }, { type: i19.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i19.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i19.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i20.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i15.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i16.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { type: i16.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i16.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "form"] }, { type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MessageComponent, decorators: [{
121
121
  type: Component,
122
122
  args: [{
123
123
  templateUrl: './message.component.html',
@@ -131,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
131
131
  type: Inject,
132
132
  args: [MAT_DIALOG_DATA]
133
133
  }] }, { type: i1.FsPrompt }, { type: i2.FsMessage }, { type: i3.MatDialog }, { type: i0.ChangeDetectorRef }]; } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cy9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQU8sU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVExQixNQUFNLE9BQU8sZ0JBQWdCO0lBUTNCLFlBQ3lDLE9BQTJCLEVBQ2pDLEtBQUssRUFDOUIsT0FBaUIsRUFDakIsUUFBbUIsRUFDbkIsT0FBa0IsRUFDbEIsTUFBeUI7UUFMTSxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUNqQyxVQUFLLEdBQUwsS0FBSyxDQUFBO1FBQzlCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBWDVCLFFBQUcsR0FBRyxTQUFTLENBQUM7UUFDaEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBQzFDLHVCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBd0N4QyxTQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDNUMsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQTtJQXJDRCxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzNDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBRXZCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDbEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUM1QztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDOUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUMxQztZQUVELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2lCQUN6QyxpQkFBaUIsRUFBRTtpQkFDbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDVixHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRVosSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUU7YUFDbEMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFXTSxXQUFXO1FBQ2hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQy9DLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDdEYsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUVqQyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtZQUNsQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO2lCQUMxQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixPQUFPLFlBQVksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1lBRUwsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNELE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNoRDtTQUNGO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDbEMsSUFBSSxFQUFFO2dCQUNKLE1BQU07Z0JBQ04sSUFBSTthQUNMO1lBQ0QsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQUk7UUFDbEIsRUFBRSxDQUFDLElBQUksQ0FBQzthQUNQLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsT0FBTyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7WUFFaEUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDeEIsS0FBSyxFQUFFLGdCQUFnQixRQUFRLGtCQUFrQjtnQkFDakQsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztpQkFDaEQsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7OEdBekdVLGdCQUFnQixrQkFTakIscUJBQXFCLGFBQ3JCLGVBQWU7a0dBVmQsZ0JBQWdCLG9EQ3RCN0IsNDlaQWdWQTs0RkQxVGEsZ0JBQWdCO2tCQUw1QixTQUFTO21CQUFDO29CQUNULFdBQVcsRUFBRSwwQkFBMEI7b0JBQ3ZDLFNBQVMsRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUN2QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQVVJLE1BQU07MkJBQUMscUJBQXFCOzswQkFDNUIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdERpYWxvZywgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5cbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEVtYWlsTWVzc2FnZUZvcm1hdHMgfSBmcm9tICcuLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgRW1haWxNZXNzYWdlRm9ybWF0IH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZS1wcmV2aWV3L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRlNfQVBQX01FU1NBR0VfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW5qZWN0b3JzJztcbmltcG9ydCB7IEZzQXBwTWVzc2FnZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2FwcC1tZXNzYWdlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZXNzYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgbWVzc2FnZTtcbiAgcHVibGljIHRhYiA9ICdnZW5lcmFsJztcbiAgcHVibGljIG1lc3NhZ2VUZW1wbGF0ZXMgPSBbXTtcbiAgcHVibGljIGVtYWlsTWVzc2FnZUZvcm1hdHMgPSBFbWFpbE1lc3NhZ2VGb3JtYXRzO1xuICBwdWJsaWMgZW1haWxNZXNzYWdlRm9ybWF0ID0gRW1haWxNZXNzYWdlRm9ybWF0O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEZTX0FQUF9NRVNTQUdFX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBGc0FwcE1lc3NhZ2VDb25maWcsXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgX2RhdGEsXG4gICAgcHJpdmF0ZSBfcHJvbXB0OiBGc1Byb21wdCxcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9jb25maWcubG9hZE1lc3NhZ2UodGhpcy5fZGF0YS5tZXNzYWdlKVxuICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgICAgIGlmICh0aGlzLm1lc3NhZ2UuZW1haWxNZXNzYWdlICYmIHRoaXMubWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmVtYWlsTWVzc2FnZS5jdXN0b21pemUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWVzc2FnZS5zbXNNZXNzYWdlICYmIHRoaXMubWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZS5yZWZlcmVuY2UgPSBTdHJpbmcobWVzc2FnZS50YWcpXG4gICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgIC5zcGxpdCgnXycpXG4gICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaXRlbS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGl0ZW0uc2xpY2UoMSkpXG4gICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb25maWcubG9hZE1lc3NhZ2VUZW1wbGF0ZXMoKVxuICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZVRlbXBsYXRlcyA9IGRhdGEuZGF0YTtcbiAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYXZlTWVzc2FnZSh0aGlzLm1lc3NhZ2UpXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIENoYW5nZXMnKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuUHJldmlldygpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UuZW1haWxNZXNzYWdlO1xuICAgIGxldCBodG1sID0gZW1haWxNZXNzYWdlLmN1c3RvbWl6ZSA/IGVtYWlsTWVzc2FnZS5ib2R5IDogdGhpcy5tZXNzYWdlLmRlZmF1bHRFbWFpbEJvZHk7XG4gICAgbGV0IHN0eWxlcyA9IGVtYWlsTWVzc2FnZS5zdHlsZXM7XG5cbiAgICBpZiAoZW1haWxNZXNzYWdlLm1lc3NhZ2VUZW1wbGF0ZUlkKSB7XG4gICAgICBjb25zdCBtZXNzYWdlVGVtcGxhdGUgPSB0aGlzLm1lc3NhZ2VUZW1wbGF0ZXNcbiAgICAgICAgLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZW1haWxNZXNzYWdlLm1lc3NhZ2VUZW1wbGF0ZUlkID09PSBpdGVtLmlkO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKG1lc3NhZ2VUZW1wbGF0ZSkge1xuICAgICAgICBodG1sID0gbWVzc2FnZVRlbXBsYXRlLmNvbnRlbnQucmVwbGFjZSgneyRjb250ZW50fScsIGh0bWwpO1xuICAgICAgICBzdHlsZXMgPSBtZXNzYWdlVGVtcGxhdGUuc3R5bGVzLmNvbmNhdChzdHlsZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKFByZXZpZXdDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc3R5bGVzLFxuICAgICAgICBodG1sLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnOTUlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbmRUZXN0KHR5cGUpIHtcbiAgICBvZih0cnVlKVxuICAgIC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdlbWFpbCcgPyB0aGlzLl9jb25maWcuZ2V0VGVzdEVtYWlsKCkgOiBvZignJyk7XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcCgoZGVmYXVsdF8pID0+IHsgICAgICAgIFxuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHR5cGUgPT09ICdlbWFpbCcgPyAnYW4gZW1haWwnIDogJ3Bob25lIG51bWJlcic7XG4gICAgXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgICAgIGxhYmVsOiBgUGxlYXNlIGVudGVyICR7dHlwZU5hbWV9IHRvIHNlbmQgdGVzdCB0b2AsXG4gICAgICAgICAgdGl0bGU6ICdTZW5kIFRlc3QnLFxuICAgICAgICAgIGNvbW1pdExhYmVsOiAnU2VuZCcsXG4gICAgICAgICAgZGVmYXVsdDogZGVmYXVsdF8sXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuX2NvbmZpZy50ZXN0TWVzc2FnZSh0aGlzLm1lc3NhZ2UsIHZhbHVlLCB0eXBlKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1Rlc3QgU2VudCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgICBmc0Zvcm1cbiAgICBbc3VibWl0XT1cInNhdmVcIlxuICAgICNmb3JtPVwibmdGb3JtXCJcbiAgICAqZnNTa2VsZXRvbj1cIm1lc3NhZ2VcIlxuICAgIFtjb25maXJtVGFic109XCJmYWxzZVwiPlxuICA8ZnMtZGlhbG9nICpuZ0lmPVwibWVzc2FnZVwiPlxuICAgIDxkaXYgbWF0LWRpYWxvZy10aXRsZT5FZGl0IE1lc3NhZ2U8L2Rpdj5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC10YWItZ3JvdXAgXG4gICAgICAgICAgZnNUYWJzIFxuICAgICAgICAgIFsoc2VsZWN0ZWQpXT1cInRhYlwiPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkdlbmVyYWxcIiBuYW1lPVwiZ2VuZXJhbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPlJlZmVyZW5jZTwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7e21lc3NhZ2UucmVmZXJlbmNlfX1cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBmeExheW91dD1cInJvd1wiXG4gICAgICAgICAgICAgICAgZnhMYXlvdXRHYXA9XCIxMHB4XCJcbiAgICAgICAgICAgICAgICBmeExheW91dC54cz1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgZnhMYXlvdXQuc209XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRnJvbSBFbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuZnJvbUVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyb21fZW1haWxcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGcm9tIE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZyb21OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyb21fbmFtZVwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJlcGx5IFRvXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5yZXBseVRvXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlcGx5X3RvXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZ4TGF5b3V0PVwicm93XCJcbiAgICAgICAgICAgICAgICBmeExheW91dEdhcD1cIjEwcHhcIlxuICAgICAgICAgICAgICAgIGZ4TGF5b3V0LnhzPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICBmeExheW91dC5zbT1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUb1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UudG9SZWNpcGllbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRvXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ0NcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjY1wiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJDQ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuYmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJiY2NcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJFbWFpbCBNZXNzYWdlXCIgKm5nSWY9XCJtZXNzYWdlLmVtYWlsTWVzc2FnZVwiIG5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ3VzdG9taXplIE1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY3VzdG9taXplRW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj5ZZXM8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmb3JtYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBlbWFpbE1lc3NhZ2VGb3JtYXRzXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLm1lc3NhZ2VUZW1wbGF0ZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm51bGxcIj5Ob25lPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1lc3NhZ2VUZW1wbGF0ZXNcIiBbdmFsdWVdPVwiaXRlbS5pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlN1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLnN1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IFtALmRpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIFtkeW5hbWljSGVpZ2h0XT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQ29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LkhUTUxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ2h0bWwgJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmcy1odG1sLWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5SaWNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZzLWh0bWwtZWRpdG9yPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5UZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5ib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImVtYWlsTWVzc2FnZUJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInsgbGFuZ3VhZ2U6ICd0ZXh0JyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LkhUTUwgfHwgbWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LlJpY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiU3R5bGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5zdHlsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3R5bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGxhbmd1YWdlOiAnc2NzcycgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPlN1YmplY3Q8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAge3ttZXNzYWdlLmRlZmF1bHRFbWFpbFN1YmplY3R9fVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPkNvbnRlbnQ8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1haWwtYm9keS1odG1sLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZnMtaHRtbC1yZW5kZXJlclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuUmljaFRleHQgfHwgbWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LkhUTUxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2h0bWxdPVwibWVzc2FnZS5kZWZhdWx0RW1haWxCb2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9mcy1odG1sLXJlbmRlcmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZW1haWwtYm9keS10ZXh0LWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LlRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7e21lc3NhZ2UuZGVmYXVsdEVtYWlsQm9keX19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC10YWI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhbWVzc2FnZS5zbXNNZXNzYWdlXCI+XG4gICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJTTVMgTWVzc2FnZVwiIG5hbWU9XCJzbXNcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkN1c3RvbWl6ZSBNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiY3VzdG9taXplU21zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlLnNtc01lc3NhZ2UuY3VzdG9taXplXCJcbiAgICAgICAgICAgICAgICAgIFtALmRpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXRhYi1ncm91cCBbZHluYW1pY0hlaWdodF09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJDb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLnNtc01lc3NhZ2UubWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic21zTWVzc2FnZU1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGxhbmd1YWdlOiAndGV4dCAnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiIW1lc3NhZ2Uuc21zTWVzc2FnZS5jdXN0b21pemVcIj5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5NZXNzYWdlPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIHt7bWVzc2FnZS5kZWZhdWx0U21zTWVzc2FnZX19XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJBdHRhY2htZW50c1wiICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2VcIiBuYW1lPVwiYXR0YWNobWVudHNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgIDxmcy1hcHAtbWVzc2FnZS1hdHRhY2htZW50cyBcbiAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiPlxuICAgICAgICAgICAgPC9mcy1hcHAtbWVzc2FnZS1hdHRhY2htZW50cz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC10YWI+XG5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJWYXJpYWJsZXNcIiAqbmdJZj1cIm1lc3NhZ2UudmFyaWFibGVzXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB2YXJpYWJsZSBvZiBtZXNzYWdlLnZhcmlhYmxlc1wiIGNsYXNzPVwidmFyaWFibGVcIj5cbiAgICAgICAgICAgICAge3t2YXJpYWJsZS5uYW1lfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkRlZmF1bHRzXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgPGgyICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UgJiYgbWVzc2FnZS5zbXNNZXNzYWdlXCI+RW1haWw8L2gyPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlN1YmplY3Q8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+e3ttZXNzYWdlLmRlZmF1bHRFbWFpbFN1YmplY3R9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPkNvbnRlbnQ8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+e3ttZXNzYWdlLmRlZmF1bHRFbWFpbEJvZHl9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZS5zbXNNZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDxoMiAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlICYmIG1lc3NhZ2Uuc21zTWVzc2FnZVwiPlNNUzwvaDI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+Q29udGVudDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj57e21lc3NhZ2UuZGVmYXVsdFNtc01lc3NhZ2V9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuXG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWI9PT0nZW1haWwnIHx8IHRhYj09PSdzbXMnIHx8IHRhYj09PSdnZW5lcmFsJzsgZWxzZSBkb25lXCI+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICBtYXQtYnV0dG9uIFxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgU2F2ZVxuICAgICAgICA8L2J1dHRvbj4gICAgIFxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPT09J2VtYWlsJ1wiPlxuICAgICAgICAgIDxidXR0b24gICAgICAgICAgICBcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5QcmV2aWV3KClcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICBQcmV2aWV3XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VuZFRlc3QoJ2VtYWlsJylcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICBTZW5kIFRlc3QgRW1haWxcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWI9PT0nc21zJ1wiPlxuICAgICAgICAgIDxidXR0b24gICAgICAgICAgICBcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRUZXN0KCdzbXMnKVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIFNlbmQgVGVzdCBTTVNcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICBtYXQtYnV0dG9uIFxuICAgICAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiIFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgIENhbmNlbFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPiBcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZG9uZT5cbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgIG1hdC1idXR0b24gXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiIFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgIENsb3NlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+XG4iXX0=
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cy9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBUTNCLFlBQ3lDLE9BQTJCLEVBQ2pDLEtBQUssRUFDOUIsT0FBaUIsRUFDakIsUUFBbUIsRUFDbkIsT0FBa0IsRUFDbEIsTUFBeUI7UUFMTSxZQUFPLEdBQVAsT0FBTyxDQUFv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QyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztpQkFDaEQsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7OEdBekdVLGdCQUFnQixrQkFTakIscUJBQXFCLGFBQ3JCLGVBQWU7a0dBVmQsZ0JBQWdCLG9EQ3RCN0Isd3VhQW1WQTs0RkQ3VGEsZ0JBQWdCO2tCQUw1QixTQUFTO21CQUFDO29CQUNULFdBQVcsRUFBRSwwQkFBMEI7b0JBQ3ZDLFNBQVMsRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUN2QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQVVJLE1BQU07MkJBQUMscUJBQXFCOzswQkFDNUIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5cbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZS1wcmV2aWV3L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRlNfQVBQX01FU1NBR0VfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW5qZWN0b3JzJztcbmltcG9ydCB7IEZzQXBwTWVzc2FnZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2FwcC1tZXNzYWdlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRW1haWxNZXNzYWdlRm9ybWF0cyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBFbWFpbE1lc3NhZ2VGb3JtYXQgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVzc2FnZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIG1lc3NhZ2U7XG4gIHB1YmxpYyB0YWIgPSAnZ2VuZXJhbCc7XG4gIHB1YmxpYyBtZXNzYWdlVGVtcGxhdGVzID0gW107XG4gIHB1YmxpYyBlbWFpbE1lc3NhZ2VGb3JtYXRzID0gRW1haWxNZXNzYWdlRm9ybWF0cztcbiAgcHVibGljIGVtYWlsTWVzc2FnZUZvcm1hdCA9IEVtYWlsTWVzc2FnZUZvcm1hdDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChGU19BUFBfTUVTU0FHRV9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRnNBcHBNZXNzYWdlQ29uZmlnLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhLFxuICAgIHByaXZhdGUgX3Byb21wdDogRnNQcm9tcHQsXG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogRnNNZXNzYWdlLFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlKHRoaXMuX2RhdGEubWVzc2FnZSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlLmVtYWlsTWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlLmVtYWlsTWVzc2FnZS5jdXN0b21pemUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2Uuc21zTWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2Uuc21zTWVzc2FnZS5jdXN0b21pemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1lc3NhZ2UucmVmZXJlbmNlID0gU3RyaW5nKG1lc3NhZ2UudGFnKVxuICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgLnNwbGl0KCdfJylcbiAgICAgICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnNsaWNlKDEpKVxuICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlVGVtcGxhdGVzKClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVGVtcGxhdGVzID0gZGF0YS5kYXRhO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYXZlTWVzc2FnZSh0aGlzLm1lc3NhZ2UpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIENoYW5nZXMnKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgb3BlblByZXZpZXcoKTogdm9pZCB7XG4gICAgY29uc3QgZW1haWxNZXNzYWdlID0gdGhpcy5tZXNzYWdlLmVtYWlsTWVzc2FnZTtcbiAgICBsZXQgaHRtbCA9IGVtYWlsTWVzc2FnZS5jdXN0b21pemUgPyBlbWFpbE1lc3NhZ2UuYm9keSA6IHRoaXMubWVzc2FnZS5kZWZhdWx0RW1haWxCb2R5O1xuICAgIGxldCBzdHlsZXMgPSBlbWFpbE1lc3NhZ2Uuc3R5bGVzIHx8ICcnO1xuXG4gICAgaWYgKGVtYWlsTWVzc2FnZS5tZXNzYWdlVGVtcGxhdGVJZCkge1xuICAgICAgY29uc3QgbWVzc2FnZVRlbXBsYXRlID0gdGhpcy5tZXNzYWdlVGVtcGxhdGVzXG4gICAgICAgIC5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVtYWlsTWVzc2FnZS5tZXNzYWdlVGVtcGxhdGVJZCA9PT0gaXRlbS5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmIChtZXNzYWdlVGVtcGxhdGUpIHtcbiAgICAgICAgaHRtbCA9IG1lc3NhZ2VUZW1wbGF0ZS5jb250ZW50LnJlcGxhY2UoJ3skY29udGVudH0nLCBodG1sKTtcbiAgICAgICAgc3R5bGVzID0gYCR7bWVzc2FnZVRlbXBsYXRlLnN0eWxlcyB8fCAnJ31cXG5cXG4ke3N0eWxlc31gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKFByZXZpZXdDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc3R5bGVzLFxuICAgICAgICBodG1sLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnOTUlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbmRUZXN0KHR5cGUpIHtcbiAgICBvZih0cnVlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdlbWFpbCcgPyB0aGlzLl9jb25maWcuZ2V0VGVzdEVtYWlsKCkgOiBvZignJyk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKGRlZmF1bHRfKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSB0eXBlID09PSAnZW1haWwnID8gJ2FuIGVtYWlsJyA6ICdwaG9uZSBudW1iZXInO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICAgICAgICBsYWJlbDogYFBsZWFzZSBlbnRlciAke3R5cGVOYW1lfSB0byBzZW5kIHRlc3QgdG9gLFxuICAgICAgICAgICAgdGl0bGU6ICdTZW5kIFRlc3QnLFxuICAgICAgICAgICAgY29tbWl0TGFiZWw6ICdTZW5kJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRfLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLl9jb25maWcudGVzdE1lc3NhZ2UodGhpcy5tZXNzYWdlLCB2YWx1ZSwgdHlwZSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnVGVzdCBTZW50Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgICBmc0Zvcm1cbiAgICBbc3VibWl0XT1cInNhdmVcIlxuICAgICNmb3JtPVwibmdGb3JtXCJcbiAgICAqZnNTa2VsZXRvbj1cIm1lc3NhZ2VcIlxuICAgIFtjb25maXJtVGFic109XCJmYWxzZVwiPlxuICA8ZnMtZGlhbG9nICpuZ0lmPVwibWVzc2FnZVwiPlxuICAgIDxkaXYgbWF0LWRpYWxvZy10aXRsZT5FZGl0IE1lc3NhZ2U8L2Rpdj5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC10YWItZ3JvdXAgXG4gICAgICAgICAgZnNUYWJzIFxuICAgICAgICAgIFsoc2VsZWN0ZWQpXT1cInRhYlwiPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkdlbmVyYWxcIiBuYW1lPVwiZ2VuZXJhbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPlJlZmVyZW5jZTwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7e21lc3NhZ2UucmVmZXJlbmNlfX1cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBmeExheW91dD1cInJvd1wiXG4gICAgICAgICAgICAgICAgZnhMYXlvdXRHYXA9XCIxMHB4XCJcbiAgICAgICAgICAgICAgICBmeExheW91dC54cz1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgZnhMYXlvdXQuc209XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRnJvbSBFbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuZnJvbUVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyb21fZW1haWxcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGcm9tIE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZyb21OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyb21fbmFtZVwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJlcGx5IFRvXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5yZXBseVRvXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlcGx5X3RvXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZ4TGF5b3V0PVwicm93XCJcbiAgICAgICAgICAgICAgICBmeExheW91dEdhcD1cIjEwcHhcIlxuICAgICAgICAgICAgICAgIGZ4TGF5b3V0LnhzPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICBmeExheW91dC5zbT1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUb1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UudG9SZWNpcGllbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRvXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ0NcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjY1wiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJDQ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuYmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJiY2NcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJFbWFpbCBNZXNzYWdlXCIgKm5nSWY9XCJtZXNzYWdlLmVtYWlsTWVzc2FnZVwiIG5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ3VzdG9taXplIE1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY3VzdG9taXplRW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj5ZZXM8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmb3JtYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBlbWFpbE1lc3NhZ2VGb3JtYXRzXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLm1lc3NhZ2VUZW1wbGF0ZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm51bGxcIj5Ob25lPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1lc3NhZ2VUZW1wbGF0ZXNcIiBbdmFsdWVdPVwiaXRlbS5pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlN1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLnN1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IFtALmRpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIFtkeW5hbWljSGVpZ2h0XT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQ29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5IVE1MXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5ib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGxhbmd1YWdlOiAnaHRtbCAnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuUmljaFRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZzLWh0bWwtZWRpdG9yICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtaHRtbC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbWFpbE1lc3NhZ2VCb2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInsgbGFuZ3VhZ2U6ICd0ZXh0JyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5IVE1MIHx8IG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5SaWNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlN0eWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2Uuc3R5bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN0eWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ3Njc3MnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZVwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5TdWJqZWN0PC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIHt7bWVzc2FnZS5kZWZhdWx0RW1haWxTdWJqZWN0fX1cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5Db250ZW50PC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtYWlsLWJvZHktaHRtbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGZzLWh0bWwtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LlJpY2hUZXh0IHx8IG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5IVE1MXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtodG1sXT1cIm1lc3NhZ2UuZGVmYXVsdEVtYWlsQm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZnMtaHRtbC1yZW5kZXJlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVtYWlsLWJvZHktdGV4dC1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3ttZXNzYWdlLmRlZmF1bHRFbWFpbEJvZHl9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW1lc3NhZ2Uuc21zTWVzc2FnZVwiPlxuICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU01TIE1lc3NhZ2VcIiBuYW1lPVwic21zXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDdXN0b21pemUgTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2Uuc21zTWVzc2FnZS5jdXN0b21pemVcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImN1c3RvbWl6ZVNtc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+Tm88L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZVwiXG4gICAgICAgICAgICAgICAgICBbQC5kaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgW2R5bmFtaWNIZWlnaHRdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQ29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5zbXNNZXNzYWdlLm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNtc01lc3NhZ2VNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ3RleHQgJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIiFtZXNzYWdlLnNtc01lc3NhZ2UuY3VzdG9taXplXCI+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+TWVzc2FnZTwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7e21lc3NhZ2UuZGVmYXVsdFNtc01lc3NhZ2V9fVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQXR0YWNobWVudHNcIiAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlXCIgbmFtZT1cImF0dGFjaG1lbnRzXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICA8ZnMtYXBwLW1lc3NhZ2UtYXR0YWNobWVudHMgXG4gICAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDwvZnMtYXBwLW1lc3NhZ2UtYXR0YWNobWVudHM+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiVmFyaWFibGVzXCIgKm5nSWY9XCJtZXNzYWdlLnZhcmlhYmxlc1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgbWVzc2FnZS52YXJpYWJsZXNcIiBjbGFzcz1cInZhcmlhYmxlXCI+XG4gICAgICAgICAgICAgIHt7dmFyaWFibGUubmFtZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC10YWI+XG5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJEZWZhdWx0c1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDxoMiAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlICYmIG1lc3NhZ2Uuc21zTWVzc2FnZVwiPkVtYWlsPC9oMj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5TdWJqZWN0PC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPnt7bWVzc2FnZS5kZWZhdWx0RW1haWxTdWJqZWN0fX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5Db250ZW50PC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPnt7bWVzc2FnZS5kZWZhdWx0RW1haWxCb2R5fX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2Uuc21zTWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8aDIgKm5nSWY9XCJtZXNzYWdlLmVtYWlsTWVzc2FnZSAmJiBtZXNzYWdlLnNtc01lc3NhZ2VcIj5TTVM8L2gyPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPkNvbnRlbnQ8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+e3ttZXNzYWdlLmRlZmF1bHRTbXNNZXNzYWdlfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cblxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPT09J2VtYWlsJyB8fCB0YWI9PT0nc21zJyB8fCB0YWI9PT0nZ2VuZXJhbCc7IGVsc2UgZG9uZVwiPlxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgbWF0LWJ1dHRvbiBcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgIFNhdmVcbiAgICAgICAgPC9idXR0b24+ICAgICBcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYj09PSdlbWFpbCdcIj5cbiAgICAgICAgICA8YnV0dG9uICAgICAgICAgICAgXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUHJldmlldygpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgUHJldmlld1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRUZXN0KCdlbWFpbCcpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgU2VuZCBUZXN0IEVtYWlsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPT09J3NtcydcIj5cbiAgICAgICAgICA8YnV0dG9uICAgICAgICAgICAgXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZW5kVGVzdCgnc21zJylcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICBTZW5kIFRlc3QgU01TXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgbWF0LWJ1dHRvbiBcbiAgICAgICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj4gXG4gICAgICA8bmctdGVtcGxhdGUgI2RvbmU+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICBtYXQtYnV0dG9uIFxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICBDbG9zZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4gIDwvZnMtZGlhbG9nPlxuPC9mb3JtPlxuIl19
@@ -57,9 +57,9 @@ export class MessagesComponent {
57
57
  this._destroy$.complete();
58
58
  }
59
59
  }
60
- MessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MessagesComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
61
- MessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: MessagesComponent, selector: "fs-app-messages", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column title=\"Name\" name=\"name\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"open(row)\">{{row.name}}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email Format\">\n <ng-template fs-list-cell let-row=\"row\">\n {{emailMessageFormats[row.emailMessage.format]}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email Message Template\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.emailMessage.messageTemplate?.name || 'None'}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Customized Message\">\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.emailMessage?.customize || row.smsMessage?.customize; else noCustomize\">\n <ng-container *ngIf=\"row.emailMessage?.customize\">\n {{row.emailMessage.customize ? 'Email' : ''}}\n </ng-container> \n <ng-container *ngIf=\"row.smsMessage?.customize\">\n {{row.smsMessage.customize ? 'SMS' : ''}}\n </ng-container> \n </ng-container>\n <ng-template #noCustomize>\n None\n </ng-template>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", components: [{ type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }], directives: [{ type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MessagesComponent, decorators: [{
60
+ MessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MessagesComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
61
+ MessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MessagesComponent, selector: "fs-app-messages", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column title=\"Name\" name=\"name\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"open(row)\">{{row.name}}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email Format\">\n <ng-template fs-list-cell let-row=\"row\">\n {{emailMessageFormats[row.emailMessage.format]}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email Message Template\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.emailMessage.messageTemplate?.name || 'None'}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Customized Message\">\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.emailMessage?.customize || row.smsMessage?.customize; else noCustomize\">\n <ng-container *ngIf=\"row.emailMessage?.customize\">\n {{row.emailMessage.customize ? 'Email' : ''}}\n </ng-container> \n <ng-container *ngIf=\"row.smsMessage?.customize\">\n {{row.smsMessage.customize ? 'SMS' : ''}}\n </ng-container> \n </ng-container>\n <ng-template #noCustomize>\n None\n </ng-template>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", components: [{ type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }], directives: [{ type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MessagesComponent, decorators: [{
63
63
  type: Component,
64
64
  args: [{
65
65
  selector: 'fs-app-messages',
@@ -28,8 +28,8 @@ import { FsCommonModule } from '@firestitch/common';
28
28
  import * as i0 from "@angular/core";
29
29
  export class FsAppMessagesModule {
30
30
  }
31
- FsAppMessagesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsAppMessagesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
32
- FsAppMessagesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsAppMessagesModule, declarations: [MessagesComponent,
31
+ FsAppMessagesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAppMessagesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
32
+ FsAppMessagesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAppMessagesModule, declarations: [MessagesComponent,
33
33
  MessageComponent,
34
34
  AttachmentsComponent], imports: [RouterModule,
35
35
  CommonModule,
@@ -56,7 +56,7 @@ FsAppMessagesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", ver
56
56
  FsTabsModule,
57
57
  FsAppMessagePreviewModule], exports: [MessagesComponent,
58
58
  MessageComponent] });
59
- FsAppMessagesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsAppMessagesModule, imports: [[
59
+ FsAppMessagesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAppMessagesModule, imports: [[
60
60
  RouterModule,
61
61
  CommonModule,
62
62
  FormsModule,
@@ -82,7 +82,7 @@ FsAppMessagesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ver
82
82
  FsTabsModule,
83
83
  FsAppMessagePreviewModule,
84
84
  ]] });
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsAppMessagesModule, decorators: [{
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAppMessagesModule, decorators: [{
86
86
  type: NgModule,
87
87
  args: [{
88
88
  imports: [
@@ -46,9 +46,9 @@ export class WebhooksComponent {
46
46
  };
47
47
  }
48
48
  }
49
- WebhooksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WebhooksComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
50
- WebhooksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: WebhooksComponent, selector: "fs-app-message-webhooks", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\r\n <fs-list-column title=\"URL\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.url}}\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column title=\"Created\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.createDate | fsDate}}\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>", components: [{ type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }], directives: [{ type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }], pipes: { "fsDate": i3.FsDatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WebhooksComponent, decorators: [{
49
+ WebhooksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: WebhooksComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
50
+ WebhooksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: WebhooksComponent, selector: "fs-app-message-webhooks", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\r\n <fs-list-column title=\"URL\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.url}}\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column title=\"Created\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.createDate | fsDate}}\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>", components: [{ type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }], directives: [{ type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }], pipes: { "fsDate": i3.FsDatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: WebhooksComponent, decorators: [{
52
52
  type: Component,
53
53
  args: [{
54
54
  selector: 'fs-app-message-webhooks',
@@ -5,14 +5,14 @@ import { WebhooksComponent } from './components/webhooks/webhooks.component';
5
5
  import * as i0 from "@angular/core";
6
6
  export class FsAppMessageWebhooksModule {
7
7
  }
8
- FsAppMessageWebhooksModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsAppMessageWebhooksModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- FsAppMessageWebhooksModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsAppMessageWebhooksModule, declarations: [WebhooksComponent], imports: [FsListModule,
8
+ FsAppMessageWebhooksModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAppMessageWebhooksModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ FsAppMessageWebhooksModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAppMessageWebhooksModule, declarations: [WebhooksComponent], imports: [FsListModule,
10
10
  FsDateModule], exports: [WebhooksComponent] });
11
- FsAppMessageWebhooksModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsAppMessageWebhooksModule, imports: [[
11
+ FsAppMessageWebhooksModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAppMessageWebhooksModule, imports: [[
12
12
  FsListModule,
13
13
  FsDateModule,
14
14
  ]] });
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsAppMessageWebhooksModule, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAppMessageWebhooksModule, decorators: [{
16
16
  type: NgModule,
17
17
  args: [{
18
18
  imports: [
@@ -1,18 +1,15 @@
1
- /*
2
- * Public API Surface of fs-menu
3
- */
4
- export { FsAppMessagesModule } from './app/modules/messages/messages.module';
1
+ export { FsAppMessageModule } from './app/modules/app-message/app-message.module';
5
2
  export { FsAppMessageQueuesModule } from './app/modules/message-queues/message-queues.module';
6
3
  export { FsAppMessageTemplatesModule } from './app/modules/message-templates/message-templates.module';
4
+ export { FsAppMessagesModule } from './app/modules/messages/messages.module';
7
5
  export { FsAppMessageWebhooksModule } from './app/modules/webhooks/webhooks.module';
8
- export { FsAppMessageModule } from './app/modules/app-message/app-message.module';
9
- export { MessagesComponent } from './app/modules/messages/components/messages/messages.component';
10
- export { MessageComponent } from './app/modules/messages/components/message/message.component';
11
- export { QueuesComponent } from './app/modules/message-queues/components/queues/queues.component';
12
6
  export { QueueComponent } from './app/modules/message-queues/components/queue/queue.component';
13
- export { TemplatesComponent } from './app/modules/message-templates/components/templates/templates.component';
7
+ export { QueuesComponent } from './app/modules/message-queues/components/queues/queues.component';
14
8
  export { TemplateComponent } from './app/modules/message-templates/components';
9
+ export { TemplatesComponent } from './app/modules/message-templates/components/templates/templates.component';
10
+ export { MessageComponent } from './app/modules/messages/components/message/message.component';
11
+ export { MessagesComponent } from './app/modules/messages/components/messages/messages.component';
15
12
  export { WebhooksComponent } from './app/modules/webhooks/components/webhooks/webhooks.component';
16
13
  export { FsMessageQueueService } from './app/modules/message-queues/services/message-queue.service';
17
14
  export { FS_APP_MESSAGE_CONFIG } from './app/modules/app-message/injectors/app-message-config.injector';
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDOUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdkcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDL0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUlsRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUVwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZnMtbWVudVxuICovXG5cbmV4cG9ydCB7IEZzQXBwTWVzc2FnZXNNb2R1bGUgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2VzL21lc3NhZ2VzLm1vZHVsZSc7XG5leHBvcnQgeyBGc0FwcE1lc3NhZ2VRdWV1ZXNNb2R1bGUgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL21lc3NhZ2UtcXVldWVzLm1vZHVsZSc7XG5leHBvcnQgeyBGc0FwcE1lc3NhZ2VUZW1wbGF0ZXNNb2R1bGUgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL21lc3NhZ2UtdGVtcGxhdGVzLm1vZHVsZSc7XG5leHBvcnQgeyBGc0FwcE1lc3NhZ2VXZWJob29rc01vZHVsZSB9IGZyb20gJy4vYXBwL21vZHVsZXMvd2ViaG9va3Mvd2ViaG9va3MubW9kdWxlJztcbmV4cG9ydCB7IEZzQXBwTWVzc2FnZU1vZHVsZSB9IGZyb20gJy4vYXBwL21vZHVsZXMvYXBwLW1lc3NhZ2UvYXBwLW1lc3NhZ2UubW9kdWxlJztcblxuZXhwb3J0IHsgTWVzc2FnZXNDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZXMvbWVzc2FnZXMuY29tcG9uZW50JztcbmV4cG9ydCB7IE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudCc7XG5leHBvcnQgeyBRdWV1ZXNDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWVzL3F1ZXVlcy5jb21wb25lbnQnO1xuZXhwb3J0IHsgUXVldWVDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50JztcbmV4cG9ydCB7IFRlbXBsYXRlc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvbWVzc2FnZS10ZW1wbGF0ZXMvY29tcG9uZW50cy90ZW1wbGF0ZXMvdGVtcGxhdGVzLmNvbXBvbmVudCc7XG5leHBvcnQgeyBUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvbWVzc2FnZS10ZW1wbGF0ZXMvY29tcG9uZW50cyc7XG5leHBvcnQgeyBXZWJob29rc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvd2ViaG9va3MvY29tcG9uZW50cy93ZWJob29rcy93ZWJob29rcy5jb21wb25lbnQnO1xuXG5leHBvcnQgeyBGc0FwcE1lc3NhZ2VDb25maWcgfSBmcm9tICcuL2FwcC9tb2R1bGVzL2FwcC1tZXNzYWdlL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgeyBGc01lc3NhZ2VRdWV1ZVNlcnZpY2UgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL3NlcnZpY2VzL21lc3NhZ2UtcXVldWUuc2VydmljZSc7XG5cbmV4cG9ydCB7IEZTX0FQUF9NRVNTQUdFX0NPTkZJRyB9IGZyb20gJy4vYXBwL21vZHVsZXMvYXBwLW1lc3NhZ2UvaW5qZWN0b3JzL2FwcC1tZXNzYWdlLWNvbmZpZy5pbmplY3Rvcic7XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDbEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDOUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDL0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDbEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFJbEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFcEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUVBQWlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGc0FwcE1lc3NhZ2VNb2R1bGUgfSBmcm9tICcuL2FwcC9tb2R1bGVzL2FwcC1tZXNzYWdlL2FwcC1tZXNzYWdlLm1vZHVsZSc7XG5leHBvcnQgeyBGc0FwcE1lc3NhZ2VRdWV1ZXNNb2R1bGUgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL21lc3NhZ2UtcXVldWVzLm1vZHVsZSc7XG5leHBvcnQgeyBGc0FwcE1lc3NhZ2VUZW1wbGF0ZXNNb2R1bGUgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL21lc3NhZ2UtdGVtcGxhdGVzLm1vZHVsZSc7XG5leHBvcnQgeyBGc0FwcE1lc3NhZ2VzTW9kdWxlIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9tZXNzYWdlcy9tZXNzYWdlcy5tb2R1bGUnO1xuZXhwb3J0IHsgRnNBcHBNZXNzYWdlV2ViaG9va3NNb2R1bGUgfSBmcm9tICcuL2FwcC9tb2R1bGVzL3dlYmhvb2tzL3dlYmhvb2tzLm1vZHVsZSc7XG5cbmV4cG9ydCB7IFF1ZXVlQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9tZXNzYWdlLXF1ZXVlcy9jb21wb25lbnRzL3F1ZXVlL3F1ZXVlLmNvbXBvbmVudCc7XG5leHBvcnQgeyBRdWV1ZXNDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWVzL3F1ZXVlcy5jb21wb25lbnQnO1xuZXhwb3J0IHsgVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL2NvbXBvbmVudHMnO1xuZXhwb3J0IHsgVGVtcGxhdGVzQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9tZXNzYWdlLXRlbXBsYXRlcy9jb21wb25lbnRzL3RlbXBsYXRlcy90ZW1wbGF0ZXMuY29tcG9uZW50JztcbmV4cG9ydCB7IE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudCc7XG5leHBvcnQgeyBNZXNzYWdlc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cy9tZXNzYWdlcy9tZXNzYWdlcy5jb21wb25lbnQnO1xuZXhwb3J0IHsgV2ViaG9va3NDb21wb25lbnQgfSBmcm9tICcuL2FwcC9tb2R1bGVzL3dlYmhvb2tzL2NvbXBvbmVudHMvd2ViaG9va3Mvd2ViaG9va3MuY29tcG9uZW50JztcblxuZXhwb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9hcHAtbWVzc2FnZS9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgRnNNZXNzYWdlUXVldWVTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvbW9kdWxlcy9tZXNzYWdlLXF1ZXVlcy9zZXJ2aWNlcy9tZXNzYWdlLXF1ZXVlLnNlcnZpY2UnO1xuXG5leHBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuL2FwcC9tb2R1bGVzL2FwcC1tZXNzYWdlL2luamVjdG9ycy9hcHAtbWVzc2FnZS1jb25maWcuaW5qZWN0b3InO1xuIl19