@firestitch/app-message 9.1.5 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/app/helpers/index-name-value.d.ts +1 -1
  2. package/app/helpers/index.d.ts +1 -1
  3. package/app/modules/app-message/app-message.module.d.ts +8 -4
  4. package/app/modules/app-message/injectors/app-message-config.injector.d.ts +3 -3
  5. package/app/modules/app-message/injectors/index.d.ts +1 -1
  6. package/app/modules/app-message/interfaces/app-message-config.d.ts +26 -25
  7. package/app/modules/app-message/interfaces/index.d.ts +1 -1
  8. package/app/modules/app-message/types/index.d.ts +1 -1
  9. package/app/modules/app-message/types/types.type.d.ts +40 -36
  10. package/app/modules/message-preview/components/index.d.ts +1 -1
  11. package/app/modules/message-preview/components/preview/index.d.ts +1 -1
  12. package/app/modules/message-preview/components/preview/preview.component.d.ts +11 -8
  13. package/app/modules/message-preview/message-preview.module.d.ts +11 -2
  14. package/app/modules/message-queues/components/queue/queue.component.d.ts +43 -36
  15. package/app/modules/message-queues/components/queues/queues.component.d.ts +24 -21
  16. package/app/modules/message-queues/components/recipient/recipient.component.d.ts +10 -7
  17. package/app/modules/message-queues/consts/index.d.ts +1 -1
  18. package/app/modules/message-queues/consts/message-queue-event-type.const.d.ts +5 -0
  19. package/app/modules/message-queues/consts/message-queue-states.const.d.ts +5 -5
  20. package/app/modules/message-queues/enums/email-message-queue-format.enum.d.ts +5 -5
  21. package/app/modules/message-queues/enums/index.d.ts +3 -2
  22. package/app/modules/message-queues/enums/message-queue-event-type.enum.d.ts +4 -0
  23. package/app/modules/message-queues/enums/message-queue-state.enum.d.ts +9 -9
  24. package/app/modules/message-queues/enums/message-queue-type.enum.d.ts +4 -4
  25. package/app/modules/message-queues/message-queues.module.d.ts +29 -2
  26. package/app/modules/message-queues/pipes/linkify.pipe.d.ts +7 -4
  27. package/app/modules/message-queues/pipes/truncate.pipe.d.ts +7 -4
  28. package/app/modules/message-queues/services/message-queue.service.d.ts +12 -9
  29. package/app/modules/message-templates/components/index.d.ts +2 -0
  30. package/app/modules/message-templates/components/template/index.d.ts +1 -1
  31. package/app/modules/message-templates/components/template/template.component.d.ts +23 -20
  32. package/app/modules/message-templates/components/templates/index.d.ts +1 -0
  33. package/app/modules/message-templates/components/templates/templates.component.d.ts +19 -16
  34. package/app/modules/message-templates/message-templates.module.d.ts +25 -2
  35. package/app/modules/messages/components/index.d.ts +2 -2
  36. package/app/modules/messages/components/message/index.d.ts +1 -1
  37. package/app/modules/messages/components/message/message.component.d.ts +32 -29
  38. package/app/modules/messages/components/messages/index.d.ts +1 -1
  39. package/app/modules/messages/components/messages/messages.component.d.ts +19 -16
  40. package/app/modules/messages/consts/email-message-formats.const.d.ts +5 -5
  41. package/app/modules/messages/consts/index.d.ts +1 -1
  42. package/app/modules/messages/enums/email-message-format.enum.d.ts +5 -5
  43. package/app/modules/messages/enums/index.d.ts +1 -1
  44. package/app/modules/messages/messages.module.d.ts +29 -2
  45. package/app/modules/webhooks/components/webhooks/webhooks.component.d.ts +15 -12
  46. package/app/modules/webhooks/webhooks.module.d.ts +9 -2
  47. package/bundles/firestitch-app-message.umd.js +1572 -1244
  48. package/bundles/firestitch-app-message.umd.js.map +1 -1
  49. package/esm2015/app/helpers/index-name-value.js +8 -8
  50. package/esm2015/app/helpers/index.js +2 -2
  51. package/esm2015/app/modules/app-message/app-message.module.js +17 -15
  52. package/esm2015/app/modules/app-message/injectors/app-message-config.injector.js +4 -4
  53. package/esm2015/app/modules/app-message/injectors/index.js +2 -2
  54. package/esm2015/app/modules/app-message/interfaces/app-message-config.js +2 -1
  55. package/esm2015/app/modules/app-message/interfaces/index.js +2 -1
  56. package/esm2015/app/modules/app-message/types/index.js +2 -1
  57. package/esm2015/app/modules/app-message/types/types.type.js +2 -1
  58. package/esm2015/app/modules/message-preview/components/index.js +2 -2
  59. package/esm2015/app/modules/message-preview/components/preview/index.js +2 -2
  60. package/esm2015/app/modules/message-preview/components/preview/preview.component.js +29 -25
  61. package/esm2015/app/modules/message-preview/message-preview.module.js +38 -27
  62. package/esm2015/app/modules/message-queues/components/queue/queue.component.js +209 -187
  63. package/esm2015/app/modules/message-queues/components/queues/queues.component.js +145 -141
  64. package/esm2015/app/modules/message-queues/components/recipient/recipient.component.js +30 -29
  65. package/esm2015/app/modules/message-queues/consts/index.js +2 -2
  66. package/esm2015/app/modules/message-queues/consts/message-queue-event-type.const.js +6 -0
  67. package/esm2015/app/modules/message-queues/consts/message-queue-states.const.js +11 -11
  68. package/esm2015/app/modules/message-queues/enums/email-message-queue-format.enum.js +7 -7
  69. package/esm2015/app/modules/message-queues/enums/index.js +4 -3
  70. package/esm2015/app/modules/message-queues/enums/message-queue-event-type.enum.js +6 -0
  71. package/esm2015/app/modules/message-queues/enums/message-queue-state.enum.js +11 -11
  72. package/esm2015/app/modules/message-queues/enums/message-queue-type.enum.js +6 -6
  73. package/esm2015/app/modules/message-queues/message-queues.module.js +120 -68
  74. package/esm2015/app/modules/message-queues/pipes/linkify.pipe.js +22 -20
  75. package/esm2015/app/modules/message-queues/pipes/truncate.pipe.js +22 -20
  76. package/esm2015/app/modules/message-queues/services/message-queue.service.js +29 -31
  77. package/esm2015/app/modules/message-templates/components/index.js +3 -0
  78. package/esm2015/app/modules/message-templates/components/template/index.js +2 -2
  79. package/esm2015/app/modules/message-templates/components/template/template.component.js +84 -75
  80. package/esm2015/app/modules/message-templates/components/templates/index.js +2 -0
  81. package/esm2015/app/modules/message-templates/components/templates/templates.component.js +91 -91
  82. package/esm2015/app/modules/message-templates/message-templates.module.js +98 -57
  83. package/esm2015/app/modules/messages/components/index.js +3 -3
  84. package/esm2015/app/modules/messages/components/message/index.js +2 -2
  85. package/esm2015/app/modules/messages/components/message/message.component.js +137 -125
  86. package/esm2015/app/modules/messages/components/messages/index.js +2 -2
  87. package/esm2015/app/modules/messages/components/messages/messages.component.js +74 -78
  88. package/esm2015/app/modules/messages/consts/email-message-formats.const.js +7 -7
  89. package/esm2015/app/modules/messages/consts/index.js +2 -2
  90. package/esm2015/app/modules/messages/enums/email-message-format.enum.js +7 -7
  91. package/esm2015/app/modules/messages/enums/index.js +2 -2
  92. package/esm2015/app/modules/messages/messages.module.js +111 -64
  93. package/esm2015/app/modules/webhooks/components/webhooks/webhooks.component.js +64 -63
  94. package/esm2015/app/modules/webhooks/webhooks.module.js +30 -23
  95. package/esm2015/firestitch-app-message.js +5 -13
  96. package/esm2015/public_api.js +18 -16
  97. package/fesm2015/firestitch-app-message.js +1171 -982
  98. package/fesm2015/firestitch-app-message.js.map +1 -1
  99. package/firestitch-app-message.d.ts +5 -12
  100. package/package.json +5 -8
  101. package/public_api.d.ts +15 -13
  102. package/bundles/firestitch-app-message.umd.min.js +0 -2
  103. package/bundles/firestitch-app-message.umd.min.js.map +0 -1
  104. package/esm5/app/helpers/index-name-value.js +0 -8
  105. package/esm5/app/helpers/index.js +0 -2
  106. package/esm5/app/modules/app-message/app-message.module.js +0 -19
  107. package/esm5/app/modules/app-message/injectors/app-message-config.injector.js +0 -4
  108. package/esm5/app/modules/app-message/injectors/index.js +0 -2
  109. package/esm5/app/modules/app-message/interfaces/app-message-config.js +0 -1
  110. package/esm5/app/modules/app-message/interfaces/index.js +0 -1
  111. package/esm5/app/modules/app-message/types/index.js +0 -1
  112. package/esm5/app/modules/app-message/types/types.type.js +0 -1
  113. package/esm5/app/modules/message-preview/components/index.js +0 -2
  114. package/esm5/app/modules/message-preview/components/preview/index.js +0 -2
  115. package/esm5/app/modules/message-preview/components/preview/preview.component.js +0 -26
  116. package/esm5/app/modules/message-preview/message-preview.module.js +0 -30
  117. package/esm5/app/modules/message-queues/components/queue/queue.component.js +0 -193
  118. package/esm5/app/modules/message-queues/components/queues/queues.component.js +0 -143
  119. package/esm5/app/modules/message-queues/components/recipient/recipient.component.js +0 -32
  120. package/esm5/app/modules/message-queues/consts/index.js +0 -2
  121. package/esm5/app/modules/message-queues/consts/message-queue-states.const.js +0 -11
  122. package/esm5/app/modules/message-queues/enums/email-message-queue-format.enum.js +0 -7
  123. package/esm5/app/modules/message-queues/enums/index.js +0 -3
  124. package/esm5/app/modules/message-queues/enums/message-queue-state.enum.js +0 -11
  125. package/esm5/app/modules/message-queues/enums/message-queue-type.enum.js +0 -6
  126. package/esm5/app/modules/message-queues/message-queues.module.js +0 -71
  127. package/esm5/app/modules/message-queues/pipes/linkify.pipe.js +0 -23
  128. package/esm5/app/modules/message-queues/pipes/truncate.pipe.js +0 -26
  129. package/esm5/app/modules/message-queues/services/message-queue.service.js +0 -33
  130. package/esm5/app/modules/message-templates/components/template/index.js +0 -2
  131. package/esm5/app/modules/message-templates/components/template/template.component.js +0 -78
  132. package/esm5/app/modules/message-templates/components/templates/templates.component.js +0 -94
  133. package/esm5/app/modules/message-templates/message-templates.module.js +0 -60
  134. package/esm5/app/modules/messages/components/index.js +0 -3
  135. package/esm5/app/modules/messages/components/message/index.js +0 -2
  136. package/esm5/app/modules/messages/components/message/message.component.js +0 -130
  137. package/esm5/app/modules/messages/components/messages/index.js +0 -2
  138. package/esm5/app/modules/messages/components/messages/messages.component.js +0 -81
  139. package/esm5/app/modules/messages/consts/email-message-formats.const.js +0 -7
  140. package/esm5/app/modules/messages/consts/index.js +0 -2
  141. package/esm5/app/modules/messages/enums/email-message-format.enum.js +0 -7
  142. package/esm5/app/modules/messages/enums/index.js +0 -2
  143. package/esm5/app/modules/messages/messages.module.js +0 -67
  144. package/esm5/app/modules/webhooks/components/webhooks/webhooks.component.js +0 -65
  145. package/esm5/app/modules/webhooks/webhooks.module.js +0 -26
  146. package/esm5/firestitch-app-message.js +0 -13
  147. package/esm5/public_api.js +0 -16
  148. package/fesm5/firestitch-app-message.js +0 -1107
  149. package/fesm5/firestitch-app-message.js.map +0 -1
  150. package/firestitch-app-message.metadata.json +0 -1
