speechrecorderng 2.21.8 → 2.22.3
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/media/utils.mjs +14 -0
- package/esm2020/lib/net/uploader.mjs +31 -5
- package/esm2020/lib/speechrecorder/recording.mjs +23 -6
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +89 -16
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +1164 -0
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +9 -6
- package/esm2020/lib/speechrecorder/session/item.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +82 -0
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +138 -0
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +57 -14
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +14 -8
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +48 -18
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +61 -1
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +15 -8
- package/esm2020/lib/speechrecorderng.component.mjs +1 -1
- package/esm2020/lib/speechrecorderng.module.mjs +8 -4
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/public-api.mjs +3 -2
- package/fesm2015/speechrecorderng.mjs +1699 -86
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +1695 -86
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/media/utils.d.ts +3 -0
- package/lib/net/uploader.d.ts +4 -2
- package/lib/speechrecorder/recording.d.ts +15 -3
- package/lib/speechrecorder/recordings/recordings.service.d.ts +12 -5
- package/lib/speechrecorder/session/audiorecorder.d.ts +150 -0
- package/lib/speechrecorder/session/controlpanel.d.ts +2 -1
- package/lib/speechrecorder/session/item.d.ts +2 -2
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +27 -0
- package/lib/speechrecorder/session/recording_list.d.ts +21 -0
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +6 -2
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +5 -4
- package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +2 -2
- package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +5 -3
- package/lib/speechrecorder/session/sessionmanager.d.ts +5 -5
- package/lib/speechrecorderng.module.d.ts +31 -28
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class MediaUtils {
|
|
2
|
+
static toMediaTime(timeInSeconds) {
|
|
3
|
+
let rest = timeInSeconds;
|
|
4
|
+
let hours = Math.floor(timeInSeconds / 3600);
|
|
5
|
+
rest -= hours * 3600;
|
|
6
|
+
let minutes = Math.floor(rest / 60);
|
|
7
|
+
rest -= minutes * 60;
|
|
8
|
+
let seconds = Math.floor(rest);
|
|
9
|
+
rest -= seconds;
|
|
10
|
+
let millis = Math.round(rest * 1000);
|
|
11
|
+
return hours.toString().padStart(2, '0') + ':' + minutes.toString().padStart(2, '0') + ':' + seconds.toString().padStart(2, '0') + '.' + millis.toString().padStart(3, '0');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbWVkaWEvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0ksTUFBTSxPQUFPLFVBQVU7SUFFbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFvQjtRQUNuQyxJQUFJLElBQUksR0FBQyxhQUFhLENBQUM7UUFDdkIsSUFBSSxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxJQUFFLEtBQUssR0FBQyxJQUFJLENBQUM7UUFDakIsSUFBSSxPQUFPLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFFLE9BQU8sR0FBQyxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUUsT0FBTyxDQUFDO1FBQ2QsSUFBSSxNQUFNLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsR0FBQyxHQUFHLEdBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEdBQUMsR0FBRyxHQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxHQUFDLEdBQUcsR0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNoSyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICAgIGV4cG9ydCBjbGFzcyBNZWRpYVV0aWxzIHtcclxuXHJcbiAgICAgICAgc3RhdGljIHRvTWVkaWFUaW1lKHRpbWVJblNlY29uZHM6bnVtYmVyKTpzdHJpbmd7XHJcbiAgICAgICAgICAgIGxldCByZXN0PXRpbWVJblNlY29uZHM7XHJcbiAgICAgICAgICAgIGxldCBob3Vycz1NYXRoLmZsb29yKHRpbWVJblNlY29uZHMvMzYwMCk7XHJcbiAgICAgICAgICAgIHJlc3QtPWhvdXJzKjM2MDA7XHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzPU1hdGguZmxvb3IocmVzdC82MCk7XHJcbiAgICAgICAgICAgIHJlc3QtPW1pbnV0ZXMqNjA7XHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzPU1hdGguZmxvb3IocmVzdCk7XHJcbiAgICAgICAgICAgIHJlc3QtPXNlY29uZHM7XHJcbiAgICAgICAgICAgIGxldCBtaWxsaXM9TWF0aC5yb3VuZChyZXN0KjEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykrJzonK21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykrJzonK3NlY29uZHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykrJy4nK21pbGxpcy50b1N0cmluZygpLnBhZFN0YXJ0KDMsJzAnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiJdfQ==
|
|
@@ -49,7 +49,14 @@ export class UploaderStatusChangeEvent {
|
|
|
49
49
|
export class Upload {
|
|
50
50
|
constructor(blob, url) {
|
|
51
51
|
this.toString = () => {
|
|
52
|
-
|
|
52
|
+
let s = `Upload: Status: ${this.status}, URL: ${this._url}`;
|
|
53
|
+
if (this._data instanceof Blob) {
|
|
54
|
+
s = s + `, Size: ${this._data.size}`;
|
|
55
|
+
}
|
|
56
|
+
else if (this._data instanceof FormData) {
|
|
57
|
+
// TODO (iterate through parts ??)
|
|
58
|
+
}
|
|
59
|
+
return s;
|
|
53
60
|
};
|
|
54
61
|
this._data = blob;
|
|
55
62
|
this._url = url;
|
|
@@ -77,8 +84,27 @@ export class Uploader {
|
|
|
77
84
|
this._sizeDone = 0;
|
|
78
85
|
this.retryTimerRunning = false;
|
|
79
86
|
this.retryTimerId = null;
|
|
87
|
+
this.te = new TextEncoder();
|
|
80
88
|
this.que = new Array();
|
|
81
89
|
}
|
|
90
|
+
dataSize(dt) {
|
|
91
|
+
let si = 0;
|
|
92
|
+
if (dt instanceof Blob) {
|
|
93
|
+
si = dt.size;
|
|
94
|
+
}
|
|
95
|
+
else if (dt instanceof FormData) {
|
|
96
|
+
dt.forEach((v, k) => {
|
|
97
|
+
if (v instanceof File) {
|
|
98
|
+
si += v.size;
|
|
99
|
+
}
|
|
100
|
+
else if (typeof v === 'string') {
|
|
101
|
+
// encode to UT-f8 to get upload size
|
|
102
|
+
si += this.te.encode().length;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return si;
|
|
107
|
+
}
|
|
82
108
|
uploadDone(ul) {
|
|
83
109
|
ul.status = UploadStatus.DONE;
|
|
84
110
|
// remove upload from queue
|
|
@@ -86,7 +112,7 @@ export class Uploader {
|
|
|
86
112
|
if (this.que[i] === ul) {
|
|
87
113
|
// found, remove
|
|
88
114
|
this.que.splice(i, 1);
|
|
89
|
-
let ulSize = ul.data
|
|
115
|
+
let ulSize = this.dataSize(ul.data);
|
|
90
116
|
this._sizeDone += ulSize;
|
|
91
117
|
break;
|
|
92
118
|
}
|
|
@@ -104,7 +130,7 @@ export class Uploader {
|
|
|
104
130
|
else {
|
|
105
131
|
this.status = UploaderStatus.UPLOADING;
|
|
106
132
|
}
|
|
107
|
-
let dSize = ul.data
|
|
133
|
+
let dSize = this.dataSize(ul.data);
|
|
108
134
|
let timeoutForDataSize = dSize * this.POST_TIMEOUT_PER_KB / 1000;
|
|
109
135
|
let timeoVal = Math.round(this.POST_MIN_TIMEOUT + timeoutForDataSize);
|
|
110
136
|
// pipe(timeout()) is not the same as xhr.timeout
|
|
@@ -210,11 +236,11 @@ export class Uploader {
|
|
|
210
236
|
}
|
|
211
237
|
queueUpload(ul) {
|
|
212
238
|
if (ul) {
|
|
213
|
-
let ulSize = ul.data
|
|
239
|
+
let ulSize = this.dataSize(ul.data);
|
|
214
240
|
this.que.push(ul);
|
|
215
241
|
this._sizeQueued += ulSize;
|
|
216
242
|
this.process();
|
|
217
243
|
}
|
|
218
244
|
}
|
|
219
245
|
}
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbmV0L3VwbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFOLElBQVksWUFBc0U7QUFBbEYsV0FBWSxZQUFZO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLHlEQUFhLENBQUE7SUFBRyxpREFBUyxDQUFBO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLDhDQUFRLENBQUE7QUFBQSxDQUFDLEVBQXRFLFlBQVksS0FBWixZQUFZLFFBQTBEO0FBRWxGLHdCQUF3QjtBQUN4Qiw0RkFBNEY7QUFDNUYsTUFBTSxDQUFOLElBQVksY0FBK0U7QUFBM0YsV0FBWSxjQUFjO0lBQUcsbURBQVEsQ0FBQTtJQUFFLDZEQUFhLENBQUE7SUFBRSxxRUFBaUIsQ0FBQTtJQUFDLG1EQUFRLENBQUE7SUFBRSxrREFBUSxDQUFBO0FBQUEsQ0FBQyxFQUEvRSxjQUFjLEtBQWQsY0FBYyxRQUFpRTtBQUUzRixNQUFNLE9BQU8seUJBQXlCO0lBTWxDLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQXNCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENB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ZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbiAgICBpbXBvcnQgeyB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcblxyXG4gICAgLy8gc3RhdGUgb2YgYW4gdXBsb2FkXHJcbiAgICBleHBvcnQgZW51bSBVcGxvYWRTdGF0dXMge0lETEUgPSAxLCBVUExPQURJTkcgPSAyLCAgQUJPUlQgPSAzLCBET05FID0gMCwgRVJSID0gLTF9XHJcblxyXG4gICAgLy8gc3RhdGUgb2YgdGhlIHVwbG9hZGVyXHJcbiAgICAvLyBUUllfVVBMT0FESU5HIGlzIHVwbG9hZGluZyBzdGF0ZSBhZnRlciBhbiBlcnJvciAoZm9yIGV4YW1wbGUgaWYgZGlzY29ubmVjdGVkIGZyb20gc2VydmVyKVxyXG4gICAgZXhwb3J0IGVudW0gVXBsb2FkZXJTdGF0dXMgeyBET05FID0gMCwgVVBMT0FESU5HID0gMSwgVFJZX1VQTE9BRElORyA9IDIsTkVYVCA9IDMsIEVSUiA9IC0xfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50IHtcclxuICAgICAgICBwcml2YXRlIF9zaXplUXVldWVkOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIF9zaXplRG9uZTpudW1iZXI7XHJcbiAgICAgICAgcHJpdmF0ZSBfc3RhdHVzOiBVcGxvYWRlclN0YXR1cztcclxuXHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHNpemVRdWV1ZWQ6IG51bWJlciwgc2l6ZURvbmU6IG51bWJlciwgc3RhdHVzOiBVcGxvYWRlclN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLl9zaXplUXVldWVkID0gc2l6ZVF1ZXVlZDtcclxuICAgICAgICAgICAgdGhpcy5fc2l6ZURvbmUgPSBzaXplRG9uZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHNpemVRdWV1ZWQoKTpudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVF1ZXVlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzaXplRG9uZSgpOm51bWJlciB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaXplRG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGF0dXMoKTogVXBsb2FkZXJTdGF0dXMge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBsb2FkRG9uZSgpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9zaXplRG9uZSA+PSB0aGlzLl9zaXplUXVldWVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBlcmNlbnREb25lKCk6IG51bWJlciB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaXplUXVldWVkID09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEgcXVldWVkLCB3ZSBhcmUgXCJkb25lXCJcclxuICAgICAgICAgICAgICAgIHJldHVybiAxMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBlcmNlbnQgPSBNYXRoLmZsb29yKHRoaXMuX3NpemVEb25lICogMTAwIC8gdGhpcy5fc2l6ZVF1ZXVlZCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgc3RhdHVzOiBxdWV1ZWQ6IFwiK3RoaXMuX3NpemVRdWV1ZWQrXCIsIGRvbmU6IFwiK3RoaXMuX3NpemVEb25lK1wiLCBcIitwZXJjZW50K1wiJVwiKVxyXG4gICAgICAgICAgICByZXR1cm4gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWQge1xyXG5cclxuICAgICAgICBwcml2YXRlIF9kYXRhOkJsb2I7XHJcbiAgICAgICAgcHJpdmF0ZSBfdXJsOnN0cmluZztcclxuICAgICAgICBzdGF0dXM6IFVwbG9hZFN0YXR1cztcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IoYmxvYjpCbG9iLCB1cmw6c3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBibG9iO1xyXG4gICAgICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkU3RhdHVzLklETEU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgdXJsKCk6c3RyaW5nIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBkYXRhKCk6QmxvYiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIHB1YmxpYyB0b1N0cmluZyA9ICgpIDogc3RyaW5nID0+IHtcclxuXHJcbiAgICAgICAgcmV0dXJuIGBVcGxvYWQ6IFN0YXR1czogJHt0aGlzLnN0YXR1c30sIFVSTDogJHt0aGlzLl91cmx9LCBTaXplOiAke3RoaXMuX2RhdGEuc2l6ZX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZGVyIHtcclxuICAgICAgICBQT1NUX01JTl9USU1FT1VUPTEyMDAwMDsgLy8gMm1pbiBwbHVzIC4uLlxyXG4gICAgICAgIFBPU1RfVElNRU9VVF9QRVJfS0I9MTAwMDsgIC8vIC4uLiAxcyBwZXIga0JcclxuXHJcbiAgICAgICAgUkVUUllfREVMQVk6IG51bWJlciA9IDMwMDAwOyAvLyByZXRyeSBldmVyeSAzMHNcclxuICAgICAgICBERUJVR19ERUxBWTogbnVtYmVyID0gMDtcclxuICAgICAgICAvL0RFQlVHX0RFTEFZOm51bWJlcj0wO1xyXG4gICAgICAgIHByaXZhdGUgc3RhdHVzOiBVcGxvYWRlclN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLkRPTkU7XHJcbiAgICAgICAgcHJpdmF0ZSBxdWU6QXJyYXk8VXBsb2FkPjtcclxuICAgICAgICBsaXN0ZW5lcjogKCh1ZTogVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCkgPT4gdm9pZCkgfCBudWxsPW51bGw7XHJcbiAgICAgICAgcHJpdmF0ZSBfc2l6ZVF1ZXVlZDogbnVtYmVyID0gMDtcclxuICAgICAgICBwcml2YXRlIF9zaXplRG9uZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZXRyeVRpbWVyUnVubmluZz1mYWxzZTtcclxuICAgICAgICBwcml2YXRlIHJldHJ5VGltZXJJZDogbnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LHByaXZhdGUgd2l0aENyZWRlbnRpYWxzOmJvb2xlYW49ZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWUgPSBuZXcgQXJyYXk8VXBsb2FkPigpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHByaXZhdGUgIHVwbG9hZERvbmUodWw6VXBsb2FkKSB7XHJcblxyXG4gICAgICAgICAgICB1bC5zdGF0dXMgPSBVcGxvYWRTdGF0dXMuRE9ORTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSB1cGxvYWQgZnJvbSBxdWV1ZVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWVbaV0gPT09IHVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQsIHJlbW92ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdWxTaXplID0gdWwuZGF0YS5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpemVEb25lICs9IHVsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgdG8gZG9uZSBmb3Igbm93Li4uXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuTkVYVDtcclxuICAgICAgICAgICAgLy8gY29udGludWVcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHN0YXJ0VXBsb2FkKHVsOlVwbG9hZCkge1xyXG5cclxuICAgICAgICAgICAgdWwuc3RhdHVzID0gVXBsb2FkU3RhdHVzLlVQTE9BRElORztcclxuICAgICAgICAgICAgaWYgKFVwbG9hZGVyU3RhdHVzLkVSUiA9PT0gdGhpcy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuVFJZX1VQTE9BRElORztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuVVBMT0FESU5HO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZFNpemU9dWwuZGF0YS5zaXplXHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0Rm9yRGF0YVNpemU9ZFNpemUqdGhpcy5QT1NUX1RJTUVPVVRfUEVSX0tCLzEwMDA7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb1ZhbDpudW1iZXI9TWF0aC5yb3VuZCh0aGlzLlBPU1RfTUlOX1RJTUVPVVQrdGltZW91dEZvckRhdGFTaXplKVxyXG4gICAgICAgICAgICAvLyBwaXBlKHRpbWVvdXQoKSkgaXMgbm90IHRoZSBzYW1lIGFzIHhoci50aW1lb3V0XHJcblxyXG4gICAgICAgICAgbGV0IHVwbG9hZGVkVXBsb2FkOlVwbG9hZHxudWxsPW51bGw7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlBvc3QgdXBsb2FkOiBcIit1bClcclxuICAgICAgICAgIHRoaXMuaHR0cC5wb3N0KHVsLnVybCx1bC5kYXRhLHt3aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHN9KS5waXBlKHRpbWVvdXQodGltZW9WYWwpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgIHVwbG9hZGVkVXBsb2FkID0gdWw7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdOZXh0IG1ldGhvZCBjYWxsZWQgZm9yIHVwbG9hZDogJyt1cGxvYWRlZFVwbG9hZClcclxuICAgICAgICAgICAgfSwoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgLy8gQSBjbGllbnQtc2lkZSBvciBuZXR3b3JrIGVycm9yIG9jY3VycmVkLiBIYW5kbGUgaXQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVcGxvYWQgZXJyb3Igb2NjdXJyZWQ6JywgZXJyLmVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGUgYmFja2VuZCByZXR1cm5lZCBhbiB1bnN1Y2Nlc3NmdWwgcmVzcG9uc2UgY29kZS5cclxuICAgICAgICAgICAgICAgIC8vIFRoZSByZXNwb25zZSBib2R5IG1heSBjb250YWluIGNsdWVzIGFzIHRvIHdoYXQgd2VudCB3cm9uZyxcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFVwbG9hZCBlcnJvcjogU2VydmVyIHJldHVybmVkIGNvZGUgJHtlcnIuc3RhdHVzfWApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvcih1bClcclxuICAgICAgICAgICAgfSwoKT0+e1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnVXBsb2FkIGNvbXBsZXRlIG1ldGhvZCBjYWxsZWQnKVxyXG4gICAgICAgICAgICAgIGlmKHVwbG9hZGVkVXBsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ERUJVR19ERUxBWT4wKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZERvbmUodWwpO1xyXG4gICAgICAgICAgICAgICAgICB9LCB0aGlzLkRFQlVHX0RFTEFZKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRG9uZSh1cGxvYWRlZFVwbG9hZClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VwbG9hZCBwb3N0IGNvbXBsZXRlLCBidXQgdXBsb2FkIG5vdCBzZXQgaW4gbmV4dCBtZXRob2QhJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9jZXNzRXJyb3IodWw6VXBsb2FkKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlByb2Nlc3MgdXBsb2FkIGVycm9yLi4uXCIpXHJcbiAgICAgICAgICAgIHVsLnN0YXR1cz1VcGxvYWRTdGF0dXMuRVJSXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuRVJSO1xyXG5cclxuICAgICAgICAgICAgbGV0IHVlID0gbmV3IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQodGhpcy5fc2l6ZVF1ZXVlZCwgdGhpcy5fc2l6ZURvbmUsIHRoaXMuc3RhdHVzKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIodWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgcmV0cnkgdGltZXJcclxuICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVySWQ9d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz1mYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZCByZXRyeSB0aW1lciBleHByaXJlZC4gQ29udGludWUgcHJvY2Vzc2luZy4uLlwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMuUkVUUllfREVMQVkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz10cnVlO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdGFydGVkIHVwbG9hZCByZXRyeSB0aW1lciBcIit0aGlzLlJFVFJZX0RFTEFZK1wibXMgLi4uXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgcHJpdmF0ZSBwcm9jZXNzKCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHJldHJ5IHRpbWVyIGlmIHNldFxyXG4gICAgICAgIGlmKHRoaXMucmV0cnlUaW1lclJ1bm5pbmcpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJldHJ5VGltZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZXJJZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz1mYWxzZVxyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2xlYXJlZCByZXRyeSB0aW1lci5cIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwdWw6IFVwbG9hZCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGxvYWRlciBzdGF0dXM6IFwiK3RoaXMuc3RhdHVzKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucXVlLmxlbmd0aDtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcocytcIiB1cGxvYWRzIGFyZSBpbiB0aGUgcXVldWUuXCIpXHJcblxyXG4gICAgICAgIGlmIChzPjAgJiYgVXBsb2FkZXJTdGF0dXMuVVBMT0FESU5HICE9IHRoaXMuc3RhdHVzICYmIFVwbG9hZGVyU3RhdHVzLlRSWV9VUExPQURJTkcgIT0gdGhpcy5zdGF0dXMpIHtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHM7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdWwgPSB0aGlzLnF1ZVtpXTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBcIit1bCtcIiBzdGF0dXM6XCIrdWwuc3RhdHVzKVxyXG4gICAgICAgICAgICBpZiAodWwuc3RhdHVzID09PSBVcGxvYWRTdGF0dXMuSURMRSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgXCIrdWwrXCIgc3RhcnRVcGxvYWRcIilcclxuICAgICAgICAgICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVsKTtcclxuICAgICAgICAgICAgICBwdWwgPSB1bDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFwdWwpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkNoZWNrIEVSUiB1cGxvYWRzLi4uXCIpXHJcbiAgICAgICAgICAgIC8vIG5vdyBmYWlsZWQgdXBsb2Fkc1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJObyByZWd1bGFyIHVwbG9hZCBmb3VuZC4gTG9va2luZyBmb3IgZXJyb3Igc3RhdGUgdXBsb2Fkcy5cIilcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgdWwgPSB0aGlzLnF1ZVtpXTtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIFwiK3VsK1wiIHN0YXR1czpcIit1bC5zdGF0dXMpXHJcbiAgICAgICAgICAgICAgaWYgKHVsLnN0YXR1cyA9PT0gVXBsb2FkU3RhdHVzLkVSUikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCAoRVJSKSBcIit1bCtcIiBzdGFydFVwbG9hZFwiKVxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU3RhcnQgZXJyb3Igc3RhdGUgdXBsb2FkIFwiK3VsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFVwbG9hZCh1bCk7XHJcbiAgICAgICAgICAgICAgICBwdWwgPSB1bDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihzPT0wKXtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZCBkb25lLlwiKVxyXG4gICAgICAgICAgdGhpcy5zdGF0dXM9VXBsb2FkZXJTdGF0dXMuRE9ORVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdWUgPSBuZXcgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCh0aGlzLl9zaXplUXVldWVkLCB0aGlzLl9zaXplRG9uZSwgdGhpcy5zdGF0dXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RlbmVyKHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgcXVldWVVcGxvYWQodWw6IFVwbG9hZCkge1xyXG4gICAgICAgICAgICBpZiAodWwpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bFNpemUgPSB1bC5kYXRhLnNpemU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZS5wdXNoKHVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NpemVRdWV1ZWQgKz0gdWxTaXplO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuIl19
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbmV0L3VwbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFOLElBQVksWUFBc0U7QUFBbEYsV0FBWSxZQUFZO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLHlEQUFhLENBQUE7SUFBRyxpREFBUyxDQUFBO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLDhDQUFRLENBQUE7QUFBQSxDQUFDLEVBQXRFLFlBQVksS0FBWixZQUFZLFFBQTBEO0FBRWxGLHdCQUF3QjtBQUN4Qiw0RkFBNEY7QUFDNUYsTUFBTSxDQUFOLElBQVksY0FBK0U7QUFBM0YsV0FBWSxjQUFjO0lBQUcsbURBQVEsQ0FBQTtJQUFFLDZEQUFhLENBQUE7SUFBRSxxRUFBaUIsQ0FBQTtJQUFDLG1EQUFRLENBQUE7SUFBRSxrREFBUSxDQUFBO0FBQUEsQ0FBQyxFQUEvRSxjQUFjLEtBQWQsY0FBYyxRQUFpRTtBQUUzRixNQUFNLE9BQU8seUJBQXlCO0lBTWxDLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQXNCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENB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QWdEO3dCQUNoRCwrQ0FBK0M7d0JBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7d0JBQ1QsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFHLENBQUMsSUFBRSxDQUFDLEVBQUM7WUFDTiwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBQyxjQUFjLENBQUMsSUFBSSxDQUFBO1NBQ2hDO1FBQ0QsSUFBSSxFQUFFLEdBQUcsSUFBSSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVDLFdBQVcsQ0FBQyxFQUFVO1FBQ2xCLElBQUksRUFBRSxFQUFFO1lBQ0osSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2xCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbiAgICBpbXBvcnQge0h0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuICAgIGltcG9ydCB7IHRpbWVvdXQgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuXHJcbiAgICAvLyBzdGF0ZSBvZiBhbiB1cGxvYWRcclxuICAgIGV4cG9ydCBlbnVtIFVwbG9hZFN0YXR1cyB7SURMRSA9IDEsIFVQTE9BRElORyA9IDIsICBBQk9SVCA9IDMsIERPTkUgPSAwLCBFUlIgPSAtMX1cclxuXHJcbiAgICAvLyBzdGF0ZSBvZiB0aGUgdXBsb2FkZXJcclxuICAgIC8vIFRSWV9VUExPQURJTkcgaXMgdXBsb2FkaW5nIHN0YXRlIGFmdGVyIGFuIGVycm9yIChmb3IgZXhhbXBsZSBpZiBkaXNjb25uZWN0ZWQgZnJvbSBzZXJ2ZXIpXHJcbiAgICBleHBvcnQgZW51bSBVcGxvYWRlclN0YXR1cyB7IERPTkUgPSAwLCBVUExPQURJTkcgPSAxLCBUUllfVVBMT0FESU5HID0gMixORVhUID0gMywgRVJSID0gLTF9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQge1xyXG4gICAgICAgIHByaXZhdGUgX3NpemVRdWV1ZWQ6bnVtYmVyO1xyXG4gICAgICAgIHByaXZhdGUgX3NpemVEb25lOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIF9zdGF0dXM6IFVwbG9hZGVyU3RhdHVzO1xyXG5cclxuXHJcbiAgICAgICAgY29uc3RydWN0b3Ioc2l6ZVF1ZXVlZDogbnVtYmVyLCBzaXplRG9uZTogbnVtYmVyLCBzdGF0dXM6IFVwbG9hZGVyU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NpemVRdWV1ZWQgPSBzaXplUXVldWVkO1xyXG4gICAgICAgICAgICB0aGlzLl9zaXplRG9uZSA9IHNpemVEb25lO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgc2l6ZVF1ZXVlZCgpOm51bWJlciB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaXplUXVldWVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHNpemVEb25lKCk6bnVtYmVyIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpemVEb25lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHN0YXR1cygpOiBVcGxvYWRlclN0YXR1cyB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cGxvYWREb25lKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuX3NpemVEb25lID49IHRoaXMuX3NpemVRdWV1ZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGVyY2VudERvbmUoKTogbnVtYmVyIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NpemVRdWV1ZWQgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YSBxdWV1ZWQsIHdlIGFyZSBcImRvbmVcIlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDEwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcGVyY2VudCA9IE1hdGguZmxvb3IodGhpcy5fc2l6ZURvbmUgKiAxMDAgLyB0aGlzLl9zaXplUXVldWVkKTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBzdGF0dXM6IHF1ZXVlZDogXCIrdGhpcy5fc2l6ZVF1ZXVlZCtcIiwgZG9uZTogXCIrdGhpcy5fc2l6ZURvbmUrXCIsIFwiK3BlcmNlbnQrXCIlXCIpXHJcbiAgICAgICAgICAgIHJldHVybiBwZXJjZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZCB7XHJcblxyXG4gICAgICAgIHByaXZhdGUgX2RhdGE6QmxvYnxGb3JtRGF0YTtcclxuICAgICAgICBwcml2YXRlIF91cmw6c3RyaW5nO1xyXG4gICAgICAgIHN0YXR1czogVXBsb2FkU3RhdHVzO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihibG9iOkJsb2J8Rm9ybURhdGEsIHVybDpzdHJpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGJsb2I7XHJcbiAgICAgICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRTdGF0dXMuSURMRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCB1cmwoKTpzdHJpbmcge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IGRhdGEoKTpCbG9ifEZvcm1EYXRhIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgcHVibGljIHRvU3RyaW5nID0gKCkgOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGxldCBzPWBVcGxvYWQ6IFN0YXR1czogJHt0aGlzLnN0YXR1c30sIFVSTDogJHt0aGlzLl91cmx9YDtcclxuICAgICAgICBpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgQmxvYil7XHJcbiAgICAgICAgICAgIHM9cytgLCBTaXplOiAke3RoaXMuX2RhdGEuc2l6ZX1gO1xyXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuX2RhdGEgaW5zdGFuY2VvZiAgRm9ybURhdGEpe1xyXG4gICAgICAgICAgIC8vIFRPRE8gKGl0ZXJhdGUgdGhyb3VnaCBwYXJ0cyA/PylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgVXBsb2FkZXIge1xyXG4gICAgICAgIFBPU1RfTUlOX1RJTUVPVVQgPSAxMjAwMDA7IC8vIDJtaW4gcGx1cyAuLi5cclxuICAgICAgICBQT1NUX1RJTUVPVVRfUEVSX0tCID0gMTAwMDsgIC8vIC4uLiAxcyBwZXIga0JcclxuXHJcbiAgICAgICAgUkVUUllfREVMQVk6IG51bWJlciA9IDMwMDAwOyAvLyByZXRyeSBldmVyeSAzMHNcclxuICAgICAgICBERUJVR19ERUxBWTogbnVtYmVyID0gMDtcclxuICAgICAgICAvL0RFQlVHX0RFTEFZOm51bWJlcj0wO1xyXG4gICAgICAgIHByaXZhdGUgc3RhdHVzOiBVcGxvYWRlclN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLkRPTkU7XHJcbiAgICAgICAgcHJpdmF0ZSBxdWU6IEFycmF5PFVwbG9hZD47XHJcbiAgICAgICAgbGlzdGVuZXI6ICgodWU6IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcHJpdmF0ZSBfc2l6ZVF1ZXVlZDogbnVtYmVyID0gMDtcclxuICAgICAgICBwcml2YXRlIF9zaXplRG9uZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZXRyeVRpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHByaXZhdGUgcmV0cnlUaW1lcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSB0ZTpUZXh0RW5jb2Rlcj1uZXcgVGV4dEVuY29kZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlID0gbmV3IEFycmF5PFVwbG9hZD4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgZGF0YVNpemUoZHQ6QmxvYnxGb3JtRGF0YSl7XHJcbiAgICAgICAgICAgIGxldCBzaT0wO1xyXG4gICAgICAgICAgICBpZihkdCBpbnN0YW5jZW9mIEJsb2Ipe1xyXG4gICAgICAgICAgICAgICAgc2k9ZHQuc2l6ZTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoZHQgaW5zdGFuY2VvZiAgRm9ybURhdGEpe1xyXG4gICAgICAgICAgICAgICAgZHQuZm9yRWFjaCgodixrKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHYgaW5zdGFuY2VvZiBGaWxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2krPXYuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdiA9PT0nc3RyaW5nJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuY29kZSB0byBVVC1mOCB0byBnZXQgdXBsb2FkIHNpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2krPSB0aGlzLnRlLmVuY29kZSgpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgIHVwbG9hZERvbmUodWw6VXBsb2FkKSB7XHJcblxyXG4gICAgICAgICAgICB1bC5zdGF0dXMgPSBVcGxvYWRTdGF0dXMuRE9ORTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSB1cGxvYWQgZnJvbSBxdWV1ZVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWVbaV0gPT09IHVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQsIHJlbW92ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdWxTaXplID0gdGhpcy5kYXRhU2l6ZSh1bC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaXplRG9uZSArPSB1bFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHRvIGRvbmUgZm9yIG5vdy4uLlxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLk5FWFQ7XHJcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBzdGFydFVwbG9hZCh1bDpVcGxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgIHVsLnN0YXR1cyA9IFVwbG9hZFN0YXR1cy5VUExPQURJTkc7XHJcbiAgICAgICAgICAgIGlmIChVcGxvYWRlclN0YXR1cy5FUlIgPT09IHRoaXMuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLlRSWV9VUExPQURJTkc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLlVQTE9BRElORztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGRTaXplPXRoaXMuZGF0YVNpemUodWwuZGF0YSk7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0Rm9yRGF0YVNpemU9ZFNpemUqdGhpcy5QT1NUX1RJTUVPVVRfUEVSX0tCLzEwMDA7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb1ZhbDpudW1iZXI9TWF0aC5yb3VuZCh0aGlzLlBPU1RfTUlOX1RJTUVPVVQrdGltZW91dEZvckRhdGFTaXplKVxyXG4gICAgICAgICAgICAvLyBwaXBlKHRpbWVvdXQoKSkgaXMgbm90IHRoZSBzYW1lIGFzIHhoci50aW1lb3V0XHJcblxyXG4gICAgICAgICAgbGV0IHVwbG9hZGVkVXBsb2FkOlVwbG9hZHxudWxsPW51bGw7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlBvc3QgdXBsb2FkOiBcIit1bClcclxuICAgICAgICAgIHRoaXMuaHR0cC5wb3N0KHVsLnVybCx1bC5kYXRhLHt3aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHN9KS5waXBlKHRpbWVvdXQodGltZW9WYWwpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgIHVwbG9hZGVkVXBsb2FkID0gdWw7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdOZXh0IG1ldGhvZCBjYWxsZWQgZm9yIHVwbG9hZDogJyt1cGxvYWRlZFVwbG9hZClcclxuICAgICAgICAgICAgfSwoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgLy8gQSBjbGllbnQtc2lkZSBvciBuZXR3b3JrIGVycm9yIG9jY3VycmVkLiBIYW5kbGUgaXQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVcGxvYWQgZXJyb3Igb2NjdXJyZWQ6JywgZXJyLmVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGUgYmFja2VuZCByZXR1cm5lZCBhbiB1bnN1Y2Nlc3NmdWwgcmVzcG9uc2UgY29kZS5cclxuICAgICAgICAgICAgICAgIC8vIFRoZSByZXNwb25zZSBib2R5IG1heSBjb250YWluIGNsdWVzIGFzIHRvIHdoYXQgd2VudCB3cm9uZyxcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFVwbG9hZCBlcnJvcjogU2VydmVyIHJldHVybmVkIGNvZGUgJHtlcnIuc3RhdHVzfWApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvcih1bClcclxuICAgICAgICAgICAgfSwoKT0+e1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnVXBsb2FkIGNvbXBsZXRlIG1ldGhvZCBjYWxsZWQnKVxyXG4gICAgICAgICAgICAgIGlmKHVwbG9hZGVkVXBsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ERUJVR19ERUxBWT4wKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZERvbmUodWwpO1xyXG4gICAgICAgICAgICAgICAgICB9LCB0aGlzLkRFQlVHX0RFTEFZKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRG9uZSh1cGxvYWRlZFVwbG9hZClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VwbG9hZCBwb3N0IGNvbXBsZXRlLCBidXQgdXBsb2FkIG5vdCBzZXQgaW4gbmV4dCBtZXRob2QhJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9jZXNzRXJyb3IodWw6VXBsb2FkKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlByb2Nlc3MgdXBsb2FkIGVycm9yLi4uXCIpXHJcbiAgICAgICAgICAgIHVsLnN0YXR1cz1VcGxvYWRTdGF0dXMuRVJSXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuRVJSO1xyXG5cclxuICAgICAgICAgICAgbGV0IHVlID0gbmV3IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQodGhpcy5fc2l6ZVF1ZXVlZCwgdGhpcy5fc2l6ZURvbmUsIHRoaXMuc3RhdHVzKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIodWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgcmV0cnkgdGltZXJcclxuICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVySWQ9d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz1mYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZCByZXRyeSB0aW1lciBleHByaXJlZC4gQ29udGludWUgcHJvY2Vzc2luZy4uLlwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMuUkVUUllfREVMQVkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz10cnVlO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdGFydGVkIHVwbG9hZCByZXRyeSB0aW1lciBcIit0aGlzLlJFVFJZX0RFTEFZK1wibXMgLi4uXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgcHJpdmF0ZSBwcm9jZXNzKCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHJldHJ5IHRpbWVyIGlmIHNldFxyXG4gICAgICAgIGlmKHRoaXMucmV0cnlUaW1lclJ1bm5pbmcpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJldHJ5VGltZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZXJJZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz1mYWxzZVxyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2xlYXJlZCByZXRyeSB0aW1lci5cIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwdWw6IFVwbG9hZCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGxvYWRlciBzdGF0dXM6IFwiK3RoaXMuc3RhdHVzKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucXVlLmxlbmd0aDtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcocytcIiB1cGxvYWRzIGFyZSBpbiB0aGUgcXVldWUuXCIpXHJcblxyXG4gICAgICAgIGlmIChzPjAgJiYgVXBsb2FkZXJTdGF0dXMuVVBMT0FESU5HICE9IHRoaXMuc3RhdHVzICYmIFVwbG9hZGVyU3RhdHVzLlRSWV9VUExPQURJTkcgIT0gdGhpcy5zdGF0dXMpIHtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHM7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdWwgPSB0aGlzLnF1ZVtpXTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBcIit1bCtcIiBzdGF0dXM6XCIrdWwuc3RhdHVzKVxyXG4gICAgICAgICAgICBpZiAodWwuc3RhdHVzID09PSBVcGxvYWRTdGF0dXMuSURMRSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgXCIrdWwrXCIgc3RhcnRVcGxvYWRcIilcclxuICAgICAgICAgICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVsKTtcclxuICAgICAgICAgICAgICBwdWwgPSB1bDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFwdWwpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkNoZWNrIEVSUiB1cGxvYWRzLi4uXCIpXHJcbiAgICAgICAgICAgIC8vIG5vdyBmYWlsZWQgdXBsb2Fkc1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJObyByZWd1bGFyIHVwbG9hZCBmb3VuZC4gTG9va2luZyBmb3IgZXJyb3Igc3RhdGUgdXBsb2Fkcy5cIilcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgdWwgPSB0aGlzLnF1ZVtpXTtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIFwiK3VsK1wiIHN0YXR1czpcIit1bC5zdGF0dXMpXHJcbiAgICAgICAgICAgICAgaWYgKHVsLnN0YXR1cyA9PT0gVXBsb2FkU3RhdHVzLkVSUikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCAoRVJSKSBcIit1bCtcIiBzdGFydFVwbG9hZFwiKVxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU3RhcnQgZXJyb3Igc3RhdGUgdXBsb2FkIFwiK3VsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFVwbG9hZCh1bCk7XHJcbiAgICAgICAgICAgICAgICBwdWwgPSB1bDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihzPT0wKXtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZCBkb25lLlwiKVxyXG4gICAgICAgICAgdGhpcy5zdGF0dXM9VXBsb2FkZXJTdGF0dXMuRE9ORVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdWUgPSBuZXcgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCh0aGlzLl9zaXplUXVldWVkLCB0aGlzLl9zaXplRG9uZSwgdGhpcy5zdGF0dXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RlbmVyKHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgcXVldWVVcGxvYWQodWw6IFVwbG9hZCkge1xyXG4gICAgICAgICAgICBpZiAodWwpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bFNpemUgPSB0aGlzLmRhdGFTaXplKHVsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWUucHVzaCh1bCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaXplUXVldWVkICs9IHVsU2l6ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { UUID } from '../utils/utils';
|
|
2
|
-
export class
|
|
2
|
+
export class RecordingFileDescriptorImpl {
|
|
3
3
|
constructor() { }
|
|
4
4
|
}
|
|
5
|
-
export class RecordingFile
|
|
6
|
-
constructor(
|
|
7
|
-
super();
|
|
5
|
+
export class RecordingFile {
|
|
6
|
+
constructor(uuid, sessionId, audioBuffer) {
|
|
8
7
|
this.recordingFileId = null;
|
|
9
8
|
this.uuid = null;
|
|
10
9
|
this.date = null;
|
|
11
10
|
this._dateAsDateObj = null;
|
|
11
|
+
this.startedDate = null;
|
|
12
|
+
this._startedAsDateObj = null;
|
|
12
13
|
this.audioBuffer = null;
|
|
13
14
|
this.session = null;
|
|
14
15
|
this.frames = null;
|
|
@@ -16,10 +17,26 @@ export class RecordingFile extends RecordingFileDescriptor {
|
|
|
16
17
|
this.editStartFrame = null;
|
|
17
18
|
this.editEndFrame = null;
|
|
18
19
|
this.session = sessionId;
|
|
20
|
+
this.audioBuffer = audioBuffer;
|
|
21
|
+
this.uuid = uuid;
|
|
22
|
+
}
|
|
23
|
+
filenameString() {
|
|
24
|
+
let fns = '';
|
|
25
|
+
if (this.session) {
|
|
26
|
+
fns += this.session;
|
|
27
|
+
fns += '_';
|
|
28
|
+
}
|
|
29
|
+
fns += this.uuid;
|
|
30
|
+
return fns;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class SprRecordingFile extends RecordingFile {
|
|
34
|
+
constructor(sessionId, itemcode, version, audioBuffer) {
|
|
35
|
+
super(UUID.generate(), sessionId, audioBuffer);
|
|
36
|
+
this.session = sessionId;
|
|
19
37
|
this.itemCode = itemcode;
|
|
20
38
|
this.version = version;
|
|
21
39
|
this.audioBuffer = audioBuffer;
|
|
22
|
-
this.uuid = UUID.generate();
|
|
23
40
|
}
|
|
24
41
|
filenameString() {
|
|
25
42
|
let fns = '';
|
|
@@ -35,4 +52,4 @@ export class RecordingFile extends RecordingFileDescriptor {
|
|
|
35
52
|
return fns;
|
|
36
53
|
}
|
|
37
54
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFRckMsTUFBTSxPQUFPLDJCQUEyQjtJQUd0QyxnQkFBZSxDQUFDO0NBQ2pCO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFjeEIsWUFBWSxJQUFXLEVBQUMsU0FBdUIsRUFBQyxXQUE0QjtRQWI1RSxvQkFBZSxHQUEwQixJQUFJLENBQUM7UUFDOUMsU0FBSSxHQUFhLElBQUksQ0FBQztRQUN0QixTQUFJLEdBQWMsSUFBSSxDQUFDO1FBQ3ZCLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBQzlCLGdCQUFXLEdBQWMsSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFDbEMsWUFBTyxHQUFvQixJQUFJLENBQUM7UUFDaEMsV0FBTSxHQUFhLElBQUksQ0FBQztRQUN4QixtQkFBYyxHQUFhLElBQUksQ0FBQztRQUNoQyxtQkFBYyxHQUFhLElBQUksQ0FBQTtRQUMvQixpQkFBWSxHQUFhLElBQUksQ0FBQTtRQUczQixJQUFJLENBQUMsT0FBTyxHQUFDLFNBQVMsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFDLFdBQVcsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFDLElBQUksQ0FBQztJQUNqQixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksR0FBRyxHQUFRLEVBQUUsQ0FBQztRQUNsQixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUM7WUFDZCxHQUFHLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNsQixHQUFHLElBQUUsR0FBRyxDQUFDO1NBQ1Y7UUFDRCxHQUFHLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNmLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGO0FBRUcsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGFBQWE7SUFPakQsWUFBWSxTQUF1QixFQUFDLFFBQWUsRUFBQyxPQUFjLEVBQUMsV0FBNEI7UUFDM0YsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBQyxTQUFTLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBQyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBQyxPQUFPLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBQyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7UUFDbEIsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO1lBQ1osR0FBRyxJQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEIsR0FBRyxJQUFFLEdBQUcsQ0FBQztTQUNaO1FBQ0QsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFDO1lBQ2YsR0FBRyxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDbkIsR0FBRyxJQUFFLEdBQUcsQ0FBQztTQUNWO1FBQ0QsR0FBRyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDZixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVVSUQgfSBmcm9tICcuLi91dGlscy91dGlscydcclxuaW1wb3J0IHtQcm9tcHRJdGVtfSBmcm9tIFwiLi9zY3JpcHQvc2NyaXB0XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9yIHtcclxuICByZWNvcmRpbmc6UHJvbXB0SXRlbTtcclxuICB2ZXJzaW9uOm51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbCB7XHJcbiAgcmVjb3JkaW5nITpQcm9tcHRJdGVtO1xyXG4gIHZlcnNpb24hOm51bWJlcjtcclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRpbmdGaWxlIHtcclxuICByZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGw9IG51bGw7XHJcbiAgdXVpZDpzdHJpbmd8bnVsbD1udWxsO1xyXG4gIGRhdGU6IHN0cmluZ3xudWxsPW51bGw7XHJcbiAgX2RhdGVBc0RhdGVPYmo6RGF0ZXxudWxsPW51bGw7XHJcbiAgc3RhcnRlZERhdGU6IHN0cmluZ3xudWxsPW51bGw7XHJcbiAgX3N0YXJ0ZWRBc0RhdGVPYmo/OkRhdGV8bnVsbD1udWxsO1xyXG4gIGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyfG51bGw9bnVsbDtcclxuICBzZXNzaW9uOnN0cmluZ3xudW1iZXJ8bnVsbD1udWxsO1xyXG4gIGZyYW1lczpudW1iZXJ8bnVsbD1udWxsO1xyXG4gIGVkaXRTYW1wbGVSYXRlOm51bWJlcnxudWxsPW51bGw7XHJcbiAgZWRpdFN0YXJ0RnJhbWU6bnVtYmVyfG51bGw9bnVsbFxyXG4gIGVkaXRFbmRGcmFtZTpudW1iZXJ8bnVsbD1udWxsXHJcblxyXG4gIGNvbnN0cnVjdG9yKHV1aWQ6c3RyaW5nLHNlc3Npb25JZDpzdHJpbmd8bnVtYmVyLGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyfG51bGwpIHtcclxuICAgIHRoaXMuc2Vzc2lvbj1zZXNzaW9uSWQ7XHJcbiAgICB0aGlzLmF1ZGlvQnVmZmVyPWF1ZGlvQnVmZmVyO1xyXG4gICAgdGhpcy51dWlkPXV1aWQ7XHJcbiAgfVxyXG5cclxuICBmaWxlbmFtZVN0cmluZygpOnN0cmluZ3tcclxuICAgIGxldCBmbnM6c3RyaW5nPScnO1xyXG4gICAgaWYodGhpcy5zZXNzaW9uKXtcclxuICAgICAgZm5zKz10aGlzLnNlc3Npb247XHJcbiAgICAgIGZucys9J18nO1xyXG4gICAgfVxyXG4gICAgZm5zKz10aGlzLnV1aWQ7XHJcbiAgICByZXR1cm4gZm5zO1xyXG4gIH1cclxufVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBTcHJSZWNvcmRpbmdGaWxlIGV4dGVuZHMgUmVjb3JkaW5nRmlsZSBpbXBsZW1lbnRzICBSZWNvcmRpbmdGaWxlRGVzY3JpcHRvcntcclxuXHJcbiAgICAgIGl0ZW1Db2RlOnN0cmluZztcclxuXHJcbiAgICAgIHJlY29yZGluZyE6UHJvbXB0SXRlbTtcclxuICAgICAgdmVyc2lvbiE6bnVtYmVyO1xyXG5cclxuICAgICAgY29uc3RydWN0b3Ioc2Vzc2lvbklkOnN0cmluZ3xudW1iZXIsaXRlbWNvZGU6c3RyaW5nLHZlcnNpb246bnVtYmVyLGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyfG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyKFVVSUQuZ2VuZXJhdGUoKSxzZXNzaW9uSWQsYXVkaW9CdWZmZXIpO1xyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uPXNlc3Npb25JZDtcclxuICAgICAgICAgIHRoaXMuaXRlbUNvZGU9aXRlbWNvZGU7XHJcbiAgICAgICAgICB0aGlzLnZlcnNpb249dmVyc2lvbjtcclxuICAgICAgICAgIHRoaXMuYXVkaW9CdWZmZXI9YXVkaW9CdWZmZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZpbGVuYW1lU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgICAgIGxldCBmbnM6c3RyaW5nPScnO1xyXG4gICAgICAgIGlmKHRoaXMuc2Vzc2lvbil7XHJcbiAgICAgICAgICAgIGZucys9dGhpcy5zZXNzaW9uO1xyXG4gICAgICAgICAgICBmbnMrPSdfJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5pdGVtQ29kZSl7XHJcbiAgICAgICAgICBmbnMrPXRoaXMuaXRlbUNvZGU7XHJcbiAgICAgICAgICBmbnMrPSdfJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZm5zKz10aGlzLnV1aWQ7XHJcbiAgICAgICAgcmV0dXJuIGZucztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuIl19
|
|
@@ -5,7 +5,7 @@ import { Inject, Injectable } from '@angular/core';
|
|
|
5
5
|
import { HttpHeaders } from "@angular/common/http";
|
|
6
6
|
import { ApiType, SPEECHRECORDER_CONFIG } from "../../spr.config";
|
|
7
7
|
import { UUID } from "../../utils/utils";
|
|
8
|
-
import {
|
|
8
|
+
import { SprRecordingFile } from "../recording";
|
|
9
9
|
import { ProjectService } from "../project/project.service";
|
|
10
10
|
import { SessionService } from "../session/session.service";
|
|
11
11
|
import { Observable } from "rxjs";
|
|
@@ -31,15 +31,26 @@ export class RecordingService {
|
|
|
31
31
|
this.withCredentials = config.withCredentials;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
recordingFilesUrl() {
|
|
35
|
+
let recFilesUrl = this.apiEndPoint + RecordingService.RECORDING_API_CTX;
|
|
36
|
+
return recFilesUrl;
|
|
37
|
+
}
|
|
38
|
+
sessionRecordingFilesUrl(projectName, sessId) {
|
|
39
|
+
let encPrjName = encodeURIComponent(projectName);
|
|
40
|
+
let encSessId = encodeURIComponent(sessId);
|
|
41
|
+
let recFilesUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + encPrjName + '/' +
|
|
42
|
+
SessionService.SESSION_API_CTX + '/' + encSessId + '/' + RecordingService.RECORDING_API_CTX;
|
|
43
|
+
return recFilesUrl;
|
|
44
|
+
}
|
|
45
|
+
sessionRecFilesUrl(projectName, sessId) {
|
|
35
46
|
let encPrjName = encodeURIComponent(projectName);
|
|
36
47
|
let encSessId = encodeURIComponent(sessId);
|
|
37
48
|
let recFilesUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + encPrjName + '/' +
|
|
38
49
|
SessionService.SESSION_API_CTX + '/' + encSessId + '/' + RecordingService.REC_API_CTX;
|
|
39
50
|
return recFilesUrl;
|
|
40
51
|
}
|
|
41
|
-
|
|
42
|
-
let recFilesUrl = this.
|
|
52
|
+
sessionRecFilesReqUrl(projectName, sessId) {
|
|
53
|
+
let recFilesUrl = this.sessionRecFilesUrl(projectName, sessId);
|
|
43
54
|
if (this.config && this.config.apiType === ApiType.FILES) {
|
|
44
55
|
// for development and demo
|
|
45
56
|
// append UUID to make request URL unique to avoid localhost server caching
|
|
@@ -48,37 +59,98 @@ export class RecordingService {
|
|
|
48
59
|
return recFilesUrl;
|
|
49
60
|
}
|
|
50
61
|
recordingFileDescrList(projectName, sessId) {
|
|
51
|
-
let recFilesReqUrl = this.
|
|
62
|
+
let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName, sessId);
|
|
52
63
|
let wobs = this.http.get(recFilesReqUrl, { withCredentials: this.withCredentials });
|
|
53
64
|
return wobs;
|
|
54
65
|
}
|
|
55
66
|
recordingFileList(projectName, sessId) {
|
|
56
|
-
let recFilesReqUrl = this.
|
|
67
|
+
let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName, sessId);
|
|
57
68
|
let wobs = this.http.get(recFilesReqUrl, { withCredentials: this.withCredentials });
|
|
58
69
|
return wobs;
|
|
59
70
|
}
|
|
60
|
-
|
|
61
|
-
let
|
|
62
|
-
let
|
|
63
|
-
|
|
71
|
+
sprRecordingFileList(projectName, sessId) {
|
|
72
|
+
let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName, sessId);
|
|
73
|
+
let wobs = this.http.get(recFilesReqUrl, { withCredentials: this.withCredentials });
|
|
74
|
+
return wobs;
|
|
75
|
+
}
|
|
76
|
+
audioRequest(audioUrl) {
|
|
64
77
|
if (this.config && this.config.apiType === ApiType.FILES) {
|
|
65
78
|
// for development and demo
|
|
66
79
|
// append UUID to make request URL unique to avoid localhost server caching
|
|
67
|
-
|
|
80
|
+
audioUrl = audioUrl + '.wav?requestUUID=' + UUID.generate();
|
|
68
81
|
}
|
|
69
82
|
let headers = new HttpHeaders();
|
|
70
83
|
headers = headers.set('Accept', 'audio/wav');
|
|
71
|
-
return this.http.get(
|
|
84
|
+
return this.http.get(audioUrl, {
|
|
72
85
|
headers: headers,
|
|
73
86
|
observe: 'response',
|
|
74
87
|
responseType: 'arraybuffer',
|
|
75
88
|
withCredentials: this.withCredentials
|
|
76
89
|
});
|
|
77
90
|
}
|
|
91
|
+
fetchAudiofile(projectName, sessId, recFileId) {
|
|
92
|
+
let recFilesUrl = this.sessionRecordingFilesUrl(projectName, sessId);
|
|
93
|
+
let encRecFileId = encodeURIComponent(recFileId);
|
|
94
|
+
let recUrl = recFilesUrl + '/' + encRecFileId;
|
|
95
|
+
return this.audioRequest(recUrl);
|
|
96
|
+
}
|
|
97
|
+
fetchSprAudiofile(projectName, sessId, itemcode, version) {
|
|
98
|
+
let recFilesUrl = this.sessionRecFilesUrl(projectName, sessId);
|
|
99
|
+
let encItemcode = encodeURIComponent(itemcode);
|
|
100
|
+
let recUrl = recFilesUrl + '/' + encItemcode + '/' + version;
|
|
101
|
+
return this.audioRequest(recUrl);
|
|
102
|
+
}
|
|
78
103
|
fetchAndApplyRecordingFile(aCtx, projectName, recordingFile) {
|
|
104
|
+
let wobs = new Observable(observer => {
|
|
105
|
+
if (recordingFile.session && recordingFile.recordingFileId) {
|
|
106
|
+
let obs = this.fetchAudiofile(projectName, recordingFile.session, recordingFile.recordingFileId);
|
|
107
|
+
obs.subscribe(resp => {
|
|
108
|
+
//console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
|
|
109
|
+
// Do not use Promise version, which does not work with Safari 13 (13.0.5)
|
|
110
|
+
if (resp.body) {
|
|
111
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
112
|
+
recordingFile.audioBuffer = ab;
|
|
113
|
+
if (this.debugDelay > 0) {
|
|
114
|
+
window.setTimeout(() => {
|
|
115
|
+
observer.next(recordingFile);
|
|
116
|
+
observer.complete();
|
|
117
|
+
}, this.debugDelay);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
observer.next(recordingFile);
|
|
121
|
+
observer.complete();
|
|
122
|
+
}
|
|
123
|
+
}, error => {
|
|
124
|
+
observer.error(error);
|
|
125
|
+
observer.complete();
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
observer.error('Fetching audio file: response has no body');
|
|
130
|
+
}
|
|
131
|
+
}, (error) => {
|
|
132
|
+
if (error.status == 404) {
|
|
133
|
+
// Interpret not as an error, the file ist not recorded yet
|
|
134
|
+
observer.next(null);
|
|
135
|
+
observer.complete();
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// all other states are errors
|
|
139
|
+
observer.error(error);
|
|
140
|
+
observer.complete();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
observer.error();
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return wobs;
|
|
149
|
+
}
|
|
150
|
+
fetchAndApplySprRecordingFile(aCtx, projectName, recordingFile) {
|
|
79
151
|
let wobs = new Observable(observer => {
|
|
80
152
|
if (recordingFile.session) {
|
|
81
|
-
let obs = this.
|
|
153
|
+
let obs = this.fetchSprAudiofile(projectName, recordingFile.session, recordingFile.itemCode, recordingFile.version);
|
|
82
154
|
obs.subscribe(resp => {
|
|
83
155
|
//console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
|
|
84
156
|
// Do not use Promise version, which does not work with Safari 13 (13.0.5)
|
|
@@ -124,12 +196,12 @@ export class RecordingService {
|
|
|
124
196
|
}
|
|
125
197
|
fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
|
|
126
198
|
let wobs = new Observable(observer => {
|
|
127
|
-
let obs = this.
|
|
199
|
+
let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
|
|
128
200
|
obs.subscribe(resp => {
|
|
129
201
|
// Do not use Promise version, which does not work with Safari 13
|
|
130
202
|
if (resp.body) {
|
|
131
203
|
aCtx.decodeAudioData(resp.body, ab => {
|
|
132
|
-
let rf = new
|
|
204
|
+
let rf = new SprRecordingFile(sessId, itemcode, version, ab);
|
|
133
205
|
if (this.debugDelay > 0) {
|
|
134
206
|
window.setTimeout(() => {
|
|
135
207
|
observer.next(rf);
|
|
@@ -162,6 +234,7 @@ export class RecordingService {
|
|
|
162
234
|
}
|
|
163
235
|
}
|
|
164
236
|
RecordingService.REC_API_CTX = 'recfile';
|
|
237
|
+
RecordingService.RECORDING_API_CTX = 'recordingfile';
|
|
165
238
|
RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
166
239
|
RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: RecordingService });
|
|
167
240
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: RecordingService, decorators: [{
|
|
@@ -170,4 +243,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
170
243
|
type: Inject,
|
|
171
244
|
args: [SPEECHRECORDER_CONFIG]
|
|
172
245
|
}] }]; } });
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5ncy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZ3MvcmVjb3JkaW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFnQyxXQUFXLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsYUFBYSxFQUEwQixNQUFNLGNBQWMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7QUFHaEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFDLFNBQVMsQ0FBQTtBQUtsQyxNQUFNLE9BQU8sZ0JBQWdCO0lBUzNCLFlBQW9CLElBQWdCLEVBQXlDLE1BQTZCO1FBQXRGLFNBQUksR0FBSixJQUFJLENBQVk7UUFBeUMsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFMbEcsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFekMsa0NBQWtDO1FBQzFCLGVBQVUsR0FBUSxDQUFDLENBQUM7UUFJMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUE7UUFFckIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxX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UyxDQUFBOzZHQUZuQyxnQkFBZ0IsNENBU21CLHFCQUFxQjtpSEFUeEQsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQVU4QixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDcmVhdGVkIGJ5IGtsYXVzaiBvbiAxNy4wNi4yMDE3LlxyXG4gKi9cclxuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtBcGlUeXBlLCBTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5cclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlLCBSZWNvcmRpbmdGaWxlRGVzY3JpcHRvcn0gZnJvbSBcIi4uL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi4vcHJvamVjdC9wcm9qZWN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZXNzaW9uU2VydmljZX0gZnJvbSBcIi4uL3Nlc3Npb24vc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgUkVDX0FQSV9DVFg9J3JlY2ZpbGUnXHJcblxyXG5cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ1NlcnZpY2Uge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFQ19BUElfQ1RYID0gJ3JlY2ZpbGUnXHJcbiAgcHJpdmF0ZSBhcGlFbmRQb2ludDogc3RyaW5nO1xyXG4gIHByaXZhdGUgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vcHJpdmF0ZSBkZWJ1Z0RlbGF5Om51bWJlcj0xMDAwMDtcclxuICBwcml2YXRlIGRlYnVnRGVsYXk6bnVtYmVyPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuXHJcbiAgICB0aGlzLmFwaUVuZFBvaW50ID0gJydcclxuXHJcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICB0aGlzLmFwaUVuZFBvaW50ID0gY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuYXBpRW5kUG9pbnQgPSB0aGlzLmFwaUVuZFBvaW50ICsgJy8nXHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLndpdGhDcmVkZW50aWFscyAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzID0gY29uZmlnLndpdGhDcmVkZW50aWFscztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjRmlsZXNVcmwocHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIpOnN0cmluZ3tcclxuICAgIGxldCBlbmNQcmpOYW1lPWVuY29kZVVSSUNvbXBvbmVudChwcm9qZWN0TmFtZSk7XHJcbiAgICBsZXQgZW5jU2Vzc0lkPWVuY29kZVVSSUNvbXBvbmVudChzZXNzSWQpO1xyXG4gICAgbGV0IHJlY0ZpbGVzVXJsID0gdGhpcy5hcGlFbmRQb2ludCArIFByb2plY3RTZXJ2aWNlLlBST0pFQ1RfQVBJX0NUWCArICcvJyArIGVuY1Byak5hbWUgKyAnLycgK1xyXG4gICAgICAgIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWCArICcvJyArIGVuY1Nlc3NJZCArICcvJyArIFJlY29yZGluZ1NlcnZpY2UuUkVDX0FQSV9DVFg7XHJcbiAgICByZXR1cm4gcmVjRmlsZXNVcmw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY0ZpbGVzUmVxVXJsKHByb2plY3ROYW1lOiBzdHJpbmcsIHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyKTpzdHJpbmd7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmw9dGhpcy5yZWNGaWxlc1VybChwcm9qZWN0TmFtZSxzZXNzSWQpO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaVR5cGUgPT09IEFwaVR5cGUuRklMRVMpIHtcclxuICAgICAgLy8gZm9yIGRldmVsb3BtZW50IGFuZCBkZW1vXHJcbiAgICAgIC8vIGFwcGVuZCBVVUlEIHRvIG1ha2UgcmVxdWVzdCBVUkwgdW5pcXVlIHRvIGF2b2lkIGxvY2FsaG9zdCBzZXJ2ZXIgY2FjaGluZ1xyXG4gICAgICByZWNGaWxlc1VybCA9IHJlY0ZpbGVzVXJsICsgJy5qc29uP3JlcXVlc3RVVUlEPScgKyBVVUlELmdlbmVyYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVjRmlsZXNVcmw7XHJcbiAgfVxyXG5cclxuICByZWNvcmRpbmdGaWxlRGVzY3JMaXN0KHByb2plY3ROYW1lOiBzdHJpbmcsIHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyKTpPYnNlcnZhYmxlPEFycmF5PFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9yPj4ge1xyXG4gICAgbGV0IHJlY0ZpbGVzUmVxVXJsID0gdGhpcy5yZWNGaWxlc1JlcVVybChwcm9qZWN0TmFtZSxzZXNzSWQpO1xyXG4gICAgbGV0IHdvYnMgPSB0aGlzLmh0dHAuZ2V0PEFycmF5PFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9yPj4ocmVjRmlsZXNSZXFVcmwse3dpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFsc30pO1xyXG4gICAgcmV0dXJuIHdvYnM7XHJcbiAgfVxyXG5cclxuICByZWNvcmRpbmdGaWxlTGlzdChwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlcik6T2JzZXJ2YWJsZTxBcnJheTxSZWNvcmRpbmdGaWxlPj4ge1xyXG4gICAgbGV0IHJlY0ZpbGVzUmVxVXJsID0gdGhpcy5yZWNGaWxlc1JlcVVybChwcm9qZWN0TmFtZSxzZXNzSWQpO1xyXG4gICAgbGV0IHdvYnMgPSB0aGlzLmh0dHAuZ2V0PEFycmF5PFJlY29yZGluZ0ZpbGU+PihyZWNGaWxlc1JlcVVybCx7d2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzfSk7XHJcbiAgICByZXR1cm4gd29icztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hBdWRpb2ZpbGUocHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIsIGl0ZW1jb2RlOiBzdHJpbmcsdmVyc2lvbjpudW1iZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheUJ1ZmZlcj4+IHtcclxuICAgIGxldCByZWNGaWxlc1VybD10aGlzLnJlY0ZpbGVzVXJsKHByb2plY3ROYW1lLHNlc3NJZCk7XHJcbiAgICBsZXQgZW5jSXRlbWNvZGU9ZW5jb2RlVVJJQ29tcG9uZW50KGl0ZW1jb2RlKTtcclxuICAgIGxldCByZWNVcmwgPSByZWNGaWxlc1VybCArICcvJyArIGVuY0l0ZW1jb2RlICsnLycrdmVyc2lvbjtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgcmVjVXJsID0gcmVjVXJsICsgJy53YXY/cmVxdWVzdFVVSUQ9JyArIFVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXVkaW8vd2F2Jyk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChyZWNVcmwsIHtcclxuICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBmZXRjaEFuZEFwcGx5UmVjb3JkaW5nRmlsZShhQ3R4OiBBdWRpb0NvbnRleHQsIHByb2plY3ROYW1lOiBzdHJpbmcscmVjb3JkaW5nRmlsZTpSZWNvcmRpbmdGaWxlKTpPYnNlcnZhYmxlPFJlY29yZGluZ0ZpbGV8bnVsbD4ge1xyXG5cclxuICAgIGxldCB3b2JzID0gbmV3IE9ic2VydmFibGU8UmVjb3JkaW5nRmlsZXxudWxsPihvYnNlcnZlcj0+e1xyXG4gICAgICBpZihyZWNvcmRpbmdGaWxlLnNlc3Npb24pIHtcclxuICAgICAgICBsZXQgb2JzID0gdGhpcy5mZXRjaEF1ZGlvZmlsZShwcm9qZWN0TmFtZSwgcmVjb3JkaW5nRmlsZS5zZXNzaW9uLCByZWNvcmRpbmdGaWxlLml0ZW1Db2RlLCByZWNvcmRpbmdGaWxlLnZlcnNpb24pO1xyXG4gICAgICAgIG9icy5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkZldGNoZWQgYXVkaW8gZmlsZS4gSFRUUCByZXNwb25zZSBzdGF0dXM6IFwiK3Jlc3Auc3RhdHVzK1wiLCB0eXBlOiBcIityZXNwLnR5cGUrXCIsIGJ5dGUgbGVuZ3RoOiBcIisgcmVzcC5ib2R5LmJ5dGVMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxMyAoMTMuMC41KVxyXG4gICAgICAgICAgICAgIGlmIChyZXNwLmJvZHkpIHtcclxuICAgICAgICAgICAgICAgIGFDdHguZGVjb2RlQXVkaW9EYXRhKHJlc3AuYm9keSwgYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRpbmdGaWxlLmF1ZGlvQnVmZmVyID0gYWI7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnRGVsYXkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuZGVidWdEZWxheSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZWNvcmRpbmdGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdGZXRjaGluZyBhdWRpbyBmaWxlOiByZXNwb25zZSBoYXMgbm8gYm9keScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hSZWNvcmRpbmdGaWxlKGFDdHg6IEF1ZGlvQ29udGV4dCwgcHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIsIGl0ZW1jb2RlOiBzdHJpbmcsdmVyc2lvbjpudW1iZXIpOk9ic2VydmFibGU8UmVjb3JkaW5nRmlsZXxudWxsPiB7XHJcblxyXG4gICAgbGV0IHdvYnMgPSBuZXcgT2JzZXJ2YWJsZTxSZWNvcmRpbmdGaWxlIHwgbnVsbD4ob2JzZXJ2ZXI9PntcclxuICAgICAgbGV0IG9icyA9IHRoaXMuZmV0Y2hBdWRpb2ZpbGUocHJvamVjdE5hbWUsIHNlc3NJZCwgaXRlbWNvZGUsdmVyc2lvbik7XHJcblxyXG5cclxuICAgICAgb2JzLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTNcclxuICAgICAgICAgIGlmKHJlc3AuYm9keSkge1xyXG4gICAgICAgICAgICBhQ3R4LmRlY29kZUF1ZGlvRGF0YShyZXNwLmJvZHksIGFiID0+IHtcclxuICAgICAgICAgICAgICBsZXQgcmYgPSBuZXcgUmVjb3JkaW5nRmlsZShzZXNzSWQsIGl0ZW1jb2RlLCB2ZXJzaW9uLCBhYik7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdEZWxheSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmYpO1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgdGhpcy5kZWJ1Z0RlbGF5KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZik7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgIC8vIEludGVycHJldCBub3QgYXMgYW4gZXJyb3IsIHRoZSBmaWxlIGlzdCBub3QgcmVjb3JkZWQgeWV0XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAvLyBhbGwgb3RoZXIgc3RhdGVzIGFyZSBlcnJvcnNcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHdvYnM7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuXHJcbiJdfQ==
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5ncy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZ3MvcmVjb3JkaW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFnQyxXQUFXLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQTZDLE1BQU0sY0FBYyxDQUFDO0FBQzFGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7OztBQUdoQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUMsU0FBUyxDQUFBO0FBS2xDLE1BQU0sT0FBTyxnQkFBZ0I7SUFVM0IsWUFBb0IsSUFBZ0IsRUFBeUMsTUFBNkI7UUFBdEYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUF5QyxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUxsRyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUV6QyxrQ0FBa0M7UUFDMUIsZUFBVSxHQUFRLENBQUMsQ0FBQztRQUkxQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUVyQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFD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QUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUNyQjs2QkFBTTs0QkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNsQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQ3JCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO3FCQUFJO29CQUNILFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDbEI7WUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUF3QixFQUFFLEVBQUU7Z0JBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7b0JBQ3ZCLDJEQUEyRDtvQkFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFBO2lCQUNwQjtxQkFBSTtvQkFDSCw4QkFBOEI7b0JBQzlCLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3RCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDckI7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQWpQc0IsNEJBQVcsR0FBRyxTQUFTLENBQUE7QUFDdkIsa0NBQWlCLEdBQUMsZUFBZSxDQUFBOzZHQUg3QyxnQkFBZ0IsNENBVW1CLHFCQUFxQjtpSEFWeEQsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQVc4QixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDcmVhdGVkIGJ5IGtsYXVzaiBvbiAxNy4wNi4yMDE3LlxyXG4gKi9cclxuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtBcGlUeXBlLCBTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5cclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtTcHJSZWNvcmRpbmdGaWxlLCBSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGwsIFJlY29yZGluZ0ZpbGV9IGZyb20gXCIuLi9yZWNvcmRpbmdcIjtcclxuaW1wb3J0IHtQcm9qZWN0U2VydmljZX0gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuLi9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IFJFQ19BUElfQ1RYPSdyZWNmaWxlJ1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRpbmdTZXJ2aWNlIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRUNfQVBJX0NUWCA9ICdyZWNmaWxlJ1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVDT1JESU5HX0FQSV9DVFg9J3JlY29yZGluZ2ZpbGUnXHJcbiAgcHJpdmF0ZSBhcGlFbmRQb2ludDogc3RyaW5nO1xyXG4gIHByaXZhdGUgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vcHJpdmF0ZSBkZWJ1Z0RlbGF5Om51bWJlcj0xMDAwMDtcclxuICBwcml2YXRlIGRlYnVnRGVsYXk6bnVtYmVyPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuXHJcbiAgICB0aGlzLmFwaUVuZFBvaW50ID0gJydcclxuXHJcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICB0aGlzLmFwaUVuZFBvaW50ID0gY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuYXBpRW5kUG9pbnQgPSB0aGlzLmFwaUVuZFBvaW50ICsgJy8nXHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLndpdGhDcmVkZW50aWFscyAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzID0gY29uZmlnLndpdGhDcmVkZW50aWFscztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjb3JkaW5nRmlsZXNVcmwoKTpzdHJpbmd7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICArIFJlY29yZGluZ1NlcnZpY2UuUkVDT1JESU5HX0FQSV9DVFg7XHJcbiAgICByZXR1cm4gcmVjRmlsZXNVcmw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlc3Npb25SZWNvcmRpbmdGaWxlc1VybChwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlcik6c3RyaW5ne1xyXG4gICAgbGV0IGVuY1Byak5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KHByb2plY3ROYW1lKTtcclxuICAgIGxldCBlbmNTZXNzSWQ9ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3NJZCk7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgUHJvamVjdFNlcnZpY2UuUFJPSkVDVF9BUElfQ1RYICsgJy8nICsgZW5jUHJqTmFtZSArICcvJyArXHJcbiAgICAgIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWCArICcvJyArIGVuY1Nlc3NJZCArICcvJyArIFJlY29yZGluZ1NlcnZpY2UuUkVDT1JESU5HX0FQSV9DVFg7XHJcbiAgICByZXR1cm4gcmVjRmlsZXNVcmw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlc3Npb25SZWNGaWxlc1VybChwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlcik6c3RyaW5ne1xyXG4gICAgbGV0IGVuY1Byak5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KHByb2plY3ROYW1lKTtcclxuICAgIGxldCBlbmNTZXNzSWQ9ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3NJZCk7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgUHJvamVjdFNlcnZpY2UuUFJPSkVDVF9BUElfQ1RYICsgJy8nICsgZW5jUHJqTmFtZSArICcvJyArXHJcbiAgICAgICAgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYICsgJy8nICsgZW5jU2Vzc0lkICsgJy8nICsgUmVjb3JkaW5nU2VydmljZS5SRUNfQVBJX0NUWDtcclxuICAgIHJldHVybiByZWNGaWxlc1VybDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Vzc2lvblJlY0ZpbGVzUmVxVXJsKHByb2plY3ROYW1lOiBzdHJpbmcsIHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyKTpzdHJpbmd7XHJcbiAgICBsZXQgcmVjRmlsZXNVcmw9dGhpcy5zZXNzaW9uUmVjRmlsZXNVcmwocHJvamVjdE5hbWUsc2Vzc0lkKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgcmVjRmlsZXNVcmwgPSByZWNGaWxlc1VybCArICcuanNvbj9yZXF1ZXN0VVVJRD0nICsgVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlY0ZpbGVzVXJsO1xyXG4gIH1cclxuXHJcbiAgcmVjb3JkaW5nRmlsZURlc2NyTGlzdChwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlcik6T2JzZXJ2YWJsZTxBcnJheTxSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGw+PiB7XHJcbiAgICBsZXQgcmVjRmlsZXNSZXFVcmwgPSB0aGlzLnNlc3Npb25SZWNGaWxlc1JlcVVybChwcm9qZWN0TmFtZSxzZXNzSWQpO1xyXG4gICAgbGV0IHdvYnMgPSB0aGlzLmh0dHAuZ2V0PEFycmF5PFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbD4+KHJlY0ZpbGVzUmVxVXJsLHt3aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHN9KTtcclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgcmVjb3JkaW5nRmlsZUxpc3QocHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIpOk9ic2VydmFibGU8QXJyYXk8UmVjb3JkaW5nRmlsZT4+IHtcclxuICAgIGxldCByZWNGaWxlc1JlcVVybCA9IHRoaXMuc2Vzc2lvblJlY0ZpbGVzUmVxVXJsKHByb2plY3ROYW1lLHNlc3NJZCk7XHJcbiAgICBsZXQgd29icyA9IHRoaXMuaHR0cC5nZXQ8QXJyYXk8UmVjb3JkaW5nRmlsZT4+KHJlY0ZpbGVzUmVxVXJsLHt3aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHN9KTtcclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgc3ByUmVjb3JkaW5nRmlsZUxpc3QocHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIpOk9ic2VydmFibGU8QXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4+IHtcclxuICAgIGxldCByZWNGaWxlc1JlcVVybCA9IHRoaXMuc2Vzc2lvblJlY0ZpbGVzUmVxVXJsKHByb2plY3ROYW1lLHNlc3NJZCk7XHJcbiAgICBsZXQgd29icyA9IHRoaXMuaHR0cC5nZXQ8QXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4+KHJlY0ZpbGVzUmVxVXJsLHt3aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHN9KTtcclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdWRpb1JlcXVlc3QoYXVkaW9Vcmw6c3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXlCdWZmZXI+PiB7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgIGF1ZGlvVXJsID0gYXVkaW9VcmwgKyAnLndhdj9yZXF1ZXN0VVVJRD0nICsgVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgfVxyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ2F1ZGlvL3dhdicpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXVkaW9VcmwsIHtcclxuICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoQXVkaW9maWxlKHByb2plY3ROYW1lOiBzdHJpbmcsIHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyLCByZWNGaWxlSWQ6IHN0cmluZ3xudW1iZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheUJ1ZmZlcj4+IHtcclxuICAgIGxldCByZWNGaWxlc1VybD10aGlzLnNlc3Npb25SZWNvcmRpbmdGaWxlc1VybChwcm9qZWN0TmFtZSxzZXNzSWQpO1xyXG4gICAgbGV0IGVuY1JlY0ZpbGVJZD1lbmNvZGVVUklDb21wb25lbnQocmVjRmlsZUlkKTtcclxuICAgIGxldCByZWNVcmwgPSByZWNGaWxlc1VybCArICcvJyArIGVuY1JlY0ZpbGVJZDtcclxuICAgIHJldHVybiB0aGlzLmF1ZGlvUmVxdWVzdChyZWNVcmwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaFNwckF1ZGlvZmlsZShwcm9qZWN0TmFtZTogc3RyaW5nLCBzZXNzSWQ6IHN0cmluZyB8IG51bWJlciwgaXRlbWNvZGU6IHN0cmluZyx2ZXJzaW9uOm51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPj4ge1xyXG4gICAgbGV0IHJlY0ZpbGVzVXJsPXRoaXMuc2Vzc2lvblJlY0ZpbGVzVXJsKHByb2plY3ROYW1lLHNlc3NJZCk7XHJcbiAgICBsZXQgZW5jSXRlbWNvZGU9ZW5jb2RlVVJJQ29tcG9uZW50KGl0ZW1jb2RlKTtcclxuICAgIGxldCByZWNVcmwgPSByZWNGaWxlc1VybCArICcvJyArIGVuY0l0ZW1jb2RlICsnLycrdmVyc2lvbjtcclxuICAgIHJldHVybiB0aGlzLmF1ZGlvUmVxdWVzdChyZWNVcmwpO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hBbmRBcHBseVJlY29yZGluZ0ZpbGUoYUN0eDogQXVkaW9Db250ZXh0LCBwcm9qZWN0TmFtZTogc3RyaW5nLCByZWNvcmRpbmdGaWxlOlJlY29yZGluZ0ZpbGUpOk9ic2VydmFibGU8UmVjb3JkaW5nRmlsZXxudWxsPiB7XHJcblxyXG4gICAgbGV0IHdvYnMgPSBuZXcgT2JzZXJ2YWJsZTxSZWNvcmRpbmdGaWxlfG51bGw+KG9ic2VydmVyPT57XHJcbiAgICAgIGlmKHJlY29yZGluZ0ZpbGUuc2Vzc2lvbiAmJiByZWNvcmRpbmdGaWxlLnJlY29yZGluZ0ZpbGVJZCkge1xyXG4gICAgICAgIGxldCBvYnMgPSB0aGlzLmZldGNoQXVkaW9maWxlKHByb2plY3ROYW1lLCByZWNvcmRpbmdGaWxlLnNlc3Npb24sIHJlY29yZGluZ0ZpbGUucmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICBvYnMuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRmV0Y2hlZCBhdWRpbyBmaWxlLiBIVFRQIHJlc3BvbnNlIHN0YXR1czogXCIrcmVzcC5zdGF0dXMrXCIsIHR5cGU6IFwiK3Jlc3AudHlwZStcIiwgYnl0ZSBsZW5ndGg6IFwiKyByZXNwLmJvZHkuYnl0ZUxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxMyAoMTMuMC41KVxyXG4gICAgICAgICAgICBpZiAocmVzcC5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgYUN0eC5kZWNvZGVBdWRpb0RhdGEocmVzcC5ib2R5LCBhYiA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRpbmdGaWxlLmF1ZGlvQnVmZmVyID0gYWI7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Z0RlbGF5ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgfSwgdGhpcy5kZWJ1Z0RlbGF5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdGZXRjaGluZyBhdWRpbyBmaWxlOiByZXNwb25zZSBoYXMgbm8gYm9keScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgICAgICAgIC8vIEludGVycHJldCBub3QgYXMgYW4gZXJyb3IsIHRoZSBmaWxlIGlzdCBub3QgcmVjb3JkZWQgeWV0XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBvYnNlcnZlci5lcnJvcigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gd29icztcclxuICB9XHJcblxyXG4gIGZldGNoQW5kQXBwbHlTcHJSZWNvcmRpbmdGaWxlKGFDdHg6IEF1ZGlvQ29udGV4dCwgcHJvamVjdE5hbWU6IHN0cmluZywgcmVjb3JkaW5nRmlsZTpTcHJSZWNvcmRpbmdGaWxlKTpPYnNlcnZhYmxlPFNwclJlY29yZGluZ0ZpbGV8bnVsbD4ge1xyXG5cclxuICAgIGxldCB3b2JzID0gbmV3IE9ic2VydmFibGU8U3ByUmVjb3JkaW5nRmlsZXxudWxsPihvYnNlcnZlcj0+e1xyXG4gICAgICBpZihyZWNvcmRpbmdGaWxlLnNlc3Npb24pIHtcclxuICAgICAgICBsZXQgb2JzID0gdGhpcy5mZXRjaFNwckF1ZGlvZmlsZShwcm9qZWN0TmFtZSwgcmVjb3JkaW5nRmlsZS5zZXNzaW9uLCByZWNvcmRpbmdGaWxlLml0ZW1Db2RlLCByZWNvcmRpbmdGaWxlLnZlcnNpb24pO1xyXG4gICAgICAgIG9icy5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkZldGNoZWQgYXVkaW8gZmlsZS4gSFRUUCByZXNwb25zZSBzdGF0dXM6IFwiK3Jlc3Auc3RhdHVzK1wiLCB0eXBlOiBcIityZXNwLnR5cGUrXCIsIGJ5dGUgbGVuZ3RoOiBcIisgcmVzcC5ib2R5LmJ5dGVMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxMyAoMTMuMC41KVxyXG4gICAgICAgICAgICAgIGlmIChyZXNwLmJvZHkpIHtcclxuICAgICAgICAgICAgICAgIGFDdHguZGVjb2RlQXVkaW9EYXRhKHJlc3AuYm9keSwgYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRpbmdGaWxlLmF1ZGlvQnVmZmVyID0gYWI7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnRGVsYXkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuZGVidWdEZWxheSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZWNvcmRpbmdGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdGZXRjaGluZyBhdWRpbyBmaWxlOiByZXNwb25zZSBoYXMgbm8gYm9keScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hSZWNvcmRpbmdGaWxlKGFDdHg6IEF1ZGlvQ29udGV4dCwgcHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIsIGl0ZW1jb2RlOiBzdHJpbmcsdmVyc2lvbjpudW1iZXIpOk9ic2VydmFibGU8U3ByUmVjb3JkaW5nRmlsZXxudWxsPiB7XHJcblxyXG4gICAgbGV0IHdvYnMgPSBuZXcgT2JzZXJ2YWJsZTxTcHJSZWNvcmRpbmdGaWxlIHwgbnVsbD4ob2JzZXJ2ZXI9PntcclxuICAgICAgbGV0IG9icyA9IHRoaXMuZmV0Y2hTcHJBdWRpb2ZpbGUocHJvamVjdE5hbWUsIHNlc3NJZCwgaXRlbWNvZGUsdmVyc2lvbik7XHJcblxyXG5cclxuICAgICAgb2JzLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTNcclxuICAgICAgICAgIGlmKHJlc3AuYm9keSkge1xyXG4gICAgICAgICAgICBhQ3R4LmRlY29kZUF1ZGlvRGF0YShyZXNwLmJvZHksIGFiID0+IHtcclxuICAgICAgICAgICAgICBsZXQgcmYgPSBuZXcgU3ByUmVjb3JkaW5nRmlsZShzZXNzSWQsIGl0ZW1jb2RlLCB2ZXJzaW9uLCBhYik7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdEZWxheSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmYpO1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgdGhpcy5kZWJ1Z0RlbGF5KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZik7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgIC8vIEludGVycHJldCBub3QgYXMgYW4gZXJyb3IsIHRoZSBmaWxlIGlzdCBub3QgcmVjb3JkZWQgeWV0XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAvLyBhbGwgb3RoZXIgc3RhdGVzIGFyZSBlcnJvcnNcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHdvYnM7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuXHJcbiJdfQ==
|