speechrecorderng 2.21.4 → 2.22.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 (111) hide show
  1. package/{esm2015/lib/action/action.js → esm2020/lib/action/action.mjs} +0 -0
  2. package/{esm2015/lib/audio/audio_display.js → esm2020/lib/audio/audio_display.mjs} +5 -5
  3. package/esm2020/lib/audio/audio_player.mjs +276 -0
  4. package/esm2020/lib/audio/capture/capture.mjs +547 -0
  5. package/{esm2015/lib/audio/context.js → esm2020/lib/audio/context.mjs} +0 -0
  6. package/esm2020/lib/audio/dsp/level_measure.mjs +351 -0
  7. package/{esm2015/lib/audio/format.js → esm2020/lib/audio/format.mjs} +0 -0
  8. package/{esm2015/lib/audio/impl/wavformat.js → esm2020/lib/audio/impl/wavformat.mjs} +0 -0
  9. package/{esm2015/lib/audio/impl/wavwriter.js → esm2020/lib/audio/impl/wavwriter.mjs} +0 -0
  10. package/{esm2015/lib/audio/io/stream.js → esm2020/lib/audio/io/stream.mjs} +0 -0
  11. package/{esm2015/lib/audio/persistor.js → esm2020/lib/audio/persistor.mjs} +0 -0
  12. package/{esm2015/lib/audio/playback/player.js → esm2020/lib/audio/playback/player.mjs} +0 -0
  13. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +376 -0
  14. package/{esm2015/lib/audio/ui/audio_display_control.js → esm2020/lib/audio/ui/audio_display_control.mjs} +5 -5
  15. package/{esm2015/lib/audio/ui/audio_display_scroll_pane.js → esm2020/lib/audio/ui/audio_display_scroll_pane.mjs} +5 -5
  16. package/{esm2015/lib/audio/ui/audiosignal.js → esm2020/lib/audio/ui/audiosignal.mjs} +5 -5
  17. package/{esm2015/lib/audio/ui/common.js → esm2020/lib/audio/ui/common.mjs} +0 -0
  18. package/esm2020/lib/audio/ui/container.mjs +431 -0
  19. package/{esm2015/lib/audio/ui/livelevel.js → esm2020/lib/audio/ui/livelevel.mjs} +5 -5
  20. package/{esm2015/lib/audio/ui/scroll_pane_horizontal.js → esm2020/lib/audio/ui/scroll_pane_horizontal.mjs} +4 -4
  21. package/{esm2015/lib/audio/ui/sonagram.js → esm2020/lib/audio/ui/sonagram.mjs} +5 -5
  22. package/{esm2015/lib/dsp/utils.js → esm2020/lib/dsp/utils.mjs} +0 -0
  23. package/{esm2015/lib/io/BinaryWriter.js → esm2020/lib/io/BinaryWriter.mjs} +0 -0
  24. package/{esm2015/lib/io/stream.js → esm2020/lib/io/stream.mjs} +0 -0
  25. package/{esm2015/lib/math/2d/geometry.js → esm2020/lib/math/2d/geometry.mjs} +0 -0
  26. package/{esm2015/lib/math/complex.js → esm2020/lib/math/complex.mjs} +0 -0
  27. package/{esm2015/lib/math/dft.js → esm2020/lib/math/dft.mjs} +0 -0
  28. package/{esm2015/lib/math/utils.js → esm2020/lib/math/utils.mjs} +0 -0
  29. package/esm2020/lib/media/utils.mjs +14 -0
  30. package/esm2020/lib/net/uploader.mjs +246 -0
  31. package/{esm2015/lib/speechrecorder/project/project.js → esm2020/lib/speechrecorder/project/project.mjs} +0 -0
  32. package/{esm2015/lib/speechrecorder/project/project.service.js → esm2020/lib/speechrecorder/project/project.service.mjs} +4 -4
  33. package/esm2020/lib/speechrecorder/recording.mjs +54 -0
  34. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +246 -0
  35. package/{esm2015/lib/speechrecorder/script/script.js → esm2020/lib/speechrecorder/script/script.mjs} +2 -2
  36. package/{esm2015/lib/speechrecorder/script/script.service.js → esm2020/lib/speechrecorder/script/script.service.mjs} +4 -4
  37. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +1144 -0
  38. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +449 -0
  39. package/{esm2015/lib/speechrecorder/session/item.js → esm2020/lib/speechrecorder/session/item.mjs} +1 -1
  40. package/{esm2015/lib/speechrecorder/session/progress.js → esm2020/lib/speechrecorder/session/progress.mjs} +5 -5
  41. package/{esm2015/lib/speechrecorder/session/prompting.js → esm2020/lib/speechrecorder/session/prompting.mjs} +21 -21
  42. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +75 -0
  43. package/esm2020/lib/speechrecorder/session/recording_list.mjs +109 -0
  44. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +126 -0
  45. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file-navi.component.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs} +5 -5
  46. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +168 -0
  47. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +415 -0
  48. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file.mjs} +1 -1
  49. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +251 -0
  50. package/{esm2015/lib/speechrecorder/session/session.js → esm2020/lib/speechrecorder/session/session.mjs} +0 -0
  51. package/{esm2015/lib/speechrecorder/session/session.service.js → esm2020/lib/speechrecorder/session/session.service.mjs} +4 -4
  52. package/{esm2015/lib/speechrecorder/session/session_finished_dialog.js → esm2020/lib/speechrecorder/session/session_finished_dialog.mjs} +4 -4
  53. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +1274 -0
  54. package/{esm2015/lib/speechrecorder/session/warning_bar.js → esm2020/lib/speechrecorder/session/warning_bar.mjs} +5 -5
  55. package/{esm2015/lib/speechrecorder/spruploader.js → esm2020/lib/speechrecorder/spruploader.mjs} +4 -4
  56. package/{esm2015/lib/speechrecorder/startstopsignal/startstopsignal.js → esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs} +0 -0
  57. package/{esm2015/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.js → esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs} +5 -5
  58. package/esm2020/lib/speechrecorderng.component.mjs +427 -0
  59. package/{esm2015/lib/speechrecorderng.module.js → esm2020/lib/speechrecorderng.module.mjs} +12 -11
  60. package/{esm2015/lib/spr.config.js → esm2020/lib/spr.config.mjs} +4 -4
  61. package/{esm2015/lib/spr.module.version.js → esm2020/lib/spr.module.version.mjs} +2 -2
  62. package/{esm2015/lib/ui/canvas_layer_comp.js → esm2020/lib/ui/canvas_layer_comp.mjs} +4 -4
  63. package/{esm2015/lib/ui/message_dialog.js → esm2020/lib/ui/message_dialog.mjs} +4 -4
  64. package/{esm2015/lib/ui/recordingitem_display.js → esm2020/lib/ui/recordingitem_display.mjs} +9 -9
  65. package/{esm2015/lib/utils/css_utils.js → esm2020/lib/utils/css_utils.mjs} +0 -0
  66. package/{esm2015/lib/utils/scrollIntoViewToBottom.js → esm2020/lib/utils/scrollIntoViewToBottom.mjs} +4 -4
  67. package/{esm2015/lib/utils/ua-parser.js → esm2020/lib/utils/ua-parser.mjs} +0 -0
  68. package/{esm2015/lib/utils/utils.js → esm2020/lib/utils/utils.mjs} +0 -0
  69. package/esm2020/public-api.mjs +31 -0
  70. package/{esm2015/speechrecorderng.js → esm2020/speechrecorderng.mjs} +0 -0
  71. package/fesm2015/speechrecorderng.mjs +11991 -0
  72. package/fesm2015/speechrecorderng.mjs.map +1 -0
  73. package/{fesm2015/speechrecorderng.js → fesm2020/speechrecorderng.mjs} +1863 -285
  74. package/fesm2020/speechrecorderng.mjs.map +1 -0
  75. package/lib/media/utils.d.ts +3 -0
  76. package/lib/net/uploader.d.ts +4 -2
  77. package/lib/speechrecorder/recording.d.ts +14 -3
  78. package/lib/speechrecorder/recordings/recordings.service.d.ts +12 -5
  79. package/lib/speechrecorder/session/audiorecorder.d.ts +150 -0
  80. package/lib/speechrecorder/session/controlpanel.d.ts +2 -1
  81. package/lib/speechrecorder/session/item.d.ts +2 -2
  82. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +26 -0
  83. package/lib/speechrecorder/session/recording_list.d.ts +19 -0
  84. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +6 -2
  85. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +5 -4
  86. package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +2 -2
  87. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +5 -3
  88. package/lib/speechrecorder/session/sessionmanager.d.ts +5 -5
  89. package/lib/speechrecorderng.module.d.ts +31 -28
  90. package/lib/spr.module.version.d.ts +1 -1
  91. package/package.json +33 -20
  92. package/public-api.d.ts +2 -1
  93. package/bundles/speechrecorderng.umd.js +0 -10146
  94. package/bundles/speechrecorderng.umd.js.map +0 -1
  95. package/esm2015/lib/audio/audio_player.js +0 -274
  96. package/esm2015/lib/audio/capture/capture.js +0 -544
  97. package/esm2015/lib/audio/dsp/level_measure.js +0 -356
  98. package/esm2015/lib/audio/ui/audio_canvas_layer_comp.js +0 -364
  99. package/esm2015/lib/audio/ui/container.js +0 -412
  100. package/esm2015/lib/net/uploader.js +0 -220
  101. package/esm2015/lib/speechrecorder/recording.js +0 -38
  102. package/esm2015/lib/speechrecorder/recordings/recordings.service.js +0 -173
  103. package/esm2015/lib/speechrecorder/session/controlpanel.js +0 -446
  104. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-meta.component.js +0 -83
  105. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.js +0 -163
  106. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-view.component.js +0 -386
  107. package/esm2015/lib/speechrecorder/session/recordingfile/recordingfile-service.js +0 -191
  108. package/esm2015/lib/speechrecorder/session/sessionmanager.js +0 -1271
  109. package/esm2015/lib/speechrecorderng.component.js +0 -423
  110. package/esm2015/public-api.js +0 -30
  111. package/fesm2015/speechrecorderng.js.map +0 -1
