raain-app 1.5.26 → 1.5.29
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/CHANGELOG.md +18 -0
- package/README.md +3 -2
- package/esm2020/index.mjs +3 -1
- package/esm2020/pipes.module.mjs +68 -0
- package/esm2020/profile-icon.directive.mjs +143 -0
- package/esm2020/profile.service.mjs +10 -1
- package/esm2020/raain-details/raain-details.component.mjs +11 -8
- package/esm2020/raain-map/raain-map.component.mjs +3 -3
- package/esm2020/shared.module.mjs +13 -61
- package/esm2020/shared.pipe.mjs +10 -15
- package/esm2020/tools/RefreshManager.mjs +2 -2
- package/esm2020/tools/ReportManager.mjs +1 -2
- package/fesm2015/raain-app.mjs +255 -88
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +249 -88
- package/fesm2020/raain-app.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/package.json +4 -4
- package/pipes.module.d.ts +7 -0
- package/profile-icon.directive.d.ts +26 -0
- package/profile.service.d.ts +3 -0
- package/raain-details/raain-details.component.d.ts +2 -2
- package/shared.module.d.ts +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- RAD-121: with raain-ui 2.3.16, no editable charts, local dates everywhere
|
|
13
|
+
|
|
14
|
+
## [1.5.27] - 2025-06-30
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- RAD-92: UI refacto
|
|
19
|
+
|
|
20
|
+
### Documentation
|
|
21
|
+
|
|
22
|
+
- Updated README.md with latest version information
|
|
23
|
+
- Updated Memory Bank files with current project status
|
|
24
|
+
- Improved documentation clarity and consistency
|
|
25
|
+
|
|
26
|
+
## [1.5.26] - 2025-06-26
|
|
27
|
+
|
|
10
28
|
## [1.5.25] - 2025-06-24
|
|
11
29
|
|
|
12
30
|
### Dependencies
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<h1 align="center">RAAIN App</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<img src="https://img.shields.io/badge/version-1.5.
|
|
8
|
+
<img src="https://img.shields.io/badge/version-1.5.26-blue" alt="Version 1.5.26">
|
|
9
9
|
<img src="https://img.shields.io/badge/angular-latest-red" alt="Angular">
|
|
10
10
|
<img src="https://img.shields.io/badge/license-MIT-green" alt="License">
|
|
11
11
|
<img src="https://img.shields.io/badge/mobile-capacitor-blueviolet" alt="Mobile">
|
|
@@ -143,7 +143,8 @@ The application is in active development with a focus on stability, performance,
|
|
|
143
143
|
- Code cleanup and best practices implementation
|
|
144
144
|
|
|
145
145
|
### Version History
|
|
146
|
-
- **v1.5.
|
|
146
|
+
- **v1.5.26** (2025-06-26): Updated documentation and UI refactoring
|
|
147
|
+
- **v1.5.25** (2025-06-24): Updated raain-model to 3.0.14 and added progress bar
|
|
147
148
|
- **v1.5.24** (2025-06-16): Updated dependencies and enhanced build pipeline
|
|
148
149
|
- **v1.5.21** (2025-06-09): Minor updates and fixes
|
|
149
150
|
- **v1.5.20** (2025-06-09): Fixed compare functionality
|
package/esm2020/index.mjs
CHANGED
|
@@ -17,4 +17,6 @@ export * from './shared.pipe';
|
|
|
17
17
|
export * from './shared.module';
|
|
18
18
|
export * from './storage.service';
|
|
19
19
|
export * from './xytype';
|
|
20
|
-
|
|
20
|
+
export * from './profile-icon.directive';
|
|
21
|
+
export * from './pipes.module';
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFFeEQsY0FBYyxTQUFTLENBQUM7QUFFeEIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JhYWluLW1hcC9yYWFpbi1tYXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcmFhaW4tY29tcGFyZS9yYWFpbi1jb21wYXJlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3JhYWluLWNvbmZpZ3VyYXRpb24vcmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9yYWFpbi1kYXRlLWZvY3VzL3JhYWluLWRhdGUtZm9jdXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcmFhaW4tZGF0ZS1keW5hbWljL3JhYWluLWRhdGUtZHluYW1pYy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9yYWFpbi1zcGVlZC9yYWFpbi1zcGVlZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9yYWFpbi1jb21wYXJlLXN0YWNrL3JhYWluLWNvbXBhcmUtc3RhY2suY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcmFhaW4tZ2xvYmUvcmFhaW4tZ2xvYmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcmFhaW4tZGV0YWlscy9yYWFpbi1kZXRhaWxzLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vdG9vbHMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NhY2hlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9maWRqLXN0b3JhZ2UubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9maWxlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yYWRhci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmVkLmNvbnN0JztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmVkLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFyZWQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4veHl0eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZmlsZS1pY29uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzLm1vZHVsZSc7XG4iXX0=
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { AreInProgressPipe, AreReady, AreStopped, HasGoodQuality, HasNotGoodQuality, HaveNotBeenRed, IsNotReady, IsReady, ProgressBuffer, ProgressValue, TimeframeComputationProgress, TimeframeQualityProgress, WaitForValidation, } from './shared.pipe';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class PipesModule {
|
|
5
|
+
}
|
|
6
|
+
PipesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
+
PipesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: PipesModule, declarations: [AreStopped,
|
|
8
|
+
AreInProgressPipe,
|
|
9
|
+
AreReady,
|
|
10
|
+
IsReady,
|
|
11
|
+
IsNotReady,
|
|
12
|
+
WaitForValidation,
|
|
13
|
+
HasGoodQuality,
|
|
14
|
+
HasNotGoodQuality,
|
|
15
|
+
ProgressValue,
|
|
16
|
+
ProgressBuffer,
|
|
17
|
+
HaveNotBeenRed,
|
|
18
|
+
TimeframeComputationProgress,
|
|
19
|
+
TimeframeQualityProgress], exports: [AreStopped,
|
|
20
|
+
AreInProgressPipe,
|
|
21
|
+
AreReady,
|
|
22
|
+
IsReady,
|
|
23
|
+
IsNotReady,
|
|
24
|
+
WaitForValidation,
|
|
25
|
+
HasGoodQuality,
|
|
26
|
+
HasNotGoodQuality,
|
|
27
|
+
ProgressValue,
|
|
28
|
+
ProgressBuffer,
|
|
29
|
+
HaveNotBeenRed,
|
|
30
|
+
TimeframeComputationProgress,
|
|
31
|
+
TimeframeQualityProgress] });
|
|
32
|
+
PipesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PipesModule });
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PipesModule, decorators: [{
|
|
34
|
+
type: NgModule,
|
|
35
|
+
args: [{
|
|
36
|
+
declarations: [
|
|
37
|
+
AreStopped,
|
|
38
|
+
AreInProgressPipe,
|
|
39
|
+
AreReady,
|
|
40
|
+
IsReady,
|
|
41
|
+
IsNotReady,
|
|
42
|
+
WaitForValidation,
|
|
43
|
+
HasGoodQuality,
|
|
44
|
+
HasNotGoodQuality,
|
|
45
|
+
ProgressValue,
|
|
46
|
+
ProgressBuffer,
|
|
47
|
+
HaveNotBeenRed,
|
|
48
|
+
TimeframeComputationProgress,
|
|
49
|
+
TimeframeQualityProgress,
|
|
50
|
+
],
|
|
51
|
+
exports: [
|
|
52
|
+
AreStopped,
|
|
53
|
+
AreInProgressPipe,
|
|
54
|
+
AreReady,
|
|
55
|
+
IsReady,
|
|
56
|
+
IsNotReady,
|
|
57
|
+
WaitForValidation,
|
|
58
|
+
HasGoodQuality,
|
|
59
|
+
HasNotGoodQuality,
|
|
60
|
+
ProgressValue,
|
|
61
|
+
ProgressBuffer,
|
|
62
|
+
HaveNotBeenRed,
|
|
63
|
+
TimeframeComputationProgress,
|
|
64
|
+
TimeframeQualityProgress,
|
|
65
|
+
],
|
|
66
|
+
}]
|
|
67
|
+
}] });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3BpcGVzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFVBQVUsRUFDVixjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGNBQWMsRUFDZCxhQUFhLEVBQ2IsNEJBQTRCLEVBQzVCLHdCQUF3QixFQUN4QixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7O0FBa0N2QixNQUFNLE9BQU8sV0FBVzs7eUdBQVgsV0FBVzswR0FBWCxXQUFXLGlCQTlCaEIsVUFBVTtRQUNWLGlCQUFpQjtRQUNqQixRQUFRO1FBQ1IsT0FBTztRQUNQLFVBQVU7UUFDVixpQkFBaUI7UUFDakIsY0FBYztRQUNkLGlCQUFpQjtRQUNqQixhQUFhO1FBQ2IsY0FBYztRQUNkLGNBQWM7UUFDZCw0QkFBNEI7UUFDNUIsd0JBQXdCLGFBR3hCLFVBQVU7UUFDVixpQkFBaUI7UUFDakIsUUFBUTtRQUNSLE9BQU87UUFDUCxVQUFVO1FBQ1YsaUJBQWlCO1FBQ2pCLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsYUFBYTtRQUNiLGNBQWM7UUFDZCxjQUFjO1FBQ2QsNEJBQTRCO1FBQzVCLHdCQUF3QjswR0FHbkIsV0FBVzs0RkFBWCxXQUFXO2tCQWhDdkIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUU7d0JBQ1YsVUFBVTt3QkFDVixpQkFBaUI7d0JBQ2pCLFFBQVE7d0JBQ1IsT0FBTzt3QkFDUCxVQUFVO3dCQUNWLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3FCQUMzQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsVUFBVTt3QkFDVixpQkFBaUI7d0JBQ2pCLFFBQVE7d0JBQ1IsT0FBTzt3QkFDUCxVQUFVO3dCQUNWLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3FCQUMzQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBcmVJblByb2dyZXNzUGlwZSxcbiAgICBBcmVSZWFkeSxcbiAgICBBcmVTdG9wcGVkLFxuICAgIEhhc0dvb2RRdWFsaXR5LFxuICAgIEhhc05vdEdvb2RRdWFsaXR5LFxuICAgIEhhdmVOb3RCZWVuUmVkLFxuICAgIElzTm90UmVhZHksXG4gICAgSXNSZWFkeSxcbiAgICBQcm9ncmVzc0J1ZmZlcixcbiAgICBQcm9ncmVzc1ZhbHVlLFxuICAgIFRpbWVmcmFtZUNvbXB1dGF0aW9uUHJvZ3Jlc3MsXG4gICAgVGltZWZyYW1lUXVhbGl0eVByb2dyZXNzLFxuICAgIFdhaXRGb3JWYWxpZGF0aW9uLFxufSBmcm9tICcuL3NoYXJlZC5waXBlJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgQXJlU3RvcHBlZCxcbiAgICAgICAgQXJlSW5Qcm9ncmVzc1BpcGUsXG4gICAgICAgIEFyZVJlYWR5LFxuICAgICAgICBJc1JlYWR5LFxuICAgICAgICBJc05vdFJlYWR5LFxuICAgICAgICBXYWl0Rm9yVmFsaWRhdGlvbixcbiAgICAgICAgSGFzR29vZFF1YWxpdHksXG4gICAgICAgIEhhc05vdEdvb2RRdWFsaXR5LFxuICAgICAgICBQcm9ncmVzc1ZhbHVlLFxuICAgICAgICBQcm9ncmVzc0J1ZmZlcixcbiAgICAgICAgSGF2ZU5vdEJlZW5SZWQsXG4gICAgICAgIFRpbWVmcmFtZUNvbXB1dGF0aW9uUHJvZ3Jlc3MsXG4gICAgICAgIFRpbWVmcmFtZVF1YWxpdHlQcm9ncmVzcyxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgQXJlU3RvcHBlZCxcbiAgICAgICAgQXJlSW5Qcm9ncmVzc1BpcGUsXG4gICAgICAgIEFyZVJlYWR5LFxuICAgICAgICBJc1JlYWR5LFxuICAgICAgICBJc05vdFJlYWR5LFxuICAgICAgICBXYWl0Rm9yVmFsaWRhdGlvbixcbiAgICAgICAgSGFzR29vZFF1YWxpdHksXG4gICAgICAgIEhhc05vdEdvb2RRdWFsaXR5LFxuICAgICAgICBQcm9ncmVzc1ZhbHVlLFxuICAgICAgICBQcm9ncmVzc0J1ZmZlcixcbiAgICAgICAgSGF2ZU5vdEJlZW5SZWQsXG4gICAgICAgIFRpbWVmcmFtZUNvbXB1dGF0aW9uUHJvZ3Jlc3MsXG4gICAgICAgIFRpbWVmcmFtZVF1YWxpdHlQcm9ncmVzcyxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQaXBlc01vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./profile.service";
|
|
4
|
+
import * as i2 from "@angular/router";
|
|
5
|
+
// Helper function to pause execution for a specified time in milliseconds
|
|
6
|
+
function sleep(ms) {
|
|
7
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
8
|
+
}
|
|
9
|
+
export class ProfileIconDirective {
|
|
10
|
+
constructor(el, profileService, router) {
|
|
11
|
+
this.el = el;
|
|
12
|
+
this.profileService = profileService;
|
|
13
|
+
this.router = router;
|
|
14
|
+
this.isConnected = true;
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
// Check if the user is logged in and if the toolbar is not inside a modal
|
|
18
|
+
if (this.profileService.isLoggedIn() && !this.isInsideModal()) {
|
|
19
|
+
// Get the email from the profile service
|
|
20
|
+
const email = this.profileService.getEmail();
|
|
21
|
+
// Create the profile button element
|
|
22
|
+
const profileButtons = document.createElement('ion-buttons');
|
|
23
|
+
profileButtons.setAttribute('slot', 'primary');
|
|
24
|
+
// Create the button
|
|
25
|
+
const button = document.createElement('ion-button');
|
|
26
|
+
// Store references for later use
|
|
27
|
+
this.profileButton = button;
|
|
28
|
+
// Create the skeleton text element (hidden initially)
|
|
29
|
+
const skeleton = document.createElement('ion-skeleton-text');
|
|
30
|
+
skeleton.setAttribute('animated', 'true');
|
|
31
|
+
skeleton.style.width = '100px';
|
|
32
|
+
skeleton.style.height = '20px';
|
|
33
|
+
skeleton.style.borderRadius = '4px';
|
|
34
|
+
skeleton.style.margin = '8px 16px';
|
|
35
|
+
skeleton.style.display = 'none';
|
|
36
|
+
// Store reference to the skeleton text
|
|
37
|
+
this.skeletonText = skeleton;
|
|
38
|
+
// Add the skeleton text to the buttons container
|
|
39
|
+
profileButtons.appendChild(skeleton);
|
|
40
|
+
// Create the icon
|
|
41
|
+
const icon = document.createElement('ion-icon');
|
|
42
|
+
icon.setAttribute('name', 'person-circle-outline');
|
|
43
|
+
icon.setAttribute('slot', 'start');
|
|
44
|
+
// Create the label
|
|
45
|
+
const label = document.createElement('ion-label');
|
|
46
|
+
label.textContent = email;
|
|
47
|
+
// Assemble the button
|
|
48
|
+
button.appendChild(icon);
|
|
49
|
+
button.appendChild(label);
|
|
50
|
+
// Add click event listener to the button
|
|
51
|
+
button.addEventListener('click', () => {
|
|
52
|
+
this.navigateToProfile();
|
|
53
|
+
});
|
|
54
|
+
// Assemble the buttons container
|
|
55
|
+
profileButtons.appendChild(button);
|
|
56
|
+
// Append the buttons to the toolbar
|
|
57
|
+
this.el.nativeElement.appendChild(profileButtons);
|
|
58
|
+
// Start the background refresh timer (check every minute)
|
|
59
|
+
this.startBackgroundRefresh();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
ngOnDestroy() {
|
|
63
|
+
// Clear the timer when the directive is destroyed
|
|
64
|
+
if (this.refreshTimer) {
|
|
65
|
+
clearInterval(this.refreshTimer);
|
|
66
|
+
this.refreshTimer = null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
navigateToProfile() {
|
|
70
|
+
this.router.navigateByUrl('/profile');
|
|
71
|
+
}
|
|
72
|
+
startBackgroundRefresh() {
|
|
73
|
+
this.refreshTimer = setInterval(() => {
|
|
74
|
+
this.checkAndRefreshConnection();
|
|
75
|
+
}, 20000);
|
|
76
|
+
}
|
|
77
|
+
checkAndRefreshConnection() {
|
|
78
|
+
this.performConnectionRefresh();
|
|
79
|
+
}
|
|
80
|
+
showSkeletonText() {
|
|
81
|
+
if (this.skeletonText && this.profileButton) {
|
|
82
|
+
this.profileButton.style.display = 'none';
|
|
83
|
+
this.skeletonText.style.display = 'block';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
hideSkeletonText() {
|
|
87
|
+
if (this.skeletonText && this.profileButton) {
|
|
88
|
+
this.profileButton.style.display = 'flex';
|
|
89
|
+
this.skeletonText.style.display = 'none';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async performConnectionRefresh() {
|
|
93
|
+
// Show skeleton text and hide button during loading
|
|
94
|
+
this.showSkeletonText();
|
|
95
|
+
// Connection successful
|
|
96
|
+
this.isConnected = await this.profileService.isConnected();
|
|
97
|
+
if (this.isConnected) {
|
|
98
|
+
// Call the refresh function
|
|
99
|
+
if (this.profileService.needsConnectionRefresh()) {
|
|
100
|
+
await this.profileService.connectionRefresh();
|
|
101
|
+
}
|
|
102
|
+
await sleep(1000);
|
|
103
|
+
}
|
|
104
|
+
this.updateButtonState();
|
|
105
|
+
// Hide skeleton text and show button when loading is complete
|
|
106
|
+
this.hideSkeletonText();
|
|
107
|
+
}
|
|
108
|
+
updateButtonState() {
|
|
109
|
+
if (this.profileButton) {
|
|
110
|
+
if (this.isConnected) {
|
|
111
|
+
// Enable button
|
|
112
|
+
this.profileButton.removeAttribute('disabled');
|
|
113
|
+
this.profileButton.removeAttribute('title');
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// Disable button and add tooltip
|
|
117
|
+
this.profileButton.setAttribute('disabled', 'true');
|
|
118
|
+
this.profileButton.setAttribute('title', 'Profile unavailable - No connection');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Helper method to check if the toolbar is inside a modal
|
|
123
|
+
isInsideModal() {
|
|
124
|
+
let parent = this.el.nativeElement.parentElement;
|
|
125
|
+
// Traverse up the DOM tree to find if any parent is an ion-modal
|
|
126
|
+
while (parent) {
|
|
127
|
+
if (parent.tagName && parent.tagName.toLowerCase() === 'ion-modal') {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
parent = parent.parentElement;
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
ProfileIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProfileIconDirective, deps: [{ token: i0.ElementRef }, { token: i1.ProfileService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Directive });
|
|
136
|
+
ProfileIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ProfileIconDirective, selector: "ion-toolbar", ngImport: i0 });
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProfileIconDirective, decorators: [{
|
|
138
|
+
type: Directive,
|
|
139
|
+
args: [{
|
|
140
|
+
selector: 'ion-toolbar',
|
|
141
|
+
}]
|
|
142
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ProfileService }, { type: i2.Router }]; } });
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1pY29uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3NoYXJlZC9wcm9maWxlLWljb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWdDLE1BQU0sZUFBZSxDQUFDOzs7O0FBSXZFLDBFQUEwRTtBQUMxRSxTQUFTLEtBQUssQ0FBQyxFQUFVO0lBQ3JCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBS0QsTUFBTSxPQUFPLG9CQUFvQjtJQU03QixZQUNZLEVBQWMsRUFDZCxjQUE4QixFQUM5QixNQUFjO1FBRmQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTGxCLGdCQUFXLEdBQVksSUFBSSxDQUFDO0lBTWpDLENBQUM7SUFFSixRQUFRO1FBQ0osMEVBQTBFO1FBQzFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUMzRCx5Q0FBeUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUU3QyxvQ0FBb0M7WUFDcEMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RCxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUUvQyxvQkFBb0I7WUFDcEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVwRCxpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLGFBQWEs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QUFDO2FBQ25GO1NBQ0o7SUFDTCxDQUFDO0lBRUQsMERBQTBEO0lBQ2xELGFBQWE7UUFDakIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1FBRWpELGlFQUFpRTtRQUNqRSxPQUFPLE1BQU0sRUFBRTtZQUNYLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLFdBQVcsRUFBRTtnQkFDaEUsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1NBQ2pDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7a0hBM0pRLG9CQUFvQjtzR0FBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7aUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGF1c2UgZXhlY3V0aW9uIGZvciBhIHNwZWNpZmllZCB0aW1lIGluIG1pbGxpc2Vjb25kc1xuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2lvbi10b29sYmFyJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZUljb25EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWZyZXNoVGltZXI6IGFueTtcbiAgICBwcml2YXRlIHByb2ZpbGVCdXR0b246IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgc2tlbGV0b25UZXh0OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGlzQ29ubmVjdGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gYW5kIGlmIHRoZSB0b29sYmFyIGlzIG5vdCBpbnNpZGUgYSBtb2RhbFxuICAgICAgICBpZiAodGhpcy5wcm9maWxlU2VydmljZS5pc0xvZ2dlZEluKCkgJiYgIXRoaXMuaXNJbnNpZGVNb2RhbCgpKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGVtYWlsIGZyb20gdGhlIHByb2ZpbGUgc2VydmljZVxuICAgICAgICAgICAgY29uc3QgZW1haWwgPSB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldEVtYWlsKCk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgcHJvZmlsZSBidXR0b24gZWxlbWVudFxuICAgICAgICAgICAgY29uc3QgcHJvZmlsZUJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpb24tYnV0dG9ucycpO1xuICAgICAgICAgICAgcHJvZmlsZUJ1dHRvbnMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByaW1hcnknKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBidXR0b25cbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lvbi1idXR0b24nKTtcblxuICAgICAgICAgICAgLy8gU3RvcmUgcmVmZXJlbmNlcyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b24gPSBidXR0b247XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgc2tlbGV0b24gdGV4dCBlbGVtZW50IChoaWRkZW4gaW5pdGlhbGx5KVxuICAgICAgICAgICAgY29uc3Qgc2tlbGV0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpb24tc2tlbGV0b24tdGV4dCcpO1xuICAgICAgICAgICAgc2tlbGV0b24uc2V0QXR0cmlidXRlKCdhbmltYXRlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICBza2VsZXRvbi5zdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgICAgICAgICBza2VsZXRvbi5zdHlsZS5oZWlnaHQgPSAnMjBweCc7XG4gICAgICAgICAgICBza2VsZXRvbi5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4JztcbiAgICAgICAgICAgIHNrZWxldG9uLnN0eWxlLm1hcmdpbiA9ICc4cHggMTZweCc7XG4gICAgICAgICAgICBza2VsZXRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAvLyBTdG9yZSByZWZlcmVuY2UgdG8gdGhlIHNrZWxldG9uIHRleHRcbiAgICAgICAgICAgIHRoaXMuc2tlbGV0b25UZXh0ID0gc2tlbGV0b247XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgc2tlbGV0b24gdGV4dCB0byB0aGUgYnV0dG9ucyBjb250YWluZXJcbiAgICAgICAgICAgIHByb2ZpbGVCdXR0b25zLmFwcGVuZENoaWxkKHNrZWxldG9uKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBpY29uXG4gICAgICAgICAgICBjb25zdCBpY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW9uLWljb24nKTtcbiAgICAgICAgICAgIGljb24uc2V0QXR0cmlidXRlKCduYW1lJywgJ3BlcnNvbi1jaXJjbGUtb3V0bGluZScpO1xuICAgICAgICAgICAgaWNvbi5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAnc3RhcnQnKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBsYWJlbFxuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpb24tbGFiZWwnKTtcbiAgICAgICAgICAgIGxhYmVsLnRleHRDb250ZW50ID0gZW1haWw7XG5cbiAgICAgICAgICAgIC8vIEFzc2VtYmxlIHRoZSBidXR0b25cbiAgICAgICAgICAgIGJ1dHRvbi5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgICAgICAgIGJ1dHRvbi5hcHBlbmRDaGlsZChsYWJlbCk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBjbGljayBldmVudCBsaXN0ZW5lciB0byB0aGUgYnV0dG9uXG4gICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUHJvZmlsZSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEFzc2VtYmxlIHRoZSBidXR0b25zIGNvbnRhaW5lclxuICAgICAgICAgICAgcHJvZmlsZUJ1dHRvbnMuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBidXR0b25zIHRvIHRoZSB0b29sYmFyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQocHJvZmlsZUJ1dHRvbnMpO1xuXG4gICAgICAgICAgICAvLyBTdGFydCB0aGUgYmFja2dyb3VuZCByZWZyZXNoIHRpbWVyIChjaGVjayBldmVyeSBtaW51dGUpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0QmFja2dyb3VuZFJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBDbGVhciB0aGUgdGltZXIgd2hlbiB0aGUgZGlyZWN0aXZlIGlzIGRlc3Ryb3llZFxuICAgICAgICBpZiAodGhpcy5yZWZyZXNoVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZWZyZXNoVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmF2aWdhdGVUb1Byb2ZpbGUoKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9wcm9maWxlJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydEJhY2tncm91bmRSZWZyZXNoKCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRSZWZyZXNoQ29ubmVjdGlvbigpO1xuICAgICAgICB9LCAyMDAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0FuZFJlZnJlc2hDb25uZWN0aW9uKCkge1xuICAgICAgICB0aGlzLnBlcmZvcm1Db25uZWN0aW9uUmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1NrZWxldG9uVGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2tlbGV0b25UZXh0ICYmIHRoaXMucHJvZmlsZUJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uVGV4dC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZVNrZWxldG9uVGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2tlbGV0b25UZXh0ICYmIHRoaXMucHJvZmlsZUJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uVGV4dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtQ29ubmVjdGlvblJlZnJlc2goKSB7XG4gICAgICAgIC8vIFNob3cgc2tlbGV0b24gdGV4dCBhbmQgaGlkZSBidXR0b24gZHVyaW5nIGxvYWRpbmdcbiAgICAgICAgdGhpcy5zaG93U2tlbGV0b25UZXh0KCk7XG5cbiAgICAgICAgLy8gQ29ubmVjdGlvbiBzdWNjZXNzZnVsXG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmlzQ29ubmVjdGVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIHJlZnJlc2ggZnVuY3Rpb25cbiAgICAgICAgICAgIGlmICh0aGlzLnByb2ZpbGVTZXJ2aWNlLm5lZWRzQ29ubmVjdGlvblJlZnJlc2goKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuY29ubmVjdGlvblJlZnJlc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQnV0dG9uU3RhdGUoKTtcblxuICAgICAgICAvLyBIaWRlIHNrZWxldG9uIHRleHQgYW5kIHNob3cgYnV0dG9uIHdoZW4gbG9hZGluZyBpcyBjb21wbGV0ZVxuICAgICAgICB0aGlzLmhpZGVTa2VsZXRvblRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ1dHRvblN0YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9maWxlQnV0dG9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBidXR0b25cbiAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERpc2FibGUgYnV0dG9uIGFuZCBhZGQgdG9vbHRpcFxuICAgICAgICAgICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b24uc2V0QXR0cmlidXRlKCd0aXRsZScsICdQcm9maWxlIHVuYXZhaWxhYmxlIC0gTm8gY29ubmVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiB0aGUgdG9vbGJhciBpcyBpbnNpZGUgYSBtb2RhbFxuICAgIHByaXZhdGUgaXNJbnNpZGVNb2RhbCgpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIC8vIFRyYXZlcnNlIHVwIHRoZSBET00gdHJlZSB0byBmaW5kIGlmIGFueSBwYXJlbnQgaXMgYW4gaW9uLW1vZGFsXG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQudGFnTmFtZSAmJiBwYXJlbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW9uLW1vZGFsJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
|
|
@@ -46,6 +46,9 @@ export class ProfileService {
|
|
|
46
46
|
await this.checkError(e);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
+
async isConnected() {
|
|
50
|
+
return this.fidjService.isConnected();
|
|
51
|
+
}
|
|
49
52
|
getEmail() {
|
|
50
53
|
return this.email ?? this.storage.get('raain-email', this.email);
|
|
51
54
|
}
|
|
@@ -109,6 +112,12 @@ export class ProfileService {
|
|
|
109
112
|
console.log('isLoggedIn: ', loggedIn);
|
|
110
113
|
return loggedIn;
|
|
111
114
|
}
|
|
115
|
+
needsConnectionRefresh() {
|
|
116
|
+
return this.fidjService.needsRefresh();
|
|
117
|
+
}
|
|
118
|
+
async connectionRefresh() {
|
|
119
|
+
await this.fidjService.refresh();
|
|
120
|
+
}
|
|
112
121
|
async storeAll() {
|
|
113
122
|
return this.fidjStorage.storeData(this.fidjService, this.nodeData);
|
|
114
123
|
}
|
|
@@ -610,4 +619,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
610
619
|
providedIn: 'root',
|
|
611
620
|
}]
|
|
612
621
|
}], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.FidjService }, { type: i3.HttpClient }, { type: i4.Router }]; } });
|
|
613
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFNBQVMsRUFDVCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLFFBQVEsR0FDWCxNQUFNLGFBQWEsQ0FBQztBQUlyQixPQUFPLEVBQUMsV0FBVyxFQUFrQixNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBOEIsZUFBZSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0FBTXhDLE1BQU0sT0FBTyxjQUFjO0lBV3ZCLFlBQ2MsT0FBZ0IsRUFDaEIsV0FBd0IsRUFDeEIsVUFBc0IsRUFDeEIsTUFBYztRQUhaLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRXRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFD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LFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzs0R0F6c0JRLGNBQWM7Z0hBQWQsY0FBYyxjQUZYLE1BQU07NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEV2ZW50Tm9kZSxcbiAgICBHYXVnZU1lYXN1cmUsXG4gICAgR2F1Z2VOb2RlLFxuICAgIFJhZGFyTm9kZSxcbiAgICBSYWluQ29tcHV0YXRpb24sXG4gICAgUmFpbkNvbXB1dGF0aW9uTWFwLFxuICAgIFJhaW5Db21wdXRhdGlvblF1YWxpdHksXG4gICAgUmFpbk5vZGUsXG4gICAgU3BlZWRNYXRyaXhDb250YWluZXIsXG4gICAgVGVhbU5vZGUsXG59IGZyb20gJ3JhYWluLW1vZGVsJztcblxuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5cbmltcG9ydCB7RmlkalN0b3JhZ2UsIEZpZGpTdG9yYWdlTm9kZX0gZnJvbSAnLi9maWRqLXN0b3JhZ2UubW9kZWwnO1xuaW1wb3J0IHtFcnJvckludGVyZmFjZSwgRmlkalNlcnZpY2UsIExvZ2dlckxldmVsRW51bX0gZnJvbSAnZmlkai1hbmd1bGFyJztcbmltcG9ydCB7WFlUeXBlfSBmcm9tICcuL3h5dHlwZSc7XG5pbXBvcnQge0dhdWdlTm9kZUZpbHRlcn0gZnJvbSAnLi90b29scyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZVNlcnZpY2Uge1xuICAgIHB1YmxpYyByZWFkeUZvclN5bmM6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBwdWJsaWMgYXNUZWFtSWQ6IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBlbWFpbDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBpc0RlbW86IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIHJvbGVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHByb3RlY3RlZCBub2RlRGF0YTogRmlkalN0b3JhZ2VOb2RlO1xuICAgIHByb3RlY3RlZCBmaWRqU3RvcmFnZTogRmlkalN0b3JhZ2U7XG4gICAgcHJvdGVjdGVkIGhhdmVUcnlUb1JlY29ubmVjdDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICAgICAgcHJvdGVjdGVkIGZpZGpTZXJ2aWNlOiBGaWRqU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5lbWFpbCA9IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWVtYWlsJyk7XG4gICAgICAgIHRoaXMuYXNUZWFtSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1hc1RlYW1JZCcpO1xuICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgICAgICB0aGlzLnJvbGVzID0gW107XG4gICAgICAgIHRoaXMuZmlkalN0b3JhZ2UgPSBuZXcgRmlkalN0b3JhZ2Uoc3RvcmFnZSk7XG4gICAgICAgIHRoaXMuaXNEZW1vTW9kZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBpc0RlbW9Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0RlbW87XG4gICAgfVxuXG4gICAgc2V0IGlzRGVtb01vZGUobW9kZSkge1xuICAgICAgICB0aGlzLmlzRGVtbyA9IG1vZGUgPyBtb2RlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5maWRqU3RvcmFnZS5zZXREZW1vTW9kZSh0aGlzLmlzRGVtbyk7XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHRVcmxGb3JBUEkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi11cmxGb3JBUEknKTtcbiAgICB9XG5cbiAgICBzZXQgZGVmYXVsdFVybEZvckFQSSh1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KCdyYWFpbi11cmxGb3JBUEknLCB1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hQcm9maWxlKCk6IFByb21pc2U8RmlkalN0b3JhZ2VOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVEYXRhID0gYXdhaXQgdGhpcy5maWRqU3RvcmFnZS5nZXRSZWZyZXNoZWROb2RlQ29weSh0aGlzLmZpZGpTZXJ2aWNlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Um9sZXMoYXdhaXQgdGhpcy5maWRqU2VydmljZS5nZXRSb2xlcygpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVEYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRFbWFpbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1haWwgPz8gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tZW1haWwnLCB0aGlzLmVtYWlsKTtcbiAgICB9XG5cbiAgICBzZXRFbWFpbChlbWFpbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW1haWwgPSBlbWFpbDtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldCgncmFhaW4tZW1haWwnLCB0aGlzLmVtYWlsKTtcbiAgICB9XG5cbiAgICBhc3luYyBsb2dvdXQoZmlkaktleTogc3RyaW5nLCBmaWRqUHJvZDogYm9vbGVhbikge1xuICAgICAgICAvLyB0aGlzLnN0b3JhZ2UucmVtb3ZlKCdyYWFpbi1lbWFpbCcpO1xuICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmxvZ291dCh0cnVlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5pbml0KGZpZGpLZXksIHtcbiAgICAgICAgICAgICAgICBsb2dMZXZlbDogTG9nZ2VyTGV2ZWxFbnVtLldBUk4sIC8vIGZpZGpQcm9kID8gTG9nZ2VyTGV2ZWxFbnVtLldBUk4gOiBMb2dnZXJMZXZlbEVudW0uSU5GTyxcbiAgICAgICAgICAgICAgICBjcnlwdG86IGZhbHNlLFxuICAgICAgICAgICAgICAgIHByb2Q6IGZpZGpQcm9kLFxuICAgICAgICAgICAgICAgIHVzZURCOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMubmV4dCh0cnVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdpbml0RmlkaiBjYXRjaCBwYjogJywgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrRXJyb3IoZXJyb3I6IEVycm9ySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSA0MDEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGIgb24gYXV0aCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgbG9nb3V0IGVycm9ycyBhcyB3ZSdyZSByZWRpcmVjdGluZyB0byBsb2dvdXQgcGFnZSBhbnl3YXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ290b0xvdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdvdG9Mb3V0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpID4gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvbG9nb3V0Jywge1xuICAgICAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dvdG9Mb3V0IGVycm9yOiAnLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdvdG9Mb2dpbigpIHtcbiAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywge3NraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZX0pO1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddKTtcbiAgICB9XG5cbiAgICBpc0xvZ2dlZEluKCkge1xuICAgICAgICBjb25zdCBsb2dnZWRJbiA9IHRoaXMuZmlkalNlcnZpY2UuaXNMb2dnZWRJbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnaXNMb2dnZWRJbjogJywgbG9nZ2VkSW4pO1xuICAgICAgICByZXR1cm4gbG9nZ2VkSW47XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgICB9XG5cbiAgICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gICAgfVxuXG4gICAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgcmFpbjogcmFpbklkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXZlbnROb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vdGlmaWNhdGlvbnMocmFpbklkOiBzdHJpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSAnP3JhaW49JyArIHJhaW5JZDtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGFyZ3MsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vID09PSBUZWFtcyA9PT1cblxuICAgIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAndGVhbXNfYWxsJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zX2FsbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVhbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGVhbSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8VGVhbU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiB0ZWFtSWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGVhbU5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhZGFycyA9PT1cblxuICAgIGFzeW5jIGdldFJhZGFycyh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFkYXJOb2RlPj4ge1xuICAgICAgICBjb25zdCByYWRhcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB1cmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWRhcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGlkLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgcHV0UmFkYXIocmFkYXJOb2RlOiBSYWRhck5vZGUpOiBQcm9taXNlPFJhZGFyTm9kZT4ge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogcmFkYXJOb2RlLm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICAgICAgICByYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoJ3JhZGFyJykuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJkSWQgPT09IHJhZGFyLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvbmVseVJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBsb25lbHlSYWRhcnM7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpblRpbWVmcmFtZShcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGJlZ2luOiBEYXRlLFxuICAgICAgICBlbmQ6IERhdGUsXG4gICAgICAgIGZvcmNlZCA9IGZhbHNlXG4gICAgKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJz9mb3JtYXQ9dGltZWZyYW1lJztcbiAgICAgICAgICAgIGlmIChiZWdpbikge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnJmJlZ2luPScgKyBiZWdpbi50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnJmVuZD0nICsgZW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9yY2VkKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmZm9yY2VkPXRydWUnO1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnJndpdGhDb25maWc9dHJ1ZSc7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmYnlwYXNzQ2FjaGU9JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZSk7XG4gICAgICAgICAgICByYWluTm9kZS5uYW1lICs9ICcucmFkYXIudGltZWZyYW1lJztcbiAgICAgICAgICAgIHJldHVybiByYWluTm9kZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBSYWlucyA9PT1cblxuICAgIGFzeW5jIGdldFJhaW5zKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWluTm9kZT4+IHtcbiAgICAgICAgY29uc3QgcmFpbnMgPSBbXTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycgKyAodGVhbUlkID8gJz90ZWFtSWQ9JyArIHRlYW1JZCA6ICcnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdXJsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgICAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5zO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFpbk5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb3VudFxuXG4gICAgYXN5bmMgZ2V0Q291bnRzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luOiBEYXRlO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UTogWFlUeXBlW107XG4gICAgICAgIHF1ZXVlUnVubmluZzogbnVtYmVyO1xuICAgIH0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBgP3JhbmdlPSR7b3B0aW9ucy5yYW5nZX0mYmVnaW49JHtvcHRpb25zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCl9YDtcblxuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvY291bnRzJyArIGFyZ3MsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50cyA9IHJlc3AuZGF0YS5jb3VudHMucmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudEltYWdlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdID0gW107XG5cbiAgICAgICAgICAgIGNvdW50cy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnNldERhdGVDb21wb25lbnRzKG9wdGlvbnMucGVyaW9kQmVnaW4sIGMpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudEltYWdlcyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnkucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudFJhaW55ID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRRLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRRID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcyxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnksXG4gICAgICAgICAgICAgICAgcGVyY2VudFEsXG4gICAgICAgICAgICAgICAgcXVldWVSdW5uaW5nOiByZXNwLmRhdGEucXVldWVSdW5uaW5nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvdW50c0hvdXIoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiB7cGVyaW9kQmVnaW46IERhdGV9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICByYWlueUNvdW50OiBYWVR5cGVbXTtcbiAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYD9yYW5nZT1ob3VyJmJlZ2luPSR7b3B0aW9ucy5wZXJpb2RCZWdpbi50b0lTT1N0cmluZygpfWA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyBhcmdzLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzLnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHJhaW55Q291bnQucHVzaChuZXcgWFlUeXBlKGMucmFpbnlDb3VudCA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueVN1bS5wdXNoKG5ldyBYWVR5cGUoYy5yYWlueVN1bSA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMsXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudCxcbiAgICAgICAgICAgICAgICByYWlueVN1bSxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICAgIGFzeW5jIGxhdW5jaFJhaW5Db21wdXRhdGlvbihyYWluSWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uW10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogZGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuY29tcHV0YXRpb25zPy5tYXAoKGMpID0+IG5ldyBSYWluQ29tcHV0YXRpb24oYykpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ2FydGVzaWFuTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXRoID1cbiAgICAgICAgICAgICAgICAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICc/Zm9ybWF0PWNhcnRlc2lhbi1tYXAnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKTtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbk1hcC5uYW1lID0gcmFpbklkICsgJy5yYWluLmNhcnRlc2lhbi1tYXAnO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvbk1hcDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVNYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBudW1iZXJcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPVxuICAgICAgICAgICAgJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQgKyAnL2N1bXVsYXRpdmUvJyArIGN1bXVsYXRpdmVIb3VycztcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY3VtdWxhdGl2ZSddKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY3VtdWxhdGl2ZSddKTtcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZSc7XG4gICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXBhcmVzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8e2lkOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZ31bXT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIC8vIHRpbWVvdXQ6IDIwMDAwMCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uID0gbmV3IFJhaW5Db21wdXRhdGlvbihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgY29uc3QgbGlua3MgPSByYWluQ29tcHV0YXRpb24uZ2V0TGlua3MoKTtcbiAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgaWYgKGxpbmsucmVsID09PSBSYWluQ29tcHV0YXRpb25RdWFsaXR5LlRZUEUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGxpbmsuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlTGVuZ3RoID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gbGluay5ocmVmLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgNCArIFJhaW5Db21wdXRhdGlvblF1YWxpdHkuVFlQRS5sZW5ndGggKyAxICsgZGF0ZUxlbmd0aCArIDEsXG4gICAgICAgICAgICAgICAgICAgIGxpbmsuaHJlZi5pbmRleE9mKCcvJyArIGlkKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzLnB1c2goe2lkLCB2ZXJzaW9ufSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvblF1YWxpdGllcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ29tcGFyZUJ5RGF0ZShcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcsXG4gICAgICAgIGRhdGU6IERhdGVcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXRoID1cbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHJhaW5JZCArXG4gICAgICAgICAgICAnL2NvbXB1dGF0aW9ucy8nICtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbklkICtcbiAgICAgICAgICAgICcvY29tcGFyZXM/ZGF0ZT0nICtcbiAgICAgICAgICAgIGRhdGUudG9JU09TdHJpbmcoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IG5ldyBSYWluQ29tcHV0YXRpb25RdWFsaXR5KHJlc3BvbnNlLmRhdGEucXVhbGl0aWVzWzBdKTtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyID1cbiAgICAgICAgICAgICAgICBTcGVlZE1hdHJpeENvbnRhaW5lci5DcmVhdGVGcm9tSnNvbihcbiAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluUHJvZ3Jlc3MocmFpbklkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL3Byb2dyZXNzJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgICAgIC8vIHRpbWVvdXQ6IDIwMDAwMCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5pblByb2dyZXNzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gPT09IEdhdWdlcyA9PT1cblxuICAgIGFzeW5jIGdldEdhdWdlKGdhdWdlSWQ6IHN0cmluZyk6IFByb21pc2U8R2F1Z2VOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGdhdWdlSWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEdhdWdlTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZXMocmFpbklkPzogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxHYXVnZU5vZGVGaWx0ZXI+PiB7XG4gICAgICAgIGxldCBxdWVyeVBhdGggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnP3RlYW1JZD0nICsgdGhpcy5hc1RlYW1JZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmFpbklkKSB7XG4gICAgICAgICAgICBpZiAocXVlcnlQYXRoKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICc/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAncmFpbklkPScgKyByYWluSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnYXVnZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHJlc3AuZGF0YS5nYXVnZXMpIHtcbiAgICAgICAgICAgICAgICBnYXVnZXMucHVzaChuZXcgR2F1Z2VOb2RlRmlsdGVyKGdhdWdlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2F1Z2VzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEdhdWdlTWVhc3VyZXMoZ2F1Z2VJZDogc3RyaW5nLCBiZWdpbjogRGF0ZSwgZW5kOiBEYXRlKTogUHJvbWlzZTxHYXVnZU1lYXN1cmVbXT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPVxuICAgICAgICAgICAgJycgKyBnYXVnZUlkICsgJy9tZWFzdXJlcz9iZWdpbj0nICsgYmVnaW4udG9JU09TdHJpbmcoKSArICcmZW5kPScgKyBlbmQudG9JU09TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdhdWdlTWVhc3VyZXM6IEdhdWdlTWVhc3VyZVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2VNZWFzdXJlIG9mIHJlc3AuZGF0YS5nYXVnZU1lYXN1cmVzKSB7XG4gICAgICAgICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IEdhdWdlTWVhc3VyZShnYXVnZU1lYXN1cmUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2F1Z2VNZWFzdXJlcztcbiAgICB9XG5cbiAgICAvLyA9PT0gUHJpdmF0ZSA9PT1cblxuICAgIHByb3RlY3RlZCBzZXRSb2xlcyhyb2xlczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLnJvbGVzID0gcm9sZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRlQ29tcG9uZW50cyhcbiAgICAgICAgZGF0ZTogRGF0ZSxcbiAgICAgICAgYzoge1xuICAgICAgICAgICAgeWVhcj86IG51bWJlcjtcbiAgICAgICAgICAgIG1vbnRoPzogbnVtYmVyO1xuICAgICAgICAgICAgZGF5PzogbnVtYmVyO1xuICAgICAgICAgICAgaG91cj86IG51bWJlcjtcbiAgICAgICAgICAgIG1pbnV0ZT86IG51bWJlcjtcbiAgICAgICAgfVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRhdGVUb1Nob3cgPSBuZXcgRGF0ZShkYXRlKTtcblxuICAgICAgICBpZiAoYy55ZWFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDRnVsbFllYXIoYy55ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5tb250aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ01vbnRoKGMubW9udGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5kYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENEYXRlKGMuZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5ob3VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDSG91cnMoYy5ob3VyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5taW51dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENNaW51dGVzKGMubWludXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG4gICAgfVxufVxuIl19
|
|
622
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFNBQVMsRUFDVCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLFFBQVEsR0FDWCxNQUFNLGFBQWEsQ0FBQztBQUlyQixPQUFPLEVBQUMsV0FBVyxFQUFrQixNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBOEIsZUFBZSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0FBTXhDLE1BQU0sT0FBTyxjQUFjO0lBV3ZCLFlBQ2MsT0FBZ0IsRUFDaEIsV0FBd0IsRUFDeEIsVUFBc0IsRUFDeEIsTUFBYztRQUhaLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRXRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFD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S0FBSyxTQUFTLEVBQUU7WUFDdEIsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDckIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QztRQUVELE9BQU8sVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7OzRHQXJ0QlEsY0FBYztnSEFBZCxjQUFjLGNBRlgsTUFBTTs0RkFFVCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgRXZlbnROb2RlLFxuICAgIEdhdWdlTWVhc3VyZSxcbiAgICBHYXVnZU5vZGUsXG4gICAgUmFkYXJOb2RlLFxuICAgIFJhaW5Db21wdXRhdGlvbixcbiAgICBSYWluQ29tcHV0YXRpb25NYXAsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbiAgICBUZWFtTm9kZSxcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuXG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcblxuaW1wb3J0IHtGaWRqU3RvcmFnZSwgRmlkalN0b3JhZ2VOb2RlfSBmcm9tICcuL2ZpZGotc3RvcmFnZS5tb2RlbCc7XG5pbXBvcnQge0Vycm9ySW50ZXJmYWNlLCBGaWRqU2VydmljZSwgTG9nZ2VyTGV2ZWxFbnVtfSBmcm9tICdmaWRqLWFuZ3VsYXInO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4veHl0eXBlJztcbmltcG9ydCB7R2F1Z2VOb2RlRmlsdGVyfSBmcm9tICcuL3Rvb2xzJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XG4gICAgcHVibGljIHJlYWR5Rm9yU3luYzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAgIHB1YmxpYyBhc1RlYW1JZDogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGVtYWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGlzRGVtbzogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgcm9sZXM6IEFycmF5PHN0cmluZz47XG4gICAgcHJvdGVjdGVkIG5vZGVEYXRhOiBGaWRqU3RvcmFnZU5vZGU7XG4gICAgcHJvdGVjdGVkIGZpZGpTdG9yYWdlOiBGaWRqU3RvcmFnZTtcbiAgICBwcm90ZWN0ZWQgaGF2ZVRyeVRvUmVjb25uZWN0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICBwcm90ZWN0ZWQgZmlkalNlcnZpY2U6IEZpZGpTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge1xuICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tZW1haWwnKTtcbiAgICAgICAgdGhpcy5hc1RlYW1JZCA9IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWFzVGVhbUlkJyk7XG4gICAgICAgIHRoaXMucmVhZHlGb3JTeW5jID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgICAgIHRoaXMucm9sZXMgPSBbXTtcbiAgICAgICAgdGhpcy5maWRqU3RvcmFnZSA9IG5ldyBGaWRqU3RvcmFnZShzdG9yYWdlKTtcbiAgICAgICAgdGhpcy5pc0RlbW9Nb2RlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGlzRGVtb01vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGVtbztcbiAgICB9XG5cbiAgICBzZXQgaXNEZW1vTW9kZShtb2RlKSB7XG4gICAgICAgIHRoaXMuaXNEZW1vID0gbW9kZSA/IG1vZGUgOiB0cnVlO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlLnNldERlbW9Nb2RlKHRoaXMuaXNEZW1vKTtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFVybEZvckFQSSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLXVybEZvckFQSScpO1xuICAgIH1cblxuICAgIHNldCBkZWZhdWx0VXJsRm9yQVBJKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLXVybEZvckFQSScsIHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaFByb2ZpbGUoKTogUHJvbWlzZTxGaWRqU3RvcmFnZU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubm9kZURhdGEgPSBhd2FpdCB0aGlzLmZpZGpTdG9yYWdlLmdldFJlZnJlc2hlZE5vZGVDb3B5KHRoaXMuZmlkalNlcnZpY2UpO1xuICAgICAgICAgICAgdGhpcy5zZXRSb2xlcyhhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmdldFJvbGVzKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZURhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5pc0Nvbm5lY3RlZCgpO1xuICAgIH1cblxuICAgIGdldEVtYWlsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWFpbCA/PyB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgIH1cblxuICAgIHNldEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KCdyYWFpbi1lbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgIH1cblxuICAgIGFzeW5jIGxvZ291dChmaWRqS2V5OiBzdHJpbmcsIGZpZGpQcm9kOiBib29sZWFuKSB7XG4gICAgICAgIC8vIHRoaXMuc3RvcmFnZS5yZW1vdmUoJ3JhYWluLWVtYWlsJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KHRydWUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSwge1xuICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tFcnJvcihlcnJvcjogRXJyb3JJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsb2dvdXQgZXJyb3JzIGFzIHdlJ3JlIHJlZGlyZWN0aW5nIHRvIGxvZ291dCBwYWdlIGFueXdheVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvTG91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ290b0xvdXQgZXJyb3I6ICcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgIH1cblxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlZEluID0gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0xvZ2dlZEluOiAnLCBsb2dnZWRJbik7XG4gICAgICAgIHJldHVybiBsb2dnZWRJbjtcbiAgICB9XG5cbiAgICBuZWVkc0Nvbm5lY3Rpb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5uZWVkc1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgICB9XG5cbiAgICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gICAgfVxuXG4gICAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgcmFpbjogcmFpbklkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXZlbnROb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vdGlmaWNhdGlvbnMocmFpbklkOiBzdHJpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSAnP3JhaW49JyArIHJhaW5JZDtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGFyZ3MsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vID09PSBUZWFtcyA9PT1cblxuICAgIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAndGVhbXNfYWxsJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zX2FsbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVhbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGVhbSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8VGVhbU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiB0ZWFtSWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGVhbU5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhZGFycyA9PT1cblxuICAgIGFzeW5jIGdldFJhZGFycyh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFkYXJOb2RlPj4ge1xuICAgICAgICBjb25zdCByYWRhcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB1cmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWRhcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGlkLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgcHV0UmFkYXIocmFkYXJOb2RlOiBSYWRhck5vZGUpOiBQcm9taXNlPFJhZGFyTm9kZT4ge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogcmFkYXJOb2RlLm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICAgICAgICByYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoJ3JhZGFyJykuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJkSWQgPT09IHJhZGFyLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvbmVseVJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBsb25lbHlSYWRhcnM7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpblRpbWVmcmFtZShcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGJlZ2luOiBEYXRlLFxuICAgICAgICBlbmQ6IERhdGUsXG4gICAgICAgIGZvcmNlZCA9IGZhbHNlXG4gICAgKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJz9mb3JtYXQ9dGltZWZyYW1lJztcbiAgICAgICAgICAgIGlmIChiZWdpbikge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnJmJlZ2luPScgKyBiZWdpbi50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnJmVuZD0nICsgZW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9yY2VkKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmZm9yY2VkPXRydWUnO1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnJndpdGhDb25maWc9dHJ1ZSc7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmYnlwYXNzQ2FjaGU9JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZSk7XG4gICAgICAgICAgICByYWluTm9kZS5uYW1lICs9ICcucmFkYXIudGltZWZyYW1lJztcbiAgICAgICAgICAgIHJldHVybiByYWluTm9kZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBSYWlucyA9PT1cblxuICAgIGFzeW5jIGdldFJhaW5zKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWluTm9kZT4+IHtcbiAgICAgICAgY29uc3QgcmFpbnMgPSBbXTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycgKyAodGVhbUlkID8gJz90ZWFtSWQ9JyArIHRlYW1JZCA6ICcnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdXJsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgICAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5zO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFpbk5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb3VudFxuXG4gICAgYXN5bmMgZ2V0Q291bnRzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luOiBEYXRlO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UTogWFlUeXBlW107XG4gICAgICAgIHF1ZXVlUnVubmluZzogbnVtYmVyO1xuICAgIH0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBgP3JhbmdlPSR7b3B0aW9ucy5yYW5nZX0mYmVnaW49JHtvcHRpb25zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCl9YDtcblxuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvY291bnRzJyArIGFyZ3MsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50cyA9IHJlc3AuZGF0YS5jb3VudHMucmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudEltYWdlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdID0gW107XG5cbiAgICAgICAgICAgIGNvdW50cy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnNldERhdGVDb21wb25lbnRzKG9wdGlvbnMucGVyaW9kQmVnaW4sIGMpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudEltYWdlcyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnkucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudFJhaW55ID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRRLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRRID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcyxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnksXG4gICAgICAgICAgICAgICAgcGVyY2VudFEsXG4gICAgICAgICAgICAgICAgcXVldWVSdW5uaW5nOiByZXNwLmRhdGEucXVldWVSdW5uaW5nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvdW50c0hvdXIoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiB7cGVyaW9kQmVnaW46IERhdGV9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICByYWlueUNvdW50OiBYWVR5cGVbXTtcbiAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYD9yYW5nZT1ob3VyJmJlZ2luPSR7b3B0aW9ucy5wZXJpb2RCZWdpbi50b0lTT1N0cmluZygpfWA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyBhcmdzLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzLnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHJhaW55Q291bnQucHVzaChuZXcgWFlUeXBlKGMucmFpbnlDb3VudCA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueVN1bS5wdXNoKG5ldyBYWVR5cGUoYy5yYWlueVN1bSA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMsXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudCxcbiAgICAgICAgICAgICAgICByYWlueVN1bSxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICAgIGFzeW5jIGxhdW5jaFJhaW5Db21wdXRhdGlvbihyYWluSWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uW10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogZGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuY29tcHV0YXRpb25zPy5tYXAoKGMpID0+IG5ldyBSYWluQ29tcHV0YXRpb24oYykpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ2FydGVzaWFuTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXRoID1cbiAgICAgICAgICAgICAgICAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICc/Zm9ybWF0PWNhcnRlc2lhbi1tYXAnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKTtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbk1hcC5uYW1lID0gcmFpbklkICsgJy5yYWluLmNhcnRlc2lhbi1tYXAnO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvbk1hcDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVNYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBudW1iZXJcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPVxuICAgICAgICAgICAgJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQgKyAnL2N1bXVsYXRpdmUvJyArIGN1bXVsYXRpdmVIb3VycztcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY3VtdWxhdGl2ZSddKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY3VtdWxhdGl2ZSddKTtcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZSc7XG4gICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXBhcmVzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8e2lkOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZ31bXT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIC8vIHRpbWVvdXQ6IDIwMDAwMCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uID0gbmV3IFJhaW5Db21wdXRhdGlvbihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgY29uc3QgbGlua3MgPSByYWluQ29tcHV0YXRpb24uZ2V0TGlua3MoKTtcbiAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgaWYgKGxpbmsucmVsID09PSBSYWluQ29tcHV0YXRpb25RdWFsaXR5LlRZUEUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGxpbmsuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlTGVuZ3RoID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gbGluay5ocmVmLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgNCArIFJhaW5Db21wdXRhdGlvblF1YWxpdHkuVFlQRS5sZW5ndGggKyAxICsgZGF0ZUxlbmd0aCArIDEsXG4gICAgICAgICAgICAgICAgICAgIGxpbmsuaHJlZi5pbmRleE9mKCcvJyArIGlkKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzLnB1c2goe2lkLCB2ZXJzaW9ufSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvblF1YWxpdGllcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ29tcGFyZUJ5RGF0ZShcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcsXG4gICAgICAgIGRhdGU6IERhdGVcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXRoID1cbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHJhaW5JZCArXG4gICAgICAgICAgICAnL2NvbXB1dGF0aW9ucy8nICtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbklkICtcbiAgICAgICAgICAgICcvY29tcGFyZXM/ZGF0ZT0nICtcbiAgICAgICAgICAgIGRhdGUudG9JU09TdHJpbmcoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IG5ldyBSYWluQ29tcHV0YXRpb25RdWFsaXR5KHJlc3BvbnNlLmRhdGEucXVhbGl0aWVzWzBdKTtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyID1cbiAgICAgICAgICAgICAgICBTcGVlZE1hdHJpeENvbnRhaW5lci5DcmVhdGVGcm9tSnNvbihcbiAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluUHJvZ3Jlc3MocmFpbklkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL3Byb2dyZXNzJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgICAgIC8vIHRpbWVvdXQ6IDIwMDAwMCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5pblByb2dyZXNzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gPT09IEdhdWdlcyA9PT1cblxuICAgIGFzeW5jIGdldEdhdWdlKGdhdWdlSWQ6IHN0cmluZyk6IFByb21pc2U8R2F1Z2VOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGdhdWdlSWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEdhdWdlTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZXMocmFpbklkPzogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxHYXVnZU5vZGVGaWx0ZXI+PiB7XG4gICAgICAgIGxldCBxdWVyeVBhdGggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnP3RlYW1JZD0nICsgdGhpcy5hc1RlYW1JZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmFpbklkKSB7XG4gICAgICAgICAgICBpZiAocXVlcnlQYXRoKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICc/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAncmFpbklkPScgKyByYWluSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnYXVnZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHJlc3AuZGF0YS5nYXVnZXMpIHtcbiAgICAgICAgICAgICAgICBnYXVnZXMucHVzaChuZXcgR2F1Z2VOb2RlRmlsdGVyKGdhdWdlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2F1Z2VzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEdhdWdlTWVhc3VyZXMoZ2F1Z2VJZDogc3RyaW5nLCBiZWdpbjogRGF0ZSwgZW5kOiBEYXRlKTogUHJvbWlzZTxHYXVnZU1lYXN1cmVbXT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPVxuICAgICAgICAgICAgJycgKyBnYXVnZUlkICsgJy9tZWFzdXJlcz9iZWdpbj0nICsgYmVnaW4udG9JU09TdHJpbmcoKSArICcmZW5kPScgKyBlbmQudG9JU09TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdhdWdlTWVhc3VyZXM6IEdhdWdlTWVhc3VyZVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2VNZWFzdXJlIG9mIHJlc3AuZGF0YS5nYXVnZU1lYXN1cmVzKSB7XG4gICAgICAgICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IEdhdWdlTWVhc3VyZShnYXVnZU1lYXN1cmUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2F1Z2VNZWFzdXJlcztcbiAgICB9XG5cbiAgICAvLyA9PT0gUHJpdmF0ZSA9PT1cblxuICAgIHByb3RlY3RlZCBzZXRSb2xlcyhyb2xlczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLnJvbGVzID0gcm9sZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRlQ29tcG9uZW50cyhcbiAgICAgICAgZGF0ZTogRGF0ZSxcbiAgICAgICAgYzoge1xuICAgICAgICAgICAgeWVhcj86IG51bWJlcjtcbiAgICAgICAgICAgIG1vbnRoPzogbnVtYmVyO1xuICAgICAgICAgICAgZGF5PzogbnVtYmVyO1xuICAgICAgICAgICAgaG91cj86IG51bWJlcjtcbiAgICAgICAgICAgIG1pbnV0ZT86IG51bWJlcjtcbiAgICAgICAgfVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRhdGVUb1Nob3cgPSBuZXcgRGF0ZShkYXRlKTtcblxuICAgICAgICBpZiAoYy55ZWFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDRnVsbFllYXIoYy55ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5tb250aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ01vbnRoKGMubW9udGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5kYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENEYXRlKGMuZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5ob3VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDSG91cnMoYy5ob3VyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5taW51dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENNaW51dGVzKGMubWludXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG4gICAgfVxufVxuIl19
|