stream-chat-angular 4.62.0 → 4.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.d.ts +1 -0
- package/assets/version.d.ts +1 -1
- package/bundles/stream-chat-angular.umd.js +381 -43
- package/bundles/stream-chat-angular.umd.js.map +1 -1
- package/esm2015/assets/i18n/en.js +2 -1
- package/esm2015/assets/version.js +2 -2
- package/esm2015/lib/attachment-list/attachment-list.component.js +10 -5
- package/esm2015/lib/custom-templates.service.js +5 -1
- package/esm2015/lib/icon/icon.component.js +2 -2
- package/esm2015/lib/stream-chat.module.js +13 -3
- package/esm2015/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.js +192 -0
- package/esm2015/lib/voice-recording/voice-recording.component.js +115 -0
- package/esm2015/public-api.js +3 -1
- package/fesm2015/stream-chat-angular.js +343 -30
- package/fesm2015/stream-chat-angular.js.map +1 -1
- package/lib/attachment-list/attachment-list.component.d.ts +1 -0
- package/lib/custom-templates.service.d.ts +4 -0
- package/lib/icon/icon.component.d.ts +1 -1
- package/lib/stream-chat.module.d.ts +7 -5
- package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +43 -0
- package/lib/voice-recording/voice-recording.component.d.ts +31 -0
- package/package.json +2 -2
- package/public-api.d.ts +2 -0
- package/src/assets/i18n/en.ts +1 -0
- package/src/assets/styles/v2/css/index.css +3 -1
- package/src/assets/styles/v2/css/index.layout.css +3 -1
- package/src/assets/styles/v2/scss/AttachmentList/AttachmentList-layout.scss +127 -1
- package/src/assets/styles/v2/scss/AttachmentList/AttachmentList-theme.scss +91 -2
- package/src/assets/styles/v2/scss/ImageCarousel/ImageCarousel-layout.scss +11 -2
- package/src/assets/styles/v2/scss/ImageCarousel/ImageCarousel-theme.scss +14 -0
- package/src/assets/styles/v2/scss/Message/Message-layout.scss +2 -2
- package/src/assets/version.ts +1 -1
package/esm2015/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.js
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
/**
|
|
5
|
+
* This component can be used to visualize the wave bar of a voice recording
|
|
6
|
+
*/
|
|
7
|
+
export class VoiceRecordingWavebarComponent {
|
|
8
|
+
constructor(ngZone, cdRef) {
|
|
9
|
+
this.ngZone = ngZone;
|
|
10
|
+
this.cdRef = cdRef;
|
|
11
|
+
/**
|
|
12
|
+
* The waveform data to visualize
|
|
13
|
+
*/
|
|
14
|
+
this.waveFormData = [];
|
|
15
|
+
this.resampledWaveFormData = [];
|
|
16
|
+
this.progress = 0;
|
|
17
|
+
this.isDragging = false;
|
|
18
|
+
this.sampleSize = 40;
|
|
19
|
+
this.isViewInited = false;
|
|
20
|
+
this.upsample = () => {
|
|
21
|
+
if (this.sampleSize === this.waveFormData.length)
|
|
22
|
+
return this.waveFormData;
|
|
23
|
+
// eslint-disable-next-line prefer-const
|
|
24
|
+
let [bucketSize, remainder] = this.divMod(this.sampleSize, this.waveFormData.length);
|
|
25
|
+
const result = [];
|
|
26
|
+
for (let i = 0; i < this.waveFormData.length; i++) {
|
|
27
|
+
const extra = remainder && remainder-- ? 1 : 0;
|
|
28
|
+
result.push(...Array(bucketSize + extra).fill(this.waveFormData[i]));
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
this.getNextBucketMean = (data, currentBucketIndex, bucketSize) => {
|
|
33
|
+
const nextBucketStartIndex = Math.floor(currentBucketIndex * bucketSize) + 1;
|
|
34
|
+
let nextNextBucketStartIndex = Math.floor((currentBucketIndex + 1) * bucketSize) + 1;
|
|
35
|
+
nextNextBucketStartIndex =
|
|
36
|
+
nextNextBucketStartIndex < data.length
|
|
37
|
+
? nextNextBucketStartIndex
|
|
38
|
+
: data.length;
|
|
39
|
+
return this.mean(data.slice(nextBucketStartIndex, nextNextBucketStartIndex));
|
|
40
|
+
};
|
|
41
|
+
this.mean = (values) => values.reduce((acc, value) => acc + value, 0) / values.length;
|
|
42
|
+
this.triangleAreaHeron = (a, b, c) => {
|
|
43
|
+
const s = (a + b + c) / 2;
|
|
44
|
+
return Math.sqrt(s * (s - a) * (s - b) * (s - c));
|
|
45
|
+
};
|
|
46
|
+
this.triangleBase = (a, b) => Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));
|
|
47
|
+
this.divMod = (num, divisor) => {
|
|
48
|
+
return [Math.floor(num / divisor), num % divisor];
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
ngOnInit() {
|
|
52
|
+
var _a;
|
|
53
|
+
this.containerSizeChanged();
|
|
54
|
+
if ((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement) {
|
|
55
|
+
this.ngZone.runOutsideAngular(() => {
|
|
56
|
+
new ResizeObserver(() => {
|
|
57
|
+
this.containerSizeChanged();
|
|
58
|
+
}).observe(this.container.nativeElement);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
ngOnChanges(changes) {
|
|
63
|
+
if (changes.waveFormData) {
|
|
64
|
+
this.resampledWaveFormData =
|
|
65
|
+
this.waveFormData.length > this.sampleSize
|
|
66
|
+
? this.downsample()
|
|
67
|
+
: this.upsample();
|
|
68
|
+
}
|
|
69
|
+
if (changes.audioElement) {
|
|
70
|
+
this.ngZone.runOutsideAngular(() => {
|
|
71
|
+
var _a;
|
|
72
|
+
(_a = this.audioElement) === null || _a === void 0 ? void 0 : _a.addEventListener('timeupdate', () => {
|
|
73
|
+
var _a;
|
|
74
|
+
const progress = (((_a = this.audioElement) === null || _a === void 0 ? void 0 : _a.currentTime) || 0) / (this.duration || 0) || 0;
|
|
75
|
+
if (Math.abs(progress - this.progress) >= 0.02) {
|
|
76
|
+
this.ngZone.run(() => {
|
|
77
|
+
this.progress = progress;
|
|
78
|
+
this.cdRef.detectChanges();
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
ngAfterViewInit() {
|
|
86
|
+
this.isViewInited = true;
|
|
87
|
+
}
|
|
88
|
+
seek(event) {
|
|
89
|
+
var _a, _b, _c, _d, _e;
|
|
90
|
+
const containerWidth = ((_b = (_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) || 0;
|
|
91
|
+
const containerStart = ((_e = (_d = (_c = this.container) === null || _c === void 0 ? void 0 : _c.nativeElement) === null || _d === void 0 ? void 0 : _d.getBoundingClientRect()) === null || _e === void 0 ? void 0 : _e.x) || 0;
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
93
|
+
const progress = (event.x - containerStart) / containerWidth;
|
|
94
|
+
if (!isNaN(progress) && this.audioElement) {
|
|
95
|
+
const duration = this.duration || 0;
|
|
96
|
+
const time = duration * progress;
|
|
97
|
+
this.audioElement.currentTime = time;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
trackByIndex(index) {
|
|
101
|
+
return index;
|
|
102
|
+
}
|
|
103
|
+
containerSizeChanged() {
|
|
104
|
+
var _a;
|
|
105
|
+
if (!((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const containerWidth = this.container.nativeElement.clientWidth;
|
|
109
|
+
if (containerWidth === 0) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const barWidth = +getComputedStyle(this.container.nativeElement)
|
|
113
|
+
.getPropertyValue('--str-chat__voice-recording-amplitude-bar-width')
|
|
114
|
+
.replace('px', '');
|
|
115
|
+
const barGap = +getComputedStyle(this.container.nativeElement)
|
|
116
|
+
.getPropertyValue('--str-chat__voice-recording-amplitude-bar-gap-width')
|
|
117
|
+
.replace('px', '');
|
|
118
|
+
if (!isNaN(barWidth) && !isNaN(barGap)) {
|
|
119
|
+
const sampleSize = Math.floor(containerWidth / (barWidth + barGap));
|
|
120
|
+
if (sampleSize !== this.sampleSize &&
|
|
121
|
+
!isNaN(sampleSize) &&
|
|
122
|
+
sampleSize !== Infinity) {
|
|
123
|
+
this.ngZone.run(() => {
|
|
124
|
+
this.sampleSize = sampleSize;
|
|
125
|
+
this.resampledWaveFormData =
|
|
126
|
+
this.waveFormData.length > this.sampleSize
|
|
127
|
+
? this.downsample()
|
|
128
|
+
: this.upsample();
|
|
129
|
+
if (this.isViewInited) {
|
|
130
|
+
this.cdRef.detectChanges();
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
downsample() {
|
|
137
|
+
if (this.waveFormData.length <= this.sampleSize) {
|
|
138
|
+
return this.waveFormData;
|
|
139
|
+
}
|
|
140
|
+
if (this.sampleSize === 1)
|
|
141
|
+
return [this.mean(this.waveFormData)];
|
|
142
|
+
const result = [];
|
|
143
|
+
// bucket size adjusted due to the fact that the first and the last item in the original data array is kept in target output
|
|
144
|
+
const bucketSize = (this.waveFormData.length - 2) / (this.sampleSize - 2);
|
|
145
|
+
let lastSelectedPointIndex = 0;
|
|
146
|
+
result.push(this.waveFormData[lastSelectedPointIndex]); // Always add the first point
|
|
147
|
+
let maxAreaPoint, maxArea, triangleArea;
|
|
148
|
+
for (let bucketIndex = 1; bucketIndex < this.sampleSize - 1; bucketIndex++) {
|
|
149
|
+
const previousBucketRefPoint = this.waveFormData[lastSelectedPointIndex];
|
|
150
|
+
const nextBucketMean = this.getNextBucketMean(this.waveFormData, bucketIndex, bucketSize);
|
|
151
|
+
const currentBucketStartIndex = Math.floor((bucketIndex - 1) * bucketSize) + 1;
|
|
152
|
+
const nextBucketStartIndex = Math.floor(bucketIndex * bucketSize) + 1;
|
|
153
|
+
const countUnitsBetweenAtoC = 1 + nextBucketStartIndex - currentBucketStartIndex;
|
|
154
|
+
maxArea = triangleArea = -1;
|
|
155
|
+
for (let currentPointIndex = currentBucketStartIndex; currentPointIndex < nextBucketStartIndex; currentPointIndex++) {
|
|
156
|
+
const countUnitsBetweenAtoB = Math.abs(currentPointIndex - currentBucketStartIndex) + 1;
|
|
157
|
+
const countUnitsBetweenBtoC = countUnitsBetweenAtoC - countUnitsBetweenAtoB;
|
|
158
|
+
const currentPointValue = this.waveFormData[currentPointIndex];
|
|
159
|
+
triangleArea = this.triangleAreaHeron(this.triangleBase(Math.abs(previousBucketRefPoint - currentPointValue), countUnitsBetweenAtoB), this.triangleBase(Math.abs(currentPointValue - nextBucketMean), countUnitsBetweenBtoC), this.triangleBase(Math.abs(previousBucketRefPoint - nextBucketMean), countUnitsBetweenAtoC));
|
|
160
|
+
if (triangleArea > maxArea) {
|
|
161
|
+
maxArea = triangleArea;
|
|
162
|
+
maxAreaPoint = this.waveFormData[currentPointIndex];
|
|
163
|
+
lastSelectedPointIndex = currentPointIndex;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (typeof maxAreaPoint !== 'undefined')
|
|
167
|
+
result.push(maxAreaPoint);
|
|
168
|
+
}
|
|
169
|
+
result.push(this.waveFormData[this.waveFormData.length - 1]); // Always add the last point
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
VoiceRecordingWavebarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: VoiceRecordingWavebarComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
+
VoiceRecordingWavebarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: VoiceRecordingWavebarComponent, selector: "stream-voice-recording-wavebar", inputs: { audioElement: "audioElement", waveFormData: "waveFormData", duration: "duration" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"str-chat__wave-progress-bar__track\"\n #container\n data-testid=\"wave-progress-bar-track\"\n (mousedown)=\"isDragging = true\"\n (mouseup)=\"isDragging = false\"\n (mouseleave)=\"isDragging = false\"\n (mousemove)=\"isDragging ? seek($event) : null\"\n (click)=\"seek($event)\"\n (keyup.enter)=\"seek($event)\"\n role=\"progressbar\"\n>\n <div\n *ngFor=\"\n let dataPoint of resampledWaveFormData;\n let i = index;\n trackBy: trackByIndex\n \"\n class=\"str-chat__wave-progress-bar__amplitude-bar\"\n [class.str-chat__wave-progress-bar__amplitude-bar--active]=\"\n progress > i / resampledWaveFormData.length\n \"\n [style.--str-chat__wave-progress-bar__amplitude-bar-height]=\"\n dataPoint ? dataPoint * 100 + '%' : '0%'\n \"\n ></div>\n <div\n class=\"str-chat__wave-progress-bar__progress-indicator\"\n data-testid=\"wave-progress-bar-progress-indicator\"\n [ngStyle]=\"{ 'inset-inline-start': progress * 100 + '%' }\"\n ></div>\n</div>\n", directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
175
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: VoiceRecordingWavebarComponent, decorators: [{
|
|
176
|
+
type: Component,
|
|
177
|
+
args: [{
|
|
178
|
+
selector: 'stream-voice-recording-wavebar',
|
|
179
|
+
templateUrl: './voice-recording-wavebar.component.html',
|
|
180
|
+
styles: [],
|
|
181
|
+
}]
|
|
182
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioElement: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}], waveFormData: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], duration: [{
|
|
187
|
+
type: Input
|
|
188
|
+
}], container: [{
|
|
189
|
+
type: ViewChild,
|
|
190
|
+
args: ['container', { static: true }]
|
|
191
|
+
}] } });
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtcmVjb3JkaW5nLXdhdmViYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3ZvaWNlLXJlY29yZGluZy92b2ljZS1yZWNvcmRpbmctd2F2ZWJhci92b2ljZS1yZWNvcmRpbmctd2F2ZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvdm9pY2UtcmVjb3JkaW5nL3ZvaWNlLXJlY29yZGluZy13YXZlYmFyL3ZvaWNlLXJlY29yZGluZy13YXZlYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsS0FBSyxFQUtMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQzs7O0FBRXZCOztHQUVHO0FBTUgsTUFBTSxPQUFPLDhCQUE4QjtJQXVCekMsWUFBb0IsTUFBYyxFQUFVLEtBQXdCO1FBQWhELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQWhCcEU7O1dBRUc7UUFDTSxpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUtyQywwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFDckMsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ1gsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUd4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQTJLckIsYUFBUSxHQUFHLEdBQUcsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztZQUUzRSx5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJ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WSxDQUFDLENBQUM7U0FDcEU7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtRQUUxRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzsySEE5TFUsOEJBQThCOytHQUE5Qiw4QkFBOEIsK1NDckIzQyxvZ0NBZ0NBOzJGRFhhLDhCQUE4QjtrQkFMMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxXQUFXLEVBQUUsMENBQTBDO29CQUN2RCxNQUFNLEVBQUUsRUFBRTtpQkFDWDs2SEFPVSxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFNRSxTQUFTO3NCQURoQixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBjYW4gYmUgdXNlZCB0byB2aXN1YWxpemUgdGhlIHdhdmUgYmFyIG9mIGEgdm9pY2UgcmVjb3JkaW5nXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS12b2ljZS1yZWNvcmRpbmctd2F2ZWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi92b2ljZS1yZWNvcmRpbmctd2F2ZWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFZvaWNlUmVjb3JkaW5nV2F2ZWJhckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0XG57XG4gIC8qKlxuICAgKiBUaGUgYXVkaW8gZWxlbWVudCB0aGF0IHBsYXlzIHRoZSB2b2ljZSByZWNvcmRpbmdcbiAgICovXG4gIEBJbnB1dCgpIGF1ZGlvRWxlbWVudD86IEhUTUxBdWRpb0VsZW1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgd2F2ZWZvcm0gZGF0YSB0byB2aXN1YWxpemVcbiAgICovXG4gIEBJbnB1dCgpIHdhdmVGb3JtRGF0YTogbnVtYmVyW10gPSBbXTtcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdm9pY2UgcmVjb3JkaW5nIGluIHNlY29uZHNcbiAgICovXG4gIEBJbnB1dCgpIGR1cmF0aW9uPzogbnVtYmVyO1xuICByZXNhbXBsZWRXYXZlRm9ybURhdGE6IG51bWJlcltdID0gW107XG4gIHByb2dyZXNzOiBudW1iZXIgPSAwO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc2FtcGxlU2l6ZTogbnVtYmVyID0gNDA7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgY29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXJTaXplQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyU2l6ZUNoYW5nZWQoKTtcbiAgICAgICAgfSkub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lciEubmF0aXZlRWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMud2F2ZUZvcm1EYXRhKSB7XG4gICAgICB0aGlzLnJlc2FtcGxlZFdhdmVGb3JtRGF0YSA9XG4gICAgICAgIHRoaXMud2F2ZUZvcm1EYXRhLmxlbmd0aCA+IHRoaXMuc2FtcGxlU2l6ZVxuICAgICAgICAgID8gdGhpcy5kb3duc2FtcGxlKClcbiAgICAgICAgICA6IHRoaXMudXBzYW1wbGUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuYXVkaW9FbGVtZW50KSB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMuYXVkaW9FbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb2dyZXNzID1cbiAgICAgICAgICAgICh0aGlzLmF1ZGlvRWxlbWVudD8uY3VycmVudFRpbWUgfHwgMCkgLyAodGhpcy5kdXJhdGlvbiB8fCAwKSB8fCAwO1xuICAgICAgICAgIGlmIChNYXRoLmFicyhwcm9ncmVzcyAtIHRoaXMucHJvZ3Jlc3MpID49IDAuMDIpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcbiAgICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaWV3SW5pdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNlZWsoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwO1xuICAgIGNvbnN0IGNvbnRhaW5lclN0YXJ0ID1cbiAgICAgIHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8ueCB8fCAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICBjb25zdCBwcm9ncmVzcyA9IChldmVudC54IC0gY29udGFpbmVyU3RhcnQpIC8gY29udGFpbmVyV2lkdGg7XG5cbiAgICBpZiAoIWlzTmFOKHByb2dyZXNzKSAmJiB0aGlzLmF1ZGlvRWxlbWVudCkge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmR1cmF0aW9uIHx8IDA7XG4gICAgICBjb25zdCB0aW1lID0gZHVyYXRpb24gKiBwcm9ncmVzcztcbiAgICAgIHRoaXMuYXVkaW9FbGVtZW50LmN1cnJlbnRUaW1lID0gdGltZTtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgY29udGFpbmVyU2l6ZUNoYW5nZWQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgaWYgKGNvbnRhaW5lcldpZHRoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhcldpZHRoID0gK2dldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXN0ci1jaGF0X192b2ljZS1yZWNvcmRpbmctYW1wbGl0dWRlLWJhci13aWR0aCcpXG4gICAgICAucmVwbGFjZSgncHgnLCAnJyk7XG4gICAgY29uc3QgYmFyR2FwID0gK2dldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXN0ci1jaGF0X192b2ljZS1yZWNvcmRpbmctYW1wbGl0dWRlLWJhci1nYXAtd2lkdGgnKVxuICAgICAgLnJlcGxhY2UoJ3B4JywgJycpO1xuICAgIGlmICghaXNOYU4oYmFyV2lkdGgpICYmICFpc05hTihiYXJHYXApKSB7XG4gICAgICBjb25zdCBzYW1wbGVTaXplID0gTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAvIChiYXJXaWR0aCArIGJhckdhcCkpO1xuICAgICAgaWYgKFxuICAgICAgICBzYW1wbGVTaXplICE9PSB0aGlzLnNhbXBsZVNpemUgJiZcbiAgICAgICAgIWlzTmFOKHNhbXBsZVNpemUpICYmXG4gICAgICAgIHNhbXBsZVNpemUgIT09IEluZmluaXR5XG4gICAgICApIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNhbXBsZVNpemUgPSBzYW1wbGVTaXplO1xuICAgICAgICAgIHRoaXMucmVzYW1wbGVkV2F2ZUZvcm1EYXRhID1cbiAgICAgICAgICAgIHRoaXMud2F2ZUZvcm1EYXRhLmxlbmd0aCA+IHRoaXMuc2FtcGxlU2l6ZVxuICAgICAgICAgICAgICA/IHRoaXMuZG93bnNhbXBsZSgpXG4gICAgICAgICAgICAgIDogdGhpcy51cHNhbXBsZSgpO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvd25zYW1wbGUoKSB7XG4gICAgaWYgKHRoaXMud2F2ZUZvcm1EYXRhLmxlbmd0aCA8PSB0aGlzLnNhbXBsZVNpemUpIHtcbiAgICAgIHJldHVybiB0aGlzLndhdmVGb3JtRGF0YTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zYW1wbGVTaXplID09PSAxKSByZXR1cm4gW3RoaXMubWVhbih0aGlzLndhdmVGb3JtRGF0YSldO1xuXG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICAgIC8vIGJ1Y2tldCBzaXplIGFkanVzdGVkIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaXRlbSBpbiB0aGUgb3JpZ2luYWwgZGF0YSBhcnJheSBpcyBrZXB0IGluIHRhcmdldCBvdXRwdXRcbiAgICBjb25zdCBidWNrZXRTaXplID0gKHRoaXMud2F2ZUZvcm1EYXRhLmxlbmd0aCAtIDIpIC8gKHRoaXMuc2FtcGxlU2l6ZSAtIDIpO1xuICAgIGxldCBsYXN0U2VsZWN0ZWRQb2ludEluZGV4ID0gMDtcbiAgICByZXN1bHQucHVzaCh0aGlzLndhdmVGb3JtRGF0YVtsYXN0U2VsZWN0ZWRQb2ludEluZGV4XSk7IC8vIEFsd2F5cyBhZGQgdGhlIGZpcnN0IHBvaW50XG4gICAgbGV0IG1heEFyZWFQb2ludCwgbWF4QXJlYSwgdHJpYW5nbGVBcmVhO1xuXG4gICAgZm9yIChcbiAgICAgIGxldCBidWNrZXRJbmRleCA9IDE7XG4gICAgICBidWNrZXRJbmRleCA8IHRoaXMuc2FtcGxlU2l6ZSAtIDE7XG4gICAgICBidWNrZXRJbmRleCsrXG4gICAgKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0J1Y2tldFJlZlBvaW50ID0gdGhpcy53YXZlRm9ybURhdGFbbGFzdFNlbGVjdGVkUG9pbnRJbmRleF07XG4gICAgICBjb25zdCBuZXh0QnVja2V0TWVhbiA9IHRoaXMuZ2V0TmV4dEJ1Y2tldE1lYW4oXG4gICAgICAgIHRoaXMud2F2ZUZvcm1EYXRhLFxuICAgICAgICBidWNrZXRJbmRleCxcbiAgICAgICAgYnVja2V0U2l6ZVxuICAgICAgKTtcblxuICAgICAgY29uc3QgY3VycmVudEJ1Y2tldFN0YXJ0SW5kZXggPVxuICAgICAgICBNYXRoLmZsb29yKChidWNrZXRJbmRleCAtIDEpICogYnVja2V0U2l6ZSkgKyAxO1xuICAgICAgY29uc3QgbmV4dEJ1Y2tldFN0YXJ0SW5kZXggPSBNYXRoLmZsb29yKGJ1Y2tldEluZGV4ICogYnVja2V0U2l6ZSkgKyAxO1xuICAgICAgY29uc3QgY291bnRVbml0c0JldHdlZW5BdG9DID1cbiAgICAgICAgMSArIG5leHRCdWNrZXRTdGFydEluZGV4IC0gY3VycmVudEJ1Y2tldFN0YXJ0SW5kZXg7XG5cbiAgICAgIG1heEFyZWEgPSB0cmlhbmdsZUFyZWEgPSAtMTtcblxuICAgICAgZm9yIChcbiAgICAgICAgbGV0IGN1cnJlbnRQb2ludEluZGV4ID0gY3VycmVudEJ1Y2tldFN0YXJ0SW5kZXg7XG4gICAgICAgIGN1cnJlbnRQb2ludEluZGV4IDwgbmV4dEJ1Y2tldFN0YXJ0SW5kZXg7XG4gICAgICAgIGN1cnJlbnRQb2ludEluZGV4KytcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb3VudFVuaXRzQmV0d2VlbkF0b0IgPVxuICAgICAgICAgIE1hdGguYWJzKGN1cnJlbnRQb2ludEluZGV4IC0gY3VycmVudEJ1Y2tldFN0YXJ0SW5kZXgpICsgMTtcbiAgICAgICAgY29uc3QgY291bnRVbml0c0JldHdlZW5CdG9DID1cbiAgICAgICAgICBjb3VudFVuaXRzQmV0d2VlbkF0b0MgLSBjb3VudFVuaXRzQmV0d2VlbkF0b0I7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb2ludFZhbHVlID0gdGhpcy53YXZlRm9ybURhdGFbY3VycmVudFBvaW50SW5kZXhdO1xuXG4gICAgICAgIHRyaWFuZ2xlQXJlYSA9IHRoaXMudHJpYW5nbGVBcmVhSGVyb24oXG4gICAgICAgICAgdGhpcy50cmlhbmdsZUJhc2UoXG4gICAgICAgICAgICBNYXRoLmFicyhwcmV2aW91c0J1Y2tldFJlZlBvaW50IC0gY3VycmVudFBvaW50VmFsdWUpLFxuICAgICAgICAgICAgY291bnRVbml0c0JldHdlZW5BdG9CXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLnRyaWFuZ2xlQmFzZShcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnJlbnRQb2ludFZhbHVlIC0gbmV4dEJ1Y2tldE1lYW4pLFxuICAgICAgICAgICAgY291bnRVbml0c0JldHdlZW5CdG9DXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLnRyaWFuZ2xlQmFzZShcbiAgICAgICAgICAgIE1hdGguYWJzKHByZXZpb3VzQnVja2V0UmVmUG9pbnQgLSBuZXh0QnVja2V0TWVhbiksXG4gICAgICAgICAgICBjb3VudFVuaXRzQmV0d2VlbkF0b0NcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRyaWFuZ2xlQXJlYSA+IG1heEFyZWEpIHtcbiAgICAgICAgICBtYXhBcmVhID0gdHJpYW5nbGVBcmVhO1xuICAgICAgICAgIG1heEFyZWFQb2ludCA9IHRoaXMud2F2ZUZvcm1EYXRhW2N1cnJlbnRQb2ludEluZGV4XTtcbiAgICAgICAgICBsYXN0U2VsZWN0ZWRQb2ludEluZGV4ID0gY3VycmVudFBvaW50SW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBtYXhBcmVhUG9pbnQgIT09ICd1bmRlZmluZWQnKSByZXN1bHQucHVzaChtYXhBcmVhUG9pbnQpO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKHRoaXMud2F2ZUZvcm1EYXRhW3RoaXMud2F2ZUZvcm1EYXRhLmxlbmd0aCAtIDFdKTsgLy8gQWx3YXlzIGFkZCB0aGUgbGFzdCBwb2ludFxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgdXBzYW1wbGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc2FtcGxlU2l6ZSA9PT0gdGhpcy53YXZlRm9ybURhdGEubGVuZ3RoKSByZXR1cm4gdGhpcy53YXZlRm9ybURhdGE7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIHByZWZlci1jb25zdFxuICAgIGxldCBbYnVja2V0U2l6ZSwgcmVtYWluZGVyXSA9IHRoaXMuZGl2TW9kKFxuICAgICAgdGhpcy5zYW1wbGVTaXplLFxuICAgICAgdGhpcy53YXZlRm9ybURhdGEubGVuZ3RoXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2F2ZUZvcm1EYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBleHRyYSA9IHJlbWFpbmRlciAmJiByZW1haW5kZXItLSA/IDEgOiAwO1xuICAgICAgcmVzdWx0LnB1c2goLi4uQXJyYXkoYnVja2V0U2l6ZSArIGV4dHJhKS5maWxsKHRoaXMud2F2ZUZvcm1EYXRhW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgcHJpdmF0ZSBnZXROZXh0QnVja2V0TWVhbiA9IChcbiAgICBkYXRhOiBudW1iZXJbXSxcbiAgICBjdXJyZW50QnVja2V0SW5kZXg6IG51bWJlcixcbiAgICBidWNrZXRTaXplOiBudW1iZXJcbiAgKSA9PiB7XG4gICAgY29uc3QgbmV4dEJ1Y2tldFN0YXJ0SW5kZXggPVxuICAgICAgTWF0aC5mbG9vcihjdXJyZW50QnVja2V0SW5kZXggKiBidWNrZXRTaXplKSArIDE7XG4gICAgbGV0IG5leHROZXh0QnVja2V0U3RhcnRJbmRleCA9XG4gICAgICBNYXRoLmZsb29yKChjdXJyZW50QnVja2V0SW5kZXggKyAxKSAqIGJ1Y2tldFNpemUpICsgMTtcbiAgICBuZXh0TmV4dEJ1Y2tldFN0YXJ0SW5kZXggPVxuICAgICAgbmV4dE5leHRCdWNrZXRTdGFydEluZGV4IDwgZGF0YS5sZW5ndGhcbiAgICAgICAgPyBuZXh0TmV4dEJ1Y2tldFN0YXJ0SW5kZXhcbiAgICAgICAgOiBkYXRhLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzLm1lYW4oXG4gICAgICBkYXRhLnNsaWNlKG5leHRCdWNrZXRTdGFydEluZGV4LCBuZXh0TmV4dEJ1Y2tldFN0YXJ0SW5kZXgpXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIG1lYW4gPSAodmFsdWVzOiBudW1iZXJbXSkgPT5cbiAgICB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbHVlKSA9PiBhY2MgKyB2YWx1ZSwgMCkgLyB2YWx1ZXMubGVuZ3RoO1xuXG4gIHByaXZhdGUgdHJpYW5nbGVBcmVhSGVyb24gPSAoYTogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHMgPSAoYSArIGIgKyBjKSAvIDI7XG4gICAgcmV0dXJuIE1hdGguc3FydChzICogKHMgLSBhKSAqIChzIC0gYikgKiAocyAtIGMpKTtcbiAgfTtcblxuICBwcml2YXRlIHRyaWFuZ2xlQmFzZSA9IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT5cbiAgICBNYXRoLnNxcnQoTWF0aC5wb3coYSwgMikgKyBNYXRoLnBvdyhiLCAyKSk7XG5cbiAgcHJpdmF0ZSBkaXZNb2QgPSAobnVtOiBudW1iZXIsIGRpdmlzb3I6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBbTWF0aC5mbG9vcihudW0gLyBkaXZpc29yKSwgbnVtICUgZGl2aXNvcl07XG4gIH07XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic3RyLWNoYXRfX3dhdmUtcHJvZ3Jlc3MtYmFyX190cmFja1wiXG4gICNjb250YWluZXJcbiAgZGF0YS10ZXN0aWQ9XCJ3YXZlLXByb2dyZXNzLWJhci10cmFja1wiXG4gIChtb3VzZWRvd24pPVwiaXNEcmFnZ2luZyA9IHRydWVcIlxuICAobW91c2V1cCk9XCJpc0RyYWdnaW5nID0gZmFsc2VcIlxuICAobW91c2VsZWF2ZSk9XCJpc0RyYWdnaW5nID0gZmFsc2VcIlxuICAobW91c2Vtb3ZlKT1cImlzRHJhZ2dpbmcgPyBzZWVrKCRldmVudCkgOiBudWxsXCJcbiAgKGNsaWNrKT1cInNlZWsoJGV2ZW50KVwiXG4gIChrZXl1cC5lbnRlcik9XCJzZWVrKCRldmVudClcIlxuICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuPlxuICA8ZGl2XG4gICAgKm5nRm9yPVwiXG4gICAgICBsZXQgZGF0YVBvaW50IG9mIHJlc2FtcGxlZFdhdmVGb3JtRGF0YTtcbiAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICB0cmFja0J5OiB0cmFja0J5SW5kZXhcbiAgICBcIlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX3dhdmUtcHJvZ3Jlc3MtYmFyX19hbXBsaXR1ZGUtYmFyXCJcbiAgICBbY2xhc3Muc3RyLWNoYXRfX3dhdmUtcHJvZ3Jlc3MtYmFyX19hbXBsaXR1ZGUtYmFyLS1hY3RpdmVdPVwiXG4gICAgICBwcm9ncmVzcyA+IGkgLyByZXNhbXBsZWRXYXZlRm9ybURhdGEubGVuZ3RoXG4gICAgXCJcbiAgICBbc3R5bGUuLS1zdHItY2hhdF9fd2F2ZS1wcm9ncmVzcy1iYXJfX2FtcGxpdHVkZS1iYXItaGVpZ2h0XT1cIlxuICAgICAgZGF0YVBvaW50ID8gZGF0YVBvaW50ICogMTAwICsgJyUnIDogJzAlJ1xuICAgIFwiXG4gID48L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX3dhdmUtcHJvZ3Jlc3MtYmFyX19wcm9ncmVzcy1pbmRpY2F0b3JcIlxuICAgIGRhdGEtdGVzdGlkPVwid2F2ZS1wcm9ncmVzcy1iYXItcHJvZ3Jlc3MtaW5kaWNhdG9yXCJcbiAgICBbbmdTdHlsZV09XCJ7ICdpbnNldC1pbmxpbmUtc3RhcnQnOiBwcm9ncmVzcyAqIDEwMCArICclJyB9XCJcbiAgPjwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, Input, ViewChild, } from '@angular/core';
|
|
3
|
+
import prettybytes from 'pretty-bytes';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../icon-placeholder/icon-placeholder.component";
|
|
6
|
+
import * as i2 from "./voice-recording-wavebar/voice-recording-wavebar.component";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "@ngx-translate/core";
|
|
9
|
+
/**
|
|
10
|
+
* This component can be used to display an attachment with type `voiceRecording`. The component allows playing the attachment inside the browser.
|
|
11
|
+
*/
|
|
12
|
+
export class VoiceRecordingComponent {
|
|
13
|
+
constructor(ngZone, cdRef) {
|
|
14
|
+
this.ngZone = ngZone;
|
|
15
|
+
this.cdRef = cdRef;
|
|
16
|
+
this.fileSize = '';
|
|
17
|
+
this.durationFormatted = '';
|
|
18
|
+
this.secondsElapsed = 0;
|
|
19
|
+
this.isError = false;
|
|
20
|
+
this.secondsElapsedFormatted = this.getFormattedDuration(this.secondsElapsed);
|
|
21
|
+
}
|
|
22
|
+
ngOnChanges(changes) {
|
|
23
|
+
var _a;
|
|
24
|
+
if (changes.attachment) {
|
|
25
|
+
this.fileSize = this.getFileSize();
|
|
26
|
+
this.durationFormatted = this.getFormattedDuration((_a = this.attachment) === null || _a === void 0 ? void 0 : _a.duration);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
ngAfterViewInit() {
|
|
30
|
+
// timeupdate fired frequntly so we optimize change detections
|
|
31
|
+
this.ngZone.runOutsideAngular(() => {
|
|
32
|
+
var _a;
|
|
33
|
+
(_a = this.audioElement) === null || _a === void 0 ? void 0 : _a.nativeElement.addEventListener('timeupdate', () => {
|
|
34
|
+
var _a, _b, _c, _d, _e;
|
|
35
|
+
const secondsElapsed = ((_b = (_a = this.audioElement) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.ended)
|
|
36
|
+
? ((_c = this.attachment) === null || _c === void 0 ? void 0 : _c.duration) || 0
|
|
37
|
+
: Math.round(((_e = (_d = this.audioElement) === null || _d === void 0 ? void 0 : _d.nativeElement) === null || _e === void 0 ? void 0 : _e.currentTime) || 0);
|
|
38
|
+
if (this.secondsElapsed !== secondsElapsed) {
|
|
39
|
+
this.ngZone.run(() => {
|
|
40
|
+
this.secondsElapsed = secondsElapsed;
|
|
41
|
+
this.secondsElapsedFormatted = this.getFormattedDuration(this.secondsElapsed);
|
|
42
|
+
this.cdRef.detectChanges();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
togglePlay() {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
if (!this.audioElement || !((_a = this.attachment) === null || _a === void 0 ? void 0 : _a.asset_url)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
((_b = this.audioElement) === null || _b === void 0 ? void 0 : _b.nativeElement.paused)
|
|
56
|
+
? yield this.audioElement.nativeElement.play()
|
|
57
|
+
: this.audioElement.nativeElement.pause();
|
|
58
|
+
this.isError = false;
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
this.isError = true;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
setPlaybackRate() {
|
|
66
|
+
var _a, _b, _c;
|
|
67
|
+
if (!((_a = this.audioElement) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
let playbackRate = ((_c = (_b = this.audioElement) === null || _b === void 0 ? void 0 : _b.nativeElement) === null || _c === void 0 ? void 0 : _c.playbackRate) + 0.5;
|
|
71
|
+
if (playbackRate > 2) {
|
|
72
|
+
playbackRate = 1;
|
|
73
|
+
}
|
|
74
|
+
this.audioElement.nativeElement.playbackRate = playbackRate;
|
|
75
|
+
}
|
|
76
|
+
getFormattedDuration(duration) {
|
|
77
|
+
if (duration === undefined || duration <= 0)
|
|
78
|
+
return '00:00';
|
|
79
|
+
const [hours, hoursLeftover] = this.divMod(duration, 3600);
|
|
80
|
+
const [minutes, seconds] = this.divMod(hoursLeftover, 60);
|
|
81
|
+
const roundedSeconds = Math.ceil(seconds);
|
|
82
|
+
const prependHrsZero = hours.toString().length === 1 ? '0' : '';
|
|
83
|
+
const prependMinZero = minutes.toString().length === 1 ? '0' : '';
|
|
84
|
+
const prependSecZero = roundedSeconds.toString().length === 1 ? '0' : '';
|
|
85
|
+
const minSec = `${prependMinZero}${minutes}:${prependSecZero}${roundedSeconds}`;
|
|
86
|
+
return hours ? `${prependHrsZero}${hours}:` + minSec : minSec;
|
|
87
|
+
}
|
|
88
|
+
getFileSize() {
|
|
89
|
+
var _a, _b;
|
|
90
|
+
if (((_a = this.attachment) === null || _a === void 0 ? void 0 : _a.file_size) === undefined ||
|
|
91
|
+
((_b = this.attachment) === null || _b === void 0 ? void 0 : _b.file_size) === null) {
|
|
92
|
+
return '';
|
|
93
|
+
}
|
|
94
|
+
return prettybytes(Number(this.attachment.file_size || 0));
|
|
95
|
+
}
|
|
96
|
+
divMod(num, divisor) {
|
|
97
|
+
return [Math.floor(num / divisor), num % divisor];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
VoiceRecordingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: VoiceRecordingComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
101
|
+
VoiceRecordingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: VoiceRecordingComponent, selector: "stream-voice-recording", inputs: { attachment: "attachment" }, viewQueries: [{ propertyName: "audioElement", first: true, predicate: ["audioElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"str-chat__message-attachment__voice-recording-widget\"\n [class.str-chat__message-attachment__voice-recording-widget--error]=\"isError\"\n data-testid=\"voice-recording-widget\"\n>\n <!-- Empty event handlers to trigger change detection -->\n <audio\n #audioElement\n (play)=\"(null)\"\n (pause)=\"(null)\"\n (ended)=\"(null)\"\n (error)=\"isError = true\"\n (abort)=\"isError = true\"\n >\n <source\n data-testid=\"audio-source\"\n [src]=\"attachment?.asset_url\"\n [type]=\"attachment?.mime_type\"\n />\n </audio>\n <button\n class=\"str-chat__message-attachment-audio-widget--play-button\"\n data-testid=\"play-button\"\n (click)=\"togglePlay()\"\n >\n <stream-icon-placeholder\n [icon]=\"audioElement?.paused ? 'play' : 'pause'\"\n ></stream-icon-placeholder>\n </button>\n <div class=\"str-chat__message-attachment__voice-recording-widget__metadata\">\n <div class=\"str-chat__message-attachment-voice-recording-widget--first-row\">\n <div\n class=\"str-chat__message-attachment__voice-recording-widget__title\"\n data-testid=\"voice-recording-title\"\n [title]=\"attachment?.title\"\n >\n {{ attachment?.title }}\n </div>\n </div>\n\n <ng-container *ngIf=\"isError; else state\">\n <div\n class=\"\n str-chat__message-attachment__voice-recording-widget__error-message\n \"\n >\n <stream-icon-placeholder\n [size]=\"20\"\n icon=\"error\"\n ></stream-icon-placeholder>\n <span data-testid=\"error-message\">{{\n \"streamChat.Error playing audio\" | translate\n }}</span>\n </div>\n </ng-container>\n <ng-template #state>\n <div\n class=\"\n str-chat__message-attachment__voice-recording-widget__audio-state\n \"\n >\n <div\n class=\"str-chat__message-attachment__voice-recording-widget__timer\"\n >\n <span\n data-testid=\"duration\"\n *ngIf=\"!!attachment?.duration; else fileSizeTemplate\"\n >\n {{\n secondsElapsed > 0 || !audioElement.paused\n ? secondsElapsedFormatted\n : durationFormatted\n }}</span\n >\n <ng-template #fileSizeTemplate>\n <span\n class=\"str-chat__message-attachment-file--item-size\"\n data-testid=\"file-size-indicator\"\n >\n {{ fileSize }}\n </span>\n </ng-template>\n </div>\n <stream-voice-recording-wavebar\n *ngIf=\"attachment?.waveform_data && attachment?.duration\"\n [waveFormData]=\"attachment?.waveform_data || []\"\n [duration]=\"attachment?.duration\"\n [audioElement]=\"audioElement\"\n ></stream-voice-recording-wavebar>\n </div>\n </ng-template>\n </div>\n <div\n class=\"str-chat__message-attachment__voice-recording-widget__right-section\"\n >\n <button\n *ngIf=\"!audioElement?.paused; else fileIcon\"\n class=\"str-chat__message_attachment__playback-rate-button\"\n data-testid=\"playback-rate-button\"\n (click)=\"setPlaybackRate()\"\n >\n {{ audioElement?.playbackRate | number: \"1.1-1\" }}x\n </button>\n <ng-template #fileIcon>\n <stream-icon-placeholder\n icon=\"audio-file\"\n [size]=\"40\"\n ></stream-icon-placeholder>\n </ng-template>\n </div>\n</div>\n", components: [{ type: i1.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i2.VoiceRecordingWavebarComponent, selector: "stream-voice-recording-wavebar", inputs: ["audioElement", "waveFormData", "duration"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i4.TranslatePipe, "number": i3.DecimalPipe } });
|
|
102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: VoiceRecordingComponent, decorators: [{
|
|
103
|
+
type: Component,
|
|
104
|
+
args: [{
|
|
105
|
+
selector: 'stream-voice-recording',
|
|
106
|
+
templateUrl: './voice-recording.component.html',
|
|
107
|
+
styles: [],
|
|
108
|
+
}]
|
|
109
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { attachment: [{
|
|
110
|
+
type: Input
|
|
111
|
+
}], audioElement: [{
|
|
112
|
+
type: ViewChild,
|
|
113
|
+
args: ['audioElement']
|
|
114
|
+
}] } });
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtcmVjb3JkaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi92b2ljZS1yZWNvcmRpbmcvdm9pY2UtcmVjb3JkaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi92b2ljZS1yZWNvcmRpbmcvdm9pY2UtcmVjb3JkaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDOzs7Ozs7QUFFdkM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sdUJBQXVCO0lBYWxDLFlBQW9CLE1BQWMsRUFBVSxLQUF3QjtRQUFoRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFScEUsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUV0QixzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUtkLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQ3RELElBQUksQ0FBQyxjQUFjLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCOztRQUNoQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDaEQsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxRQUFRLENBQzFCLENB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QUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsV0FBVyxFQUFFLGtDQUFrQztvQkFDL0MsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7NkhBS1UsVUFBVTtzQkFBbEIsS0FBSztnQkFPRSxZQUFZO3NCQURuQixTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdHRhY2htZW50IH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwcmV0dHlieXRlcyBmcm9tICdwcmV0dHktYnl0ZXMnO1xuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgYW4gYXR0YWNobWVudCB3aXRoIHR5cGUgYHZvaWNlUmVjb3JkaW5nYC4gVGhlIGNvbXBvbmVudCBhbGxvd3MgcGxheWluZyB0aGUgYXR0YWNobWVudCBpbnNpZGUgdGhlIGJyb3dzZXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS12b2ljZS1yZWNvcmRpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdm9pY2UtcmVjb3JkaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgVm9pY2VSZWNvcmRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICAvKipcbiAgICogVGhlIHZvaWNlIHJlY29yZGluZyBhdHRhY2htZW50XG4gICAqL1xuICBASW5wdXQoKSBhdHRhY2htZW50PzogQXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbiAgZmlsZVNpemU6IHN0cmluZyA9ICcnO1xuICBzZWNvbmRzRWxhcHNlZEZvcm1hdHRlZDogc3RyaW5nO1xuICBkdXJhdGlvbkZvcm1hdHRlZDogc3RyaW5nID0gJyc7XG4gIHNlY29uZHNFbGFwc2VkID0gMDtcbiAgaXNFcnJvciA9IGZhbHNlO1xuICBAVmlld0NoaWxkKCdhdWRpb0VsZW1lbnQnKVxuICBwcml2YXRlIGF1ZGlvRWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTEF1ZGlvRWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLnNlY29uZHNFbGFwc2VkRm9ybWF0dGVkID0gdGhpcy5nZXRGb3JtYXR0ZWREdXJhdGlvbihcbiAgICAgIHRoaXMuc2Vjb25kc0VsYXBzZWRcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmF0dGFjaG1lbnQpIHtcbiAgICAgIHRoaXMuZmlsZVNpemUgPSB0aGlzLmdldEZpbGVTaXplKCk7XG4gICAgICB0aGlzLmR1cmF0aW9uRm9ybWF0dGVkID0gdGhpcy5nZXRGb3JtYXR0ZWREdXJhdGlvbihcbiAgICAgICAgdGhpcy5hdHRhY2htZW50Py5kdXJhdGlvblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gdGltZXVwZGF0ZSBmaXJlZCBmcmVxdW50bHkgc28gd2Ugb3B0aW1pemUgY2hhbmdlIGRldGVjdGlvbnNcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmF1ZGlvRWxlbWVudD8ubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWNvbmRzRWxhcHNlZCA9IHRoaXMuYXVkaW9FbGVtZW50Py5uYXRpdmVFbGVtZW50Py5lbmRlZFxuICAgICAgICAgID8gdGhpcy5hdHRhY2htZW50Py5kdXJhdGlvbiB8fCAwXG4gICAgICAgICAgOiBNYXRoLnJvdW5kKHRoaXMuYXVkaW9FbGVtZW50Py5uYXRpdmVFbGVtZW50Py5jdXJyZW50VGltZSB8fCAwKTtcbiAgICAgICAgaWYgKHRoaXMuc2Vjb25kc0VsYXBzZWQgIT09IHNlY29uZHNFbGFwc2VkKSB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kc0VsYXBzZWQgPSBzZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kc0VsYXBzZWRGb3JtYXR0ZWQgPSB0aGlzLmdldEZvcm1hdHRlZER1cmF0aW9uKFxuICAgICAgICAgICAgICB0aGlzLnNlY29uZHNFbGFwc2VkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdG9nZ2xlUGxheSgpIHtcbiAgICBpZiAoIXRoaXMuYXVkaW9FbGVtZW50IHx8ICF0aGlzLmF0dGFjaG1lbnQ/LmFzc2V0X3VybCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5hdWRpb0VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQucGF1c2VkXG4gICAgICAgID8gYXdhaXQgdGhpcy5hdWRpb0VsZW1lbnQubmF0aXZlRWxlbWVudC5wbGF5KClcbiAgICAgICAgOiB0aGlzLmF1ZGlvRWxlbWVudC5uYXRpdmVFbGVtZW50LnBhdXNlKCk7XG4gICAgICB0aGlzLmlzRXJyb3IgPSBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldFBsYXliYWNrUmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuYXVkaW9FbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBwbGF5YmFja1JhdGUgPSB0aGlzLmF1ZGlvRWxlbWVudD8ubmF0aXZlRWxlbWVudD8ucGxheWJhY2tSYXRlICsgMC41O1xuICAgIGlmIChwbGF5YmFja1JhdGUgPiAyKSB7XG4gICAgICBwbGF5YmFja1JhdGUgPSAxO1xuICAgIH1cbiAgICB0aGlzLmF1ZGlvRWxlbWVudC5uYXRpdmVFbGVtZW50LnBsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9ybWF0dGVkRHVyYXRpb24oZHVyYXRpb24/OiBudW1iZXIpIHtcbiAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCB8fCBkdXJhdGlvbiA8PSAwKSByZXR1cm4gJzAwOjAwJztcblxuICAgIGNvbnN0IFtob3VycywgaG91cnNMZWZ0b3Zlcl0gPSB0aGlzLmRpdk1vZChkdXJhdGlvbiwgMzYwMCk7XG4gICAgY29uc3QgW21pbnV0ZXMsIHNlY29uZHNdID0gdGhpcy5kaXZNb2QoaG91cnNMZWZ0b3ZlciwgNjApO1xuICAgIGNvbnN0IHJvdW5kZWRTZWNvbmRzID0gTWF0aC5jZWlsKHNlY29uZHMpO1xuXG4gICAgY29uc3QgcHJlcGVuZEhyc1plcm8gPSBob3Vycy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/ICcwJyA6ICcnO1xuICAgIGNvbnN0IHByZXBlbmRNaW5aZXJvID0gbWludXRlcy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/ICcwJyA6ICcnO1xuICAgIGNvbnN0IHByZXBlbmRTZWNaZXJvID0gcm91bmRlZFNlY29uZHMudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyAnMCcgOiAnJztcbiAgICBjb25zdCBtaW5TZWMgPSBgJHtwcmVwZW5kTWluWmVyb30ke21pbnV0ZXN9OiR7cHJlcGVuZFNlY1plcm99JHtyb3VuZGVkU2Vjb25kc31gO1xuXG4gICAgcmV0dXJuIGhvdXJzID8gYCR7cHJlcGVuZEhyc1plcm99JHtob3Vyc306YCArIG1pblNlYyA6IG1pblNlYztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZVNpemUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5hdHRhY2htZW50Py5maWxlX3NpemUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5hdHRhY2htZW50Py5maWxlX3NpemUgPT09IG51bGxcbiAgICApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHByZXR0eWJ5dGVzKE51bWJlcih0aGlzLmF0dGFjaG1lbnQuZmlsZV9zaXplIHx8IDApKTtcbiAgfVxuXG4gIHByaXZhdGUgZGl2TW9kKG51bTogbnVtYmVyLCBkaXZpc29yOiBudW1iZXIpIHtcbiAgICByZXR1cm4gW01hdGguZmxvb3IobnVtIC8gZGl2aXNvciksIG51bSAlIGRpdmlzb3JdO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudF9fdm9pY2UtcmVjb3JkaW5nLXdpZGdldFwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50X192b2ljZS1yZWNvcmRpbmctd2lkZ2V0LS1lcnJvcl09XCJpc0Vycm9yXCJcbiAgZGF0YS10ZXN0aWQ9XCJ2b2ljZS1yZWNvcmRpbmctd2lkZ2V0XCJcbj5cbiAgPCEtLSBFbXB0eSBldmVudCBoYW5kbGVycyB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gLS0+XG4gIDxhdWRpb1xuICAgICNhdWRpb0VsZW1lbnRcbiAgICAocGxheSk9XCIobnVsbClcIlxuICAgIChwYXVzZSk9XCIobnVsbClcIlxuICAgIChlbmRlZCk9XCIobnVsbClcIlxuICAgIChlcnJvcik9XCJpc0Vycm9yID0gdHJ1ZVwiXG4gICAgKGFib3J0KT1cImlzRXJyb3IgPSB0cnVlXCJcbiAgPlxuICAgIDxzb3VyY2VcbiAgICAgIGRhdGEtdGVzdGlkPVwiYXVkaW8tc291cmNlXCJcbiAgICAgIFtzcmNdPVwiYXR0YWNobWVudD8uYXNzZXRfdXJsXCJcbiAgICAgIFt0eXBlXT1cImF0dGFjaG1lbnQ/Lm1pbWVfdHlwZVwiXG4gICAgLz5cbiAgPC9hdWRpbz5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1hdWRpby13aWRnZXQtLXBsYXktYnV0dG9uXCJcbiAgICBkYXRhLXRlc3RpZD1cInBsYXktYnV0dG9uXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlUGxheSgpXCJcbiAgPlxuICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgW2ljb25dPVwiYXVkaW9FbGVtZW50Py5wYXVzZWQgPyAncGxheScgOiAncGF1c2UnXCJcbiAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgPC9idXR0b24+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50X192b2ljZS1yZWNvcmRpbmctd2lkZ2V0X19tZXRhZGF0YVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LXZvaWNlLXJlY29yZGluZy13aWRnZXQtLWZpcnN0LXJvd1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnRfX3ZvaWNlLXJlY29yZGluZy13aWRnZXRfX3RpdGxlXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2b2ljZS1yZWNvcmRpbmctdGl0bGVcIlxuICAgICAgICBbdGl0bGVdPVwiYXR0YWNobWVudD8udGl0bGVcIlxuICAgICAgPlxuICAgICAgICB7eyBhdHRhY2htZW50Py50aXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFcnJvcjsgZWxzZSBzdGF0ZVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnRfX3ZvaWNlLXJlY29yZGluZy13aWRnZXRfX2Vycm9yLW1lc3NhZ2VcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgICAgIGljb249XCJlcnJvclwiXG4gICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICA8c3BhbiBkYXRhLXRlc3RpZD1cImVycm9yLW1lc3NhZ2VcIj57e1xuICAgICAgICAgIFwic3RyZWFtQ2hhdC5FcnJvciBwbGF5aW5nIGF1ZGlvXCIgfCB0cmFuc2xhdGVcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3N0YXRlPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnRfX3ZvaWNlLXJlY29yZGluZy13aWRnZXRfX2F1ZGlvLXN0YXRlXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnRfX3ZvaWNlLXJlY29yZGluZy13aWRnZXRfX3RpbWVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImR1cmF0aW9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiISFhdHRhY2htZW50Py5kdXJhdGlvbjsgZWxzZSBmaWxlU2l6ZVRlbXBsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICBzZWNvbmRzRWxhcHNlZCA+IDAgfHwgIWF1ZGlvRWxlbWVudC5wYXVzZWRcbiAgICAgICAgICAgICAgICA/IHNlY29uZHNFbGFwc2VkRm9ybWF0dGVkXG4gICAgICAgICAgICAgICAgOiBkdXJhdGlvbkZvcm1hdHRlZFxuICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWxlU2l6ZVRlbXBsYXRlPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tc2l6ZVwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS1zaXplLWluZGljYXRvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGZpbGVTaXplIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzdHJlYW0tdm9pY2UtcmVjb3JkaW5nLXdhdmViYXJcbiAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnQ/LndhdmVmb3JtX2RhdGEgJiYgYXR0YWNobWVudD8uZHVyYXRpb25cIlxuICAgICAgICAgIFt3YXZlRm9ybURhdGFdPVwiYXR0YWNobWVudD8ud2F2ZWZvcm1fZGF0YSB8fCBbXVwiXG4gICAgICAgICAgW2R1cmF0aW9uXT1cImF0dGFjaG1lbnQ/LmR1cmF0aW9uXCJcbiAgICAgICAgICBbYXVkaW9FbGVtZW50XT1cImF1ZGlvRWxlbWVudFwiXG4gICAgICAgID48L3N0cmVhbS12b2ljZS1yZWNvcmRpbmctd2F2ZWJhcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50X192b2ljZS1yZWNvcmRpbmctd2lkZ2V0X19yaWdodC1zZWN0aW9uXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiIWF1ZGlvRWxlbWVudD8ucGF1c2VkOyBlbHNlIGZpbGVJY29uXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2VfYXR0YWNobWVudF9fcGxheWJhY2stcmF0ZS1idXR0b25cIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJwbGF5YmFjay1yYXRlLWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwic2V0UGxheWJhY2tSYXRlKClcIlxuICAgID5cbiAgICAgIHt7IGF1ZGlvRWxlbWVudD8ucGxheWJhY2tSYXRlIHwgbnVtYmVyOiBcIjEuMS0xXCIgfX14XG4gICAgPC9idXR0b24+XG4gICAgPG5nLXRlbXBsYXRlICNmaWxlSWNvbj5cbiAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICBpY29uPVwiYXVkaW8tZmlsZVwiXG4gICAgICAgIFtzaXplXT1cIjQwXCJcbiAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
package/esm2015/public-api.js
CHANGED
|
@@ -60,4 +60,6 @@ export * from './lib/date-parser.service';
|
|
|
60
60
|
export * from './lib/types';
|
|
61
61
|
export * from './lib/message.service';
|
|
62
62
|
export * from './lib/message-actions.service';
|
|
63
|
-
|
|
63
|
+
export * from './lib/voice-recording/voice-recording.component';
|
|
64
|
+
export * from './lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component';
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyw2RUFBNkUsQ0FBQztBQUM1RixjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsMkVBQTJFLENBQUM7QUFDMUYsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsaUZBQWlGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHN0cmVhbS1jaGF0LWFuZ3VsYXJcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoYW5uZWwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90aGVtZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F0dGFjaG1lbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdHRhY2htZW50LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdHJlYW0taTE4bi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci9hdmF0YXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci1wbGFjZWhvbGRlci9hdmF0YXItcGxhY2Vob2xkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ljb24vaWNvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaWNvbi1wbGFjZWhvbGRlci9pY29uLXBsYWNlaG9sZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2FkaW5nLWluZGljYXRvci9sb2FkaW5nLWluZGljYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXIvbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc3NhZ2UtYWN0aW9ucy1ib3gvbWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhbm5lbC9jaGFubmVsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jaGFubmVsLWhlYWRlci9jaGFubmVsLWhlYWRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhbm5lbC1wcmV2aWV3L2NoYW5uZWwtcHJldmlldy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhbm5lbC1saXN0L2NoYW5uZWwtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhbm5lbC1saXN0L2NoYW5uZWwtbGlzdC10b2dnbGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BhcnNlLWRhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGlzdC11c2Vycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VkaXQtbWVzc2FnZS1mb3JtL2VkaXQtbWVzc2FnZS1mb3JtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLWJvdW5jZS1wcm9tcHQvbWVzc2FnZS1ib3VuY2UtcHJvbXB0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLWlucHV0L3RleHRhcmVhL3RleHRhcmVhLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLWlucHV0L2F1dG9jb21wbGV0ZS10ZXh0YXJlYS9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc3NhZ2UtaW5wdXQvbWVzc2FnZS1pbnB1dC1jb25maWcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLWlucHV0L3RleHRhcmVhLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLWlucHV0L3RleHRhcmVhLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLWlucHV0L2Vtb2ppLWlucHV0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzc2FnZS1saXN0L21lc3NhZ2UtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzc2FnZS1saXN0L2ltYWdlLWxvYWQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLWxpc3QvZ3JvdXAtc3R5bGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F0dGFjaG1lbnQtbGlzdC9hdHRhY2htZW50LWxpc3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F0dGFjaG1lbnQtcHJldmlldy1saXN0L2F0dGFjaG1lbnQtcHJldmlldy1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy9tZXNzYWdlLXJlYWN0aW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbm90aWZpY2F0aW9uLWxpc3Qvbm90aWZpY2F0aW9uLWxpc3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RocmVhZC90aHJlYWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZWFkLWJ5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dldC1tZXNzYWdlLXRyYW5zbGF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dldC1jaGFubmVsLWRpc3BsYXktdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pcy1pbWFnZS1hdHRhY2htZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2lzLWltYWdlLWZpbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzc2FnZS1wcmV2aWV3JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RyYW5zbGl0ZXJhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0cmVhbS1jaGF0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdHJlYW0tYXZhdGFyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdHJlYW0tYXV0b2NvbXBsZXRlLXRleHRhcmVhLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdHJlYW0tdGV4dGFyZWEubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2luamVjdGlvbi10b2tlbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc3NhZ2UtcmVhY3Rpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1wYXJzZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdm9pY2UtcmVjb3JkaW5nL3ZvaWNlLXJlY29yZGluZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdm9pY2UtcmVjb3JkaW5nL3ZvaWNlLXJlY29yZGluZy13YXZlYmFyL3ZvaWNlLXJlY29yZGluZy13YXZlYmFyLmNvbXBvbmVudCc7XG4iXX0=
|