speechrecorderng 2.18.13 → 2.19.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/bundles/speechrecorderng.umd.js +558 -104
- package/bundles/speechrecorderng.umd.js.map +1 -1
- package/esm2015/lib/audio/capture/capture.js +262 -69
- package/esm2015/lib/io/stream.js +8 -7
- package/esm2015/lib/speechrecorder/project/project.js +27 -1
- package/esm2015/lib/speechrecorder/session/sessionmanager.js +35 -8
- package/esm2015/lib/speechrecorderng.component.js +2 -1
- package/esm2015/lib/spr.module.version.js +2 -2
- package/esm2015/lib/ui/livelevel_display.js +24 -4
- package/esm2015/lib/utils/ua-parser.js +166 -0
- package/fesm2015/speechrecorderng.js +526 -95
- package/fesm2015/speechrecorderng.js.map +1 -1
- package/lib/audio/capture/capture.d.ts +6 -3
- package/lib/speechrecorder/project/project.d.ts +25 -0
- package/lib/speechrecorder/session/sessionmanager.d.ts +7 -3
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/livelevel_display.d.ts +4 -1
- package/lib/utils/ua-parser.d.ts +40 -0
- package/package.json +3 -3
|
@@ -295,6 +295,7 @@ export class SpeechrecorderngComponent {
|
|
|
295
295
|
this.sm.audioDevices = project.audioDevices;
|
|
296
296
|
chCnt = ProjectUtil.audioChannelCount(project);
|
|
297
297
|
console.info("Project requested recording channel count: " + chCnt);
|
|
298
|
+
this.sm.autoGainControlConfigs = project.autoGainControlConfigs;
|
|
298
299
|
}
|
|
299
300
|
else {
|
|
300
301
|
console.error("Empty project configuration!");
|
|
@@ -419,4 +420,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.10", ngImpo
|
|
|
419
420
|
type: ViewChild,
|
|
420
421
|
args: [SessionManager, { static: true }]
|
|
421
422
|
}] } });
|
|
422
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQzVGLE9BQU8sRUFDa0MsU0FBUyxJQUFJLGlCQUFpQixFQUNyRSxXQUFXLEVBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBSXhFLE9BQU8sRUFBVSxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFFckMsTUFBTSxDQUFOLElBQVksSUFBMEI7QUFBdEMsV0FBWSxJQUFJO0lBQUUsbURBQWMsQ0FBQTtJQUFDLCtCQUFJLENBQUE7QUFBQSxDQUFDLEVBQTFCLElBQUksS0FBSixJQUFJLFFBQXNCO0FBa0J0QyxNQUFNLE9BQU8seUJBQXlCO0lBY3BDLFlBQW9CLEtBQXFCLEVBQ2YsTUFBYyxFQUNsQixpQkFBb0MsRUFDcEMsZUFBOEIsRUFDOUIsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsZUFBZ0MsRUFDaEMsUUFBK0I7UUFQakMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2xCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUs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QUM7O3VIQTlhVSx5QkFBeUI7MkdBQXpCLHlCQUF5Qiw2Q0FiekIsQ0FBQyxjQUFjLENBQUMsOERBeUJoQixjQUFjLDhEQXhCZjs7R0FFVDs0RkFVVSx5QkFBeUI7a0JBaEJyQyxTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDM0IsUUFBUSxFQUFFOztHQUVUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUVKO29UQWE4QyxFQUFFO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZSBhcyBQbGF5YmFja0V2ZW50VHlwZSxcclxuICBBdWRpb1BsYXllclxyXG59IGZyb20gJy4vYXVkaW8vcGxheWJhY2svcGxheWVyJztcclxuaW1wb3J0IHtHcm91cCwgT3JkZXIsIFByb21wdEl0ZW0sIFNjcmlwdH0gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zY3JpcHQvc2NyaXB0J1xyXG5pbXBvcnQgeyBTZXNzaW9uTWFuYWdlcixTdGF0dXMgYXMgU2Vzc2lvbk1hbmFnZXJTdGF0dXN9IGZyb20gJy4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlcic7XHJcbmltcG9ydCB7IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQsIFVwbG9hZGVyU3RhdHVzIH0gZnJvbSAnLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1NjcmlwdFNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQuc2VydmljZVwiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NwcnVwbG9hZGVyXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7UHJvamVjdCwgUHJvamVjdFV0aWx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlRGVzY3JpcHRvcn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7QXJyYXlzfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGVudW0gTW9kZSB7U0lOR0xFX1NFU1NJT04sREVNT31cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcGVlY2hyZWNvcmRlcicsXHJcbiAgcHJvdmlkZXJzOiBbU2Vzc2lvblNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXNwcnJlY29yZGluZ3Nlc3Npb24gW3Byb2plY3ROYW1lXT1cInByb2plY3Q/Lm5hbWVcIiBbZGF0YVNhdmVkXT1cImRhdGFTYXZlZFwiPjwvYXBwLXNwcnJlY29yZGluZ3Nlc3Npb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3R7XHJcbiAgICBmbGV4OiAyO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBtaW4taGVpZ2h0OjA7XHJcblxyXG4gIH1gXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFNwZWVjaHJlY29yZGVybmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsQWZ0ZXJWaWV3SW5pdCxBdWRpb1BsYXllckxpc3RlbmVyIHtcclxuXHJcblx0ICBtb2RlITpNb2RlO1xyXG5cdFx0Y29udHJvbEF1ZGlvUGxheWVyITpBdWRpb1BsYXllcjtcclxuXHRcdGF1ZGlvOmFueTtcclxuXHJcblx0X3Byb2plY3Q6UHJvamVjdHxudWxsPW51bGw7XHJcbiAgc2Vzc2lvbklkITogc3RyaW5nO1xyXG4gIHNlc3Npb24hOlNlc3Npb247XHJcblxyXG4gIHNjcmlwdCE6U2NyaXB0O1xyXG4gICAgZGF0YVNhdmVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBAVmlld0NoaWxkKFNlc3Npb25NYW5hZ2VyLCB7IHN0YXRpYzogdHJ1ZSB9KSBzbSE6U2Vzc2lvbk1hbmFnZXI7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXNzaW9uc1NlcnZpY2U6U2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOlByb2plY3RTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzY3JpcHRTZXJ2aWNlOlNjcmlwdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVzU2VydmljZTpSZWNvcmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRlcjpTcGVlY2hSZWNvcmRlclVwbG9hZGVyKSB7XHJcblx0XHR9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcblx0XHQgIHRyeSB7XHJcbiAgICAgICAgbGV0IGF1ZGlvQ29udGV4dCA9IEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgICAgaWYoYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyID0gbmV3IEF1ZGlvUGxheWVyKGF1ZGlvQ29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc20uY29udHJvbEF1ZGlvUGxheWVyPXRoaXMuY29udHJvbEF1ZGlvUGxheWVyO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdQbGF5ZXIgaW5pdGlhbGl6ZWQuJztcclxuICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgICBuZ0FmdGVyVmlld0luaXQoKXtcclxuXHJcblx0XHQgIGlmKHRoaXMuc20uc3RhdHVzIT09IFNlc3Npb25NYW5hZ2VyU3RhdHVzLkVSUk9SKSB7XHJcbiAgICAgICAgbGV0IGluaXRTdWNjZXNzID0gdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYgKGluaXRTdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtc1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2Vzc2lvbihwYXJhbXNbJ3Nlc3Npb25JZCddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcm91dGVQYXJhbXNJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgICAgICAgaWYgKHJvdXRlUGFyYW1zSWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2Vzc2lvbihyb3V0ZVBhcmFtc0lkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmZXRjaFNlc3Npb24oc2Vzc2lvbklkOnN0cmluZyl7XHJcblxyXG5cclxuXHRcdCAgLy9FcnJvcjogRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWU6ICdzdGF0dXNNc2c6IFBsYXllciBpbml0aWFsaXplZC4nLiBDdXJyZW50IHZhbHVlOiAnc3RhdHVzTXNnOiBGZXRjaGluZyBzZXNzaW9uIGluZm8uLi4nLlxyXG4gICAgICAvLyBwYXJhbXMuc3Vic2NyaWJlIHNlZW1zIG5vdCB0byBiZSBhc3luY2hyb25vdXNcclxuXHJcbiAgICAgIC8vIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgLy8gdGhpcy5zbS5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgc2Vzc2lvbiBpbmZvLi4uJztcclxuICAgICAgLy8gdGhpcy5zbS5zdGF0dXNXYWl0aW5nPXRydWU7XHJcbiAgICAgIGxldCBzZXNzT2JzPSB0aGlzLnNlc3Npb25zU2VydmljZS5zZXNzaW9uT2JzZXJ2ZXIoc2Vzc2lvbklkKTtcclxuXHJcbiAgICAgIGlmKHNlc3NPYnMpIHtcclxuICAgICAgICBzZXNzT2JzLnN1YnNjcmliZShzZXNzID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzKTtcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBzZXNzaW9uIGluZm8uJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgaWYgKHNlc3MucHJvamVjdCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9uIGFzc29jaWF0ZWQgcHJvamVjdDogXCIrc2Vzcy5wcm9qZWN0KVxyXG4gICAgICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3RPYnNlcnZhYmxlKHNlc3MucHJvamVjdCkuc3Vic2NyaWJlKHByb2plY3Q9PntcclxuICAgICAgICAgICAgICB0aGlzLnByb2plY3Q9cHJvamVjdDtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2NyaXB0KHNlc3MpO1xyXG4gICAgICAgICAgICB9LHJlYXNvbiA9PntcclxuICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZz1yZWFzb247XHJcbiAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgcHJvamVjdCBjb25maWc6IFwiK3JlYXNvbilcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiU2Vzc2lvbiBoYXMgbm8gYXNzb2NpYXRlZCBwcm9qZWN0LiBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXCIpXHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hTY3JpcHQoc2Vzcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAocmVhc29uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gcmVhc29uO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlc3Npb24gXCIgKyByZWFzb24pXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmZXRjaFNjcmlwdChzZXNzOlNlc3Npb24pe1xyXG4gICAgICBpZihzZXNzLnNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ0ZldGNoaW5nIHJlY29yZGluZyBzY3JpcHQuLi4nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPXRydWU7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRTZXJ2aWNlLnNjcmlwdE9ic2VydmFibGUoc2Vzcy5zY3JpcHQpLnN1YnNjcmliZShzY3JpcHQ9PntcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ1JlY2VpdmVkIHJlY29yZGluZyBzY3JpcHQuJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2V0U2NyaXB0KHNjcmlwdClcclxuICAgICAgICAgIHRoaXMuc20uc2Vzc2lvbj1zZXNzO1xyXG4gICAgICAgICAgdGhpcy5mZXRjaFJlY29yZGluZ3Moc2Vzcyx0aGlzLnNjcmlwdClcclxuICAgICAgICB9LHJlYXNvbiA9PntcclxuICAgICAgICAgIGxldCBlcnJNc2c9XCJFcnJvciBmZXRjaGluZyByZWNvcmRpbmcgc2NyaXB0OiBcIityZWFzb25cclxuICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZylcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyTXNnO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgbGV0IGVyck1zZz1cIk5vIHJlY29yZGluZyBzY3JpcHQgaXMgZGVmaW5lZCBmb3IgdGhpcyBzZXNzaW9uIHdpdGggSUQgXCIrc2Vzcy5zZXNzaW9uSWQ7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLnNtLnN0YXR1c01zZylcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c01zZz1lcnJNc2c7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgZmV0Y2hSZWNvcmRpbmdzKHNlc3M6U2Vzc2lvbixzY3JpcHQ6U2NyaXB0KXtcclxuICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdGZXRjaGluZyBpbmZvcyBvZiByZWNvcmRpbmdzLi4uJztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgICAgICBsZXQgcHJObTpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgICAgIGlmKHRoaXMucHJvamVjdCkge1xyXG4gICAgICAgICAgICBsZXQgcmZzT2JzID0gdGhpcy5yZWNGaWxlc1NlcnZpY2UucmVjb3JkaW5nRmlsZURlc2NyTGlzdCh0aGlzLnByb2plY3QubmFtZSwgc2Vzcy5zZXNzaW9uSWQpO1xyXG4gICAgICAgICAgICByZnNPYnMuc3Vic2NyaWJlKChyZnM6IEFycmF5PFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9yPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBpbmZvcyBvZiByZWNvcmRpbmdzLic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmZzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmZzLmZvckVhY2goKHJmKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBbHJlYWR5IHJlY29yZGVkOiBcIiArIHJmKyBcIiBcIityZi5yZWNvcmRpbmcuaXRlbWNvZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbS5hZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKHJmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFeHBlY3RlZCB0eXBlIGFycmF5IGZvciBsaXN0IG9mIGFscmVhZHkgcmVjb3JkZWQgZmlsZXMgJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY29yZGluZyBmaWxlIGxpc3Q6IFwiICsgcmZzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gd2Ugc3RhcnQgdGhlIHNlc3Npb24gYW55d2F5XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2Vzc2lvbigpXHJcbiAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTZXNzaW9uKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydFNlc3Npb24oKXtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcblx0XHQgIHRoaXMuc20uc3RhcnQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgICAgIHNldFNlc3Npb24oc2Vzc2lvbjphbnkpe1xyXG5cdFx0ICAgIGlmKHNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gSUQ6IFwiICsgc2Vzc2lvbi5zZXNzaW9uSWQpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gVW5kZWZpbmVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWFkeSgpOmJvb2xlYW57XHJcblx0XHQgICAgcmV0dXJuIHRoaXMuZGF0YVNhdmVkICYmICF0aGlzLnNtLmlzQWN0aXZlKClcclxuICAgICAgICB9XHJcblxyXG5cdFx0aW5pdCgpOmJvb2xlYW4ge1xyXG5cclxuXHRcdFx0dmFyIG4gPSA8YW55Pm5hdmlnYXRvcjtcclxuXHRcdFx0Ly92YXIgZ2V0VXNlck1lZGlhRm5jdD0gbi5nZXRVc2VyTWVkaWEgfHwgbi53ZWJraXRHZXRVc2VyTWVkaWEgfHxcclxuXHRcdFx0Ly9cdG4ubW96R2V0VXNlck1lZGlhIHx8IG4ubXNHZXRVc2VyTWVkaWE7XHJcblx0XHRcdHZhciB3ID0gPGFueT53aW5kb3c7XHJcblx0XHRcdC8vIFRPRE8gdGVzdCBvbnlsICEhXHJcblxyXG4gICAgICAvLyBsZXQgZGVidWdGYWlsPXRydWU7XHJcblx0XHQvLyBcdEF1ZGlvQ29udGV4dCA9IHcuQXVkaW9Db250ZXh0IHx8IHcud2Via2l0QXVkaW9Db250ZXh0O1xyXG5cdFx0Ly8gXHRpZiAodHlwZW9mIEF1ZGlvQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJyB8fCBkZWJ1Z0ZhaWwpIHtcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblx0XHQvLyBcdFx0dGhpcy5zbS5zdGF0dXNNc2cgPSAnRVJST1I6IEJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWIgQXVkaW8gQVBJISc7XHJcblx0XHQvLyBcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0Ly8gXHR9IGVsc2Uge1xyXG5cdFx0Ly8gXHRcdHZhciBjb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAvL1xyXG5cdFx0Ly8gXHRcdGlmICh0eXBlb2YgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG5cdFx0Ly8gXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9ICdFUlJPUjogQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuXHRcdC8vIFx0XHR9IGVsc2Uge1xyXG4gICAgICAvL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc20gPSBuZXcgU2Vzc2lvbk1hbmFnZXIobmV3IFNpbXBsZVRyYWZmaWNMaWdodCgpLCB0aGlzLnVwbG9hZGVyKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5pbml0KCk7XHJcblx0XHRcdFx0XHQvL3RoaXMuYXAgPSBuZXcgQXVkaW9QbGF5ZXIoY29udGV4dCx0aGlzKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5saXN0ZW5lcj10aGlzO1xyXG5cdFx0XHQvL1x0fVxyXG5cdFx0Ly9cdH1cclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlci5saXN0ZW5lciA9ICh1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVcGRhdGUodWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJCZWZvcmUgcGFnZSB1bmxvYWQgZXZlbnRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsIHRoaXMgYXR0ZW1wdHMgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIGRvIG5vdCB3b3JrIGFueW1vcmUgKGZvciBzZWN1cml0eSByZWFzb25zKSEhXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UsIHVudGlsIGFsbCByZWNvcmRpbmdzIGFyZSB1cGxvYWRlZCFcIjtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMuc20udXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc20udXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBjb25maWd1cmUoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMubG9hZFByb2plY3RDZmcoKCkgPT4ge1xyXG4gICAgICAgIC8vIGRpc3BsYXkgcHJvamVjdCBuYW1lXHJcbiAgICAgICAgbGV0IHByTmFtZTogc3RyaW5nID0gJ1tVbmtub3duXSc7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvamVjdCAmJiB0aGlzLnByb2plY3QubmFtZSkge1xyXG4gICAgICAgICAgcHJOYW1lID0gdGhpcy5wcm9qZWN0Lm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy50aXRsZUVsLmlubmVyVGV4dCA9IHByTmFtZTtcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSByYW5kb21pemUoc2NyaXB0OlNjcmlwdCl7XHJcblx0XHQgICAgc2NyaXB0LnNlY3Rpb25zLmZvckVhY2goKHMpPT57XHJcblx0XHQgICAgICAgIGlmKCdSQU5ET00nPT09cy5vcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHMuX3NodWZmbGVkR3JvdXBzID0gQXJyYXlzLnNodWZmbGVBcnJheTxHcm91cD4ocy5ncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICBzLl9zaHVmZmxlZEdyb3Vwcz1zLmdyb3VwcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICAgICAgcy5fc2h1ZmZsZWRHcm91cHMuZm9yRWFjaCgoZyk9PntcclxuXHRcdCAgICAgICAgICAgIGlmKCdSQU5ET00nPT09Zy5vcmRlcil7XHJcblx0XHQgICAgICAgICAgICAgICBnLl9zaHVmZmxlZFByb21wdEl0ZW1zPUFycmF5cy5zaHVmZmxlQXJyYXk8UHJvbXB0SXRlbT4oZy5wcm9tcHRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICAgICAgZy5fc2h1ZmZsZWRQcm9tcHRJdGVtcz1nLnByb21wdEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTY3JpcHQoc2NyaXB0OlNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zY3JpcHQ9c2NyaXB0O1xyXG4gICAgICAgIHRoaXMucmFuZG9taXplKHRoaXMuc2NyaXB0KTtcclxuICAgICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXQgcHJvamVjdChwcm9qZWN0OiBQcm9qZWN0fG51bGwpIHtcclxuICAgICAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcclxuICAgICAgICBsZXQgY2hDbnQgPSBQcm9qZWN0VXRpbC5ERUZBVUxUX0FVRElPX0NIQU5ORUxfQ09VTlQ7XHJcblxyXG4gICAgICAgIGlmIChwcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgbmFtZTogXCIgKyBwcm9qZWN0Lm5hbWUpXHJcbiAgICAgICAgICAgIHRoaXMuc20uYXVkaW9EZXZpY2VzID0gcHJvamVjdC5hdWRpb0RldmljZXM7XHJcbiAgICAgICAgICAgIGNoQ250ID0gUHJvamVjdFV0aWwuYXVkaW9DaGFubmVsQ291bnQocHJvamVjdCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgcmVxdWVzdGVkIHJlY29yZGluZyBjaGFubmVsIGNvdW50OiBcIiArIGNoQ250KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRW1wdHkgcHJvamVjdCBjb25maWd1cmF0aW9uIVwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNtLmNoYW5uZWxDb3VudCA9IGNoQ250O1xyXG5cclxuICAgIH1cclxuXHJcbiAgZ2V0IHByb2plY3QoKTpQcm9qZWN0fG51bGx7XHJcblx0XHQgIHJldHVybiB0aGlzLl9wcm9qZWN0O1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICBsb2FkUHJvamVjdENmZyhjYWxsYmFjazogKCk9PiBhbnkpe1xyXG4gICAgICBsZXQgcHJvalVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZXNzaW9uSWQgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCB0aGlzLm1vZGUgPT09IE1vZGUuREVNTykge1xyXG4gICAgICAgICAgLy8gZGVidWcgb3IgZGVtbyBtb2RlXHJcbiAgICAgICAgICBwcm9qVXJsID0gJ3Rlc3QvRGVtbzEuanNvbj8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxvYWQgUkVTVGZ1bCBieSBzZXNzaW9uSWRcclxuICAgICAgICBwcm9qVXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgJy93aWtpc3BlZWNoL3Jlc3QvcHJvamVjdHMvP3Nlc3Npb25JZD0nICsgdGhpcy5zZXNzaW9uSWQ7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGlmKHByb2pVcmwpIHtcclxuICAgICAgICB2YXIgcExvYWRlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHBMb2FkZXIub3BlbihcIkdFVFwiLCBwcm9qVXJsLCB0cnVlKTtcclxuICAgICAgICBwTG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgcExvYWRlci5yZXNwb25zZVR5cGUgPSBcImpzb25cIjtcclxuICAgICAgICBwTG9hZGVyLm9ubG9hZCA9IChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgdGhpcy5wcm9qZWN0ID0gcExvYWRlci5yZXNwb25zZS5wcm9qZWN0O1xyXG5cclxuICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBMb2FkZXIub25lcnJvciA9IChlKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgcHJvamVjdCBkYXRhIC4uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcExvYWRlci5zZW5kKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gbG9hZFNjcmlwdChjYWxsYmFjazogKCk9PmFueSl7XHJcbiAgLy8gICB2YXIgc2NyTG9hZGVyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgLy8gICBsZXQgaG46c3RyaW5nID13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XHJcbiAgLy8gICBsZXQgcG46c3RyaW5nID13aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgLy8gICBsZXQgcHI6c3RyaW5nID13aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7XHJcbiAgLy8gICBsZXQgcG86c3RyaW5nID13aW5kb3cubG9jYXRpb24ucG9ydDtcclxuICAvL1xyXG4gIC8vICAgbGV0IHNlc3Npb25JZDpzdHJpbmc9dGhpcy5zZXNzaW9uLnNlc3Npb25JZDtcclxuICAvL1xyXG4gIC8vICAgICBsZXQgc2NyVXJsOnN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIC8vXHJcbiAgLy8gICAgIGlmIChobiA9PT0gJ2xvY2FsaG9zdCcgIHx8IHRoaXMubW9kZT09PU1vZGUuREVNTykge1xyXG4gIC8vICAgICAgICAgLy8gbG9jYWwgZGVidWcgbW9kZVxyXG4gIC8vICAgICAgICAgLy8gRkYgY2FjaGVzXHJcbiAgLy8gICAgICAgICBzY3JVcmwgPSAndGVzdC8nICsgdGhpcy5zZXNzaW9uLnNjcmlwdC50b1N0cmluZygpICsgJy5qc29uPycgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAvL1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgbGV0IHNjclBhdGg6c3RyaW5nID0gJy93aWtpc3BlZWNoL3Nlc3Npb24vc2NyaXB0cy9zZXJ2bGV0JztcclxuICAvLyAgICAgICAgIGxldCBzY3JRdTpzdHJpbmcgPSAnc2Vzc2lvbklkPScgKyBzZXNzaW9uSWQ7XHJcbiAgLy8gICAgICAgICBzY3JVcmwgPSBwciArICcvLycgKyBobiArICc6JyArIHBvICsgc2NyUGF0aDtcclxuICAvLyAgICAgICAgIGlmIChzY3JRdSkge1xyXG4gIC8vICAgICAgICAgICAgIHNjclVybCA9IHNjclVybCArICc/JyArIHNjclF1O1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy9cclxuICAvLyAgIHNjckxvYWRlci5vcGVuKFwiR0VUXCIsc2NyVXJsICwgdHJ1ZSk7XHJcbiAgLy8gICBzY3JMb2FkZXIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywnYXBwbGljYXRpb24vanNvbicpO1xyXG4gIC8vICAgc2NyTG9hZGVyLnJlc3BvbnNlVHlwZSA9IFwianNvblwiO1xyXG4gIC8vICAgc2NyTG9hZGVyLm9ubG9hZCA9IChlKSA9PiB7XHJcbiAgLy9cclxuICAvLyAgICAgdGhpcy5zY3JpcHQgPSBzY3JMb2FkZXIucmVzcG9uc2U7XHJcbiAgLy9cclxuICAvL1xyXG4gIC8vICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gIC8vXHJcbiAgLy8gICAgIGNhbGxiYWNrKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBzY3JMb2FkZXIub25lcnJvciA9IChlKSA9PiB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgZG93bmxvYWRpbmcgcmVjb3JkaW5nIHNjcmlwdCBkYXRhIC4uLlwiKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHNjckxvYWRlci5zZW5kKCk7XHJcbiAgLy8gfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jb25maWd1cmUoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cdFx0YXVkaW9QbGF5ZXJVcGRhdGUoZTpBdWRpb1BsYXllckV2ZW50KXtcclxuXHRcdFx0aWYoUGxheWJhY2tFdmVudFR5cGUuU1RBUlRFRD09PWUudHlwZSl7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPXRydWU7XHJcblx0XHRcdFx0Ly90aGlzLnN0b3BCdG4uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuXHRcdFx0XHR0aGlzLnNtLnN0YXR1c01zZz0nUGxheWJhY2suLi4nO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChQbGF5YmFja0V2ZW50VHlwZS5FTkRFRCA9PT0gZS50eXBlKSB7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPWZhbHNlO1xyXG5cdFx0XHRcdC8vdGhpcy5zdG9wQnRuLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcblx0XHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J1JlYWR5Lic7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVycm9yKCl7XHJcblx0XHQgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J0VSUk9SOiBSZWNvcmRpbmcuJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuLy9cclxuLy9cclxuLy8gZnVuY3Rpb24gc3BlZWNocmVjb3JkZXJJbml0KCkge1xyXG4vLyBcdHZhciBzcHIgPSBuZXcgaXBzLmFwcHMuc3BlZWVjaHJlY29yZGVyLlNwZWVjaFJlY29yZGVyKCk7XHJcbi8vIFx0c3ByLmluaXQoKTtcclxuLy8gICBzcHIuc3RhcnQoKTtcclxuLy9cclxuLy9cclxuLy8gfVxyXG4iXX0=
|
|
423
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQzVGLE9BQU8sRUFDa0MsU0FBUyxJQUFJLGlCQUFpQixFQUNyRSxXQUFXLEVBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBSXhFLE9BQU8sRUFBVSxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFFckMsTUFBTSxDQUFOLElBQVksSUFBMEI7QUFBdEMsV0FBWSxJQUFJO0lBQUUsbURBQWMsQ0FBQTtJQUFDLCtCQUFJLENBQUE7QUFBQSxDQUFDLEVBQTFCLElBQUksS0FBSixJQUFJLFFBQXNCO0FBa0J0QyxNQUFNLE9BQU8seUJBQXlCO0lBY3BDLFlBQW9CLEtBQXFCLEVBQ2YsTUFBYyxFQUNsQixpQkFBb0MsRUFDcEMsZUFBOEIsRUFDOUIsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsZUFBZ0MsRUFDaEMsUUFBK0I7UUFQakMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2xCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQWU7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGFBQVEsR0FBUixRQUFRLENBQXVCO1FBZnRELGFBQVEsR0FBYyxJQUFJLENBQUM7UUFLeEIsY0FBUyxHQUFZLElBQUksQ0FBQztJQVc1QixDQUFDO0lBRUMsUUFBUTtRQUNSLElBQUk7WUFDQSxJQUFJLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pELElBQUcsWUFBWSxFQUFFO2dCQUNiLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDakU7WUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixHQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsR0FBQyxNQUFNLENBQUM7WUFDL0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUM7U0FDM0M7UUFBQSxPQUFNLEdBQUcsRUFBQztZQUNULElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsT0FBTyxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1NBQzNCO0lBQ0gsQ0FBQztJQUNFLGVBQWU7UUFFbEIsSUFBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sa0JBQThCLEVBQUU7WUFDN0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksV0FBVyxFQUFFO2dCQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO29CQUNsRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztxQkFDeEM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUU7b0JBQzdDLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsSUFBSSxhQUFhLEVBQUU7d0JBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQ2xDO2dCQUNILENBQUMsQ0FBQyxDQUFBO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsU0FBZ0I7UUFHN0IsME1BQTBNO1FBQ3hNLGdEQUFnRDtRQUVoRCxrQ0FBa0M7UUFDbEMsa0RBQWtEO1FBQ2xELDhCQUE4QjtRQUM5QixJQUFJLE9BQU8sR0FBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3RCxJQUFHLE9BQU8sRUFBRTtZQUNWLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFDLE1BQU0sQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsd0JBQXdCLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQiw0REFBNEQ7b0JBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUEsRUFBRTt3QkFDckUsSUFBSSxDQUFDLE9BQU8sR0FBQyxPQUFPLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pCLENBQUMsRUFBQyxNQUFNLENBQUMsRUFBRTt3QkFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBQyxNQUFNLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFDLE9BQU8sQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEdBQUMsS0FBSyxDQUFDO3dCQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxHQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUN6RCxDQUFDLENBQUMsQ0FBQztpQkFFSjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUE7b0JBQy9FLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3hCO1lBQ0gsQ0FBQyxFQUNELENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2dCQUMzQixJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQTtZQUNuRCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUdELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLElBQUcsSUFBSSxDQUFDLE1BQU0sRUFBQztZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFDLE1BQU0sQ0FBQztZQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBRyw4QkFBOEIsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsR0FBQyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQSxFQUFFO2dCQUNqRSxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsR0FBQyxNQUFNLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLDRCQUE0QixDQUFDO2dCQUNqRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsR0FBQyxLQUFLLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3hDLENBQUMsRUFBQyxNQUFNLENBQUMsRUFBRTtnQkFDVCxJQUFJLE1BQU0sR0FBQyxtQ0FBbUMsR0FBQyxNQUFNLENBQUE7Z0JBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsT0FBTyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsR0FBQyxLQUFLLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFJO1lBQ0gsSUFBSSxNQUFNLEdBQUMsMERBQTBELEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNyRixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFDLE9BQU8sQ0FBQztTQUVqQztJQUNILENBQUM7SUFHRCxlQUFlLENBQUMsSUFBWSxFQUFDLE1BQWE7UUFDeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLGlDQUFpQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxHQUFDLElBQUksQ0FBQztRQUMzQixJQUFJLElBQUksR0FBYSxJQUFJLENBQUM7UUFDMUIsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQW1DLEVBQUUsRUFBRTtnQkFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBRywrQkFBK0IsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixJQUFJLEdBQUcsRUFBRTtvQkFDTCxJQUFJLEdBQUcsWUFBWSxLQUFLLEVBQUU7d0JBQ3RCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTs0QkFDZixzRUFBc0U7NEJBQ3RFLElBQUksQ0FBQyxFQUFFLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzdDLENBQUMsQ0FBQyxDQUFBO3FCQUNMO3lCQUFNO3dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQTtxQkFDM0U7aUJBQ0o7cUJBQU07b0JBQ0gsK0NBQStDO2lCQUNsRDtZQUNMLENBQUMsRUFBRSxHQUFHLEVBQUU7Z0JBQ0osOEJBQThCO2dCQUM5QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7WUFDdkIsQ0FBQyxFQUFFLEdBQUcsRUFBRTtnQkFDSixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7WUFDdkIsQ0FBQyxDQUFDLENBQUE7U0FDTDthQUFJO1lBQ0QsT0FBTztTQUNWO0lBQ0wsQ0FBQztJQUdPLFlBQVk7UUFDaEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEdBQUMsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUdHLFVBQVUsQ0FBQyxPQUFXO1FBQ3hCLElBQUcsT0FBTyxFQUFFO1lBQ0gscURBQXFEO1NBQ3ZEO2FBQUk7WUFDRCxxQ0FBcUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDMUMsQ0FBQztJQUVQLElBQUk7UUFFSCxJQUFJLENBQUMsR0FBUSxTQUFTLENBQUM7UUFDdkIsaUVBQWlFO1FBQ2pFLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsR0FBUSxNQUFNLENBQUM7UUFDcEIsb0JBQW9CO1FBRWpCLHNCQUFzQjtRQUMxQiwwREFBMEQ7UUFDMUQsMERBQTBEO1FBQ3RELDZDQUE2QztRQUNqRCwwRUFBMEU7UUFDMUUsa0JBQWtCO1FBQ2xCLFlBQVk7UUFDWixzQ0FBc0M7UUFDbEMsRUFBRTtRQUNOLHFFQUFxRTtRQUNqRSxpREFBaUQ7UUFDckQsMEVBQTBFO1FBQ3RFLG9CQUFvQjtRQUN4QixhQUFhO1FBQ1QsRUFBRTtRQUVZLHdFQUF3RTtRQUN2RixpQkFBaUI7UUFDakIsMENBQTBDO1FBQzFDLHdCQUF3QjtRQUMxQixJQUFJO1FBQ0wsSUFBSTtRQUNNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUE7UUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBRTFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNkLE9BQU87YUFDVjtpQkFBTTtnQkFDSCwwRkFBMEY7Z0JBQzFGLElBQUksT0FBTyxHQUFHLGtFQUFrRSxDQUFDO2dCQUNqRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUV0QixJQUFJLENBQUMsRUFBRTtvQkFDSCxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztvQkFDeEIsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRTt3QkFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO3FCQUN2QjtvQkFDRCxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUU7d0JBQ2xCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztxQkFDdEI7aUJBQ0o7Z0JBRUQsT0FBTyxPQUFPLENBQUM7YUFDbEI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ1AsQ0FBQztJQUVQLFlBQVksQ0FBQyxFQUE2QjtRQUN4QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQTtTQUM5QjthQUFNO1lBQ0wsSUFBSSxVQUFVLEdBQUcsRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUE7YUFDaEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFBO2FBQ2pDO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3hDLENBQUM7SUFFRCxTQUFTO1FBSUwsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsdUJBQXVCO1lBQ3ZCLElBQUksTUFBTSxHQUFXLFdBQVcsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzthQUM1QjtZQUNELGtDQUFrQztRQUVwQyxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFHTyxTQUFTLENBQUMsTUFBYTtRQUM3QixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFO1lBQ3pCLElBQUcsUUFBUSxLQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2IsQ0FBQyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1RDtpQkFBSTtnQkFDUCxDQUFDLENBQUMsZUFBZSxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7YUFDeEI7WUFDUCxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFO2dCQUMzQixJQUFHLFFBQVEsS0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDO29CQUNuQixDQUFDLENBQUMsb0JBQW9CLEdBQUMsTUFBTSxDQUFDLFlBQVksQ0FBYSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ2xFO3FCQUFJO29CQUNQLENBQUMsQ0FBQyxvQkFBb0IsR0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2lCQUNsQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWE7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBQyxNQUFNLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBR0QsSUFBSSxPQUFPLENBQUMsT0FBcUI7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLDJCQUEyQixDQUFDO1FBRXBELElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDN0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUM1QyxLQUFLLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsR0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7U0FDakU7YUFBTTtZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtTQUNoRDtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUVqQyxDQUFDO0lBRUgsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFLQyxjQUFjLENBQUMsUUFBa0I7UUFDL0IsSUFBSSxPQUFPLEdBQWtCLElBQUksQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQzNCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDdkUscUJBQXFCO2dCQUNyQixPQUFPLEdBQUcsa0JBQWtCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNyRDtTQUNGO2FBQU07WUFDTCw0QkFBNEI7WUFDNUIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsdUNBQXVDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUU5SjtRQUNELElBQUcsT0FBTyxFQUFFO1lBQ1YsSUFBSSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFFckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFFeEMsUUFBUSxFQUFFLENBQUM7WUFDYixDQUFDLENBQUE7WUFDRCxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUE7WUFDRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBS0gsaUNBQWlDO0lBQ2pDLDBDQUEwQztJQUMxQyw2Q0FBNkM7SUFDN0MsNkNBQTZDO0lBQzdDLDZDQUE2QztJQUM3Qyx5Q0FBeUM7SUFDekMsRUFBRTtJQUNGLGlEQUFpRDtJQUNqRCxFQUFFO0lBQ0YsdUNBQXVDO0lBQ3ZDLEVBQUU7SUFDRiwwREFBMEQ7SUFDMUQsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUN2QiwrRkFBK0Y7SUFDL0YsRUFBRTtJQUNGLGVBQWU7SUFDZixzRUFBc0U7SUFDdEUsdURBQXVEO0lBQ3ZELHdEQUF3RDtJQUN4RCx1QkFBdUI7SUFDdkIsNkNBQTZDO0lBQzdDLFlBQVk7SUFDWixRQUFRO0lBQ1IsRUFBRTtJQUNGLHlDQUF5QztJQUN6Qyw2REFBNkQ7SUFDN0QscUNBQXFDO0lBQ3JDLGdDQUFnQztJQUNoQyxFQUFFO0lBQ0Ysd0NBQXdDO0lBQ3hDLEVBQUU7SUFDRixFQUFFO0lBQ0Ysb0NBQW9DO0lBQ3BDLEVBQUU7SUFDRixrQkFBa0I7SUFDbEIsTUFBTTtJQUNOLGlDQUFpQztJQUNqQyxrRUFBa0U7SUFDbEUsTUFBTTtJQUNOLHNCQUFzQjtJQUN0QixJQUFJO0lBRUYsS0FBSztRQUVELG1CQUFtQjtJQUV2QixDQUFDO0lBRUgsaUJBQWlCLENBQUMsQ0FBa0I7UUFDbkMsSUFBRyxpQkFBaUIsQ0FBQyxPQUFPLEtBQUcsQ0FBQyxDQUFDLElBQUksRUFBQztZQUNyQyw4QkFBOEI7WUFDOUIsNkJBQTZCO1lBQ2pCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFDLE1BQU0sQ0FBQztZQUMzQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBQyxhQUFhLENBQUM7U0FFdkI7YUFBTSxJQUFJLGlCQUFpQixDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3ZELCtCQUErQjtZQUMvQiw2QkFBNkI7WUFDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDO1lBQzNDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLFFBQVEsQ0FBQztTQUMzQjtJQUNGLENBQUM7SUFDRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLG1CQUFtQixDQUFDO0lBQ3ZDLENBQUM7O3VIQS9hVSx5QkFBeUI7MkdBQXpCLHlCQUF5Qiw2Q0FiekIsQ0FBQyxjQUFjLENBQUMsOERBeUJoQixjQUFjLDhEQXhCZjs7R0FFVDs0RkFVVSx5QkFBeUI7a0JBaEJyQyxTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDM0IsUUFBUSxFQUFFOztHQUVUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUVKO29UQWE4QyxFQUFFO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZSBhcyBQbGF5YmFja0V2ZW50VHlwZSxcclxuICBBdWRpb1BsYXllclxyXG59IGZyb20gJy4vYXVkaW8vcGxheWJhY2svcGxheWVyJztcclxuaW1wb3J0IHtHcm91cCwgT3JkZXIsIFByb21wdEl0ZW0sIFNjcmlwdH0gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zY3JpcHQvc2NyaXB0J1xyXG5pbXBvcnQgeyBTZXNzaW9uTWFuYWdlcixTdGF0dXMgYXMgU2Vzc2lvbk1hbmFnZXJTdGF0dXN9IGZyb20gJy4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlcic7XHJcbmltcG9ydCB7IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQsIFVwbG9hZGVyU3RhdHVzIH0gZnJvbSAnLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1NjcmlwdFNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQuc2VydmljZVwiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NwcnVwbG9hZGVyXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7UHJvamVjdCwgUHJvamVjdFV0aWx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlRGVzY3JpcHRvcn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7QXJyYXlzfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGVudW0gTW9kZSB7U0lOR0xFX1NFU1NJT04sREVNT31cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcGVlY2hyZWNvcmRlcicsXHJcbiAgcHJvdmlkZXJzOiBbU2Vzc2lvblNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXNwcnJlY29yZGluZ3Nlc3Npb24gW3Byb2plY3ROYW1lXT1cInByb2plY3Q/Lm5hbWVcIiBbZGF0YVNhdmVkXT1cImRhdGFTYXZlZFwiPjwvYXBwLXNwcnJlY29yZGluZ3Nlc3Npb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3R7XHJcbiAgICBmbGV4OiAyO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBtaW4taGVpZ2h0OjA7XHJcblxyXG4gIH1gXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFNwZWVjaHJlY29yZGVybmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsQWZ0ZXJWaWV3SW5pdCxBdWRpb1BsYXllckxpc3RlbmVyIHtcclxuXHJcblx0ICBtb2RlITpNb2RlO1xyXG5cdFx0Y29udHJvbEF1ZGlvUGxheWVyITpBdWRpb1BsYXllcjtcclxuXHRcdGF1ZGlvOmFueTtcclxuXHJcblx0X3Byb2plY3Q6UHJvamVjdHxudWxsPW51bGw7XHJcbiAgc2Vzc2lvbklkITogc3RyaW5nO1xyXG4gIHNlc3Npb24hOlNlc3Npb247XHJcblxyXG4gIHNjcmlwdCE6U2NyaXB0O1xyXG4gICAgZGF0YVNhdmVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBAVmlld0NoaWxkKFNlc3Npb25NYW5hZ2VyLCB7IHN0YXRpYzogdHJ1ZSB9KSBzbSE6U2Vzc2lvbk1hbmFnZXI7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXNzaW9uc1NlcnZpY2U6U2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOlByb2plY3RTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzY3JpcHRTZXJ2aWNlOlNjcmlwdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVzU2VydmljZTpSZWNvcmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRlcjpTcGVlY2hSZWNvcmRlclVwbG9hZGVyKSB7XHJcblx0XHR9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcblx0XHQgIHRyeSB7XHJcbiAgICAgICAgbGV0IGF1ZGlvQ29udGV4dCA9IEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgICAgaWYoYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyID0gbmV3IEF1ZGlvUGxheWVyKGF1ZGlvQ29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc20uY29udHJvbEF1ZGlvUGxheWVyPXRoaXMuY29udHJvbEF1ZGlvUGxheWVyO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdQbGF5ZXIgaW5pdGlhbGl6ZWQuJztcclxuICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgICBuZ0FmdGVyVmlld0luaXQoKXtcclxuXHJcblx0XHQgIGlmKHRoaXMuc20uc3RhdHVzIT09IFNlc3Npb25NYW5hZ2VyU3RhdHVzLkVSUk9SKSB7XHJcbiAgICAgICAgbGV0IGluaXRTdWNjZXNzID0gdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYgKGluaXRTdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtc1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2Vzc2lvbihwYXJhbXNbJ3Nlc3Npb25JZCddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcm91dGVQYXJhbXNJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgICAgICAgaWYgKHJvdXRlUGFyYW1zSWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2Vzc2lvbihyb3V0ZVBhcmFtc0lkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmZXRjaFNlc3Npb24oc2Vzc2lvbklkOnN0cmluZyl7XHJcblxyXG5cclxuXHRcdCAgLy9FcnJvcjogRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWU6ICdzdGF0dXNNc2c6IFBsYXllciBpbml0aWFsaXplZC4nLiBDdXJyZW50IHZhbHVlOiAnc3RhdHVzTXNnOiBGZXRjaGluZyBzZXNzaW9uIGluZm8uLi4nLlxyXG4gICAgICAvLyBwYXJhbXMuc3Vic2NyaWJlIHNlZW1zIG5vdCB0byBiZSBhc3luY2hyb25vdXNcclxuXHJcbiAgICAgIC8vIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgLy8gdGhpcy5zbS5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgc2Vzc2lvbiBpbmZvLi4uJztcclxuICAgICAgLy8gdGhpcy5zbS5zdGF0dXNXYWl0aW5nPXRydWU7XHJcbiAgICAgIGxldCBzZXNzT2JzPSB0aGlzLnNlc3Npb25zU2VydmljZS5zZXNzaW9uT2JzZXJ2ZXIoc2Vzc2lvbklkKTtcclxuXHJcbiAgICAgIGlmKHNlc3NPYnMpIHtcclxuICAgICAgICBzZXNzT2JzLnN1YnNjcmliZShzZXNzID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzKTtcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBzZXNzaW9uIGluZm8uJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgaWYgKHNlc3MucHJvamVjdCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9uIGFzc29jaWF0ZWQgcHJvamVjdDogXCIrc2Vzcy5wcm9qZWN0KVxyXG4gICAgICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3RPYnNlcnZhYmxlKHNlc3MucHJvamVjdCkuc3Vic2NyaWJlKHByb2plY3Q9PntcclxuICAgICAgICAgICAgICB0aGlzLnByb2plY3Q9cHJvamVjdDtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2NyaXB0KHNlc3MpO1xyXG4gICAgICAgICAgICB9LHJlYXNvbiA9PntcclxuICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZz1yZWFzb247XHJcbiAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgcHJvamVjdCBjb25maWc6IFwiK3JlYXNvbilcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiU2Vzc2lvbiBoYXMgbm8gYXNzb2NpYXRlZCBwcm9qZWN0LiBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXCIpXHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hTY3JpcHQoc2Vzcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAocmVhc29uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gcmVhc29uO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlc3Npb24gXCIgKyByZWFzb24pXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmZXRjaFNjcmlwdChzZXNzOlNlc3Npb24pe1xyXG4gICAgICBpZihzZXNzLnNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ0ZldGNoaW5nIHJlY29yZGluZyBzY3JpcHQuLi4nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPXRydWU7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRTZXJ2aWNlLnNjcmlwdE9ic2VydmFibGUoc2Vzcy5zY3JpcHQpLnN1YnNjcmliZShzY3JpcHQ9PntcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ1JlY2VpdmVkIHJlY29yZGluZyBzY3JpcHQuJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2V0U2NyaXB0KHNjcmlwdClcclxuICAgICAgICAgIHRoaXMuc20uc2Vzc2lvbj1zZXNzO1xyXG4gICAgICAgICAgdGhpcy5mZXRjaFJlY29yZGluZ3Moc2Vzcyx0aGlzLnNjcmlwdClcclxuICAgICAgICB9LHJlYXNvbiA9PntcclxuICAgICAgICAgIGxldCBlcnJNc2c9XCJFcnJvciBmZXRjaGluZyByZWNvcmRpbmcgc2NyaXB0OiBcIityZWFzb25cclxuICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZylcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyTXNnO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgbGV0IGVyck1zZz1cIk5vIHJlY29yZGluZyBzY3JpcHQgaXMgZGVmaW5lZCBmb3IgdGhpcyBzZXNzaW9uIHdpdGggSUQgXCIrc2Vzcy5zZXNzaW9uSWQ7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLnNtLnN0YXR1c01zZylcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c01zZz1lcnJNc2c7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgZmV0Y2hSZWNvcmRpbmdzKHNlc3M6U2Vzc2lvbixzY3JpcHQ6U2NyaXB0KXtcclxuICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdGZXRjaGluZyBpbmZvcyBvZiByZWNvcmRpbmdzLi4uJztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgICAgICBsZXQgcHJObTpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgICAgIGlmKHRoaXMucHJvamVjdCkge1xyXG4gICAgICAgICAgICBsZXQgcmZzT2JzID0gdGhpcy5yZWNGaWxlc1NlcnZpY2UucmVjb3JkaW5nRmlsZURlc2NyTGlzdCh0aGlzLnByb2plY3QubmFtZSwgc2Vzcy5zZXNzaW9uSWQpO1xyXG4gICAgICAgICAgICByZnNPYnMuc3Vic2NyaWJlKChyZnM6IEFycmF5PFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9yPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBpbmZvcyBvZiByZWNvcmRpbmdzLic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmZzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmZzLmZvckVhY2goKHJmKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBbHJlYWR5IHJlY29yZGVkOiBcIiArIHJmKyBcIiBcIityZi5yZWNvcmRpbmcuaXRlbWNvZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbS5hZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKHJmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFeHBlY3RlZCB0eXBlIGFycmF5IGZvciBsaXN0IG9mIGFscmVhZHkgcmVjb3JkZWQgZmlsZXMgJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY29yZGluZyBmaWxlIGxpc3Q6IFwiICsgcmZzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gd2Ugc3RhcnQgdGhlIHNlc3Npb24gYW55d2F5XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2Vzc2lvbigpXHJcbiAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTZXNzaW9uKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydFNlc3Npb24oKXtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcblx0XHQgIHRoaXMuc20uc3RhcnQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgICAgIHNldFNlc3Npb24oc2Vzc2lvbjphbnkpe1xyXG5cdFx0ICAgIGlmKHNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gSUQ6IFwiICsgc2Vzc2lvbi5zZXNzaW9uSWQpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gVW5kZWZpbmVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWFkeSgpOmJvb2xlYW57XHJcblx0XHQgICAgcmV0dXJuIHRoaXMuZGF0YVNhdmVkICYmICF0aGlzLnNtLmlzQWN0aXZlKClcclxuICAgICAgICB9XHJcblxyXG5cdFx0aW5pdCgpOmJvb2xlYW4ge1xyXG5cclxuXHRcdFx0dmFyIG4gPSA8YW55Pm5hdmlnYXRvcjtcclxuXHRcdFx0Ly92YXIgZ2V0VXNlck1lZGlhRm5jdD0gbi5nZXRVc2VyTWVkaWEgfHwgbi53ZWJraXRHZXRVc2VyTWVkaWEgfHxcclxuXHRcdFx0Ly9cdG4ubW96R2V0VXNlck1lZGlhIHx8IG4ubXNHZXRVc2VyTWVkaWE7XHJcblx0XHRcdHZhciB3ID0gPGFueT53aW5kb3c7XHJcblx0XHRcdC8vIFRPRE8gdGVzdCBvbnlsICEhXHJcblxyXG4gICAgICAvLyBsZXQgZGVidWdGYWlsPXRydWU7XHJcblx0XHQvLyBcdEF1ZGlvQ29udGV4dCA9IHcuQXVkaW9Db250ZXh0IHx8IHcud2Via2l0QXVkaW9Db250ZXh0O1xyXG5cdFx0Ly8gXHRpZiAodHlwZW9mIEF1ZGlvQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJyB8fCBkZWJ1Z0ZhaWwpIHtcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblx0XHQvLyBcdFx0dGhpcy5zbS5zdGF0dXNNc2cgPSAnRVJST1I6IEJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWIgQXVkaW8gQVBJISc7XHJcblx0XHQvLyBcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0Ly8gXHR9IGVsc2Uge1xyXG5cdFx0Ly8gXHRcdHZhciBjb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAvL1xyXG5cdFx0Ly8gXHRcdGlmICh0eXBlb2YgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG5cdFx0Ly8gXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9ICdFUlJPUjogQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuXHRcdC8vIFx0XHR9IGVsc2Uge1xyXG4gICAgICAvL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc20gPSBuZXcgU2Vzc2lvbk1hbmFnZXIobmV3IFNpbXBsZVRyYWZmaWNMaWdodCgpLCB0aGlzLnVwbG9hZGVyKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5pbml0KCk7XHJcblx0XHRcdFx0XHQvL3RoaXMuYXAgPSBuZXcgQXVkaW9QbGF5ZXIoY29udGV4dCx0aGlzKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5saXN0ZW5lcj10aGlzO1xyXG5cdFx0XHQvL1x0fVxyXG5cdFx0Ly9cdH1cclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlci5saXN0ZW5lciA9ICh1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVcGRhdGUodWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJCZWZvcmUgcGFnZSB1bmxvYWQgZXZlbnRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsIHRoaXMgYXR0ZW1wdHMgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIGRvIG5vdCB3b3JrIGFueW1vcmUgKGZvciBzZWN1cml0eSByZWFzb25zKSEhXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UsIHVudGlsIGFsbCByZWNvcmRpbmdzIGFyZSB1cGxvYWRlZCFcIjtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMuc20udXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc20udXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBjb25maWd1cmUoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMubG9hZFByb2plY3RDZmcoKCkgPT4ge1xyXG4gICAgICAgIC8vIGRpc3BsYXkgcHJvamVjdCBuYW1lXHJcbiAgICAgICAgbGV0IHByTmFtZTogc3RyaW5nID0gJ1tVbmtub3duXSc7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvamVjdCAmJiB0aGlzLnByb2plY3QubmFtZSkge1xyXG4gICAgICAgICAgcHJOYW1lID0gdGhpcy5wcm9qZWN0Lm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy50aXRsZUVsLmlubmVyVGV4dCA9IHByTmFtZTtcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSByYW5kb21pemUoc2NyaXB0OlNjcmlwdCl7XHJcblx0XHQgICAgc2NyaXB0LnNlY3Rpb25zLmZvckVhY2goKHMpPT57XHJcblx0XHQgICAgICAgIGlmKCdSQU5ET00nPT09cy5vcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHMuX3NodWZmbGVkR3JvdXBzID0gQXJyYXlzLnNodWZmbGVBcnJheTxHcm91cD4ocy5ncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICBzLl9zaHVmZmxlZEdyb3Vwcz1zLmdyb3VwcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICAgICAgcy5fc2h1ZmZsZWRHcm91cHMuZm9yRWFjaCgoZyk9PntcclxuXHRcdCAgICAgICAgICAgIGlmKCdSQU5ET00nPT09Zy5vcmRlcil7XHJcblx0XHQgICAgICAgICAgICAgICBnLl9zaHVmZmxlZFByb21wdEl0ZW1zPUFycmF5cy5zaHVmZmxlQXJyYXk8UHJvbXB0SXRlbT4oZy5wcm9tcHRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICAgICAgZy5fc2h1ZmZsZWRQcm9tcHRJdGVtcz1nLnByb21wdEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTY3JpcHQoc2NyaXB0OlNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zY3JpcHQ9c2NyaXB0O1xyXG4gICAgICAgIHRoaXMucmFuZG9taXplKHRoaXMuc2NyaXB0KTtcclxuICAgICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXQgcHJvamVjdChwcm9qZWN0OiBQcm9qZWN0fG51bGwpIHtcclxuICAgICAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcclxuICAgICAgICBsZXQgY2hDbnQgPSBQcm9qZWN0VXRpbC5ERUZBVUxUX0FVRElPX0NIQU5ORUxfQ09VTlQ7XHJcblxyXG4gICAgICAgIGlmIChwcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgbmFtZTogXCIgKyBwcm9qZWN0Lm5hbWUpXHJcbiAgICAgICAgICAgIHRoaXMuc20uYXVkaW9EZXZpY2VzID0gcHJvamVjdC5hdWRpb0RldmljZXM7XHJcbiAgICAgICAgICAgIGNoQ250ID0gUHJvamVjdFV0aWwuYXVkaW9DaGFubmVsQ291bnQocHJvamVjdCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgcmVxdWVzdGVkIHJlY29yZGluZyBjaGFubmVsIGNvdW50OiBcIiArIGNoQ250KTtcclxuICAgICAgICAgICAgdGhpcy5zbS5hdXRvR2FpbkNvbnRyb2xDb25maWdzPXByb2plY3QuYXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRW1wdHkgcHJvamVjdCBjb25maWd1cmF0aW9uIVwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNtLmNoYW5uZWxDb3VudCA9IGNoQ250O1xyXG5cclxuICAgIH1cclxuXHJcbiAgZ2V0IHByb2plY3QoKTpQcm9qZWN0fG51bGx7XHJcblx0XHQgIHJldHVybiB0aGlzLl9wcm9qZWN0O1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICBsb2FkUHJvamVjdENmZyhjYWxsYmFjazogKCk9PiBhbnkpe1xyXG4gICAgICBsZXQgcHJvalVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZXNzaW9uSWQgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCB0aGlzLm1vZGUgPT09IE1vZGUuREVNTykge1xyXG4gICAgICAgICAgLy8gZGVidWcgb3IgZGVtbyBtb2RlXHJcbiAgICAgICAgICBwcm9qVXJsID0gJ3Rlc3QvRGVtbzEuanNvbj8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxvYWQgUkVTVGZ1bCBieSBzZXNzaW9uSWRcclxuICAgICAgICBwcm9qVXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgJy93aWtpc3BlZWNoL3Jlc3QvcHJvamVjdHMvP3Nlc3Npb25JZD0nICsgdGhpcy5zZXNzaW9uSWQ7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGlmKHByb2pVcmwpIHtcclxuICAgICAgICB2YXIgcExvYWRlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHBMb2FkZXIub3BlbihcIkdFVFwiLCBwcm9qVXJsLCB0cnVlKTtcclxuICAgICAgICBwTG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgcExvYWRlci5yZXNwb25zZVR5cGUgPSBcImpzb25cIjtcclxuICAgICAgICBwTG9hZGVyLm9ubG9hZCA9IChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgdGhpcy5wcm9qZWN0ID0gcExvYWRlci5yZXNwb25zZS5wcm9qZWN0O1xyXG5cclxuICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBMb2FkZXIub25lcnJvciA9IChlKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgcHJvamVjdCBkYXRhIC4uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcExvYWRlci5zZW5kKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gbG9hZFNjcmlwdChjYWxsYmFjazogKCk9PmFueSl7XHJcbiAgLy8gICB2YXIgc2NyTG9hZGVyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgLy8gICBsZXQgaG46c3RyaW5nID13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XHJcbiAgLy8gICBsZXQgcG46c3RyaW5nID13aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgLy8gICBsZXQgcHI6c3RyaW5nID13aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7XHJcbiAgLy8gICBsZXQgcG86c3RyaW5nID13aW5kb3cubG9jYXRpb24ucG9ydDtcclxuICAvL1xyXG4gIC8vICAgbGV0IHNlc3Npb25JZDpzdHJpbmc9dGhpcy5zZXNzaW9uLnNlc3Npb25JZDtcclxuICAvL1xyXG4gIC8vICAgICBsZXQgc2NyVXJsOnN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIC8vXHJcbiAgLy8gICAgIGlmIChobiA9PT0gJ2xvY2FsaG9zdCcgIHx8IHRoaXMubW9kZT09PU1vZGUuREVNTykge1xyXG4gIC8vICAgICAgICAgLy8gbG9jYWwgZGVidWcgbW9kZVxyXG4gIC8vICAgICAgICAgLy8gRkYgY2FjaGVzXHJcbiAgLy8gICAgICAgICBzY3JVcmwgPSAndGVzdC8nICsgdGhpcy5zZXNzaW9uLnNjcmlwdC50b1N0cmluZygpICsgJy5qc29uPycgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAvL1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgbGV0IHNjclBhdGg6c3RyaW5nID0gJy93aWtpc3BlZWNoL3Nlc3Npb24vc2NyaXB0cy9zZXJ2bGV0JztcclxuICAvLyAgICAgICAgIGxldCBzY3JRdTpzdHJpbmcgPSAnc2Vzc2lvbklkPScgKyBzZXNzaW9uSWQ7XHJcbiAgLy8gICAgICAgICBzY3JVcmwgPSBwciArICcvLycgKyBobiArICc6JyArIHBvICsgc2NyUGF0aDtcclxuICAvLyAgICAgICAgIGlmIChzY3JRdSkge1xyXG4gIC8vICAgICAgICAgICAgIHNjclVybCA9IHNjclVybCArICc/JyArIHNjclF1O1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy9cclxuICAvLyAgIHNjckxvYWRlci5vcGVuKFwiR0VUXCIsc2NyVXJsICwgdHJ1ZSk7XHJcbiAgLy8gICBzY3JMb2FkZXIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywnYXBwbGljYXRpb24vanNvbicpO1xyXG4gIC8vICAgc2NyTG9hZGVyLnJlc3BvbnNlVHlwZSA9IFwianNvblwiO1xyXG4gIC8vICAgc2NyTG9hZGVyLm9ubG9hZCA9IChlKSA9PiB7XHJcbiAgLy9cclxuICAvLyAgICAgdGhpcy5zY3JpcHQgPSBzY3JMb2FkZXIucmVzcG9uc2U7XHJcbiAgLy9cclxuICAvL1xyXG4gIC8vICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gIC8vXHJcbiAgLy8gICAgIGNhbGxiYWNrKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBzY3JMb2FkZXIub25lcnJvciA9IChlKSA9PiB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgZG93bmxvYWRpbmcgcmVjb3JkaW5nIHNjcmlwdCBkYXRhIC4uLlwiKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHNjckxvYWRlci5zZW5kKCk7XHJcbiAgLy8gfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jb25maWd1cmUoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cdFx0YXVkaW9QbGF5ZXJVcGRhdGUoZTpBdWRpb1BsYXllckV2ZW50KXtcclxuXHRcdFx0aWYoUGxheWJhY2tFdmVudFR5cGUuU1RBUlRFRD09PWUudHlwZSl7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPXRydWU7XHJcblx0XHRcdFx0Ly90aGlzLnN0b3BCdG4uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuXHRcdFx0XHR0aGlzLnNtLnN0YXR1c01zZz0nUGxheWJhY2suLi4nO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChQbGF5YmFja0V2ZW50VHlwZS5FTkRFRCA9PT0gZS50eXBlKSB7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPWZhbHNlO1xyXG5cdFx0XHRcdC8vdGhpcy5zdG9wQnRuLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcblx0XHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J1JlYWR5Lic7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVycm9yKCl7XHJcblx0XHQgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J0VSUk9SOiBSZWNvcmRpbmcuJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuLy9cclxuLy9cclxuLy8gZnVuY3Rpb24gc3BlZWNocmVjb3JkZXJJbml0KCkge1xyXG4vLyBcdHZhciBzcHIgPSBuZXcgaXBzLmFwcHMuc3BlZWVjaHJlY29yZGVyLlNwZWVjaFJlY29yZGVyKCk7XHJcbi8vIFx0c3ByLmluaXQoKTtcclxuLy8gICBzcHIuc3RhcnQoKTtcclxuLy9cclxuLy9cclxuLy8gfVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '2.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export const VERSION = '2.19.0';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByLm1vZHVsZS52ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3Nwci5tb2R1bGUudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT049JzIuMTkuMCciXX0=
|
|
@@ -18,6 +18,8 @@ export class LevelBarDisplay {
|
|
|
18
18
|
this.peakDbLevelStr = "-___ dB";
|
|
19
19
|
this.peakDbLvl = MIN_DB_LEVEL;
|
|
20
20
|
this._displayLevelInfos = null;
|
|
21
|
+
this._agc = undefined;
|
|
22
|
+
this.agcString = 'n/a';
|
|
21
23
|
this.onShowRecordingDetails = new EventEmitter();
|
|
22
24
|
this.onDownloadRecording = new EventEmitter();
|
|
23
25
|
this.playStartEnabled = false;
|
|
@@ -26,6 +28,20 @@ export class LevelBarDisplay {
|
|
|
26
28
|
this.destroyed = false;
|
|
27
29
|
this.warnDbLevel = DEFAULT_WARN_DB_LEVEL;
|
|
28
30
|
}
|
|
31
|
+
set agc(agc) {
|
|
32
|
+
this._agc = agc;
|
|
33
|
+
if (this._agc === undefined || this._agc === null) {
|
|
34
|
+
this.agcString = 'n/a';
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
if (this._agc === true) {
|
|
38
|
+
this.agcString = 'On';
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.agcString = 'Off';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
29
45
|
ngOnDestroy() {
|
|
30
46
|
this.destroyed = true;
|
|
31
47
|
}
|
|
@@ -75,7 +91,7 @@ export class LevelBarDisplay {
|
|
|
75
91
|
}
|
|
76
92
|
}
|
|
77
93
|
LevelBarDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.10", ngImport: i0, type: LevelBarDisplay, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
78
|
-
LevelBarDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.10", type: LevelBarDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], ngImport: i0, template: `
|
|
94
|
+
LevelBarDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.10", type: LevelBarDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", agc: "agc", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], ngImport: i0, template: `
|
|
79
95
|
<audio-levelbar [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
|
|
80
96
|
<button matTooltip="Start playback" (click)="playStartAction?.perform()"
|
|
81
97
|
[disabled]="playStartAction?.disabled"
|
|
@@ -96,7 +112,8 @@ LevelBarDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
|
|
|
96
112
|
<mat-icon>file_download</mat-icon>
|
|
97
113
|
</button>
|
|
98
114
|
<div style="min-width: 14ch;padding:2px"><table border="0"><tr><td>Peak:</td><td><span matTooltip="Peak level"
|
|
99
|
-
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr
|
|
115
|
+
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
|
|
116
|
+
<tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
|
|
100
117
|
`, isInline: true, styles: [":host {\n flex: 0; /* only required vertical space */\n width: 100%;\n background: darkgray;\n padding: 4px;\n box-sizing: border-box;\n height: 100px;\n min-height: 100px;\n display: flex; /* flex container: left level bar, right decimal peak level value */\n flex-direction: row;\n flex-wrap: nowrap; /* wrap could completely destroy the layout */\n }", "audio-levelbar {\n flex: 1;\n box-sizing: border-box;\n }", "span {\n flex: 0;\n font-weight: bold;\n display: inline-block;\n white-space: nowrap;\n box-sizing: border-box;\n }"], components: [{ type: i1.LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "number": i4.DecimalPipe } });
|
|
101
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.10", ngImport: i0, type: LevelBarDisplay, decorators: [{
|
|
102
119
|
type: Component,
|
|
@@ -123,7 +140,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.10", ngImpo
|
|
|
123
140
|
<mat-icon>file_download</mat-icon>
|
|
124
141
|
</button>
|
|
125
142
|
<div style="min-width: 14ch;padding:2px"><table border="0"><tr><td>Peak:</td><td><span matTooltip="Peak level"
|
|
126
|
-
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr
|
|
143
|
+
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
|
|
144
|
+
<tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
|
|
127
145
|
`,
|
|
128
146
|
styles: [`:host {
|
|
129
147
|
flex: 0; /* only required vertical space */
|
|
@@ -156,6 +174,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.10", ngImpo
|
|
|
156
174
|
type: Input
|
|
157
175
|
}], enableDownload: [{
|
|
158
176
|
type: Input
|
|
177
|
+
}], agc: [{
|
|
178
|
+
type: Input
|
|
159
179
|
}], onShowRecordingDetails: [{
|
|
160
180
|
type: Output
|
|
161
181
|
}], onDownloadRecording: [{
|
|
@@ -169,4 +189,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.10", ngImpo
|
|
|
169
189
|
}], displayLevelInfos: [{
|
|
170
190
|
type: Input
|
|
171
191
|
}] } });
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZWxldmVsX2Rpc3BsYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdWkvbGl2ZWxldmVsX2Rpc3BsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNnQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQ2hGLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQTtBQUV0QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUkvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFrRHhDLE1BQU0sT0FBTyxlQUFlO0lBMkJ4QixZQUFvQixHQUFlLEVBQVUsaUJBQW9DO1FBQTdELFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBekJqRixPQUFFLEdBQXNCLElBQUksQ0FBQztRQUVwQixrQkFBYSxHQUFVLEtBQUssQ0FBQztRQUM3Qix5QkFBb0IsR0FBVSxJQUFJLENBQUM7UUFFbkMsbUJBQWMsR0FBVSxLQUFLLENBQUM7UUFDdkMsbUJBQWMsR0FBRyxTQUFTLENBQUM7UUFDM0IsY0FBUyxHQUFHLFlBQVksQ0FBQztRQUV6Qix1QkFBa0IsR0FBb0IsSUFBSSxDQUFDO1FBRWpDLDJCQUFzQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3RFLHdCQUFtQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBSzdFLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUNoQixrQkFBYSxHQUFjLElBQUksQ0FBQztRQUVoQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGdCQUFXLEdBQUcscUJBQXFCLENBQUM7SUFJcEMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBR0QsSUFDSSxrQkFBa0IsQ0FBQyxrQkFBaUQ7UUFDcEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztRQUNqQyx3Q0FBd0M7SUFDNUMsQ0FBQztJQUVELElBQ0ksaUJBQWlCLENBQUMsVUFBNkI7UUFDL0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsWUFBb0I7UUFDakMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQy9DLENBQUM7SUFFSCxJQUFJLGlCQUFpQixDQUFDLGlCQUF5QjtRQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFDLGlCQUFpQixDQUFDO0lBQ3JELENBQUM7SUFFQyxNQUFNLENBQUMsU0FBb0IsRUFBRSxhQUF3QjtRQUNqRCxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRTtZQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUs7UUFDRCx5QkFBeUI7SUFDN0IsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBRXBDLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFHbEMsQ0FBQzs7NkdBL0ZRLGVBQWU7aUdBQWYsZUFBZSwwZUFHYixRQUFRLDhEQWpEVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNCVDs0RkF3QlEsZUFBZTtrQkFoRDNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBc0JUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7Ozs7OztNQVdQLEVBQUU7OztNQUdGLEVBQUU7Ozs7OztNQU1GLENBQUM7aUJBRU47aUlBSTBDLFNBQVM7c0JBQS9DLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDNUIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFNSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdFLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFtQkYsa0JBQWtCO3NCQURyQixLQUFLO2dCQXVCRixpQkFBaUI7c0JBRHBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7TGV2ZWxJbmZvLCBMZXZlbEluZm9zLCBMZXZlbExpc3RlbmVyfSBmcm9tIFwiLi4vYXVkaW8vZHNwL2xldmVsX21lYXN1cmVcIjtcclxuaW1wb3J0IHtMZXZlbEJhcn0gZnJvbSBcIi4uL2F1ZGlvL3VpL2xpdmVsZXZlbFwiO1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uL2FjdGlvbi9hY3Rpb25cIjtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgTUlOX0RCX0xFVkVMID0gLTQwLjA7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1dBUk5fREJfTEVWRUwgPSAtMjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzcHItcmVjb3JkaW5naXRlbWRpc3BsYXknLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8YXVkaW8tbGV2ZWxiYXIgW3N0cmVhbWluZ01vZGVdPVwic3RyZWFtaW5nTW9kZVwiIFtkaXNwbGF5TGV2ZWxJbmZvc109XCJfZGlzcGxheUxldmVsSW5mb3NcIj48L2F1ZGlvLWxldmVsYmFyPlxyXG4gICAgICAgIDxidXR0b24gbWF0VG9vbHRpcD1cIlN0YXJ0IHBsYXliYWNrXCIgKGNsaWNrKT1cInBsYXlTdGFydEFjdGlvbj8ucGVyZm9ybSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwbGF5U3RhcnRBY3Rpb24/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJwbGF5U3RhcnRBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ2dyZWVuJ1wiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+cGxheV9hcnJvdzwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXRUb29sdGlwPVwiU3RvcCBwbGF5YmFja1wiIChjbGljayk9XCJwbGF5U3RvcEFjdGlvbj8ucGVyZm9ybSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwbGF5U3RvcEFjdGlvbj8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInBsYXlTdG9wQWN0aW9uPy5kaXNhYmxlZCA/ICdncmV5JyA6ICd5ZWxsb3cnXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zdG9wPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJUb2dnbGUgZGV0YWlsZWQgYXVkaW8gZGlzcGxheVwiIFtkaXNhYmxlZF09XCJkaXNwbGF5QXVkaW9CdWZmZXI9PW51bGxcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dSZWNvcmRpbmdEZXRhaWxzKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnt7KGF1ZGlvU2lnbmFsQ29sbGFwc2VkKSA/IFwiZXhwYW5kX2xlc3NcIiA6IFwiZXhwYW5kX21vcmVcIn19PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJEb3dubG9hZCBjdXJyZW50IHJlY29yZGluZ1wiICpuZ0lmPVwiZW5hYmxlRG93bmxvYWRcIiBbZGlzYWJsZWRdPVwiZGlzcGxheUF1ZGlvQnVmZmVyPT1udWxsXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFJlY29yZGluZygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwibWluLXdpZHRoOiAxNGNoO3BhZGRpbmc6MnB4XCI+PHRhYmxlIGJvcmRlcj1cIjBcIj48dHI+PHRkPlBlYWs6PC90ZD48dGQ+PHNwYW4gbWF0VG9vbHRpcD1cIlBlYWsgbGV2ZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiKHBlYWtEYkx2bCA+IHdhcm5EYkxldmVsKT8ncmVkJzonYmxhY2snXCI+e3twZWFrRGJMdmwgfCBudW1iZXI6JzEuMS0xJ319IGRCIDwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5cclxuICAgIGAsXHJcbiAgICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgICAgIGZsZXg6IDA7IC8qIG9ubHkgcmVxdWlyZWQgdmVydGljYWwgc3BhY2UgKi9cclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZ3JheTtcclxuICAgICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBoZWlnaHQ6IDEwMHB4O1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDEwMHB4O1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7IC8qIGZsZXggY29udGFpbmVyOiBsZWZ0IGxldmVsIGJhciwgcmlnaHQgZGVjaW1hbCBwZWFrIGxldmVsIHZhbHVlICovXHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsgLyogd3JhcCBjb3VsZCBjb21wbGV0ZWx5IGRlc3Ryb3kgdGhlIGxheW91dCAqL1xyXG4gICAgfWAsIGBhdWRpby1sZXZlbGJhciB7XHJcbiAgICAgICAgZmxleDogMTtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfWAsIGBzcGFuIHtcclxuICAgICAgICBmbGV4OiAwO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMZXZlbEJhckRpc3BsYXkgaW1wbGVtZW50cyBMZXZlbExpc3RlbmVyLCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIGNlOiBIVE1MRGl2RWxlbWVudHxudWxsPW51bGw7XHJcbiAgICBAVmlld0NoaWxkKExldmVsQmFyLCB7IHN0YXRpYzogdHJ1ZSB9KSBsaXZlTGV2ZWwhOiBMZXZlbEJhcjtcclxuICAgIEBJbnB1dCgpIHN0cmVhbWluZ01vZGU6IGJvb2xlYW49ZmFsc2U7XHJcbiAgICBASW5wdXQoKSBhdWRpb1NpZ25hbENvbGxhcHNlZDogYm9vbGVhbj10cnVlO1xyXG4gICAgcHJpdmF0ZSBfZGlzcGxheUF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGx8dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgZW5hYmxlRG93bmxvYWQ6IGJvb2xlYW49ZmFsc2U7XHJcbiAgICBwZWFrRGJMZXZlbFN0ciA9IFwiLV9fXyBkQlwiO1xyXG4gICAgcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG5cclxuICAgIF9kaXNwbGF5TGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGw9bnVsbDtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25TaG93UmVjb3JkaW5nRGV0YWlsczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIG9uRG93bmxvYWRSZWNvcmRpbmc6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvL0BJbnB1dCgpIGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXI7XHJcbiAgICBASW5wdXQoKSBwbGF5U3RhcnRBY3Rpb246QWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIHBsYXlTdG9wQWN0aW9uOkFjdGlvbjx2b2lkPnx1bmRlZmluZWQ7XHJcbiAgICBwbGF5U3RhcnRFbmFibGVkID0gZmFsc2U7XHJcbiAgICBwbGF5U3RvcEVuYWJsZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdXBkYXRlVGltZXJJZDogbnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xyXG5cclxuICAgIHdhcm5EYkxldmVsID0gREVGQVVMVF9XQVJOX0RCX0xFVkVMO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzcGxheUF1ZGlvQnVmZmVyKGRpc3BsYXlBdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIgfCBudWxsfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5QXVkaW9CdWZmZXIgPSBkaXNwbGF5QXVkaW9CdWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRpc3BsYXlBdWRpb0J1ZmZlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUF1ZGlvQnVmZmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dSZWNvcmRpbmdEZXRhaWxzKCkge1xyXG4gICAgICAgIHRoaXMub25TaG93UmVjb3JkaW5nRGV0YWlscy5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRSZWNvcmRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5vbkRvd25sb2FkUmVjb3JkaW5nLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jZSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgLy90aGlzLmNvbnRyb2xBdWRpb1BsYXllci5saXN0ZW5lcj10aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzcGxheUxldmVsSW5mb3MobGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5TGV2ZWxJbmZvcyA9IGxldmVsSW5mb3M7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNoYW5uZWxDb3VudChjaGFubmVsQ291bnQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmxpdmVMZXZlbC5jaGFubmVsQ291bnQgPSBjaGFubmVsQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gIHNldCBwbGF5RnJhbWVQb3NpdGlvbihwbGF5RnJhbWVQb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxpdmVMZXZlbC5wbGF5RnJhbWVQb3NpdGlvbj1wbGF5RnJhbWVQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gICAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pIHtcclxuICAgICAgICBsZXQgcGVha0RCVmFsID0gbGV2ZWxJbmZvLnBvd2VyTGV2ZWxEQigpO1xyXG4gICAgICAgIGlmICh0aGlzLnBlYWtEYkx2bCA8IHBlYWtEQlZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlYWtEYkx2bCA9IHBlYWtEQlZhbDtcclxuICAgICAgICAgICAgLy8gdGhlIGV2ZW50IGNvbWVzIGZyb20gb3V0c2lkZSBvZiBhbiBBbmd1bGFyIHpvbmVcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGl2ZUxldmVsLnVwZGF0ZShsZXZlbEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGVycm9yKCkge1xyXG4gICAgICAgIC8vIHRoaXMuc3RhdHVzID0gJ0VSUk9SJztcclxuICAgIH1cclxuXHJcbiAgICBzdHJlYW1GaW5pc2hlZCgpIHtcclxuICAgICAgICB0aGlzLmxpdmVMZXZlbC5zdHJlYW1GaW5pc2hlZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICB0aGlzLnBlYWtEYkx2bCA9IE1JTl9EQl9MRVZFTDtcclxuXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZWxldmVsX2Rpc3BsYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdWkvbGl2ZWxldmVsX2Rpc3BsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNnQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQ2hGLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQTtBQUV0QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUkvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFtRHhDLE1BQU0sT0FBTyxlQUFlO0lBMkN4QixZQUFvQixHQUFlLEVBQVUsaUJBQW9DO1FBQTdELFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBekNqRixPQUFFLEdBQXNCLElBQUksQ0FBQztRQUVwQixrQkFBYSxHQUFVLEtBQUssQ0FBQztRQUM3Qix5QkFBb0IsR0FBVSxJQUFJLENBQUM7UUFFbkMsbUJBQWMsR0FBVSxLQUFLLENBQUM7UUFDdkMsbUJBQWMsR0FBRyxTQUFTLENBQUM7UUFDM0IsY0FBUyxHQUFHLFlBQVksQ0FBQztRQUV6Qix1QkFBa0IsR0FBb0IsSUFBSSxDQUFDO1FBRTNDLFNBQUksR0FBd0IsU0FBUyxDQUFDO1FBQ3RDLGNBQVMsR0FBQyxLQUFLLENBQUM7UUFlTiwyQkFBc0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0RSx3QkFBbUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUs3RSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDaEIsa0JBQWEsR0FBYyxJQUFJ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USxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDNUIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFTTyxHQUFHO3NCQUFmLEtBQUs7Z0JBYUksc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFHRSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBbUJGLGtCQUFrQjtzQkFEckIsS0FBSztnQkF1QkYsaUJBQWlCO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQge0xldmVsSW5mbywgTGV2ZWxJbmZvcywgTGV2ZWxMaXN0ZW5lcn0gZnJvbSBcIi4uL2F1ZGlvL2RzcC9sZXZlbF9tZWFzdXJlXCI7XHJcbmltcG9ydCB7TGV2ZWxCYXJ9IGZyb20gXCIuLi9hdWRpby91aS9saXZlbGV2ZWxcIjtcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi9hY3Rpb24vYWN0aW9uXCI7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IE1JTl9EQl9MRVZFTCA9IC00MC4wO1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9XQVJOX0RCX0xFVkVMID0gLTI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc3ByLXJlY29yZGluZ2l0ZW1kaXNwbGF5JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGF1ZGlvLWxldmVsYmFyIFtzdHJlYW1pbmdNb2RlXT1cInN0cmVhbWluZ01vZGVcIiBbZGlzcGxheUxldmVsSW5mb3NdPVwiX2Rpc3BsYXlMZXZlbEluZm9zXCI+PC9hdWRpby1sZXZlbGJhcj5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJTdGFydCBwbGF5YmFja1wiIChjbGljayk9XCJwbGF5U3RhcnRBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGxheVN0YXJ0QWN0aW9uPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwicGxheVN0YXJ0QWN0aW9uPy5kaXNhYmxlZCA/ICdncmV5JyA6ICdncmVlbidcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnBsYXlfYXJyb3c8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0VG9vbHRpcD1cIlN0b3AgcGxheWJhY2tcIiAoY2xpY2spPVwicGxheVN0b3BBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGxheVN0b3BBY3Rpb24/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJwbGF5U3RvcEFjdGlvbj8uZGlzYWJsZWQgPyAnZ3JleScgOiAneWVsbG93J1wiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+c3RvcDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXRUb29sdGlwPVwiVG9nZ2xlIGRldGFpbGVkIGF1ZGlvIGRpc3BsYXlcIiBbZGlzYWJsZWRdPVwiZGlzcGxheUF1ZGlvQnVmZmVyPT1udWxsXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93UmVjb3JkaW5nRGV0YWlscygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj57eyhhdWRpb1NpZ25hbENvbGxhcHNlZCkgPyBcImV4cGFuZF9sZXNzXCIgOiBcImV4cGFuZF9tb3JlXCJ9fTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXRUb29sdGlwPVwiRG93bmxvYWQgY3VycmVudCByZWNvcmRpbmdcIiAqbmdJZj1cImVuYWJsZURvd25sb2FkXCIgW2Rpc2FibGVkXT1cImRpc3BsYXlBdWRpb0J1ZmZlcj09bnVsbFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1pbi13aWR0aDogMTRjaDtwYWRkaW5nOjJweFwiPjx0YWJsZSBib3JkZXI9XCIwXCI+PHRyPjx0ZD5QZWFrOjwvdGQ+PHRkPjxzcGFuIG1hdFRvb2x0aXA9XCJQZWFrIGxldmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIihwZWFrRGJMdmwgPiB3YXJuRGJMZXZlbCk/J3JlZCc6J2JsYWNrJ1wiPnt7cGVha0RiTHZsIHwgbnVtYmVyOicxLjEtMSd9fSBkQiA8L3NwYW4+PC90ZD48L3RyPlxyXG4gICAgICAgICAgPHRyICpuZ0lmPVwiX2FnY1wiPjx0ZD5BR0M6PC90ZD48dGQ+PHNwYW4gbWF0VG9vbHRpcD1cIkF1dG8gZ2FpbiBjb250cm9sXCI+e3thZ2NTdHJpbmd9fTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5cclxuICAgIGAsXHJcbiAgICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgICAgIGZsZXg6IDA7IC8qIG9ubHkgcmVxdWlyZWQgdmVydGljYWwgc3BhY2UgKi9cclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZ3JheTtcclxuICAgICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBoZWlnaHQ6IDEwMHB4O1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDEwMHB4O1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7IC8qIGZsZXggY29udGFpbmVyOiBsZWZ0IGxldmVsIGJhciwgcmlnaHQgZGVjaW1hbCBwZWFrIGxldmVsIHZhbHVlICovXHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsgLyogd3JhcCBjb3VsZCBjb21wbGV0ZWx5IGRlc3Ryb3kgdGhlIGxheW91dCAqL1xyXG4gICAgfWAsIGBhdWRpby1sZXZlbGJhciB7XHJcbiAgICAgICAgZmxleDogMTtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfWAsIGBzcGFuIHtcclxuICAgICAgICBmbGV4OiAwO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMZXZlbEJhckRpc3BsYXkgaW1wbGVtZW50cyBMZXZlbExpc3RlbmVyLCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIGNlOiBIVE1MRGl2RWxlbWVudHxudWxsPW51bGw7XHJcbiAgICBAVmlld0NoaWxkKExldmVsQmFyLCB7IHN0YXRpYzogdHJ1ZSB9KSBsaXZlTGV2ZWwhOiBMZXZlbEJhcjtcclxuICAgIEBJbnB1dCgpIHN0cmVhbWluZ01vZGU6IGJvb2xlYW49ZmFsc2U7XHJcbiAgICBASW5wdXQoKSBhdWRpb1NpZ25hbENvbGxhcHNlZDogYm9vbGVhbj10cnVlO1xyXG4gICAgcHJpdmF0ZSBfZGlzcGxheUF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGx8dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgZW5hYmxlRG93bmxvYWQ6IGJvb2xlYW49ZmFsc2U7XHJcbiAgICBwZWFrRGJMZXZlbFN0ciA9IFwiLV9fXyBkQlwiO1xyXG4gICAgcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG5cclxuICAgIF9kaXNwbGF5TGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGw9bnVsbDtcclxuXHJcbiAgICBfYWdjOmJvb2xlYW58bnVsbHx1bmRlZmluZWQ9dW5kZWZpbmVkO1xyXG4gICAgYWdjU3RyaW5nPSduL2EnO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBhZ2MoYWdjOmJvb2xlYW58bnVsbHx1bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLl9hZ2M9YWdjO1xyXG4gICAgICBpZih0aGlzLl9hZ2M9PT11bmRlZmluZWQgfHwgdGhpcy5fYWdjPT09bnVsbCl7XHJcbiAgICAgICAgdGhpcy5hZ2NTdHJpbmc9J24vYSc7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGlmKHRoaXMuX2FnYz09PXRydWUpe1xyXG4gICAgICAgICAgdGhpcy5hZ2NTdHJpbmc9J09uJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRoaXMuYWdjU3RyaW5nPSdPZmYnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBvblNob3dSZWNvcmRpbmdEZXRhaWxzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Eb3dubG9hZFJlY29yZGluZzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8vQElucHV0KCkgY29udHJvbEF1ZGlvUGxheWVyOiBBdWRpb1BsYXllcjtcclxuICAgIEBJbnB1dCgpIHBsYXlTdGFydEFjdGlvbjpBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgcGxheVN0b3BBY3Rpb246QWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIHBsYXlTdGFydEVuYWJsZWQgPSBmYWxzZTtcclxuICAgIHBsYXlTdG9wRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XHJcblxyXG4gICAgd2FybkRiTGV2ZWwgPSBERUZBVUxUX1dBUk5fREJfTEVWRUw7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBkaXNwbGF5QXVkaW9CdWZmZXIoZGlzcGxheUF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciB8IG51bGx8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlBdWRpb0J1ZmZlciA9IGRpc3BsYXlBdWRpb0J1ZmZlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlzcGxheUF1ZGlvQnVmZmVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5QXVkaW9CdWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1JlY29yZGluZ0RldGFpbHMoKSB7XHJcbiAgICAgICAgdGhpcy5vblNob3dSZWNvcmRpbmdEZXRhaWxzLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZFJlY29yZGluZygpIHtcclxuICAgICAgICB0aGlzLm9uRG93bmxvYWRSZWNvcmRpbmcuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNlID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAvL3RoaXMuY29udHJvbEF1ZGlvUGxheWVyLmxpc3RlbmVyPXRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBkaXNwbGF5TGV2ZWxJbmZvcyhsZXZlbEluZm9zOiBMZXZlbEluZm9zIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlMZXZlbEluZm9zID0gbGV2ZWxJbmZvcztcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY2hhbm5lbENvdW50KGNoYW5uZWxDb3VudDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMubGl2ZUxldmVsLmNoYW5uZWxDb3VudCA9IGNoYW5uZWxDb3VudDtcclxuICAgIH1cclxuXHJcbiAgc2V0IHBsYXlGcmFtZVBvc2l0aW9uKHBsYXlGcmFtZVBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIHRoaXMubGl2ZUxldmVsLnBsYXlGcmFtZVBvc2l0aW9uPXBsYXlGcmFtZVBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgICB1cGRhdGUobGV2ZWxJbmZvOiBMZXZlbEluZm8sIHBlYWtMZXZlbEluZm86IExldmVsSW5mbykge1xyXG4gICAgICAgIGxldCBwZWFrREJWYWwgPSBsZXZlbEluZm8ucG93ZXJMZXZlbERCKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucGVha0RiTHZsIDwgcGVha0RCVmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVha0RiTHZsID0gcGVha0RCVmFsO1xyXG4gICAgICAgICAgICAvLyB0aGUgZXZlbnQgY29tZXMgZnJvbSBvdXRzaWRlIG9mIGFuIEFuZ3VsYXIgem9uZVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saXZlTGV2ZWwudXBkYXRlKGxldmVsSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZXJyb3IoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG4gICAgfVxyXG5cclxuICAgIHN0cmVhbUZpbmlzaGVkKCkge1xyXG4gICAgICAgIHRoaXMubGl2ZUxldmVsLnN0cmVhbUZpbmlzaGVkKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMucGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG5cclxuXHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
export class UserAgentComponent {
|
|
2
|
+
constructor(name, version, comment) {
|
|
3
|
+
this.name = name;
|
|
4
|
+
this.version = version;
|
|
5
|
+
this.comment = comment;
|
|
6
|
+
}
|
|
7
|
+
toString() {
|
|
8
|
+
let s = '[' + this.name + ']';
|
|
9
|
+
if (this.version) {
|
|
10
|
+
s = s + ' [' + this.version + ']';
|
|
11
|
+
}
|
|
12
|
+
if (this.comment) {
|
|
13
|
+
s = s + ' [' + this.comment + ']';
|
|
14
|
+
}
|
|
15
|
+
return s;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export const NAME_FIREFOX = 'Firefox';
|
|
19
|
+
export const NAME_CHROME = 'Chrome';
|
|
20
|
+
export const NAME_SAFARI = 'Safari';
|
|
21
|
+
export const NAME_EDGE = 'Edge';
|
|
22
|
+
export var Browser;
|
|
23
|
+
(function (Browser) {
|
|
24
|
+
Browser["Firefox"] = "Firefox";
|
|
25
|
+
Browser["Chrome"] = "Chrome";
|
|
26
|
+
Browser["Safari"] = "Safari";
|
|
27
|
+
Browser["Edge"] = "Edge";
|
|
28
|
+
})(Browser || (Browser = {}));
|
|
29
|
+
export const OS_WINDOWS = 'Windows';
|
|
30
|
+
export const OS_ANDROID = 'Android';
|
|
31
|
+
export var Platform;
|
|
32
|
+
(function (Platform) {
|
|
33
|
+
Platform["Windows"] = "Windows";
|
|
34
|
+
Platform["Android"] = "Android";
|
|
35
|
+
Platform["macOS"] = "MAC OS X";
|
|
36
|
+
})(Platform || (Platform = {}));
|
|
37
|
+
export class UserAgent {
|
|
38
|
+
constructor(_detectedPlatform, _detectedBrowser) {
|
|
39
|
+
this._detectedPlatform = _detectedPlatform;
|
|
40
|
+
this._detectedBrowser = _detectedBrowser;
|
|
41
|
+
}
|
|
42
|
+
get detectedBrowser() {
|
|
43
|
+
return this._detectedBrowser;
|
|
44
|
+
}
|
|
45
|
+
get detectedPlatform() {
|
|
46
|
+
return this._detectedPlatform;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class UserAgentBuilder {
|
|
50
|
+
constructor() {
|
|
51
|
+
this.comps = new Array();
|
|
52
|
+
}
|
|
53
|
+
build() {
|
|
54
|
+
// // @ts-ignore
|
|
55
|
+
// if(navigator.userAgentData){
|
|
56
|
+
// // maybe we can use this in the future
|
|
57
|
+
// console.info("Browser provides userAgentData:");
|
|
58
|
+
//
|
|
59
|
+
// console.info("Brands:");
|
|
60
|
+
// // @ts-ignore
|
|
61
|
+
// navigator.userAgentData.brands.forEach((br=>{
|
|
62
|
+
// console.info(br.brand +" "+br.version);
|
|
63
|
+
// }))
|
|
64
|
+
// // @ts-ignore
|
|
65
|
+
// console.info("Platform: "+navigator.userAgentData.platform);
|
|
66
|
+
// // @ts-ignore
|
|
67
|
+
// console.info("Mobile:"+navigator.userAgentData.mobile);
|
|
68
|
+
// // @ts-ignore
|
|
69
|
+
// //console.info(navigator.userAgentData.toJSON());
|
|
70
|
+
// }else {
|
|
71
|
+
// console.info("Browser does not provide userAgentData.");
|
|
72
|
+
// }
|
|
73
|
+
let ua = navigator.userAgent;
|
|
74
|
+
this.comps = new Array();
|
|
75
|
+
let pp = 0;
|
|
76
|
+
while (pp < ua.length) {
|
|
77
|
+
//parse name/version
|
|
78
|
+
let name = null;
|
|
79
|
+
let version = null;
|
|
80
|
+
let comment;
|
|
81
|
+
let blPos = ua.indexOf(' ', pp);
|
|
82
|
+
let prt;
|
|
83
|
+
if (blPos == -1) {
|
|
84
|
+
prt = ua.substr(pp);
|
|
85
|
+
pp += prt.length;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
prt = ua.substr(pp, blPos - pp);
|
|
89
|
+
pp = blPos + 1;
|
|
90
|
+
}
|
|
91
|
+
let sepPos = prt.indexOf('/');
|
|
92
|
+
if (sepPos > 0) {
|
|
93
|
+
name = prt.substr(0, sepPos);
|
|
94
|
+
version = prt.substr(sepPos + 1);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
name = prt;
|
|
98
|
+
}
|
|
99
|
+
while (ua[pp] === ' ' && pp < ua.length) {
|
|
100
|
+
pp++;
|
|
101
|
+
}
|
|
102
|
+
if (ua[pp] === '(') {
|
|
103
|
+
pp++;
|
|
104
|
+
let commEnd = ua.indexOf(')', pp);
|
|
105
|
+
comment = ua.substr(pp, commEnd - pp);
|
|
106
|
+
pp = commEnd + 1;
|
|
107
|
+
}
|
|
108
|
+
while (ua[pp] === ' ' && pp < ua.length) {
|
|
109
|
+
pp++;
|
|
110
|
+
}
|
|
111
|
+
this.comps.push(new UserAgentComponent(name, version, comment));
|
|
112
|
+
}
|
|
113
|
+
let detPlatf = null;
|
|
114
|
+
if (this.runsOnOS(Platform.Android)) {
|
|
115
|
+
detPlatf = Platform.Android;
|
|
116
|
+
}
|
|
117
|
+
else if (this.runsOnOS(Platform.Windows)) {
|
|
118
|
+
detPlatf = Platform.Windows;
|
|
119
|
+
}
|
|
120
|
+
else if (this.runsOnOS(Platform.macOS)) {
|
|
121
|
+
detPlatf = Platform.macOS;
|
|
122
|
+
}
|
|
123
|
+
let detBr = null;
|
|
124
|
+
if (this.matchesBrowser(Browser.Firefox)) {
|
|
125
|
+
detBr = Browser.Firefox;
|
|
126
|
+
}
|
|
127
|
+
else if (this.matchesBrowser(Browser.Chrome)) {
|
|
128
|
+
detBr = Browser.Chrome;
|
|
129
|
+
}
|
|
130
|
+
else if (this.matchesBrowser(Browser.Safari)) {
|
|
131
|
+
detBr = Browser.Safari;
|
|
132
|
+
}
|
|
133
|
+
this.userAgent = new UserAgent(detPlatf, detBr);
|
|
134
|
+
}
|
|
135
|
+
matchesBrowser(browserName) {
|
|
136
|
+
for (let ci = 0; ci < this.comps.length; ci++) {
|
|
137
|
+
let bn = this.comps[ci].name;
|
|
138
|
+
let bnRe = new RegExp(browserName, 'i');
|
|
139
|
+
if (bn.match(bnRe)) {
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
runsOnOS(os) {
|
|
146
|
+
for (let ci = 0; ci < this.comps.length; ci++) {
|
|
147
|
+
let cc = this.comps[ci].comment;
|
|
148
|
+
if (cc) {
|
|
149
|
+
var osRe = new RegExp(os, 'i');
|
|
150
|
+
if (cc.match(osRe)) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
static userAgent() {
|
|
158
|
+
if (!this.instance) {
|
|
159
|
+
this.instance = new UserAgentBuilder();
|
|
160
|
+
}
|
|
161
|
+
this.instance.build();
|
|
162
|
+
return this.instance.userAgent;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
UserAgentBuilder.instance = undefined;
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWEtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3V0aWxzL3VhLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQW1CLElBQVcsRUFBUSxPQUFtQixFQUFRLE9BQWU7UUFBN0QsU0FBSSxHQUFKLElBQUksQ0FBTztRQUFRLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUSxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBRWhGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDO1FBQ3hCLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztZQUNkLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsR0FBRyxDQUFDO1NBQzNCO1FBQ0QsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO1lBQ2QsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxHQUFHLENBQUM7U0FDM0I7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDRjtBQUNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBQyxTQUFTLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFDLFFBQVEsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUMsUUFBUSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBQyxNQUFNLENBQUM7QUFJOUIsTUFBTSxDQUFOLElBQVksT0FBdUU7QUFBbkYsV0FBWSxPQUFPO0lBQUUsOEJBQWlCLENBQUE7SUFBQyw0QkFBZSxDQUFBO0lBQUMsNEJBQWUsQ0FBQTtJQUFDLHdCQUFXLENBQUE7QUFBQSxDQUFDLEVBQXZFLE9B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O2FBQ0Y7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTO1FBQ1osSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFFbkMsQ0FBQzs7QUExSE0seUJBQVEsR0FBNEIsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFVzZXJBZ2VudENvbXBvbmVudHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTpzdHJpbmcscHVibGljIHZlcnNpb246c3RyaW5nfG51bGwscHVibGljIGNvbW1lbnQ/OnN0cmluZykge1xyXG5cclxuICB9XHJcblxyXG4gIHRvU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgbGV0IHM9J1snK3RoaXMubmFtZSsnXSc7XHJcbiAgICBpZih0aGlzLnZlcnNpb24pe1xyXG4gICAgICBzPXMrJyBbJyt0aGlzLnZlcnNpb24rJ10nO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jb21tZW50KXtcclxuICAgICAgcz1zKycgWycrdGhpcy5jb21tZW50KyddJztcclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgTkFNRV9GSVJFRk9YPSdGaXJlZm94JztcclxuZXhwb3J0IGNvbnN0IE5BTUVfQ0hST01FPSdDaHJvbWUnO1xyXG5leHBvcnQgY29uc3QgTkFNRV9TQUZBUkk9J1NhZmFyaSc7XHJcbmV4cG9ydCBjb25zdCBOQU1FX0VER0U9J0VkZ2UnO1xyXG5cclxuXHJcblxyXG5leHBvcnQgZW51bSBCcm93c2VyIHtGaXJlZm94PSdGaXJlZm94JyxDaHJvbWU9J0Nocm9tZScsU2FmYXJpPSdTYWZhcmknLEVkZ2U9J0VkZ2UnfVxyXG5cclxuZXhwb3J0IGNvbnN0IE9TX1dJTkRPV1M9J1dpbmRvd3MnO1xyXG5leHBvcnQgY29uc3QgT1NfQU5EUk9JRD0nQW5kcm9pZCc7XHJcblxyXG5leHBvcnQgZW51bSBQbGF0Zm9ybSB7V2luZG93cz0nV2luZG93cycsQW5kcm9pZD0nQW5kcm9pZCcsbWFjT1M9J01BQyBPUyBYJ31cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyQWdlbnR7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RldGVjdGVkUGxhdGZvcm06UGxhdGZvcm18bnVsbCxwcml2YXRlIF9kZXRlY3RlZEJyb3dzZXI6QnJvd3NlcnxudWxsKSB7XHJcbiAgfVxyXG5cclxuICBnZXQgZGV0ZWN0ZWRCcm93c2VyKCk6IEJyb3dzZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXRlY3RlZEJyb3dzZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgZGV0ZWN0ZWRQbGF0Zm9ybSgpOiBQbGF0Zm9ybSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RldGVjdGVkUGxhdGZvcm07XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJBZ2VudEJ1aWxkZXIge1xyXG4gIHN0YXRpYyBpbnN0YW5jZTpVc2VyQWdlbnRCdWlsZGVyfHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBjb21wczpBcnJheTxVc2VyQWdlbnRDb21wb25lbnQ+PW5ldyBBcnJheTxVc2VyQWdlbnRDb21wb25lbnQ+KCk7XHJcbiAgcHJpdmF0ZSB1c2VyQWdlbnQhOlVzZXJBZ2VudDtcclxuXHJcbiAgcHJpdmF0ZSBidWlsZCgpIHtcclxuXHJcbiAgICAvLyAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyBpZihuYXZpZ2F0b3IudXNlckFnZW50RGF0YSl7XHJcbiAgICAvLyAgIC8vIG1heWJlIHdlIGNhbiB1c2UgdGhpcyBpbiAgdGhlIGZ1dHVyZVxyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJCcm93c2VyIHByb3ZpZGVzIHVzZXJBZ2VudERhdGE6XCIpO1xyXG4gICAgLy9cclxuICAgIC8vICAgY29uc29sZS5pbmZvKFwiQnJhbmRzOlwiKTtcclxuICAgIC8vICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgLy8gICBuYXZpZ2F0b3IudXNlckFnZW50RGF0YS5icmFuZHMuZm9yRWFjaCgoYnI9PntcclxuICAgIC8vICAgICBjb25zb2xlLmluZm8oYnIuYnJhbmQgK1wiIFwiK2JyLnZlcnNpb24pO1xyXG4gICAgLy8gICB9KSlcclxuICAgIC8vICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJQbGF0Zm9ybTogXCIrbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEucGxhdGZvcm0pO1xyXG4gICAgLy8gICAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIk1vYmlsZTpcIituYXZpZ2F0b3IudXNlckFnZW50RGF0YS5tb2JpbGUpO1xyXG4gICAgLy8gICAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyAgIC8vY29uc29sZS5pbmZvKG5hdmlnYXRvci51c2VyQWdlbnREYXRhLnRvSlNPTigpKTtcclxuICAgIC8vIH1lbHNlIHtcclxuICAgIC8vICAgY29uc29sZS5pbmZvKFwiQnJvd3NlciBkb2VzIG5vdCBwcm92aWRlIHVzZXJBZ2VudERhdGEuXCIpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGxldCB1YT1uYXZpZ2F0b3IudXNlckFnZW50O1xyXG5cclxuICAgIHRoaXMuY29tcHMgPSBuZXcgQXJyYXk8VXNlckFnZW50Q29tcG9uZW50PigpO1xyXG5cclxuICAgIGxldCBwcCA9IDA7XHJcbiAgICB3aGlsZSAocHAgPCB1YS5sZW5ndGgpIHtcclxuICAgICAgLy9wYXJzZSBuYW1lL3ZlcnNpb25cclxuICAgICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsXHJcbiAgICAgIGxldCB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgbGV0IGNvbW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGxldCBibFBvcyA9IHVhLmluZGV4T2YoJyAnLCBwcCk7XHJcbiAgICAgIGxldCBwcnQ6IHN0cmluZztcclxuICAgICAgaWYgKGJsUG9zID09IC0xKSB7XHJcbiAgICAgICAgcHJ0ID0gdWEuc3Vic3RyKHBwKTtcclxuICAgICAgICBwcCArPSBwcnQubGVuZ3RoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBydCA9IHVhLnN1YnN0cihwcCwgYmxQb3MgLSBwcCk7XHJcbiAgICAgICAgcHAgPSBibFBvcyArIDE7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHNlcFBvcyA9IHBydC5pbmRleE9mKCcvJyk7XHJcbiAgICAgIGlmIChzZXBQb3MgPiAwKSB7XHJcbiAgICAgICAgbmFtZSA9IHBydC5zdWJzdHIoMCwgc2VwUG9zKTtcclxuICAgICAgICB2ZXJzaW9uID0gcHJ0LnN1YnN0cihzZXBQb3MgKyAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuYW1lID0gcHJ0O1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlICh1YVtwcF0gPT09ICcgJyAmJiBwcCA8IHVhLmxlbmd0aCkge1xyXG4gICAgICAgIHBwKys7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHVhW3BwXSA9PT0gJygnKSB7XHJcbiAgICAgICAgcHArKztcclxuICAgICAgICBsZXQgY29tbUVuZCA9IHVhLmluZGV4T2YoJyknLCBwcCk7XHJcbiAgICAgICAgY29tbWVudCA9IHVhLnN1YnN0cihwcCwgY29tbUVuZCAtIHBwKTtcclxuICAgICAgICBwcCA9IGNvbW1FbmQgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlICh1YVtwcF0gPT09ICcgJyAmJiBwcCA8IHVhLmxlbmd0aCkge1xyXG4gICAgICAgIHBwKys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21wcy5wdXNoKG5ldyBVc2VyQWdlbnRDb21wb25lbnQobmFtZSwgdmVyc2lvbiwgY29tbWVudCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkZXRQbGF0ZjpQbGF0Zm9ybXxudWxsPW51bGw7XHJcbiAgICBpZih0aGlzLnJ1bnNPbk9TKFBsYXRmb3JtLkFuZHJvaWQpKXtcclxuICAgICAgZGV0UGxhdGY9UGxhdGZvcm0uQW5kcm9pZDtcclxuICAgIH1lbHNlIGlmKHRoaXMucnVuc09uT1MoUGxhdGZvcm0uV2luZG93cykpe1xyXG4gICAgICBkZXRQbGF0Zj1QbGF0Zm9ybS5XaW5kb3dzO1xyXG4gICAgfWVsc2UgaWYodGhpcy5ydW5zT25PUyhQbGF0Zm9ybS5tYWNPUykpe1xyXG4gICAgICBkZXRQbGF0Zj1QbGF0Zm9ybS5tYWNPUztcclxuICAgIH1cclxuXHJcblxyXG4gIGxldCBkZXRCcjpCcm93c2VyfG51bGw9bnVsbDtcclxuICAgIGlmKHRoaXMubWF0Y2hlc0Jyb3dzZXIoQnJvd3Nlci5GaXJlZm94KSl7XHJcbiAgICAgIGRldEJyPUJyb3dzZXIuRmlyZWZveDtcclxuICAgIH1lbHNlIGlmKHRoaXMubWF0Y2hlc0Jyb3dzZXIoQnJvd3Nlci5DaHJvbWUpKXtcclxuICAgICAgZGV0QnI9QnJvd3Nlci5DaHJvbWU7XHJcbiAgICB9ZWxzZSBpZih0aGlzLm1hdGNoZXNCcm93c2VyKEJyb3dzZXIuU2FmYXJpKSl7XHJcbiAgICAgIGRldEJyPUJyb3dzZXIuU2FmYXJpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXNlckFnZW50PW5ldyBVc2VyQWdlbnQoZGV0UGxhdGYsZGV0QnIpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWF0Y2hlc0Jyb3dzZXIoYnJvd3Nlck5hbWU6c3RyaW5nKXtcclxuICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNvbXBzLmxlbmd0aDtjaSsrKXtcclxuICAgICAgbGV0IGJuPXRoaXMuY29tcHNbY2ldLm5hbWVcclxuICAgICAgbGV0IGJuUmU9bmV3IFJlZ0V4cChicm93c2VyTmFtZSwnaScpO1xyXG4gICAgICBpZihibi5tYXRjaChiblJlKSl7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcnVuc09uT1Mob3M6c3RyaW5nKTpib29sZWFue1xyXG4gICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY29tcHMubGVuZ3RoO2NpKyspe1xyXG4gICAgICBsZXQgY2M9dGhpcy5jb21wc1tjaV0uY29tbWVudFxyXG4gICAgICBpZihjYyl7XHJcbiAgICAgICAgdmFyIG9zUmUgPSBuZXcgUmVnRXhwKG9zLCdpJyk7XHJcbiAgICAgICAgaWYoY2MubWF0Y2gob3NSZSkpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdXNlckFnZW50KCk6VXNlckFnZW50e1xyXG4gICAgICBpZighdGhpcy5pbnN0YW5jZSl7XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZT1uZXcgVXNlckFnZW50QnVpbGRlcigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYnVpbGQoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UudXNlckFnZW50O1xyXG5cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|