speechrecorderng 3.0.1 → 3.3.1
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.
- package/esm2020/lib/action/action.mjs +2 -1
- package/esm2020/lib/audio/array_audio_buffer.mjs +65 -2
- package/esm2020/lib/audio/array_audio_buffer_input_stream.mjs +2 -2
- package/esm2020/lib/audio/array_audio_buffer_random_access_stream.mjs +16 -0
- package/esm2020/lib/audio/audio_data_holder.mjs +203 -48
- package/esm2020/lib/audio/audio_display.mjs +10 -34
- package/esm2020/lib/audio/audio_player.mjs +18 -45
- package/esm2020/lib/audio/capture/capture.mjs +293 -69
- package/esm2020/lib/audio/dsp/level_measure.mjs +211 -88
- package/esm2020/lib/audio/impl/wavformat.mjs +1 -1
- package/esm2020/lib/audio/impl/wavreader.mjs +134 -0
- package/esm2020/lib/audio/impl/wavwriter.mjs +10 -9
- package/esm2020/lib/audio/inddb_audio_buffer.mjs +508 -0
- package/esm2020/lib/audio/net_audio_buffer.mjs +297 -0
- package/esm2020/lib/audio/persistor.mjs +8 -2
- package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +15 -154
- package/esm2020/lib/audio/playback/audio_source_node.mjs +18 -0
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
- package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +167 -0
- package/esm2020/lib/audio/playback/net_audio_buffer_source_node.mjs +218 -0
- package/esm2020/lib/audio/playback/player.mjs +190 -171
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +35 -76
- package/esm2020/lib/audio/ui/audio_display_control.mjs +12 -24
- package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +14 -45
- package/esm2020/lib/audio/ui/audiosignal.mjs +333 -267
- package/esm2020/lib/audio/ui/container.mjs +40 -57
- package/esm2020/lib/audio/ui/livelevel.mjs +53 -52
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +5 -19
- package/esm2020/lib/audio/ui/sonagram.mjs +386 -339
- package/esm2020/lib/db/inddb.mjs +120 -0
- package/esm2020/lib/io/BinaryReader.mjs +85 -0
- package/esm2020/lib/io/stream.mjs +101 -1
- package/esm2020/lib/net/uploader.mjs +111 -5
- package/esm2020/lib/recorder_component.mjs +59 -1
- package/esm2020/lib/speechrecorder/project/project.mjs +10 -1
- package/esm2020/lib/speechrecorder/project/project.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/recording.mjs +19 -6
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +213 -0
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +724 -54
- package/esm2020/lib/speechrecorder/script/script.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +358 -184
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +181 -28
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +47 -129
- package/esm2020/lib/speechrecorder/session/item.mjs +13 -1
- package/esm2020/lib/speechrecorder/session/progress.mjs +26 -55
- package/esm2020/lib/speechrecorder/session/prompting.mjs +33 -176
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +6 -6
- package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +10 -10
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +92 -55
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +9 -13
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -18
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +10 -36
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +10 -37
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +80 -56
- package/esm2020/lib/speechrecorder/session/session.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +409 -165
- package/esm2020/lib/speechrecorder/session/warning_bar.mjs +6 -29
- package/esm2020/lib/speechrecorder/spruploader.mjs +3 -3
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +6 -41
- package/esm2020/lib/speechrecorderng.component.mjs +42 -31
- package/esm2020/lib/speechrecorderng.module.mjs +5 -5
- package/esm2020/lib/spr.config.mjs +3 -3
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/canvas_layer_comp.mjs +3 -3
- package/esm2020/lib/ui/message_dialog.mjs +7 -7
- package/esm2020/lib/ui/recordingitem_display.mjs +26 -59
- package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +3 -3
- package/esm2020/lib/utils/ua-parser.mjs +28 -4
- package/esm2020/lib/utils/utils.mjs +29 -1
- package/fesm2015/speechrecorderng.mjs +12675 -9136
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +11580 -8050
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/{speechrecorderng.d.ts → index.d.ts} +0 -0
- package/lib/audio/array_audio_buffer.d.ts +17 -1
- package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -0
- package/lib/audio/audio_data_holder.d.ts +69 -14
- package/lib/audio/audio_display.d.ts +1 -1
- package/lib/audio/audio_player.d.ts +3 -7
- package/lib/audio/capture/capture.d.ts +24 -4
- package/lib/audio/dsp/level_measure.d.ts +2 -23
- package/lib/audio/impl/wavformat.d.ts +3 -3
- package/lib/audio/impl/wavreader.d.ts +16 -0
- package/lib/audio/impl/wavwriter.d.ts +1 -4
- package/lib/audio/inddb_audio_buffer.d.ts +68 -0
- package/lib/audio/net_audio_buffer.d.ts +59 -0
- package/lib/audio/persistor.d.ts +3 -9
- package/lib/audio/playback/array_audio_buffer_source_node.d.ts +2 -8
- package/lib/audio/playback/audio_source_node.d.ts +10 -0
- package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -0
- package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -0
- package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -0
- package/lib/audio/playback/player.d.ts +19 -16
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +3 -3
- package/lib/audio/ui/audio_display_control.d.ts +3 -6
- package/lib/audio/ui/audio_display_scroll_pane.d.ts +1 -1
- package/lib/audio/ui/audiosignal.d.ts +4 -3
- package/lib/audio/ui/container.d.ts +1 -1
- package/lib/audio/ui/livelevel.d.ts +11 -4
- package/lib/audio/ui/scroll_pane_horizontal.d.ts +1 -1
- package/lib/audio/ui/sonagram.d.ts +4 -3
- package/lib/db/inddb.d.ts +21 -0
- package/lib/io/BinaryReader.d.ts +18 -0
- package/lib/io/stream.d.ts +18 -0
- package/lib/net/uploader.d.ts +20 -2
- package/lib/recorder_component.d.ts +5 -0
- package/lib/speechrecorder/project/project.d.ts +9 -0
- package/lib/speechrecorder/recording.d.ts +7 -2
- package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -0
- package/lib/speechrecorder/recordings/recordings.service.d.ts +21 -6
- package/lib/speechrecorder/session/audiorecorder.d.ts +7 -18
- package/lib/speechrecorder/session/basicrecorder.d.ts +28 -4
- package/lib/speechrecorder/session/controlpanel.d.ts +7 -7
- package/lib/speechrecorder/session/item.d.ts +1 -0
- package/lib/speechrecorder/session/progress.d.ts +2 -1
- package/lib/speechrecorder/session/prompting.d.ts +5 -5
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +1 -1
- package/lib/speechrecorder/session/recording_list.d.ts +2 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +4 -5
- package/lib/speechrecorder/session/session_finished_dialog.d.ts +1 -1
- package/lib/speechrecorder/session/sessionmanager.d.ts +10 -10
- package/lib/speechrecorder/session/warning_bar.d.ts +1 -1
- package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +1 -1
- package/lib/speechrecorderng.component.d.ts +2 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/message_dialog.d.ts +1 -1
- package/lib/ui/recordingitem_display.d.ts +3 -2
- package/lib/utils/scrollIntoViewToBottom.d.ts +1 -1
- package/lib/utils/ua-parser.d.ts +4 -1
- package/lib/utils/utils.d.ts +6 -0
- package/package.json +15 -15
- package/esm2020/lib/math/utils.mjs +0 -14
- package/esm2020/lib/utils/css_utils.mjs +0 -7
- package/lib/math/utils.d.ts +0 -3
- package/lib/utils/css_utils.d.ts +0 -3
|
@@ -30,9 +30,9 @@ export class CanvasLayerComponent {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
34
|
-
CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
33
|
+
CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CanvasLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
34
|
+
CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: CanvasLayerComponent, ngImport: i0 });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CanvasLayerComponent, decorators: [{
|
|
36
36
|
type: Directive
|
|
37
37
|
}], ctorParameters: function () { return []; } });
|
|
38
38
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzX2xheWVyX2NvbXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdWkvY2FudmFzX2xheWVyX2NvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUcxQyxNQUFNLE9BQWdCLG9CQUFvQjtJQU14QztRQUpVLFdBQU0sR0FBZ0IsSUFBSSxDQUFDO1FBTW5DLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFDLElBQUksS0FBSyxFQUFxQixDQUFDO0lBQ25ELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxRQUFlO1FBQ3RDLElBQUksUUFBUSxHQUFDLFFBQVEsQ0FBQztRQUNwQixJQUFHLElBQUksQ0FBQyxNQUFNLEVBQUM7WUFDWCxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0Q7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsU0FBZ0I7UUFDdEMsSUFBSSxRQUFRLEdBQUMsU0FBUyxDQUFDO1FBQ3ZCLElBQUcsSUFBSSxDQUFDLE1BQU0sRUFBQztZQUNiLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxRDtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUFtQjtRQUVwQyxJQUFHLElBQUksQ0FBQyxNQUFNLEVBQUM7WUFDYixPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEc7YUFBSTtZQUNILE9BQU8sVUFBVSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7a0hBbkNtQixvQkFBb0I7c0dBQXBCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQUR6QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQb3NpdGlvbixEaW1lbnNpb24sIFJlY3RhbmdsZX0gZnJvbSBcIi4uL21hdGgvMmQvZ2VvbWV0cnlcIjtcclxuaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2FudmFzTGF5ZXJDb21wb25lbnR7XHJcblxyXG4gIHByb3RlY3RlZCBib3VuZHM6UmVjdGFuZ2xlfG51bGw9bnVsbDtcclxuICBwcm90ZWN0ZWQgdmlydHVhbERpbWVuc2lvbiE6RGltZW5zaW9uO1xyXG4gIHByb3RlY3RlZCBjYW52YXNMYXllcnM6QXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3Rvcigpe1xyXG5cclxuICAgIC8vIFRPRE8gbWFrZSBjbGVhciB0aGF0IGZpcnN0IGVsZW1lbnQgaXMgYmFja2dyb3VuZCBjYW52YXNcclxuICAgIHRoaXMuY2FudmFzTGF5ZXJzPW5ldyBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4oKTtcclxuICB9XHJcblxyXG4gIHRvWFZpZXdQb3J0UGl4ZWxQb3NpdGlvbih2aXJ0dWFsWDpudW1iZXIpe1xyXG4gICAgbGV0IHBpeGVsUG9zPXZpcnR1YWxYO1xyXG4gICAgICBpZih0aGlzLmJvdW5kcyl7XHJcbiAgICAgICAgICBwaXhlbFBvcz1NYXRoLnJvdW5kKHZpcnR1YWxYLXRoaXMuYm91bmRzLnBvc2l0aW9uLmxlZnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwaXhlbFBvcztcclxuICB9XHJcblxyXG4gIHRvWFZpcnR1YWxQaXhlbFBvc2l0aW9uKHZpZXdQb3J0WDpudW1iZXIpe1xyXG4gICAgbGV0IHBpeGVsUG9zPXZpZXdQb3J0WDtcclxuICAgIGlmKHRoaXMuYm91bmRzKXtcclxuICAgICAgcGl4ZWxQb3M9TWF0aC5yb3VuZCh2aWV3UG9ydFgrdGhpcy5ib3VuZHMucG9zaXRpb24ubGVmdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGl4ZWxQb3M7XHJcbiAgfVxyXG5cclxuICB0b1ZpZXdQb3J0UG9zaXRpb24odmlydHVhbFBvczpQb3NpdGlvbik6UG9zaXRpb257XHJcblxyXG4gICAgaWYodGhpcy5ib3VuZHMpe1xyXG4gICAgICByZXR1cm4gbmV3IFBvc2l0aW9uKHZpcnR1YWxQb3MubGVmdC10aGlzLmJvdW5kcy5wb3NpdGlvbi5sZWZ0LHZpcnR1YWxQb3MudG9wLXRoaXMuYm91bmRzLnBvc2l0aW9uLnRvcCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHZpcnR1YWxQb3M7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
|
|
@@ -2,9 +2,9 @@ import { Component, Inject } from "@angular/core";
|
|
|
2
2
|
import { MAT_DIALOG_DATA } from "@angular/material/dialog";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/material/dialog";
|
|
5
|
-
import * as i2 from "@angular/
|
|
6
|
-
import * as i3 from "@angular/material/
|
|
7
|
-
import * as i4 from "@angular/
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/material/icon";
|
|
7
|
+
import * as i4 from "@angular/material/button";
|
|
8
8
|
export class MessageDialog {
|
|
9
9
|
constructor(dialogRef, data) {
|
|
10
10
|
this.dialogRef = dialogRef;
|
|
@@ -14,8 +14,8 @@ export class MessageDialog {
|
|
|
14
14
|
this.dialogRef.close();
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
18
|
-
MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
17
|
+
MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
18
|
+
MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: MessageDialog, selector: "msg-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon *ngIf="data.type==='error'" [style.color]="'red'">error</mat-icon>
|
|
19
19
|
<mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
|
|
20
20
|
<div mat-dialog-content>
|
|
21
21
|
|
|
@@ -26,8 +26,8 @@ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
26
26
|
<div mat-dialog-actions>
|
|
27
27
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
28
28
|
</div>
|
|
29
|
-
`, isInline: true,
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
29
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.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"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, decorators: [{
|
|
31
31
|
type: Component,
|
|
32
32
|
args: [{
|
|
33
33
|
selector: 'msg-dialog',
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core";
|
|
2
2
|
import { LevelBar } from "../audio/ui/livelevel";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/
|
|
5
|
-
import * as i2 from "@angular/
|
|
6
|
-
import * as i3 from "@angular/
|
|
7
|
-
import * as i4 from "@angular/
|
|
8
|
-
import * as i5 from "
|
|
9
|
-
import * as i6 from "
|
|
4
|
+
import * as i1 from "@angular/flex-layout/extended";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/material/icon";
|
|
7
|
+
import * as i4 from "@angular/material/tooltip";
|
|
8
|
+
import * as i5 from "@angular/flex-layout/flex";
|
|
9
|
+
import * as i6 from "../audio/ui/livelevel";
|
|
10
10
|
export const MIN_DB_LEVEL = -40.0;
|
|
11
11
|
export const DEFAULT_WARN_DB_LEVEL = -2;
|
|
12
12
|
export class RecordingItemControls {
|
|
@@ -22,6 +22,7 @@ export class RecordingItemControls {
|
|
|
22
22
|
this.agcString = 'n/a';
|
|
23
23
|
this.onShowRecordingDetails = new EventEmitter();
|
|
24
24
|
this.onDownloadRecording = new EventEmitter();
|
|
25
|
+
this.disableAudioDetails = true;
|
|
25
26
|
this.audioLoaded = false;
|
|
26
27
|
this.playStartEnabled = false;
|
|
27
28
|
this.playStopEnabled = false;
|
|
@@ -62,8 +63,8 @@ export class RecordingItemControls {
|
|
|
62
63
|
// this.status = 'ERROR';
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
|
-
RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
66
|
-
RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
66
|
+
RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
67
|
+
RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: { audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", peakDbLvl: "peakDbLvl", agc: "agc", disableAudioDetails: "disableAudioDetails", audioLoaded: "audioLoaded", playStartAction: "playStartAction", playStopAction: "playStopAction", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, ngImport: i0, template: `
|
|
67
68
|
<button matTooltip="Start playback" (click)="playStartAction?.perform()"
|
|
68
69
|
[disabled]="playStartAction?.disabled"
|
|
69
70
|
[style.color]="playStartAction?.disabled ? 'grey' : 'green'">
|
|
@@ -74,23 +75,21 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
74
75
|
[style.color]="playStopAction?.disabled ? 'grey' : 'yellow'">
|
|
75
76
|
<mat-icon>stop</mat-icon>
|
|
76
77
|
</button>
|
|
77
|
-
<button fxHide.xs matTooltip="Toggle detailed audio display" [disabled]="!audioLoaded"
|
|
78
|
+
<button fxHide.xs matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
|
|
78
79
|
(click)="showRecordingDetails()">
|
|
79
80
|
<mat-icon>{{(audioSignalCollapsed) ? "expand_less" : "expand_more"}}</mat-icon>
|
|
80
81
|
</button>
|
|
81
|
-
<button matTooltip="Download current recording" *ngIf="enableDownload" [disabled]="!audioLoaded"
|
|
82
|
+
<button matTooltip="Download current recording" *ngIf="enableDownload" [disabled]="disableAudioDetails || !audioLoaded"
|
|
82
83
|
(click)="downloadRecording()">
|
|
83
84
|
<mat-icon>file_download</mat-icon>
|
|
84
85
|
</button>
|
|
85
86
|
<div style="min-width: 14ch;padding:2px"><table style="border-style: none"><tr><td>Peak:</td><td><span matTooltip="Peak level"
|
|
86
87
|
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
|
|
87
88
|
<tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
|
|
88
|
-
`, isInline: true, styles: [":host{flex:0;width:100%;background:darkgray;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"],
|
|
89
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
89
|
+
`, isInline: true, styles: [":host{flex:0;width:100%;background:darkgray;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"], dependencies: [{ kind: "directive", type: i1.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"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }] });
|
|
90
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, decorators: [{
|
|
90
91
|
type: Component,
|
|
91
|
-
args: [{
|
|
92
|
-
selector: 'spr-recordingitemcontrols',
|
|
93
|
-
template: `
|
|
92
|
+
args: [{ selector: 'spr-recordingitemcontrols', template: `
|
|
94
93
|
<button matTooltip="Start playback" (click)="playStartAction?.perform()"
|
|
95
94
|
[disabled]="playStartAction?.disabled"
|
|
96
95
|
[style.color]="playStartAction?.disabled ? 'grey' : 'green'">
|
|
@@ -101,40 +100,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
101
100
|
[style.color]="playStopAction?.disabled ? 'grey' : 'yellow'">
|
|
102
101
|
<mat-icon>stop</mat-icon>
|
|
103
102
|
</button>
|
|
104
|
-
<button fxHide.xs matTooltip="Toggle detailed audio display" [disabled]="!audioLoaded"
|
|
103
|
+
<button fxHide.xs matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
|
|
105
104
|
(click)="showRecordingDetails()">
|
|
106
105
|
<mat-icon>{{(audioSignalCollapsed) ? "expand_less" : "expand_more"}}</mat-icon>
|
|
107
106
|
</button>
|
|
108
|
-
<button matTooltip="Download current recording" *ngIf="enableDownload" [disabled]="!audioLoaded"
|
|
107
|
+
<button matTooltip="Download current recording" *ngIf="enableDownload" [disabled]="disableAudioDetails || !audioLoaded"
|
|
109
108
|
(click)="downloadRecording()">
|
|
110
109
|
<mat-icon>file_download</mat-icon>
|
|
111
110
|
</button>
|
|
112
111
|
<div style="min-width: 14ch;padding:2px"><table style="border-style: none"><tr><td>Peak:</td><td><span matTooltip="Peak level"
|
|
113
112
|
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
|
|
114
113
|
<tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
|
|
115
|
-
`,
|
|
116
|
-
styles: [`:host {
|
|
117
|
-
flex: 0; /* only required vertical space */
|
|
118
|
-
width: 100%;
|
|
119
|
-
background: darkgray;
|
|
120
|
-
padding: 4px;
|
|
121
|
-
box-sizing: border-box;
|
|
122
|
-
height: 100%;
|
|
123
|
-
|
|
124
|
-
display: flex; /* flex container: left level bar, right decimal peak level value */
|
|
125
|
-
flex-direction: row;
|
|
126
|
-
flex-wrap: nowrap; /* wrap could completely destroy the layout */
|
|
127
|
-
}`, `span {
|
|
128
|
-
flex: 0;
|
|
129
|
-
font-weight: bold;
|
|
130
|
-
display: inline-block;
|
|
131
|
-
white-space: nowrap;
|
|
132
|
-
box-sizing: border-box;
|
|
133
|
-
}`, `
|
|
134
|
-
button {
|
|
135
|
-
touch-action: manipulation;
|
|
136
|
-
}`]
|
|
137
|
-
}]
|
|
114
|
+
`, styles: [":host{flex:0;width:100%;background:darkgray;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"] }]
|
|
138
115
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
|
|
139
116
|
type: Input
|
|
140
117
|
}], enableDownload: [{
|
|
@@ -147,6 +124,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
147
124
|
type: Output
|
|
148
125
|
}], onDownloadRecording: [{
|
|
149
126
|
type: Output
|
|
127
|
+
}], disableAudioDetails: [{
|
|
128
|
+
type: Input
|
|
150
129
|
}], audioLoaded: [{
|
|
151
130
|
type: Input
|
|
152
131
|
}], playStartAction: [{
|
|
@@ -228,33 +207,21 @@ export class RecordingItemDisplay {
|
|
|
228
207
|
this.changeDetectorRef.detectChanges();
|
|
229
208
|
}
|
|
230
209
|
}
|
|
231
|
-
RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
232
|
-
RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
210
|
+
RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
211
|
+
RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingItemDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", agc: "agc", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], ngImport: i0, template: `
|
|
233
212
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
234
213
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
|
|
235
214
|
<spr-recordingitemcontrols fxFlex="0 0 0" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
|
|
236
215
|
</div>
|
|
237
|
-
`, isInline: true, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n"],
|
|
238
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
216
|
+
`, isInline: true, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i5.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"] }, { kind: "directive", type: i5.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"] }, { kind: "directive", type: i1.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }] });
|
|
217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, decorators: [{
|
|
239
218
|
type: Component,
|
|
240
|
-
args: [{
|
|
241
|
-
selector: 'spr-recordingitemdisplay',
|
|
242
|
-
template: `
|
|
219
|
+
args: [{ selector: 'spr-recordingitemdisplay', template: `
|
|
243
220
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
244
221
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
|
|
245
222
|
<spr-recordingitemcontrols fxFlex="0 0 0" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
|
|
246
223
|
</div>
|
|
247
|
-
`,
|
|
248
|
-
styles: [`div {
|
|
249
|
-
width: 100%;
|
|
250
|
-
background: darkgray;
|
|
251
|
-
padding: 4px;
|
|
252
|
-
box-sizing: border-box;
|
|
253
|
-
flex-wrap: nowrap; /* wrap could completely destroy the layout */
|
|
254
|
-
}`, `audio-levelbar {
|
|
255
|
-
box-sizing: border-box;
|
|
256
|
-
}`]
|
|
257
|
-
}]
|
|
224
|
+
`, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n"] }]
|
|
258
225
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
|
|
259
226
|
type: ViewChild,
|
|
260
227
|
args: [LevelBar, { static: true }]
|
|
@@ -279,4 +246,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
279
246
|
}], displayLevelInfos: [{
|
|
280
247
|
type: Input
|
|
281
248
|
}] } });
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5naXRlbV9kaXNwbGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3VpL3JlY29yZGluZ2l0ZW1fZGlzcGxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ2dCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFDaEYsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFJL0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBa0R4QyxNQUFNLE9BQU8scUJBQXFCO0lBMENoQyxZQUFvQixHQUFlLEVBQVUsaUJBQW9DO1FBQTdELFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBeENqRixPQUFFLEdBQXNCLElBQUksQ0FBQztRQUNwQix5QkFBb0IsR0FBVSxJQUFJLENBQUM7UUFFbkMsbUJBQWMsR0FBVSxLQUFLLENBQUM7UUFFOUIsY0FBUyxHQUFHLFlBQVksQ0FBQztRQUVsQyx1QkFBa0IsR0FBb0IsSUFBSSxDQUFDO1FBRTNDLFNBQUksR0FBd0IsU0FBUyxDQUFDO1FBQ3RDLGNBQVMsR0FBQyxLQUFLLENBQUM7UUFlTiwyQkFBc0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0RSx3QkFBbUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwRSxnQkFBVyxHQUFDLEtBQUssQ0FBQztRQUkzQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDaEIsa0JBQWEsR0FBYyxJQUFJLENBQUM7UUFFaEMsY0FB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b21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQge0xldmVsSW5mbywgTGV2ZWxJbmZvcywgTGV2ZWxMaXN0ZW5lcn0gZnJvbSBcIi4uL2F1ZGlvL2RzcC9sZXZlbF9tZWFzdXJlXCI7XHJcbmltcG9ydCB7TGV2ZWxCYXJ9IGZyb20gXCIuLi9hdWRpby91aS9saXZlbGV2ZWxcIjtcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi9hY3Rpb24vYWN0aW9uXCI7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IE1JTl9EQl9MRVZFTCA9IC00MC4wO1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9XQVJOX0RCX0xFVkVMID0gLTI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Nwci1yZWNvcmRpbmdpdGVtY29udHJvbHMnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGJ1dHRvbiBtYXRUb29sdGlwPVwiU3RhcnQgcGxheWJhY2tcIiAoY2xpY2spPVwicGxheVN0YXJ0QWN0aW9uPy5wZXJmb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBsYXlTdGFydEFjdGlvbj8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInBsYXlTdGFydEFjdGlvbj8uZGlzYWJsZWQgPyAnZ3JleScgOiAnZ3JlZW4nXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJTdG9wIHBsYXliYWNrXCIgKGNsaWNrKT1cInBsYXlTdG9wQWN0aW9uPy5wZXJmb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBsYXlTdG9wQWN0aW9uPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwicGxheVN0b3BBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ3llbGxvdydcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnN0b3A8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gZnhIaWRlLnhzIG1hdFRvb2x0aXA9XCJUb2dnbGUgZGV0YWlsZWQgYXVkaW8gZGlzcGxheVwiIFtkaXNhYmxlZF09XCIhYXVkaW9Mb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dSZWNvcmRpbmdEZXRhaWxzKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnt7KGF1ZGlvU2lnbmFsQ29sbGFwc2VkKSA/IFwiZXhwYW5kX2xlc3NcIiA6IFwiZXhwYW5kX21vcmVcIn19PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJEb3dubG9hZCBjdXJyZW50IHJlY29yZGluZ1wiICpuZ0lmPVwiZW5hYmxlRG93bmxvYWRcIiBbZGlzYWJsZWRdPVwiIWF1ZGlvTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFJlY29yZGluZygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwibWluLXdpZHRoOiAxNGNoO3BhZGRpbmc6MnB4XCI+PHRhYmxlIHN0eWxlPVwiYm9yZGVyLXN0eWxlOiBub25lXCI+PHRyPjx0ZD5QZWFrOjwvdGQ+PHRkPjxzcGFuIG1hdFRvb2x0aXA9XCJQZWFrIGxldmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIihwZWFrRGJMdmwgPiB3YXJuRGJMZXZlbCk/J3JlZCc6J2JsYWNrJ1wiPnt7cGVha0RiTHZsIHwgbnVtYmVyOicxLjEtMSd9fSBkQiA8L3NwYW4+PC90ZD48L3RyPlxyXG4gICAgICAgICAgPHRyICpuZ0lmPVwiX2FnY1wiPjx0ZD5BR0M6PC90ZD48dGQ+PHNwYW4gbWF0VG9vbHRpcD1cIkF1dG8gZ2FpbiBjb250cm9sXCI+e3thZ2NTdHJpbmd9fTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5cclxuICAgIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgICAgICBmbGV4OiAwOyAvKiBvbmx5IHJlcXVpcmVkIHZlcnRpY2FsIHNwYWNlICovXHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgYmFja2dyb3VuZDogZGFya2dyYXk7XHJcbiAgICAgICAgcGFkZGluZzogNHB4O1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG5cclxuICAgICAgICBkaXNwbGF5OiBmbGV4OyAvKiBmbGV4IGNvbnRhaW5lcjogbGVmdCBsZXZlbCBiYXIsIHJpZ2h0IGRlY2ltYWwgcGVhayBsZXZlbCB2YWx1ZSAqL1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7IC8qIHdyYXAgY291bGQgY29tcGxldGVseSBkZXN0cm95IHRoZSBsYXlvdXQgKi9cclxuICAgIH1gLCBgc3BhbiB7XHJcbiAgICAgICAgZmxleDogMDtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfWAsYFxyXG4gICAgIGJ1dHRvbiB7XHJcbiAgICAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcclxuICAgICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRpbmdJdGVtQ29udHJvbHMgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBjZTogSFRNTERpdkVsZW1lbnR8bnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIGF1ZGlvU2lnbmFsQ29sbGFwc2VkOiBib29sZWFuPXRydWU7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheUF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGx8dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGVuYWJsZURvd25sb2FkOiBib29sZWFuPWZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBwZWFrRGJMdmwgPSBNSU5fREJfTEVWRUw7XHJcblxyXG4gIF9kaXNwbGF5TGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGw9bnVsbDtcclxuXHJcbiAgX2FnYzpib29sZWFufG51bGx8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICBhZ2NTdHJpbmc9J24vYSc7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBhZ2MoYWdjOmJvb2xlYW58bnVsbHx1bmRlZmluZWQpe1xyXG4gICAgdGhpcy5fYWdjPWFnYztcclxuICAgIGlmKHRoaXMuX2FnYz09PXVuZGVmaW5lZCB8fCB0aGlzLl9hZ2M9PT1udWxsKXtcclxuICAgICAgdGhpcy5hZ2NTdHJpbmc9J24vYSc7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgaWYodGhpcy5fYWdjPT09dHJ1ZSl7XHJcbiAgICAgICAgdGhpcy5hZ2NTdHJpbmc9J09uJztcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5hZ2NTdHJpbmc9J09mZic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBvblNob3dSZWNvcmRpbmdEZXRhaWxzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRG93bmxvYWRSZWNvcmRpbmc6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQElucHV0KCkgYXVkaW9Mb2FkZWQ9ZmFsc2U7XHJcbiAgLy9ASW5wdXQoKSBjb250cm9sQXVkaW9QbGF5ZXI6IEF1ZGlvUGxheWVyO1xyXG4gIEBJbnB1dCgpIHBsYXlTdGFydEFjdGlvbjpBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHBsYXlTdG9wQWN0aW9uOkFjdGlvbjx2b2lkPnx1bmRlZmluZWQ7XHJcbiAgcGxheVN0YXJ0RW5hYmxlZCA9IGZhbHNlO1xyXG4gIHBsYXlTdG9wRW5hYmxlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgdXBkYXRlVGltZXJJZDogbnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcclxuXHJcbiAgd2FybkRiTGV2ZWwgPSBERUZBVUxUX1dBUk5fREJfTEVWRUw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2hvd1JlY29yZGluZ0RldGFpbHMoKSB7XHJcbiAgICB0aGlzLm9uU2hvd1JlY29yZGluZ0RldGFpbHMuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLm9uRG93bmxvYWRSZWNvcmRpbmcuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jZSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXNwbGF5TGV2ZWxJbmZvcyhsZXZlbEluZm9zOiBMZXZlbEluZm9zIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fZGlzcGxheUxldmVsSW5mb3MgPSBsZXZlbEluZm9zO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IoKSB7XHJcbiAgICAvLyB0aGlzLnN0YXR1cyA9ICdFUlJPUic7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzcHItcmVjb3JkaW5naXRlbWRpc3BsYXknLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0LnhzPVwiY29sdW1uXCIgW25nU3R5bGVdPVwieydoZWlnaHQucHgnOjEwMCwnbWluLWhlaWdodC5weCc6IDEwMH1cIiBbbmdTdHlsZS54c109XCJ7J2hlaWdodC5weCc6MTI1LCdtaW4taGVpZ2h0LnB4JzogMTI1fVwiPlxyXG4gICAgICAgIDxhdWRpby1sZXZlbGJhciBmeEZsZXg9XCIxIDAgMVwiIFtzdHJlYW1pbmdNb2RlXT1cInN0cmVhbWluZ01vZGVcIiBbZGlzcGxheUxldmVsSW5mb3NdPVwiX2Rpc3BsYXlMZXZlbEluZm9zXCI+PC9hdWRpby1sZXZlbGJhcj5cclxuICAgICAgICA8c3ByLXJlY29yZGluZ2l0ZW1jb250cm9scyBmeEZsZXg9XCIwIDAgMFwiIFthdWRpb0xvYWRlZF09XCJkaXNwbGF5QXVkaW9CdWZmZXIhPT1udWxsXCIgW3BsYXlTdGFydEFjdGlvbl09XCJwbGF5U3RhcnRBY3Rpb25cIiBbcGxheVN0b3BBY3Rpb25dPVwicGxheVN0b3BBY3Rpb25cIiBbcGVha0RiTHZsXT1cInBlYWtEYkx2bFwiIFthZ2NdPVwiX2FnY1wiIChvblNob3dSZWNvcmRpbmdEZXRhaWxzKT1cIm9uU2hvd1JlY29yZGluZ0RldGFpbHMuZW1pdCgpXCI+PC9zcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIGAsXHJcbiAgICBzdHlsZXM6IFtgZGl2IHtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZ3JheTtcclxuICAgICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsgLyogd3JhcCBjb3VsZCBjb21wbGV0ZWx5IGRlc3Ryb3kgdGhlIGxheW91dCAqL1xyXG4gICAgfWAsIGBhdWRpby1sZXZlbGJhciB7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIH1gXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0l0ZW1EaXNwbGF5IGltcGxlbWVudHMgTGV2ZWxMaXN0ZW5lciwgT25EZXN0cm95IHtcclxuXHJcbiAgICBjZTogSFRNTERpdkVsZW1lbnR8bnVsbD1udWxsO1xyXG4gICAgQFZpZXdDaGlsZChMZXZlbEJhciwgeyBzdGF0aWM6IHRydWUgfSkgbGl2ZUxldmVsITogTGV2ZWxCYXI7XHJcbiAgICBASW5wdXQoKSBzdHJlYW1pbmdNb2RlOiBib29sZWFuPWZhbHNlO1xyXG4gICAgQElucHV0KCkgYXVkaW9TaWduYWxDb2xsYXBzZWQ6IGJvb2xlYW49dHJ1ZTtcclxuICAgIHByaXZhdGUgX2Rpc3BsYXlBdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIgfCBudWxsfHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIGVuYWJsZURvd25sb2FkOiBib29sZWFuPWZhbHNlO1xyXG5cclxuICAgIHBlYWtEYkx2bCA9IE1JTl9EQl9MRVZFTDtcclxuXHJcbiAgICBfZGlzcGxheUxldmVsSW5mb3M6IExldmVsSW5mb3MgfCBudWxsPW51bGw7XHJcblxyXG4gICAgX2FnYzpib29sZWFufG51bGx8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICAgIGFnY1N0cmluZz0nbi9hJztcclxuXHJcbiAgICBASW5wdXQoKSBzZXQgYWdjKGFnYzpib29sZWFufG51bGx8dW5kZWZpbmVkKXtcclxuICAgICAgdGhpcy5fYWdjPWFnYztcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgb25TaG93UmVjb3JkaW5nRGV0YWlsczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIG9uRG93bmxvYWRSZWNvcmRpbmc6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvL0BJbnB1dCgpIGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXI7XHJcbiAgICBASW5wdXQoKSBwbGF5U3RhcnRBY3Rpb246QWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIHBsYXlTdG9wQWN0aW9uOkFjdGlvbjx2b2lkPnx1bmRlZmluZWQ7XHJcbiAgICBwbGF5U3RhcnRFbmFibGVkID0gZmFsc2U7XHJcbiAgICBwbGF5U3RvcEVuYWJsZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdXBkYXRlVGltZXJJZDogbnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xyXG5cclxuICAgIHdhcm5EYkxldmVsID0gREVGQVVMVF9XQVJOX0RCX0xFVkVMO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzcGxheUF1ZGlvQnVmZmVyKGRpc3BsYXlBdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIgfCBudWxsfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5QXVkaW9CdWZmZXIgPSBkaXNwbGF5QXVkaW9CdWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRpc3BsYXlBdWRpb0J1ZmZlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUF1ZGlvQnVmZmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dSZWNvcmRpbmdEZXRhaWxzKCkge1xyXG4gICAgICAgIHRoaXMub25TaG93UmVjb3JkaW5nRGV0YWlscy5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRSZWNvcmRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5vbkRvd25sb2FkUmVjb3JkaW5nLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jZSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgLy90aGlzLmNvbnRyb2xBdWRpb1BsYXllci5saXN0ZW5lcj10aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzcGxheUxldmVsSW5mb3MobGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5TGV2ZWxJbmZvcyA9IGxldmVsSW5mb3M7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNoYW5uZWxDb3VudChjaGFubmVsQ291bnQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmxpdmVMZXZlbC5jaGFubmVsQ291bnQgPSBjaGFubmVsQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gIHNldCBwbGF5RnJhbWVQb3NpdGlvbihwbGF5RnJhbWVQb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxpdmVMZXZlbC5wbGF5RnJhbWVQb3NpdGlvbj1wbGF5RnJhbWVQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gICAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pIHtcclxuICAgICAgICBsZXQgcGVha0RCVmFsID0gbGV2ZWxJbmZvLnBvd2VyTGV2ZWxEQigpO1xyXG4gICAgICAgIGlmICh0aGlzLnBlYWtEYkx2bCA8IHBlYWtEQlZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlYWtEYkx2bCA9IHBlYWtEQlZhbDtcclxuICAgICAgICAgICAgLy8gdGhlIGV2ZW50IGNvbWVzIGZyb20gb3V0c2lkZSBvZiBhbiBBbmd1bGFyIHpvbmVcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGl2ZUxldmVsLnVwZGF0ZShsZXZlbEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGVycm9yKCkge1xyXG4gICAgICAgIC8vIHRoaXMuc3RhdHVzID0gJ0VSUk9SJztcclxuICAgIH1cclxuXHJcbiAgICBzdHJlYW1GaW5pc2hlZCgpIHtcclxuICAgICAgICB0aGlzLmxpdmVMZXZlbC5zdHJlYW1GaW5pc2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMucGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5naXRlbV9kaXNwbGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3VpL3JlY29yZGluZ2l0ZW1fZGlzcGxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ2dCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFDaEYsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFJL0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBa0R4QyxNQUFNLE9BQU8scUJBQXFCO0lBMkNoQyxZQUFvQixHQUFlLEVBQVUsaUJBQW9DO1FBQTdELFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBekNqRixPQUFFLEdBQXNCLElBQUksQ0FBQztRQUNwQix5QkFBb0IsR0FBVSxJQUFJLENBQUM7UUFFbkMsbUJBQWMsR0FBVSxLQUFLLENBQUM7UUFFOUIsY0FBUyxHQUFHLFlBQVksQ0FBQztRQUVsQyx1QkFBa0IsR0FBb0IsSUFBSSxDQUFDO1FBRTNDLFNBQUksR0FBd0IsU0FBUyxDQUFDO1FBQ3RDLGNBQVMsR0FBQyxLQUFLLENBQUM7UUFlTiwyQkFBc0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0RSx3QkFBbUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwRSx3QkFBbUIsR0FBQyxJQUFJLENBQUM7UUFDekIsZ0JBQVcsR0FBQyxLQUFLLENBQUM7UUFJM0IscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGtC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aUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLO1FBQ0QseUJBQXlCO0lBQzdCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQyxDQUFDOztrSEFwR1Esb0JBQW9CO3NHQUFwQixvQkFBb0Isc2ZBR2xCLFFBQVEsOERBcEJUOzs7OztLQUtULDY2REFsRlEscUJBQXFCOzRGQThGckIsb0JBQW9CO2tCQW5CaEMsU0FBUzsrQkFDSSwwQkFBMEIsWUFDMUI7Ozs7O0tBS1Q7aUlBZXNDLFNBQVM7c0JBQS9DLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDNUIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFTTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSUksc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFHRSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBbUJGLGtCQUFrQjtzQkFEckIsS0FBSztnQkF1QkYsaUJBQWlCO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQge0xldmVsSW5mbywgTGV2ZWxJbmZvcywgTGV2ZWxMaXN0ZW5lcn0gZnJvbSBcIi4uL2F1ZGlvL2RzcC9sZXZlbF9tZWFzdXJlXCI7XHJcbmltcG9ydCB7TGV2ZWxCYXJ9IGZyb20gXCIuLi9hdWRpby91aS9saXZlbGV2ZWxcIjtcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi9hY3Rpb24vYWN0aW9uXCI7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IE1JTl9EQl9MRVZFTCA9IC00MC4wO1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9XQVJOX0RCX0xFVkVMID0gLTI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Nwci1yZWNvcmRpbmdpdGVtY29udHJvbHMnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGJ1dHRvbiBtYXRUb29sdGlwPVwiU3RhcnQgcGxheWJhY2tcIiAoY2xpY2spPVwicGxheVN0YXJ0QWN0aW9uPy5wZXJmb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBsYXlTdGFydEFjdGlvbj8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInBsYXlTdGFydEFjdGlvbj8uZGlzYWJsZWQgPyAnZ3JleScgOiAnZ3JlZW4nXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJTdG9wIHBsYXliYWNrXCIgKGNsaWNrKT1cInBsYXlTdG9wQWN0aW9uPy5wZXJmb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBsYXlTdG9wQWN0aW9uPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwicGxheVN0b3BBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ3llbGxvdydcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnN0b3A8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gZnhIaWRlLnhzIG1hdFRvb2x0aXA9XCJUb2dnbGUgZGV0YWlsZWQgYXVkaW8gZGlzcGxheVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQXVkaW9EZXRhaWxzIHx8ICFhdWRpb0xvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1JlY29yZGluZ0RldGFpbHMoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+e3soYXVkaW9TaWduYWxDb2xsYXBzZWQpID8gXCJleHBhbmRfbGVzc1wiIDogXCJleHBhbmRfbW9yZVwifX08L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0VG9vbHRpcD1cIkRvd25sb2FkIGN1cnJlbnQgcmVjb3JkaW5nXCIgKm5nSWY9XCJlbmFibGVEb3dubG9hZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQXVkaW9EZXRhaWxzIHx8ICFhdWRpb0xvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1pbi13aWR0aDogMTRjaDtwYWRkaW5nOjJweFwiPjx0YWJsZSBzdHlsZT1cImJvcmRlci1zdHlsZTogbm9uZVwiPjx0cj48dGQ+UGVhazo8L3RkPjx0ZD48c3BhbiBtYXRUb29sdGlwPVwiUGVhayBsZXZlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIocGVha0RiTHZsID4gd2FybkRiTGV2ZWwpPydyZWQnOidibGFjaydcIj57e3BlYWtEYkx2bCB8IG51bWJlcjonMS4xLTEnfX0gZEIgPC9zcGFuPjwvdGQ+PC90cj5cclxuICAgICAgICAgIDx0ciAqbmdJZj1cIl9hZ2NcIj48dGQ+QUdDOjwvdGQ+PHRkPjxzcGFuIG1hdFRvb2x0aXA9XCJBdXRvIGdhaW4gY29udHJvbFwiPnt7YWdjU3RyaW5nfX08L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+XHJcbiAgICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcbiAgICAgICAgZmxleDogMDsgLyogb25seSByZXF1aXJlZCB2ZXJ0aWNhbCBzcGFjZSAqL1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGJhY2tncm91bmQ6IGRhcmtncmF5O1xyXG4gICAgICAgIHBhZGRpbmc6IDRweDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuXHJcbiAgICAgICAgZGlzcGxheTogZmxleDsgLyogZmxleCBjb250YWluZXI6IGxlZnQgbGV2ZWwgYmFyLCByaWdodCBkZWNpbWFsIHBlYWsgbGV2ZWwgdmFsdWUgKi9cclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICAgIGZsZXgtd3JhcDogbm93cmFwOyAvKiB3cmFwIGNvdWxkIGNvbXBsZXRlbHkgZGVzdHJveSB0aGUgbGF5b3V0ICovXHJcbiAgICB9YCwgYHNwYW4ge1xyXG4gICAgICAgIGZsZXg6IDA7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIH1gLGBcclxuICAgICBidXR0b24ge1xyXG4gICAgICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XHJcbiAgICAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVjb3JkaW5nSXRlbUNvbnRyb2xzIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgY2U6IEhUTUxEaXZFbGVtZW50fG51bGw9bnVsbDtcclxuICBASW5wdXQoKSBhdWRpb1NpZ25hbENvbGxhcHNlZDogYm9vbGVhbj10cnVlO1xyXG4gIHByaXZhdGUgX2Rpc3BsYXlBdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIgfCBudWxsfHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBlbmFibGVEb3dubG9hZDogYm9vbGVhbj1mYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG5cclxuICBfZGlzcGxheUxldmVsSW5mb3M6IExldmVsSW5mb3MgfCBudWxsPW51bGw7XHJcblxyXG4gIF9hZ2M6Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgYWdjU3RyaW5nPSduL2EnO1xyXG5cclxuICBASW5wdXQoKSBzZXQgYWdjKGFnYzpib29sZWFufG51bGx8dW5kZWZpbmVkKXtcclxuICAgIHRoaXMuX2FnYz1hZ2M7XHJcbiAgICBpZih0aGlzLl9hZ2M9PT11bmRlZmluZWQgfHwgdGhpcy5fYWdjPT09bnVsbCl7XHJcbiAgICAgIHRoaXMuYWdjU3RyaW5nPSduL2EnO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGlmKHRoaXMuX2FnYz09PXRydWUpe1xyXG4gICAgICAgIHRoaXMuYWdjU3RyaW5nPSdPbic7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMuYWdjU3RyaW5nPSdPZmYnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25TaG93UmVjb3JkaW5nRGV0YWlsczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkRvd25sb2FkUmVjb3JkaW5nOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVBdWRpb0RldGFpbHM9dHJ1ZTtcclxuICBASW5wdXQoKSBhdWRpb0xvYWRlZD1mYWxzZTtcclxuICAvL0BJbnB1dCgpIGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXI7XHJcbiAgQElucHV0KCkgcGxheVN0YXJ0QWN0aW9uOkFjdGlvbjx2b2lkPnx1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgcGxheVN0b3BBY3Rpb246QWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBwbGF5U3RhcnRFbmFibGVkID0gZmFsc2U7XHJcbiAgcGxheVN0b3BFbmFibGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB1cGRhdGVUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xyXG5cclxuICB3YXJuRGJMZXZlbCA9IERFRkFVTFRfV0FSTl9EQl9MRVZFTDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzaG93UmVjb3JkaW5nRGV0YWlscygpIHtcclxuICAgIHRoaXMub25TaG93UmVjb3JkaW5nRGV0YWlscy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFJlY29yZGluZygpIHtcclxuICAgIHRoaXMub25Eb3dubG9hZFJlY29yZGluZy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNlID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpc3BsYXlMZXZlbEluZm9zKGxldmVsSW5mb3M6IExldmVsSW5mb3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5TGV2ZWxJbmZvcyA9IGxldmVsSW5mb3M7XHJcbiAgfVxyXG5cclxuICBlcnJvcigpIHtcclxuICAgIC8vIHRoaXMuc3RhdHVzID0gJ0VSUk9SJztcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Nwci1yZWNvcmRpbmdpdGVtZGlzcGxheScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXQueHM9XCJjb2x1bW5cIiBbbmdTdHlsZV09XCJ7J2hlaWdodC5weCc6MTAwLCdtaW4taGVpZ2h0LnB4JzogMTAwfVwiIFtuZ1N0eWxlLnhzXT1cInsnaGVpZ2h0LnB4JzoxMjUsJ21pbi1oZWlnaHQucHgnOiAxMjV9XCI+XHJcbiAgICAgICAgPGF1ZGlvLWxldmVsYmFyIGZ4RmxleD1cIjEgMCAxXCIgW3N0cmVhbWluZ01vZGVdPVwic3RyZWFtaW5nTW9kZVwiIFtkaXNwbGF5TGV2ZWxJbmZvc109XCJfZGlzcGxheUxldmVsSW5mb3NcIj48L2F1ZGlvLWxldmVsYmFyPlxyXG4gICAgICAgIDxzcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzIGZ4RmxleD1cIjAgMCAwXCIgW2F1ZGlvTG9hZGVkXT1cImRpc3BsYXlBdWRpb0J1ZmZlciE9PW51bGxcIiBbcGxheVN0YXJ0QWN0aW9uXT1cInBsYXlTdGFydEFjdGlvblwiIFtwbGF5U3RvcEFjdGlvbl09XCJwbGF5U3RvcEFjdGlvblwiIFtwZWFrRGJMdmxdPVwicGVha0RiTHZsXCIgW2FnY109XCJfYWdjXCIgKG9uU2hvd1JlY29yZGluZ0RldGFpbHMpPVwib25TaG93UmVjb3JkaW5nRGV0YWlscy5lbWl0KClcIj48L3Nwci1yZWNvcmRpbmdpdGVtY29udHJvbHM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICAgIHN0eWxlczogW2BkaXYge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGJhY2tncm91bmQ6IGRhcmtncmF5O1xyXG4gICAgICAgIHBhZGRpbmc6IDRweDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGZsZXgtd3JhcDogbm93cmFwOyAvKiB3cmFwIGNvdWxkIGNvbXBsZXRlbHkgZGVzdHJveSB0aGUgbGF5b3V0ICovXHJcbiAgICB9YCwgYGF1ZGlvLWxldmVsYmFyIHtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVjb3JkaW5nSXRlbURpc3BsYXkgaW1wbGVtZW50cyBMZXZlbExpc3RlbmVyLCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIGNlOiBIVE1MRGl2RWxlbWVudHxudWxsPW51bGw7XHJcbiAgICBAVmlld0NoaWxkKExldmVsQmFyLCB7IHN0YXRpYzogdHJ1ZSB9KSBsaXZlTGV2ZWwhOiBMZXZlbEJhcjtcclxuICAgIEBJbnB1dCgpIHN0cmVhbWluZ01vZGU6IGJvb2xlYW49ZmFsc2U7XHJcbiAgICBASW5wdXQoKSBhdWRpb1NpZ25hbENvbGxhcHNlZDogYm9vbGVhbj10cnVlO1xyXG4gICAgcHJpdmF0ZSBfZGlzcGxheUF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGx8dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgZW5hYmxlRG93bmxvYWQ6IGJvb2xlYW49ZmFsc2U7XHJcblxyXG4gICAgcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG5cclxuICAgIF9kaXNwbGF5TGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGw9bnVsbDtcclxuXHJcbiAgICBfYWdjOmJvb2xlYW58bnVsbHx1bmRlZmluZWQ9dW5kZWZpbmVkO1xyXG4gICAgYWdjU3RyaW5nPSduL2EnO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBhZ2MoYWdjOmJvb2xlYW58bnVsbHx1bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLl9hZ2M9YWdjO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBvblNob3dSZWNvcmRpbmdEZXRhaWxzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Eb3dubG9hZFJlY29yZGluZzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8vQElucHV0KCkgY29udHJvbEF1ZGlvUGxheWVyOiBBdWRpb1BsYXllcjtcclxuICAgIEBJbnB1dCgpIHBsYXlTdGFydEFjdGlvbjpBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgcGxheVN0b3BBY3Rpb246QWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIHBsYXlTdGFydEVuYWJsZWQgPSBmYWxzZTtcclxuICAgIHBsYXlTdG9wRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XHJcblxyXG4gICAgd2FybkRiTGV2ZWwgPSBERUZBVUxUX1dBUk5fREJfTEVWRUw7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBkaXNwbGF5QXVkaW9CdWZmZXIoZGlzcGxheUF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGx8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlBdWRpb0J1ZmZlciA9IGRpc3BsYXlBdWRpb0J1ZmZlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlzcGxheUF1ZGlvQnVmZmVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5QXVkaW9CdWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1JlY29yZGluZ0RldGFpbHMoKSB7XHJcbiAgICAgICAgdGhpcy5vblNob3dSZWNvcmRpbmdEZXRhaWxzLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZFJlY29yZGluZygpIHtcclxuICAgICAgICB0aGlzLm9uRG93bmxvYWRSZWNvcmRpbmcuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNlID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAvL3RoaXMuY29udHJvbEF1ZGlvUGxheWVyLmxpc3RlbmVyPXRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBkaXNwbGF5TGV2ZWxJbmZvcyhsZXZlbEluZm9zOiBMZXZlbEluZm9zIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlMZXZlbEluZm9zID0gbGV2ZWxJbmZvcztcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY2hhbm5lbENvdW50KGNoYW5uZWxDb3VudDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMubGl2ZUxldmVsLmNoYW5uZWxDb3VudCA9IGNoYW5uZWxDb3VudDtcclxuICAgIH1cclxuXHJcbiAgc2V0IHBsYXlGcmFtZVBvc2l0aW9uKHBsYXlGcmFtZVBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIHRoaXMubGl2ZUxldmVsLnBsYXlGcmFtZVBvc2l0aW9uPXBsYXlGcmFtZVBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgICB1cGRhdGUobGV2ZWxJbmZvOiBMZXZlbEluZm8sIHBlYWtMZXZlbEluZm86IExldmVsSW5mbykge1xyXG4gICAgICAgIGxldCBwZWFrREJWYWwgPSBsZXZlbEluZm8ucG93ZXJMZXZlbERCKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucGVha0RiTHZsIDwgcGVha0RCVmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVha0RiTHZsID0gcGVha0RCVmFsO1xyXG4gICAgICAgICAgICAvLyB0aGUgZXZlbnQgY29tZXMgZnJvbSBvdXRzaWRlIG9mIGFuIEFuZ3VsYXIgem9uZVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saXZlTGV2ZWwudXBkYXRlKGxldmVsSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZXJyb3IoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG4gICAgfVxyXG5cclxuICAgIHN0cmVhbUZpbmlzaGVkKCkge1xyXG4gICAgICAgIHRoaXMubGl2ZUxldmVsLnN0cmVhbUZpbmlzaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5wZWFrRGJMdmwgPSBNSU5fREJfTEVWRUw7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|
|
@@ -10,9 +10,9 @@ export class ScrollIntoViewDirective {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
14
|
-
ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
13
|
+
ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollIntoViewDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
14
|
+
ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: { scrollIntoViewToBottom: "scrollIntoViewToBottom" }, ngImport: i0 });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
|
|
16
16
|
type: Directive,
|
|
17
17
|
args: [{
|
|
18
18
|
selector: "[scrollIntoViewToBottom]"
|
|
@@ -35,13 +35,17 @@ export var Platform;
|
|
|
35
35
|
Platform["macOS"] = "MAC OS X";
|
|
36
36
|
})(Platform || (Platform = {}));
|
|
37
37
|
export class UserAgent {
|
|
38
|
-
constructor(_detectedPlatform, _detectedBrowser) {
|
|
38
|
+
constructor(_detectedPlatform, _detectedBrowser, _detectedBrowserVersion = null) {
|
|
39
39
|
this._detectedPlatform = _detectedPlatform;
|
|
40
40
|
this._detectedBrowser = _detectedBrowser;
|
|
41
|
+
this._detectedBrowserVersion = _detectedBrowserVersion;
|
|
41
42
|
}
|
|
42
43
|
get detectedBrowser() {
|
|
43
44
|
return this._detectedBrowser;
|
|
44
45
|
}
|
|
46
|
+
get detectedBrowserVersion() {
|
|
47
|
+
return this._detectedBrowserVersion;
|
|
48
|
+
}
|
|
45
49
|
get detectedPlatform() {
|
|
46
50
|
return this._detectedPlatform;
|
|
47
51
|
}
|
|
@@ -71,6 +75,7 @@ export class UserAgentBuilder {
|
|
|
71
75
|
// console.info("Browser does not provide userAgentData.");
|
|
72
76
|
// }
|
|
73
77
|
let ua = navigator.userAgent;
|
|
78
|
+
console.debug("User agent: " + ua);
|
|
74
79
|
this.comps = new Array();
|
|
75
80
|
let pp = 0;
|
|
76
81
|
while (pp < ua.length) {
|
|
@@ -80,6 +85,8 @@ export class UserAgentBuilder {
|
|
|
80
85
|
let comment;
|
|
81
86
|
let blPos = ua.indexOf(' ', pp);
|
|
82
87
|
let prt;
|
|
88
|
+
// TODO Replace substr with substring (?)
|
|
89
|
+
// https://stackoverflow.com/questions/52640271/why-is-string-prototype-substr-deprecated
|
|
83
90
|
if (blPos == -1) {
|
|
84
91
|
prt = ua.substr(pp);
|
|
85
92
|
pp += prt.length;
|
|
@@ -108,7 +115,9 @@ export class UserAgentBuilder {
|
|
|
108
115
|
while (ua[pp] === ' ' && pp < ua.length) {
|
|
109
116
|
pp++;
|
|
110
117
|
}
|
|
111
|
-
|
|
118
|
+
const uac = new UserAgentComponent(name, version, comment);
|
|
119
|
+
console.debug("user agent comp: " + uac);
|
|
120
|
+
this.comps.push(uac);
|
|
112
121
|
}
|
|
113
122
|
let detPlatf = null;
|
|
114
123
|
if (this.runsOnOS(Platform.Android)) {
|
|
@@ -130,7 +139,11 @@ export class UserAgentBuilder {
|
|
|
130
139
|
else if (this.matchesBrowser(Browser.Safari)) {
|
|
131
140
|
detBr = Browser.Safari;
|
|
132
141
|
}
|
|
133
|
-
|
|
142
|
+
let detBrVers = null;
|
|
143
|
+
if (detBr) {
|
|
144
|
+
detBrVers = this.browserVersion(detBr);
|
|
145
|
+
}
|
|
146
|
+
this.userAgent = new UserAgent(detPlatf, detBr, detBrVers);
|
|
134
147
|
}
|
|
135
148
|
matchesBrowser(browserName) {
|
|
136
149
|
for (let ci = 0; ci < this.comps.length; ci++) {
|
|
@@ -142,6 +155,17 @@ export class UserAgentBuilder {
|
|
|
142
155
|
}
|
|
143
156
|
return false;
|
|
144
157
|
}
|
|
158
|
+
browserVersion(browserName) {
|
|
159
|
+
for (let ci = 0; ci < this.comps.length; ci++) {
|
|
160
|
+
const comp = this.comps[ci];
|
|
161
|
+
const bn = comp.name;
|
|
162
|
+
const bnRe = new RegExp(browserName, 'i');
|
|
163
|
+
if (bn.match(bnRe)) {
|
|
164
|
+
return comp.version;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
145
169
|
runsOnOS(os) {
|
|
146
170
|
for (let ci = 0; ci < this.comps.length; ci++) {
|
|
147
171
|
let cc = this.comps[ci].comment;
|
|
@@ -163,4 +187,4 @@ export class UserAgentBuilder {
|
|
|
163
187
|
}
|
|
164
188
|
}
|
|
165
189
|
UserAgentBuilder.instance = undefined;
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWEtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3V0aWxzL3VhLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQW1CLElBQVcsRUFBUSxPQUFtQixFQUFRLE9BQWU7UUFBN0QsU0FBSSxHQUFKLElBQUksQ0FBTztRQUFRLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUSxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBRWhGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDO1FBQ3hCLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztZQUNkLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsR0FBRyxDQUFDO1NBQzNCO1FBQ0QsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO1lBQ2QsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxHQUFHLENBQUM7U0FDM0I7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDRjtBQUNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBQyxTQUFTLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFDLFFBQVEsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUMsUUFBUSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBQyxNQUFNLENBQUM7QUFJOUIsTUFBTSxDQUFOLElBQVksT0FBdUU7QUFBbkYsV0FBWSxPQUFPO0lBQUUsOEJBQWlCLENBQUE7SUFBQyw0QkFBZSxDQUFBO0lBQUMsNEJBQWUsQ0FBQTtJQUFDLHdCQUFXLENBQUE7QUFBQSxDQUFDLEVBQXZFLE9B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O2FBQ0Y7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTO1FBQ1osSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFFbkMsQ0FBQzs7QUExSE0seUJBQVEsR0FBNEIsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFVzZXJBZ2VudENvbXBvbmVudHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTpzdHJpbmcscHVibGljIHZlcnNpb246c3RyaW5nfG51bGwscHVibGljIGNvbW1lbnQ/OnN0cmluZykge1xyXG5cclxuICB9XHJcblxyXG4gIHRvU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgbGV0IHM9J1snK3RoaXMubmFtZSsnXSc7XHJcbiAgICBpZih0aGlzLnZlcnNpb24pe1xyXG4gICAgICBzPXMrJyBbJyt0aGlzLnZlcnNpb24rJ10nO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jb21tZW50KXtcclxuICAgICAgcz1zKycgWycrdGhpcy5jb21tZW50KyddJztcclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgTkFNRV9GSVJFRk9YPSdGaXJlZm94JztcclxuZXhwb3J0IGNvbnN0IE5BTUVfQ0hST01FPSdDaHJvbWUnO1xyXG5leHBvcnQgY29uc3QgTkFNRV9TQUZBUkk9J1NhZmFyaSc7XHJcbmV4cG9ydCBjb25zdCBOQU1FX0VER0U9J0VkZ2UnO1xyXG5cclxuXHJcblxyXG5leHBvcnQgZW51bSBCcm93c2VyIHtGaXJlZm94PSdGaXJlZm94JyxDaHJvbWU9J0Nocm9tZScsU2FmYXJpPSdTYWZhcmknLEVkZ2U9J0VkZ2UnfVxyXG5cclxuZXhwb3J0IGNvbnN0IE9TX1dJTkRPV1M9J1dpbmRvd3MnO1xyXG5leHBvcnQgY29uc3QgT1NfQU5EUk9JRD0nQW5kcm9pZCc7XHJcblxyXG5leHBvcnQgZW51bSBQbGF0Zm9ybSB7V2luZG93cz0nV2luZG93cycsQW5kcm9pZD0nQW5kcm9pZCcsbWFjT1M9J01BQyBPUyBYJ31cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyQWdlbnR7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RldGVjdGVkUGxhdGZvcm06UGxhdGZvcm18bnVsbCxwcml2YXRlIF9kZXRlY3RlZEJyb3dzZXI6QnJvd3NlcnxudWxsKSB7XHJcbiAgfVxyXG5cclxuICBnZXQgZGV0ZWN0ZWRCcm93c2VyKCk6IEJyb3dzZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXRlY3RlZEJyb3dzZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgZGV0ZWN0ZWRQbGF0Zm9ybSgpOiBQbGF0Zm9ybSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RldGVjdGVkUGxhdGZvcm07XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJBZ2VudEJ1aWxkZXIge1xyXG4gIHN0YXRpYyBpbnN0YW5jZTpVc2VyQWdlbnRCdWlsZGVyfHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBjb21wczpBcnJheTxVc2VyQWdlbnRDb21wb25lbnQ+PW5ldyBBcnJheTxVc2VyQWdlbnRDb21wb25lbnQ+KCk7XHJcbiAgcHJpdmF0ZSB1c2VyQWdlbnQhOlVzZXJBZ2VudDtcclxuXHJcbiAgcHJpdmF0ZSBidWlsZCgpIHtcclxuXHJcbiAgICAvLyAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyBpZihuYXZpZ2F0b3IudXNlckFnZW50RGF0YSl7XHJcbiAgICAvLyAgIC8vIG1heWJlIHdlIGNhbiB1c2UgdGhpcyBpbiAgdGhlIGZ1dHVyZVxyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJCcm93c2VyIHByb3ZpZGVzIHVzZXJBZ2VudERhdGE6XCIpO1xyXG4gICAgLy9cclxuICAgIC8vICAgY29uc29sZS5pbmZvKFwiQnJhbmRzOlwiKTtcclxuICAgIC8vICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgLy8gICBuYXZpZ2F0b3IudXNlckFnZW50RGF0YS5icmFuZHMuZm9yRWFjaCgoYnI9PntcclxuICAgIC8vICAgICBjb25zb2xlLmluZm8oYnIuYnJhbmQgK1wiIFwiK2JyLnZlcnNpb24pO1xyXG4gICAgLy8gICB9KSlcclxuICAgIC8vICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJQbGF0Zm9ybTogXCIrbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEucGxhdGZvcm0pO1xyXG4gICAgLy8gICAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIk1vYmlsZTpcIituYXZpZ2F0b3IudXNlckFnZW50RGF0YS5tb2JpbGUpO1xyXG4gICAgLy8gICAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyAgIC8vY29uc29sZS5pbmZvKG5hdmlnYXRvci51c2VyQWdlbnREYXRhLnRvSlNPTigpKTtcclxuICAgIC8vIH1lbHNlIHtcclxuICAgIC8vICAgY29uc29sZS5pbmZvKFwiQnJvd3NlciBkb2VzIG5vdCBwcm92aWRlIHVzZXJBZ2VudERhdGEuXCIpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGxldCB1YT1uYXZpZ2F0b3IudXNlckFnZW50O1xyXG5cclxuICAgIHRoaXMuY29tcHMgPSBuZXcgQXJyYXk8VXNlckFnZW50Q29tcG9uZW50PigpO1xyXG5cclxuICAgIGxldCBwcCA9IDA7XHJcbiAgICB3aGlsZSAocHAgPCB1YS5sZW5ndGgpIHtcclxuICAgICAgLy9wYXJzZSBuYW1lL3ZlcnNpb25cclxuICAgICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsXHJcbiAgICAgIGxldCB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgbGV0IGNvbW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGxldCBibFBvcyA9IHVhLmluZGV4T2YoJyAnLCBwcCk7XHJcbiAgICAgIGxldCBwcnQ6IHN0cmluZztcclxuICAgICAgaWYgKGJsUG9zID09IC0xKSB7XHJcbiAgICAgICAgcHJ0ID0gdWEuc3Vic3RyKHBwKTtcclxuICAgICAgICBwcCArPSBwcnQubGVuZ3RoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBydCA9IHVhLnN1YnN0cihwcCwgYmxQb3MgLSBwcCk7XHJcbiAgICAgICAgcHAgPSBibFBvcyArIDE7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHNlcFBvcyA9IHBydC5pbmRleE9mKCcvJyk7XHJcbiAgICAgIGlmIChzZXBQb3MgPiAwKSB7XHJcbiAgICAgICAgbmFtZSA9IHBydC5zdWJzdHIoMCwgc2VwUG9zKTtcclxuICAgICAgICB2ZXJzaW9uID0gcHJ0LnN1YnN0cihzZXBQb3MgKyAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuYW1lID0gcHJ0O1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlICh1YVtwcF0gPT09ICcgJyAmJiBwcCA8IHVhLmxlbmd0aCkge1xyXG4gICAgICAgIHBwKys7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHVhW3BwXSA9PT0gJygnKSB7XHJcbiAgICAgICAgcHArKztcclxuICAgICAgICBsZXQgY29tbUVuZCA9IHVhLmluZGV4T2YoJyknLCBwcCk7XHJcbiAgICAgICAgY29tbWVudCA9IHVhLnN1YnN0cihwcCwgY29tbUVuZCAtIHBwKTtcclxuICAgICAgICBwcCA9IGNvbW1FbmQgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlICh1YVtwcF0gPT09ICcgJyAmJiBwcCA8IHVhLmxlbmd0aCkge1xyXG4gICAgICAgIHBwKys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21wcy5wdXNoKG5ldyBVc2VyQWdlbnRDb21wb25lbnQobmFtZSwgdmVyc2lvbiwgY29tbWVudCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkZXRQbGF0ZjpQbGF0Zm9ybXxudWxsPW51bGw7XHJcbiAgICBpZih0aGlzLnJ1bnNPbk9TKFBsYXRmb3JtLkFuZHJvaWQpKXtcclxuICAgICAgZGV0UGxhdGY9UGxhdGZvcm0uQW5kcm9pZDtcclxuICAgIH1lbHNlIGlmKHRoaXMucnVuc09uT1MoUGxhdGZvcm0uV2luZG93cykpe1xyXG4gICAgICBkZXRQbGF0Zj1QbGF0Zm9ybS5XaW5kb3dzO1xyXG4gICAgfWVsc2UgaWYodGhpcy5ydW5zT25PUyhQbGF0Zm9ybS5tYWNPUykpe1xyXG4gICAgICBkZXRQbGF0Zj1QbGF0Zm9ybS5tYWNPUztcclxuICAgIH1cclxuXHJcblxyXG4gIGxldCBkZXRCcjpCcm93c2VyfG51bGw9bnVsbDtcclxuICAgIGlmKHRoaXMubWF0Y2hlc0Jyb3dzZXIoQnJvd3Nlci5GaXJlZm94KSl7XHJcbiAgICAgIGRldEJyPUJyb3dzZXIuRmlyZWZveDtcclxuICAgIH1lbHNlIGlmKHRoaXMubWF0Y2hlc0Jyb3dzZXIoQnJvd3Nlci5DaHJvbWUpKXtcclxuICAgICAgZGV0QnI9QnJvd3Nlci5DaHJvbWU7XHJcbiAgICB9ZWxzZSBpZih0aGlzLm1hdGNoZXNCcm93c2VyKEJyb3dzZXIuU2FmYXJpKSl7XHJcbiAgICAgIGRldEJyPUJyb3dzZXIuU2FmYXJpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXNlckFnZW50PW5ldyBVc2VyQWdlbnQoZGV0UGxhdGYsZGV0QnIpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWF0Y2hlc0Jyb3dzZXIoYnJvd3Nlck5hbWU6c3RyaW5nKXtcclxuICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNvbXBzLmxlbmd0aDtjaSsrKXtcclxuICAgICAgbGV0IGJuPXRoaXMuY29tcHNbY2ldLm5hbWVcclxuICAgICAgbGV0IGJuUmU9bmV3IFJlZ0V4cChicm93c2VyTmFtZSwnaScpO1xyXG4gICAgICBpZihibi5tYXRjaChiblJlKSl7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcnVuc09uT1Mob3M6c3RyaW5nKTpib29sZWFue1xyXG4gICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY29tcHMubGVuZ3RoO2NpKyspe1xyXG4gICAgICBsZXQgY2M9dGhpcy5jb21wc1tjaV0uY29tbWVudFxyXG4gICAgICBpZihjYyl7XHJcbiAgICAgICAgdmFyIG9zUmUgPSBuZXcgUmVnRXhwKG9zLCdpJyk7XHJcbiAgICAgICAgaWYoY2MubWF0Y2gob3NSZSkpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdXNlckFnZW50KCk6VXNlckFnZW50e1xyXG4gICAgICBpZighdGhpcy5pbnN0YW5jZSl7XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZT1uZXcgVXNlckFnZW50QnVpbGRlcigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYnVpbGQoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UudXNlckFnZW50O1xyXG5cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWEtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3V0aWxzL3VhLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQW1CLElBQVcsRUFBUSxPQUFtQixFQUFRLE9BQWU7UUFBN0QsU0FBSSxHQUFKLElBQUksQ0FBTztRQUFRLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUSxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBRWhGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDO1FBQ3hCLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztZQUNkLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsR0FBRyxDQUFDO1NBQzNCO1FBQ0QsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO1lBQ2QsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxHQUFHLENBQUM7U0FDM0I7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDRjtBQUNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBQyxTQUFTLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFDLFFBQVEsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUMsUUFBUSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBQyxNQUFNLENBQUM7QUFJOUIsTUFBTSxDQUFOLElBQVksT0FBdUU7QUFBbkYsV0FBWSxPQUFPO0lBQUUsOEJBQWlCLENBQUE7SUFBQyw0QkFBZSxDQUFBO0lBQUMsNEJBQWUsQ0FBQTtJQUFDLHdCQUFXLENBQUE7QUFBQSxDQUFDLEVBQXZFLE9B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QUksZ0JBQWdCLEVBQUUsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUVuQyxDQUFDOztBQTdJTSx5QkFBUSxHQUE0QixTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVXNlckFnZW50Q29tcG9uZW50e1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOnN0cmluZyxwdWJsaWMgdmVyc2lvbjpzdHJpbmd8bnVsbCxwdWJsaWMgY29tbWVudD86c3RyaW5nKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoKTpzdHJpbmd7XHJcbiAgICBsZXQgcz0nWycrdGhpcy5uYW1lKyddJztcclxuICAgIGlmKHRoaXMudmVyc2lvbil7XHJcbiAgICAgIHM9cysnIFsnK3RoaXMudmVyc2lvbisnXSc7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbW1lbnQpe1xyXG4gICAgICBzPXMrJyBbJyt0aGlzLmNvbW1lbnQrJ10nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHM7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjb25zdCBOQU1FX0ZJUkVGT1g9J0ZpcmVmb3gnO1xyXG5leHBvcnQgY29uc3QgTkFNRV9DSFJPTUU9J0Nocm9tZSc7XHJcbmV4cG9ydCBjb25zdCBOQU1FX1NBRkFSST0nU2FmYXJpJztcclxuZXhwb3J0IGNvbnN0IE5BTUVfRURHRT0nRWRnZSc7XHJcblxyXG5cclxuXHJcbmV4cG9ydCBlbnVtIEJyb3dzZXIge0ZpcmVmb3g9J0ZpcmVmb3gnLENocm9tZT0nQ2hyb21lJyxTYWZhcmk9J1NhZmFyaScsRWRnZT0nRWRnZSd9XHJcblxyXG5leHBvcnQgY29uc3QgT1NfV0lORE9XUz0nV2luZG93cyc7XHJcbmV4cG9ydCBjb25zdCBPU19BTkRST0lEPSdBbmRyb2lkJztcclxuXHJcbmV4cG9ydCBlbnVtIFBsYXRmb3JtIHtXaW5kb3dzPSdXaW5kb3dzJyxBbmRyb2lkPSdBbmRyb2lkJyxtYWNPUz0nTUFDIE9TIFgnfVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJBZ2VudHtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RldGVjdGVkUGxhdGZvcm06UGxhdGZvcm18bnVsbCxwcml2YXRlIF9kZXRlY3RlZEJyb3dzZXI6QnJvd3NlcnxudWxsLHByaXZhdGUgX2RldGVjdGVkQnJvd3NlclZlcnNpb246c3RyaW5nfG51bGw9bnVsbCkge1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRldGVjdGVkQnJvd3NlcigpOiBCcm93c2VyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGV0ZWN0ZWRCcm93c2VyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRldGVjdGVkQnJvd3NlclZlcnNpb24oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGV0ZWN0ZWRCcm93c2VyVmVyc2lvbjtcclxuICB9XHJcblxyXG4gIGdldCBkZXRlY3RlZFBsYXRmb3JtKCk6IFBsYXRmb3JtIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGV0ZWN0ZWRQbGF0Zm9ybTtcclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckFnZW50QnVpbGRlciB7XHJcbiAgc3RhdGljIGluc3RhbmNlOlVzZXJBZ2VudEJ1aWxkZXJ8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICBwcml2YXRlIGNvbXBzOkFycmF5PFVzZXJBZ2VudENvbXBvbmVudD49bmV3IEFycmF5PFVzZXJBZ2VudENvbXBvbmVudD4oKTtcclxuICBwcml2YXRlIHVzZXJBZ2VudCE6VXNlckFnZW50O1xyXG5cclxuICBwcml2YXRlIGJ1aWxkKCkge1xyXG5cclxuICAgIC8vIC8vIEB0cy1pZ25vcmVcclxuICAgIC8vIGlmKG5hdmlnYXRvci51c2VyQWdlbnREYXRhKXtcclxuICAgIC8vICAgLy8gbWF5YmUgd2UgY2FuIHVzZSB0aGlzIGluICB0aGUgZnV0dXJlXHJcbiAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIkJyb3dzZXIgcHJvdmlkZXMgdXNlckFnZW50RGF0YTpcIik7XHJcbiAgICAvL1xyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJCcmFuZHM6XCIpO1xyXG4gICAgLy8gICAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyAgIG5hdmlnYXRvci51c2VyQWdlbnREYXRhLmJyYW5kcy5mb3JFYWNoKChicj0+e1xyXG4gICAgLy8gICAgIGNvbnNvbGUuaW5mbyhici5icmFuZCArXCIgXCIrYnIudmVyc2lvbik7XHJcbiAgICAvLyAgIH0pKVxyXG4gICAgLy8gICAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIlBsYXRmb3JtOiBcIituYXZpZ2F0b3IudXNlckFnZW50RGF0YS5wbGF0Zm9ybSk7XHJcbiAgICAvLyAgIC8vIEB0cy1pZ25vcmVcclxuICAgIC8vICAgY29uc29sZS5pbmZvKFwiTW9iaWxlOlwiK25hdmlnYXRvci51c2VyQWdlbnREYXRhLm1vYmlsZSk7XHJcbiAgICAvLyAgIC8vIEB0cy1pZ25vcmVcclxuICAgIC8vICAgLy9jb25zb2xlLmluZm8obmF2aWdhdG9yLnVzZXJBZ2VudERhdGEudG9KU09OKCkpO1xyXG4gICAgLy8gfWVsc2Uge1xyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJCcm93c2VyIGRvZXMgbm90IHByb3ZpZGUgdXNlckFnZW50RGF0YS5cIik7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgbGV0IHVhPW5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiVXNlciBhZ2VudDogXCIrdWEpO1xyXG4gICAgdGhpcy5jb21wcyA9IG5ldyBBcnJheTxVc2VyQWdlbnRDb21wb25lbnQ+KCk7XHJcblxyXG4gICAgbGV0IHBwID0gMDtcclxuICAgIHdoaWxlIChwcCA8IHVhLmxlbmd0aCkge1xyXG4gICAgICAvL3BhcnNlIG5hbWUvdmVyc2lvblxyXG4gICAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICAgICAgbGV0IHZlcnNpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICBsZXQgY29tbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgbGV0IGJsUG9zID0gdWEuaW5kZXhPZignICcsIHBwKTtcclxuICAgICAgbGV0IHBydDogc3RyaW5nO1xyXG4gICAgICAvLyBUT0RPIFJlcGxhY2Ugc3Vic3RyIHdpdGggc3Vic3RyaW5nICg/KVxyXG4gICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MjY0MDI3MS93aHktaXMtc3RyaW5nLXByb3RvdHlwZS1zdWJzdHItZGVwcmVjYXRlZFxyXG4gICAgICBpZiAoYmxQb3MgPT0gLTEpIHtcclxuICAgICAgICBwcnQgPSB1YS5zdWJzdHIocHApO1xyXG4gICAgICAgIHBwICs9IHBydC5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJ0ID0gdWEuc3Vic3RyKHBwLCBibFBvcyAtIHBwKTtcclxuICAgICAgICBwcCA9IGJsUG9zICsgMTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgc2VwUG9zID0gcHJ0LmluZGV4T2YoJy8nKTtcclxuICAgICAgaWYgKHNlcFBvcyA+IDApIHtcclxuICAgICAgICBuYW1lID0gcHJ0LnN1YnN0cigwLCBzZXBQb3MpO1xyXG4gICAgICAgIHZlcnNpb24gPSBwcnQuc3Vic3RyKHNlcFBvcyArIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5hbWUgPSBwcnQ7XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKHVhW3BwXSA9PT0gJyAnICYmIHBwIDwgdWEubGVuZ3RoKSB7XHJcbiAgICAgICAgcHArKztcclxuICAgICAgfVxyXG4gICAgICBpZiAodWFbcHBdID09PSAnKCcpIHtcclxuICAgICAgICBwcCsrO1xyXG4gICAgICAgIGxldCBjb21tRW5kID0gdWEuaW5kZXhPZignKScsIHBwKTtcclxuICAgICAgICBjb21tZW50ID0gdWEuc3Vic3RyKHBwLCBjb21tRW5kIC0gcHApO1xyXG4gICAgICAgIHBwID0gY29tbUVuZCArIDE7XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKHVhW3BwXSA9PT0gJyAnICYmIHBwIDwgdWEubGVuZ3RoKSB7XHJcbiAgICAgICAgcHArKztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB1YWM9bmV3IFVzZXJBZ2VudENvbXBvbmVudChuYW1lLCB2ZXJzaW9uLCBjb21tZW50KTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInVzZXIgYWdlbnQgY29tcDogXCIrdWFjKTtcclxuICAgICAgdGhpcy5jb21wcy5wdXNoKHVhYyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRldFBsYXRmOlBsYXRmb3JtfG51bGw9bnVsbDtcclxuICAgIGlmKHRoaXMucnVuc09uT1MoUGxhdGZvcm0uQW5kcm9pZCkpe1xyXG4gICAgICBkZXRQbGF0Zj1QbGF0Zm9ybS5BbmRyb2lkO1xyXG4gICAgfWVsc2UgaWYodGhpcy5ydW5zT25PUyhQbGF0Zm9ybS5XaW5kb3dzKSl7XHJcbiAgICAgIGRldFBsYXRmPVBsYXRmb3JtLldpbmRvd3M7XHJcbiAgICB9ZWxzZSBpZih0aGlzLnJ1bnNPbk9TKFBsYXRmb3JtLm1hY09TKSl7XHJcbiAgICAgIGRldFBsYXRmPVBsYXRmb3JtLm1hY09TO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgbGV0IGRldEJyOkJyb3dzZXJ8bnVsbD1udWxsO1xyXG4gICAgaWYodGhpcy5tYXRjaGVzQnJvd3NlcihCcm93c2VyLkZpcmVmb3gpKXtcclxuICAgICAgZGV0QnI9QnJvd3Nlci5GaXJlZm94O1xyXG4gICAgfWVsc2UgaWYodGhpcy5tYXRjaGVzQnJvd3NlcihCcm93c2VyLkNocm9tZSkpe1xyXG4gICAgICBkZXRCcj1Ccm93c2VyLkNocm9tZTtcclxuICAgIH1lbHNlIGlmKHRoaXMubWF0Y2hlc0Jyb3dzZXIoQnJvd3Nlci5TYWZhcmkpKXtcclxuICAgICAgZGV0QnI9QnJvd3Nlci5TYWZhcmk7XHJcbiAgICB9XHJcbiAgICBsZXQgZGV0QnJWZXJzID1udWxsO1xyXG4gICAgaWYoZGV0QnIpIHtcclxuICAgICBkZXRCclZlcnM9dGhpcy5icm93c2VyVmVyc2lvbihkZXRCcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVzZXJBZ2VudD1uZXcgVXNlckFnZW50KGRldFBsYXRmLGRldEJyLGRldEJyVmVycyk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXRjaGVzQnJvd3Nlcihicm93c2VyTmFtZTpzdHJpbmcpe1xyXG4gICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY29tcHMubGVuZ3RoO2NpKyspe1xyXG4gICAgICBsZXQgYm49dGhpcy5jb21wc1tjaV0ubmFtZVxyXG4gICAgICBsZXQgYm5SZT1uZXcgUmVnRXhwKGJyb3dzZXJOYW1lLCdpJyk7XHJcbiAgICAgIGlmKGJuLm1hdGNoKGJuUmUpKXtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBicm93c2VyVmVyc2lvbihicm93c2VyTmFtZTpzdHJpbmcpOnN0cmluZ3xudWxse1xyXG4gICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY29tcHMubGVuZ3RoO2NpKyspe1xyXG4gICAgICBjb25zdCBjb21wPXRoaXMuY29tcHNbY2ldO1xyXG4gICAgICBjb25zdCBibj1jb21wLm5hbWU7XHJcbiAgICAgIGNvbnN0IGJuUmU9bmV3IFJlZ0V4cChicm93c2VyTmFtZSwnaScpO1xyXG4gICAgICBpZihibi5tYXRjaChiblJlKSl7XHJcbiAgICAgICAgcmV0dXJuIGNvbXAudmVyc2lvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJ1bnNPbk9TKG9zOnN0cmluZyk6Ym9vbGVhbntcclxuICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNvbXBzLmxlbmd0aDtjaSsrKXtcclxuICAgICAgbGV0IGNjPXRoaXMuY29tcHNbY2ldLmNvbW1lbnRcclxuICAgICAgaWYoY2Mpe1xyXG4gICAgICAgIHZhciBvc1JlID0gbmV3IFJlZ0V4cChvcywnaScpO1xyXG4gICAgICAgIGlmKGNjLm1hdGNoKG9zUmUpKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHVzZXJBZ2VudCgpOlVzZXJBZ2VudHtcclxuICAgICAgaWYoIXRoaXMuaW5zdGFuY2Upe1xyXG4gICAgICAgIHRoaXMuaW5zdGFuY2U9bmV3IFVzZXJBZ2VudEJ1aWxkZXIoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmluc3RhbmNlLmJ1aWxkKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnVzZXJBZ2VudDtcclxuXHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -9,6 +9,34 @@ export class UUID {
|
|
|
9
9
|
.substring(1);
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
+
export class DataSize {
|
|
13
|
+
static formatBytesToBinaryUnits(bytes, decimals = 2) {
|
|
14
|
+
let binaryUnitIdx = 0;
|
|
15
|
+
let divisor = 1;
|
|
16
|
+
if (bytes > 0) {
|
|
17
|
+
const bytesLog = Math.log(bytes);
|
|
18
|
+
binaryUnitIdx = Math.floor(bytesLog / this.BINARY_UNIT_FACTOR_LOG);
|
|
19
|
+
if (binaryUnitIdx >= this.BINARY_UNITS.length) {
|
|
20
|
+
// fallback to bytes
|
|
21
|
+
binaryUnitIdx = 0;
|
|
22
|
+
}
|
|
23
|
+
divisor = Math.pow(this.BINARY_UNIT_FACTOR, binaryUnitIdx);
|
|
24
|
+
}
|
|
25
|
+
let decimalsUnitValue;
|
|
26
|
+
if (binaryUnitIdx === 0) {
|
|
27
|
+
decimalsUnitValue = bytes.toString();
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const unitValue = bytes / divisor;
|
|
31
|
+
decimalsUnitValue = unitValue.toFixed(decimals);
|
|
32
|
+
}
|
|
33
|
+
const binaryUnitStr = decimalsUnitValue + ' ' + this.BINARY_UNITS[binaryUnitIdx];
|
|
34
|
+
return binaryUnitStr;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
DataSize.BINARY_UNITS = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB', 'RiB', 'QiB'];
|
|
38
|
+
DataSize.BINARY_UNIT_FACTOR = 1024;
|
|
39
|
+
DataSize.BINARY_UNIT_FACTOR_LOG = Math.log(DataSize.BINARY_UNIT_FACTOR);
|
|
12
40
|
export class Arrays {
|
|
13
41
|
static cloneNumberArray(numberArray) {
|
|
14
42
|
let len = numberArray.length;
|
|
@@ -74,4 +102,4 @@ export class WorkerHelper {
|
|
|
74
102
|
}
|
|
75
103
|
}
|
|
76
104
|
WorkerHelper.DEBUG = false;
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0UsTUFBTSxPQUFPLElBQUk7SUFFZixNQUFNLENBQUMsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRztZQUNwRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFUyxNQUFNLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQzdDLFFBQVEsQ0FBQyxFQUFFLENBQUM7YUFDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNBO0FBRUQsTUFBTSxPQUFPLE1BQU07SUFFakIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQTBCO1FBQ2hELElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQVMsR0FBRyxDQUFDLENBQUM7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFD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QUM7UUFFbkQsSUFBSSxhQUFhLEdBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzs7QUFoRE0sa0JBQUssR0FBQyxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICBleHBvcnQgY2xhc3MgVVVJRCB7XHJcblxyXG4gICAgc3RhdGljIGdlbmVyYXRlKCk6c3RyaW5nIHtcclxuICAgIHJldHVybiBVVUlELnM0KCkgKyBVVUlELnM0KCkgKyAnLScgKyBVVUlELnM0KCkgKyAnLScgKyBVVUlELnM0KCkgKyAnLScgK1xyXG4gICAgICBVVUlELnM0KCkgKyAnLScgKyBVVUlELnM0KCkgKyBVVUlELnM0KCkgKyBVVUlELnM0KCk7XHJcbiAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHM0KCkge1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApXHJcbiAgICAgIC50b1N0cmluZygxNilcclxuICAgICAgLnN1YnN0cmluZygxKTtcclxuICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgY2xhc3MgQXJyYXlzIHtcclxuXHJcbiAgICBzdGF0aWMgY2xvbmVOdW1iZXJBcnJheShudW1iZXJBcnJheTogQXJyYXk8bnVtYmVyPik6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgICBsZXQgbGVuID0gbnVtYmVyQXJyYXkubGVuZ3RoO1xyXG4gICAgICBsZXQgY2xvbmVBcnIgPSBuZXcgQXJyYXk8bnVtYmVyPihsZW4pO1xyXG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IG51bWJlckFycmF5Lmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgY2xvbmVBcnJbY10gPSBudW1iZXJBcnJheVtjXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY2xvbmVBcnI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHN3YXA8VD4oaXRlbXM6QXJyYXk8VD4sIGk6bnVtYmVyLCBqOm51bWJlcikge1xyXG4gICAgICBsZXQgdG1wID0gaXRlbXNbaV07XHJcbiAgICAgIGl0ZW1zW2ldID0gaXRlbXNbal07XHJcbiAgICAgIGl0ZW1zW2pdID0gdG1wO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaHVmZmxlQXJyYXk8VD4ob3JnQXJyYXk6QXJyYXk8VD4pOkFycmF5PFQ+e1xyXG4gICAgICAgIGxldCBzaHVmZmxlZEFycmF5ID0gWy4uLm9yZ0FycmF5XTtcclxuICAgICAgICBmb3IgKGxldCBpID0gc2h1ZmZsZWRBcnJheS5sZW5ndGg7IGkgPiAxOyBpLS0pIHtcclxuICAgICAgICAgIGxldCBybmQ9TWF0aC5yYW5kb20oKTtcclxuICAgICAgICAgIGxldCBybmRBcnJJZHg9TWF0aC5mbG9vcihybmQqaSk7XHJcbiAgICAgICAgICBBcnJheXMuc3dhcChzaHVmZmxlZEFycmF5LCBpIC0gMSwgcm5kQXJySWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNodWZmbGVkQXJyYXk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyBXb3JrZXJIZWxwZXIge1xyXG5cclxuICAgIHN0YXRpYyBERUJVRz1mYWxzZTtcclxuICAgIHN0YXRpYyBidWlsZFdvcmtlckJsb2JVUkwod29ya2VyRmN0OiBGdW5jdGlvbik6IHN0cmluZyB7XHJcblxyXG4gICAgICBpZighICh3b3JrZXJGY3QgaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICdQYXJhbWV0ZXIgd29ya2VyRmN0IGlzIG5vdCBhIGZ1bmN0aW9uISAoWFNTIGF0dGFjaz8pLidcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgbGV0ICB3b0ZjdE5tID0gd29ya2VyRmN0Lm5hbWVcclxuICAgICAgaWYgKFdvcmtlckhlbHBlci5ERUJVRykge1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIldvcmtlciBtZXRob2QgbmFtZTogXCIgKyB3b0ZjdE5tKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgd29GY3RTdHIgPSB3b3JrZXJGY3QudG9TdHJpbmcoKVxyXG4gICAgICBpZiAoV29ya2VySGVscGVyLkRFQlVHKSB7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiV29ya2VyIG1ldGhvZCBzdHJpbmc6XCIpXHJcbiAgICAgICAgY29uc29sZS5pbmZvKHdvRmN0U3RyKVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy8gTWFrZSBzdXJlIGNvZGUgc3RhcnRzIHdpdGggXCJmdW5jdGlvbigpXCJcclxuXHJcbiAgICAgIC8vIENocm9tZSwgRmlyZWZveDogXCJbd29mY3RObV0oKXsuLi59XCIsIFNhZmFyaTogXCJmdW5jdGlvbiBbd29mY3RObV0oKXsuLi59XCJcclxuICAgICAgLy8gd2UgbmVlZCBhbiBhbm9ueW1vdXMgZnVuY3Rpb246IFwiZnVuY3Rpb24oKSB7Li4ufVwiXHJcbiAgICAgIGxldCBwaVdvRmN0U3RyID0gd29GY3RTdHIucmVwbGFjZSgvXmZ1bmN0aW9uICsvLCAnJyk7XHJcblxyXG4gICAgICBpZihXb3JrZXJIZWxwZXIuREVCVUcpe1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIldvcmtlciBwbGF0Zm9ybSBpbmRlcGVuZGVudCBmdW5jdGlvbiBzdHJpbmc6XCIpXHJcbiAgICAgICAgY29uc29sZS5pbmZvKHBpV29GY3RTdHIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgdG8gYW5vbnltb3VzIGZ1bmN0aW9uXHJcbiAgICAgIGxldCBhbm9uV29GY3RTdHIgPSBwaVdvRmN0U3RyLnJlcGxhY2Uod29GY3RObSArICcoKScsICdmdW5jdGlvbigpJylcclxuICAgICAgaWYoV29ya2VySGVscGVyLkRFQlVHKXtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJXb3JrZXIgYW5vbnltb3VzIGZ1bmN0aW9uIHN0cmluZzpcIilcclxuICAgICAgICBjb25zb2xlLmluZm8ocGlXb0ZjdFN0cilcclxuICAgICAgfVxyXG4gICAgICAvLyBTZWxmIGV4ZWN1dGluZ1xyXG4gICAgICBsZXQgd3MgPSAnKCcgKyBhbm9uV29GY3RTdHIgKyAnKSgpOydcclxuICAgICAgaWYoV29ya2VySGVscGVyLkRFQlVHKXtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJXb3JrZXIgc2VsZiBleGVjdXRpbmcgYW5vbnltb3VzIGZ1bmN0aW9uIHN0cmluZzpcIilcclxuICAgICAgICBjb25zb2xlLmluZm8oYW5vbldvRmN0U3RyKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIEJ1aWxkIHRoZSB3b3JrZXIgYmxvYlxyXG4gICAgICBsZXQgd2IgPSBuZXcgQmxvYihbd3NdLCB7dHlwZTogJ3RleHQvamF2YXNjcmlwdCd9KTtcclxuXHJcbiAgICAgIGxldCB3b3JrZXJCbG9iVXJsPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHdiKTtcclxuICAgICAgcmV0dXJuIHdvcmtlckJsb2JVcmw7XHJcbiAgICB9XHJcbiAgfVxyXG4iXX0=
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0UsTUFBTSxPQUFPLElBQUk7SUFFZixNQUFNLENBQUMsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRztZQUNwRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFUyxNQUFNLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQzdDLFFBQVEsQ0FBQyxFQUFFLENBQUM7YUFDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNBO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFLbkIsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQVksRUFBQyxXQUFnQixDQUFDO1FBRTVELElBQUksYUFBYSxHQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLE9BQU8sR0FBQyxDQUFDLENBQUM7UUFDZCxJQUFHLEtBQUssR0FBQyxDQUFDLEVBQUU7WUFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMs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Q0FBQTtTQUMzQjtRQUNELHdCQUF3QjtRQUN4QixJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLGFBQWEsR0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOztBQWhETSxrQkFBSyxHQUFDLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gIGV4cG9ydCBjbGFzcyBVVUlEIHtcclxuXHJcbiAgICBzdGF0aWMgZ2VuZXJhdGUoKTpzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVVSUQuczQoKSArIFVVSUQuczQoKSArICctJyArIFVVSUQuczQoKSArICctJyArIFVVSUQuczQoKSArICctJyArXHJcbiAgICAgIFVVSUQuczQoKSArICctJyArIFVVSUQuczQoKSArIFVVSUQuczQoKSArIFVVSUQuczQoKTtcclxuICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgczQoKSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyBEYXRhU2l6ZXtcclxuICAgIHByaXZhdGUgc3RhdGljIEJJTkFSWV9VTklUUz1bJ0InLCdLaUInLCdNaUInLCdHaUInLCdUaUInLCdQaUInLCdFaUInLCdaaUInLCdZaUInLCdSaUInLCdRaUInXTtcclxuICAgIHByaXZhdGUgc3RhdGljIEJJTkFSWV9VTklUX0ZBQ1RPUjpudW1iZXI9MTAyNDtcclxuICAgIHByaXZhdGUgc3RhdGljIEJJTkFSWV9VTklUX0ZBQ1RPUl9MT0c6bnVtYmVyPU1hdGgubG9nKERhdGFTaXplLkJJTkFSWV9VTklUX0ZBQ1RPUik7XHJcblxyXG4gICAgc3RhdGljIGZvcm1hdEJ5dGVzVG9CaW5hcnlVbml0cyhieXRlczpudW1iZXIsZGVjaW1hbHM6bnVtYmVyPTIpOnN0cmluZ3tcclxuXHJcbiAgICAgIGxldCBiaW5hcnlVbml0SWR4PTA7XHJcbiAgICAgIGxldCBkaXZpc29yPTE7XHJcbiAgICAgIGlmKGJ5dGVzPjApIHtcclxuICAgICAgICBjb25zdCBieXRlc0xvZyA9IE1hdGgubG9nKGJ5dGVzKTtcclxuICAgICAgICBiaW5hcnlVbml0SWR4ID0gTWF0aC5mbG9vcihieXRlc0xvZyAvIHRoaXMuQklOQVJZX1VOSVRfRkFDVE9SX0xPRyk7XHJcbiAgICAgICAgaWYgKGJpbmFyeVVuaXRJZHggPj0gdGhpcy5CSU5BUllfVU5JVFMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyBmYWxsYmFjayB0byBieXRlc1xyXG4gICAgICAgICAgYmluYXJ5VW5pdElkeCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpdmlzb3IgPSBNYXRoLnBvdyh0aGlzLkJJTkFSWV9VTklUX0ZBQ1RPUiwgYmluYXJ5VW5pdElkeCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGRlY2ltYWxzVW5pdFZhbHVlOnN0cmluZztcclxuICAgICAgaWYoYmluYXJ5VW5pdElkeD09PTApe1xyXG4gICAgICAgIGRlY2ltYWxzVW5pdFZhbHVlPWJ5dGVzLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICBjb25zdCB1bml0VmFsdWUgPSBieXRlcyAvIGRpdmlzb3I7XHJcbiAgICAgICAgZGVjaW1hbHNVbml0VmFsdWU9dW5pdFZhbHVlLnRvRml4ZWQoZGVjaW1hbHMpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGJpbmFyeVVuaXRTdHIgPSBkZWNpbWFsc1VuaXRWYWx1ZSArICcgJyArIHRoaXMuQklOQVJZX1VOSVRTW2JpbmFyeVVuaXRJZHhdO1xyXG5cclxuICAgICAgcmV0dXJuIGJpbmFyeVVuaXRTdHI7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIEFycmF5cyB7XHJcblxyXG4gICAgc3RhdGljIGNsb25lTnVtYmVyQXJyYXkobnVtYmVyQXJyYXk6IEFycmF5PG51bWJlcj4pOiBBcnJheTxudW1iZXI+IHtcclxuICAgICAgbGV0IGxlbiA9IG51bWJlckFycmF5Lmxlbmd0aDtcclxuICAgICAgbGV0IGNsb25lQXJyID0gbmV3IEFycmF5PG51bWJlcj4obGVuKTtcclxuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBudW1iZXJBcnJheS5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgIGNsb25lQXJyW2NdID0gbnVtYmVyQXJyYXlbY107XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNsb25lQXJyO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzd2FwPFQ+KGl0ZW1zOkFycmF5PFQ+LCBpOm51bWJlciwgajpudW1iZXIpIHtcclxuICAgICAgbGV0IHRtcCA9IGl0ZW1zW2ldO1xyXG4gICAgICBpdGVtc1tpXSA9IGl0ZW1zW2pdO1xyXG4gICAgICBpdGVtc1tqXSA9IHRtcDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2h1ZmZsZUFycmF5PFQ+KG9yZ0FycmF5OkFycmF5PFQ+KTpBcnJheTxUPntcclxuICAgICAgICBsZXQgc2h1ZmZsZWRBcnJheSA9IFsuLi5vcmdBcnJheV07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHNodWZmbGVkQXJyYXkubGVuZ3RoOyBpID4gMTsgaS0tKSB7XHJcbiAgICAgICAgICBsZXQgcm5kPU1hdGgucmFuZG9tKCk7XHJcbiAgICAgICAgICBsZXQgcm5kQXJySWR4PU1hdGguZmxvb3Iocm5kKmkpO1xyXG4gICAgICAgICAgQXJyYXlzLnN3YXAoc2h1ZmZsZWRBcnJheSwgaSAtIDEsIHJuZEFycklkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaHVmZmxlZEFycmF5O1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgY2xhc3MgV29ya2VySGVscGVyIHtcclxuXHJcbiAgICBzdGF0aWMgREVCVUc9ZmFsc2U7XHJcbiAgICBzdGF0aWMgYnVpbGRXb3JrZXJCbG9iVVJMKHdvcmtlckZjdDogRnVuY3Rpb24pOiBzdHJpbmcge1xyXG5cclxuICAgICAgaWYoISAod29ya2VyRmN0IGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnUGFyYW1ldGVyIHdvcmtlckZjdCBpcyBub3QgYSBmdW5jdGlvbiEgKFhTUyBhdHRhY2s/KS4nXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCAgd29GY3RObSA9IHdvcmtlckZjdC5uYW1lXHJcbiAgICAgIGlmIChXb3JrZXJIZWxwZXIuREVCVUcpIHtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJXb3JrZXIgbWV0aG9kIG5hbWU6IFwiICsgd29GY3RObSlcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHdvRmN0U3RyID0gd29ya2VyRmN0LnRvU3RyaW5nKClcclxuICAgICAgaWYgKFdvcmtlckhlbHBlci5ERUJVRykge1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIldvcmtlciBtZXRob2Qgc3RyaW5nOlwiKVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyh3b0ZjdFN0cilcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSBjb2RlIHN0YXJ0cyB3aXRoIFwiZnVuY3Rpb24oKVwiXHJcblxyXG4gICAgICAvLyBDaHJvbWUsIEZpcmVmb3g6IFwiW3dvZmN0Tm1dKCl7Li4ufVwiLCBTYWZhcmk6IFwiZnVuY3Rpb24gW3dvZmN0Tm1dKCl7Li4ufVwiXHJcbiAgICAgIC8vIHdlIG5lZWQgYW4gYW5vbnltb3VzIGZ1bmN0aW9uOiBcImZ1bmN0aW9uKCkgey4uLn1cIlxyXG4gICAgICBsZXQgcGlXb0ZjdFN0ciA9IHdvRmN0U3RyLnJlcGxhY2UoL15mdW5jdGlvbiArLywgJycpO1xyXG5cclxuICAgICAgaWYoV29ya2VySGVscGVyLkRFQlVHKXtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJXb3JrZXIgcGxhdGZvcm0gaW5kZXBlbmRlbnQgZnVuY3Rpb24gc3RyaW5nOlwiKVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhwaVdvRmN0U3RyKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDb252ZXJ0IHRvIGFub255bW91cyBmdW5jdGlvblxyXG4gICAgICBsZXQgYW5vbldvRmN0U3RyID0gcGlXb0ZjdFN0ci5yZXBsYWNlKHdvRmN0Tm0gKyAnKCknLCAnZnVuY3Rpb24oKScpXHJcbiAgICAgIGlmKFdvcmtlckhlbHBlci5ERUJVRyl7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiV29ya2VyIGFub255bW91cyBmdW5jdGlvbiBzdHJpbmc6XCIpXHJcbiAgICAgICAgY29uc29sZS5pbmZvKHBpV29GY3RTdHIpXHJcbiAgICAgIH1cclxuICAgICAgLy8gU2VsZiBleGVjdXRpbmdcclxuICAgICAgbGV0IHdzID0gJygnICsgYW5vbldvRmN0U3RyICsgJykoKTsnXHJcbiAgICAgIGlmKFdvcmtlckhlbHBlci5ERUJVRyl7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiV29ya2VyIHNlbGYgZXhlY3V0aW5nIGFub255bW91cyBmdW5jdGlvbiBzdHJpbmc6XCIpXHJcbiAgICAgICAgY29uc29sZS5pbmZvKGFub25Xb0ZjdFN0cilcclxuICAgICAgfVxyXG4gICAgICAvLyBCdWlsZCB0aGUgd29ya2VyIGJsb2JcclxuICAgICAgbGV0IHdiID0gbmV3IEJsb2IoW3dzXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XHJcblxyXG4gICAgICBsZXQgd29ya2VyQmxvYlVybD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh3Yik7XHJcbiAgICAgIHJldHVybiB3b3JrZXJCbG9iVXJsO1xyXG4gICAgfVxyXG4gIH1cclxuIl19
|