@firestitch/app-message 18.0.14 → 18.0.16

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 (41) hide show
  1. package/app/modules/message-preview/components/preview/preview.component.d.ts +2 -2
  2. package/app/modules/message-queues/components/queue/queue.component.d.ts +2 -7
  3. package/app/modules/message-queues/components/queues/queues.component.d.ts +2 -6
  4. package/app/modules/message-queues/components/recipient/recipient.component.d.ts +1 -1
  5. package/app/modules/message-queues/message-queues.module.d.ts +22 -24
  6. package/app/modules/message-queues/pipes/linkify.pipe.d.ts +1 -1
  7. package/app/modules/message-queues/pipes/truncate.pipe.d.ts +1 -1
  8. package/app/modules/message-queues/services/message-queue.service.d.ts +0 -2
  9. package/app/modules/message-templates/components/template/template.component.d.ts +5 -9
  10. package/app/modules/message-templates/components/templates/templates.component.d.ts +1 -4
  11. package/app/modules/messages/components/attachments/attachments.component.d.ts +1 -4
  12. package/app/modules/messages/components/message/message.component.d.ts +2 -7
  13. package/app/modules/messages/components/messages/messages.component.d.ts +1 -4
  14. package/app/modules/webhooks/components/webhooks/webhooks.component.d.ts +1 -4
  15. package/esm2022/app/modules/message-preview/components/preview/preview.component.mjs +16 -17
  16. package/esm2022/app/modules/message-queues/components/queue/queue.component.mjs +48 -42
  17. package/esm2022/app/modules/message-queues/components/queues/queues.component.mjs +33 -32
  18. package/esm2022/app/modules/message-queues/components/recipient/recipient.component.mjs +5 -6
  19. package/esm2022/app/modules/message-queues/message-queues.module.mjs +12 -18
  20. package/esm2022/app/modules/message-queues/pipes/linkify.pipe.mjs +6 -3
  21. package/esm2022/app/modules/message-queues/pipes/truncate.pipe.mjs +3 -2
  22. package/esm2022/app/modules/message-queues/services/message-queue.service.mjs +5 -9
  23. package/esm2022/app/modules/message-templates/components/template/template.component.mjs +30 -39
  24. package/esm2022/app/modules/message-templates/components/templates/templates.component.mjs +10 -18
  25. package/esm2022/app/modules/messages/components/attachments/attachments.component.mjs +12 -19
  26. package/esm2022/app/modules/messages/components/message/message.component.mjs +62 -46
  27. package/esm2022/app/modules/messages/components/messages/messages.component.mjs +10 -19
  28. package/esm2022/app/modules/webhooks/components/webhooks/webhooks.component.mjs +12 -19
  29. package/esm2022/public_api.mjs +1 -4
  30. package/fesm2022/firestitch-app-message.mjs +185 -444
  31. package/fesm2022/firestitch-app-message.mjs.map +1 -1
  32. package/package.json +1 -1
  33. package/public_api.d.ts +0 -3
  34. package/app/modules/message-preview/message-preview.module.d.ts +0 -11
  35. package/app/modules/message-templates/message-templates.module.d.ts +0 -24
  36. package/app/modules/messages/messages.module.d.ts +0 -31
  37. package/app/modules/webhooks/webhooks.module.d.ts +0 -9
  38. package/esm2022/app/modules/message-preview/message-preview.module.mjs +0 -36
  39. package/esm2022/app/modules/message-templates/message-templates.module.mjs +0 -92
  40. package/esm2022/app/modules/messages/messages.module.mjs +0 -119
  41. package/esm2022/app/modules/webhooks/webhooks.module.mjs +0 -28
@@ -1,6 +1,6 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, ViewChild, } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
3
- import { FsListComponent } from '@firestitch/list';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild, inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA, MatDialog, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';
3
+ import { FsListComponent, FsListModule } from '@firestitch/list';
4
4
  import { FsMessage } from '@firestitch/message';
5
5
  import { FsPrompt } from '@firestitch/prompt';
6
6
  import { Subject } from 'rxjs';
@@ -12,28 +12,31 @@ import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
12
12
  import { MessageQueueStates } from '../../consts';
13
13
  import { MessageQueueEventTypes } from '../../consts/message-queue-event-type.const';
14
14
  import { EmailMessageQueueFormat, MessageQueueEventType, MessageQueueType } from '../../enums';
15
+ import { FsSkeletonModule } from '@firestitch/skeleton';
16
+ import { FsDialogModule } from '@firestitch/dialog';
17
+ import { CdkScrollable } from '@angular/cdk/scrolling';
18
+ import { MatTabGroup, MatTab, MatTabContent } from '@angular/material/tabs';
19
+ import { FsLabelModule } from '@firestitch/label';
20
+ import { RecipientComponent } from '../recipient/recipient.component';
21
+ import { FsIFrameModule } from '@firestitch/iframe';
22
+ import { FsDateModule } from '@firestitch/date';
23
+ import { MatButton } from '@angular/material/button';
24
+ import { FsFormModule } from '@firestitch/form';
15
25
  import * as i0 from "@angular/core";
