speechrecorderng 3.10.13 → 3.11.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 (99) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/speechrecorderng.mjs +204 -201
  3. package/fesm2022/speechrecorderng.mjs.map +1 -1
  4. package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
  5. package/lib/spr.module.version.d.ts +1 -1
  6. package/lib/ui/canvas_layer_comp.d.ts +1 -1
  7. package/lib/ui/responsive_component.d.ts +1 -1
  8. package/package.json +13 -15
  9. package/esm2022/lib/action/action.mjs +0 -73
  10. package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
  11. package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
  12. package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
  13. package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
  14. package/esm2022/lib/audio/audio_display.mjs +0 -118
  15. package/esm2022/lib/audio/audio_player.mjs +0 -238
  16. package/esm2022/lib/audio/capture/capture.mjs +0 -855
  17. package/esm2022/lib/audio/context.mjs +0 -79
  18. package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
  19. package/esm2022/lib/audio/format.mjs +0 -20
  20. package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
  21. package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
  22. package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
  23. package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
  24. package/esm2022/lib/audio/io/stream.mjs +0 -59
  25. package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
  26. package/esm2022/lib/audio/persistor.mjs +0 -81
  27. package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
  28. package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
  29. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
  30. package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
  31. package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
  32. package/esm2022/lib/audio/playback/player.mjs +0 -402
  33. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
  34. package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
  35. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
  36. package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
  37. package/esm2022/lib/audio/ui/common.mjs +0 -19
  38. package/esm2022/lib/audio/ui/container.mjs +0 -414
  39. package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
  40. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
  41. package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
  42. package/esm2022/lib/db/inddb.mjs +0 -120
  43. package/esm2022/lib/dsp/utils.mjs +0 -48
  44. package/esm2022/lib/environment/environment.defaults.mjs +0 -9
  45. package/esm2022/lib/io/BinaryReader.mjs +0 -93
  46. package/esm2022/lib/io/BinaryWriter.mjs +0 -80
  47. package/esm2022/lib/io/stream.mjs +0 -259
  48. package/esm2022/lib/math/2d/geometry.mjs +0 -28
  49. package/esm2022/lib/math/complex.mjs +0 -58
  50. package/esm2022/lib/math/dft.mjs +0 -196
  51. package/esm2022/lib/media/utils.mjs +0 -14
  52. package/esm2022/lib/net/uploader.mjs +0 -367
  53. package/esm2022/lib/recorder_component.mjs +0 -65
  54. package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
  55. package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
  56. package/esm2022/lib/speechrecorder/recording.mjs +0 -124
  57. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
  58. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
  59. package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
  60. package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
  61. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
  62. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
  63. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
  64. package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
  65. package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
  66. package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
  67. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
  68. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
  69. package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
  70. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
  71. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
  72. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
  73. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
  74. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
  75. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
  76. package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
  77. package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
  78. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
  79. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
  80. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
  81. package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
  82. package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
  83. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
  84. package/esm2022/lib/speechrecorderng.component.mjs +0 -392
  85. package/esm2022/lib/speechrecorderng.module.mjs +0 -97
  86. package/esm2022/lib/spr.config.mjs +0 -27
  87. package/esm2022/lib/spr.module.version.mjs +0 -2
  88. package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
  89. package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
  90. package/esm2022/lib/ui/message_dialog.mjs +0 -51
  91. package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
  92. package/esm2022/lib/ui/responsive_component.mjs +0 -24
  93. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
  94. package/esm2022/lib/utils/ua-parser.mjs +0 -190
  95. package/esm2022/lib/utils/utils.mjs +0 -132
  96. package/esm2022/lib/utils/wake_lock.mjs +0 -114
  97. package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
  98. package/esm2022/public-api.mjs +0 -35
  99. package/esm2022/speechrecorderng.mjs +0 -5
