@myclub_se/data-access 2.5.12 → 2.5.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/api-models/api-booking-calendar.mjs +1 -1
- package/esm2020/lib/api-models/api-booking-settings.mjs +1 -1
- package/esm2020/lib/models/booking-calendar.mjs +5 -3
- package/esm2020/lib/models/booking-settings.mjs +2 -4
- package/esm2020/lib/services/booking-calendar.service.mjs +13 -1
- package/esm2020/lib/services/factories/booking-calendar-factory.mjs +2 -2
- package/esm2020/lib/services/factories/booking-settings-factory.mjs +2 -2
- package/fesm2015/myclub_se-data-access.mjs +19 -7
- package/fesm2015/myclub_se-data-access.mjs.map +1 -1
- package/fesm2020/myclub_se-data-access.mjs +19 -7
- package/fesm2020/myclub_se-data-access.mjs.map +1 -1
- package/lib/api-models/api-booking-calendar.d.ts +1 -0
- package/lib/api-models/api-booking-settings.d.ts +0 -1
- package/lib/models/booking-calendar.d.ts +3 -1
- package/lib/models/booking-settings.d.ts +1 -3
- package/lib/services/booking-calendar.service.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWJvb2tpbmctY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWFjY2Vzcy9zcmMvbGliL2FwaS1tb2RlbHMvYXBpLWJvb2tpbmctY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXBpQm9va2luZ0NhbGVuZGFyIHtcbiAgaWQ6IHN0cmluZztcbiAgY2x1Yl9pZDogc3RyaW5nO1xuICByZWFkb25seSBjbHViX25hbWU6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzZWN0aW9uX2lkOiBzdHJpbmcgfCBudWxsO1xuICByZWFkb25seSBzZWN0aW9uX25hbWU6IHN0cmluZyB8IG51bGw7XG4gIHRlYW1faWQ6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5IHRlYW1fbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgc3RhdHVzOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWJvb2tpbmctc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWFjY2Vzcy9zcmMvbGliL2FwaS1tb2RlbHMvYXBpLWJvb2tpbmctc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXBpQm9va2luZ1NldHRpbmdzIHtcbiAgaWQ6IHN0cmluZztcbiAgY2FsZW5kYXJfc3RlcDogc3RyaW5nO1xuICBjYWxlbmRhcl9taW5fdGltZTogc3RyaW5nO1xuICBjYWxlbmRhcl9tYXhfdGltZTogc3RyaW5nO1xuICBzaG91bGRfc3BsaXRfYm9va2luZ19pbnRvX3pvbmVzOiBib29sZWFuO1xufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FormControl, FormGroup, Validators } from "@angular/forms";
|
|
2
2
|
export class BookingCalendar {
|
|
3
|
-
constructor(id, club_id, section_id, team_id, club_name, color, name, section_name, team_name) {
|
|
3
|
+
constructor(id, club_id, section_id, team_id, club_name, color, name, section_name, team_name, status) {
|
|
4
4
|
this.id = id;
|
|
5
5
|
this.club_id = club_id;
|
|
6
6
|
this.section_id = section_id;
|
|
@@ -10,6 +10,7 @@ export class BookingCalendar {
|
|
|
10
10
|
this.name = name;
|
|
11
11
|
this.section_name = section_name;
|
|
12
12
|
this.team_name = team_name;
|
|
13
|
+
this.status = status;
|
|
13
14
|
}
|
|
14
15
|
static asFormGroup(calendar) {
|
|
15
16
|
return new FormGroup({
|
|
@@ -21,8 +22,9 @@ export class BookingCalendar {
|
|
|
21
22
|
color: new FormControl(calendar?.color || '', Validators.required),
|
|
22
23
|
name: new FormControl(calendar?.name || '', Validators.required),
|
|
23
24
|
section_name: new FormControl(calendar?.section_name || ''),
|
|
24
|
-
team_name: new FormControl(calendar?.team_name || '')
|
|
25
|
+
team_name: new FormControl(calendar?.team_name || ''),
|
|
26
|
+
status: new FormControl(calendar?.status || 'preliminary'),
|
|
25
27
|
});
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvbW9kZWxzL2Jvb2tpbmctY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGVBQWU7SUFnQjFCLFlBQ1MsRUFBVSxFQUNWLE9BQWUsRUFDZixVQUF5QixFQUN6QixPQUFzQixFQUN0QixTQUFpQixFQUNqQixLQUFhLEVBQ2IsSUFBWSxFQUNaLFlBQTJCLEVBQzNCLFNBQXdCLEVBQ3hCLE1BQXFCO1FBVHJCLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZUFBVSxHQUFWLFVBQVUsQ0FBZTtRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQWU7SUFDMUIsQ0FBQztJQTFCTCxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQTBCO1FBQzNDLE9BQU8sSUFBSSxTQUFTLENBQUM7WUFDbkIsRUFBRSxFQUFFLElBQUksV0FBVyxDQUFTLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQy9DLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBUyxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxVQUFVLEVBQUUsSUFBSSxXQUFXLENBQWdCLFFBQVEsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsUUFBUSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDaEUsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFTLFFBQVEsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO1lBQzdELEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBUyxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzFFLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBUyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hFLFlBQVksRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsUUFBUSxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDMUUsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFnQixRQUFRLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUNwRSxNQUFNLEVBQUUsSUFBSSxXQUFXLENBQVMsUUFBUSxFQUFFLE1BQU0sSUFBSSxhQUFhLENBQUM7U0FDbkUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQWNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuZXhwb3J0IGNsYXNzIEJvb2tpbmdDYWxlbmRhciB7XG4gIHN0YXRpYyBhc0Zvcm1Hcm91cChjYWxlbmRhcj86IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGlkOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihjYWxlbmRhcj8uaWQgfHwgJycpLFxuICAgICAgY2x1Yl9pZDogbmV3IEZvcm1Db250cm9sPHN0cmluZz4oY2FsZW5kYXI/LmNsdWJfaWQgfHwgJycpLFxuICAgICAgc2VjdGlvbl9pZDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KGNhbGVuZGFyPy5zZWN0aW9uX2lkIHx8ICcnKSxcbiAgICAgIHRlYW1faWQ6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihjYWxlbmRhcj8udGVhbV9pZCB8fCAnJyksXG4gICAgICBjbHViX25hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KGNhbGVuZGFyPy5jbHViX25hbWUgfHwgJycpLFxuICAgICAgY29sb3I6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KGNhbGVuZGFyPy5jb2xvciB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihjYWxlbmRhcj8ubmFtZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICBzZWN0aW9uX25hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihjYWxlbmRhcj8uc2VjdGlvbl9uYW1lIHx8ICcnKSxcbiAgICAgIHRlYW1fbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KGNhbGVuZGFyPy50ZWFtX25hbWUgfHwgJycpLFxuICAgICAgc3RhdHVzOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihjYWxlbmRhcj8uc3RhdHVzIHx8ICdwcmVsaW1pbmFyeScpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGlkOiBzdHJpbmcsXG4gICAgcHVibGljIGNsdWJfaWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgc2VjdGlvbl9pZDogc3RyaW5nIHwgbnVsbCxcbiAgICBwdWJsaWMgdGVhbV9pZDogc3RyaW5nIHwgbnVsbCxcbiAgICBwdWJsaWMgY2x1Yl9uYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIGNvbG9yOiBzdHJpbmcsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgc2VjdGlvbl9uYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIHB1YmxpYyB0ZWFtX25hbWU6IHN0cmluZyB8IG51bGwsXG4gICAgcHVibGljIHN0YXR1czogc3RyaW5nIHwgbnVsbCxcbiAgKSB7IH1cbn1cbiJdfQ==
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { FormControl, FormGroup, Validators } from "@angular/forms";
|
|
2
2
|
export class BookingSettings {
|
|
3
|
-
constructor(id,
|
|
3
|
+
constructor(id, calendar_step, calendar_min_time, calendar_max_time, should_split_booking_into_zones) {
|
|
4
4
|
this.id = id;
|
|
5
|
-
this.club_id = club_id;
|
|
6
5
|
this.calendar_step = calendar_step;
|
|
7
6
|
this.calendar_min_time = calendar_min_time;
|
|
8
7
|
this.calendar_max_time = calendar_max_time;
|
|
@@ -11,7 +10,6 @@ export class BookingSettings {
|
|
|
11
10
|
static asFormGroup(settings) {
|
|
12
11
|
return new FormGroup({
|
|
13
12
|
id: new FormControl(settings?.id || ''),
|
|
14
|
-
club_id: new FormControl(settings?.club_id || ''),
|
|
15
13
|
calendar_step: new FormControl(settings?.calendar_step || '01:00:00', [Validators.required]),
|
|
16
14
|
calendar_min_time: new FormControl(settings?.calendar_min_time || '00:00:00', [Validators.required]),
|
|
17
15
|
calendar_max_time: new FormControl(settings?.calendar_max_time || '23:00:00', [Validators.required]),
|
|
@@ -19,4 +17,4 @@ export class BookingSettings {
|
|
|
19
17
|
});
|
|
20
18
|
}
|
|
21
19
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvbW9kZWxzL2Jvb2tpbmctc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGVBQWU7SUFXMUIsWUFDUyxFQUFVLEVBQ1YsYUFBcUIsRUFDckIsaUJBQXlCLEVBQ3pCLGlCQUF5QixFQUN6QiwrQkFBd0M7UUFKeEMsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUNWLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQUN6QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQVE7UUFDekIsb0NBQStCLEdBQS9CLCtCQUErQixDQUFTO0lBRWpELENBQUM7SUFqQkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUEwQjtRQUMzQyxPQUFPLElBQUksU0FBUyxDQUFDO1lBQ25CLEVBQUUsRUFBRSxJQUFJLFdBQVcsQ0FBUyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMvQyxhQUFhLEVBQUUsSUFBSSxXQUFXLENBQVMsUUFBUSxFQUFFLGFBQWEsSUFBSSxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEcsaUJBQWlCLEVBQUUsSUFBSSxXQUFXLENBQVMsUUFBUSxFQUFFLGlCQUFpQixJQUFJLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1RyxpQkFBaUIsRUFBRSxJQUFJLFdBQVcsQ0FBUyxRQUFRLEVBQUUsaUJBQWlCLElBQUksVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVHLCtCQUErQixFQUFFLElBQUksV0FBVyxDQUFVLE9BQU8sUUFBUSxFQUFFLCtCQUErQixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLCtCQUErQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdE0sQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQVVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuZXhwb3J0IGNsYXNzIEJvb2tpbmdTZXR0aW5ncyB7XG4gIHN0YXRpYyBhc0Zvcm1Hcm91cChzZXR0aW5ncz86IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGlkOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihzZXR0aW5ncz8uaWQgfHwgJycpLFxuICAgICAgY2FsZW5kYXJfc3RlcDogbmV3IEZvcm1Db250cm9sPHN0cmluZz4oc2V0dGluZ3M/LmNhbGVuZGFyX3N0ZXAgfHwgJzAxOjAwOjAwJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIGNhbGVuZGFyX21pbl90aW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihzZXR0aW5ncz8uY2FsZW5kYXJfbWluX3RpbWUgfHwgJzAwOjAwOjAwJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIGNhbGVuZGFyX21heF90aW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihzZXR0aW5ncz8uY2FsZW5kYXJfbWF4X3RpbWUgfHwgJzIzOjAwOjAwJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIHNob3VsZF9zcGxpdF9ib29raW5nX2ludG9fem9uZXM6IG5ldyBGb3JtQ29udHJvbDxib29sZWFuPih0eXBlb2Ygc2V0dGluZ3M/LnNob3VsZF9zcGxpdF9ib29raW5nX2ludG9fem9uZXMgIT09ICd1bmRlZmluZWQnID8gc2V0dGluZ3M/LnNob3VsZF9zcGxpdF9ib29raW5nX2ludG9fem9uZXMgOiB0cnVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGlkOiBzdHJpbmcsXG4gICAgcHVibGljIGNhbGVuZGFyX3N0ZXA6IHN0cmluZyxcbiAgICBwdWJsaWMgY2FsZW5kYXJfbWluX3RpbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgY2FsZW5kYXJfbWF4X3RpbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgc2hvdWxkX3NwbGl0X2Jvb2tpbmdfaW50b196b25lczogYm9vbGVhbixcbiAgKSB7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -432,12 +432,24 @@ export class BookingCalendarService {
|
|
|
432
432
|
return this.apiService
|
|
433
433
|
.getResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, { teamId });
|
|
434
434
|
}
|
|
435
|
+
updateBookingSettings(role, clubOrTeamId, bookingSettings) {
|
|
436
|
+
if (role == Role.ClubAdmin) {
|
|
437
|
+
return this.updateClubBookingSettings(clubOrTeamId, bookingSettings);
|
|
438
|
+
}
|
|
439
|
+
return this.updateTeamBookingSettings(clubOrTeamId, bookingSettings);
|
|
440
|
+
}
|
|
435
441
|
updateClubBookingSettings(clubId, bookingSettings) {
|
|
436
442
|
return this.apiService
|
|
437
443
|
.updateResource(bookingSettingsFactory, Role.ClubAdmin, CLUB_BOOKING_SETTINGS_PATH, {
|
|
438
444
|
clubId,
|
|
439
445
|
}, bookingSettings);
|
|
440
446
|
}
|
|
447
|
+
updateTeamBookingSettings(teamId, bookingSettings) {
|
|
448
|
+
return this.apiService
|
|
449
|
+
.updateResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, {
|
|
450
|
+
teamId,
|
|
451
|
+
}, bookingSettings);
|
|
452
|
+
}
|
|
441
453
|
// endregion
|
|
442
454
|
// region Booking Calendar Application Times
|
|
443
455
|
updateClubBookingCalendarApplicationTime(clubId, availableTime) {
|
|
@@ -477,4 +489,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
|
|
|
477
489
|
providedIn: 'root'
|
|
478
490
|
}]
|
|
479
491
|
}], ctorParameters: function () { return [{ type: i1.ApiService }]; } });
|
|
480
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBTUwsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3ZCLE1BQU0sYUFBYSxDQUFDOzs7QUFFckIsTUFBTSwyQkFBMkIsR0FBRywrQkFBK0IsQ0FBQztBQUNwRSxNQUFNLDBCQUEwQixHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZFLE1BQU0sZ0NBQWdDLEdBQUcsMkJBQTJCLENBQUM7QUFDckUsTUFBTSxrREFBa0QsR0FBRyw2Q0FBNkMsQ0FBQztBQUN6RyxNQUFNLHFDQUFxQyxHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sc0NBQXNDLEdBQUcsaUNBQWlDLENBQUM7QUFDakYsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDO0FBQ3hFLE1BQU0sMENBQTBDLEdBQUcsbUNBQW1DLENBQUM7QUFDdkYsTUFBTSx3Q0FBd0MsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRixNQUFNLHVDQUF1QyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUM7QUFDMUUsTUFBTSwyQ0FBMkMsR0FBRywyQ0FBMkMsQ0FBQztBQUVoRyxNQUFNLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBQ3BFLE1BQU0sZ0NBQWdDLEdBQUcsMkJBQTJCLENBQUM7QUFDckUsTUFBTSxx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QWEsQ0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVELHdDQUF3QyxDQUFDLE1BQWMsRUFBRSxhQUFzRDtRQUM3RyxPQUFPLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixZQUFZLENBQ1gscUNBQXFDLEVBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQ2QsNENBQTRDLEVBQzVDO1lBQ0UsTUFBTTtTQUNQLEVBQ0QsYUFBYSxDQUNkLENBQUE7SUFDTCxDQUFDO0lBRUQsd0NBQXdDLENBQUMsTUFBYyxFQUFFLGFBQTZDO1FBQ3BHLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLHFDQUFxQyxFQUNyQyxJQUFJLENBQUMsU0FBUyxFQUNkLDJDQUEyQyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFLEVBQUUsYUFBYSxDQUFDLEVBQUU7U0FDckIsRUFDRCxhQUFhLENBQ2QsQ0FBQztJQUNOLENBQUM7SUFFRCx3Q0FBd0MsQ0FBQyxNQUFjLEVBQUUsRUFBVTtRQUNqRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUNkLDJDQUEyQyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQzs7b0hBcDBCVSxzQkFBc0I7d0hBQXRCLHNCQUFzQixjQUZyQixNQUFNOzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcGlTZXJ2aWNlfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJvb2tpbmdDYWxlbmRhcixcbiAgQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lLFxuICBCb29raW5nQ2FsZW5kYXJTbG90LFxuICBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbixcbiAgQm9va2luZ1NldHRpbmdzLFxuICBSb2xlLFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgYm9va2luZ1NldHRpbmdzRmFjdG9yeVxufSBmcm9tIFwiLi9mYWN0b3JpZXNcIjtcblxuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYm9va2luZy1zZXR0aW5ncy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuXG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJvb2tpbmdDYWxlbmRhclNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UpIHtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyXG5cbiAgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIGRlbGV0ZSBjYWxlbmRhci5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFycyhyb2xlOiBSb2xlLCBjbHViT3JUZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yVGVhbUlkLCBuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yVGVhbUlkLCBuYW1lKTtcbiAgfVxuXG4gIGdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKHRlYW1JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldENsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge2NsdWJJZCwgaWR9XG4gICAgICApXG4gIH1cblxuICB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJJZDogc3RyaW5nLCBjYWxlbmRhcjogQm9va2luZ0NhbGVuZGFyKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IGNhbGVuZGFyLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBjYWxlbmRhciBzbG90XG5cbiAgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBkZWxldGUgc2xvdC5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclRlYW1JZDogc3RyaW5nLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBoYXNPcGVuU2Vzc2lvbnM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclRlYW1JZCwgc3RhcnREYXRlLCBlbmREYXRlLCBjYWxlbmRhcklkcywgbG9jYXRpb25JZHMsIHRlYW1JZHMsIGhhc09wZW5TZXNzaW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JUZWFtSWQsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgY2FsZW5kYXJJZHMsIGxvY2F0aW9uSWRzLCB0ZWFtSWRzLCBoYXNPcGVuU2Vzc2lvbnMpXG4gIH1cblxuICBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19sdGUnXSA9IGVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGNhbGVuZGFySWRzICYmIGNhbGVuZGFySWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydjYWxlbmRhcl9pZCddID0gY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKGxvY2F0aW9uSWRzICYmIGxvY2F0aW9uSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydsb2NhdGlvbl9pZCddID0gbG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRlYW1JZHMgJiYgdGVhbUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGVhbV9pZCddID0gdGVhbUlkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcoaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHRlYW1JZDogc3RyaW5nLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBoYXNPcGVuU2Vzc2lvbnM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChjYWxlbmRhcklkcyAmJiBjYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IGNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbklkcyAmJiBsb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IGxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0ZWFtSWRzICYmIHRlYW1JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ3RlYW1faWQnXSA9IHRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYXNPcGVuU2Vzc2lvbnMgPT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zWydoYXNfb3Blbl9zZXNzaW9ucyddID0gU3RyaW5nKGhhc09wZW5TZXNzaW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLCkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yVGVhbUlkLCBzdGFydERhdGUsIGVuZERhdGUsIGNhbGVuZGFySWRzLCBsb2NhdGlvbklkcywgdGVhbUlkcywgaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJPclRlYW1JZCwgc3RhcnREYXRlLCBlbmREYXRlLCBjYWxlbmRhcklkcywgbG9jYXRpb25JZHMsIHRlYW1JZHMsIGhhc09wZW5TZXNzaW9ucylcbiAgfVxuXG4gIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGNhbGVuZGFySWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGxvY2F0aW9uSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIHRlYW1JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgaGFzT3BlblNlc3Npb25zOiBib29sZWFuIHwgbnVsbCA9IG51bGwsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19ndGUnXSA9IHN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2x0ZSddID0gZW5kRGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoY2FsZW5kYXJJZHMgJiYgY2FsZW5kYXJJZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2NhbGVuZGFyX2lkJ10gPSBjYWxlbmRhcklkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAobG9jYXRpb25JZHMgJiYgbG9jYXRpb25JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2xvY2F0aW9uX2lkJ10gPSBsb2NhdGlvbklkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodGVhbUlkcyAmJiB0ZWFtSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWyd0ZWFtX2lkJ10gPSB0ZWFtSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFzT3BlblNlc3Npb25zID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHBhcmFtc1snaGFzX29wZW5fc2Vzc2lvbnMnXSA9IFN0cmluZyhoYXNPcGVuU2Vzc2lvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoXG4gICAgdGVhbUlkOiBzdHJpbmcsXG4gICAgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19sdGUnXSA9IGVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGNhbGVuZGFySWRzICYmIGNhbGVuZGFySWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydjYWxlbmRhcl9pZCddID0gY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKGxvY2F0aW9uSWRzICYmIGxvY2F0aW9uSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydsb2NhdGlvbl9pZCddID0gbG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRlYW1JZHMgJiYgdGVhbUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGVhbV9pZCddID0gdGVhbUlkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcoaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgY29weUNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19sdGUnXSA9IGVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGNhbGVuZGFySWRzICYmIGNhbGVuZGFySWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydjYWxlbmRhcl9pZCddID0gY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKGxvY2F0aW9uSWRzICYmIGxvY2F0aW9uSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydsb2NhdGlvbl9pZCddID0gbG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRlYW1JZHMgJiYgdGVhbUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGVhbV9pZCddID0gdGVhbUlkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcoaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgIG9ubHlfY29weV9zbG90czogb25seUNvcHlTbG90cyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBjbGVhckNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBoYXNPcGVuU2Vzc2lvbnM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChjYWxlbmRhcklkcyAmJiBjYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IGNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbklkcyAmJiBsb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IGxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0ZWFtSWRzICYmIHRlYW1JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ3RlYW1faWQnXSA9IHRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYXNPcGVuU2Vzc2lvbnMgPT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zWydoYXNfb3Blbl9zZXNzaW9ucyddID0gU3RyaW5nKGhhc09wZW5TZXNzaW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgICBvbmx5X2RlbGV0ZV9zZXNzaW9uczogb25seURlbGV0ZVNlc3Npb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgKVxuICB9XG5cbiAgc3luY0Jvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGNhbGVuZGFySWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGxvY2F0aW9uSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIHRlYW1JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5zeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsICB3ZWVrUmVsYXRpdmVJbmRleGVzLCBzdGFydERhdGUsIGVuZERhdGUsIGNhbGVuZGFySWRzLCBsb2NhdGlvbklkcywgdGVhbUlkcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgY2FsZW5kYXJJZHMsIGxvY2F0aW9uSWRzLCB0ZWFtSWRzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0NsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChjYWxlbmRhcklkcyAmJiBjYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IGNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbklkcyAmJiBsb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IGxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0ZWFtSWRzICYmIHRlYW1JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ3RlYW1faWQnXSA9IHRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICB9LFxuICAgICAgICB7cGFyYW1zfSxcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc3luY1RlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICB0ZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChjYWxlbmRhcklkcyAmJiBjYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IGNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbklkcyAmJiBsb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IGxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0ZWFtSWRzICYmIHRlYW1JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ3RlYW1faWQnXSA9IHRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICB9LFxuICAgICAgICB7cGFyYW1zfSxcbiAgICAgIClcbiAgfVxuXG4gIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtjbHViSWQsIGlkfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IEJvb2tpbmdDYWxlbmRhclNsb3QpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdC5pZFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyIHNsb3Qgc2Vzc2lvblxuXG4gIGNyZWF0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclRlYW1JZCwgc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JUZWFtSWQsIHNlc3Npb24pO1xuICB9XG5cbiAgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25zKGNsdWJJZDogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19ndGUnXSA9IHN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2x0ZSddID0gZW5kRGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtjbHViSWQsIGlkfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yVGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclRlYW1JZCwgc2Vzc2lvbik7XG4gIH1cblxuICB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgU2V0dGluZ1xuXG4gIGdldEJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JUZWFtSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclRlYW1JZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yVGVhbUlkKTtcbiAgfVxuXG4gIGdldENsdWJCb29raW5nU2V0dGluZ3MoY2x1YklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge2NsdWJJZH1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3RlYW1JZH1cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUNsdWJCb29raW5nU2V0dGluZ3MoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIENhbGVuZGFyIEFwcGxpY2F0aW9uIFRpbWVzXG5cbiAgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogYXZhaWxhYmxlVGltZS5pZFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWU+KSB7XG4gICAgZGVsZXRlIGF2YWlsYWJsZVRpbWUuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cblxufVxuIl19
|
|
492
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBTUwsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3ZCLE1BQU0sYUFBYSxDQUFDOzs7QUFFckIsTUFBTSwyQkFBMkIsR0FBRywrQkFBK0IsQ0FBQztBQUNwRSxNQUFNLDBCQUEwQixHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZFLE1BQU0sZ0NBQWdDLEdBQUcsMkJBQTJCLENBQUM7QUFDckUsTUFBTSxrREFBa0QsR0FBRyw2Q0FBNkMsQ0FBQztBQUN6RyxNQUFNLHFDQUFxQyxHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sc0NBQXNDLEdBQUcsaUNBQWlDLENBQUM7QUFDakYsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDO0FBQ3hFLE1BQU0sMENBQTBDLEdBQUcsbUNBQW1DLENBQUM7QUFDdkYsTUFBTSx3Q0FBd0MsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRixNQUFNLHVDQUF1QyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUM7QUFDMUUsTUFBTSwyQ0FBMkMsR0FBRywyQ0FBMkMsQ0FBQztBQUVoRyxNQUFNLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBQ3BFLE1BQU0sZ0NBQWdDLEdBQUcsMkJBQTJCLENBQUM7QUFDckUsTUFBTSxx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QyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQzs7b0hBeDFCVSxzQkFBc0I7d0hBQXRCLHNCQUFzQixjQUZyQixNQUFNOzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcGlTZXJ2aWNlfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJvb2tpbmdDYWxlbmRhcixcbiAgQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lLFxuICBCb29raW5nQ2FsZW5kYXJTbG90LFxuICBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbixcbiAgQm9va2luZ1NldHRpbmdzLFxuICBSb2xlLFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgYm9va2luZ1NldHRpbmdzRmFjdG9yeVxufSBmcm9tIFwiLi9mYWN0b3JpZXNcIjtcblxuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYm9va2luZy1zZXR0aW5ncy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuXG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJvb2tpbmdDYWxlbmRhclNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UpIHtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyXG5cbiAgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIGRlbGV0ZSBjYWxlbmRhci5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFycyhyb2xlOiBSb2xlLCBjbHViT3JUZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yVGVhbUlkLCBuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yVGVhbUlkLCBuYW1lKTtcbiAgfVxuXG4gIGdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKHRlYW1JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldENsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge2NsdWJJZCwgaWR9XG4gICAgICApXG4gIH1cblxuICB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJJZDogc3RyaW5nLCBjYWxlbmRhcjogQm9va2luZ0NhbGVuZGFyKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IGNhbGVuZGFyLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBjYWxlbmRhciBzbG90XG5cbiAgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBkZWxldGUgc2xvdC5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclRlYW1JZDogc3RyaW5nLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBoYXNPcGVuU2Vzc2lvbnM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclRlYW1JZCwgc3RhcnREYXRlLCBlbmREYXRlLCBjYWxlbmRhcklkcywgbG9jYXRpb25JZHMsIHRlYW1JZHMsIGhhc09wZW5TZXNzaW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JUZWFtSWQsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgY2FsZW5kYXJJZHMsIGxvY2F0aW9uSWRzLCB0ZWFtSWRzLCBoYXNPcGVuU2Vzc2lvbnMpXG4gIH1cblxuICBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19sdGUnXSA9IGVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGNhbGVuZGFySWRzICYmIGNhbGVuZGFySWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydjYWxlbmRhcl9pZCddID0gY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKGxvY2F0aW9uSWRzICYmIGxvY2F0aW9uSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydsb2NhdGlvbl9pZCddID0gbG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRlYW1JZHMgJiYgdGVhbUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGVhbV9pZCddID0gdGVhbUlkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcoaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHRlYW1JZDogc3RyaW5nLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBoYXNPcGVuU2Vzc2lvbnM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChjYWxlbmRhcklkcyAmJiBjYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IGNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbklkcyAmJiBsb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IGxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0ZWFtSWRzICYmIHRlYW1JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ3RlYW1faWQnXSA9IHRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYXNPcGVuU2Vzc2lvbnMgPT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zWydoYXNfb3Blbl9zZXNzaW9ucyddID0gU3RyaW5nKGhhc09wZW5TZXNzaW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLCkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yVGVhbUlkLCBzdGFydERhdGUsIGVuZERhdGUsIGNhbGVuZGFySWRzLCBsb2NhdGlvbklkcywgdGVhbUlkcywgaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJPclRlYW1JZCwgc3RhcnREYXRlLCBlbmREYXRlLCBjYWxlbmRhcklkcywgbG9jYXRpb25JZHMsIHRlYW1JZHMsIGhhc09wZW5TZXNzaW9ucylcbiAgfVxuXG4gIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGNhbGVuZGFySWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGxvY2F0aW9uSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIHRlYW1JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgaGFzT3BlblNlc3Npb25zOiBib29sZWFuIHwgbnVsbCA9IG51bGwsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19ndGUnXSA9IHN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2x0ZSddID0gZW5kRGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoY2FsZW5kYXJJZHMgJiYgY2FsZW5kYXJJZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2NhbGVuZGFyX2lkJ10gPSBjYWxlbmRhcklkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAobG9jYXRpb25JZHMgJiYgbG9jYXRpb25JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2xvY2F0aW9uX2lkJ10gPSBsb2NhdGlvbklkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodGVhbUlkcyAmJiB0ZWFtSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWyd0ZWFtX2lkJ10gPSB0ZWFtSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFzT3BlblNlc3Npb25zID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHBhcmFtc1snaGFzX29wZW5fc2Vzc2lvbnMnXSA9IFN0cmluZyhoYXNPcGVuU2Vzc2lvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoXG4gICAgdGVhbUlkOiBzdHJpbmcsXG4gICAgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19sdGUnXSA9IGVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGNhbGVuZGFySWRzICYmIGNhbGVuZGFySWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydjYWxlbmRhcl9pZCddID0gY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKGxvY2F0aW9uSWRzICYmIGxvY2F0aW9uSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydsb2NhdGlvbl9pZCddID0gbG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRlYW1JZHMgJiYgdGVhbUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGVhbV9pZCddID0gdGVhbUlkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcoaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgY29weUNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19sdGUnXSA9IGVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGNhbGVuZGFySWRzICYmIGNhbGVuZGFySWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydjYWxlbmRhcl9pZCddID0gY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKGxvY2F0aW9uSWRzICYmIGxvY2F0aW9uSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydsb2NhdGlvbl9pZCddID0gbG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRlYW1JZHMgJiYgdGVhbUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGVhbV9pZCddID0gdGVhbUlkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcoaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgIG9ubHlfY29weV9zbG90czogb25seUNvcHlTbG90cyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBjbGVhckNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgICBoYXNPcGVuU2Vzc2lvbnM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChjYWxlbmRhcklkcyAmJiBjYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IGNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbklkcyAmJiBsb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IGxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0ZWFtSWRzICYmIHRlYW1JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ3RlYW1faWQnXSA9IHRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYXNPcGVuU2Vzc2lvbnMgPT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zWydoYXNfb3Blbl9zZXNzaW9ucyddID0gU3RyaW5nKGhhc09wZW5TZXNzaW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgICBvbmx5X2RlbGV0ZV9zZXNzaW9uczogb25seURlbGV0ZVNlc3Npb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgKVxuICB9XG5cbiAgc3luY0Jvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGNhbGVuZGFySWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIGxvY2F0aW9uSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsLFxuICAgIHRlYW1JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5zeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsICB3ZWVrUmVsYXRpdmVJbmRleGVzLCBzdGFydERhdGUsIGVuZERhdGUsIGNhbGVuZGFySWRzLCBsb2NhdGlvbklkcywgdGVhbUlkcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgY2FsZW5kYXJJZHMsIGxvY2F0aW9uSWRzLCB0ZWFtSWRzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0NsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChjYWxlbmRhcklkcyAmJiBjYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IGNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbklkcyAmJiBsb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IGxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0ZWFtSWRzICYmIHRlYW1JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ3RlYW1faWQnXSA9IHRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICB9LFxuICAgICAgICB7cGFyYW1zfSxcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc3luY1RlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICB0ZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGwsXG4gICAgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChjYWxlbmRhcklkcyAmJiBjYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IGNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbklkcyAmJiBsb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IGxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0ZWFtSWRzICYmIHRlYW1JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ3RlYW1faWQnXSA9IHRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICB9LFxuICAgICAgICB7cGFyYW1zfSxcbiAgICAgIClcbiAgfVxuXG4gIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtjbHViSWQsIGlkfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IEJvb2tpbmdDYWxlbmRhclNsb3QpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdC5pZFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyIHNsb3Qgc2Vzc2lvblxuXG4gIGNyZWF0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclRlYW1JZCwgc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JUZWFtSWQsIHNlc3Npb24pO1xuICB9XG5cbiAgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25zKGNsdWJJZDogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIHBhcmFtc1snZGF5X19ndGUnXSA9IHN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2x0ZSddID0gZW5kRGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtjbHViSWQsIGlkfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yVGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclRlYW1JZCwgc2Vzc2lvbik7XG4gIH1cblxuICB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgU2V0dGluZ1xuXG4gIGdldEJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JUZWFtSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclRlYW1JZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yVGVhbUlkKTtcbiAgfVxuXG4gIGdldENsdWJCb29raW5nU2V0dGluZ3MoY2x1YklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge2NsdWJJZH1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3RlYW1JZH1cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViT3JUZWFtSWQsIGJvb2tpbmdTZXR0aW5ncyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yVGVhbUlkLCBib29raW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlVGVhbUJvb2tpbmdTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgQ2FsZW5kYXIgQXBwbGljYXRpb24gVGltZXNcblxuICB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJJZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICBkZWxldGUgYXZhaWxhYmxlVGltZS5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuXG59XG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { BookingCalendar } from "../../models";
|
|
2
|
-
export const bookingCalendarFactory = (apiBookingCalendar) => new BookingCalendar(apiBookingCalendar.id, apiBookingCalendar.club_id, apiBookingCalendar.section_id, apiBookingCalendar.team_id, apiBookingCalendar.club_name, apiBookingCalendar.color, apiBookingCalendar.name, apiBookingCalendar.section_name, apiBookingCalendar.team_name);
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const bookingCalendarFactory = (apiBookingCalendar) => new BookingCalendar(apiBookingCalendar.id, apiBookingCalendar.club_id, apiBookingCalendar.section_id, apiBookingCalendar.team_id, apiBookingCalendar.club_name, apiBookingCalendar.color, apiBookingCalendar.name, apiBookingCalendar.section_name, apiBookingCalendar.team_name, apiBookingCalendar.status);
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9mYWN0b3JpZXMvYm9va2luZy1jYWxlbmRhci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxrQkFBc0MsRUFBRSxFQUFFLENBQy9FLElBQUksZUFBZSxDQUNqQixrQkFBa0IsQ0FBQyxFQUFFLEVBQ3JCLGtCQUFrQixDQUFDLE9BQU8sRUFDMUIsa0JBQWtCLENBQUMsVUFBVSxFQUM3QixrQkFBa0IsQ0FBQyxPQUFPLEVBQzFCLGtCQUFrQixDQUFDLFNBQVMsRUFDNUIsa0JBQWtCLENBQUMsS0FBSyxFQUN4QixrQkFBa0IsQ0FBQyxJQUFJLEVBQ3ZCLGtCQUFrQixDQUFDLFlBQVksRUFDL0Isa0JBQWtCLENBQUMsU0FBUyxFQUM1QixrQkFBa0IsQ0FBQyxNQUFNLENBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FwaUJvb2tpbmdDYWxlbmRhcn0gZnJvbSBcIi4uLy4uL2FwaS1tb2RlbHNcIjtcbmltcG9ydCB7Qm9va2luZ0NhbGVuZGFyfSBmcm9tIFwiLi4vLi4vbW9kZWxzXCI7XG5cbmV4cG9ydCBjb25zdCBib29raW5nQ2FsZW5kYXJGYWN0b3J5ID0gKGFwaUJvb2tpbmdDYWxlbmRhcjogQXBpQm9va2luZ0NhbGVuZGFyKSA9PlxuICBuZXcgQm9va2luZ0NhbGVuZGFyKFxuICAgIGFwaUJvb2tpbmdDYWxlbmRhci5pZCxcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIuY2x1Yl9pZCxcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIuc2VjdGlvbl9pZCxcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIudGVhbV9pZCxcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIuY2x1Yl9uYW1lLFxuICAgIGFwaUJvb2tpbmdDYWxlbmRhci5jb2xvcixcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIubmFtZSxcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIuc2VjdGlvbl9uYW1lLFxuICAgIGFwaUJvb2tpbmdDYWxlbmRhci50ZWFtX25hbWUsXG4gICAgYXBpQm9va2luZ0NhbGVuZGFyLnN0YXR1c1xuICApO1xuIl19
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { BookingSettings } from "../../models";
|
|
2
|
-
export const bookingSettingsFactory = (apiBookingSettings) => new BookingSettings(apiBookingSettings.id, apiBookingSettings.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const bookingSettingsFactory = (apiBookingSettings) => new BookingSettings(apiBookingSettings.id, apiBookingSettings.calendar_step, apiBookingSettings.calendar_min_time, apiBookingSettings.calendar_max_time, apiBookingSettings.should_split_booking_into_zones);
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1zZXR0aW5ncy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9mYWN0b3JpZXMvYm9va2luZy1zZXR0aW5ncy1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxrQkFBc0MsRUFBRSxFQUFFLENBQy9FLElBQUksZUFBZSxDQUNqQixrQkFBa0IsQ0FBQyxFQUFFLEVBQ3JCLGtCQUFrQixDQUFDLGFBQWEsRUFDaEMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQ3BDLGtCQUFrQixDQUFDLGlCQUFpQixFQUNwQyxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpQm9va2luZ1NldHRpbmdzfSBmcm9tIFwiLi4vLi4vYXBpLW1vZGVsc1wiO1xuaW1wb3J0IHtCb29raW5nU2V0dGluZ3N9IGZyb20gXCIuLi8uLi9tb2RlbHNcIjtcblxuZXhwb3J0IGNvbnN0IGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnkgPSAoYXBpQm9va2luZ1NldHRpbmdzOiBBcGlCb29raW5nU2V0dGluZ3MpID0+XG4gIG5ldyBCb29raW5nU2V0dGluZ3MoXG4gICAgYXBpQm9va2luZ1NldHRpbmdzLmlkLFxuICAgIGFwaUJvb2tpbmdTZXR0aW5ncy5jYWxlbmRhcl9zdGVwLFxuICAgIGFwaUJvb2tpbmdTZXR0aW5ncy5jYWxlbmRhcl9taW5fdGltZSxcbiAgICBhcGlCb29raW5nU2V0dGluZ3MuY2FsZW5kYXJfbWF4X3RpbWUsXG4gICAgYXBpQm9va2luZ1NldHRpbmdzLnNob3VsZF9zcGxpdF9ib29raW5nX2ludG9fem9uZXMsXG4gICk7XG4iXX0=
|
|
@@ -231,7 +231,7 @@ class Authentication {
|
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
class BookingCalendar {
|
|
234
|
-
constructor(id, club_id, section_id, team_id, club_name, color, name, section_name, team_name) {
|
|
234
|
+
constructor(id, club_id, section_id, team_id, club_name, color, name, section_name, team_name, status) {
|
|
235
235
|
this.id = id;
|
|
236
236
|
this.club_id = club_id;
|
|
237
237
|
this.section_id = section_id;
|
|
@@ -241,6 +241,7 @@ class BookingCalendar {
|
|
|
241
241
|
this.name = name;
|
|
242
242
|
this.section_name = section_name;
|
|
243
243
|
this.team_name = team_name;
|
|
244
|
+
this.status = status;
|
|
244
245
|
}
|
|
245
246
|
static asFormGroup(calendar) {
|
|
246
247
|
return new FormGroup({
|
|
@@ -252,7 +253,8 @@ class BookingCalendar {
|
|
|
252
253
|
color: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.color) || '', Validators.required),
|
|
253
254
|
name: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.name) || '', Validators.required),
|
|
254
255
|
section_name: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.section_name) || ''),
|
|
255
|
-
team_name: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.team_name) || '')
|
|
256
|
+
team_name: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.team_name) || ''),
|
|
257
|
+
status: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.status) || 'preliminary'),
|
|
256
258
|
});
|
|
257
259
|
}
|
|
258
260
|
}
|
|
@@ -373,9 +375,8 @@ class BookingCalendarSlotSession {
|
|
|
373
375
|
}
|
|
374
376
|
|
|
375
377
|
class BookingSettings {
|
|
376
|
-
constructor(id,
|
|
378
|
+
constructor(id, calendar_step, calendar_min_time, calendar_max_time, should_split_booking_into_zones) {
|
|
377
379
|
this.id = id;
|
|
378
|
-
this.club_id = club_id;
|
|
379
380
|
this.calendar_step = calendar_step;
|
|
380
381
|
this.calendar_min_time = calendar_min_time;
|
|
381
382
|
this.calendar_max_time = calendar_max_time;
|
|
@@ -384,7 +385,6 @@ class BookingSettings {
|
|
|
384
385
|
static asFormGroup(settings) {
|
|
385
386
|
return new FormGroup({
|
|
386
387
|
id: new FormControl((settings === null || settings === void 0 ? void 0 : settings.id) || ''),
|
|
387
|
-
club_id: new FormControl((settings === null || settings === void 0 ? void 0 : settings.club_id) || ''),
|
|
388
388
|
calendar_step: new FormControl((settings === null || settings === void 0 ? void 0 : settings.calendar_step) || '01:00:00', [Validators.required]),
|
|
389
389
|
calendar_min_time: new FormControl((settings === null || settings === void 0 ? void 0 : settings.calendar_min_time) || '00:00:00', [Validators.required]),
|
|
390
390
|
calendar_max_time: new FormControl((settings === null || settings === void 0 ? void 0 : settings.calendar_max_time) || '23:00:00', [Validators.required]),
|
|
@@ -1482,7 +1482,7 @@ const authTeamFactory = (apiAuthTeam) => new AuthTeam(apiAuthTeam.id, apiAuthTea
|
|
|
1482
1482
|
|
|
1483
1483
|
const authFactory = (apiAuth) => new Auth(apiAuth.id, apiAuth.name, apiAuth.club_admin, apiAuth.is_section_club, apiAuth.members.map((apiAuthMember) => authMemberFactory(apiAuthMember)), apiAuth.registration_enabled, apiAuth.sections.map((apiAuthSection) => authSectionFactory(apiAuthSection)), apiAuth.site_enabled, apiAuth.teams.map((apiAuthTeam) => authTeamFactory(apiAuthTeam)), apiAuth.user_name);
|
|
1484
1484
|
|
|
1485
|
-
const bookingCalendarFactory = (apiBookingCalendar) => new BookingCalendar(apiBookingCalendar.id, apiBookingCalendar.club_id, apiBookingCalendar.section_id, apiBookingCalendar.team_id, apiBookingCalendar.club_name, apiBookingCalendar.color, apiBookingCalendar.name, apiBookingCalendar.section_name, apiBookingCalendar.team_name);
|
|
1485
|
+
const bookingCalendarFactory = (apiBookingCalendar) => new BookingCalendar(apiBookingCalendar.id, apiBookingCalendar.club_id, apiBookingCalendar.section_id, apiBookingCalendar.team_id, apiBookingCalendar.club_name, apiBookingCalendar.color, apiBookingCalendar.name, apiBookingCalendar.section_name, apiBookingCalendar.team_name, apiBookingCalendar.status);
|
|
1486
1486
|
|
|
1487
1487
|
const bookingCalendarApplicationTimeFactory = (apiBookingApplicationTime) => new BookingCalendarApplicationTime(apiBookingApplicationTime.id, apiBookingApplicationTime.section_id, apiBookingApplicationTime.slot_id, apiBookingApplicationTime.team_id, apiBookingApplicationTime.end_time, apiBookingApplicationTime.section_name, apiBookingApplicationTime.start_time, apiBookingApplicationTime.team_name, apiBookingApplicationTime.location_zones_taken, apiBookingApplicationTime.applicant_comment, apiBookingApplicationTime.reviewer_comment, apiBookingApplicationTime.status);
|
|
1488
1488
|
|
|
@@ -1490,7 +1490,7 @@ const bookingCalendarSlotSessionFactory = (apiBookingSlotSession) => new Booking
|
|
|
1490
1490
|
|
|
1491
1491
|
const bookingCalendarSlotFactory = (apiBookingSlot) => new BookingCalendarSlot(apiBookingSlot.id, apiBookingSlot.calendar_id, apiBookingSlot.location_id, apiBookingSlot.color, apiBookingSlot.day, apiBookingSlot.end_time, apiBookingSlot.group_id, apiBookingSlot.location_name, apiBookingSlot.number_of_available_sessions, apiBookingSlot.sessions && apiBookingSlot.sessions.length ? apiBookingSlot.sessions.map((apiBookingSlotSession) => bookingCalendarSlotSessionFactory(apiBookingSlotSession)) : [], apiBookingSlot.open_sessions && apiBookingSlot.open_sessions.length ? apiBookingSlot.open_sessions.map((apiBookingSlotSession) => bookingCalendarSlotSessionFactory(apiBookingSlotSession)) : [], apiBookingSlot.start_time, apiBookingSlot.type, 'none', false, false, 6, format(new Date(), 'yyyy-MM-dd'), 'repeat_until', apiBookingSlot.reserved_time, apiBookingSlot.reserved_time_position, apiBookingSlot.application_times && apiBookingSlot.application_times.length ? apiBookingSlot.application_times.map((apiBookingApplicationTime) => bookingCalendarApplicationTimeFactory(apiBookingApplicationTime)) : []);
|
|
1492
1492
|
|
|
1493
|
-
const bookingSettingsFactory = (apiBookingSettings) => new BookingSettings(apiBookingSettings.id, apiBookingSettings.
|
|
1493
|
+
const bookingSettingsFactory = (apiBookingSettings) => new BookingSettings(apiBookingSettings.id, apiBookingSettings.calendar_step, apiBookingSettings.calendar_min_time, apiBookingSettings.calendar_max_time, apiBookingSettings.should_split_booking_into_zones);
|
|
1494
1494
|
|
|
1495
1495
|
const imageUrlsFactory = (apiImageUrls) => new ImageUrls(apiImageUrls.lg, apiImageUrls.md, apiImageUrls.raw, apiImageUrls.sm, apiImageUrls.xs);
|
|
1496
1496
|
|
|
@@ -2347,12 +2347,24 @@ class BookingCalendarService {
|
|
|
2347
2347
|
return this.apiService
|
|
2348
2348
|
.getResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, { teamId });
|
|
2349
2349
|
}
|
|
2350
|
+
updateBookingSettings(role, clubOrTeamId, bookingSettings) {
|
|
2351
|
+
if (role == Role.ClubAdmin) {
|
|
2352
|
+
return this.updateClubBookingSettings(clubOrTeamId, bookingSettings);
|
|
2353
|
+
}
|
|
2354
|
+
return this.updateTeamBookingSettings(clubOrTeamId, bookingSettings);
|
|
2355
|
+
}
|
|
2350
2356
|
updateClubBookingSettings(clubId, bookingSettings) {
|
|
2351
2357
|
return this.apiService
|
|
2352
2358
|
.updateResource(bookingSettingsFactory, Role.ClubAdmin, CLUB_BOOKING_SETTINGS_PATH, {
|
|
2353
2359
|
clubId,
|
|
2354
2360
|
}, bookingSettings);
|
|
2355
2361
|
}
|
|
2362
|
+
updateTeamBookingSettings(teamId, bookingSettings) {
|
|
2363
|
+
return this.apiService
|
|
2364
|
+
.updateResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, {
|
|
2365
|
+
teamId,
|
|
2366
|
+
}, bookingSettings);
|
|
2367
|
+
}
|
|
2356
2368
|
// endregion
|
|
2357
2369
|
// region Booking Calendar Application Times
|
|
2358
2370
|
updateClubBookingCalendarApplicationTime(clubId, availableTime) {
|