ngx-scandoc 1.2.4 → 1.3.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/core/components/components.module.d.ts +10 -7
- package/core/components/manual-scan/manual-scan.component.d.ts +61 -0
- package/core/components/scan/scan.component.d.ts +21 -24
- package/core/components/scan-results/scan-results.component.d.ts +11 -4
- package/core/components/webcam/util/webcam.util.d.ts +1 -1
- package/core/components/webcam/webcam/webcam.component.d.ts +26 -180
- package/core/components/webcam/webcam.module.d.ts +2 -0
- package/core/interfaces/config.d.ts +4 -0
- package/dialogs/components/prompt-manual/prompt-manual.component.d.ts +12 -0
- package/dialogs/components/scan-profile/scan-profile.component.d.ts +6 -1
- package/dialogs/components/scan-selfie/scan-selfie.component.d.ts +15 -61
- package/dialogs/dialogs.core.provider.d.ts +1 -0
- package/dialogs/dialogs.module.d.ts +12 -9
- package/esm2020/core/components/camera-switch/camera-switch.component.mjs +6 -4
- package/esm2020/core/components/components.module.mjs +32 -10
- package/esm2020/core/components/manual-scan/manual-scan.component.mjs +290 -0
- package/esm2020/core/components/scan/scan.component.mjs +290 -181
- package/esm2020/core/components/scan-results/scan-results.component.mjs +38 -12
- package/esm2020/core/components/webcam/util/webcam.util.mjs +7 -5
- package/esm2020/core/components/webcam/webcam/webcam.component.mjs +296 -772
- package/esm2020/core/components/webcam/webcam.module.mjs +8 -1
- package/esm2020/core/interfaces/config.mjs +1 -1
- package/esm2020/dialogs/components/confirm/confirm.component.mjs +3 -3
- package/esm2020/dialogs/components/prompt-manual/prompt-manual.component.mjs +30 -0
- package/esm2020/dialogs/components/scan-profile/scan-profile.component.mjs +36 -17
- package/esm2020/dialogs/components/scan-selfie/scan-selfie.component.mjs +41 -336
- package/esm2020/dialogs/dialogs.core.provider.mjs +12 -1
- package/esm2020/dialogs/dialogs.module.mjs +24 -11
- package/esm2020/forms/types/avatar.type.mjs +26 -21
- package/esm2020/forms/types/profile.image.type.mjs +51 -41
- package/esm2020/forms/types/title.type.mjs +7 -35
- package/esm2020/lib/ngx-scandoc.module.mjs +8 -6
- package/esm2020/providers/auth.provider.mjs +15 -2
- package/esm2020/providers/camera.provider.mjs +37 -4
- package/esm2020/providers/interceptor.provider.mjs +2 -2
- package/esm2020/providers/layout.provider.mjs +7 -5
- package/esm2020/providers/scan.form.mjs +173 -215
- package/esm2020/providers/scan.provider.mjs +264 -7
- package/esm2020/providers/translation.provider.mjs +18 -23
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/ngx-scandoc.mjs +1722 -1988
- package/fesm2015/ngx-scandoc.mjs.map +1 -1
- package/fesm2020/ngx-scandoc.mjs +1719 -1982
- package/fesm2020/ngx-scandoc.mjs.map +1 -1
- package/forms/types/avatar.type.d.ts +1 -0
- package/forms/types/profile.image.type.d.ts +6 -1
- package/lib/ngx-scandoc.module.d.ts +2 -3
- package/package.json +1 -1
- package/providers/camera.provider.d.ts +17 -1
- package/providers/layout.provider.d.ts +3 -1
- package/providers/scan.form.d.ts +2 -0
- package/providers/scan.provider.d.ts +6 -1
- package/public-api.d.ts +2 -0
- package/src/assets/i18n/en.json +14 -3
|
@@ -1,94 +1,36 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import { Subject
|
|
1
|
+
import { Component, EventEmitter, Output, ChangeDetectionStrategy, } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
3
|
import { FormGroup } from '@angular/forms';
|
|
4
|
-
import {
|
|
5
|
-
import { WebcamUtil } from '../../../core/components/webcam/util/webcam.util';
|
|
4
|
+
import { BaseComponent } from '../../../core/components/base.component';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "
|
|
8
|
-
import * as i2 from "../../../
|
|
9
|
-
import * as i3 from "
|
|
10
|
-
import * as i4 from "
|
|
6
|
+
import * as i1 from "@angular/material/dialog";
|
|
7
|
+
import * as i2 from "../../../providers/camera.provider";
|
|
8
|
+
import * as i3 from "../../../providers/scan.provider";
|
|
9
|
+
import * as i4 from "../../../dialogs/dialogs.core.provider";
|
|
11
10
|
import * as i5 from "@angular/common";
|
|
12
|
-
import * as i6 from "@angular/material/
|
|
13
|
-
import * as i7 from "@angular/material/
|
|
14
|
-
import * as i8 from "@angular/material/
|
|
15
|
-
import * as i9 from "
|
|
16
|
-
import * as i10 from "
|
|
17
|
-
import * as i11 from "@
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// private formProvider: ScanFieldsProvider,
|
|
22
|
-
translate) {
|
|
11
|
+
import * as i6 from "@angular/material/icon";
|
|
12
|
+
import * as i7 from "@angular/material/button";
|
|
13
|
+
import * as i8 from "@angular/material/progress-bar";
|
|
14
|
+
import * as i9 from "../../../core/components/webcam/webcam/webcam.component";
|
|
15
|
+
import * as i10 from "../../../core/components/camera-switch/camera-switch.component";
|
|
16
|
+
import * as i11 from "@ngx-translate/core";
|
|
17
|
+
export class ScanSelfieComponent extends BaseComponent {
|
|
18
|
+
constructor(cd, dialogRef, cameraProvider, scanProvider, dialogs) {
|
|
19
|
+
super();
|
|
23
20
|
this.cd = cd;
|
|
21
|
+
this.dialogRef = dialogRef;
|
|
22
|
+
this.cameraProvider = cameraProvider;
|
|
24
23
|
this.scanProvider = scanProvider;
|
|
25
24
|
this.dialogs = dialogs;
|
|
26
|
-
this.translate = translate;
|
|
27
|
-
this.scanBlastData = [
|
|
28
|
-
{
|
|
29
|
-
title: 'pms.dialogs.components.scanProfile.front',
|
|
30
|
-
description: 'pms.dialogs.components.scanProfile.frontDescription',
|
|
31
|
-
side: 'FRONT',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
title: 'pms.dialogs.components.scanProfile.back',
|
|
35
|
-
description: 'pms.dialogs.components.scanProfile.backDescription',
|
|
36
|
-
disabled: true,
|
|
37
|
-
side: 'BACK',
|
|
38
|
-
},
|
|
39
|
-
];
|
|
40
|
-
this.type = 'desktop';
|
|
41
25
|
this.actions = new EventEmitter();
|
|
42
|
-
this.mediaDevices = [];
|
|
43
|
-
this.videoOptions = {
|
|
44
|
-
width: 1920,
|
|
45
|
-
height: 1080,
|
|
46
|
-
facingMode: 'environment',
|
|
47
|
-
};
|
|
48
|
-
this.multipleWebcamsAvailable = false;
|
|
49
|
-
// webcam snapshot trigger
|
|
50
|
-
this.documentTypeSelected = false;
|
|
51
|
-
this.preview = null;
|
|
52
|
-
this.allowCameraSwitch = true;
|
|
53
|
-
this.error = false;
|
|
54
26
|
this.cameraReady = false;
|
|
55
|
-
this.
|
|
56
|
-
this.scanDatas = [];
|
|
27
|
+
this.preview = null;
|
|
57
28
|
this.trigger = new Subject();
|
|
58
|
-
// switch to next / previous / specific webcam; true/false: forward/backwards, string: deviceId
|
|
59
|
-
this.nextWebcam = new Subject();
|
|
60
29
|
this.form = new FormGroup({});
|
|
61
30
|
}
|
|
62
|
-
onResize() {
|
|
63
|
-
if (this.wraper) {
|
|
64
|
-
this.width = this.wraper.nativeElement.clientWidth;
|
|
65
|
-
this.height = this.wraper.nativeElement.clientHeight;
|
|
66
|
-
console.log(this.width, this.height);
|
|
67
|
-
setTimeout(() => {
|
|
68
|
-
const video = this.wraper?.nativeElement.querySelector('video');
|
|
69
|
-
if (video) {
|
|
70
|
-
// console.log(video.clientWidth, video.clientHeight);
|
|
71
|
-
this.videoWidth = video.clientWidth;
|
|
72
|
-
this.videoHeight = video.clientHeight;
|
|
73
|
-
}
|
|
74
|
-
}, 100);
|
|
75
|
-
this.cd.detectChanges();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
init() {
|
|
79
|
-
console.log('HAS MULTI');
|
|
80
|
-
// this.result=true;
|
|
81
|
-
// this.result ={};
|
|
82
|
-
this.fields = []; //this.formProvider.document();
|
|
83
|
-
WebcamUtil.getAvailableVideoInputs().subscribe((mediaDevices) => {
|
|
84
|
-
console.log('[DEVICES]', mediaDevices);
|
|
85
|
-
this.mediaDevices = mediaDevices;
|
|
86
|
-
this.multipleWebcamsAvailable = mediaDevices && mediaDevices.length > 1;
|
|
87
|
-
this.singleScan(this.scanBlastData[0]);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
31
|
handleImage(webcamImage) {
|
|
91
|
-
console.log('[received webcam image]', webcamImage);
|
|
32
|
+
// console.log('[received webcam image]', webcamImage);
|
|
33
|
+
this.cameraProvider.$showSwitchSelfie.next(false);
|
|
92
34
|
this.webcamImage = webcamImage;
|
|
93
35
|
this.preview = webcamImage.imageAsDataUrl;
|
|
94
36
|
this.cd.detectChanges();
|
|
@@ -96,227 +38,30 @@ export class ScanSelfieComponent {
|
|
|
96
38
|
handleInitError(error) {
|
|
97
39
|
console.log(error);
|
|
98
40
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
cameraWasSwitched(deviceId) {
|
|
103
|
-
console.log('active device: ' + deviceId);
|
|
104
|
-
this.deviceId = deviceId;
|
|
105
|
-
this.cameraReady = true;
|
|
106
|
-
this.defaultDevice = deviceId;
|
|
107
|
-
this.onResize();
|
|
108
|
-
}
|
|
109
|
-
get nextWebcamObservable() {
|
|
110
|
-
return this.nextWebcam.asObservable();
|
|
41
|
+
videoReady(ev) {
|
|
42
|
+
this.cameraReady = ev;
|
|
111
43
|
}
|
|
112
44
|
ngAfterViewInit() {
|
|
45
|
+
this.cameraProvider.$showSwitchSelfie.next(true);
|
|
113
46
|
this.cd.detectChanges();
|
|
114
47
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
this.nextWebcam.next(event.value);
|
|
118
|
-
}
|
|
119
|
-
close() {
|
|
120
|
-
this.dialogRef?.close();
|
|
121
|
-
}
|
|
122
|
-
singleScan(side) {
|
|
123
|
-
this.scanType = side.side;
|
|
124
|
-
this.preview = null;
|
|
125
|
-
this.selectedSide = side;
|
|
126
|
-
this.selectedSide.image = null;
|
|
127
|
-
this.documentTypeSelected = true;
|
|
128
|
-
this.scanBlastData[1].disabled = false;
|
|
129
|
-
this.cd.detectChanges();
|
|
130
|
-
setTimeout(() => {
|
|
131
|
-
this.onResize();
|
|
132
|
-
}, 10);
|
|
48
|
+
ngOnDestroy() {
|
|
49
|
+
this.__destroy();
|
|
133
50
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
reader.readAsDataURL(file);
|
|
138
|
-
reader.onload = () => {
|
|
139
|
-
observer.next(reader.result);
|
|
140
|
-
};
|
|
141
|
-
reader.onerror = (error) => {
|
|
142
|
-
observer.error(error);
|
|
143
|
-
};
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
handleFileInput(target, event, side) {
|
|
147
|
-
const files = target.files;
|
|
148
|
-
this.selectedSide = side;
|
|
149
|
-
console.log(files);
|
|
150
|
-
const file = files.item(0);
|
|
151
|
-
this.resolutionLimit(file)
|
|
152
|
-
.pipe(switchMap((valid) => {
|
|
153
|
-
return valid ? this.getBase64(file) : of(false);
|
|
154
|
-
}))
|
|
155
|
-
.subscribe((imageAsDataUrl) => {
|
|
156
|
-
// console.log(imageAsDataUrl);
|
|
157
|
-
event.target.value = null;
|
|
158
|
-
if (!imageAsDataUrl) {
|
|
159
|
-
this.dialogs.alert('core.page.error', this.translate.instant('pms.dialogs.components.scanProfile.minResolution'));
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
side.image = {
|
|
163
|
-
imageAsDataUrl,
|
|
164
|
-
};
|
|
165
|
-
if (this.selectedSide.side === 'FRONT') {
|
|
166
|
-
this.scanBlastData[1].disabled = false;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
this.cd.detectChanges();
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
rotateBase64Image(base64data) {
|
|
173
|
-
return new Observable((observer) => {
|
|
174
|
-
const canvas = document.createElement('canvas');
|
|
175
|
-
const ctx = canvas.getContext('2d');
|
|
176
|
-
var image = new Image();
|
|
177
|
-
image.src = base64data;
|
|
178
|
-
image.onload = () => {
|
|
179
|
-
console.log(canvas);
|
|
180
|
-
canvas.width = image.height;
|
|
181
|
-
canvas.height = image.width;
|
|
182
|
-
if (ctx) {
|
|
183
|
-
ctx.rotate((90 * Math.PI) / 180);
|
|
184
|
-
ctx.translate(0, -canvas.width);
|
|
185
|
-
ctx.drawImage(image, 0, 0);
|
|
186
|
-
observer.next(canvas.toDataURL());
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
observer.error({ type: 'generic error' });
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
image.onerror = (e) => {
|
|
193
|
-
observer.error(e);
|
|
194
|
-
};
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
sendMobile() {
|
|
198
|
-
// this.dialogs.scanMobile({ id: 1 });
|
|
199
|
-
}
|
|
200
|
-
singleScanRotate(side) {
|
|
201
|
-
console.log(side);
|
|
202
|
-
this.rotateBase64Image(side.image.imageAsDataUrl).subscribe((data) => {
|
|
203
|
-
side.image = { imageAsDataUrl: data };
|
|
204
|
-
this.cd.detectChanges();
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
singleScanRemove(side) {
|
|
208
|
-
side.image = null;
|
|
209
|
-
if (side.side === 'FRONT') {
|
|
210
|
-
this.scanBlastData[1].disabled = true;
|
|
211
|
-
}
|
|
51
|
+
retry() {
|
|
52
|
+
this.preview = false;
|
|
53
|
+
this.cameraProvider.$showSwitchSelfie.next(true);
|
|
212
54
|
this.cd.detectChanges();
|
|
213
55
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
const minHeight = 720;
|
|
217
|
-
return new Observable((observer) => {
|
|
218
|
-
const img = new Image();
|
|
219
|
-
img.src = window.URL.createObjectURL(file);
|
|
220
|
-
img.onload = () => {
|
|
221
|
-
const width = img.naturalWidth;
|
|
222
|
-
const height = img.naturalHeight;
|
|
223
|
-
let valid = false;
|
|
224
|
-
if (width > height) {
|
|
225
|
-
valid = width >= minWidth && height >= minHeight;
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
valid = width >= minHeight && height >= minWidth;
|
|
229
|
-
}
|
|
230
|
-
observer.next(valid);
|
|
231
|
-
};
|
|
232
|
-
img.onerror = (error) => {
|
|
233
|
-
observer.error(error);
|
|
234
|
-
};
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
getImgBase64(num) {
|
|
238
|
-
return this.scanBlastData[num].image.dataUrl.split(',')[1];
|
|
239
|
-
}
|
|
240
|
-
scanBlastFinish() {
|
|
241
|
-
if (this.type === 'mobile') {
|
|
242
|
-
this.actions.emit({ data: this.scanBlastData });
|
|
243
|
-
this.retake();
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
const loading = this.dialogs.loading();
|
|
247
|
-
this.scaning = true;
|
|
248
|
-
const payload = {
|
|
249
|
-
AcceptTermsAndConditions: true,
|
|
250
|
-
DataFields: {
|
|
251
|
-
FrontImageType: 'base64',
|
|
252
|
-
FrontImageCropped: false,
|
|
253
|
-
BackImageType: 'base64',
|
|
254
|
-
BackImageCropped: false,
|
|
255
|
-
FrontImage: this.getImgBase64(0),
|
|
256
|
-
BackImage: this.scanBlastData[1].image ? this.getImgBase64(1) : null,
|
|
257
|
-
},
|
|
258
|
-
Settings: {
|
|
259
|
-
ShouldValidate: true,
|
|
260
|
-
ShouldReturnDocumentImage: true,
|
|
261
|
-
ShouldReturnFaceIfDetected: true,
|
|
262
|
-
SkipImageSizeCheck: true,
|
|
263
|
-
CanStoreImages: this.scanProvider.canStoreImages,
|
|
264
|
-
},
|
|
265
|
-
// CallBackUrl: 'http://demo:5000/report/extracted/',
|
|
266
|
-
};
|
|
267
|
-
if (!this.scanBlastData[1].image) {
|
|
268
|
-
payload.Settings.IgnoreBackImage = true;
|
|
269
|
-
}
|
|
270
|
-
this.scanProvider.blastPost(payload).subscribe((data) => {
|
|
271
|
-
const results = data.Data;
|
|
272
|
-
loading.close();
|
|
273
|
-
this.documentTypeSelected = true;
|
|
274
|
-
this.scaning = false;
|
|
275
|
-
if (results && data.Metadata.length > 0) {
|
|
276
|
-
if (data.ImageData?.Documents) {
|
|
277
|
-
const { Documents } = data.ImageData;
|
|
278
|
-
this.images = Documents.map((image, i) => {
|
|
279
|
-
return { data: 'data:image/jpeg;base64,' + Documents[i] };
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
this.result = this.scanProvider.parseBlast(results);
|
|
283
|
-
console.log('RES', this.result);
|
|
284
|
-
this.model = this.result.model;
|
|
285
|
-
if (data.ImageData?.FaceImage) {
|
|
286
|
-
this.model._avatar =
|
|
287
|
-
'data:image/jpeg;base64,' + data.ImageData?.FaceImage;
|
|
288
|
-
}
|
|
289
|
-
console.log('MODEL', this.model);
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
console.log('ERROR');
|
|
293
|
-
// this.scanSide = 0;
|
|
294
|
-
this.error = true;
|
|
295
|
-
this.preview = true;
|
|
296
|
-
// this.documentTypeSelected = false;
|
|
297
|
-
// this.retry();
|
|
298
|
-
}
|
|
299
|
-
this.cd.detectChanges();
|
|
300
|
-
}, (err) => {
|
|
301
|
-
loading.close();
|
|
302
|
-
// this.scanSide = 0;
|
|
303
|
-
this.error = true;
|
|
304
|
-
this.preview = true;
|
|
305
|
-
this.documentTypeSelected = true;
|
|
306
|
-
this.scaning = false;
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
cameraOff(ev) {
|
|
310
|
-
this.cameraReady = false;
|
|
311
|
-
this.cd.detectChanges();
|
|
56
|
+
scan() {
|
|
57
|
+
this.trigger.next(new Date().getTime());
|
|
312
58
|
}
|
|
313
59
|
continue() {
|
|
314
|
-
|
|
60
|
+
console.log(this.data);
|
|
61
|
+
if (this.scanProvider.enableVerification && this.data.avatar) {
|
|
315
62
|
const loading = this.dialogs.loading();
|
|
316
63
|
console.log(this.data.avatar);
|
|
317
|
-
this.scanProvider
|
|
318
|
-
.stateless(this.data.avatar.split(',')[1], this.webcamImage?.imageAsDataUrl.split(',')[1])
|
|
319
|
-
.subscribe((resp) => {
|
|
64
|
+
this.__subs(this.scanProvider.stateless(this.data.avatar.split(',')[1], this.webcamImage?.imageAsDataUrl.split(',')[1])).subscribe((resp) => {
|
|
320
65
|
loading.close();
|
|
321
66
|
if (resp.Data?.Verified) {
|
|
322
67
|
this.dialogRef?.close(this.webcamImage);
|
|
@@ -335,56 +80,16 @@ export class ScanSelfieComponent {
|
|
|
335
80
|
}
|
|
336
81
|
// this.dialogRef.close(this.webcamImage)
|
|
337
82
|
}
|
|
338
|
-
|
|
339
|
-
this.
|
|
340
|
-
this.result = false;
|
|
341
|
-
if (this.error) {
|
|
342
|
-
this.documentTypeSelected = false;
|
|
343
|
-
this.scanBlastData.forEach((element) => {
|
|
344
|
-
element.image = null;
|
|
345
|
-
});
|
|
346
|
-
}
|
|
347
|
-
this.error = false;
|
|
348
|
-
}
|
|
349
|
-
triggerSnapshot() {
|
|
350
|
-
this.trigger.next(0);
|
|
351
|
-
}
|
|
352
|
-
scan() {
|
|
353
|
-
console.log('SCAN');
|
|
354
|
-
this.triggerSnapshot();
|
|
355
|
-
this.scanDatas[0] = true;
|
|
356
|
-
}
|
|
357
|
-
retake() {
|
|
358
|
-
this.preview = false;
|
|
359
|
-
this.error = false;
|
|
360
|
-
this.result = false;
|
|
361
|
-
this.scanSide = 0;
|
|
362
|
-
this.scanDatas = [];
|
|
363
|
-
this.scaning = false;
|
|
364
|
-
this.images = [];
|
|
365
|
-
this.documentTypeSelected = false;
|
|
366
|
-
this.scanBlastData.forEach((m) => {
|
|
367
|
-
m.image = null;
|
|
368
|
-
});
|
|
369
|
-
this.cd.detectChanges();
|
|
83
|
+
close() {
|
|
84
|
+
this.dialogRef.close(null);
|
|
370
85
|
}
|
|
371
|
-
use() { }
|
|
372
|
-
selfie() { }
|
|
373
86
|
}
|
|
374
|
-
ScanSelfieComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanSelfieComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.
|
|
375
|
-
ScanSelfieComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScanSelfieComponent, selector: "app-scan-selfie", inputs: { type: "type" }, outputs: { actions: "actions" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "wraper", first: true, predicate: ["wraper"], descendants: true }], ngImport: i0, template: "<header class=\"page-header\">\n <div class=\"title\">Selfie</div>\n\n <span class=\"flex\"></span>\n <ng-container\n *ngIf=\"\n documentTypeSelected &&\n !result &&\n !error &&\n multipleWebcamsAvailable &&\n !preview\n \"\n >\n <div class=\"separator\"></div>\n <div style=\"padding: 0px 16px\">\n <div class=\"flex-column\">\n <mat-form-field\n style=\"font-size: 14px; width: 200px; margin-top: 8px\"\n class=\"w-200 mr-16 mt-8\"\n >\n <mat-label> Camera </mat-label>\n <mat-select\n (selectionChange)=\"selectCamera($event)\"\n [(ngModel)]=\"deviceId\"\n >\n <mat-option\n *ngFor=\"let device of mediaDevices\"\n [value]=\"device.deviceId\"\n >\n {{ device.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </ng-container>\n\n <ng-container>\n <div class=\"separator\"></div>\n\n <button mat-button (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n </ng-container>\n <!-- <ng-container *ngIf=\"type === 'desktop'\">\n <div class=\"separator\"></div>\n <button mat-button (click)=\"sendMobile()\">\n <mat-icon>tablet_mac</mat-icon>\n </button>\n\n <div class=\"separator\"></div>\n\n <button mat-button (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n </ng-container> -->\n</header>\n\n<div *ngIf=\"!result\" class=\"flex-column flex\">\n <div #wraper class=\"wraper flex flex-row\">\n <div\n style=\"\n position: absolute;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n z-index: 20;\n background-color: whitesmoke;\n \"\n *ngIf=\"!cameraReady && !preview\"\n >\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <ng-container *ngIf=\"!error\">\n <!-- <div\n class=\"rectangle\"\n [ngStyle]=\"{\n 'width.px': videoHeight * 0.75 * 1.588,\n 'height.px': videoHeight * 0.75\n }\"\n ></div>\n <svg\n *ngIf=\"videoWidth\"\n style=\"position: absolute; left: 0px; top: 0px\"\n width=\"0\"\n height=\"0\"\n >\n <defs>\n <clipPath id=\"myClip\">\n <rect\n stroke-width=\"6\"\n stroke-color=\"red\"\n [attr.x]=\"(videoWidth - videoHeight * 0.75 * 1.588) / 2\"\n [attr.y]=\"(videoHeight * 0.25) / 2\"\n [attr.width]=\"videoHeight * 0.75 * 1.588\"\n [attr.height]=\"videoHeight * 0.75\"\n rx=\"25\"\n />\n </clipPath>\n </defs>\n </svg> -->\n\n <ngx-scandoc-webcam\n *ngIf=\"!preview && !scaning\"\n class=\"main flex\"\n [imageQuality]=\"1\"\n #webcam\n [trigger]=\"trigger\"\n (imageCapture)=\"handleImage($event)\"\n [allowCameraSwitch]=\"allowCameraSwitch\"\n [videoOptions]=\"videoOptions\"\n [switchCamera]=\"nextWebcamObservable\"\n (cameraSwitched)=\"cameraWasSwitched($event)\"\n (initError)=\"handleInitError($event)\"\n type=\"selfie\"\n [width]=\"width\"\n [height]=\"height\"\n (destroyed)=\"cameraOff($event)\"\n >\n </ngx-scandoc-webcam>\n </ng-container>\n <div\n class=\"previewData\"\n *ngIf=\"preview\"\n style=\"\n z-index: 20;\n position: absolute;\n width: 100%;\n height: 100%;\n flex: 1;\n display: flex;\n flex-direction: row;\n \"\n >\n <div\n class=\"scanPreview\"\n style=\"display: flex; flex-direction: column; flex: 1\"\n *ngIf=\"!error && !scaning\"\n >\n <div\n style=\"flex: 1\"\n class=\"image\"\n [style.background-image]=\"'url(' + preview + ')'\"\n ></div>\n </div>\n </div>\n </div>\n\n <footer class=\"p-8 flex-row\">\n <button\n [disabled]=\"!cameraReady\"\n class=\"w-100-p\"\n *ngIf=\"!preview\"\n mat-raised-button\n (click)=\"scan()\"\n >\n <ng-container> TAKE SELFIE </ng-container>\n </button>\n\n <div\n class=\"w-100-p flex-row flex\"\n *ngIf=\"preview\"\n style=\"align-items: center\"\n >\n <button style=\"flex: 1\" class=\"mr-4\" mat-raised-button (click)=\"retry()\">\n RETRY\n </button>\n\n <button\n [disabled]=\"error\"\n style=\"flex: 1\"\n class=\"ml-4\"\n mat-raised-button\n (click)=\"continue()\"\n >\n CONTINUE\n </button>\n </div>\n </footer>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;background-color:#f5f5f5}.page-header{display:flex;flex-direction:row}.flex{flex:1}.flex-column{display:flex;flex-direction:column}.flex-row{display:flex;flex-direction:row}.element{margin-bottom:8px}.element label{font-size:14px}.element div{font-size:18px}.wraper{position:relative;overflow:hidden}h3{color:#459ae5;font-size:16px}.preview{width:100%;border-radius:1%}.documentTypeWraper{width:400px}.documentTypeWraper .label{font-size:14px;margin-bottom:20px}.documentTypeWraper button{box-shadow:none}.overPane{position:absolute;width:100%;height:100%;top:0;left:0}.overPane app-webcam{clip-path:url(#myClip)}.subhead{height:55px;padding-top:8px}.rectangle{z-index:2;position:absolute;top:50%;left:50%;width:85.6mm;height:53.98mm;transform:translate(-50%,-50%);box-sizing:border-box;border:2px dashed #459be5;border-radius:3mm}.mask{z-index:1;position:absolute;width:100%;height:100%;background-position:center center;background-size:380mm;background-repeat:no-repeat}.label{font-size:11px;margin-top:4px}footer button{box-shadow:none!important;height:45px;min-height:45px;border:1px solid rgba(0,0,0,.12);text-transform:uppercase}h4{font-size:16px}.images label{font-size:11px;color:#888;line-height:20px}.images .title{padding:8px 0;font-weight:600}.images img{margin-bottom:16px}.error .title{font-size:22px}.error ul{font-size:18px}.photo{width:120px;height:120px;overflow:hidden}.signature{width:200px}mat-card{box-shadow:none!important}.scanBlastWraper button{text-transform:uppercase}.scanBlastWraper.mobile mat-card{margin:4px!important}.scanBlastWraper.mobile .description{font-size:12px;flex-direction:row!important}.scanBlastWraper.mobile .description .imgWrap{padding:0!important}.scanBlastWraper.mobile .description .btnActions{position:absolute;right:0}.scanBlastWraper.mobile .description button{font-size:11px!important;margin:0!important;position:absolute;right:16px}.scanBlastWraper.mobile .description button.rotateButton{top:58px}.scanBlastWraper.mobile .description button.remButton{top:8px}.scanBlastWraper.mobile .description button mat-icon{margin:0!important}.scanBlastWraper.mobile .description button div.label{display:none}.mobile .scanBlast button{font-size:11px!important}.scanBlast{display:flex;flex-direction:row;flex:1;padding:0 4px}.scanBlast mat-card{padding:0;box-shadow:none;margin:8px 4px;flex:1}.scanBlast mat-card .head{display:flex;flex-direction:row;align-items:center;justify-items:center;border-bottom:1px solid rgba(0,0,0,.12);height:60px;padding:8px}.scanBlast mat-card .head.small{height:30px!important;padding:4px 8px!important}.scanBlast mat-card .head.small .title{font-size:12px!important;margin-left:4px!important}.scanBlast mat-card .head button{max-width:120px;height:40px;box-shadow:none;border:1px solid rgba(0,0,0,.12)}.scanBlast mat-card .head .title{margin-left:16px;color:#459ae5;font-size:16px}.scanBlast mat-card .content{margin:8px;flex:1}.scanBlast mat-card .description{text-align:center;color:#888;font-size:14px}.scanBlast mat-card .actions{background-color:#e9e9e9;display:flex;flex-direction:row}.scanBlast mat-card .actions .mat-button-disabled{background-color:#fff!important}.scanBlast mat-card .actions button{box-shadow:none;width:50%;margin:8px;height:40px;font-size:12px}.scanBlast mat-card .actions button mat-icon{margin-right:8px}.scanBlast mat-card .previewPlaceholder{flex:1;border-radius:6px;display:flex;flex-direction:column}.scanBlast mat-card .previewPlaceholder .description{display:flex;flex:1;flex-direction:column;justify-content:center}.scanBlast mat-card .previewPlaceholder button{box-shadow:none;margin-top:8px;height:40px;font-size:12px}.scanBlast mat-card .previewPlaceholder button mat-icon{margin-right:8px}.scanBlast mat-card .previewPlaceholder .imgWrap{flex-direction:column;flex:1;padding:8px;background-color:#f5f5f5;border-radius:4px}.scanBlast mat-card .previewPlaceholder .imgWrap img{width:100%;border-radius:4px}.scanBlast mat-card .previewPlaceholder .imgWrap .image{background-position:center;background-repeat:no-repeat;background-size:contain}.mr-4{margin-right:4px}.ml-4{margin-left:4px}.p-16{padding:16px}.p-8{padding:8px}.py-16{padding:16px 0}.w-100-p{width:100%}.scanPreview{padding:16px}.scanPreview .image{background-position:center;background-repeat:no-repeat;background-size:contain}.empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.summary label{font-size:12px;color:#888;margin-top:2px}.summary .name{font-size:14px}.selfieContainer{display:flex;flex-direction:column;margin-bottom:20px}.selfieContainer button{box-shadow:none;border:1px solid rgba(0,0,0,.12)}.selfieContainer .selfie{margin:8px auto;width:120px;height:120px;border-radius:60px;border:1px solid rgba(0,0,0,.12)}\n", ".page-header{z-index:2000;height:64px;padding:0;background-color:#fff;border-bottom:1px solid rgba(0,0,0,.12)}.page-header .title{padding-left:24px;line-height:64px;font-size:18px}.page-header .separator{width:1px;background-color:#0000001f;height:100%}.page-header .total{line-height:64px}.page-header .total span{font-weight:700}.page-footer{height:64px}.page-footer button{margin-left:24px;box-shadow:none!important}\n"], dependencies: [{ kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i12.WebcamComponent, selector: "ngx-scandoc-webcam", inputs: ["imageHandler", "id", "type", "width", "height", "videoOptions", "allowCameraSwitch", "mirrorImage", "captureImageData", "imageType", "imageQuality", "trigger", "switchCamera"], outputs: ["imageCapture", "initError", "imageClick", "cameraSwitched", "videoReady", "destroyed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
87
|
+
ScanSelfieComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanSelfieComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MatDialogRef }, { token: i2.NgxScandocCameraProvider }, { token: i3.ScanProvider }, { token: i4.DialogsCoreProvider }], target: i0.ɵɵFactoryTarget.Component });
|
|
88
|
+
ScanSelfieComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScanSelfieComponent, selector: "app-scan-selfie", outputs: { actions: "actions" }, usesInheritance: true, ngImport: i0, template: "<header class=\"page-header\">\n <div class=\"title\">\n {{ \"scandoc.result.takeSelfie\" | translate }}\n </div>\n\n <span style=\"flex: 1\"></span>\n\n <ng-container *ngIf=\"cameraProvider.$showSwitchSelfie | async\">\n <div class=\"separator\"></div>\n <div style=\"padding: 0px 16px\">\n <ngx-scan-camera-switch></ngx-scan-camera-switch>\n </div>\n </ng-container>\n\n <ng-container>\n <div class=\"separator\"></div>\n\n <button mat-button (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n </ng-container>\n</header>\n\n\n<div class=\"flex-column flex\">\n <div #wraper class=\"wraper flex flex-row\">\n <div\n style=\"\n position: absolute;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n z-index: 20;\n background-color: whitesmoke;\n \"\n *ngIf=\"!cameraReady && !preview\"\n >\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <ng-container>\n <ngx-scandoc-webcam\n *ngIf=\"!preview\"\n class=\"main flex\"\n #webcam\n [trigger]=\"trigger\"\n (imageCapture)=\"handleImage($event)\"\n (initError)=\"handleInitError($event)\"\n (videoReady)=\"videoReady($event)\"\n type=\"selfie\"\n >\n </ngx-scandoc-webcam>\n </ng-container>\n <div\n class=\"previewData\"\n *ngIf=\"preview\"\n style=\"\n z-index: 20;\n position: absolute;\n width: 100%;\n height: 100%;\n flex: 1;\n display: flex;\n flex-direction: row;\n \"\n >\n <div\n class=\"scanPreview\"\n style=\"display: flex; flex-direction: column; flex: 1\"\n >\n <div\n style=\"flex: 1\"\n class=\"image\"\n [style.background-image]=\"'url(' + preview + ')'\"\n ></div>\n </div>\n </div>\n </div>\n\n <footer class=\"p-8 flex-row\">\n <button\n [disabled]=\"!cameraReady\"\n class=\"w-100-p\"\n *ngIf=\"!preview\"\n mat-raised-button\n (click)=\"scan()\"\n >\n <ng-container> {{ \"scandoc.result.takeSelfie\" | translate }} </ng-container>\n </button>\n\n <div\n class=\"w-100-p flex-row flex\"\n *ngIf=\"preview\"\n style=\"align-items: center\"\n >\n <button style=\"flex: 1\" class=\"mr-4\" mat-raised-button (click)=\"retry()\">\n {{ \"scandoc.retry\" | translate }}\n </button>\n\n <button\n style=\"flex: 1\"\n class=\"ml-4\"\n mat-raised-button\n (click)=\"continue()\"\n >\n {{ \"scandoc.continueWithSelectedImage\" | translate }}\n </button>\n </div>\n </footer>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;background-color:#f5f5f5}.flex{flex:1}.flex-column{display:flex;flex-direction:column}.flex-row{display:flex;flex-direction:row}.wraper{position:relative;overflow:hidden}h3{color:#459ae5;font-size:16px}.preview{width:100%;border-radius:1%}.subhead{height:55px;padding-top:8px}footer button{box-shadow:none!important;height:45px;min-height:45px;border:1px solid rgba(0,0,0,.12);text-transform:uppercase}.error .title{font-size:22px}.error ul{font-size:18px}.mr-4{margin-right:4px}.ml-4{margin-left:4px}.p-16{padding:16px}.p-8{padding:8px}.py-16{padding:16px 0}.w-100-p{width:100%}.scanPreview{padding:16px}.scanPreview .image{background-position:center;background-repeat:no-repeat;background-size:contain}.page-header{display:flex;flex-direction:row;align-items:center}.page-header button{height:100%}@media only screen and (max-width: 768px){header .title{font-size:12px!important;line-height:18px!important}}\n", ".page-header{z-index:2000;height:64px;padding:0;background-color:#fff;border-bottom:1px solid rgba(0,0,0,.12)}.page-header .title{padding-left:24px;line-height:64px;font-size:18px}.page-header .separator{width:1px;background-color:#0000001f;height:100%}.page-header .total{line-height:64px}.page-header .total span{font-weight:700}.page-footer{height:64px}.page-footer button{margin-left:24px;box-shadow:none!important}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i9.WebcamComponent, selector: "ngx-scandoc-webcam", inputs: ["imageHandler", "type", "trigger"], outputs: ["cameraSwitched", "videoReady", "imageCapture", "initError"] }, { kind: "component", type: i10.CameraSwitchComponent, selector: "ngx-scan-camera-switch" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
376
89
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanSelfieComponent, decorators: [{
|
|
377
90
|
type: Component,
|
|
378
|
-
args: [{ selector: 'app-scan-selfie', changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"page-header\">\n <div class=\"title\">Selfie</div>\n\n <span class=\"flex\"></span>\n <ng-container\n *ngIf=\"\n documentTypeSelected &&\n !result &&\n !error &&\n multipleWebcamsAvailable &&\n !preview\n \"\n >\n <div class=\"separator\"></div>\n <div style=\"padding: 0px 16px\">\n <div class=\"flex-column\">\n <mat-form-field\n style=\"font-size: 14px; width: 200px; margin-top: 8px\"\n class=\"w-200 mr-16 mt-8\"\n >\n <mat-label> Camera </mat-label>\n <mat-select\n (selectionChange)=\"selectCamera($event)\"\n [(ngModel)]=\"deviceId\"\n >\n <mat-option\n *ngFor=\"let device of mediaDevices\"\n [value]=\"device.deviceId\"\n >\n {{ device.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </ng-container>\n\n <ng-container>\n <div class=\"separator\"></div>\n\n <button mat-button (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n </ng-container>\n <!-- <ng-container *ngIf=\"type === 'desktop'\">\n <div class=\"separator\"></div>\n <button mat-button (click)=\"sendMobile()\">\n <mat-icon>tablet_mac</mat-icon>\n </button>\n\n <div class=\"separator\"></div>\n\n <button mat-button (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n </ng-container> -->\n</header>\n\n<div *ngIf=\"!result\" class=\"flex-column flex\">\n <div #wraper class=\"wraper flex flex-row\">\n <div\n style=\"\n position: absolute;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n z-index: 20;\n background-color: whitesmoke;\n \"\n *ngIf=\"!cameraReady && !preview\"\n >\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <ng-container *ngIf=\"!error\">\n <!-- <div\n class=\"rectangle\"\n [ngStyle]=\"{\n 'width.px': videoHeight * 0.75 * 1.588,\n 'height.px': videoHeight * 0.75\n }\"\n ></div>\n <svg\n *ngIf=\"videoWidth\"\n style=\"position: absolute; left: 0px; top: 0px\"\n width=\"0\"\n height=\"0\"\n >\n <defs>\n <clipPath id=\"myClip\">\n <rect\n stroke-width=\"6\"\n stroke-color=\"red\"\n [attr.x]=\"(videoWidth - videoHeight * 0.75 * 1.588) / 2\"\n [attr.y]=\"(videoHeight * 0.25) / 2\"\n [attr.width]=\"videoHeight * 0.75 * 1.588\"\n [attr.height]=\"videoHeight * 0.75\"\n rx=\"25\"\n />\n </clipPath>\n </defs>\n </svg> -->\n\n <ngx-scandoc-webcam\n *ngIf=\"!preview && !scaning\"\n class=\"main flex\"\n [imageQuality]=\"1\"\n #webcam\n [trigger]=\"trigger\"\n (imageCapture)=\"handleImage($event)\"\n [allowCameraSwitch]=\"allowCameraSwitch\"\n [videoOptions]=\"videoOptions\"\n [switchCamera]=\"nextWebcamObservable\"\n (cameraSwitched)=\"cameraWasSwitched($event)\"\n (initError)=\"handleInitError($event)\"\n type=\"selfie\"\n [width]=\"width\"\n [height]=\"height\"\n (destroyed)=\"cameraOff($event)\"\n >\n </ngx-scandoc-webcam>\n </ng-container>\n <div\n class=\"previewData\"\n *ngIf=\"preview\"\n style=\"\n z-index: 20;\n position: absolute;\n width: 100%;\n height: 100%;\n flex: 1;\n display: flex;\n flex-direction: row;\n \"\n >\n <div\n class=\"scanPreview\"\n style=\"display: flex; flex-direction: column; flex: 1\"\n *ngIf=\"!error && !scaning\"\n >\n <div\n style=\"flex: 1\"\n class=\"image\"\n [style.background-image]=\"'url(' + preview + ')'\"\n ></div>\n </div>\n </div>\n </div>\n\n <footer class=\"p-8 flex-row\">\n <button\n [disabled]=\"!cameraReady\"\n class=\"w-100-p\"\n *ngIf=\"!preview\"\n mat-raised-button\n (click)=\"scan()\"\n >\n <ng-container> TAKE SELFIE </ng-container>\n </button>\n\n <div\n class=\"w-100-p flex-row flex\"\n *ngIf=\"preview\"\n style=\"align-items: center\"\n >\n <button style=\"flex: 1\" class=\"mr-4\" mat-raised-button (click)=\"retry()\">\n RETRY\n </button>\n\n <button\n [disabled]=\"error\"\n style=\"flex: 1\"\n class=\"ml-4\"\n mat-raised-button\n (click)=\"continue()\"\n >\n CONTINUE\n </button>\n </div>\n </footer>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;background-color:#f5f5f5}.page-header{display:flex;flex-direction:row}.flex{flex:1}.flex-column{display:flex;flex-direction:column}.flex-row{display:flex;flex-direction:row}.element{margin-bottom:8px}.element label{font-size:14px}.element div{font-size:18px}.wraper{position:relative;overflow:hidden}h3{color:#459ae5;font-size:16px}.preview{width:100%;border-radius:1%}.documentTypeWraper{width:400px}.documentTypeWraper .label{font-size:14px;margin-bottom:20px}.documentTypeWraper button{box-shadow:none}.overPane{position:absolute;width:100%;height:100%;top:0;left:0}.overPane app-webcam{clip-path:url(#myClip)}.subhead{height:55px;padding-top:8px}.rectangle{z-index:2;position:absolute;top:50%;left:50%;width:85.6mm;height:53.98mm;transform:translate(-50%,-50%);box-sizing:border-box;border:2px dashed #459be5;border-radius:3mm}.mask{z-index:1;position:absolute;width:100%;height:100%;background-position:center center;background-size:380mm;background-repeat:no-repeat}.label{font-size:11px;margin-top:4px}footer button{box-shadow:none!important;height:45px;min-height:45px;border:1px solid rgba(0,0,0,.12);text-transform:uppercase}h4{font-size:16px}.images label{font-size:11px;color:#888;line-height:20px}.images .title{padding:8px 0;font-weight:600}.images img{margin-bottom:16px}.error .title{font-size:22px}.error ul{font-size:18px}.photo{width:120px;height:120px;overflow:hidden}.signature{width:200px}mat-card{box-shadow:none!important}.scanBlastWraper button{text-transform:uppercase}.scanBlastWraper.mobile mat-card{margin:4px!important}.scanBlastWraper.mobile .description{font-size:12px;flex-direction:row!important}.scanBlastWraper.mobile .description .imgWrap{padding:0!important}.scanBlastWraper.mobile .description .btnActions{position:absolute;right:0}.scanBlastWraper.mobile .description button{font-size:11px!important;margin:0!important;position:absolute;right:16px}.scanBlastWraper.mobile .description button.rotateButton{top:58px}.scanBlastWraper.mobile .description button.remButton{top:8px}.scanBlastWraper.mobile .description button mat-icon{margin:0!important}.scanBlastWraper.mobile .description button div.label{display:none}.mobile .scanBlast button{font-size:11px!important}.scanBlast{display:flex;flex-direction:row;flex:1;padding:0 4px}.scanBlast mat-card{padding:0;box-shadow:none;margin:8px 4px;flex:1}.scanBlast mat-card .head{display:flex;flex-direction:row;align-items:center;justify-items:center;border-bottom:1px solid rgba(0,0,0,.12);height:60px;padding:8px}.scanBlast mat-card .head.small{height:30px!important;padding:4px 8px!important}.scanBlast mat-card .head.small .title{font-size:12px!important;margin-left:4px!important}.scanBlast mat-card .head button{max-width:120px;height:40px;box-shadow:none;border:1px solid rgba(0,0,0,.12)}.scanBlast mat-card .head .title{margin-left:16px;color:#459ae5;font-size:16px}.scanBlast mat-card .content{margin:8px;flex:1}.scanBlast mat-card .description{text-align:center;color:#888;font-size:14px}.scanBlast mat-card .actions{background-color:#e9e9e9;display:flex;flex-direction:row}.scanBlast mat-card .actions .mat-button-disabled{background-color:#fff!important}.scanBlast mat-card .actions button{box-shadow:none;width:50%;margin:8px;height:40px;font-size:12px}.scanBlast mat-card .actions button mat-icon{margin-right:8px}.scanBlast mat-card .previewPlaceholder{flex:1;border-radius:6px;display:flex;flex-direction:column}.scanBlast mat-card .previewPlaceholder .description{display:flex;flex:1;flex-direction:column;justify-content:center}.scanBlast mat-card .previewPlaceholder button{box-shadow:none;margin-top:8px;height:40px;font-size:12px}.scanBlast mat-card .previewPlaceholder button mat-icon{margin-right:8px}.scanBlast mat-card .previewPlaceholder .imgWrap{flex-direction:column;flex:1;padding:8px;background-color:#f5f5f5;border-radius:4px}.scanBlast mat-card .previewPlaceholder .imgWrap img{width:100%;border-radius:4px}.scanBlast mat-card .previewPlaceholder .imgWrap .image{background-position:center;background-repeat:no-repeat;background-size:contain}.mr-4{margin-right:4px}.ml-4{margin-left:4px}.p-16{padding:16px}.p-8{padding:8px}.py-16{padding:16px 0}.w-100-p{width:100%}.scanPreview{padding:16px}.scanPreview .image{background-position:center;background-repeat:no-repeat;background-size:contain}.empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.summary label{font-size:12px;color:#888;margin-top:2px}.summary .name{font-size:14px}.selfieContainer{display:flex;flex-direction:column;margin-bottom:20px}.selfieContainer button{box-shadow:none;border:1px solid rgba(0,0,0,.12)}.selfieContainer .selfie{margin:8px auto;width:120px;height:120px;border-radius:60px;border:1px solid rgba(0,0,0,.12)}\n", ".page-header{z-index:2000;height:64px;padding:0;background-color:#fff;border-bottom:1px solid rgba(0,0,0,.12)}.page-header .title{padding-left:24px;line-height:64px;font-size:18px}.page-header .separator{width:1px;background-color:#0000001f;height:100%}.page-header .total{line-height:64px}.page-header .total span{font-weight:700}.page-footer{height:64px}.page-footer button{margin-left:24px;box-shadow:none!important}\n"] }]
|
|
379
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.
|
|
380
|
-
type: Input
|
|
381
|
-
}], actions: [{
|
|
91
|
+
args: [{ selector: 'app-scan-selfie', changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"page-header\">\n <div class=\"title\">\n {{ \"scandoc.result.takeSelfie\" | translate }}\n </div>\n\n <span style=\"flex: 1\"></span>\n\n <ng-container *ngIf=\"cameraProvider.$showSwitchSelfie | async\">\n <div class=\"separator\"></div>\n <div style=\"padding: 0px 16px\">\n <ngx-scan-camera-switch></ngx-scan-camera-switch>\n </div>\n </ng-container>\n\n <ng-container>\n <div class=\"separator\"></div>\n\n <button mat-button (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n </ng-container>\n</header>\n\n\n<div class=\"flex-column flex\">\n <div #wraper class=\"wraper flex flex-row\">\n <div\n style=\"\n position: absolute;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n z-index: 20;\n background-color: whitesmoke;\n \"\n *ngIf=\"!cameraReady && !preview\"\n >\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <ng-container>\n <ngx-scandoc-webcam\n *ngIf=\"!preview\"\n class=\"main flex\"\n #webcam\n [trigger]=\"trigger\"\n (imageCapture)=\"handleImage($event)\"\n (initError)=\"handleInitError($event)\"\n (videoReady)=\"videoReady($event)\"\n type=\"selfie\"\n >\n </ngx-scandoc-webcam>\n </ng-container>\n <div\n class=\"previewData\"\n *ngIf=\"preview\"\n style=\"\n z-index: 20;\n position: absolute;\n width: 100%;\n height: 100%;\n flex: 1;\n display: flex;\n flex-direction: row;\n \"\n >\n <div\n class=\"scanPreview\"\n style=\"display: flex; flex-direction: column; flex: 1\"\n >\n <div\n style=\"flex: 1\"\n class=\"image\"\n [style.background-image]=\"'url(' + preview + ')'\"\n ></div>\n </div>\n </div>\n </div>\n\n <footer class=\"p-8 flex-row\">\n <button\n [disabled]=\"!cameraReady\"\n class=\"w-100-p\"\n *ngIf=\"!preview\"\n mat-raised-button\n (click)=\"scan()\"\n >\n <ng-container> {{ \"scandoc.result.takeSelfie\" | translate }} </ng-container>\n </button>\n\n <div\n class=\"w-100-p flex-row flex\"\n *ngIf=\"preview\"\n style=\"align-items: center\"\n >\n <button style=\"flex: 1\" class=\"mr-4\" mat-raised-button (click)=\"retry()\">\n {{ \"scandoc.retry\" | translate }}\n </button>\n\n <button\n style=\"flex: 1\"\n class=\"ml-4\"\n mat-raised-button\n (click)=\"continue()\"\n >\n {{ \"scandoc.continueWithSelectedImage\" | translate }}\n </button>\n </div>\n </footer>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;background-color:#f5f5f5}.flex{flex:1}.flex-column{display:flex;flex-direction:column}.flex-row{display:flex;flex-direction:row}.wraper{position:relative;overflow:hidden}h3{color:#459ae5;font-size:16px}.preview{width:100%;border-radius:1%}.subhead{height:55px;padding-top:8px}footer button{box-shadow:none!important;height:45px;min-height:45px;border:1px solid rgba(0,0,0,.12);text-transform:uppercase}.error .title{font-size:22px}.error ul{font-size:18px}.mr-4{margin-right:4px}.ml-4{margin-left:4px}.p-16{padding:16px}.p-8{padding:8px}.py-16{padding:16px 0}.w-100-p{width:100%}.scanPreview{padding:16px}.scanPreview .image{background-position:center;background-repeat:no-repeat;background-size:contain}.page-header{display:flex;flex-direction:row;align-items:center}.page-header button{height:100%}@media only screen and (max-width: 768px){header .title{font-size:12px!important;line-height:18px!important}}\n", ".page-header{z-index:2000;height:64px;padding:0;background-color:#fff;border-bottom:1px solid rgba(0,0,0,.12)}.page-header .title{padding-left:24px;line-height:64px;font-size:18px}.page-header .separator{width:1px;background-color:#0000001f;height:100%}.page-header .total{line-height:64px}.page-header .total span{font-weight:700}.page-footer{height:64px}.page-footer button{margin-left:24px;box-shadow:none!important}\n"] }]
|
|
92
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.MatDialogRef }, { type: i2.NgxScandocCameraProvider }, { type: i3.ScanProvider }, { type: i4.DialogsCoreProvider }]; }, propDecorators: { actions: [{
|
|
382
93
|
type: Output
|
|
383
|
-
}], wraper: [{
|
|
384
|
-
type: ViewChild,
|
|
385
|
-
args: ['wraper']
|
|
386
|
-
}], onResize: [{
|
|
387
|
-
type: HostListener,
|
|
388
|
-
args: ['window:resize', ['$event']]
|
|
389
94
|
}] } });
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi1zZWxmaWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjYW5kb2Mvc3JjL2RpYWxvZ3MvY29tcG9uZW50cy9zY2FuLXNlbGZpZS9zY2FuLXNlbGZpZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvZGlhbG9ncy9jb21wb25lbnRzL3NjYW4tc2VsZmllL3NjYW4tc2VsZmllLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUlaLHVCQUF1QixFQUN2QixLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFrQixNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFNBQVMsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFvQjlFLE1BQU0sT0FBTyxtQkFBbUI7SUF5RTlCLFlBQ1MsRUFBcUIsRUFDckIsWUFBMEIsRUFDekIsT0FBNEI7SUFDcEMsOENBQThDO0lBQ3RDLFNBQTJCO1FBSjVCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ3pCLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBRTVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBN0VyQyxrQkFBYSxHQUFRO1lBQ25CO2dCQUNFLEtBQUssRUFBRSwwQ0FBMEM7Z0JBQ2pELFdBQVcsRUFBRSxxREFBcUQ7Z0JBQ2xFLElBQUksRUFBRSxPQUFP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QyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNwQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNELEdBQUcsS0FBSSxDQUFDO0lBQ1IsTUFBTSxLQUFJLENBQUM7O2dIQWxhQSxtQkFBbUI7b0dBQW5CLG1CQUFtQixrUkN0Q2hDLHdwSkFzTEE7MkZEaEphLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTtvTUFnQnRDLElBQUk7c0JBQVosS0FBSztnQkFDSSxPQUFPO3NCQUFoQixNQUFNO2dCQXVDYyxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBR25CLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgRWxlbWVudFJlZixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIGZvcmtKb2luLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgc3dpdGNoTWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXZWJjYW1VdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb21wb25lbnRzL3dlYmNhbS91dGlsL3dlYmNhbS51dGlsJztcbmltcG9ydCB7IFdlYmNhbUltYWdlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb21wb25lbnRzL3dlYmNhbS9kb21haW4vd2ViY2FtLWltYWdlJztcbmltcG9ydCB7IFdlYmNhbUluaXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29tcG9uZW50cy93ZWJjYW0vZG9tYWluL3dlYmNhbS1pbml0LWVycm9yJztcblxuaW1wb3J0IHsgRGlhbG9nc0NvcmVQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL2RpYWxvZ3MvZGlhbG9ncy5jb3JlLnByb3ZpZGVyJztcbi8vaW1wb3J0IHsgU2NhbkZpZWxkc1Byb3ZpZGVyIH0gZnJvbSAnYXBwL3Byb3ZpZGVycy9zY2FuLmZvcm0nO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU2NhblByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL3NjYW4ucHJvdmlkZXInO1xuLy8gaW1wb3J0IHsgU2VydmVyUHJvdmlkZXIgfSBmcm9tICcvZGF0YS9wcm92aWRlcnMvc2VydmVyLnByb3ZpZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBJV2luZG93IGV4dGVuZHMgV2luZG93IHtcbiAgVGV4dERldGVjdG9yOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zY2FuLXNlbGZpZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2FuLXNlbGZpZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NjYW4tc2VsZmllLmNvbXBvbmVudC5zY3NzJywgJy4uLy4uL3Njc3MvZGlhbG9nLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjYW5TZWxmaWVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgc2NhbkJsYXN0RGF0YTogYW55ID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAncG1zLmRpYWxvZ3MuY29tcG9uZW50cy5zY2FuUHJvZmlsZS5mcm9udCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ3Btcy5kaWFsb2dzLmNvbXBvbmVudHMuc2NhblByb2ZpbGUuZnJvbnREZXNjcmlwdGlvbicsXG4gICAgICBzaWRlOiAnRlJPTlQnLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdwbXMuZGlhbG9ncy5jb21wb25lbnRzLnNjYW5Qcm9maWxlLmJhY2snLFxuICAgICAgZGVzY3JpcHRpb246ICdwbXMuZGlhbG9ncy5jb21wb25lbnRzLnNjYW5Qcm9maWxlLmJhY2tEZXNjcmlwdGlvbicsXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgIHNpZGU6ICdCQUNLJyxcbiAgICB9LFxuICBdO1xuICBASW5wdXQoKSB0eXBlID0gJ2Rlc2t0b3AnO1xuICBAT3V0cHV0KCkgYWN0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgbWVkaWFEZXZpY2VzOiBhbnkgPSBbXTtcbiAgcHVibGljIGRldmljZUlkPzogc3RyaW5nO1xuICBwdWJsaWMgdmlkZW9PcHRpb25zOiBNZWRpYVRyYWNrQ29uc3RyYWludHMgPSB7XG4gICAgd2lkdGg6IDE5MjAsXG4gICAgaGVpZ2h0OiAxMDgwLFxuICAgIGZhY2luZ01vZGU6ICdlbnZpcm9ubWVudCcsXG4gIH07XG4gIGRpYWxvZ1JlZj86IE1hdERpYWxvZ1JlZjxhbnk+O1xuICBkYXRhOiBhbnk7XG4gIG11bHRpcGxlV2ViY2Ftc0F2YWlsYWJsZSA9IGZhbHNlO1xuICBmaWVsZHM6IGFueTtcbiAgLy8gd2ViY2FtIHNuYXBzaG90IHRyaWdnZXJcbiAgZG9jdW1lbnRUeXBlU2VsZWN0ZWQgPSBmYWxzZTtcblxuICBzZWxlY3RlZFNpZGU6IGFueTtcbiAgaW1hZ2VzOiBhbnk7XG4gIHByZXZpZXc6IGFueSA9IG51bGw7XG4gIHNjYW5UeXBlOiBhbnk7XG4gIHdpZHRoOiBhbnk7XG4gIGhlaWdodDogYW55O1xuICB2aWRlb1dpZHRoOiBhbnk7XG4gIHZpZGVvSGVpZ2h0OiBhbnk7XG4gIGFsbG93Q2FtZXJhU3dpdGNoID0gdHJ1ZTtcbiAgZXJyb3IgPSBmYWxzZTtcbiAgY2FtZXJhUmVhZHkgPSBmYWxzZTtcbiAgcmVzdWx0OiBhbnk7XG4gIHNjYW5pbmcgPSBmYWxzZTtcbiAgZGVmYXVsdERldmljZTogYW55O1xuICBzY2FuRGF0YXM6IGFueSA9IFtdO1xuICBzY2FuU2lkZTogYW55O1xuICB3ZWJjYW1JbWFnZT86IFdlYmNhbUltYWdlO1xuICBtb2RlbDogYW55O1xuICBwdWJsaWMgdHJpZ2dlcjogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuICAvLyBzd2l0Y2ggdG8gbmV4dCAvIHByZXZpb3VzIC8gc3BlY2lmaWMgd2ViY2FtOyB0cnVlL2ZhbHNlOiBmb3J3YXJkL2JhY2t3YXJkcywgc3RyaW5nOiBkZXZpY2VJZFxuICBwdWJsaWMgbmV4dFdlYmNhbTogU3ViamVjdDxib29sZWFuIHwgc3RyaW5nPiA9IG5ldyBTdWJqZWN0PFxuICAgIGJvb2xlYW4gfCBzdHJpbmdcbiAgPigpO1xuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIEBWaWV3Q2hpbGQoJ3dyYXBlcicpIHdyYXBlcj86IEVsZW1lbnRSZWY7XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKCkge1xuICAgIGlmICh0aGlzLndyYXBlcikge1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMud3JhcGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMud3JhcGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc29sZS5sb2codGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZGVvID0gdGhpcy53cmFwZXI/Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW8nKTtcbiAgICAgICAgaWYgKHZpZGVvKSB7XG4gICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh2aWRlby5jbGllbnRXaWR0aCwgdmlkZW8uY2xpZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnZpZGVvV2lkdGggPSB2aWRlby5jbGllbnRXaWR0aDtcbiAgICAgICAgICB0aGlzLnZpZGVvSGVpZ2h0ID0gdmlkZW8uY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHNjYW5Qcm92aWRlcjogU2NhblByb3ZpZGVyLFxuICAgIHByaXZhdGUgZGlhbG9nczogRGlhbG9nc0NvcmVQcm92aWRlcixcbiAgICAvLyAgIHByaXZhdGUgZm9ybVByb3ZpZGVyOiBTY2FuRmllbGRzUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuICBpbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCdIQVMgTVVMVEknKTtcbiAgICAvLyB0aGlzLnJlc3VsdD10cnVlO1xuICAgIC8vIHRoaXMucmVzdWx0ID17fTtcblxuICAgIHRoaXMuZmllbGRzID0gW107IC8vdGhpcy5mb3JtUHJvdmlkZXIuZG9jdW1lbnQoKTtcblxuICAgIFdlYmNhbVV0aWwuZ2V0QXZhaWxhYmxlVmlkZW9JbnB1dHMoKS5zdWJzY3JpYmUoXG4gICAgICAobWVkaWFEZXZpY2VzOiBNZWRpYURldmljZUluZm9bXSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnW0RFVklDRVNdJywgbWVkaWFEZXZpY2VzKTtcbiAgICAgICAgdGhpcy5tZWRpYURldmljZXMgPSBtZWRpYURldmljZXM7XG4gICAgICAgIHRoaXMubXVsdGlwbGVXZWJjYW1zQXZhaWxhYmxlID0gbWVkaWFEZXZpY2VzICYmIG1lZGlhRGV2aWNlcy5sZW5ndGggPiAxO1xuXG4gICAgICAgIHRoaXMuc2luZ2xlU2Nhbih0aGlzLnNjYW5CbGFzdERhdGFbMF0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGhhbmRsZUltYWdlKHdlYmNhbUltYWdlOiBXZWJjYW1JbWFnZSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdbcmVjZWl2ZWQgd2ViY2FtIGltYWdlXScsIHdlYmNhbUltYWdlKTtcblxuICAgIHRoaXMud2ViY2FtSW1hZ2UgPSB3ZWJjYW1JbWFnZTtcbiAgICB0aGlzLnByZXZpZXcgPSB3ZWJjYW1JbWFnZS5pbWFnZUFzRGF0YVVybDtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBwdWJsaWMgaGFuZGxlSW5pdEVycm9yKGVycm9yOiBXZWJjYW1Jbml0RXJyb3IpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gIH1cblxuICBnZXQgc2NhbkJsYXN0Q2FuVXBsb2FkKCkge1xuICAgIHJldHVybiB0aGlzLnNjYW5CbGFzdERhdGFbMF0uaW1hZ2UgPyB0cnVlIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIGNhbWVyYVdhc1N3aXRjaGVkKGRldmljZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnYWN0aXZlIGRldmljZTogJyArIGRldmljZUlkKTtcbiAgICB0aGlzLmRldmljZUlkID0gZGV2aWNlSWQ7XG4gICAgdGhpcy5jYW1lcmFSZWFkeSA9IHRydWU7XG4gICAgdGhpcy5kZWZhdWx0RGV2aWNlID0gZGV2aWNlSWQ7XG4gICAgdGhpcy5vblJlc2l6ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBuZXh0V2ViY2FtT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5uZXh0V2ViY2FtLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNlbGVjdENhbWVyYShldmVudDogYW55KSB7XG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgIHRoaXMubmV4dFdlYmNhbS5uZXh0KGV2ZW50LnZhbHVlKTtcbiAgfVxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZj8uY2xvc2UoKTtcbiAgfVxuICBzaW5nbGVTY2FuKHNpZGU6IGFueSkge1xuICAgIHRoaXMuc2NhblR5cGUgPSBzaWRlLnNpZGU7XG4gICAgdGhpcy5wcmV2aWV3ID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkU2lkZSA9IHNpZGU7XG5cbiAgICB0aGlzLnNlbGVjdGVkU2lkZS5pbWFnZSA9IG51bGw7XG4gICAgdGhpcy5kb2N1bWVudFR5cGVTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5zY2FuQmxhc3REYXRhWzFdLmRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9uUmVzaXplKCk7XG4gICAgfSwgMTApO1xuICB9XG4gIGdldEJhc2U2NChmaWxlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVGaWxlSW5wdXQodGFyZ2V0OiBhbnksIGV2ZW50OiBhbnksIHNpZGU6IGFueSkge1xuICAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IHRhcmdldC5maWxlcztcbiAgICB0aGlzLnNlbGVjdGVkU2lkZSA9IHNpZGU7XG4gICAgY29uc29sZS5sb2coZmlsZXMpO1xuICAgIGNvbnN0IGZpbGUgPSBmaWxlcy5pdGVtKDApO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uTGltaXQoZmlsZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbGlkOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gdmFsaWQgPyB0aGlzLmdldEJhc2U2NChmaWxlKSA6IG9mKGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGltYWdlQXNEYXRhVXJsKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGltYWdlQXNEYXRhVXJsKTtcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbWFnZUFzRGF0YVVybCkge1xuICAgICAgICAgIHRoaXMuZGlhbG9ncy5hbGVydChcbiAgICAgICAgICAgICdjb3JlLnBhZ2UuZXJyb3InLFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICAgJ3Btcy5kaWFsb2dzLmNvbXBvbmVudHMuc2NhblByb2ZpbGUubWluUmVzb2x1dGlvbidcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNpZGUuaW1hZ2UgPSB7XG4gICAgICAgICAgICBpbWFnZUFzRGF0YVVybCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2lkZS5zaWRlID09PSAnRlJPTlQnKSB7XG4gICAgICAgICAgICB0aGlzLnNjYW5CbGFzdERhdGFbMV0uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgfVxuICByb3RhdGVCYXNlNjRJbWFnZShiYXNlNjRkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWFnZS5zcmMgPSBiYXNlNjRkYXRhO1xuICAgICAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhjYW52YXMpO1xuICAgICAgICBjYW52YXMud2lkdGggPSBpbWFnZS5oZWlnaHQ7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWFnZS53aWR0aDtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgIGN0eC5yb3RhdGUoKDkwICogTWF0aC5QSSkgLyAxODApO1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgLWNhbnZhcy53aWR0aCk7XG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCk7XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChjYW52YXMudG9EYXRhVVJMKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKHsgdHlwZTogJ2dlbmVyaWMgZXJyb3InIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaW1hZ2Uub25lcnJvciA9IChlKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRNb2JpbGUoKSB7XG4gICAvLyB0aGlzLmRpYWxvZ3Muc2Nhbk1vYmlsZSh7IGlkOiAxIH0pO1xuICB9XG4gIHNpbmdsZVNjYW5Sb3RhdGUoc2lkZTogYW55KSB7XG4gICAgY29uc29sZS5sb2coc2lkZSk7XG4gICAgdGhpcy5yb3RhdGVCYXNlNjRJbWFnZShzaWRlLmltYWdlLmltYWdlQXNEYXRhVXJsKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHNpZGUuaW1hZ2UgPSB7IGltYWdlQXNEYXRhVXJsOiBkYXRhIH07XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNpbmdsZVNjYW5SZW1vdmUoc2lkZTogYW55KSB7XG4gICAgc2lkZS5pbWFnZSA9IG51bGw7XG4gICAgaWYgKHNpZGUuc2lkZSA9PT0gJ0ZST05UJykge1xuICAgICAgdGhpcy5zY2FuQmxhc3REYXRhWzFdLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJlc29sdXRpb25MaW1pdChmaWxlOiBhbnkpIHtcbiAgICBjb25zdCBtaW5XaWR0aCA9IDEyODA7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gNzIwO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgaW1nLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBpbWcubmF0dXJhbFdpZHRoO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBpbWcubmF0dXJhbEhlaWdodDtcblxuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHdpZHRoID4gaGVpZ2h0KSB7XG4gICAgICAgICAgdmFsaWQgPSB3aWR0aCA+PSBtaW5XaWR0aCAmJiBoZWlnaHQgPj0gbWluSGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkID0gd2lkdGggPj0gbWluSGVpZ2h0ICYmIGhlaWdodCA+PSBtaW5XaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm5leHQodmFsaWQpO1xuICAgICAgfTtcbiAgICAgIGltZy5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbWdCYXNlNjQobnVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zY2FuQmxhc3REYXRhW251bV0uaW1hZ2UuZGF0YVVybC5zcGxpdCgnLCcpWzFdO1xuICB9XG4gIHNjYW5CbGFzdEZpbmlzaCgpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSAnbW9iaWxlJykge1xuICAgICAgdGhpcy5hY3Rpb25zLmVtaXQoeyBkYXRhOiB0aGlzLnNjYW5CbGFzdERhdGEgfSk7XG4gICAgICB0aGlzLnJldGFrZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLmRpYWxvZ3MubG9hZGluZygpO1xuICAgIHRoaXMuc2NhbmluZyA9IHRydWU7XG5cbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBBY2NlcHRUZXJtc0FuZENvbmRpdGlvbnM6IHRydWUsXG4gICAgICBEYXRhRmllbGRzOiB7XG4gICAgICAgIEZyb250SW1hZ2VUeXBlOiAnYmFzZTY0JyxcbiAgICAgICAgRnJvbnRJbWFnZUNyb3BwZWQ6IGZhbHNlLFxuICAgICAgICBCYWNrSW1hZ2VUeXBlOiAnYmFzZTY0JyxcbiAgICAgICAgQmFja0ltYWdlQ3JvcHBlZDogZmFsc2UsXG4gICAgICAgIEZyb250SW1hZ2U6IHRoaXMuZ2V0SW1nQmFzZTY0KDApLFxuICAgICAgICBCYWNrSW1hZ2U6IHRoaXMuc2NhbkJsYXN0RGF0YVsxXS5pbWFnZSA/IHRoaXMuZ2V0SW1nQmFzZTY0KDEpIDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBTZXR0aW5nczoge1xuICAgICAgICBTaG91bGRWYWxpZGF0ZTogdHJ1ZSxcbiAgICAgICAgU2hvdWxkUmV0dXJuRG9jdW1lbnRJbWFnZTogdHJ1ZSxcbiAgICAgICAgU2hvdWxkUmV0dXJuRmFjZUlmRGV0ZWN0ZWQ6IHRydWUsXG4gICAgICAgIFNraXBJbWFnZVNpemVDaGVjazogdHJ1ZSxcbiAgICAgICAgQ2FuU3RvcmVJbWFnZXM6IHRoaXMuc2NhblByb3ZpZGVyLmNhblN0b3JlSW1hZ2VzLFxuICAgICAgfSxcbiAgICAgIC8vIENhbGxCYWNrVXJsOiAnaHR0cDovL2RlbW86NTAwMC9yZXBvcnQvZXh0cmFjdGVkLycsXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuc2NhbkJsYXN0RGF0YVsxXS5pbWFnZSkge1xuICAgICAgcGF5bG9hZC5TZXR0aW5ncy5JZ25vcmVCYWNrSW1hZ2UgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuc2NhblByb3ZpZGVyLmJsYXN0UG9zdChwYXlsb2FkKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBkYXRhLkRhdGE7XG4gICAgICAgIGxvYWRpbmcuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFR5cGVTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NhbmluZyA9IGZhbHNlO1xuICAgICAgICBpZiAocmVzdWx0cyAmJiBkYXRhLk1ldGFkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoZGF0YS5JbWFnZURhdGE/LkRvY3VtZW50cykge1xuICAgICAgICAgICAgY29uc3QgeyBEb2N1bWVudHMgfSA9IGRhdGEuSW1hZ2VEYXRhO1xuICAgICAgICAgICAgdGhpcy5pbWFnZXMgPSBEb2N1bWVudHMubWFwKChpbWFnZTogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJyArIERvY3VtZW50c1tpXSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLnNjYW5Qcm92aWRlci5wYXJzZUJsYXN0KHJlc3VsdHMpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdSRVMnLCB0aGlzLnJlc3VsdCk7XG5cbiAgICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5yZXN1bHQubW9kZWw7XG4gICAgICAgICAgaWYgKGRhdGEuSW1hZ2VEYXRhPy5GYWNlSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuX2F2YXRhciA9XG4gICAgICAgICAgICAgICdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcgKyBkYXRhLkltYWdlRGF0YT8uRmFjZUltYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZygnTU9ERUwnLCB0aGlzLm1vZGVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1InKTtcbiAgICAgICAgICAvLyB0aGlzLnNjYW5TaWRlID0gMDtcbiAgICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByZXZpZXcgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gdGhpcy5kb2N1bWVudFR5cGVTZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgLy8gdGhpcy5yZXRyeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBsb2FkaW5nLmNsb3NlKCk7XG4gICAgICAgIC8vIHRoaXMuc2NhblNpZGUgPSAwO1xuICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFR5cGVTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NhbmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgY2FtZXJhT2ZmKGV2OiBhbnkpIHtcbiAgICB0aGlzLmNhbWVyYVJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgY29udGludWUoKSB7XG4gICAgaWYgKHRoaXMuc2NhblByb3ZpZGVyLmVuYWJsZVZlcmlmaWNhdGlvbikge1xuICAgICAgY29uc3QgbG9hZGluZyA9IHRoaXMuZGlhbG9ncy5sb2FkaW5nKCk7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEuYXZhdGFyKTtcblxuICAgICAgdGhpcy5zY2FuUHJvdmlkZXJcbiAgICAgICAgLnN0YXRlbGVzcyhcbiAgICAgICAgICB0aGlzLmRhdGEuYXZhdGFyLnNwbGl0KCcsJylbMV0sXG4gICAgICAgICAgdGhpcy53ZWJjYW1JbWFnZT8uaW1hZ2VBc0RhdGFVcmwuc3BsaXQoJywnKVsxXVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlc3A6IGFueSkgPT4ge1xuICAgICAgICAgICAgbG9hZGluZy5jbG9zZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3AuRGF0YT8uVmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWY/LmNsb3NlKHRoaXMud2ViY2FtSW1hZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dzLmFsZXJ0KFxuICAgICAgICAgICAgICAgICdWZXJpZmljYXRpb24gZmFpbGVkIScsXG4gICAgICAgICAgICAgICAgXCJXZSBjYW4ndCB2ZXJpZnkgdGhhdCB5b3VyIHNlbGZpZSBpcyBzYW1lIGFzIGltYWdlIG9uIGRvY3VtZW50LlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmPy5jbG9zZSh0aGlzLndlYmNhbUltYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmPy5jbG9zZSh0aGlzLndlYmNhbUltYWdlKTtcbiAgICB9XG4gICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy53ZWJjYW1JbWFnZSlcbiAgfVxuICByZXRyeSgpIHtcbiAgICB0aGlzLnByZXZpZXcgPSBmYWxzZTtcblxuICAgIHRoaXMucmVzdWx0ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRUeXBlU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2NhbkJsYXN0RGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgZWxlbWVudC5pbWFnZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyB0cmlnZ2VyU25hcHNob3QoKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyLm5leHQoMCk7XG4gIH1cbiAgc2NhbigpIHtcbiAgICBjb25zb2xlLmxvZygnU0NBTicpO1xuICAgIHRoaXMudHJpZ2dlclNuYXBzaG90KCk7XG4gICAgdGhpcy5zY2FuRGF0YXNbMF0gPSB0cnVlO1xuICB9XG4gIHB1YmxpYyByZXRha2UoKSB7XG4gICAgdGhpcy5wcmV2aWV3ID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMucmVzdWx0ID0gZmFsc2U7XG4gICAgdGhpcy5zY2FuU2lkZSA9IDA7XG5cbiAgICB0aGlzLnNjYW5EYXRhcyA9IFtdO1xuICAgIHRoaXMuc2NhbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuaW1hZ2VzID0gW107XG5cbiAgICB0aGlzLmRvY3VtZW50VHlwZVNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zY2FuQmxhc3REYXRhLmZvckVhY2goKG06IGFueSkgPT4ge1xuICAgICAgbS5pbWFnZSA9IG51bGw7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICB1c2UoKSB7fVxuICBzZWxmaWUoKSB7fVxufVxuIiwiPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlNlbGZpZTwvZGl2PlxuXG4gIDxzcGFuIGNsYXNzPVwiZmxleFwiPjwvc3Bhbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBkb2N1bWVudFR5cGVTZWxlY3RlZCAmJlxuICAgICAgIXJlc3VsdCAmJlxuICAgICAgIWVycm9yICYmXG4gICAgICBtdWx0aXBsZVdlYmNhbXNBdmFpbGFibGUgJiZcbiAgICAgICFwcmV2aWV3XG4gICAgXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIj48L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMHB4IDE2cHhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtblwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgd2lkdGg6IDIwMHB4OyBtYXJnaW4tdG9wOiA4cHhcIlxuICAgICAgICAgIGNsYXNzPVwidy0yMDAgbXItMTYgbXQtOFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWxhYmVsPiBDYW1lcmEgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0Q2FtZXJhKCRldmVudClcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkZXZpY2VJZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRldmljZSBvZiBtZWRpYURldmljZXNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZGV2aWNlLmRldmljZUlkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZGV2aWNlLmxhYmVsIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxuXG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ2Rlc2t0b3AnXCI+XG4gICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwic2VuZE1vYmlsZSgpXCI+XG4gICAgICA8bWF0LWljb24+dGFibGV0X21hYzwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XG5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbmctY29udGFpbmVyPiAtLT5cbjwvaGVhZGVyPlxuXG48ZGl2ICpuZ0lmPVwiIXJlc3VsdFwiIGNsYXNzPVwiZmxleC1jb2x1bW4gZmxleFwiPlxuICA8ZGl2ICN3cmFwZXIgY2xhc3M9XCJ3cmFwZXIgZmxleCBmbGV4LXJvd1wiPlxuICAgIDxkaXZcbiAgICAgIHN0eWxlPVwiXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwcHg7XG4gICAgICAgIGxlZnQ6IDBweDtcbiAgICAgICAgcmlnaHQ6IDBweDtcbiAgICAgICAgYm90dG9tOiAwcHg7XG4gICAgICAgIHotaW5kZXg6IDIwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZXNtb2tlO1xuICAgICAgXCJcbiAgICAgICpuZ0lmPVwiIWNhbWVyYVJlYWR5ICYmICFwcmV2aWV3XCJcbiAgICA+XG4gICAgICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZXJyb3JcIj5cbiAgICAgIDwhLS0gPGRpdlxuICAgICAgY2xhc3M9XCJyZWN0YW5nbGVcIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAnd2lkdGgucHgnOiB2aWRlb0hlaWdodCAqIDAuNzUgKiAxLjU4OCxcbiAgICAgICAgJ2hlaWdodC5weCc6IHZpZGVvSGVpZ2h0ICogMC43NVxuICAgICAgfVwiXG4gICAgPjwvZGl2PlxuICAgIDxzdmdcbiAgICAgICpuZ0lmPVwidmlkZW9XaWR0aFwiXG4gICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMHB4OyB0b3A6IDBweFwiXG4gICAgICB3aWR0aD1cIjBcIlxuICAgICAgaGVpZ2h0PVwiMFwiXG4gICAgPlxuICAgICAgPGRlZnM+XG4gICAgICAgIDxjbGlwUGF0aCBpZD1cIm15Q2xpcFwiPlxuICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI2XCJcbiAgICAgICAgICAgIHN0cm9rZS1jb2xvcj1cInJlZFwiXG4gICAgICAgICAgICBbYXR0ci54XT1cIih2aWRlb1dpZHRoIC0gdmlkZW9IZWlnaHQgKiAwLjc1ICogMS41ODgpIC8gMlwiXG4gICAgICAgICAgICBbYXR0ci55XT1cIih2aWRlb0hlaWdodCAqIDAuMjUpIC8gMlwiXG4gICAgICAgICAgICBbYXR0ci53aWR0aF09XCJ2aWRlb0hlaWdodCAqIDAuNzUgKiAxLjU4OFwiXG4gICAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwidmlkZW9IZWlnaHQgKiAwLjc1XCJcbiAgICAgICAgICAgIHJ4PVwiMjVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICA8L2RlZnM+XG4gICAgPC9zdmc+IC0tPlxuXG4gICAgICA8bmd4LXNjYW5kb2Mtd2ViY2FtXG4gICAgICAgICpuZ0lmPVwiIXByZXZpZXcgJiYgIXNjYW5pbmdcIlxuICAgICAgICBjbGFzcz1cIm1haW4gZmxleFwiXG4gICAgICAgIFtpbWFnZVF1YWxpdHldPVwiMVwiXG4gICAgICAgICN3ZWJjYW1cbiAgICAgICAgW3RyaWdnZXJdPVwidHJpZ2dlclwiXG4gICAgICAgIChpbWFnZUNhcHR1cmUpPVwiaGFuZGxlSW1hZ2UoJGV2ZW50KVwiXG4gICAgICAgIFthbGxvd0NhbWVyYVN3aXRjaF09XCJhbGxvd0NhbWVyYVN3aXRjaFwiXG4gICAgICAgIFt2aWRlb09wdGlvbnNdPVwidmlkZW9PcHRpb25zXCJcbiAgICAgICAgW3N3aXRjaENhbWVyYV09XCJuZXh0V2ViY2FtT2JzZXJ2YWJsZVwiXG4gICAgICAgIChjYW1lcmFTd2l0Y2hlZCk9XCJjYW1lcmFXYXNTd2l0Y2hlZCgkZXZlbnQpXCJcbiAgICAgICAgKGluaXRFcnJvcik9XCJoYW5kbGVJbml0RXJyb3IoJGV2ZW50KVwiXG4gICAgICAgIHR5cGU9XCJzZWxmaWVcIlxuICAgICAgICBbd2lkdGhdPVwid2lkdGhcIlxuICAgICAgICBbaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICAgIChkZXN0cm95ZWQpPVwiY2FtZXJhT2ZmKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPC9uZ3gtc2NhbmRvYy13ZWJjYW0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwcmV2aWV3RGF0YVwiXG4gICAgICAqbmdJZj1cInByZXZpZXdcIlxuICAgICAgc3R5bGU9XCJcbiAgICAgICAgei1pbmRleDogMjA7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNjYW5QcmV2aWV3XCJcbiAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBmbGV4OiAxXCJcbiAgICAgICAgKm5nSWY9XCIhZXJyb3IgJiYgIXNjYW5pbmdcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9XCJmbGV4OiAxXCJcbiAgICAgICAgICBjbGFzcz1cImltYWdlXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCIndXJsKCcgKyBwcmV2aWV3ICsgJyknXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxmb290ZXIgY2xhc3M9XCJwLTggZmxleC1yb3dcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwiIWNhbWVyYVJlYWR5XCJcbiAgICAgIGNsYXNzPVwidy0xMDAtcFwiXG4gICAgICAqbmdJZj1cIiFwcmV2aWV3XCJcbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAoY2xpY2spPVwic2NhbigpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyPiBUQUtFIFNFTEZJRSA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidy0xMDAtcCBmbGV4LXJvdyBmbGV4XCJcbiAgICAgICpuZ0lmPVwicHJldmlld1wiXG4gICAgICBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXJcIlxuICAgID5cbiAgICAgIDxidXR0b24gc3R5bGU9XCJmbGV4OiAxXCIgY2xhc3M9XCJtci00XCIgbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cInJldHJ5KClcIj5cbiAgICAgICAgUkVUUllcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtkaXNhYmxlZF09XCJlcnJvclwiXG4gICAgICAgIHN0eWxlPVwiZmxleDogMVwiXG4gICAgICAgIGNsYXNzPVwibWwtNFwiXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjb250aW51ZSgpXCJcbiAgICAgID5cbiAgICAgICAgQ09OVElOVUVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvb3Rlcj5cbjwvZGl2PlxuIl19
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi1zZWxmaWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjYW5kb2Mvc3JjL2RpYWxvZ3MvY29tcG9uZW50cy9zY2FuLXNlbGZpZS9zY2FuLXNlbGZpZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvZGlhbG9ncy9jb21wb25lbnRzL3NjYW4tc2VsZmllL3NjYW4tc2VsZmllLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFHTix1QkFBdUIsR0FHeEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3hFLE1BQU0sT0FBTyxtQkFDWCxTQUFRLGFBQWE7SUFhckIsWUFDUyxFQUFxQixFQUVyQixTQUE0QyxFQUU1QyxjQUF3QyxFQUN4QyxZQUEwQixFQUN6QixPQUE0QjtRQUVwQyxLQUFLLEVBQUUsQ0FBQztRQVJELE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRXJCLGNBQVMsR0FBVCxTQUFTLENBQW1DO1FBRTVDLG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtRQUN4QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQWpCNUIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdkMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsWUFBTyxHQUFRLElBQUksQ0FBQztRQUViLFlBQU8sR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUd4RCxT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QUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDekM7UUFDRCx5Q0FBeUM7SUFDM0MsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOztnSEE3RlUsbUJBQW1CO29HQUFuQixtQkFBbUIsK0dDMUJoQyw0c0ZBK0dBOzJGRHJGYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07dU9BTXJDLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBXZWJjYW1JbWFnZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29tcG9uZW50cy93ZWJjYW0vZG9tYWluL3dlYmNhbS1pbWFnZSc7XG5pbXBvcnQgeyBXZWJjYW1Jbml0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbXBvbmVudHMvd2ViY2FtL2RvbWFpbi93ZWJjYW0taW5pdC1lcnJvcic7XG5pbXBvcnQgeyBOZ3hTY2FuZG9jQ2FtZXJhUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvY2FtZXJhLnByb3ZpZGVyJztcbmltcG9ydCB7IERpYWxvZ3NDb3JlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9kaWFsb2dzL2RpYWxvZ3MuY29yZS5wcm92aWRlcic7XG5cbmltcG9ydCB7IFNjYW5Qcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9zY2FuLnByb3ZpZGVyJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbXBvbmVudHMvYmFzZS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXNjYW4tc2VsZmllJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjYW4tc2VsZmllLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2Nhbi1zZWxmaWUuY29tcG9uZW50LnNjc3MnLCAnLi4vLi4vc2Nzcy9kaWFsb2cuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NhblNlbGZpZUNvbXBvbmVudFxuICBleHRlbmRzIEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQE91dHB1dCgpIGFjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGRhdGE6IGFueTtcbiAgY2FtZXJhUmVhZHkgPSBmYWxzZTtcbiAgcHJldmlldzogYW55ID0gbnVsbDtcblxuICBwdWJsaWMgdHJpZ2dlcjogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG5cbiAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICB3ZWJjYW1JbWFnZTogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNjYW5TZWxmaWVDb21wb25lbnQ+LFxuXG4gICAgcHVibGljIGNhbWVyYVByb3ZpZGVyOiBOZ3hTY2FuZG9jQ2FtZXJhUHJvdmlkZXIsXG4gICAgcHVibGljIHNjYW5Qcm92aWRlcjogU2NhblByb3ZpZGVyLFxuICAgIHByaXZhdGUgZGlhbG9nczogRGlhbG9nc0NvcmVQcm92aWRlclxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUltYWdlKHdlYmNhbUltYWdlOiBXZWJjYW1JbWFnZSk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUubG9nKCdbcmVjZWl2ZWQgd2ViY2FtIGltYWdlXScsIHdlYmNhbUltYWdlKTtcbiAgICB0aGlzLmNhbWVyYVByb3ZpZGVyLiRzaG93U3dpdGNoU2VsZmllLm5leHQoZmFsc2UpO1xuXG4gICAgdGhpcy53ZWJjYW1JbWFnZSA9IHdlYmNhbUltYWdlO1xuICAgIHRoaXMucHJldmlldyA9IHdlYmNhbUltYWdlLmltYWdlQXNEYXRhVXJsO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIHB1YmxpYyBoYW5kbGVJbml0RXJyb3IoZXJyb3I6IFdlYmNhbUluaXRFcnJvcik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgfVxuICB2aWRlb1JlYWR5KGV2OiBhbnkpIHtcbiAgICB0aGlzLmNhbWVyYVJlYWR5ID0gZXY7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FtZXJhUHJvdmlkZXIuJHNob3dTd2l0Y2hTZWxmaWUubmV4dCh0cnVlKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9fZGVzdHJveSgpO1xuICB9XG4gIHJldHJ5KCkge1xuICAgIHRoaXMucHJldmlldyA9IGZhbHNlO1xuICAgIHRoaXMuY2FtZXJhUHJvdmlkZXIuJHNob3dTd2l0Y2hTZWxmaWUubmV4dCh0cnVlKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIHNjYW4oKSB7XG4gICAgdGhpcy50cmlnZ2VyLm5leHQobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgY29udGludWUoKSB7XG4gICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcbiAgICBpZiAodGhpcy5zY2FuUHJvdmlkZXIuZW5hYmxlVmVyaWZpY2F0aW9uICYmIHRoaXMuZGF0YS5hdmF0YXIpIHtcbiAgICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLmRpYWxvZ3MubG9hZGluZygpO1xuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhLmF2YXRhcik7XG5cbiAgICAgIHRoaXMuX19zdWJzKFxuICAgICAgICB0aGlzLnNjYW5Qcm92aWRlci5zdGF0ZWxlc3MoXG4gICAgICAgICAgdGhpcy5kYXRhLmF2YXRhci5zcGxpdCgnLCcpWzFdLFxuICAgICAgICAgIHRoaXMud2ViY2FtSW1hZ2U/LmltYWdlQXNEYXRhVXJsLnNwbGl0KCcsJylbMV1cbiAgICAgICAgKVxuICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwOiBhbnkpID0+IHtcbiAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7XG4gICAgICAgICAgaWYgKHJlc3AuRGF0YT8uVmVyaWZpZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmPy5jbG9zZSh0aGlzLndlYmNhbUltYWdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dzLmFsZXJ0KFxuICAgICAgICAgICAgICAnVmVyaWZpY2F0aW9uIGZhaWxlZCEnLFxuICAgICAgICAgICAgICBcIldlIGNhbid0IHZlcmlmeSB0aGF0IHlvdXIgc2VsZmllIGlzIHNhbWUgYXMgaW1hZ2Ugb24gZG9jdW1lbnQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3ApO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgbG9hZGluZy5jbG9zZSgpO1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmPy5jbG9zZSh0aGlzLndlYmNhbUltYWdlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaWFsb2dSZWY/LmNsb3NlKHRoaXMud2ViY2FtSW1hZ2UpO1xuICAgIH1cbiAgICAvLyB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLndlYmNhbUltYWdlKVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCk7XG4gIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICB7eyBcInNjYW5kb2MucmVzdWx0LnRha2VTZWxmaWVcIiB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cblxuICA8c3BhbiBzdHlsZT1cImZsZXg6IDFcIj48L3NwYW4+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbWVyYVByb3ZpZGVyLiRzaG93U3dpdGNoU2VsZmllIHwgYXN5bmNcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDBweCAxNnB4XCI+XG4gICAgICA8bmd4LXNjYW4tY2FtZXJhLXN3aXRjaD48L25neC1zY2FuLWNhbWVyYS1zd2l0Y2g+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxuXG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvaGVhZGVyPlxuXG5cbjxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtbiBmbGV4XCI+XG4gIDxkaXYgI3dyYXBlciBjbGFzcz1cIndyYXBlciBmbGV4IGZsZXgtcm93XCI+XG4gICAgPGRpdlxuICAgICAgc3R5bGU9XCJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDBweDtcbiAgICAgICAgbGVmdDogMHB4O1xuICAgICAgICByaWdodDogMHB4O1xuICAgICAgICBib3R0b206IDBweDtcbiAgICAgICAgei1pbmRleDogMjA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlc21va2U7XG4gICAgICBcIlxuICAgICAgKm5nSWY9XCIhY2FtZXJhUmVhZHkgJiYgIXByZXZpZXdcIlxuICAgID5cbiAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxuZ3gtc2NhbmRvYy13ZWJjYW1cbiAgICAgICAgKm5nSWY9XCIhcHJldmlld1wiXG4gICAgICAgIGNsYXNzPVwibWFpbiBmbGV4XCJcbiAgICAgICAgI3dlYmNhbVxuICAgICAgICBbdHJpZ2dlcl09XCJ0cmlnZ2VyXCJcbiAgICAgICAgKGltYWdlQ2FwdHVyZSk9XCJoYW5kbGVJbWFnZSgkZXZlbnQpXCJcbiAgICAgICAgKGluaXRFcnJvcik9XCJoYW5kbGVJbml0RXJyb3IoJGV2ZW50KVwiXG4gICAgICAgICh2aWRlb1JlYWR5KT1cInZpZGVvUmVhZHkoJGV2ZW50KVwiXG4gICAgICAgIHR5cGU9XCJzZWxmaWVcIlxuICAgICAgPlxuICAgICAgPC9uZ3gtc2NhbmRvYy13ZWJjYW0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwcmV2aWV3RGF0YVwiXG4gICAgICAqbmdJZj1cInByZXZpZXdcIlxuICAgICAgc3R5bGU9XCJcbiAgICAgICAgei1pbmRleDogMjA7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNjYW5QcmV2aWV3XCJcbiAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBmbGV4OiAxXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPVwiZmxleDogMVwiXG4gICAgICAgICAgY2xhc3M9XCJpbWFnZVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnICsgcHJldmlldyArICcpJ1wiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Zm9vdGVyIGNsYXNzPVwicC04IGZsZXgtcm93XCI+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cIiFjYW1lcmFSZWFkeVwiXG4gICAgICBjbGFzcz1cInctMTAwLXBcIlxuICAgICAgKm5nSWY9XCIhcHJldmlld1wiXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgKGNsaWNrKT1cInNjYW4oKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lcj4ge3sgXCJzY2FuZG9jLnJlc3VsdC50YWtlU2VsZmllXCIgfCB0cmFuc2xhdGUgfX0gPC9uZy1jb250YWluZXI+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInctMTAwLXAgZmxleC1yb3cgZmxleFwiXG4gICAgICAqbmdJZj1cInByZXZpZXdcIlxuICAgICAgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyXCJcbiAgICA+XG4gICAgICA8YnV0dG9uIHN0eWxlPVwiZmxleDogMVwiIGNsYXNzPVwibXItNFwiIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJyZXRyeSgpXCI+XG4gICAgICAgIHt7IFwic2NhbmRvYy5yZXRyeVwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICBzdHlsZT1cImZsZXg6IDFcIlxuICAgICAgICBjbGFzcz1cIm1sLTRcIlxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwiY29udGludWUoKVwiXG4gICAgICA+XG4gICAgICAgIHt7IFwic2NhbmRvYy5jb250aW51ZVdpdGhTZWxlY3RlZEltYWdlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvb3Rlcj5cbjwvZGl2PlxuIl19
|