@@ -0,0 +1,449 @@
1
+ import { Action } from '../../action/action';
2
+ import { Component, ViewChild, Input } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/progress-spinner";
5
+ import * as i2 from "@angular/material/icon";
6
+ import * as i3 from "@angular/material/tooltip";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "@angular/material/button";
9
+ import * as i6 from "@angular/flex-layout/extended";
10
+ import * as i7 from "@angular/material/dialog";
11
+ import * as i8 from "@angular/flex-layout/flex";
12
+ export class StatusDisplay {
13
+ constructor() {
14
+ this.statusAlertType = 'info';
15
+ this.statusMsg = 'Initialize...';
16
+ this.statusWaiting = false;
17
+ }
18
+ }
19
+ StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ StatusDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
21
+ <p matTooltip="Status">
22
+ <mat-progress-spinner *ngIf="statusWaiting" color="black" mode="indeterminate" [diameter]="30" [strokeWidth]="5"></mat-progress-spinner><mat-icon *ngIf="statusAlertType==='error'" style="color:red">report_problem</mat-icon>
23
+ {{statusMsg}}
24
+ </p>
25
+ `, isInline: true, styles: [":host{display:inline;text-align:left;font-size:smaller}\n", "p{padding:4px;white-space:nowrap;display:inline-block}\n", "mat-progress-spinner{color:#000;display:inline-block}\n", "span{color:red}\n"], components: [{ type: i1.MatProgressSpinner, selector: "mat-progress-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: StatusDisplay, decorators: [{
27
+ type: Component,
28
+ args: [{
29
+ selector: 'app-sprstatusdisplay',
30
+ template: `
31
+ <p matTooltip="Status">
32
+ <mat-progress-spinner *ngIf="statusWaiting" color="black" mode="indeterminate" [diameter]="30" [strokeWidth]="5"></mat-progress-spinner><mat-icon *ngIf="statusAlertType==='error'" style="color:red">report_problem</mat-icon>
33
+ {{statusMsg}}
34
+ </p>
35
+ `,
36
+ styles: [`:host {
37
+ display: inline;
38
+ text-align: left;
39
+ font-size: smaller;
40
+ }`, `
41
+ p {
42
+ padding: 4px;
43
+ white-space:nowrap;
44
+ display: inline-block;
45
+ }
46
+ `, `
47
+ mat-progress-spinner {
48
+ color: black;
49
+ display: inline-block;
50
+ }
51
+ `, `
52
+ span {
53
+ color: red;
54
+ }
55
+ `]
56
+ }]
57
+ }], propDecorators: { statusAlertType: [{
58
+ type: Input
59
+ }], statusMsg: [{
60
+ type: Input
61
+ }], statusWaiting: [{
62
+ type: Input
63
+ }] } });
64
+ export class UploadStatus {
65
+ constructor() {
66
+ this._awaitNewUpload = false;
67
+ this.spinnerMode = 'determinate';
68
+ this._value = 100;
69
+ this.displayValue = null;
70
+ this.toolTipText = '';
71
+ }
72
+ _updateSpinner() {
73
+ let uplMsg;
74
+ if (this._awaitNewUpload || this._value === 0) {
75
+ this.spinnerMode = 'indeterminate';
76
+ this.displayValue = '&nbsp;&nbsp;&nbsp;&nbsp;';
77
+ uplMsg = 'Preparing upload.';
78
+ }
79
+ else {
80
+ this.spinnerMode = 'determinate';
81
+ this.displayValue = this._value + '%';
82
+ if (this._value === 100) {
83
+ uplMsg = 'Upload complete';
84
+ }
85
+ else {
86
+ uplMsg = 'Upload progress: ' + this.displayValue;
87
+ }
88
+ }
89
+ if (this.status === 'warn') {
90
+ uplMsg = 'Upload error occurred. Please check your network connection. ' + uplMsg;
91
+ }
92
+ this.toolTipText = uplMsg;
93
+ }
94
+ set value(value) {
95
+ this._value = value;
96
+ this._updateSpinner();
97
+ }
98
+ ;
99
+ set awaitNewUpload(awaitNewUpload) {
100
+ this._awaitNewUpload = awaitNewUpload;
101
+ this._updateSpinner();
102
+ }
103
+ set status(status) {
104
+ this._status = status;
105
+ this._updateSpinner();
106
+ }
107
+ get status() {
108
+ return this._status;
109
+ }
110
+ }
111
+ UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
+ UploadStatus.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
113
+ <mat-progress-spinner [mode]="spinnerMode" [color]="status" [diameter]="30" [strokeWidth]="5" [value]="_value" [matTooltip]="toolTipText"></mat-progress-spinner>
114
+ `, isInline: true, styles: [":host{flex:1;text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"], components: [{ type: i1.MatProgressSpinner, selector: "mat-progress-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: UploadStatus, decorators: [{
116
+ type: Component,
117
+ args: [{
118
+ selector: 'app-uploadstatus',
119
+ template: `
120
+ <mat-progress-spinner [mode]="spinnerMode" [color]="status" [diameter]="30" [strokeWidth]="5" [value]="_value" [matTooltip]="toolTipText"></mat-progress-spinner>
121
+ `,
122
+ styles: [`:host {
123
+ flex: 1;
124
+ /* align-self: flex-start; */
125
+ /*display: inline; */
126
+ text-align: left;
127
+ }`, `mat-progress-spinner{
128
+ display: inline-block;
129
+ }`]
130
+ }]
131
+ }], propDecorators: { value: [{
132
+ type: Input
133
+ }], awaitNewUpload: [{
134
+ type: Input
135
+ }], status: [{
136
+ type: Input
137
+ }] } });
138
+ export class ProgressDisplay {
139
+ constructor() {
140
+ this.progressMsg = '[itemcode]';
141
+ }
142
+ }
143
+ ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
144
+ ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
145
+ <p>{{progressMsg}}</p>
146
+ `, isInline: true, styles: [":host{flex:1;width:100%;text-align:left}\n"] });
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ProgressDisplay, decorators: [{
148
+ type: Component,
149
+ args: [{
150
+ selector: 'app-sprprogressdisplay',
151
+ template: `
152
+ <p>{{progressMsg}}</p>
153
+ `,
154
+ styles: [`:host {
155
+ flex: 1;
156
+ /* align-self: flex-start; */
157
+ /*display: inline; */
158
+ width: 100%;
159
+ text-align: left;
160
+ }`]
161
+ }]
162
+ }] });
163
+ export class TransportActions {
164
+ constructor() {
165
+ this.startAction = new Action('Start');
166
+ this.stopAction = new Action('Stop');
167
+ this.nextAction = new Action('Next');
168
+ this.pauseAction = new Action('Pause');
169
+ this.fwdNextAction = new Action('Next recording');
170
+ this.fwdAction = new Action('Forward');
171
+ this.bwdAction = new Action('Backward');
172
+ }
173
+ }
174
+ export class TransportPanel {
175
+ constructor() {
176
+ this.navigationEnabled = true;
177
+ this.pausingEnabled = true;
178
+ }
179
+ startDisabled() {
180
+ return !this.actions || this.readonly || this.actions.startAction.disabled;
181
+ }
182
+ stopDisabled() {
183
+ return !this.actions || this.actions.stopAction.disabled;
184
+ }
185
+ nextDisabled() {
186
+ return !this.actions || this.actions.nextAction.disabled || !this.navigationEnabled;
187
+ }
188
+ pauseDisabled() {
189
+ return !this.actions || this.actions.pauseAction.disabled || !this.pausingEnabled;
190
+ }
191
+ fwdDisabled() {
192
+ return !this.actions || this.actions.fwdAction.disabled || !this.navigationEnabled;
193
+ }
194
+ fwdNextDisabled() {
195
+ return !this.actions || this.actions.fwdNextAction.disabled || !this.navigationEnabled;
196
+ }
197
+ bwdDisabled() {
198
+ return !this.actions || this.actions.bwdAction.disabled || !this.navigationEnabled;
199
+ }
200
+ startStopNextName() {
201
+ if (!this.nextDisabled()) {
202
+ this.startStopNextButtonName = "Next";
203
+ }
204
+ else if (!this.startDisabled()) {
205
+ this.startStopNextButtonName = "Start";
206
+ }
207
+ else if (!this.stopDisabled()) {
208
+ this.startStopNextButtonName = "Stop";
209
+ }
210
+ return this.startStopNextButtonName;
211
+ }
212
+ startStopNextIconName() {
213
+ if (!this.startDisabled()) {
214
+ this.startStopNextButtonIconName = "fiber_manual_record";
215
+ }
216
+ else if (!this.stopDisabled()) {
217
+ this.startStopNextButtonIconName = "stop";
218
+ }
219
+ else if (!this.nextDisabled()) {
220
+ this.startStopNextButtonIconName = "stop";
221
+ }
222
+ return this.startStopNextButtonIconName;
223
+ }
224
+ startStopNextIconColor() {
225
+ if (!this.startDisabled()) {
226
+ return "red";
227
+ }
228
+ else if (!this.stopDisabled() || !this.nextDisabled()) {
229
+ return "yellow";
230
+ }
231
+ else {
232
+ return "grey";
233
+ }
234
+ }
235
+ startStopNextPerform() {
236
+ if (!this.startDisabled()) {
237
+ this.actions.startAction.perform();
238
+ }
239
+ else if (!this.stopDisabled()) {
240
+ this.actions.stopAction.perform();
241
+ }
242
+ else if (!this.nextDisabled()) {
243
+ this.actions.nextAction.perform();
244
+ }
245
+ }
246
+ }
247
+ TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TransportPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
248
+ TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, ngImport: i0, template: `
249
+ <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
250
+ mat-raised-button>
251
+ <mat-icon>chevron_left</mat-icon>
252
+ </button>
253
+ <button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled()" mat-raised-button>
254
+ <mat-icon [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf="!nextDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon>
255
+ <span fxShow.xs="false">{{startStopNextName()}}</span>
256
+ </button>
257
+ <button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button>
258
+ <mat-icon>pause</mat-icon>
259
+ <span fxShow.xs="false">Pause</span>
260
+ </button>
261
+ <button id="fwdNextBtn" *ngIf="navigationEnabled" fxHide.xs (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
262
+ <mat-icon>redo</mat-icon>
263
+ </button>
264
+ <button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button>
265
+ <mat-icon>chevron_right</mat-icon>
266
+ </button>
267
+
268
+ `, isInline: true, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n"], components: [{ type: i5.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"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
269
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TransportPanel, decorators: [{
270
+ type: Component,
271
+ args: [{
272
+ selector: 'app-sprtransport',
273
+ template: `
274
+ <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
275
+ mat-raised-button>
276
+ <mat-icon>chevron_left</mat-icon>
277
+ </button>
278
+ <button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled()" mat-raised-button>
279
+ <mat-icon [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf="!nextDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon>
280
+ <span fxShow.xs="false">{{startStopNextName()}}</span>
281
+ </button>
282
+ <button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button>
283
+ <mat-icon>pause</mat-icon>
284
+ <span fxShow.xs="false">Pause</span>
285
+ </button>
286
+ <button id="fwdNextBtn" *ngIf="navigationEnabled" fxHide.xs (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
287
+ <mat-icon>redo</mat-icon>
288
+ </button>
289
+ <button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button>
290
+ <mat-icon>chevron_right</mat-icon>
291
+ </button>
292
+
293
+ `,
294
+ styles: [`:host {
295
+ flex: 20;
296
+ align-self: center;
297
+ width: 100%;
298
+ text-align: center;
299
+ align-content: center;
300
+ margin: 0;
301
+
302
+ }`, `
303
+ div {
304
+ display: inline;
305
+ flex: 0;
306
+ }`
307
+ ]
308
+ }]
309
+ }], propDecorators: { readonly: [{
310
+ type: Input
311
+ }], actions: [{
312
+ type: Input
313
+ }], navigationEnabled: [{
314
+ type: Input
315
+ }], pausingEnabled: [{
316
+ type: Input
317
+ }] } });
318
+ export class ReadyStateIndicator {
319
+ constructor() {
320
+ this._ready = true;
321
+ this.hourGlassIconName = 'hourglass_empty';
322
+ this.readyStateToolTip = '';
323
+ }
324
+ set ready(ready) {
325
+ this._ready = ready;
326
+ this.hourGlassIconName = this._ready ? 'hourglass_empty' : 'hourglass_full';
327
+ this.readyStateToolTip = this._ready ? 'Audio processing and upload done. You can leave the page without data loss.' : 'Please wait until audio processing and upload have finished. Please do not leave the page.';
328
+ }
329
+ get ready() {
330
+ return this._ready;
331
+ }
332
+ }
333
+ ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
334
+ ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
335
+ <mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
336
+ `, isInline: true, components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ReadyStateIndicator, decorators: [{
338
+ type: Component,
339
+ args: [{
340
+ selector: 'app-readystateindicator',
341
+ template: `
342
+ <mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
343
+ `,
344
+ styles: []
345
+ }]
346
+ }], ctorParameters: function () { return []; }, propDecorators: { ready: [{
347
+ type: Input
348
+ }] } });
349
+ export class ControlPanel {
350
+ constructor(dialog) {
351
+ this.dialog = dialog;
352
+ this.processing = false;
353
+ this.navigationEnabled = true;
354
+ this._ready = true;
355
+ }
356
+ set ready(ready) {
357
+ this._ready = ready;
358
+ }
359
+ get ready() {
360
+ return this._ready;
361
+ }
362
+ }
363
+ ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ControlPanel, deps: [{ token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
364
+ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: ControlPanel, selector: "app-sprcontrolpanel", inputs: { readonly: "readonly", transportActions: "transportActions", processing: "processing", statusMsg: "statusMsg", statusAlertType: "statusAlertType", statusWaiting: "statusWaiting", uploadStatus: "uploadStatus", uploadProgress: "uploadProgress", currentRecording: "currentRecording", enableUploadRecordings: "enableUploadRecordings", navigationEnabled: "navigationEnabled", ready: "ready" }, viewQueries: [{ propertyName: "statusDisplay", first: true, predicate: StatusDisplay, descendants: true, static: true }, { propertyName: "transportPanel", first: true, predicate: TransportPanel, descendants: true, static: true }], ngImport: i0, template: `
365
+ <div fxHide.xs fxLayout="row" >
366
+ <app-sprstatusdisplay fxFlex="0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
367
+ class="hidden-xs"></app-sprstatusdisplay>
368
+ <app-sprtransport fxFlex="10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
369
+ <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
370
+ [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
371
+ <app-readystateindicator [ready]="_ready"></app-readystateindicator>
372
+ </div>
373
+ <div fxShow.xs fxHide fxLayout="column">
374
+ <div fxLayout="row" fxFlexFill>
375
+ <app-sprstatusdisplay fxFlex="10 0 0" fxFlexAlign="left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
376
+ class="hidden-xs"></app-sprstatusdisplay>
377
+ <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
378
+ [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
379
+ <app-readystateindicator [ready]="_ready"></app-readystateindicator>
380
+ </div>
381
+ <app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
382
+
383
+ </div>
384
+ `, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:-webkit-min-content;min-height:min-content}\n"], components: [{ type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }], directives: [{ type: i6.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i8.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: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { type: i8.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }] });
385
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ControlPanel, decorators: [{
386
+ type: Component,
387
+ args: [{
388
+ selector: 'app-sprcontrolpanel',
389
+ template: `
390
+ <div fxHide.xs fxLayout="row" >
391
+ <app-sprstatusdisplay fxFlex="0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
392
+ class="hidden-xs"></app-sprstatusdisplay>
393
+ <app-sprtransport fxFlex="10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
394
+ <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
395
+ [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
396
+ <app-readystateindicator [ready]="_ready"></app-readystateindicator>
397
+ </div>
398
+ <div fxShow.xs fxHide fxLayout="column">
399
+ <div fxLayout="row" fxFlexFill>
400
+ <app-sprstatusdisplay fxFlex="10 0 0" fxFlexAlign="left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
401
+ class="hidden-xs"></app-sprstatusdisplay>
402
+ <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
403
+ [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
404
+ <app-readystateindicator [ready]="_ready"></app-readystateindicator>
405
+ </div>
406
+ <app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
407
+
408
+ </div>
409
+ `,
410
+ styles: [`div {
411
+ align-content: center;
412
+ align-items: center;
413
+ margin: 0;
414
+ padding: 20px;
415
+ min-height: min-content; /* important */
416
+ }`]
417
+ }]
418
+ }], ctorParameters: function () { return [{ type: i7.MatDialog }]; }, propDecorators: { statusDisplay: [{
419
+ type: ViewChild,
420
+ args: [StatusDisplay, { static: true }]
421
+ }], transportPanel: [{
422
+ type: ViewChild,
423
+ args: [TransportPanel, { static: true }]
424
+ }], readonly: [{
425
+ type: Input
426
+ }], transportActions: [{
427
+ type: Input
428
+ }], processing: [{
429
+ type: Input
430
+ }], statusMsg: [{
431
+ type: Input
432
+ }], statusAlertType: [{
433
+ type: Input
434
+ }], statusWaiting: [{
435
+ type: Input
436
+ }], uploadStatus: [{
437
+ type: Input
438
+ }], uploadProgress: [{
439
+ type: Input
440
+ }], currentRecording: [{
441
+ type: Input
442
+ }], enableUploadRecordings: [{
443
+ type: Input
444
+ }], navigationEnabled: [{
445
+ type: Input
446
+ }], ready: [{
447
+ type: Input
448
+ }] } });
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vY29udHJvbHBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQzVCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBdUN2QixNQUFNLE9BQU8sYUFBYTtJQWpDMUI7UUFrQ1csb0JBQWUsR0FBRyxNQUFNLENBQUM7UUFDekIsY0FBUyxHQUFHLGVBQWUsQ0FBQztRQUM1QixrQkFBYSxHQUFFLEtBQUssQ0FBQztLQUMvQjs7MEdBSlksYUFBYTs4RkFBYixhQUFhLG9LQTdCZDs7Ozs7R0FLVDsyRkF3QlUsYUFBYTtrQkFqQ3pCLFNBQVM7bUJBQUM7b0JBRVQsUUFBUSxFQUFFLHNCQUFzQjtvQkFFaEMsUUFBUSxFQUFFOzs7OztHQUtUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7O0lBSVAsRUFBRTs7Ozs7O0dBTUgsRUFBRTs7Ozs7R0FLRixFQUFFOzs7O0dBSUYsQ0FBQztpQkFFSDs4QkFHVSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSzs7QUFrQlIsTUFBTSxPQUFPLFlBQVk7SUFkekI7UUFlVSxvQkFBZSxHQUFDLEtBQUssQ0FBQztRQUM5QixnQkFBVyxHQUF1QixhQUFhLENBQUM7UUFFaEQsV0FBTSxHQUFHLEdBQUcsQ0FBQTtRQUNaLGlCQUFZLEdBQWEsSUFBSSxDQUFBO1FBQzdCLGdCQUFXLEdBQVEsRUFBRSxDQUFBO0tBNEN0QjtJQTFDUyxjQUFjO1FBRXBCLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFBO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUMsMEJBQTBCLENBQUE7WUFDNUMsTUFBTSxHQUFDLG1CQUFtQixDQUFBO1NBQzNCO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQTtZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsR0FBRyxDQUFBO1lBQ2pDLElBQUcsSUFBSSxDQUFDLE1BQU0sS0FBRyxHQUFHLEVBQUM7Z0JBQ25CLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQTthQUMzQjtpQkFBSztnQkFDSixNQUFNLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTthQUNqRDtTQUNGO1FBQ0QsSUFBRyxJQUFJLENBQUMsTUFBTSxLQUFHLE1BQU0sRUFBQztZQUN0QixNQUFNLEdBQUMsK0RBQStELEdBQUMsTUFBTSxDQUFBO1NBQzlFO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBQyxNQUFNLENBQUE7SUFDekIsQ0FBQztJQUVELElBQ0ksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFBQSxDQUFDO0lBRUYsSUFBYSxjQUFjLENBQUMsY0FBc0I7UUFDaEQsSUFBSSxDQUFDLGVBQWUsR0FBQyxjQUFjLENBQUE7UUFDbkMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxNQUFhO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUMsTUFBTSxDQUFBO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3JCLENBQUM7O3lHQWhEVSxZQUFZOzZGQUFaLFlBQVksd0lBWmI7O0dBRVQ7MkZBVVUsWUFBWTtrQkFkeEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUU7O0dBRVQ7b0JBQ0QsTUFBTSxFQUFFLENBQUM7Ozs7O0lBS1AsRUFBQzs7SUFFRCxDQUFDO2lCQUNKOzhCQWdDSyxLQUFLO3NCQURSLEtBQUs7Z0JBTU8sY0FBYztzQkFBMUIsS0FBSztnQkFLTyxNQUFNO3NCQUFsQixLQUFLOztBQXlCUixNQUFNLE9BQU8sZUFBZTtJQWI1QjtRQWNFLGdCQUFXLEdBQUcsWUFBWSxDQUFDO0tBQzVCOzs0R0FGWSxlQUFlO2dHQUFmLGVBQWUsOERBWGhCOztHQUVUOzJGQVNVLGVBQWU7a0JBYjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsUUFBUSxFQUFFOztHQUVUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUNKOztBQVFELE1BQU0sT0FBTyxnQkFBZ0I7SUFTM0I7UUFDRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUMsQ0FBQztDQUNGO0FBMkNELE1BQU0sT0FBTyxjQUFjO0lBekMzQjtRQTZDVyxzQkFBaUIsR0FBQyxJQUFJLENBQUM7UUFDdkIsbUJBQWMsR0FBQyxJQUFJLENBQUM7S0F5RTlCO0lBcEVDLGFBQWE7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQTtJQUM1RSxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQTtJQUMxRCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUN0RixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDcEYsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDckYsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDekYsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDckYsQ0FBQztJQUVDLGlCQUFpQjtRQUNiLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUM7WUFDcEIsSUFBSSxDQUFDLHVCQUF1QixHQUFFLE1BQU0sQ0FBQTtTQUN2QzthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUM7WUFDM0IsSUFBSSxDQUFDLHVCQUF1QixHQUFDLE9BQU8sQ0FBQTtTQUN2QzthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQTtTQUN4QztRQUNELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3hDLENBQUM7SUFDSCxxQkFBcUI7UUFDakIsSUFBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBQztZQUN0QixJQUFJLENBQUMsMkJBQTJCLEdBQUMscUJBQXFCLENBQUE7U0FDeEQ7YUFBSyxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDO1lBQzFCLElBQUksQ0FBQywyQkFBMkIsR0FBQyxNQUFNLENBQUE7U0FDMUM7YUFBSyxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDO1lBQzFCLElBQUksQ0FBQywyQkFBMkIsR0FBQyxNQUFNLENBQUE7U0FDMUM7UUFDRCxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQTtJQUMzQyxDQUFDO0lBQ0Msc0JBQXNCO1FBQ2xCLElBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUM7WUFDckIsT0FBTyxLQUFLLENBQUE7U0FDZjthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUM7WUFDbEQsT0FBTyxRQUFRLENBQUE7U0FDbEI7YUFBSTtZQUNELE9BQU8sTUFBTSxDQUFDO1NBQ2pCO0lBQ0wsQ0FBQztJQUVILG9CQUFvQjtRQUNsQixJQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3BDO2FBQUssSUFBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBQztZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNuQzthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbkM7SUFDSCxDQUFDOzsyR0E1RVUsY0FBYzsrRkFBZCxjQUFjLHdMQXJDZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlQ7MkZBaUJVLGNBQWM7a0JBekMxQixTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxrQkFBa0I7b0JBRTVCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlQ7b0JBQ0QsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7O0lBUVAsRUFBRTs7OztNQUlBO3FCQUNIO2lCQUVGOzhCQUdVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLOztBQW9GUixNQUFNLE9BQU8sbUJBQW1CO0lBSzlCO1FBSkEsV0FBTSxHQUFDLElBQUksQ0FBQTtRQUNYLHNCQUFpQixHQUFDLGlCQUFpQixDQUFBO1FBQ25DLHNCQUFpQixHQUFRLEVBQUUsQ0FBQTtJQUVaLENBQUM7SUFFaEIsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFDLEtBQUssQ0FBQTtRQUNqQixJQUFJLENBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUEsaUJBQWlCLENBQUEsQ0FBQyxDQUFBLGdCQUFnQixDQUFBO1FBQ3JFLElBQUksQ0FBQyxpQkFBaUIsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQSw2RUFBNkUsQ0FBQSxDQUFDLENBQUEsNEZBQTRGLENBQUE7SUFDL00sQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDOztnSEFmVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwyRkFMcEI7O0dBRVQ7MkZBR1UsbUJBQW1CO2tCQVQvQixTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSx5QkFBeUI7b0JBRW5DLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxNQUFNLEVBQUUsRUFBRTtpQkFDWDswRUFRYyxLQUFLO3NCQUFqQixLQUFLOztBQTZDUixNQUFNLE9BQU8sWUFBWTtJQWtCdkIsWUFBbUIsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQVozQixlQUFVLEdBQUMsS0FBSyxDQUFBO1FBUWhCLHNCQUFpQixHQUFDLElBQUksQ0FBQztRQUVoQyxXQUFNLEdBQUMsSUFBSSxDQUFBO0lBSVgsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDOzt5R0E1QlUsWUFBWTs2RkFBWixZQUFZLHdmQUNaLGFBQWEsK0ZBQ2IsY0FBYyw4REEvQmY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JULCtLQWhTVSxhQUFhLHlHQTRKYixjQUFjLGtIQXZJZCxZQUFZLHlGQWdPWixtQkFBbUI7MkZBb0RuQixZQUFZO2tCQWpDeEIsU0FBUzttQkFBQztvQkFFVCxRQUFRLEVBQUUscUJBQXFCO29CQUUvQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUNKO2dHQUU2QyxhQUFhO3NCQUF4RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csY0FBYztzQkFBMUQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVsQyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFRTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3Rpb259IGZyb20gJy4uLy4uL2FjdGlvbi9hY3Rpb24nXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIElucHV0XHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7IE1hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1Byb2dyZXNzU3Bpbm5lck1vZGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnN0YXR1c2Rpc3BsYXknLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHAgbWF0VG9vbHRpcD1cIlN0YXR1c1wiPlxyXG4gICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgKm5nSWY9XCJzdGF0dXNXYWl0aW5nXCIgY29sb3I9XCJibGFja1wiICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFtkaWFtZXRlcl09XCIzMFwiIFtzdHJva2VXaWR0aF09XCI1XCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj48bWF0LWljb24gKm5nSWY9XCJzdGF0dXNBbGVydFR5cGU9PT0nZXJyb3InXCIgc3R5bGU9XCJjb2xvcjpyZWRcIj5yZXBvcnRfcHJvYmxlbTwvbWF0LWljb24+XHJcbiAgICAgIHt7c3RhdHVzTXNnfX1cclxuICAgIDwvcD5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmU7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgZm9udC1zaXplOiBzbWFsbGVyO1xyXG4gIH1gLCBgXHJcbiAgICBwIHtcclxuICAgICAgcGFkZGluZzogNHB4O1xyXG4gICAgICB3aGl0ZS1zcGFjZTpub3dyYXA7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIH1cclxuICBgLCBgXHJcbiAgICBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciB7XHJcbiAgICAgIGNvbG9yOiBibGFjaztcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIHNwYW4ge1xyXG4gICAgICBjb2xvcjogcmVkO1xyXG4gICAgfVxyXG4gIGBdXHJcblxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXR1c0Rpc3BsYXkge1xyXG4gIEBJbnB1dCgpIHN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICBASW5wdXQoKSBzdGF0dXNNc2cgPSAnSW5pdGlhbGl6ZS4uLic7XHJcbiAgQElucHV0KCkgc3RhdHVzV2FpdGluZyA9ZmFsc2U7XHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC11cGxvYWRzdGF0dXMnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW21vZGVdPVwic3Bpbm5lck1vZGVcIiBbY29sb3JdPVwic3RhdHVzXCIgW2RpYW1ldGVyXT1cIjMwXCIgW3N0cm9rZVdpZHRoXT1cIjVcIiBbdmFsdWVdPVwiX3ZhbHVlXCIgW21hdFRvb2x0aXBdPVwidG9vbFRpcFRleHRcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDE7XHJcbiAgLyogYWxpZ24tc2VsZjogZmxleC1zdGFydDsgKi9cclxuICAgIC8qZGlzcGxheTogaW5saW5lOyAqL1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICB9YCxgbWF0LXByb2dyZXNzLXNwaW5uZXJ7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFVwbG9hZFN0YXR1cyB7XHJcbiAgcHJpdmF0ZSBfYXdhaXROZXdVcGxvYWQ9ZmFsc2U7XHJcbiAgc3Bpbm5lck1vZGU6UHJvZ3Jlc3NTcGlubmVyTW9kZSA9ICdkZXRlcm1pbmF0ZSc7XHJcbiAgX3N0YXR1cyE6c3RyaW5nXHJcbiAgX3ZhbHVlID0gMTAwXHJcbiAgZGlzcGxheVZhbHVlOnN0cmluZ3xudWxsPW51bGxcclxuICB0b29sVGlwVGV4dDpzdHJpbmc9JydcclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlU3Bpbm5lcigpe1xyXG5cclxuICAgIGxldCB1cGxNc2c7XHJcbiAgICBpZiAodGhpcy5fYXdhaXROZXdVcGxvYWQgfHwgdGhpcy5fdmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy5zcGlubmVyTW9kZSA9ICdpbmRldGVybWluYXRlJ1xyXG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZT0nJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7J1xyXG4gICAgICB1cGxNc2c9J1ByZXBhcmluZyB1cGxvYWQuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zcGlubmVyTW9kZSA9ICdkZXRlcm1pbmF0ZSdcclxuICAgICAgdGhpcy5kaXNwbGF5VmFsdWU9dGhpcy5fdmFsdWUrJyUnXHJcbiAgICAgIGlmKHRoaXMuX3ZhbHVlPT09MTAwKXtcclxuICAgICAgICB1cGxNc2cgPSAnVXBsb2FkIGNvbXBsZXRlJ1xyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgdXBsTXNnID0gJ1VwbG9hZCBwcm9ncmVzczogJyArIHRoaXMuZGlzcGxheVZhbHVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHRoaXMuc3RhdHVzPT09J3dhcm4nKXtcclxuICAgICAgdXBsTXNnPSdVcGxvYWQgZXJyb3Igb2NjdXJyZWQuIFBsZWFzZSBjaGVjayB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbi4gJyt1cGxNc2dcclxuICAgIH1cclxuICAgIHRoaXMudG9vbFRpcFRleHQ9dXBsTXNnXHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlU3Bpbm5lcigpXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgc2V0IGF3YWl0TmV3VXBsb2FkKGF3YWl0TmV3VXBsb2FkOmJvb2xlYW4pe1xyXG4gICAgdGhpcy5fYXdhaXROZXdVcGxvYWQ9YXdhaXROZXdVcGxvYWRcclxuICAgIHRoaXMuX3VwZGF0ZVNwaW5uZXIoKVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHN0YXR1cyhzdGF0dXM6c3RyaW5nKXtcclxuICAgIHRoaXMuX3N0YXR1cz1zdGF0dXNcclxuICAgIHRoaXMuX3VwZGF0ZVNwaW5uZXIoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXR1cygpOnN0cmluZ3tcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXNcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc3BycHJvZ3Jlc3NkaXNwbGF5JyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHA+e3twcm9ncmVzc01zZ319PC9wPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDE7XHJcbiAgLyogYWxpZ24tc2VsZjogZmxleC1zdGFydDsgKi9cclxuICAgIC8qZGlzcGxheTogaW5saW5lOyAqL1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgfWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0Rpc3BsYXkge1xyXG4gIHByb2dyZXNzTXNnID0gJ1tpdGVtY29kZV0nO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVHJhbnNwb3J0QWN0aW9ucyB7XHJcbiAgc3RhcnRBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBzdG9wQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgbmV4dEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIGZ3ZE5leHRBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBwYXVzZUFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIGZ3ZEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIGJ3ZEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc3RhcnRBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdGFydCcpO1xyXG4gICAgdGhpcy5zdG9wQWN0aW9uID0gbmV3IEFjdGlvbignU3RvcCcpO1xyXG4gICAgdGhpcy5uZXh0QWN0aW9uID0gbmV3IEFjdGlvbignTmV4dCcpO1xyXG4gICAgdGhpcy5wYXVzZUFjdGlvbiA9IG5ldyBBY3Rpb24oJ1BhdXNlJyk7XHJcbiAgICB0aGlzLmZ3ZE5leHRBY3Rpb24gPSBuZXcgQWN0aW9uKCdOZXh0IHJlY29yZGluZycpO1xyXG4gICAgdGhpcy5md2RBY3Rpb24gPSBuZXcgQWN0aW9uKCdGb3J3YXJkJyk7XHJcbiAgICB0aGlzLmJ3ZEFjdGlvbiA9IG5ldyBBY3Rpb24oJ0JhY2t3YXJkJyk7XHJcblxyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnRyYW5zcG9ydCcsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YnV0dG9uIGlkPVwiYndkQnRuXCIgKm5nSWY9XCJuYXZpZ2F0aW9uRW5hYmxlZFwiICAoY2xpY2spPVwiYWN0aW9ucy5id2RBY3Rpb24ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cImJ3ZERpc2FibGVkKClcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgPG1hdC1pY29uPmNoZXZyb25fbGVmdDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cInN0YXJ0U3RvcE5leHRQZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwic3RhcnREaXNhYmxlZCgpICYmIHN0b3BEaXNhYmxlZCgpICYmIG5leHREaXNhYmxlZCgpXCIgIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cInN0YXJ0U3RvcE5leHRJY29uQ29sb3IoKVwiPnt7c3RhcnRTdG9wTmV4dEljb25OYW1lKCl9fTwvbWF0LWljb24+PG1hdC1pY29uICpuZ0lmPVwiIW5leHREaXNhYmxlZCgpXCIgW3N0eWxlLmNvbG9yXT1cIm5leHREaXNhYmxlZCgpID8gJ2dyZXknIDogJ2JsYWNrJ1wiPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBmeFNob3cueHM9XCJmYWxzZVwiPnt7c3RhcnRTdG9wTmV4dE5hbWUoKX19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwicGF1c2luZ0VuYWJsZWRcIiAoY2xpY2spPVwiYWN0aW9ucy5wYXVzZUFjdGlvbi5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwicGF1c2VEaXNhYmxlZCgpXCIgbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgIDxtYXQtaWNvbj5wYXVzZTwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIGZ4U2hvdy54cz1cImZhbHNlXCI+UGF1c2U8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJmd2ROZXh0QnRuXCIgKm5nSWY9XCJuYXZpZ2F0aW9uRW5hYmxlZFwiIGZ4SGlkZS54cyAoY2xpY2spPVwiYWN0aW9ucy5md2ROZXh0QWN0aW9uLnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJmd2ROZXh0RGlzYWJsZWQoKVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICA8bWF0LWljb24+cmVkbzwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJmd2RCdG5cIiAqbmdJZj1cIm5hdmlnYXRpb25FbmFibGVkXCIgIChjbGljayk9XCJhY3Rpb25zLmZ3ZEFjdGlvbi5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwiZndkRGlzYWJsZWQoKVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICA8bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgZmxleDogMjA7XHJcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIG1hcmdpbjogMDtcclxuXHJcbiAgfWAsIGBcclxuICAgIGRpdiB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZTtcclxuICAgICAgZmxleDogMDtcclxuICAgIH1gXHJcbiAgXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYW5zcG9ydFBhbmVsIHtcclxuXHJcbiAgQElucHV0KCkgcmVhZG9ubHkhOmJvb2xlYW47XHJcbiAgQElucHV0KCkgYWN0aW9ucyE6IFRyYW5zcG9ydEFjdGlvbnM7XHJcbiAgQElucHV0KCkgbmF2aWdhdGlvbkVuYWJsZWQ9dHJ1ZTtcclxuICBASW5wdXQoKSBwYXVzaW5nRW5hYmxlZD10cnVlO1xyXG5cclxuICBzdGFydFN0b3BOZXh0QnV0dG9uTmFtZSE6c3RyaW5nO1xyXG4gIHN0YXJ0U3RvcE5leHRCdXR0b25JY29uTmFtZSE6c3RyaW5nO1xyXG5cclxuICBzdGFydERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5yZWFkb25seSB8fCB0aGlzLmFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWRcclxuICB9XHJcblxyXG4gIHN0b3BEaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucy5zdG9wQWN0aW9uLmRpc2FibGVkXHJcbiAgfVxyXG5cclxuICBuZXh0RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIHBhdXNlRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMucGF1c2luZ0VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBmd2REaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMubmF2aWdhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBmd2ROZXh0RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuZndkTmV4dEFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIGJ3ZERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gICAgc3RhcnRTdG9wTmV4dE5hbWUoKTpzdHJpbmd7XHJcbiAgICAgICAgaWYoIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25OYW1lPSBcIk5leHRcIlxyXG4gICAgICAgIH1lbHNlIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWU9XCJTdGFydFwiXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uTmFtZSA9IFwiU3RvcFwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25OYW1lO1xyXG4gICAgfVxyXG4gIHN0YXJ0U3RvcE5leHRJY29uTmFtZSgpOnN0cmluZ3tcclxuICAgICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJmaWJlcl9tYW51YWxfcmVjb3JkXCJcclxuICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJzdG9wXCJcclxuICAgICAgfWVsc2UgaWYoIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJzdG9wXCJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWVcclxuICB9XHJcbiAgICBzdGFydFN0b3BOZXh0SWNvbkNvbG9yKCk6c3RyaW5ne1xyXG4gICAgICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJlZFwiXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkgfHwgIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgICByZXR1cm4gXCJ5ZWxsb3dcIlxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gXCJncmV5XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICBzdGFydFN0b3BOZXh0UGVyZm9ybSgpe1xyXG4gICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5hY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5hY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfWVsc2UgaWYoIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICB0aGlzLmFjdGlvbnMubmV4dEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3InLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCJyZWFkeVN0YXRlVG9vbFRpcFwiPnt7aG91ckdsYXNzSWNvbk5hbWV9fTwvbWF0LWljb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWFkeVN0YXRlSW5kaWNhdG9yIHtcclxuICBfcmVhZHk9dHJ1ZVxyXG4gIGhvdXJHbGFzc0ljb25OYW1lPSdob3VyZ2xhc3NfZW1wdHknXHJcbiAgcmVhZHlTdGF0ZVRvb2xUaXA6c3RyaW5nPScnXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgQElucHV0KCkgc2V0IHJlYWR5KHJlYWR5OmJvb2xlYW4pe1xyXG4gICAgdGhpcy5fcmVhZHk9cmVhZHlcclxuICAgIHRoaXMuaG91ckdsYXNzSWNvbk5hbWU9dGhpcy5fcmVhZHk/J2hvdXJnbGFzc19lbXB0eSc6J2hvdXJnbGFzc19mdWxsJ1xyXG4gICAgdGhpcy5yZWFkeVN0YXRlVG9vbFRpcD10aGlzLl9yZWFkeT8nQXVkaW8gcHJvY2Vzc2luZyBhbmQgdXBsb2FkIGRvbmUuIFlvdSBjYW4gbGVhdmUgdGhlIHBhZ2Ugd2l0aG91dCBkYXRhIGxvc3MuJzonUGxlYXNlIHdhaXQgdW50aWwgYXVkaW8gcHJvY2Vzc2luZyBhbmQgdXBsb2FkIGhhdmUgZmluaXNoZWQuIFBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UuJ1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlYWR5KCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLl9yZWFkeVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJjb250cm9scGFuZWwnLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBmeEhpZGUueHMgIGZ4TGF5b3V0PVwicm93XCIgPlxyXG4gICAgIDxhcHAtc3Byc3RhdHVzZGlzcGxheSBmeEZsZXg9XCIwIDAgMFwiIFtzdGF0dXNNc2ddPVwic3RhdHVzTXNnXCIgW3N0YXR1c0FsZXJ0VHlwZV09XCJzdGF0dXNBbGVydFR5cGVcIiBbc3RhdHVzV2FpdGluZ109XCJzdGF0dXNXYWl0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlbi14c1wiPjwvYXBwLXNwcnN0YXR1c2Rpc3BsYXk+XHJcbiAgICAgIDxhcHAtc3BydHJhbnNwb3J0IGZ4RmxleD1cIjEwIDAgMFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFthY3Rpb25zXT1cInRyYW5zcG9ydEFjdGlvbnNcIiBbbmF2aWdhdGlvbkVuYWJsZWRdPVwibmF2aWdhdGlvbkVuYWJsZWRcIj48L2FwcC1zcHJ0cmFuc3BvcnQ+XHJcbiAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIGZ4RmxleD1cIjAgMCAwXCIgKm5nSWY9XCJlbmFibGVVcGxvYWRSZWNvcmRpbmdzXCIgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwidXBsb2FkU3RhdHVzXCIgW2F3YWl0TmV3VXBsb2FkXT1cInByb2Nlc3NpbmdcIj48L2FwcC11cGxvYWRzdGF0dXM+XHJcbiAgICAgIDxhcHAtcmVhZHlzdGF0ZWluZGljYXRvciBbcmVhZHldPVwiX3JlYWR5XCI+PC9hcHAtcmVhZHlzdGF0ZWluZGljYXRvcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBmeFNob3cueHMgZnhIaWRlIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeEZsZXhGaWxsPlxyXG4gICAgICAgPGFwcC1zcHJzdGF0dXNkaXNwbGF5IGZ4RmxleD1cIjEwIDAgMFwiIGZ4RmxleEFsaWduPVwibGVmdFwiIFtzdGF0dXNNc2ddPVwic3RhdHVzTXNnXCIgW3N0YXR1c0FsZXJ0VHlwZV09XCJzdGF0dXNBbGVydFR5cGVcIiBbc3RhdHVzV2FpdGluZ109XCJzdGF0dXNXYWl0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIGZ4RmxleD1cIjAgMCAwXCIgKm5nSWY9XCJlbmFibGVVcGxvYWRSZWNvcmRpbmdzXCIgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgW3JlYWR5XT1cIl9yZWFkeVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YXBwLXNwcnRyYW5zcG9ydCBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbYWN0aW9uc109XCJ0cmFuc3BvcnRBY3Rpb25zXCIgW25hdmlnYXRpb25FbmFibGVkXT1cIm5hdmlnYXRpb25FbmFibGVkXCI+PC9hcHAtc3BydHJhbnNwb3J0PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYGRpdiB7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIG1pbi1oZWlnaHQ6IG1pbi1jb250ZW50OyAvKiBpbXBvcnRhbnQgKi9cclxuICB9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRyb2xQYW5lbCB7XHJcbiAgQFZpZXdDaGlsZChTdGF0dXNEaXNwbGF5LCB7IHN0YXRpYzogdHJ1ZSB9KSBzdGF0dXNEaXNwbGF5ITogU3RhdHVzRGlzcGxheTtcclxuICBAVmlld0NoaWxkKFRyYW5zcG9ydFBhbmVsLCB7IHN0YXRpYzogdHJ1ZSB9KSB0cmFuc3BvcnRQYW5lbCE6IFRyYW5zcG9ydFBhbmVsO1xyXG5cclxuICBASW5wdXQoKSByZWFkb25seSE6Ym9vbGVhblxyXG4gIEBJbnB1dCgpIHRyYW5zcG9ydEFjdGlvbnMhOiBUcmFuc3BvcnRBY3Rpb25zXHJcbiAgQElucHV0KCkgcHJvY2Vzc2luZz1mYWxzZVxyXG4gIEBJbnB1dCgpIHN0YXR1c01zZyE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGF0dXNBbGVydFR5cGUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhdHVzV2FpdGluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdXBsb2FkU3RhdHVzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHVwbG9hZFByb2dyZXNzITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRSZWNvcmRpbmc6IEF1ZGlvQnVmZmVyfCBudWxsfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbmF2aWdhdGlvbkVuYWJsZWQ9dHJ1ZTtcclxuXHJcbiAgX3JlYWR5PXRydWVcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZzogTWF0RGlhbG9nKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHJlYWR5KHJlYWR5OmJvb2xlYW4pe1xyXG4gICAgdGhpcy5fcmVhZHk9cmVhZHlcclxuICB9XHJcblxyXG4gIGdldCByZWFkeSgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5fcmVhZHlcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuIl19
@@ -15,4 +15,4 @@ export class Item {
15
15
  return this._recording;
16
16
  }
17
17
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2l0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLElBQUk7SUFHYixZQUFvQixlQUF1QixFQUFVLFNBQWtCLEVBQVMsVUFBa0I7UUFBOUUsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUM5RixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlY29yZGluZ0ZpbGV9IGZyb20gXCIuLi9yZWNvcmRpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIHtcclxuICAgIHJlY3M6IEFycmF5PFJlY29yZGluZ0ZpbGU+IHwgbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9wcm9tcHRBc1N0cmluZzogc3RyaW5nLCBwcml2YXRlIF90cmFpbmluZzogYm9vbGVhbixwcml2YXRlIF9yZWNvcmRpbmc6Ym9vbGVhbikge1xyXG4gICAgICAgIHRoaXMucmVjcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb21wdEFzU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHRBc1N0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdHJhaW5pbmcoKTpib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmFpbmluZztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVjb3JkaW5nKCk6Ym9vbGVhbntcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVjb3JkaW5nO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2l0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLElBQUk7SUFHYixZQUFvQixlQUF1QixFQUFVLFNBQWtCLEVBQVMsVUFBa0I7UUFBOUUsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUM5RixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NwclJlY29yZGluZ0ZpbGV9IGZyb20gXCIuLi9yZWNvcmRpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIHtcclxuICAgIHJlY3M6IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+IHwgbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9wcm9tcHRBc1N0cmluZzogc3RyaW5nLCBwcml2YXRlIF90cmFpbmluZzogYm9vbGVhbixwcml2YXRlIF9yZWNvcmRpbmc6Ym9vbGVhbikge1xyXG4gICAgICAgIHRoaXMucmVjcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb21wdEFzU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHRBc1N0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdHJhaW5pbmcoKTpib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmFpbmluZztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVjb3JkaW5nKCk6Ym9vbGVhbntcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVjb3JkaW5nO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
@@ -28,8 +28,8 @@ export class Progress {
28
28
  }
29
29
  }