16
- import * as i1 from "@firestitch/message";
17
- import * as i2 from "@firestitch/prompt";
18
- import * as i3 from "@angular/material/dialog";
19
- import * as i4 from "@angular/common";
20
- import * as i5 from "@angular/material/button";
21
- import * as i6 from "@angular/material/tabs";
22
- import * as i7 from "@firestitch/list";
23
- import * as i8 from "@firestitch/dialog";
24
- import * as i9 from "@firestitch/label";
25
- import * as i10 from "@firestitch/date";
26
- import * as i11 from "@firestitch/skeleton";
27
- import * as i12 from "@firestitch/form";
28
- import * as i13 from "@firestitch/iframe";
29
- import * as i14 from "../recipient/recipient.component";
26
+ import * as i1 from "@firestitch/skeleton";
27
+ import * as i2 from "@firestitch/dialog";
28
+ import * as i3 from "@firestitch/label";
29
+ import * as i4 from "@firestitch/iframe";
30
+ import * as i5 from "@firestitch/list";
31
+ import * as i6 from "@firestitch/date";
32
+ import * as i7 from "@firestitch/form";
30
33
  export class QueueComponent {
31
- _config;
32
- _data;
33
- _message;
34
- _prompt;
35
- _dialog;
36
- _cdRef;
34
+ _config = inject(FS_APP_MESSAGE_CONFIG);
35
+ _data = inject(MAT_DIALOG_DATA);
36
+ _message = inject(FsMessage);
37
+ _prompt = inject(FsPrompt);
38
+ _dialog = inject(MatDialog);
39
+ _cdRef = inject(ChangeDetectorRef);
37
40
  logList;
38
41
  messageQueue;
39
42
  loadMessage;
@@ -48,14 +51,6 @@ export class QueueComponent {
48
51
  MessageQueueEventTypes = indexNameValue(MessageQueueEventTypes);
49
52
  MessageQueueEventType = MessageQueueEventType;
50
53
  _destroy$ = new Subject();
51
- constructor(_config, _data, _message, _prompt, _dialog, _cdRef) {
52
- this._config = _config;
53
- this._data = _data;
54
- this._message = _message;
55
- this._prompt = _prompt;
56
- this._dialog = _dialog;
57
- this._cdRef = _cdRef;
58
- }
59
54
  ngOnInit() {
60
55
  this.messageQueueStates = indexNameValue(MessageQueueStates);
61
56
  this.resendMessageQueue = this._config.resendMessageQueue;
@@ -206,20 +201,31 @@ export class QueueComponent {
206
201
  const e = Math.floor(Math.log(bytes) / Math.log(1024));
207
202
  return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';
208
203
  }
209
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueueComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: MAT_DIALOG_DATA }, { token: i1.FsMessage }, { token: i2.FsPrompt }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
210
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: QueueComponent, selector: "ng-component", viewQueries: [{ propertyName: "logList", first: true, predicate: ["logList"], descendants: true }], ngImport: i0, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>\n Message Queue\n </div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-lg.wrap\">\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{ messageQueue.emailMessageQueue.fromName }}\n </ng-container>\n <ng-template #fromEmailName>\n {{ messageQueue.emailMessageQueue.fromName }}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n </ng-container>\n </ng-template>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient\n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n </ng-container>\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ messageQueue.scheduledDate | fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ messageQueueStates[messageQueue.state] }}\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{ messageQueue.message.name }}\n </a>\n <ng-template #elseMessage>\n {{ messageQueue.message.name }}\n </ng-template>\n </fs-label-field>\n </div>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{ messageQueue.emailMessageQueue.subject }}\n </fs-label-field>\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n </ng-container>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list\n [config]=\"logConfig\"\n #logList>\n <fs-list-column title=\"Message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.filename }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.prettyFilesize }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.messageQueueRecipient.recipient }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ MessageQueueEventTypes[row.type] }}\n <div\n class=\"small\"\n *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createDate | fsDateFormat: 'date-time-yearless' }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i7.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i7.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i7.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: i8.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i9.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i9.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: i10.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: i11.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "directive", type: i12.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i13.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }, { kind: "component", type: i14.RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "pipe", type: i10.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
205
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: QueueComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "logList", first: true, predicate: ["logList"], descendants: true }], ngImport: i0, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <fs-dialog-title>\n Message queue\n <ng-template fsDialogSubtitle>\n ID: {{ messageQueue.id }}\n </ng-template>\n </fs-dialog-title>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-lg.wrap\">\n @if (messageQueue.emailMessageQueue) {\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.toRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n @if (messageQueue.emailMessageQueue.ccRecipients.length) {\n <fs-label-field>\n <fs-label>\n CC\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.ccRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.bccRecipients.length) {\n <fs-label-field>\n <fs-label>\n BCC\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.bccRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail) {\n <fs-label-field>\n <fs-label>\n From\n </fs-label>\n @if (messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail) {\n {{ messageQueue.emailMessageQueue.fromName }}\n } @else {\n {{ messageQueue.emailMessageQueue.fromName }}\n @if (messageQueue.emailMessageQueue.fromEmail) {\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n }\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length) {\n <fs-label-field>\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n }\n }\n @if (messageQueue.smsMessageQueue) {\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient\n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient>\n </fs-label-field>\n @if (messageQueue.smsMessageQueue.fromNumber) {\n <fs-label-field>\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n }\n }\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ messageQueue.scheduledDate | fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ messageQueueStates[messageQueue.state] }}\n </fs-label-field>\n @if (messageQueue.message) {\n <fs-label-field>\n <fs-label>\n Message Type\n </fs-label>\n @if (loadMessage) {\n <a\n (click)=\"openMessage(messageQueue.message)\"\n >\n {{ messageQueue.message.name }}\n </a>\n } @else {\n {{ messageQueue.message.name }}\n }\n </fs-label-field>\n }\n </div>\n @if (messageQueue.emailMessageQueue) {\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{ messageQueue.emailMessageQueue.subject }}\n </fs-label-field>\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n @if (messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text) {\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n }\n @if (messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText) {\n <fs-iframe\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n }\n </fs-label-field>\n }\n @if (messageQueue.smsMessageQueue) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list\n [config]=\"logConfig\"\n #logList>\n <fs-list-column title=\"Message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.filename }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.prettyFilesize }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.messageQueueRecipient.recipient }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ MessageQueueEventTypes[row.type] }}\n @if (row.type === MessageQueueEventType.Click) {\n <div\n class=\"small\"\n >\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createDate | fsDateFormat: 'date-time-yearless' }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n @if (resendMessageQueue) {\n <button\n mat-button\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n }\n @if (forwardMessageQueue) {\n <button\n mat-button\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n }\n </mat-dialog-actions>\n</fs-dialog>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i2.FsDialogTitleComponent, selector: "fs-dialog-title", inputs: ["close", "dockToggle", "back"] }, { kind: "directive", type: i2.FsDialogSubtitleDirective, selector: "[fsDialogSubtitle]" }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "directive", type: MatTabContent, selector: "[matTabContent]" }, { kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i3.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i3.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "ngmodule", type: FsIFrameModule }, { kind: "component", type: i4.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }, { kind: "ngmodule", type: FsListModule }, { kind: "component", type: i5.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i5.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i5.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "pipe", type: i6.FsDateFormatPipe, name: "fsDateFormat" }, { kind: "component", type: i6.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i7.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
211
206
  }