@@ -1,416 +0,0 @@
1
- import { Action } from '../../action/action';
2
- import { Component, ViewChild, Input } from "@angular/core";
3
- import { ResponsiveComponent } from "../../ui/responsive_component";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "@angular/material/icon";
7
- import * as i3 from "@angular/material/progress-spinner";
8
- import * as i4 from "@angular/material/tooltip";
9
- import * as i5 from "@angular/cdk/layout";
10
- import * as i6 from "@angular/material/button";
11
- import * as i7 from "@angular/material/dialog";
12
- export class StatusDisplay {
13
- constructor() {
14
- this.statusAlertType = 'info';
15
- this.statusMsg = 'Initialize...';
16
- this.statusWaiting = false;
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
20
- <p matTooltip="Status">
21
- <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>
22
- {{statusMsg}}
23
- </p>
24
- `, 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"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
25
- }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: StatusDisplay, decorators: [{
27
- type: Component,
28
- args: [{ selector: 'app-sprstatusdisplay', template: `
29
- <p matTooltip="Status">
30
- <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>
31
- {{statusMsg}}
32
- </p>
33
- `, 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"] }]
34
- }], propDecorators: { statusAlertType: [{
35
- type: Input
36
- }], statusMsg: [{
37
- type: Input
38
- }], statusWaiting: [{
39
- type: Input
40
- }] } });
41
- export class UploadStatus {
42
- constructor() {
43
- this._awaitNewUpload = false;
44
- this.spinnerMode = 'determinate';
45
- this.colorStatus = 'primary';
46
- this._value = 100;
47
- this.displayValue = null;
48
- this.toolTipText = '';
49
- }
50
- _updateSpinner() {
51
- let uplMsg;
52
- if (this._awaitNewUpload || this._value === 0) {
53
- this.spinnerMode = 'indeterminate';
54
- this.displayValue = '&nbsp;&nbsp;&nbsp;&nbsp;';
55
- uplMsg = 'Preparing upload.';
56
- }
57
- else {
58
- this.spinnerMode = 'determinate';
59
- this.displayValue = this._value + '%';
60
- if (this._value === 100) {
61
- uplMsg = 'Upload complete';
62
- }
63
- else {
64
- uplMsg = 'Upload progress: ' + this.displayValue;
65
- }
66
- }
67
- if (this.status === 'warn') {
68
- uplMsg = 'Upload error occurred. Please check your network connection. ' + uplMsg;
69
- }
70
- this.toolTipText = uplMsg;
71
- }
72
- set value(value) {
73
- this._value = value;
74
- this._updateSpinner();
75
- }
76
- ;
77
- set awaitNewUpload(awaitNewUpload) {
78
- this._awaitNewUpload = awaitNewUpload;
79
- this._updateSpinner();
80
- }
81
- set status(status) {
82
- this._status = status;
83
- if ('accent' === status) {
84
- this.colorStatus = 'accent';
85
- }
86
- else if ('warn' === status) {
87
- this.colorStatus = 'warn';
88
- }
89
- else {
90
- this.colorStatus = 'primary';
91
- }
92
- this._updateSpinner();
93
- }
94
- get status() {
95
- return this._status;
96
- }
97
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
98
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
99
- <mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
100
- [matTooltip]="toolTipText"></mat-progress-spinner>
101
- `, isInline: true, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"], dependencies: [{ kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
102
- }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UploadStatus, decorators: [{
104
- type: Component,
105
- args: [{ selector: 'app-uploadstatus', template: `
106
- <mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
107
- [matTooltip]="toolTipText"></mat-progress-spinner>
108
- `, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"] }]
109
- }], propDecorators: { value: [{
110
- type: Input
111
- }], awaitNewUpload: [{
112
- type: Input
113
- }], status: [{
114
- type: Input
115
- }] } });
116
- export class ProgressDisplay {
117
- constructor() {
118
- this.progressMsg = '[itemcode]';
119
- }
120
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
122
- <p>{{progressMsg}}</p>
123
- `, isInline: true, styles: [":host{flex:1;width:100%;text-align:left}\n"] }); }
124
- }
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ProgressDisplay, decorators: [{
126
- type: Component,
127
- args: [{ selector: 'app-sprprogressdisplay', template: `
128
- <p>{{progressMsg}}</p>
129
- `, styles: [":host{flex:1;width:100%;text-align:left}\n"] }]
130
- }] });
131
- export class TransportActions {
132
- constructor() {
133
- this.startAction = new Action('Start');
134
- this.stopAction = new Action('Stop');
135
- this.nextAction = new Action('Next');
136
- this.pauseAction = new Action('Pause');
137
- this.fwdNextAction = new Action('Next recording');
138
- this.fwdAction = new Action('Forward');
139
- this.bwdAction = new Action('Backward');
140
- this.stopNonrecordingAction = new Action('Next');
141
- }
142
- }
143
- export class TransportPanel extends ResponsiveComponent {
144
- constructor(breakpointObserver) {
145
- super(breakpointObserver);
146
- this.navigationEnabled = true;
147
- this.pausingEnabled = true;
148
- }
149
- startDisabled() {
150
- return !this.actions || this.readonly || this.actions.startAction.disabled;
151
- }
152
- stopDisabled() {
153
- return !this.actions || this.actions.stopAction.disabled;
154
- }
155
- nextDisabled() {
156
- return !this.actions || this.actions.nextAction.disabled || !this.navigationEnabled;
157
- }
158
- stopNonrecordingDisabled() {
159
- return !this.actions || this.actions.stopNonrecordingAction.disabled || !this.navigationEnabled;
160
- }
161
- pauseDisabled() {
162
- return !this.actions || this.actions.pauseAction.disabled || !this.pausingEnabled;
163
- }
164
- fwdDisabled() {
165
- return !this.actions || this.actions.fwdAction.disabled || !this.navigationEnabled;
166
- }
167
- fwdNextDisabled() {
168
- return !this.actions || this.actions.fwdNextAction.disabled || !this.navigationEnabled;
169
- }
170
- bwdDisabled() {
171
- return !this.actions || this.actions.bwdAction.disabled || !this.navigationEnabled;
172
- }
173
- startStopNextName() {
174
- if (!this.nextDisabled() || !this.stopNonrecordingDisabled()) {
175
- this.startStopNextButtonName = "Next";
176
- }
177
- else if (!this.startDisabled()) {
178
- this.startStopNextButtonName = "Start";
179
- }
180
- else if (!this.stopDisabled()) {
181
- this.startStopNextButtonName = "Stop";
182
- }
183
- return this.startStopNextButtonName;
184
- }
185
- startStopNextIconName() {
186
- if (!this.startDisabled()) {
187
- this.startStopNextButtonIconName = "fiber_manual_record";
188
- }
189
- else if (!this.stopDisabled() || !this.stopNonrecordingDisabled()) {
190
- this.startStopNextButtonIconName = "stop";
191
- }
192
- else if (!this.nextDisabled()) {
193
- this.startStopNextButtonIconName = "stop";
194
- }
195
- return this.startStopNextButtonIconName;
196
- }
197
- startStopNextIconColor() {
198
- if (!this.startDisabled()) {
199
- return "red";
200
- }
201
- else if (!this.stopDisabled() || !this.nextDisabled()) {
202
- return "yellow";
203
- }
204
- else {
205
- return "grey";
206
- }
207
- }
208
- startStopNextPerform() {
209
- if (!this.startDisabled()) {
210
- this.actions.startAction.perform();
211
- }
212
- else if (!this.stopDisabled()) {
213
- this.actions.stopAction.perform();
214
- }
215
- else if (!this.nextDisabled()) {
216
- this.actions.nextAction.perform();
217
- }
218
- else if (!this.stopNonrecordingDisabled()) {
219
- this.actions.stopNonrecordingAction.perform();
220
- }
221
- }
222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TransportPanel, deps: [{ token: i5.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
223
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, usesInheritance: true, ngImport: i0, template: `
224
- <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
225
- mat-raised-button class="transport-button-icon">
226
- <span><mat-icon>chevron_left</mat-icon></span>
227
- </button>
228
- <button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled() && stopNonrecordingDisabled()" mat-raised-button class="transport-button-icon">
229
- <span><mat-icon class="transport-button-icon" [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon class="transport-button-icon" *ngIf="!nextDisabled() || !stopNonrecordingDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon></span>
230
- <span *ngIf="!screenXs" class="transport-button-text">{{startStopNextName()}}</span>
231
- </button>
232
- <button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button class="transport-button-icon">
233
- <span><mat-icon class="transport-button-icon">pause</mat-icon></span>
234
- <span *ngIf="!screenXs" class="transport-button-text">Pause</span>
235
- </button>
236
- <button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button class="transport-button-icon">
237
- <span><mat-icon>redo</mat-icon></span>
238
- </button>
239
- <button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button class="transport-button-icon">
240
- <span><mat-icon>chevron_right</mat-icon></span>
241
- </button>
242
-
243
- `, 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", "button{touch-action:manipulation}\n", ".transport-button-icon{font-size:24px;vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap}\n", ".transport-button-text{font-size:14px;letter-spacing:normal;vertical-align:baseline}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
244
- }
245
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TransportPanel, decorators: [{
246
- type: Component,
247
- args: [{ selector: 'app-sprtransport', template: `
248
- <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
249
- mat-raised-button class="transport-button-icon">
250
- <span><mat-icon>chevron_left</mat-icon></span>
251
- </button>
252
- <button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled() && stopNonrecordingDisabled()" mat-raised-button class="transport-button-icon">
253
- <span><mat-icon class="transport-button-icon" [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon class="transport-button-icon" *ngIf="!nextDisabled() || !stopNonrecordingDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon></span>
254
- <span *ngIf="!screenXs" class="transport-button-text">{{startStopNextName()}}</span>
255
- </button>
256
- <button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button class="transport-button-icon">
257
- <span><mat-icon class="transport-button-icon">pause</mat-icon></span>
258
- <span *ngIf="!screenXs" class="transport-button-text">Pause</span>
259
- </button>
260
- <button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button class="transport-button-icon">
261
- <span><mat-icon>redo</mat-icon></span>
262
- </button>
263
- <button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button class="transport-button-icon">
264
- <span><mat-icon>chevron_right</mat-icon></span>
265
- </button>
266
-
267
- `, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n", ".transport-button-icon{font-size:24px;vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap}\n", ".transport-button-text{font-size:14px;letter-spacing:normal;vertical-align:baseline}\n"] }]
268
- }], ctorParameters: () => [{ type: i5.BreakpointObserver }], propDecorators: { readonly: [{
269
- type: Input
270
- }], actions: [{
271
- type: Input
272
- }], navigationEnabled: [{
273
- type: Input
274
- }], pausingEnabled: [{
275
- type: Input
276
- }] } });
277
- export class WakeLockIndicator {
278
- constructor() {
279
- this._screenLocked = false;
280
- }
281
- set screenLocked(screenLock) {
282
- this._screenLocked = screenLock;
283
- }
284
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
285
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
286
- <mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
287
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
288
- }
289
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: WakeLockIndicator, decorators: [{
290
- type: Component,
291
- args: [{ selector: 'app-wakelockindicator', template: `
292
- <mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
293
- ` }]
294
- }], ctorParameters: () => [], propDecorators: { screenLocked: [{
295
- type: Input
296
- }] } });
297
- export class ReadyStateIndicator {
298
- constructor() {
299
- this._ready = true;
300
- this.hourGlassIconName = 'hourglass_empty';
301
- this.readyStateToolTip = '';
302
- }
303
- set ready(ready) {
304
- this._ready = ready;
305
- this.hourGlassIconName = this._ready ? 'hourglass_empty' : 'hourglass_full';
306
- 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.';
307
- }
308
- get ready() {
309
- return this._ready;
310
- }
311
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
312
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
313
- <mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
314
- `, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
315
- }
316
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ReadyStateIndicator, decorators: [{
317
- type: Component,
318
- args: [{ selector: 'app-readystateindicator', template: `
319
- <mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
320
- ` }]
321
- }], ctorParameters: () => [], propDecorators: { ready: [{
322
- type: Input
323
- }] } });
324
- export class ControlPanel extends ResponsiveComponent {
325
- constructor(bpo, dialog) {
326
- super(bpo);
327
- this.bpo = bpo;
328
- this.dialog = dialog;
329
- this.processing = false;
330
- this.navigationEnabled = true;
331
- this._ready = true;
332
- }
333
- set ready(ready) {
334
- this._ready = ready;
335
- }
336
- get ready() {
337
- return this._ready;
338
- }
339
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i5.BreakpointObserver }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
340
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", 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 }], usesInheritance: true, ngImport: i0, template: `
341
- <div *ngIf="!screenXs" style="flex-direction: row" >
342
- <app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
343
- class="hidden-xs"></app-sprstatusdisplay>
344
- <app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
345
- <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
346
- [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
347
- <app-readystateindicator [ready]="_ready"></app-readystateindicator>
348
- </div>
349
- <div *ngIf="screenXs" style="flex-direction: column">
350
- <div style="flex-direction: row" class="flexFill" >
351
- <app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
352
- class="hidden-xs"></app-sprstatusdisplay>
353
- <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
354
- [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
355
- <app-readystateindicator [ready]="_ready"></app-readystateindicator>
356
- </div>
357
- <app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
358
-
359
- </div>
360
- `, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }] }); }
361
- }
362
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ControlPanel, decorators: [{
363
- type: Component,
364
- args: [{ selector: 'app-sprcontrolpanel', template: `
365
- <div *ngIf="!screenXs" style="flex-direction: row" >
366
- <app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
367
- class="hidden-xs"></app-sprstatusdisplay>
368
- <app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
369
- <app-uploadstatus style="flex: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 *ngIf="screenXs" style="flex-direction: column">
374
- <div style="flex-direction: row" class="flexFill" >
375
- <app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
376
- class="hidden-xs"></app-sprstatusdisplay>
377
- <app-uploadstatus style="flex: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
- `, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
385
- }], ctorParameters: () => [{ type: i5.BreakpointObserver }, { type: i7.MatDialog }], propDecorators: { statusDisplay: [{
386
- type: ViewChild,
387
- args: [StatusDisplay, { static: true }]
388
- }], transportPanel: [{
389
- type: ViewChild,
390
- args: [TransportPanel, { static: true }]
391
- }], readonly: [{
392
- type: Input
393
- }], transportActions: [{
394
- type: Input
395
- }], processing: [{
396
- type: Input
397
- }], statusMsg: [{
398
- type: Input
399
- }], statusAlertType: [{
400
- type: Input
401
- }], statusWaiting: [{
402
- type: Input
403
- }], uploadStatus: [{
404
- type: Input
405
- }], uploadProgress: [{
406
- type: Input
407
- }], currentRecording: [{
408
- type: Input
409
- }], enableUploadRecordings: [{
410
- type: Input
411
- }], navigationEnabled: [{
412
- type: Input
413
- }], ready: [{
414
- type: Input
415
- }] } });
416
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vY29udHJvbHBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQzVCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFzQ2xFLE1BQU0sT0FBTyxhQUFhO0lBakMxQjtRQWtDVyxvQkFBZSxHQUFHLE1BQU0sQ0FBQztRQUN6QixjQUFTLEdBQUcsZUFBZSxDQUFDO1FBQzVCLGtCQUFhLEdBQUUsS0FBSyxDQUFDO0tBQy9COytHQUpZLGFBQWE7bUdBQWIsYUFBYSxvS0E3QmQ7Ozs7O0dBS1Q7OzRGQXdCVSxhQUFhO2tCQWpDekIsU0FBUzsrQkFFRSxzQkFBc0IsWUFFdEI7Ozs7O0dBS1Q7OEJBeUJRLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLOztBQWdCUixNQUFNLE9BQU8sWUFBWTtJQVp6QjtRQWFVLG9CQUFlLEdBQUMsS0FBSyxDQUFDO1FBQzlCLGdCQUFXLEdBQXVCLGFBQWEsQ0FBQztRQUVoRCxnQkFBVyxHQUFjLFNBQVMsQ0FBQztRQUNuQyxXQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2IsaUJBQVksR0FBYSxJQUFJLENBQUM7UUFDOUIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7S0FtRHZCO0lBakRTLGNBQWM7UUFFcEIsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVB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Q0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUU8sS0FBSztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9ufSBmcm9tICcuLi8uLi9hY3Rpb24vYWN0aW9uJ1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCwgVmlld0NoaWxkLCBJbnB1dFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2RlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lclwiO1xyXG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcbmltcG9ydCB7UmVzcG9uc2l2ZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL3VpL3Jlc3BvbnNpdmVfY29tcG9uZW50XCI7XHJcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3Byc3RhdHVzZGlzcGxheScsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cCBtYXRUb29sdGlwPVwiU3RhdHVzXCI+XHJcbiAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciAqbmdJZj1cInN0YXR1c1dhaXRpbmdcIiBjb2xvcj1cImJsYWNrXCIgIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW2RpYW1ldGVyXT1cIjMwXCIgW3N0cm9rZVdpZHRoXT1cIjVcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPjxtYXQtaWNvbiAqbmdJZj1cInN0YXR1c0FsZXJ0VHlwZT09PSdlcnJvcidcIiBzdHlsZT1cImNvbG9yOnJlZFwiPnJlcG9ydF9wcm9ibGVtPC9tYXQtaWNvbj5cclxuICAgICAge3tzdGF0dXNNc2d9fVxyXG4gICAgPC9wPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGRpc3BsYXk6IGlubGluZTtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgfWAsIGBcclxuICAgIHAge1xyXG4gICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgIHdoaXRlLXNwYWNlOm5vd3JhcDtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIG1hdC1wcm9ncmVzcy1zcGlubmVyIHtcclxuICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgYCwgYFxyXG4gICAgc3BhbiB7XHJcbiAgICAgIGNvbG9yOiByZWQ7XHJcbiAgICB9XHJcbiAgYF1cclxuXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdHVzRGlzcGxheSB7XHJcbiAgQElucHV0KCkgc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01zZyA9ICdJbml0aWFsaXplLi4uJztcclxuICBASW5wdXQoKSBzdGF0dXNXYWl0aW5nID1mYWxzZTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZHN0YXR1cycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbbW9kZV09XCJzcGlubmVyTW9kZVwiIFtjb2xvcl09XCJjb2xvclN0YXR1c1wiIFtkaWFtZXRlcl09XCIzMFwiIFtzdHJva2VXaWR0aF09XCI1XCIgW3ZhbHVlXT1cIl92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwidG9vbFRpcFRleHRcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgfWAsYG1hdC1wcm9ncmVzcy1zcGlubmVye1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgfWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRTdGF0dXMge1xyXG4gIHByaXZhdGUgX2F3YWl0TmV3VXBsb2FkPWZhbHNlO1xyXG4gIHNwaW5uZXJNb2RlOlByb2dyZXNzU3Bpbm5lck1vZGUgPSAnZGV0ZXJtaW5hdGUnO1xyXG4gIF9zdGF0dXMhOnN0cmluZztcclxuICBjb2xvclN0YXR1czpUaGVtZVBhbGV0dGU9J3ByaW1hcnknO1xyXG4gIF92YWx1ZSA9IDEwMDtcclxuICBkaXNwbGF5VmFsdWU6c3RyaW5nfG51bGw9bnVsbDtcclxuICB0b29sVGlwVGV4dDpzdHJpbmc9Jyc7XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVNwaW5uZXIoKXtcclxuXHJcbiAgICBsZXQgdXBsTXNnO1xyXG4gICAgaWYgKHRoaXMuX2F3YWl0TmV3VXBsb2FkIHx8IHRoaXMuX3ZhbHVlID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lck1vZGUgPSAnaW5kZXRlcm1pbmF0ZSdcclxuICAgICAgdGhpcy5kaXNwbGF5VmFsdWU9JyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOydcclxuICAgICAgdXBsTXNnPSdQcmVwYXJpbmcgdXBsb2FkLidcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lck1vZGUgPSAnZGV0ZXJtaW5hdGUnXHJcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlPXRoaXMuX3ZhbHVlKyclJ1xyXG4gICAgICBpZih0aGlzLl92YWx1ZT09PTEwMCl7XHJcbiAgICAgICAgdXBsTXNnID0gJ1VwbG9hZCBjb21wbGV0ZSdcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHVwbE1zZyA9ICdVcGxvYWQgcHJvZ3Jlc3M6ICcgKyB0aGlzLmRpc3BsYXlWYWx1ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnN0YXR1cz09PSd3YXJuJyl7XHJcbiAgICAgIHVwbE1zZz0nVXBsb2FkIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uICcrdXBsTXNnXHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2xUaXBUZXh0PXVwbE1zZ1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdmFsdWUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVNwaW5uZXIoKVxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHNldCBhd2FpdE5ld1VwbG9hZChhd2FpdE5ld1VwbG9hZDpib29sZWFuKXtcclxuICAgIHRoaXMuX2F3YWl0TmV3VXBsb2FkPWF3YWl0TmV3VXBsb2FkXHJcbiAgICB0aGlzLl91cGRhdGVTcGlubmVyKClcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzdGF0dXMoc3RhdHVzOnN0cmluZykge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgaWYgKCdhY2NlbnQnID09PSBzdGF0dXMpIHtcclxuICAgICAgdGhpcy5jb2xvclN0YXR1cyA9ICdhY2NlbnQnO1xyXG4gICAgfSBlbHNlIGlmICgnd2FybicgPT09IHN0YXR1cykge1xyXG4gICAgICB0aGlzLmNvbG9yU3RhdHVzID0gJ3dhcm4nO1xyXG4gICAgfSBlbHNle1xyXG4gICAgICB0aGlzLmNvbG9yU3RhdHVzID0gJ3ByaW1hcnknO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlU3Bpbm5lcigpXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhdHVzKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1c1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9ncmVzc2Rpc3BsYXknLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cD57e3Byb2dyZXNzTXNnfX08L3A+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgZmxleDogMTtcclxuICAvKiBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OyAqL1xyXG4gICAgLypkaXNwbGF5OiBpbmxpbmU7ICovXHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICB9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzRGlzcGxheSB7XHJcbiAgcHJvZ3Jlc3NNc2cgPSAnW2l0ZW1jb2RlXSc7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFuc3BvcnRBY3Rpb25zIHtcclxuICBzdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIHN0b3BBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBuZXh0QWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgZndkTmV4dEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIHBhdXNlQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgZndkQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgYndkQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgc3RvcE5vbnJlY29yZGluZ0FjdGlvbjpBY3Rpb248dm9pZD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5zdGFydEFjdGlvbiA9IG5ldyBBY3Rpb24oJ1N0YXJ0Jyk7XHJcbiAgICB0aGlzLnN0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdG9wJyk7XHJcbiAgICB0aGlzLm5leHRBY3Rpb24gPSBuZXcgQWN0aW9uKCdOZXh0Jyk7XHJcbiAgICB0aGlzLnBhdXNlQWN0aW9uID0gbmV3IEFjdGlvbignUGF1c2UnKTtcclxuICAgIHRoaXMuZndkTmV4dEFjdGlvbiA9IG5ldyBBY3Rpb24oJ05leHQgcmVjb3JkaW5nJyk7XHJcbiAgICB0aGlzLmZ3ZEFjdGlvbiA9IG5ldyBBY3Rpb24oJ0ZvcndhcmQnKTtcclxuICAgIHRoaXMuYndkQWN0aW9uID0gbmV3IEFjdGlvbignQmFja3dhcmQnKTtcclxuICAgIHRoaXMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbj1uZXcgQWN0aW9uKCdOZXh0Jyk7XHJcblxyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnRyYW5zcG9ydCcsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YnV0dG9uIGlkPVwiYndkQnRuXCIgKm5nSWY9XCJuYXZpZ2F0aW9uRW5hYmxlZFwiICAoY2xpY2spPVwiYWN0aW9ucy5id2RBY3Rpb24ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cImJ3ZERpc2FibGVkKClcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24taWNvblwiPlxyXG4gICAgICA8c3Bhbj48bWF0LWljb24+Y2hldnJvbl9sZWZ0PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cInN0YXJ0U3RvcE5leHRQZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwic3RhcnREaXNhYmxlZCgpICYmIHN0b3BEaXNhYmxlZCgpICYmIG5leHREaXNhYmxlZCgpICYmIHN0b3BOb25yZWNvcmRpbmdEaXNhYmxlZCgpXCIgIG1hdC1yYWlzZWQtYnV0dG9uICBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24taWNvblwiPlxyXG4gICAgICA8c3Bhbj48bWF0LWljb24gY2xhc3M9XCJ0cmFuc3BvcnQtYnV0dG9uLWljb25cIiBbc3R5bGUuY29sb3JdPVwic3RhcnRTdG9wTmV4dEljb25Db2xvcigpXCI+e3tzdGFydFN0b3BOZXh0SWNvbk5hbWUoKX19PC9tYXQtaWNvbj48bWF0LWljb24gY2xhc3M9XCJ0cmFuc3BvcnQtYnV0dG9uLWljb25cIiAqbmdJZj1cIiFuZXh0RGlzYWJsZWQoKSB8fCAhc3RvcE5vbnJlY29yZGluZ0Rpc2FibGVkKClcIiBbc3R5bGUuY29sb3JdPVwibmV4dERpc2FibGVkKCkgPyAnZ3JleScgOiAnYmxhY2snXCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFzY3JlZW5Yc1wiIGNsYXNzPVwidHJhbnNwb3J0LWJ1dHRvbi10ZXh0XCI+e3tzdGFydFN0b3BOZXh0TmFtZSgpfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJwYXVzaW5nRW5hYmxlZFwiIChjbGljayk9XCJhY3Rpb25zLnBhdXNlQWN0aW9uLnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJwYXVzZURpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiAgY2xhc3M9XCJ0cmFuc3BvcnQtYnV0dG9uLWljb25cIj5cclxuICAgICAgPHNwYW4+PG1hdC1pY29uIGNsYXNzPVwidHJhbnNwb3J0LWJ1dHRvbi1pY29uXCI+cGF1c2U8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhc2NyZWVuWHNcIiBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24tdGV4dFwiPlBhdXNlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZndkTmV4dEJ0blwiICpuZ0lmPVwibmF2aWdhdGlvbkVuYWJsZWQgJiYgIXNjcmVlblhzXCIgKGNsaWNrKT1cImFjdGlvbnMuZndkTmV4dEFjdGlvbi5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwiZndkTmV4dERpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24taWNvblwiPlxyXG4gICAgICA8c3Bhbj48bWF0LWljb24+cmVkbzwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZndkQnRuXCIgKm5nSWY9XCJuYXZpZ2F0aW9uRW5hYmxlZFwiICAoY2xpY2spPVwiYWN0aW9ucy5md2RBY3Rpb24ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cImZ3ZERpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24taWNvblwiPlxyXG4gICAgICA8c3Bhbj48bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDIwO1xyXG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDA7XHJcblxyXG4gIH1gLCBgXHJcbiAgICBkaXYge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmU7XHJcbiAgICAgIGZsZXg6IDA7XHJcbiAgICB9YCxgXHJcbiAgICAgYnV0dG9uIHtcclxuICAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xyXG4gICAgIH1gLGBcclxuICAgIC50cmFuc3BvcnQtYnV0dG9uLWljb257XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcclxuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIH1gLGBcclxuICAgIC50cmFuc3BvcnQtYnV0dG9uLXRleHR7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xyXG4gICAgfWBcclxuICBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhbnNwb3J0UGFuZWwgZXh0ZW5kcyBSZXNwb25zaXZlQ29tcG9uZW50e1xyXG5cclxuICBASW5wdXQoKSByZWFkb25seSE6Ym9vbGVhbjtcclxuICBASW5wdXQoKSBhY3Rpb25zITogVHJhbnNwb3J0QWN0aW9ucztcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uRW5hYmxlZD10cnVlO1xyXG4gIEBJbnB1dCgpIHBhdXNpbmdFbmFibGVkPXRydWU7XHJcblxyXG4gIHN0YXJ0U3RvcE5leHRCdXR0b25OYW1lITpzdHJpbmc7XHJcbiAgc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lITpzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHtcclxuICAgICAgc3VwZXIoYnJlYWtwb2ludE9ic2VydmVyKTtcclxuICAgIH1cclxuXHJcbiAgc3RhcnREaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5hY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkXHJcbiAgfVxyXG5cclxuICBzdG9wRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgbmV4dERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMubmF2aWdhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzdG9wTm9ucmVjb3JkaW5nRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIHBhdXNlRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMucGF1c2luZ0VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBmd2REaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMubmF2aWdhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBmd2ROZXh0RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuZndkTmV4dEFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIGJ3ZERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gICAgc3RhcnRTdG9wTmV4dE5hbWUoKTpzdHJpbmd7XHJcbiAgICAgICAgaWYoIXRoaXMubmV4dERpc2FibGVkKCkgfHwgIXRoaXMuc3RvcE5vbnJlY29yZGluZ0Rpc2FibGVkKCkpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25OYW1lPSBcIk5leHRcIlxyXG4gICAgICAgIH1lbHNlIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWU9XCJTdGFydFwiXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uTmFtZSA9IFwiU3RvcFwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25OYW1lO1xyXG4gICAgfVxyXG4gIHN0YXJ0U3RvcE5leHRJY29uTmFtZSgpOnN0cmluZ3tcclxuICAgICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJmaWJlcl9tYW51YWxfcmVjb3JkXCJcclxuICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkgfHwgIXRoaXMuc3RvcE5vbnJlY29yZGluZ0Rpc2FibGVkKCkpe1xyXG4gICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJzdG9wXCJcclxuICAgICAgfWVsc2UgaWYoIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJzdG9wXCJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWVcclxuICB9XHJcbiAgICBzdGFydFN0b3BOZXh0SWNvbkNvbG9yKCk6c3RyaW5ne1xyXG4gICAgICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJlZFwiXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkgfHwgIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgICByZXR1cm4gXCJ5ZWxsb3dcIlxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gXCJncmV5XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICBzdGFydFN0b3BOZXh0UGVyZm9ybSgpe1xyXG4gICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5hY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5hY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfWVsc2UgaWYoIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICB0aGlzLmFjdGlvbnMubmV4dEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9ZWxzZSBpZighdGhpcy5zdG9wTm9ucmVjb3JkaW5nRGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuYWN0aW9ucy5zdG9wTm9ucmVjb3JkaW5nQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC13YWtlbG9ja2luZGljYXRvcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIl9zY3JlZW5Mb2NrZWRcIj5zY3JlZW5fbG9ja19wb3J0cmFpdDwvbWF0LWljb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXYWtlTG9ja0luZGljYXRvciB7XHJcbiAgX3NjcmVlbkxvY2tlZD1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBASW5wdXQoKSBzZXQgc2NyZWVuTG9ja2VkKHNjcmVlbkxvY2s6Ym9vbGVhbil7XHJcbiAgICB0aGlzLl9zY3JlZW5Mb2NrZWQ9c2NyZWVuTG9jaztcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yJyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCJyZWFkeVN0YXRlVG9vbFRpcFwiPnt7aG91ckdsYXNzSWNvbk5hbWV9fTwvbWF0LWljb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWFkeVN0YXRlSW5kaWNhdG9yIHtcclxuICBfcmVhZHk9dHJ1ZTtcclxuICBob3VyR2xhc3NJY29uTmFtZT0naG91cmdsYXNzX2VtcHR5J1xyXG4gIHJlYWR5U3RhdGVUb29sVGlwOnN0cmluZz0nJ1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIEBJbnB1dCgpIHNldCByZWFkeShyZWFkeTpib29sZWFuKXtcclxuICAgIHRoaXMuX3JlYWR5PXJlYWR5XHJcbiAgICB0aGlzLmhvdXJHbGFzc0ljb25OYW1lPXRoaXMuX3JlYWR5Pydob3VyZ2xhc3NfZW1wdHknOidob3VyZ2xhc3NfZnVsbCdcclxuICAgIHRoaXMucmVhZHlTdGF0ZVRvb2xUaXA9dGhpcy5fcmVhZHk/J0F1ZGlvIHByb2Nlc3NpbmcgYW5kIHVwbG9hZCBkb25lLiBZb3UgY2FuIGxlYXZlIHRoZSBwYWdlIHdpdGhvdXQgZGF0YSBsb3NzLic6J1BsZWFzZSB3YWl0IHVudGlsIGF1ZGlvIHByb2Nlc3NpbmcgYW5kIHVwbG9hZCBoYXZlIGZpbmlzaGVkLiBQbGVhc2UgZG8gbm90IGxlYXZlIHRoZSBwYWdlLidcclxuICB9XHJcblxyXG4gIGdldCByZWFkeSgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5fcmVhZHlcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJjb250cm9scGFuZWwnLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiAqbmdJZj1cIiFzY3JlZW5Yc1wiIHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvd1wiID5cclxuICAgICA8YXBwLXNwcnN0YXR1c2Rpc3BsYXkgc3R5bGU9XCJmbGV4OjAgMCAwXCIgW3N0YXR1c01zZ109XCJzdGF0dXNNc2dcIiBbc3RhdHVzQWxlcnRUeXBlXT1cInN0YXR1c0FsZXJ0VHlwZVwiIFtzdGF0dXNXYWl0aW5nXT1cInN0YXR1c1dhaXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgPGFwcC1zcHJ0cmFuc3BvcnQgc3R5bGU9XCJmbGV4OjEwIDAgMFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFthY3Rpb25zXT1cInRyYW5zcG9ydEFjdGlvbnNcIiBbbmF2aWdhdGlvbkVuYWJsZWRdPVwibmF2aWdhdGlvbkVuYWJsZWRcIj48L2FwcC1zcHJ0cmFuc3BvcnQ+XHJcbiAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIHN0eWxlPVwiZmxleDowIDAgMFwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgW3JlYWR5XT1cIl9yZWFkeVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzY3JlZW5Yc1wiIHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IGNvbHVtblwiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvd1wiIGNsYXNzPVwiZmxleEZpbGxcIiA+XHJcbiAgICAgICA8YXBwLXNwcnN0YXR1c2Rpc3BsYXkgc3R5bGU9XCJmbGV4OjEwIDAgMFwiIFtzdGF0dXNNc2ddPVwic3RhdHVzTXNnXCIgW3N0YXR1c0FsZXJ0VHlwZV09XCJzdGF0dXNBbGVydFR5cGVcIiBbc3RhdHVzV2FpdGluZ109XCJzdGF0dXNXYWl0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIHN0eWxlPVwiZmxleDowIDAgMFwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwidXBsb2FkU3RhdHVzXCIgW2F3YWl0TmV3VXBsb2FkXT1cInByb2Nlc3NpbmdcIj48L2FwcC11cGxvYWRzdGF0dXM+XHJcbiAgICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yIFtyZWFkeV09XCJfcmVhZHlcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGFwcC1zcHJ0cmFuc3BvcnQgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2FjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiIFtuYXZpZ2F0aW9uRW5hYmxlZF09XCJuYXZpZ2F0aW9uRW5hYmxlZFwiPjwvYXBwLXNwcnRyYW5zcG9ydD5cclxuXHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlczogW2BkaXYge1xyXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICBtaW4taGVpZ2h0OiBtaW4tY29udGVudDsgLyogaW1wb3J0YW50ICovXHJcbiAgfWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sUGFuZWwgZXh0ZW5kcyBSZXNwb25zaXZlQ29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKFN0YXR1c0Rpc3BsYXksIHsgc3RhdGljOiB0cnVlIH0pIHN0YXR1c0Rpc3BsYXkhOiBTdGF0dXNEaXNwbGF5O1xyXG4gIEBWaWV3Q2hpbGQoVHJhbnNwb3J0UGFuZWwsIHsgc3RhdGljOiB0cnVlIH0pIHRyYW5zcG9ydFBhbmVsITogVHJhbnNwb3J0UGFuZWw7XHJcblxyXG4gIEBJbnB1dCgpIHJlYWRvbmx5ITpib29sZWFuXHJcbiAgQElucHV0KCkgdHJhbnNwb3J0QWN0aW9ucyE6IFRyYW5zcG9ydEFjdGlvbnNcclxuICBASW5wdXQoKSBwcm9jZXNzaW5nPWZhbHNlXHJcbiAgQElucHV0KCkgc3RhdHVzTXNnITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c0FsZXJ0VHlwZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGF0dXNXYWl0aW5nITogYm9vbGVhbjtcclxuICBASW5wdXQoKSB1cGxvYWRTdGF0dXMhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdXBsb2FkUHJvZ3Jlc3MhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgY3VycmVudFJlY29yZGluZzogQXVkaW9CdWZmZXJ8IG51bGx8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBlbmFibGVVcGxvYWRSZWNvcmRpbmdzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uRW5hYmxlZD10cnVlO1xyXG5cclxuICBfcmVhZHk9dHJ1ZVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYnBvOkJyZWFrcG9pbnRPYnNlcnZlcixwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2cpIHtcclxuICAgIHN1cGVyKGJwbyk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgcmVhZHkocmVhZHk6Ym9vbGVhbil7XHJcbiAgICB0aGlzLl9yZWFkeT1yZWFkeVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJlYWR5KCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLl9yZWFkeVxyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=
@@ -1,30 +0,0 @@
1
- export class Item {
2
- constructor(_promptAsString, _training, _recording) {
3
- this._promptAsString = _promptAsString;
4
- this._training = _training;
5
- this._recording = _recording;
6
- this.recs = null;
7
- }
8
- itemDone() {
9
- let done = false;
10
- if (this.recs) {
11
- for (let rf of this.recs) {
12
- if (rf.recordingFileDone()) {
13
- done = true;
14
- break;
15
- }
16
- }
17
- }
18
- return done;
19
- }
20
- get promptAsString() {
21
- return this._promptAsString;
22
- }
23
- get training() {
24
- return this._training;
25
- }
26
- get recording() {
27
- return this._recording;
28
- }
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2l0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLElBQUk7SUFHYixZQUFvQixlQUF1QixFQUFVLFNBQWtCLEVBQVMsVUFBa0I7UUFBOUUsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUM5RixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxHQUFDLEtBQUssQ0FBQztRQUNmLElBQUcsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDO1lBQ1osS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUM7Z0JBQ3ZCLElBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUMsQ0FBQztvQkFDekIsSUFBSSxHQUFDLElBQUksQ0FBQztvQkFDVixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTcHJSZWNvcmRpbmdGaWxlfSBmcm9tIFwiLi4vcmVjb3JkaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSB7XHJcbiAgICByZWNzOiBBcnJheTxTcHJSZWNvcmRpbmdGaWxlPiB8IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcHJvbXB0QXNTdHJpbmc6IHN0cmluZywgcHJpdmF0ZSBfdHJhaW5pbmc6IGJvb2xlYW4scHJpdmF0ZSBfcmVjb3JkaW5nOmJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnJlY3MgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGl0ZW1Eb25lKCl7XHJcbiAgICAgIGxldCBkb25lPWZhbHNlO1xyXG4gICAgICBpZih0aGlzLnJlY3Mpe1xyXG4gICAgICAgIGZvcihsZXQgcmYgb2YgdGhpcy5yZWNzKXtcclxuICAgICAgICAgIGlmKHJmLnJlY29yZGluZ0ZpbGVEb25lKCkpe1xyXG4gICAgICAgICAgICBkb25lPXRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbXB0QXNTdHJpbmcoKTpzdHJpbmd7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdEFzU3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB0cmFpbmluZygpOmJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWluaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWNvcmRpbmcoKTpib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvcmRpbmc7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==