30
30
  }
31
- Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
31
+ Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
+ Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
33
33
 
34
34
  <table class="mat-typography">
35
35
  <thead>
@@ -56,8 +56,8 @@ Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.
56
56
 
57
57
  </tbody>
58
58
  </table>
59
- `, isInline: true, styles: [":host {\n overflow-x: hidden;\n overflow-y: scroll;\n padding: 10pt;\n /*flex: 0.1 0 300px; \n min-width: 300px; */\n flex: 0.1 0 content;\n background: white;\n /* Workaround for Firefox\n If the progress table gets long (script with many items) FF increases the height of the overflow progressContainer and\n the whole app does not fit into the page anymore. The app overflows and shows a vertical scrollbar for the whole app.\n See http://stackoverflow.com/questions/28636832/firefox-overflow-y-not-working-with-nested-flexbox\n */\n /* min-height:0px; */\n min-height: 1px;\n }", "table {\n min-height: 1px;\n border-collapse: collapse;\n /* Tables do not have a natural min size */\n /*min-width: 300px; */\n \n }\n\n table, th, td {\n border: 1px solid lightgrey;\n padding: 0.5em;\n \n }\n\n ", "\n .selRow {\n background: lightblue;\n }\n ", ".promptDescriptor{\n \n max-width: 200px;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }"], components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }] });
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: Progress, decorators: [{
59
+ `, isInline: true, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background:white;min-height:1px}\n", "table{min-height:1px;border-collapse:collapse}table,th,td{border:1px solid lightgrey;padding:.5em}\n", ".selRow{background:lightblue}\n", ".promptDescriptor{max-width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }] });
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: Progress, decorators: [{
61
61
  type: Component,
62
62
  args: [{
63
63
  selector: 'app-sprprogress',
@@ -150,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
150
150
  }], clickDownloadDone: [{
151
151
  type: Output
152
152
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9wcm9ncmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFBOzs7OztBQStFcEUsTUFBTSxPQUFPLFFBQVE7SUEzRXJCO1FBNEVXLFVBQUssR0FBbUIsSUFBSSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLG1CQUFjLEdBQVUsS0FBSyxDQUFDO1FBQzdCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQU16QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBUzlDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7S0FRN0Q7SUF0QkMsSUFDSSxTQUFTLENBQUMsTUFBYTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBR0QsSUFDSSxTQUFTLENBQUMsTUFBYTtRQUN6QixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTtZQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUdELElBQ0ksaUJBQWlCLENBQUMsTUFBYTtRQUNqQyxJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTtZQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQzs7c0dBMUJVLFFBQVE7MEZBQVIsUUFBUSw4V0F2RVQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCVDs0RkE0Q1UsUUFBUTtrQkEzRXBCLFNBQVM7bUJBQUM7b0JBRVQsUUFBUSxFQUFFLGlCQUFpQjtvQkFFM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQlQ7b0JBQ0QsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQWVQO3dCQUNFOzs7Ozs7Ozs7Ozs7OztLQWNELEVBQUU7Ozs7S0FJRixFQUFDOzs7Ozs7TUFNQSxDQUFDO2lCQUVOOzhCQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFSCxTQUFTO3NCQURaLE1BQU07Z0JBS0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVILFNBQVM7c0JBRFosTUFBTTtnQkFRRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUgsaUJBQWlCO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuL2l0ZW0nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9ncmVzcycsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj5cclxuICAgICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPiM8L3RoPjwhLS08dGg+Q29kZTwvdGg+LS0+XHJcbiAgICAgICAgPHRoPlByb21wdDwvdGg+XHJcbiAgICAgICAgPHRoPlN0YXR1czwvdGg+XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGhlYWQ+XHJcbiAgICAgIDx0Ym9keT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zXCI+XHJcblxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGl0SWR4PWluZGV4O1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJyb3dTZWxlY3Q9aXRJZHhcIiBbY2xhc3Muc2VsUm93XT1cIml0SWR4PT09c2VsZWN0ZWRJdGVtSWR4XCJcclxuICAgICAgICAgICAgW3Njcm9sbEludG9WaWV3VG9Cb3R0b21dPVwiaXRJZHg9PT1zZWxlY3RlZEl0ZW1JZHhcIj5cclxuICAgICAgICAgIDx0ZD57e2l0SWR4fX08L3RkPlxyXG4gICAgICAgICAgPHRkIGNsYXNzPVwicHJvbXB0RGVzY3JpcHRvclwiPnt7aXRlbS5wcm9tcHRBc1N0cmluZ319PC90ZD5cclxuICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaXRlbS5yZWNzICYmIGl0ZW0ucmVjcy5sZW5ndGg+MFwiPmRvbmU8L21hdC1pY29uPlxyXG5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICBwYWRkaW5nOiAxMHB0O1xyXG4gICAgLypmbGV4OiAwLjEgMCAzMDBweDsgIFxyXG4gICAgICBtaW4td2lkdGg6IDMwMHB4OyAqL1xyXG4gICAgZmxleDogMC4xIDAgY29udGVudDtcclxuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgLyogV29ya2Fyb3VuZCBmb3IgRmlyZWZveFxyXG4gICAgSWYgdGhlIHByb2dyZXNzIHRhYmxlIGdldHMgbG9uZyAoc2NyaXB0IHdpdGggbWFueSBpdGVtcykgRkYgaW5jcmVhc2VzIHRoZSBoZWlnaHQgb2YgdGhlIG92ZXJmbG93IHByb2dyZXNzQ29udGFpbmVyIGFuZFxyXG4gICAgdGhlIHdob2xlIGFwcCBkb2VzIG5vdCBmaXQgaW50byB0aGUgcGFnZSBhbnltb3JlLiBUaGUgYXBwIG92ZXJmbG93cyBhbmQgc2hvd3MgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZm9yIHRoZSB3aG9sZSBhcHAuXHJcbiAgICBTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODYzNjgzMi9maXJlZm94LW92ZXJmbG93LXktbm90LXdvcmtpbmctd2l0aC1uZXN0ZWQtZmxleGJveFxyXG4gICAgKi9cclxuICAgIC8qIG1pbi1oZWlnaHQ6MHB4OyAqL1xyXG4gICAgbWluLWhlaWdodDogMXB4O1xyXG4gIH1gLFxyXG4gICAgICBgdGFibGUge1xyXG4gICAgICBtaW4taGVpZ2h0OiAxcHg7XHJcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XHJcbiAgICAgICAgICAvKiBUYWJsZXMgZG8gbm90IGhhdmUgYSBuYXR1cmFsIG1pbiBzaXplICovXHJcbiAgICAgICAgICAvKm1pbi13aWR0aDogMzAwcHg7ICovXHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlLCB0aCwgdGQge1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyZXk7XHJcbiAgICAgIHBhZGRpbmc6IDAuNWVtO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGAsIGBcclxuICAgICAgLnNlbFJvdyB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogbGlnaHRibHVlO1xyXG4gICAgICB9XHJcbiAgICBgLGAucHJvbXB0RGVzY3JpcHRvcntcclxuICAgICAgXHJcbiAgICAgIG1heC13aWR0aDogMjAwcHg7XHJcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3Mge1xyXG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxJdGVtPnxudWxsPW51bGw7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtSWR4ID0gMDtcclxuICBASW5wdXQoKSBlbmFibGVEb3dubG9hZDogYm9vbGVhbj1mYWxzZTtcclxuICBAT3V0cHV0KCkgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KClcclxuICBzZXQgcm93U2VsZWN0KHJvd0lkeDpudW1iZXIpe1xyXG4gICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHJvd0lkeCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25TaG93RG9uZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHNldCBjbGlja0RvbmUocm93SWR4Om51bWJlcil7XHJcbiAgICBpZih0aGlzLml0ZW1zICYmdGhpcy5pdGVtc1tyb3dJZHhdICYmIHRoaXMuaXRlbXNbcm93SWR4XS5yZWNzKSB7XHJcbiAgICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdChyb3dJZHgpO1xyXG4gICAgICB0aGlzLm9uU2hvd0RvbmVBY3Rpb24uZW1pdChyb3dJZHgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIG9uRG93bmxvYWREb25lQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgc2V0IGNsaWNrRG93bmxvYWREb25lKHJvd0lkeDpudW1iZXIpe1xyXG4gICAgaWYodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zW3Jvd0lkeF0gJiYgdGhpcy5pdGVtc1tyb3dJZHhdLnJlY3MpIHtcclxuICAgICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHJvd0lkeCk7XHJcbiAgICAgIHRoaXMub25Eb3dubG9hZERvbmVBY3Rpb24uZW1pdChyb3dJZHgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9wcm9ncmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFBOzs7OztBQStFcEUsTUFBTSxPQUFPLFFBQVE7SUEzRXJCO1FBNEVXLFVBQUssR0FBbUIsSUFBSSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLG1CQUFjLEdBQVUsS0FBSyxDQUFDO1FBQzdCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQU16QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBUzlDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7S0FRN0Q7SUF0QkMsSUFDSSxTQUFTLENBQUMsTUFBYTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBR0QsSUFDSSxTQUFTLENBQUMsTUFBYTtRQUN6QixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTtZQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUdELElBQ0ksaUJBQWlCLENBQUMsTUFBYTtRQUNqQyxJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTtZQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQzs7cUdBMUJVLFFBQVE7eUZBQVIsUUFBUSw4V0F2RVQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCVDsyRkE0Q1UsUUFBUTtrQkEzRXBCLFNBQVM7bUJBQUM7b0JBRVQsUUFBUSxFQUFFLGlCQUFpQjtvQkFFM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQlQ7b0JBQ0QsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQWVQO3dCQUNFOzs7Ozs7Ozs7Ozs7OztLQWNELEVBQUU7Ozs7S0FJRixFQUFDOzs7Ozs7TUFNQSxDQUFDO2lCQUVOOzhCQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFSCxTQUFTO3NCQURaLE1BQU07Z0JBS0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVILFNBQVM7c0JBRFosTUFBTTtnQkFRRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUgsaUJBQWlCO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuL2l0ZW0nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9ncmVzcycsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj5cclxuICAgICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPiM8L3RoPjwhLS08dGg+Q29kZTwvdGg+LS0+XHJcbiAgICAgICAgPHRoPlByb21wdDwvdGg+XHJcbiAgICAgICAgPHRoPlN0YXR1czwvdGg+XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGhlYWQ+XHJcbiAgICAgIDx0Ym9keT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zXCI+XHJcblxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGl0SWR4PWluZGV4O1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJyb3dTZWxlY3Q9aXRJZHhcIiBbY2xhc3Muc2VsUm93XT1cIml0SWR4PT09c2VsZWN0ZWRJdGVtSWR4XCJcclxuICAgICAgICAgICAgW3Njcm9sbEludG9WaWV3VG9Cb3R0b21dPVwiaXRJZHg9PT1zZWxlY3RlZEl0ZW1JZHhcIj5cclxuICAgICAgICAgIDx0ZD57e2l0SWR4fX08L3RkPlxyXG4gICAgICAgICAgPHRkIGNsYXNzPVwicHJvbXB0RGVzY3JpcHRvclwiPnt7aXRlbS5wcm9tcHRBc1N0cmluZ319PC90ZD5cclxuICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaXRlbS5yZWNzICYmIGl0ZW0ucmVjcy5sZW5ndGg+MFwiPmRvbmU8L21hdC1pY29uPlxyXG5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICBwYWRkaW5nOiAxMHB0O1xyXG4gICAgLypmbGV4OiAwLjEgMCAzMDBweDsgIFxyXG4gICAgICBtaW4td2lkdGg6IDMwMHB4OyAqL1xyXG4gICAgZmxleDogMC4xIDAgY29udGVudDtcclxuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgLyogV29ya2Fyb3VuZCBmb3IgRmlyZWZveFxyXG4gICAgSWYgdGhlIHByb2dyZXNzIHRhYmxlIGdldHMgbG9uZyAoc2NyaXB0IHdpdGggbWFueSBpdGVtcykgRkYgaW5jcmVhc2VzIHRoZSBoZWlnaHQgb2YgdGhlIG92ZXJmbG93IHByb2dyZXNzQ29udGFpbmVyIGFuZFxyXG4gICAgdGhlIHdob2xlIGFwcCBkb2VzIG5vdCBmaXQgaW50byB0aGUgcGFnZSBhbnltb3JlLiBUaGUgYXBwIG92ZXJmbG93cyBhbmQgc2hvd3MgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZm9yIHRoZSB3aG9sZSBhcHAuXHJcbiAgICBTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODYzNjgzMi9maXJlZm94LW92ZXJmbG93LXktbm90LXdvcmtpbmctd2l0aC1uZXN0ZWQtZmxleGJveFxyXG4gICAgKi9cclxuICAgIC8qIG1pbi1oZWlnaHQ6MHB4OyAqL1xyXG4gICAgbWluLWhlaWdodDogMXB4O1xyXG4gIH1gLFxyXG4gICAgICBgdGFibGUge1xyXG4gICAgICBtaW4taGVpZ2h0OiAxcHg7XHJcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XHJcbiAgICAgICAgICAvKiBUYWJsZXMgZG8gbm90IGhhdmUgYSBuYXR1cmFsIG1pbiBzaXplICovXHJcbiAgICAgICAgICAvKm1pbi13aWR0aDogMzAwcHg7ICovXHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlLCB0aCwgdGQge1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyZXk7XHJcbiAgICAgIHBhZGRpbmc6IDAuNWVtO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGAsIGBcclxuICAgICAgLnNlbFJvdyB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogbGlnaHRibHVlO1xyXG4gICAgICB9XHJcbiAgICBgLGAucHJvbXB0RGVzY3JpcHRvcntcclxuICAgICAgXHJcbiAgICAgIG1heC13aWR0aDogMjAwcHg7XHJcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3Mge1xyXG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxJdGVtPnxudWxsPW51bGw7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtSWR4ID0gMDtcclxuICBASW5wdXQoKSBlbmFibGVEb3dubG9hZDogYm9vbGVhbj1mYWxzZTtcclxuICBAT3V0cHV0KCkgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KClcclxuICBzZXQgcm93U2VsZWN0KHJvd0lkeDpudW1iZXIpe1xyXG4gICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHJvd0lkeCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25TaG93RG9uZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHNldCBjbGlja0RvbmUocm93SWR4Om51bWJlcil7XHJcbiAgICBpZih0aGlzLml0ZW1zICYmdGhpcy5pdGVtc1tyb3dJZHhdICYmIHRoaXMuaXRlbXNbcm93SWR4XS5yZWNzKSB7XHJcbiAgICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdChyb3dJZHgpO1xyXG4gICAgICB0aGlzLm9uU2hvd0RvbmVBY3Rpb24uZW1pdChyb3dJZHgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIG9uRG93bmxvYWREb25lQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgc2V0IGNsaWNrRG93bmxvYWREb25lKHJvd0lkeDpudW1iZXIpe1xyXG4gICAgaWYodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zW3Jvd0lkeF0gJiYgdGhpcy5pdGVtc1tyb3dJZHhdLnJlY3MpIHtcclxuICAgICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHJvd0lkeCk7XHJcbiAgICAgIHRoaXMub25Eb3dubG9hZERvbmVBY3Rpb24uZW1pdChyb3dJZHgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=