212
207
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueueComponent, decorators: [{
213
208
  type: Component,
214
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>\n Message Queue\n </div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-lg.wrap\">\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{ messageQueue.emailMessageQueue.fromName }}\n </ng-container>\n <ng-template #fromEmailName>\n {{ messageQueue.emailMessageQueue.fromName }}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n </ng-container>\n </ng-template>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient\n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n </ng-container>\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ messageQueue.scheduledDate | fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ messageQueueStates[messageQueue.state] }}\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{ messageQueue.message.name }}\n </a>\n <ng-template #elseMessage>\n {{ messageQueue.message.name }}\n </ng-template>\n </fs-label-field>\n </div>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{ messageQueue.emailMessageQueue.subject }}\n </fs-label-field>\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n </ng-container>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list\n [config]=\"logConfig\"\n #logList>\n <fs-list-column title=\"Message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.filename }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.prettyFilesize }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.messageQueueRecipient.recipient }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ MessageQueueEventTypes[row.type] }}\n <div\n class=\"small\"\n *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createDate | fsDateFormat: 'date-time-yearless' }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"] }]
215
- }], ctorParameters: () => [{ type: undefined, decorators: [{
216
- type: Inject,
217
- args: [FS_APP_MESSAGE_CONFIG]
218
- }] }, { type: undefined, decorators: [{
219
- type: Inject,
220
- args: [MAT_DIALOG_DATA]
221
- }] }, { type: i1.FsMessage }, { type: i2.FsPrompt }, { type: i3.MatDialog }, { type: i0.ChangeDetectorRef }], propDecorators: { logList: [{
209
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
210
+ FsSkeletonModule,
211
+ FsDialogModule,
212
+ CdkScrollable,
213
+ MatDialogContent,
214
+ MatTabGroup,
215
+ MatTab,
216
+ MatTabContent,
217
+ FsLabelModule,
218
+ RecipientComponent,
219
+ FsIFrameModule,
220
+ FsListModule,
221
+ FsDateModule,
222
+ MatDialogActions,
223
+ MatButton,
224
+ FsFormModule,
225
+ MatDialogClose,
226
+ ], template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <fs-dialog-title>\n Message queue\n <ng-template fsDialogSubtitle>\n ID: {{ messageQueue.id }}\n </ng-template>\n </fs-dialog-title>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-lg.wrap\">\n @if (messageQueue.emailMessageQueue) {\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.toRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n @if (messageQueue.emailMessageQueue.ccRecipients.length) {\n <fs-label-field>\n <fs-label>\n CC\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.ccRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.bccRecipients.length) {\n <fs-label-field>\n <fs-label>\n BCC\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.bccRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail) {\n <fs-label-field>\n <fs-label>\n From\n </fs-label>\n @if (messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail) {\n {{ messageQueue.emailMessageQueue.fromName }}\n } @else {\n {{ messageQueue.emailMessageQueue.fromName }}\n @if (messageQueue.emailMessageQueue.fromEmail) {\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n }\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length) {\n <fs-label-field>\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n }\n }\n @if (messageQueue.smsMessageQueue) {\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient\n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient>\n </fs-label-field>\n @if (messageQueue.smsMessageQueue.fromNumber) {\n <fs-label-field>\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n }\n }\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ messageQueue.scheduledDate | fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ messageQueueStates[messageQueue.state] }}\n </fs-label-field>\n @if (messageQueue.message) {\n <fs-label-field>\n <fs-label>\n Message Type\n </fs-label>\n @if (loadMessage) {\n <a\n (click)=\"openMessage(messageQueue.message)\"\n >\n {{ messageQueue.message.name }}\n </a>\n } @else {\n {{ messageQueue.message.name }}\n }\n </fs-label-field>\n }\n </div>\n @if (messageQueue.emailMessageQueue) {\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{ messageQueue.emailMessageQueue.subject }}\n </fs-label-field>\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n @if (messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text) {\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n }\n @if (messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText) {\n <fs-iframe\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n }\n </fs-label-field>\n }\n @if (messageQueue.smsMessageQueue) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list\n [config]=\"logConfig\"\n #logList>\n <fs-list-column title=\"Message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.filename }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.prettyFilesize }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.messageQueueRecipient.recipient }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ MessageQueueEventTypes[row.type] }}\n @if (row.type === MessageQueueEventType.Click) {\n <div\n class=\"small\"\n >\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createDate | fsDateFormat: 'date-time-yearless' }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n @if (resendMessageQueue) {\n <button\n mat-button\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n }\n @if (forwardMessageQueue) {\n <button\n mat-button\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n }\n </mat-dialog-actions>\n</fs-dialog>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"] }]
227
+ }], propDecorators: { logList: [{
222
228
  type: ViewChild,
223
229
  args: ['logList']
224
230
  }] } });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVC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LENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNqRixDQUFDO3VHQXhNVSxjQUFjLGtCQXFCZixxQkFBcUIsYUFDckIsZUFBZTsyRkF0QmQsY0FBYyx3SkNsQzNCLDBrU0FvUFk7OzJGRGxOQyxjQUFjO2tCQUwxQixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU07OzBCQXVCNUMsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixNQUFNOzJCQUFDLGVBQWU7Z0pBbkJsQixPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzTGlzdENvbXBvbmVudCwgRnNMaXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgYW5jaG9ybWUgZnJvbSAnYW5jaG9ybWUnO1xuXG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3J3YXJkTWVzc2FnZVF1ZXVlLCBMb2FkTWVzc2FnZSwgUmVzZW5kTWVzc2FnZVF1ZXVlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZVF1ZXVlU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbWVzc2FnZS1xdWV1ZS1ldmVudC10eXBlLmNvbnN0JztcbmltcG9ydCB7IEVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LCBNZXNzYWdlUXVldWVFdmVudFR5cGUsIE1lc3NhZ2VRdWV1ZVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9xdWV1ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBRdWV1ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKCdsb2dMaXN0JylcbiAgcHVibGljIGxvZ0xpc3Q6IEZzTGlzdENvbXBvbmVudDtcblxuICBwdWJsaWMgbWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbG9hZE1lc3NhZ2U6IExvYWRNZXNzYWdlO1xuICBwdWJsaWMgcmVzZW5kTWVzc2FnZVF1ZXVlOiBSZXNlbmRNZXNzYWdlUXVldWU7XG4gIHB1YmxpYyBmb3J3YXJkTWVzc2FnZVF1ZXVlOiBGb3J3YXJkTWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbWVzc2FnZVF1ZXVlUmVjaXBpZW50cyA9IHt9O1xuICBwdWJsaWMgZW1haWxNZXNzYWdlUXVldWVGb3JtYXQgPSBFbWFpbE1lc3NhZ2VRdWV1ZUZvcm1hdDtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVN0YXRlcztcbiAgcHVibGljIGxvZ0NvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgYXR0YWNobWVudENvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgZXZlbnRDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVFdmVudFR5cGVzKTtcbiAgcHVibGljIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZSA9IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChGU19BUFBfTUVTU0FHRV9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRnNBcHBNZXNzYWdlQ29uZmlnLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhLFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgICBwcml2YXRlIF9wcm9tcHQ6IEZzUHJvbXB0LFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlUXVldWVTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVTdGF0ZXMpO1xuICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlID0gdGhpcy5fY29uZmlnLnJlc2VuZE1lc3NhZ2VRdWV1ZTtcbiAgICB0aGlzLmZvcndhcmRNZXNzYWdlUXVldWUgPSB0aGlzLl9jb25maWcuZm9yd2FyZE1lc3NhZ2VRdWV1ZTtcblxuICAgIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlKHRoaXMuX2RhdGEubWVzc2FnZVF1ZXVlSWQpXG4gICAgLnN1YnNjcmliZSgobWVzc2FnZVF1ZXVlKSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IG1lc3NhZ2VRdWV1ZTtcblxuICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keTtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdCA9PT0gRW1haWxNZXNzYWdlUXVldWVGb3JtYXQuSFRNTCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGJvZHksICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBib2R5ID0gZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSB0aGlzLmFuY2hvck1lKGJvZHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keSA9IGJvZHk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmJvZHkgPSB0aGlzLmFuY2hvck1lKHRoaXMubWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlUXVldWVSZWNpcGllbnRzID0gdGhpcy5tZXNzYWdlUXVldWUubWVzc2FnZVF1ZXVlUmVjaXBpZW50c1xuICAgICAgICAucmVkdWNlKChhY2N1bSwgbWVzc2FnZVF1ZXVlUmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgYWNjdW1bbWVzc2FnZVF1ZXVlUmVjaXBpZW50LnJlY2lwaWVudF0gPSBtZXNzYWdlUXVldWVSZWNpcGllbnQuc3RhdGU7XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgdGhpcy5fc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fc2V0QXR0YWNobWVudHNDb25maWcobWVzc2FnZVF1ZXVlKTtcbiAgICAgIHRoaXMuX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYW5jaG9yTWUoaW5wdXQpIHtcbiAgICByZXR1cm4gYW5jaG9ybWUoe1xuICAgICAgaW5wdXQsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oTWVzc2FnZUNvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODUlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZCgpIHtcbiAgICB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0NvbmZpcm0nLFxuICAgICAgdGVtcGxhdGU6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gcmVzZW5kIHRoaXMgbWVzc2FnZT8nXG4gICAgfSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlKHRoaXMubWVzc2FnZVF1ZXVlKVxuICAgICAgLnN1YnNjcmliZShtZXNzYWdlUXVldWUgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubWVzc2FnZVF1ZXVlLCBtZXNzYWdlUXVldWUpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgcmVzZW50Jyk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgIHRoaXMubG9nTGlzdC5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZm9yd2FyZCgpIHtcbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMubWVzc2FnZVF1ZXVlLnR5cGUgPT09IE1lc3NhZ2VRdWV1ZVR5cGUuRW1haWwgPyAnYW4gZW1haWwnIDogJ2EgcGhvbmUgbnVtYmVyJztcblxuICAgIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICBsYWJlbDogYFBsZWFzZSBlbnRlciAke3R5cGVOYW1lfSB0byBmb3J3YXJkIHRvYCxcbiAgICAgIHRpdGxlOiAnRm9yd2FyZCBNZXNzYWdlJyxcbiAgICAgIGNvbW1pdExhYmVsOiAnRm9yd2FyZCcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9yd2FyZE1lc3NhZ2VRdWV1ZSh0aGlzLm1lc3NhZ2VRdWV1ZSwgdmFsdWUpXG4gICAgICAgIC5zdWJzY3JpYmUobWVzc2FnZVF1ZXVlID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMubWVzc2FnZVF1ZXVlLFxuICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgZm9yd2FyZGVkJyk7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5sb2dMaXN0LnJlbG9hZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpIHtcbiAgICB0aGlzLmxvZ0NvbmZpZyA9IHtcbiAgICAgIGxvYWRNb3JlOiB0cnVlLFxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBmZXRjaDogcXVlcnkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRMb2dzKG1lc3NhZ2VRdWV1ZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpIHtcbiAgICB0aGlzLmV2ZW50Q29uZmlnID0ge1xuICAgICAgbG9hZE1vcmU6IHRydWUsXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIGZldGNoOiAocXVlcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlRXZlbnRzKG1lc3NhZ2VRdWV1ZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEF0dGFjaG1lbnRzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMuYXR0YWNobWVudENvbmZpZyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgZmV0Y2g6IHF1ZXJ5ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlQXR0YWNobWVudHMobWVzc2FnZVF1ZXVlLCBxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcChyZXNwb25zZSA9PiAoe1xuICAgICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUucHJldHR5RmlsZXNpemUgPSB0aGlzLl9wcmV0dHlGaWxlc2l6ZSh2YWx1ZS5maWxlc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICB9KSwgcGFnaW5nOiByZXNwb25zZS5wYWdpbmdcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9jb25maWcuZG93bmxvYWRNZXNzYWdlUXVldWVBdHRhY2htZW50KSB7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWcucm93QWN0aW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsaWNrOiAobWVzc2FnZUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5kb3dubG9hZE1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnQobWVzc2FnZUF0dGFjaG1lbnQsIHRoaXMubWVzc2FnZVF1ZXVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhYmVsOiAnRG93bmxvYWQnLFxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ByZXR0eUZpbGVzaXplKGJ5dGVzKSB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSB7IHJldHVybiAnMC4wMCBCJzsgfVxuICAgIGNvbnN0IGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgICByZXR1cm4gKGJ5dGVzIC8gTWF0aC5wb3coMTAyNCwgZSkpLnRvRml4ZWQoMikgKyAnICcgKyAnIEtNR1RQJy5jaGFyQXQoZSkgKyAnQic7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJtZXNzYWdlUXVldWVcIj5cbiAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPlxuICAgIE1lc3NhZ2UgUXVldWVcbiAgPC9kaXY+XG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC10YWItZ3JvdXA+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIk92ZXJ2aWV3XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLWxnLndyYXBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIFRvIFJlY2lwaWVudHNcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxhcHAtcmVjaXBpZW50XG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS50b1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5jY1JlY2lwaWVudHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgQ0NcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxhcHAtcmVjaXBpZW50XG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5jY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5iY2NSZWNpcGllbnRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEJDQ1xuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2YgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmJjY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSB8fCBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgRnJvbVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSA9PT0gbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbDsgZWxzZSBmcm9tRW1haWxOYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Zyb21FbWFpbE5hbWU+XG4gICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICh7eyBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsIH19KVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLnJlcGx5RW1haWwgJiYgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLnJlcGx5RW1haWwubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgUmVwbHkgVG9cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5yZXBseUVtYWlsLmpvaW4oJywgJykgfX1cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIFRvIE51bWJlclxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJtZXNzYWdlUXVldWUuc3RhdGVcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS50b051bWJlclwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5mcm9tTnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgRnJvbSBOdW1iZXJcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuZnJvbU51bWJlciB9fVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBEYXRlXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5zY2hlZHVsZWREYXRlIHwgZnNEYXRlRm9ybWF0OiAnZnVsbC1kYXRlLXRpbWUnIH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgU3RhdHVzXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZVN0YXRlc1ttZXNzYWdlUXVldWUuc3RhdGVdIH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLm1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIE1lc3NhZ2UgVHlwZVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5NZXNzYWdlKG1lc3NhZ2VRdWV1ZS5tZXNzYWdlKVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImxvYWRNZXNzYWdlOyBlbHNlIGVsc2VNZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAge3sgbWVzc2FnZVF1ZXVlLm1lc3NhZ2UubmFtZSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZU1lc3NhZ2U+XG4gICAgICAgICAgICAgICAge3sgbWVzc2FnZVF1ZXVlLm1lc3NhZ2UubmFtZSB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgY2xhc3M9XCJzdWJqZWN0XCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBTdWJqZWN0XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5zdWJqZWN0IH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkIGNsYXNzPVwiYm9keVwiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgQm9keVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0PT09ZW1haWxNZXNzYWdlUXVldWVGb3JtYXQuVGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtdGV4dFwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGZzLWlmcmFtZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdD09PWVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LkhUTUwgfHwgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdD09PWVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LlJpY2hUZXh0XCJcbiAgICAgICAgICAgICAgICBbaHRtbF09XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIicxMDAlJ1wiPlxuICAgICAgICAgICAgICA8L2ZzLWlmcmFtZT5cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIE1lc3NhZ2VcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybWF0LXRleHRcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5ib2R5XCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTG9nc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdFxuICAgICAgICAgICAgICBbY29uZmlnXT1cImxvZ0NvbmZpZ1wiXG4gICAgICAgICAgICAgICNsb2dMaXN0PlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiTWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IHJvdy5tZXNzYWdlIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlZERhdGVcIj48L2ZzLWRhdGUtYWdvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkF0dGFjaG1lbnRzXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxmcy1saXN0IFtjb25maWddPVwiYXR0YWNobWVudENvbmZpZ1wiPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRmlsZSBOYW1lXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgICAgICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3sgcm93LmZpbGVuYW1lIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRmlsZSBTaXplXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgICAgICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3sgcm93LnByZXR0eUZpbGVzaXplIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDwvZnMtbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiRXZlbnRzXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxmcy1saXN0IFtjb25maWddPVwiZXZlbnRDb25maWdcIj5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIlJlY2lwaWVudFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IHJvdy5tZXNzYWdlUXVldWVSZWNpcGllbnQucmVjaXBpZW50IH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRXZlbnRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7eyBNZXNzYWdlUXVldWVFdmVudFR5cGVzW3Jvdy50eXBlXSB9fVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LnR5cGUgPT09IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZS5DbGlja1wiPlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyb3cubWV0YT8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcm93Lm1ldGE/LnVybCB9fVxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIkRhdGVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7eyByb3cuY3JlYXRlRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZS15ZWFybGVzcycgfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPC9mcy1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9tYXQtdGFiPlxuICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgIERvbmVcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJyZXNlbmRNZXNzYWdlUXVldWVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInJlc2VuZCgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgUmVzZW5kXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiZm9yd2FyZE1lc3NhZ2VRdWV1ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZm9yd2FyZCgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgRm9yd2FyZFxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbjwvZnMtZGlhbG9nPiJdfQ==
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1SCxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxSCxPQUFPLEVBQUUsZUFBZSxFQUFnQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxzQkFBc0Is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O3dCQUNOLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLGNBQWM7cUJBQ2pCOzhCQVlJLE9BQU87c0JBRGIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZywgRnNMaXN0TW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgYW5jaG9ybWUgZnJvbSAnYW5jaG9ybWUnO1xuXG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3J3YXJkTWVzc2FnZVF1ZXVlLCBMb2FkTWVzc2FnZSwgUmVzZW5kTWVzc2FnZVF1ZXVlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZVF1ZXVlU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbWVzc2FnZS1xdWV1ZS1ldmVudC10eXBlLmNvbnN0JztcbmltcG9ydCB7IEVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LCBNZXNzYWdlUXVldWVFdmVudFR5cGUsIE1lc3NhZ2VRdWV1ZVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBGc1NrZWxldG9uTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2tlbGV0b24nO1xuaW1wb3J0IHsgRnNEaWFsb2dNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTWF0VGFiR3JvdXAsIE1hdFRhYiwgTWF0VGFiQ29udGVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgRnNMYWJlbE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xhYmVsJztcbmltcG9ydCB7IFJlY2lwaWVudENvbXBvbmVudCB9IGZyb20gJy4uL3JlY2lwaWVudC9yZWNpcGllbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEZzSUZyYW1lTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvaWZyYW1lJztcbmltcG9ydCB7IEZzRGF0ZU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RhdGUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiAnLi9xdWV1ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcXVldWUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgICAgICAgRnNEaWFsb2dNb2R1bGUsXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gICAgICAgIE1hdFRhYkdyb3VwLFxuICAgICAgICBNYXRUYWIsXG4gICAgICAgIE1hdFRhYkNvbnRlbnQsXG4gICAgICAgIEZzTGFiZWxNb2R1bGUsXG4gICAgICAgIFJlY2lwaWVudENvbXBvbmVudCxcbiAgICAgICAgRnNJRnJhbWVNb2R1bGUsXG4gICAgICAgIEZzTGlzdE1vZHVsZSxcbiAgICAgICAgRnNEYXRlTW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgICAgICBNYXRCdXR0b24sXG4gICAgICAgIEZzRm9ybU1vZHVsZSxcbiAgICAgICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVldWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2NvbmZpZyA9IGluamVjdDxGc0FwcE1lc3NhZ2VDb25maWc+KEZTX0FQUF9NRVNTQUdFX0NPTkZJRyk7XG4gIHByaXZhdGUgX2RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKTtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSBfY2RSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG5cbiAgQFZpZXdDaGlsZCgnbG9nTGlzdCcpXG4gIHB1YmxpYyBsb2dMaXN0OiBGc0xpc3RDb21wb25lbnQ7XG5cbiAgcHVibGljIG1lc3NhZ2VRdWV1ZTtcbiAgcHVibGljIGxvYWRNZXNzYWdlOiBMb2FkTWVzc2FnZTtcbiAgcHVibGljIHJlc2VuZE1lc3NhZ2VRdWV1ZTogUmVzZW5kTWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgZm9yd2FyZE1lc3NhZ2VRdWV1ZTogRm9yd2FyZE1lc3NhZ2VRdWV1ZTtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVJlY2lwaWVudHMgPSB7fTtcbiAgcHVibGljIGVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0ID0gRW1haWxNZXNzYWdlUXVldWVGb3JtYXQ7XG4gIHB1YmxpYyBtZXNzYWdlUXVldWVTdGF0ZXM7XG4gIHB1YmxpYyBsb2dDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIGF0dGFjaG1lbnRDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIGV2ZW50Q29uZmlnOiBGc0xpc3RDb25maWc7XG4gIHB1YmxpYyBNZXNzYWdlUXVldWVFdmVudFR5cGVzID0gaW5kZXhOYW1lVmFsdWUoTWVzc2FnZVF1ZXVlRXZlbnRUeXBlcyk7XG4gIHB1YmxpYyBNZXNzYWdlUXVldWVFdmVudFR5cGUgPSBNZXNzYWdlUXVldWVFdmVudFR5cGU7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VRdWV1ZVN0YXRlcyA9IGluZGV4TmFtZVZhbHVlKE1lc3NhZ2VRdWV1ZVN0YXRlcyk7XG4gICAgdGhpcy5yZXNlbmRNZXNzYWdlUXVldWUgPSB0aGlzLl9jb25maWcucmVzZW5kTWVzc2FnZVF1ZXVlO1xuICAgIHRoaXMuZm9yd2FyZE1lc3NhZ2VRdWV1ZSA9IHRoaXMuX2NvbmZpZy5mb3J3YXJkTWVzc2FnZVF1ZXVlO1xuXG4gICAgdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlUXVldWUodGhpcy5fZGF0YS5tZXNzYWdlUXVldWVJZClcbiAgICAuc3Vic2NyaWJlKChtZXNzYWdlUXVldWUpID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZVF1ZXVlID0gbWVzc2FnZVF1ZXVlO1xuXG4gICAgICBpZiAodGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUpIHtcbiAgICAgICAgbGV0IGJvZHkgPSB0aGlzLm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5ib2R5O1xuICAgICAgICBpZiAodGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0ID09PSBFbWFpbE1lc3NhZ2VRdWV1ZUZvcm1hdC5IVE1MKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoYm9keSwgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICBkb2MucXVlcnlTZWxlY3RvckFsbCgnYScpLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGJvZHkgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IHRoaXMuYW5jaG9yTWUoYm9keSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5ib2R5ID0gYm9keTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuYm9keSA9IHRoaXMuYW5jaG9yTWUodGhpcy5tZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmJvZHkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHMgPSB0aGlzLm1lc3NhZ2VRdWV1ZS5tZXNzYWdlUXVldWVSZWNpcGllbnRzXG4gICAgICAgIC5yZWR1Y2UoKGFjY3VtLCBtZXNzYWdlUXVldWVSZWNpcGllbnQpID0+IHtcbiAgICAgICAgICBhY2N1bVttZXNzYWdlUXVldWVSZWNpcGllbnQucmVjaXBpZW50XSA9IG1lc3NhZ2VRdWV1ZVJlY2lwaWVudC5zdGF0ZTtcblxuICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICB0aGlzLl9zZXRMb2dzQ29uZmlnKG1lc3NhZ2VRdWV1ZSk7XG4gICAgICB0aGlzLl9zZXRBdHRhY2htZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fc2V0RXZlbnRzQ29uZmlnKG1lc3NhZ2VRdWV1ZSk7XG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhbmNob3JNZShpbnB1dCkge1xuICAgIHJldHVybiBhbmNob3JtZSh7XG4gICAgICBpbnB1dCxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9wZW5NZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihNZXNzYWdlQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgd2lkdGg6ICc4NSUnXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZW5kKCkge1xuICAgIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnQ29uZmlybScsXG4gICAgICB0ZW1wbGF0ZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byByZXNlbmQgdGhpcyBtZXNzYWdlPydcbiAgICB9KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNlbmRNZXNzYWdlUXVldWUodGhpcy5tZXNzYWdlUXVldWUpXG4gICAgICAuc3Vic2NyaWJlKG1lc3NhZ2VRdWV1ZSA9PiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tZXNzYWdlUXVldWUsIG1lc3NhZ2VRdWV1ZSk7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1N1Y2Nlc3NmdWxseSByZXNlbnQnKTtcblxuICAgICAgICBpZiAodGhpcy5sb2dMaXN0KSB7XG4gICAgICAgICAgdGhpcy5sb2dMaXN0LnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmb3J3YXJkKCkge1xuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy5tZXNzYWdlUXVldWUudHlwZSA9PT0gTWVzc2FnZVF1ZXVlVHlwZS5FbWFpbCA/ICdhbiBlbWFpbCcgOiAnYSBwaG9uZSBudW1iZXInO1xuXG4gICAgdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgIGxhYmVsOiBgUGxlYXNlIGVudGVyICR7dHlwZU5hbWV9IHRvIGZvcndhcmQgdG9gLFxuICAgICAgdGl0bGU6ICdGb3J3YXJkIE1lc3NhZ2UnLFxuICAgICAgY29tbWl0TGFiZWw6ICdGb3J3YXJkJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3J3YXJkTWVzc2FnZVF1ZXVlKHRoaXMubWVzc2FnZVF1ZXVlLCB2YWx1ZSlcbiAgICAgICAgLnN1YnNjcmliZShtZXNzYWdlUXVldWUgPT4ge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVF1ZXVlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5tZXNzYWdlUXVldWUsXG4gICAgICAgICAgICBtZXNzYWdlUXVldWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1N1Y2Nlc3NmdWxseSBmb3J3YXJkZWQnKTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAodGhpcy5sb2dMaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmxvZ0xpc3QucmVsb2FkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRMb2dzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMubG9nQ29uZmlnID0ge1xuICAgICAgbG9hZE1vcmU6IHRydWUsXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIGZldGNoOiBxdWVyeSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcubG9hZExvZ3MobWVzc2FnZVF1ZXVlLCBxdWVyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RXZlbnRzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMuZXZlbnRDb25maWcgPSB7XG4gICAgICBsb2FkTW9yZTogdHJ1ZSxcbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlUXVldWVFdmVudHMobWVzc2FnZVF1ZXVlLCBxdWVyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0QXR0YWNobWVudHNDb25maWcobWVzc2FnZVF1ZXVlKSB7XG4gICAgdGhpcy5hdHRhY2htZW50Q29uZmlnID0ge1xuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBmZXRjaDogcXVlcnkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlUXVldWVBdHRhY2htZW50cyhtZXNzYWdlUXVldWUsIHF1ZXJ5KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKHJlc3BvbnNlID0+ICh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEubWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5wcmV0dHlGaWxlc2l6ZSA9IHRoaXMuX3ByZXR0eUZpbGVzaXplKHZhbHVlLmZpbGVzaXplKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIH0pLCBwYWdpbmc6IHJlc3BvbnNlLnBhZ2luZ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5kb3dubG9hZE1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnQpIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZy5yb3dBY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY2xpY2s6IChtZXNzYWdlQXR0YWNobWVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnLmRvd25sb2FkTWVzc2FnZVF1ZXVlQXR0YWNobWVudChtZXNzYWdlQXR0YWNobWVudCwgdGhpcy5tZXNzYWdlUXVldWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbGFiZWw6ICdEb3dubG9hZCcsXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcHJldHR5RmlsZXNpemUoYnl0ZXMpIHtcbiAgICBpZiAoYnl0ZXMgPT09IDApIHsgcmV0dXJuICcwLjAwIEInOyB9XG4gICAgY29uc3QgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coMTAyNCkpO1xuICAgIHJldHVybiAoYnl0ZXMgLyBNYXRoLnBvdygxMDI0LCBlKSkudG9GaXhlZCgyKSArICcgJyArICcgS01HVFAnLmNoYXJBdChlKSArICdCJztcbiAgfVxufVxuIiwiPGZzLWRpYWxvZyAqZnNTa2VsZXRvbj1cIm1lc3NhZ2VRdWV1ZVwiPlxuICA8ZnMtZGlhbG9nLXRpdGxlPlxuICAgIE1lc3NhZ2UgcXVldWVcbiAgICA8bmctdGVtcGxhdGUgZnNEaWFsb2dTdWJ0aXRsZT5cbiAgICAgIElEOiB7eyBtZXNzYWdlUXVldWUuaWQgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWRpYWxvZy10aXRsZT5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiT3ZlcnZpZXdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtbGcud3JhcFwiPlxuICAgICAgICAgICAgQGlmIChtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUpIHtcbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIFRvIFJlY2lwaWVudHNcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIEBmb3IgKHJlY2lwaWVudCBvZiBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUudG9SZWNpcGllbnRzOyB0cmFjayByZWNpcGllbnQpIHtcbiAgICAgICAgICAgICAgICAgIDxhcHAtcmVjaXBpZW50XG4gICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJtZXNzYWdlUXVldWVSZWNpcGllbnRzW3JlY2lwaWVudF1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIEBpZiAobWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmNjUmVjaXBpZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIENDXG4gICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgQGZvciAocmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5jY1JlY2lwaWVudHM7IHRyYWNrIHJlY2lwaWVudCkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudFxuICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJtZXNzYWdlUXVldWVSZWNpcGllbnRzW3JlY2lwaWVudF1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJlY2lwaWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5iY2NSZWNpcGllbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgQkNDXG4gICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgQGZvciAocmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5iY2NSZWNpcGllbnRzOyB0cmFjayByZWNpcGllbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwibWVzc2FnZVF1ZXVlUmVjaXBpZW50c1tyZWNpcGllbnRdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtcmVjaXBpZW50PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWUgfHwgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbCkge1xuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgRnJvbVxuICAgICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21OYW1lID09PSBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tRW1haWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAoe3sgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbCB9fSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUucmVwbHlFbWFpbCAmJiBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUucmVwbHlFbWFpbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIFJlcGx5IFRvXG4gICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLnJlcGx5RW1haWwuam9pbignLCAnKSB9fVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZSkge1xuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgVG8gTnVtYmVyXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudFxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZS5zdGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLnRvTnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtcmVjaXBpZW50PlxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuZnJvbU51bWJlcikge1xuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgRnJvbSBOdW1iZXJcbiAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmZyb21OdW1iZXIgfX1cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBEYXRlXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5zY2hlZHVsZWREYXRlIHwgZnNEYXRlRm9ybWF0OiAnZnVsbC1kYXRlLXRpbWUnIH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgU3RhdHVzXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZVN0YXRlc1ttZXNzYWdlUXVldWUuc3RhdGVdIH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgQGlmIChtZXNzYWdlUXVldWUubWVzc2FnZSkge1xuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgTWVzc2FnZSBUeXBlXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBAaWYgKGxvYWRNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1lc3NhZ2UobWVzc2FnZVF1ZXVlLm1lc3NhZ2UpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlUXVldWUubWVzc2FnZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlUXVldWUubWVzc2FnZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAobWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgY2xhc3M9XCJzdWJqZWN0XCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBTdWJqZWN0XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5zdWJqZWN0IH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkIGNsYXNzPVwiYm9keVwiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgQm9keVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VRdWV1ZUZvcm1hdC5UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtdGV4dFwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5ib2R5XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0PT09ZW1haWxNZXNzYWdlUXVldWVGb3JtYXQuSFRNTCB8fCBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0PT09ZW1haWxNZXNzYWdlUXVldWVGb3JtYXQuUmljaFRleHQpIHtcbiAgICAgICAgICAgICAgICA8ZnMtaWZyYW1lXG4gICAgICAgICAgICAgICAgICBbaHRtbF09XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keVwiXG4gICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiJzEwMCUnXCI+XG4gICAgICAgICAgICAgICAgPC9mcy1pZnJhbWU+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZSkge1xuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgTWVzc2FnZVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtdGV4dFwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmJvZHlcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTG9nc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdFxuICAgICAgICAgICAgW2NvbmZpZ109XCJsb2dDb25maWdcIlxuICAgICAgICAgICAgI2xvZ0xpc3Q+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJNZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7eyByb3cubWVzc2FnZSB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIkRhdGVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlZERhdGVcIj48L2ZzLWRhdGUtYWdvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkF0dGFjaG1lbnRzXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxmcy1saXN0IFtjb25maWddPVwiYXR0YWNobWVudENvbmZpZ1wiPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRmlsZSBOYW1lXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7eyByb3cuZmlsZW5hbWUgfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJGaWxlIFNpemVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IHJvdy5wcmV0dHlGaWxlc2l6ZSB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkV2ZW50c1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdCBbY29uZmlnXT1cImV2ZW50Q29uZmlnXCI+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJSZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IHJvdy5tZXNzYWdlUXVldWVSZWNpcGllbnQucmVjaXBpZW50IH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRXZlbnRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXNbcm93LnR5cGVdIH19XG4gICAgICAgICAgICAgICAgQGlmIChyb3cudHlwZSA9PT0gTWVzc2FnZVF1ZXVlRXZlbnRUeXBlLkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicm93Lm1ldGE/LnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93Lm1ldGE/LnVybCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3sgcm93LmNyZWF0ZURhdGUgfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUteWVhcmxlc3MnIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDwvZnMtbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1idXR0b25cbiAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICBEb25lXG4gICAgPC9idXR0b24+XG4gICAgQGlmIChyZXNlbmRNZXNzYWdlUXVldWUpIHtcbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInJlc2VuZCgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICBSZXNlbmRcbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgICBAaWYgKGZvcndhcmRNZXNzYWdlUXVldWUpIHtcbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImZvcndhcmQoKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgRm9yd2FyZFxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbjwvZnMtZGlhbG9nPiJdfQ==