@@ -1,187 +1,209 @@
1
- import { __decorate, __metadata, __param } from "tslib";
2
- import { Component, Inject, ViewChild, } from '@angular/core';
3
- import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
4
- import { FsMessage } from '@firestitch/message';
5
- import { FsPrompt } from '@firestitch/prompt';
6
- import { FsListComponent } from '@firestitch/list';
7
- import { map } from 'rxjs/operators';
8
- import { Subject } from 'rxjs';
9
- import anchorme from 'anchorme';
10
- import { EmailMessageQueueFormat } from '../../enums';
11
- import { MessageQueueStates } from '../../consts';
12
- import { indexNameValue } from '../../../../helpers';
13
- import { MessageComponent } from '../../../../modules/messages/components';
14
- import { MessageQueueType } from '../../enums';
15
- import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
16
- let QueueComponent = class QueueComponent {
17
- constructor(_config, _message, _prompt, _dialog, _data) {
18
- this._config = _config;
19
- this._message = _message;
20
- this._prompt = _prompt;
21
- this._dialog = _dialog;
22
- this._data = _data;
23
- this.messageQueueRecipients = {};
24
- this.emailMessageQueueFormat = EmailMessageQueueFormat;
25
- this._destroy$ = new Subject();
26
- }
27
- ngOnInit() {
28
- this.messageQueueStates = indexNameValue(MessageQueueStates);
29
- this.resendMessageQueue = this._config.resendMessageQueue;
30
- this.forwardMessageQueue = this._config.forwardMessageQueue;
31
- this._config.loadMessageQueue(this._data.messageQueueId)
32
- .subscribe((messageQueue) => {
33
- this.messageQueue = messageQueue;
34
- if (this.messageQueue.emailMessageQueue) {
35
- let body = this.messageQueue.emailMessageQueue.body;
36
- if (this.messageQueue.emailMessageQueue.format === EmailMessageQueueFormat.HTML) {
37
- try {
38
- const doc = new DOMParser().parseFromString(body, 'text/html');
39
- doc.querySelectorAll('a').forEach((el) => {
40
- el.setAttribute('target', '_blank');
41
- });
42
- body = doc.documentElement.innerHTML;
43
- }
44
- catch (e) {
45
- }
46
- }
47
- else {
48
- body = this.anchorme(body);
49
- }
50
- this.messageQueue.emailMessageQueue.body = body;
51
- }
52
- if (this.messageQueue.smsMessageQueue) {
53
- this.messageQueue.smsMessageQueue.body = this.anchorme(this.messageQueue.smsMessageQueue.body);
54
- }
55
- this.messageQueueRecipients = this.messageQueue.messageQueueRecipients
56
- .reduce((accum, messageQueueRecipient) => {
57
- accum[messageQueueRecipient.recipient] = messageQueueRecipient.state;
58
- return accum;
59
- }, {});
60
- this._setLogsConfig(messageQueue);
61
- this._setAttachmentsConfig(messageQueue);
62
- });
63
- }
64
- anchorme(html) {
65
- return anchorme(html, {
66
- options: {
67
- attributes: [
68
- {
69
- name: 'target',
70
- value: '_blank'
71
- },
72
- ],
73
- },
74
- });
75
- }
76
- openMessage(message) {
77
- this._dialog.open(MessageComponent, {
78
- data: {
79
- message: message,
80
- },
81
- width: '85%'
82
- });
83
- }
84
- resend() {
85
- this._prompt.confirm({
86
- title: 'Confirm',
87
- template: 'Are you sure you would like to resend this message?'
88
- }).subscribe(() => {
89
- this.resendMessageQueue(this.messageQueue)
90
- .subscribe(messageQueue => {
91
- Object.assign(this.messageQueue, messageQueue);
92
- this._message.success('Successfully resent');
93
- if (this.logList) {
94
- this.logList.reload();
95
- }
96
- });
97
- });
98
- }
99
- forward() {
100
- const typeName = this.messageQueue.type === MessageQueueType.Email ? 'an email' : 'a phone number';
101
- this._prompt.input({
102
- label: `Please enter ${typeName} to forward to`,
103
- title: 'Forward Message',
104
- commitLabel: 'Forward',
105
- required: true
106
- }).subscribe((value) => {
107
- if (value) {
108
- this.forwardMessageQueue(this.messageQueue, value)
109
- .subscribe(messageQueue => {
110
- this.messageQueue = Object.assign(Object.assign({}, this.messageQueue), { messageQueue });
111
- this._message.success('Successfully forwarded');
112
- if (this.logList) {
113
- this.logList.reload();
114
- }
115
- });
116
- }
117
- });
118
- }
119
- ngOnDestroy() {
120
- this._destroy$.next();
121
- this._destroy$.complete();
122
- }
123
- _setLogsConfig(messageQueue) {
124
- this.logConfig = {
125
- loadMore: true,
126
- queryParam: false,
127
- fetch: query => {
128
- return this._config.loadLogs(messageQueue, query);
129
- }
130
- };
131
- }
132
- _setAttachmentsConfig(messageQueue) {
133
- this.attachmentConfig = {
134
- queryParam: false,
135
- fetch: query => {
136
- return this._config.loadMessageQueueAttachments(messageQueue, query)
137
- .pipe(map(response => ({
138
- data: response.data.map(value => {
139
- value.prettyFilesize = this._prettyFilesize(value.filesize);
140
- return value;
141
- }), paging: response.paging
142
- })));
143
- }
144
- };
145
- if (this._config.downloadMessageQueueAttachment) {
146
- this.attachmentConfig.rowActions = [
147
- {
148
- click: (messageAttachment) => {
149
- this._config.downloadMessageQueueAttachment(messageAttachment, this.messageQueue);
150
- },
151
- label: 'Download',
152
- }
153
- ];
154
- }
155
- }
156
- _prettyFilesize(bytes) {
157
- if (bytes === 0) {
158
- return '0.00 B';
159
- }
160
- const e = Math.floor(Math.log(bytes) / Math.log(1024));
161
- return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';
162
- }
163
- };
164
- QueueComponent.ctorParameters = () => [
165
- { type: undefined, decorators: [{ type: Inject, args: [FS_APP_MESSAGE_CONFIG,] }] },
166
- { type: FsMessage },
167
- { type: FsPrompt },
168
- { type: MatDialog },
169
- { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
170
- ];
171
- __decorate([
172
- ViewChild('logList'),
173
- __metadata("design:type", FsListComponent)
174
- ], QueueComponent.prototype, "logList", void 0);
175
- QueueComponent = __decorate([
176
- Component({
177
- template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>Message Queue</div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div fxLayout=\"row wrap\" fxLayoutGap=\"25px\">\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\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\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\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\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\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\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\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 \n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{messageQueue.scheduledDate | fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{messageQueueStates[messageQueue.state]}}\n </fs-label-field>\n\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\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\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 </fs-iframe>\n </fs-label-field>\n </ng-container>\n\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\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list [config]=\"logConfig\" #logList>\n <fs-list-column title=\"Message\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell 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 fs-list-cell let-row=\"row\">\n {{row.filename}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template fs-list-cell 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-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>\n",
178
- styles: [".body,.subject{display:block;margin-top:15px}.body .format-text{white-space:pre-wrap}.body .body-frame{border:0}.body ::ng-deep .field-label{margin-bottom:10px}app-recipient{display:block}[hidden]{display:none!important}"]
179
- }),
180
- __param(0, Inject(FS_APP_MESSAGE_CONFIG)),
181
- __param(4, Inject(MAT_DIALOG_DATA)),
182
- __metadata("design:paramtypes", [Object, FsMessage,
183
- FsPrompt,
184
- MatDialog, Object])
185
- ], QueueComponent);
186
- export { QueueComponent };
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvYXBwLW1lc3NhZ2UvIiwic291cmNlcyI6WyJhcHAvbW9kdWxlcy9tZXNzYWdlLXF1ZXVlcy9jb21wb25lbnRzL3F1ZXVlL3F1ZXVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFBVSxNQUFNLEVBQWEsU0FBUyxHQUNoRCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBU3ZFLElBQWEsY0FBYyxHQUEzQixNQUFhLGNBQWM7SUFpQnpCLFlBQ3lDLE9BQTJCLEVBQzFELFFBQW1CLEVBQ25CLE9BQWlCLEVBQ2pCLE9BQWtCLEVBQ08s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QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2pGLENBQUM7Q0FDRixDQUFBOzs0Q0F2S0ksTUFBTSxTQUFDLHFCQUFxQjtZQUNYLFNBQVM7WUFDVixRQUFRO1lBQ1IsU0FBUzs0Q0FDekIsTUFBTSxTQUFDLGVBQWU7O0FBbkJ6QjtJQURDLFNBQVMsQ0FBQyxTQUFTLENBQUM7OEJBQ0wsZUFBZTsrQ0FBQztBQUhyQixjQUFjO0lBSjFCLFNBQVMsQ0FBQztRQUNULHVwUEFBcUM7O0tBRXRDLENBQUM7SUFtQkcsV0FBQSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUk3QixXQUFBLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTs2Q0FITixTQUFTO1FBQ1YsUUFBUTtRQUNSLFNBQVM7R0FyQmpCLGNBQWMsQ0F5TDFCO1NBekxZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5pbXBvcnQgeyBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xuXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCBhbmNob3JtZSBmcm9tICdhbmNob3JtZSc7XG5cbmltcG9ydCB7IEVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0IH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTWVzc2FnZVF1ZXVlU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kdWxlcy9tZXNzYWdlcy9jb21wb25lbnRzJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZXNlbmRNZXNzYWdlUXVldWUsIEZvcndhcmRNZXNzYWdlUXVldWUsIExvYWRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvdHlwZXMnO1xuXG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vcXVldWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWV1ZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBRdWV1ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKCdsb2dMaXN0JylcbiAgcHVibGljIGxvZ0xpc3Q6IEZzTGlzdENvbXBvbmVudDtcblxuICBwdWJsaWMgbWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbG9hZE1lc3NhZ2U6IExvYWRNZXNzYWdlO1xuICBwdWJsaWMgcmVzZW5kTWVzc2FnZVF1ZXVlOiBSZXNlbmRNZXNzYWdlUXVldWU7XG4gIHB1YmxpYyBmb3J3YXJkTWVzc2FnZVF1ZXVlOiBGb3J3YXJkTWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbWVzc2FnZVF1ZXVlUmVjaXBpZW50cyA9IHt9O1xuICBwdWJsaWMgZW1haWxNZXNzYWdlUXVldWVGb3JtYXQgPSBFbWFpbE1lc3NhZ2VRdWV1ZUZvcm1hdDtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVN0YXRlcztcbiAgcHVibGljIGxvZ0NvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgYXR0YWNobWVudENvbmZpZzogRnNMaXN0Q29uZmlnO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEZTX0FQUF9NRVNTQUdFX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBGc0FwcE1lc3NhZ2VDb25maWcsXG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogRnNNZXNzYWdlLFxuICAgIHByaXZhdGUgX3Byb21wdDogRnNQcm9tcHQsXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgX2RhdGEsXG4gICkge1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMubWVzc2FnZVF1ZXVlU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoTWVzc2FnZVF1ZXVlU3RhdGVzKTtcbiAgICB0aGlzLnJlc2VuZE1lc3NhZ2VRdWV1ZSA9IHRoaXMuX2NvbmZpZy5yZXNlbmRNZXNzYWdlUXVldWU7XG4gICAgdGhpcy5mb3J3YXJkTWVzc2FnZVF1ZXVlID0gdGhpcy5fY29uZmlnLmZvcndhcmRNZXNzYWdlUXVldWU7XG5cbiAgICB0aGlzLl9jb25maWcubG9hZE1lc3NhZ2VRdWV1ZSh0aGlzLl9kYXRhLm1lc3NhZ2VRdWV1ZUlkKVxuICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2VRdWV1ZSkgPT4ge1xuICAgICAgdGhpcy5tZXNzYWdlUXVldWUgPSBtZXNzYWdlUXVldWU7XG5cbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZSkge1xuICAgICAgICBsZXQgYm9keSA9IHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmJvZHk7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mb3JtYXQgPT09IEVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LkhUTUwpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhib2R5LCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdhJykuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYm9keSA9IGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gdGhpcy5hbmNob3JtZShib2R5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmJvZHkgPSBib2R5O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5ib2R5ID0gdGhpcy5hbmNob3JtZSh0aGlzLm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuYm9keSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZVF1ZXVlUmVjaXBpZW50cyA9IHRoaXMubWVzc2FnZVF1ZXVlLm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNcbiAgICAgICAgLnJlZHVjZSgoYWNjdW0sIG1lc3NhZ2VRdWV1ZVJlY2lwaWVudCkgPT4ge1xuICAgICAgICAgIGFjY3VtW21lc3NhZ2VRdWV1ZVJlY2lwaWVudC5yZWNpcGllbnRdID0gbWVzc2FnZVF1ZXVlUmVjaXBpZW50LnN0YXRlO1xuXG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgIHRoaXMuX3NldExvZ3NDb25maWcobWVzc2FnZVF1ZXVlKTtcbiAgICAgIHRoaXMuX3NldEF0dGFjaG1lbnRzQ29uZmlnKG1lc3NhZ2VRdWV1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYW5jaG9ybWUoaHRtbCkge1xuICAgIHJldHVybiBhbmNob3JtZShodG1sLCB7XG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndGFyZ2V0JyxcbiAgICAgICAgICAgIHZhbHVlOiAnX2JsYW5rJ1xuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9wZW5NZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihNZXNzYWdlQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgd2lkdGg6ICc4NSUnXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZW5kKCkge1xuICAgIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnQ29uZmlybScsXG4gICAgICB0ZW1wbGF0ZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byByZXNlbmQgdGhpcyBtZXNzYWdlPydcbiAgICB9KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNlbmRNZXNzYWdlUXVldWUodGhpcy5tZXNzYWdlUXVldWUpXG4gICAgICAuc3Vic2NyaWJlKG1lc3NhZ2VRdWV1ZSA9PiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tZXNzYWdlUXVldWUsIG1lc3NhZ2VRdWV1ZSk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU3VjY2Vzc2Z1bGx5IHJlc2VudCcpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvZ0xpc3QpIHtcbiAgICAgICAgICB0aGlzLmxvZ0xpc3QucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGZvcndhcmQoKSB7XG4gICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLm1lc3NhZ2VRdWV1ZS50eXBlID09PSBNZXNzYWdlUXVldWVUeXBlLkVtYWlsID8gJ2FuIGVtYWlsJyA6ICdhIHBob25lIG51bWJlcic7XG5cbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgbGFiZWw6IGBQbGVhc2UgZW50ZXIgJHt0eXBlTmFtZX0gdG8gZm9yd2FyZCB0b2AsXG4gICAgICB0aXRsZTogJ0ZvcndhcmQgTWVzc2FnZScsXG4gICAgICBjb21taXRMYWJlbDogJ0ZvcndhcmQnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcndhcmRNZXNzYWdlUXVldWUodGhpcy5tZXNzYWdlUXVldWUsIHZhbHVlKVxuICAgICAgICAuc3Vic2NyaWJlKG1lc3NhZ2VRdWV1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUgPSB7XG4gICAgICAgICAgICAuLi50aGlzLm1lc3NhZ2VRdWV1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU3VjY2Vzc2Z1bGx5IGZvcndhcmRlZCcpO1xuXG4gICAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5sb2dMaXN0LnJlbG9hZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRMb2dzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMubG9nQ29uZmlnID0ge1xuICAgICAgbG9hZE1vcmU6IHRydWUsXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIGZldGNoOiBxdWVyeSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcubG9hZExvZ3MobWVzc2FnZVF1ZXVlLCBxdWVyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0QXR0YWNobWVudHNDb25maWcobWVzc2FnZVF1ZXVlKSB7XG4gICAgdGhpcy5hdHRhY2htZW50Q29uZmlnID0ge1xuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBmZXRjaDogcXVlcnkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlUXVldWVBdHRhY2htZW50cyhtZXNzYWdlUXVldWUsIHF1ZXJ5KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKHJlc3BvbnNlID0+ICh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEubWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5wcmV0dHlGaWxlc2l6ZSA9IHRoaXMuX3ByZXR0eUZpbGVzaXplKHZhbHVlLmZpbGVzaXplKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIH0pLCBwYWdpbmc6IHJlc3BvbnNlLnBhZ2luZ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5kb3dubG9hZE1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnQpIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZy5yb3dBY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY2xpY2s6IChtZXNzYWdlQXR0YWNobWVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnLmRvd25sb2FkTWVzc2FnZVF1ZXVlQXR0YWNobWVudChtZXNzYWdlQXR0YWNobWVudCwgdGhpcy5tZXNzYWdlUXVldWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbGFiZWw6ICdEb3dubG9hZCcsXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcHJldHR5RmlsZXNpemUoYnl0ZXMpIHtcbiAgICBpZiAoYnl0ZXMgPT09IDApIHsgcmV0dXJuICcwLjAwIEInOyB9XG4gICAgY29uc3QgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coMTAyNCkpO1xuICAgIHJldHVybiAoYnl0ZXMgLyBNYXRoLnBvdygxMDI0LCBlKSkudG9GaXhlZCgyKSArICcgJyArICcgS01HVFAnLmNoYXJBdChlKSArICdCJztcbiAgfVxufVxuIl19
1
+ import { Component, Inject, ViewChild, } from '@angular/core';
2
+ import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
3
+ import { FsMessage } from '@firestitch/message';
4
+ import { FsPrompt } from '@firestitch/prompt';
5
+ import { FsListComponent } from '@firestitch/list';
6
+ import { map } from 'rxjs/operators';
7
+ import { Subject } from 'rxjs';
8
+ import anchorme from 'anchorme';
9
+ import { EmailMessageQueueFormat, MessageQueueEventType } from '../../enums';
10
+ import { MessageQueueStates } from '../../consts';
11
+ import { indexNameValue } from '../../../../helpers';
12
+ import { MessageComponent } from '../../../../modules/messages/components';
13
+ import { MessageQueueType } from '../../enums';
14
+ import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
15
+ import { MessageQueueEventTypes } from '../../consts/message-queue-event-type.const';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@firestitch/message";
18
+ import * as i2 from "@firestitch/prompt";
19
+ import * as i3 from "@angular/material/dialog";
20
+ import * as i4 from "@firestitch/dialog";
21
+ import * as i5 from "@angular/material/tabs";
22
+ import * as i6 from "@firestitch/label";
23
+ import * as i7 from "../recipient/recipient.component";
24
+ import * as i8 from "@firestitch/iframe";
25
+ import * as i9 from "@firestitch/list";
26
+ import * as i10 from "@firestitch/date";
27
+ import * as i11 from "@angular/material/button";
28
+ import * as i12 from "@firestitch/skeleton";
29
+ import * as i13 from "@angular/flex-layout/flex";
30
+ import * as i14 from "@angular/common";
31
+ export class QueueComponent {
32
+ constructor(_config, _message, _prompt, _dialog, _data) {
33
+ this._config = _config;
34
+ this._message = _message;
35
+ this._prompt = _prompt;
36
+ this._dialog = _dialog;
37
+ this._data = _data;
38
+ this.messageQueueRecipients = {};
39
+ this.emailMessageQueueFormat = EmailMessageQueueFormat;
40
+ this.MessageQueueEventTypes = indexNameValue(MessageQueueEventTypes);
41
+ this.MessageQueueEventType = MessageQueueEventType;
42
+ this._destroy$ = new Subject();
43
+ }
44
+ ngOnInit() {
45
+ this.messageQueueStates = indexNameValue(MessageQueueStates);
46
+ this.resendMessageQueue = this._config.resendMessageQueue;
47
+ this.forwardMessageQueue = this._config.forwardMessageQueue;
48
+ this._config.loadMessageQueue(this._data.messageQueueId)
49
+ .subscribe((messageQueue) => {
50
+ this.messageQueue = messageQueue;
51
+ if (this.messageQueue.emailMessageQueue) {
52
+ let body = this.messageQueue.emailMessageQueue.body;
53
+ if (this.messageQueue.emailMessageQueue.format === EmailMessageQueueFormat.HTML) {
54
+ try {
55
+ const doc = new DOMParser().parseFromString(body, 'text/html');
56
+ doc.querySelectorAll('a').forEach((el) => {
57
+ el.setAttribute('target', '_blank');
58
+ });
59
+ body = doc.documentElement.innerHTML;
60
+ }
61
+ catch (e) {
62
+ }
63
+ }
64
+ else {
65
+ body = this.anchorMe(body);
66
+ }
67
+ this.messageQueue.emailMessageQueue.body = body;
68
+ }
69
+ if (this.messageQueue.smsMessageQueue) {
70
+ this.messageQueue.smsMessageQueue.body = this.anchorMe(this.messageQueue.smsMessageQueue.body);
71
+ }
72
+ this.messageQueueRecipients = this.messageQueue.messageQueueRecipients
73
+ .reduce((accum, messageQueueRecipient) => {
74
+ accum[messageQueueRecipient.recipient] = messageQueueRecipient.state;
75
+ return accum;
76
+ }, {});
77
+ this._setLogsConfig(messageQueue);
78
+ this._setAttachmentsConfig(messageQueue);
79
+ this._setEventsConfig(messageQueue);
80
+ });
81
+ }
82
+ anchorMe(html) {
83
+ return anchorme(html, {
84
+ options: {
85
+ attributes: [
86
+ {
87
+ name: 'target',
88
+ value: '_blank'
89
+ },
90
+ ],
91
+ },
92
+ });
93
+ }
94
+ openMessage(message) {
95
+ this._dialog.open(MessageComponent, {
96
+ data: {
97
+ message: message,
98
+ },
99
+ width: '85%'
100
+ });
101
+ }
102
+ resend() {
103
+ this._prompt.confirm({
104
+ title: 'Confirm',
105
+ template: 'Are you sure you would like to resend this message?'
106
+ }).subscribe(() => {
107
+ this.resendMessageQueue(this.messageQueue)
108
+ .subscribe(messageQueue => {
109
+ Object.assign(this.messageQueue, messageQueue);
110
+ this._message.success('Successfully resent');
111
+ if (this.logList) {
112
+ this.logList.reload();
113
+ }
114
+ });
115
+ });
116
+ }
117
+ forward() {
118
+ const typeName = this.messageQueue.type === MessageQueueType.Email ? 'an email' : 'a phone number';
119
+ this._prompt.input({
120
+ label: `Please enter ${typeName} to forward to`,
121
+ title: 'Forward Message',
122
+ commitLabel: 'Forward',
123
+ required: true
124
+ }).subscribe((value) => {
125
+ if (value) {
126
+ this.forwardMessageQueue(this.messageQueue, value)
127
+ .subscribe(messageQueue => {
128
+ this.messageQueue = Object.assign(Object.assign({}, this.messageQueue), { messageQueue });
129
+ this._message.success('Successfully forwarded');
130
+ if (this.logList) {
131
+ this.logList.reload();
132
+ }
133
+ });
134
+ }
135
+ });
136
+ }
137
+ ngOnDestroy() {
138
+ this._destroy$.next();
139
+ this._destroy$.complete();
140
+ }
141
+ _setLogsConfig(messageQueue) {
142
+ this.logConfig = {
143
+ loadMore: true,
144
+ queryParam: false,
145
+ fetch: query => {
146
+ return this._config.loadLogs(messageQueue, query);
147
+ }
148
+ };
149
+ }
150
+ _setEventsConfig(messageQueue) {
151
+ this.eventConfig = {
152
+ loadMore: true,
153
+ queryParam: false,
154
+ fetch: (query) => {
155
+ return this._config.loadMessageQueueEvents(messageQueue, query);
156
+ }
157
+ };
158
+ }
159
+ _setAttachmentsConfig(messageQueue) {
160
+ this.attachmentConfig = {
161
+ queryParam: false,
162
+ fetch: query => {
163
+ return this._config.loadMessageQueueAttachments(messageQueue, query)
164
+ .pipe(map(response => ({
165
+ data: response.data.map(value => {
166
+ value.prettyFilesize = this._prettyFilesize(value.filesize);
167
+ return value;
168
+ }), paging: response.paging
169
+ })));
170
+ }
171
+ };
172
+ if (this._config.downloadMessageQueueAttachment) {
173
+ this.attachmentConfig.rowActions = [
174
+ {
175
+ click: (messageAttachment) => {
176
+ this._config.downloadMessageQueueAttachment(messageAttachment, this.messageQueue);
177
+ },
178
+ label: 'Download',
179
+ }
180
+ ];
181
+ }
182
+ }
183
+ _prettyFilesize(bytes) {
184
+ if (bytes === 0) {
185
+ return '0.00 B';
186
+ }
187
+ const e = Math.floor(Math.log(bytes) / Math.log(1024));
188
+ return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';
189
+ }
190
+ }
191
+ QueueComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: QueueComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.FsMessage }, { token: i2.FsPrompt }, { token: i3.MatDialog }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
192
+ QueueComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", 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>Message Queue</div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div fxLayout=\"row wrap\" fxLayoutGap=\"25px\">\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\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\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\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\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\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\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\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 \n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{messageQueue.scheduledDate | fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{messageQueueStates[messageQueue.state]}}\n </fs-label-field>\n\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\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\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 </fs-iframe>\n </fs-label-field>\n </ng-container>\n\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\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list [config]=\"logConfig\" #logList>\n <fs-list-column title=\"Message\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell 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 fs-list-cell let-row=\"row\">\n {{row.filename}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template fs-list-cell 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 fs-list-cell let-row=\"row\">\n {{row.messageQueueRecipient.recipient}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template fs-list-cell let-row=\"row\">\n {{MessageQueueEventTypes[row.type]}}\n <div class=\"small\" *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a [href]=\"row.meta?.url\" target=\"_blank\">{{row.meta?.url}}</a>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell 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>\n", styles: [".subject,.body{display:block;margin-top:15px}.body .format-text{white-space:pre-wrap}.body .body-frame{border:0}.body ::ng-deep .field-label{margin-bottom:10px}app-recipient{display:block}[hidden]{display:none!important}\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.ɵb, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i6.ɵa, selector: "fs-label" }, { type: i7.RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { type: i8.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "styles"] }, { type: i9.FsListComponent, selector: "fs-list", inputs: ["loaderLines", "config"], outputs: ["filtersReady"] }, { type: i10.ɵb, selector: "fs-date-ago", inputs: ["showTime", "format", "showTooltip", "tooltipDateFormat", "date"] }, { type: i11.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: i12.ɵa, selector: "[fsSkeleton]", inputs: ["fsSkeletonPattern", "fsSkeleton"] }, { type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i5.MatTabContent, selector: "[matTabContent]" }, { type: i13.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: i13.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: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "customize", "title", "name", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i9.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { 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"] }], pipes: { "fsDateFormat": i10.FsDateFormatPipe } });
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: QueueComponent, decorators: [{
194
+ type: Component,
195
+ args: [{
196
+ templateUrl: './queue.component.html',
197
+ styleUrls: ['./queue.component.scss'],
198
+ }]
199
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
200
+ type: Inject,
201
+ args: [FS_APP_MESSAGE_CONFIG]
202
+ }] }, { type: i1.FsMessage }, { type: i2.FsPrompt }, { type: i3.MatDialog }, { type: undefined, decorators: [{
203
+ type: Inject,
204
+ args: [MAT_DIALOG_DATA]
205
+ }] }]; }, propDecorators: { logList: [{
206
+ type: ViewChild,
207
+ args: ['logList']
208
+ }] } });
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBVSxNQUFNLEVBQWEsU0FBUyxHQUNoRCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFn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O29CQUNFLEtBQUssRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7d0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNwRixDQUFDO29CQUNELEtBQUssRUFBRSxVQUFVO2lCQUNsQjthQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsS0FBSztRQUMzQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPLFFBQVEsQ0FBQztTQUFFO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDakYsQ0FBQzs7NEdBdE1VLGNBQWMsa0JBcUJmLHFCQUFxQix1RkFJckIsZUFBZTtnR0F6QmQsY0FBYyx3SkM5QjNCLHFyUkEwT0E7NEZENU1hLGNBQWM7a0JBSjFCLFNBQVM7bUJBQUM7b0JBQ1QsV0FBVyxFQUFFLHdCQUF3QjtvQkFDckMsU0FBUyxFQUFFLENBQUMsd0JBQXdCLENBQUM7aUJBQ3RDOzswQkFzQkksTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUk1QixNQUFNOzJCQUFDLGVBQWU7NENBdEJsQixPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIE9uRGVzdHJveSwgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcbmltcG9ydCB7IEZzTGlzdENvbXBvbmVudCwgRnNMaXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5cbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IGFuY2hvcm1lIGZyb20gJ2FuY2hvcm1lJztcblxuaW1wb3J0IHsgRW1haWxNZXNzYWdlUXVldWVGb3JtYXQsIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZVN0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNZXNzYWdlUXVldWVUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgRlNfQVBQX01FU1NBR0VfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW5qZWN0b3JzJztcbmltcG9ydCB7IEZzQXBwTWVzc2FnZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2FwcC1tZXNzYWdlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmVzZW5kTWVzc2FnZVF1ZXVlLCBGb3J3YXJkTWVzc2FnZVF1ZXVlLCBMb2FkTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1tZXNzYWdlL3R5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbWVzc2FnZS1xdWV1ZS1ldmVudC10eXBlLmNvbnN0JztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVldWUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVldWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnbG9nTGlzdCcpXG4gIHB1YmxpYyBsb2dMaXN0OiBGc0xpc3RDb21wb25lbnQ7XG5cbiAgcHVibGljIG1lc3NhZ2VRdWV1ZTtcbiAgcHVibGljIGxvYWRNZXNzYWdlOiBMb2FkTWVzc2FnZTtcbiAgcHVibGljIHJlc2VuZE1lc3NhZ2VRdWV1ZTogUmVzZW5kTWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgZm9yd2FyZE1lc3NhZ2VRdWV1ZTogRm9yd2FyZE1lc3NhZ2VRdWV1ZTtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVJlY2lwaWVudHMgPSB7fTtcbiAgcHVibGljIGVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0ID0gRW1haWxNZXNzYWdlUXVldWVGb3JtYXQ7XG4gIHB1YmxpYyBtZXNzYWdlUXVldWVTdGF0ZXM7XG4gIHB1YmxpYyBsb2dDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIGF0dGFjaG1lbnRDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIGV2ZW50Q29uZmlnOiBGc0xpc3RDb25maWc7XG4gIHB1YmxpYyBNZXNzYWdlUXVldWVFdmVudFR5cGVzID0gaW5kZXhOYW1lVmFsdWUoTWVzc2FnZVF1ZXVlRXZlbnRUeXBlcyk7XG4gIHB1YmxpYyBNZXNzYWdlUXVldWVFdmVudFR5cGUgPSBNZXNzYWdlUXVldWVFdmVudFR5cGU7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRlNfQVBQX01FU1NBR0VfQ09ORklHKSBwcml2YXRlIF9jb25maWc6IEZzQXBwTWVzc2FnZUNvbmZpZyxcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgcHJpdmF0ZSBfcHJvbXB0OiBGc1Byb21wdCxcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YSxcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlUXVldWVTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVTdGF0ZXMpO1xuICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlID0gdGhpcy5fY29uZmlnLnJlc2VuZE1lc3NhZ2VRdWV1ZTtcbiAgICB0aGlzLmZvcndhcmRNZXNzYWdlUXVldWUgPSB0aGlzLl9jb25maWcuZm9yd2FyZE1lc3NhZ2VRdWV1ZTtcblxuICAgIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlKHRoaXMuX2RhdGEubWVzc2FnZVF1ZXVlSWQpXG4gICAgLnN1YnNjcmliZSgobWVzc2FnZVF1ZXVlKSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IG1lc3NhZ2VRdWV1ZTtcblxuICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keTtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdCA9PT0gRW1haWxNZXNzYWdlUXVldWVGb3JtYXQuSFRNTCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGJvZHksICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBib2R5ID0gZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSB0aGlzLmFuY2hvck1lKGJvZHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keSA9IGJvZHk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmJvZHkgPSB0aGlzLmFuY2hvck1lKHRoaXMubWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlUXVldWVSZWNpcGllbnRzID0gdGhpcy5tZXNzYWdlUXVldWUubWVzc2FnZVF1ZXVlUmVjaXBpZW50c1xuICAgICAgICAucmVkdWNlKChhY2N1bSwgbWVzc2FnZVF1ZXVlUmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgYWNjdW1bbWVzc2FnZVF1ZXVlUmVjaXBpZW50LnJlY2lwaWVudF0gPSBtZXNzYWdlUXVldWVSZWNpcGllbnQuc3RhdGU7XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgdGhpcy5fc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fc2V0QXR0YWNobWVudHNDb25maWcobWVzc2FnZVF1ZXVlKTtcbiAgICAgIHRoaXMuX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFuY2hvck1lKGh0bWwpIHtcbiAgICByZXR1cm4gYW5jaG9ybWUoaHRtbCwge1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3RhcmdldCcsXG4gICAgICAgICAgICB2YWx1ZTogJ19ibGFuaydcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oTWVzc2FnZUNvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODUlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZCgpIHtcbiAgICB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0NvbmZpcm0nLFxuICAgICAgdGVtcGxhdGU6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gcmVzZW5kIHRoaXMgbWVzc2FnZT8nXG4gICAgfSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlKHRoaXMubWVzc2FnZVF1ZXVlKVxuICAgICAgLnN1YnNjcmliZShtZXNzYWdlUXVldWUgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubWVzc2FnZVF1ZXVlLCBtZXNzYWdlUXVldWUpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1N1Y2Nlc3NmdWxseSByZXNlbnQnKTtcblxuICAgICAgICBpZiAodGhpcy5sb2dMaXN0KSB7XG4gICAgICAgICAgdGhpcy5sb2dMaXN0LnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmb3J3YXJkKCkge1xuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy5tZXNzYWdlUXVldWUudHlwZSA9PT0gTWVzc2FnZVF1ZXVlVHlwZS5FbWFpbCA/ICdhbiBlbWFpbCcgOiAnYSBwaG9uZSBudW1iZXInO1xuXG4gICAgdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgIGxhYmVsOiBgUGxlYXNlIGVudGVyICR7dHlwZU5hbWV9IHRvIGZvcndhcmQgdG9gLFxuICAgICAgdGl0bGU6ICdGb3J3YXJkIE1lc3NhZ2UnLFxuICAgICAgY29tbWl0TGFiZWw6ICdGb3J3YXJkJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3J3YXJkTWVzc2FnZVF1ZXVlKHRoaXMubWVzc2FnZVF1ZXVlLCB2YWx1ZSlcbiAgICAgICAgLnN1YnNjcmliZShtZXNzYWdlUXVldWUgPT4ge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVF1ZXVlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5tZXNzYWdlUXVldWUsXG4gICAgICAgICAgICBtZXNzYWdlUXVldWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1N1Y2Nlc3NmdWxseSBmb3J3YXJkZWQnKTtcblxuICAgICAgICAgIGlmICh0aGlzLmxvZ0xpc3QpIHtcbiAgICAgICAgICAgIHRoaXMubG9nTGlzdC5yZWxvYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpIHtcbiAgICB0aGlzLmxvZ0NvbmZpZyA9IHtcbiAgICAgIGxvYWRNb3JlOiB0cnVlLFxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBmZXRjaDogcXVlcnkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRMb2dzKG1lc3NhZ2VRdWV1ZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpIHtcbiAgICB0aGlzLmV2ZW50Q29uZmlnID0ge1xuICAgICAgbG9hZE1vcmU6IHRydWUsXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIGZldGNoOiAocXVlcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlRXZlbnRzKG1lc3NhZ2VRdWV1ZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEF0dGFjaG1lbnRzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMuYXR0YWNobWVudENvbmZpZyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgZmV0Y2g6IHF1ZXJ5ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlQXR0YWNobWVudHMobWVzc2FnZVF1ZXVlLCBxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcChyZXNwb25zZSA9PiAoe1xuICAgICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUucHJldHR5RmlsZXNpemUgPSB0aGlzLl9wcmV0dHlGaWxlc2l6ZSh2YWx1ZS5maWxlc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICB9KSwgcGFnaW5nOiByZXNwb25zZS5wYWdpbmdcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9jb25maWcuZG93bmxvYWRNZXNzYWdlUXVldWVBdHRhY2htZW50KSB7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWcucm93QWN0aW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsaWNrOiAobWVzc2FnZUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5kb3dubG9hZE1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnQobWVzc2FnZUF0dGFjaG1lbnQsIHRoaXMubWVzc2FnZVF1ZXVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhYmVsOiAnRG93bmxvYWQnLFxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ByZXR0eUZpbGVzaXplKGJ5dGVzKSB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSB7IHJldHVybiAnMC4wMCBCJzsgfVxuICAgIGNvbnN0IGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgICByZXR1cm4gKGJ5dGVzIC8gTWF0aC5wb3coMTAyNCwgZSkpLnRvRml4ZWQoMikgKyAnICcgKyAnIEtNR1RQJy5jaGFyQXQoZSkgKyAnQic7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJtZXNzYWdlUXVldWVcIj5cbiAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPk1lc3NhZ2UgUXVldWU8L2Rpdj5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiT3ZlcnZpZXdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRHYXA9XCIyNXB4XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBUbyBSZWNpcGllbnRzXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudCBcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2YgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLnRvUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICBbc3RhdGVdPVwibWVzc2FnZVF1ZXVlUmVjaXBpZW50c1tyZWNpcGllbnRdXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJlY2lwaWVudFwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuY2NSZWNpcGllbnRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIENDXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudCBcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2YgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICBbc3RhdGVdPVwibWVzc2FnZVF1ZXVlUmVjaXBpZW50c1tyZWNpcGllbnRdXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJlY2lwaWVudFwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmJjY1JlY2lwaWVudHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgQkNDXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudCBcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2YgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmJjY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSB8fCBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgRnJvbVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSA9PT0gbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbDsgZWxzZSBmcm9tRW1haWxOYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZX19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Zyb21FbWFpbE5hbWU+XG4gICAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZX19XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAoe3ttZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsfX0pXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5yZXBseUVtYWlsICYmIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5yZXBseUVtYWlsLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIFJlcGx5IFRvXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5yZXBseUVtYWlsLmpvaW4oJywgJyl9fVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBUbyBOdW1iZXJcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxhcHAtcmVjaXBpZW50IFxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZS5zdGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLnRvTnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtcmVjaXBpZW50PiAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5mcm9tTnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgRnJvbSBOdW1iZXJcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7bWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5mcm9tTnVtYmVyfX1cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICBcbiAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIERhdGVcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWUuc2NoZWR1bGVkRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2Z1bGwtZGF0ZS10aW1lJ319XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBTdGF0dXNcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWVTdGF0ZXNbbWVzc2FnZVF1ZXVlLnN0YXRlXX19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJtZXNzYWdlUXVldWUubWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgTWVzc2FnZSBUeXBlXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5NZXNzYWdlKG1lc3NhZ2VRdWV1ZS5tZXNzYWdlKVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsb2FkTWVzc2FnZTsgZWxzZSBlbHNlTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgIHt7bWVzc2FnZVF1ZXVlLm1lc3NhZ2UubmFtZX19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlTWVzc2FnZT5cbiAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5tZXNzYWdlLm5hbWV9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCBjbGFzcz1cInN1YmplY3RcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIFN1YmplY3RcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuc3ViamVjdH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgY2xhc3M9XCJib2R5XCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBCb2R5XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdD09PWVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LlRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtdGV4dFwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5ib2R5XCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZnMtaWZyYW1lXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0PT09ZW1haWxNZXNzYWdlUXVldWVGb3JtYXQuSFRNTCB8fCBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0PT09ZW1haWxNZXNzYWdlUXVldWVGb3JtYXQuUmljaFRleHRcIlxuICAgICAgICAgICAgICAgIFtodG1sXT1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5ib2R5XCI+XG4gICAgICAgICAgICAgIDwvZnMtaWZyYW1lPlxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBNZXNzYWdlXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm1hdC10ZXh0XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuYm9keVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTG9nc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdCBbY29uZmlnXT1cImxvZ0NvbmZpZ1wiICNsb2dMaXN0PlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiTWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7e3Jvdy5tZXNzYWdlfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJEYXRlXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlZERhdGVcIj48L2ZzLWRhdGUtYWdvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkF0dGFjaG1lbnRzXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxmcy1saXN0IFtjb25maWddPVwiYXR0YWNobWVudENvbmZpZ1wiPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRmlsZSBOYW1lXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7cm93LmZpbGVuYW1lfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJGaWxlIFNpemVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3tyb3cucHJldHR5RmlsZXNpemV9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkV2ZW50c1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdCBbY29uZmlnXT1cImV2ZW50Q29uZmlnXCI+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJSZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3tyb3cubWVzc2FnZVF1ZXVlUmVjaXBpZW50LnJlY2lwaWVudH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRXZlbnRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3tNZXNzYWdlUXVldWVFdmVudFR5cGVzW3Jvdy50eXBlXX19XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgKm5nSWY9XCJyb3cudHlwZSA9PT0gTWVzc2FnZVF1ZXVlRXZlbnRUeXBlLkNsaWNrXCI+XG4gICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJyb3cubWV0YT8udXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3tyb3cubWV0YT8udXJsfX08L2E+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7e3Jvdy5jcmVhdGVEYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lLXllYXJsZXNzJ319XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDwvZnMtbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICBEb25lXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwicmVzZW5kTWVzc2FnZVF1ZXVlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJyZXNlbmQoKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIFJlc2VuZFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAqbmdJZj1cImZvcndhcmRNZXNzYWdlUXVldWVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImZvcndhcmQoKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIEZvcndhcmRcbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG48L2ZzLWRpYWxvZz5cbiJdfQ==