@idea-ionic/agenda 8.0.1 → 8.0.3
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/esm2022/src/agenda.component.mjs +19 -59
- package/esm2022/src/calendar.component.mjs +77 -94
- package/esm2022/src/calendarCreation.component.mjs +60 -86
- package/esm2022/src/calendarItem.component.mjs +81 -99
- package/esm2022/src/calendars.service.mjs +115 -160
- package/fesm2022/idea-ionic-agenda.mjs +329 -479
- package/fesm2022/idea-ionic-agenda.mjs.map +1 -1
- package/package.json +8 -8
- package/src/agenda.component.d.ts +7 -46
- package/src/calendar.component.d.ts +11 -42
- package/src/calendarCreation.component.d.ts +6 -38
- package/src/calendarItem.component.d.ts +8 -19
- package/src/calendars.service.d.ts +7 -10
|
@@ -1,128 +1,110 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, inject } from '@angular/core';
|
|
2
|
+
import { AlertController, ModalController } from '@ionic/angular';
|
|
3
|
+
import { IDEALoadingService, IDEAMessageService, IDEATranslationsService } from '@idea-ionic/common';
|
|
2
4
|
import { IDEACalendarComponent } from './calendar.component';
|
|
5
|
+
import { IDEACalendarsService } from './calendars.service';
|
|
3
6
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "
|
|
5
|
-
import * as i2 from "@ionic/
|
|
6
|
-
import * as i3 from "@idea-ionic/common";
|
|
7
|
-
import * as i4 from "@angular/common";
|
|
7
|
+
import * as i1 from "@ionic/angular";
|
|
8
|
+
import * as i2 from "@idea-ionic/common";
|
|
8
9
|
export class IDEACalendarItemComponent {
|
|
9
|
-
constructor(
|
|
10
|
-
this.calendars = calendars;
|
|
11
|
-
this.alertCtrl = alertCtrl;
|
|
12
|
-
this.modalCtrl = modalCtrl;
|
|
13
|
-
this.message = message;
|
|
14
|
-
this.loading = loading;
|
|
15
|
-
this.t = t;
|
|
10
|
+
constructor() {
|
|
16
11
|
/**
|
|
17
12
|
* Report to parent components a change.
|
|
18
13
|
*/
|
|
19
14
|
this.somethingChanged = new EventEmitter();
|
|
15
|
+
this._alert = inject(AlertController);
|
|
16
|
+
this._modal = inject(ModalController);
|
|
17
|
+
this._message = inject(IDEAMessageService);
|
|
18
|
+
this._loading = inject(IDEALoadingService);
|
|
19
|
+
this._translate = inject(IDEATranslationsService);
|
|
20
|
+
this._calendars = inject(IDEACalendarsService);
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
-
* Open the modal to manage the calendar.
|
|
23
|
-
*/
|
|
24
|
-
manageCalendar() {
|
|
22
|
+
async manageCalendar() {
|
|
25
23
|
if (this.disabled)
|
|
26
24
|
return;
|
|
27
|
-
this.
|
|
28
|
-
.create({
|
|
25
|
+
const modal = await this._modal.create({
|
|
29
26
|
component: IDEACalendarComponent,
|
|
30
27
|
componentProps: {
|
|
31
28
|
calendar: this.calendar,
|
|
32
29
|
advancedPermissions: this.advancedPermissions,
|
|
33
30
|
hideColor: this.hideColor
|
|
34
31
|
}
|
|
35
|
-
})
|
|
36
|
-
.then(modal => {
|
|
37
|
-
modal.onDidDismiss().then(res => {
|
|
38
|
-
const cal = res.data;
|
|
39
|
-
// nothing changed
|
|
40
|
-
if (cal === undefined)
|
|
41
|
-
return;
|
|
42
|
-
// the calendar was deleted
|
|
43
|
-
else if (cal === null)
|
|
44
|
-
this.calendar = null;
|
|
45
|
-
// the calendar was updated
|
|
46
|
-
else
|
|
47
|
-
this.calendar.load(cal);
|
|
48
|
-
// report changes to parent components
|
|
49
|
-
this.somethingChanged.emit();
|
|
50
|
-
});
|
|
51
|
-
modal.present();
|
|
52
32
|
});
|
|
33
|
+
modal.onDidDismiss().then(res => {
|
|
34
|
+
const cal = res.data;
|
|
35
|
+
if (cal === undefined)
|
|
36
|
+
return;
|
|
37
|
+
else if (cal === null)
|
|
38
|
+
this.calendar = null;
|
|
39
|
+
else
|
|
40
|
+
this.calendar.load(cal);
|
|
41
|
+
this.somethingChanged.emit();
|
|
42
|
+
});
|
|
43
|
+
modal.present();
|
|
53
44
|
}
|
|
54
|
-
|
|
55
|
-
* Continue the auth flow to link an external service and set an external calendar;
|
|
56
|
-
* otherwise, the calendar can be deleted.
|
|
57
|
-
*/
|
|
58
|
-
linkExtCalendarOrDelete() {
|
|
45
|
+
async linkExtCalendarOrDelete() {
|
|
59
46
|
if (this.disabled)
|
|
60
47
|
return;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
.chooseAndSetExternalCalendar(this.calendar)
|
|
64
|
-
.then(async (cal) => {
|
|
48
|
+
try {
|
|
49
|
+
const cal = await this._calendars.chooseAndSetExternalCalendar(this.calendar);
|
|
65
50
|
if (!cal)
|
|
66
|
-
|
|
51
|
+
throw new Error('NO_EXTERNAL_CALENDAR_CHOSEN');
|
|
67
52
|
this.calendar.load(cal);
|
|
68
|
-
this.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
.
|
|
76
|
-
|
|
77
|
-
|
|
53
|
+
this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_LINKED');
|
|
54
|
+
try {
|
|
55
|
+
await this._loading.show(this._translate._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));
|
|
56
|
+
await this._calendars.syncCalendar(this.calendar);
|
|
57
|
+
this._message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED');
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
this._message.error('COMMON.OPERATION_FAILED');
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
this._loading.hide();
|
|
78
64
|
this.somethingChanged.emit();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
]
|
|
115
|
-
})
|
|
116
|
-
.then(alert => alert.present());
|
|
117
|
-
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const doDelete = async () => {
|
|
69
|
+
try {
|
|
70
|
+
await this._loading.show();
|
|
71
|
+
await this._calendars.deleteCalendar(this.calendar);
|
|
72
|
+
this._message.success('COMMON.OPERATION_COMPLETED');
|
|
73
|
+
this.somethingChanged.emit();
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
this._message.error('COMMON.OPERATION_FAILED');
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
this._loading.hide();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const doLink = async () => {
|
|
83
|
+
try {
|
|
84
|
+
await this._calendars.linkExtService(this.calendar);
|
|
85
|
+
this.linkExtCalendarOrDelete();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this._message.error('COMMON.OPERATION_FAILED');
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const header = this._translate._('IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED');
|
|
92
|
+
const message = this._translate._('IDEA_AGENDA.CALENDARS.DO_YOU_WANT_PROCEED_LINKING_OR_DELETE');
|
|
93
|
+
const buttons = [
|
|
94
|
+
{ text: this._translate._('COMMON.DELETE'), handler: doDelete },
|
|
95
|
+
{ text: this._translate._('IDEA_AGENDA.CALENDARS.LINK'), handler: doLink }
|
|
96
|
+
];
|
|
97
|
+
const alert = await this._alert.create({ header, message, buttons });
|
|
98
|
+
alert.present();
|
|
99
|
+
}
|
|
118
100
|
}
|
|
119
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEACalendarItemComponent, deps: [
|
|
120
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
101
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEACalendarItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: IDEACalendarItemComponent, selector: "idea-calendar-item", inputs: { calendar: "calendar", disabled: "disabled", advancedPermissions: "advancedPermissions", hideColor: "hideColor" }, outputs: { somethingChanged: "somethingChanged" }, ngImport: i0, template: "@if (calendar) {\n <ion-item\n class=\"calendarItem\"\n [button]=\"!disabled\"\n [title]=\"'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n >\n @if (!hideColor) {\n <ion-avatar slot=\"start\" class=\"colorCircle\" [style.background-color]=\"calendar.color\" />\n }\n <ion-label>\n {{ calendar.name }}\n <p>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-text color=\"danger\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n }\n {{ calendar.description }}\n </p>\n </ion-label>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n [title]=\"'IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT' | translate\"\n />\n }\n @if (calendar.external?.service) {\n <ion-icon\n slot=\"end\"\n [name]=\"calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n ('IDEA_AGENDA.CALENDARS.LINKED_TO' | translate) +\n ' ' +\n ('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service | translate)\n \"\n />\n }\n </ion-item>\n}\n", styles: [".calendarItem ion-avatar.colorCircle{width:20px;height:20px;background-color:#555}\n"], dependencies: [{ kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "pipe", type: i2.IDEATranslatePipe, name: "translate" }] }); }
|
|
121
103
|
}
|
|
122
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEACalendarItemComponent, decorators: [{
|
|
123
105
|
type: Component,
|
|
124
|
-
args: [{ selector: 'idea-calendar-item', template: "<ion-item\n
|
|
125
|
-
}],
|
|
106
|
+
args: [{ selector: 'idea-calendar-item', template: "@if (calendar) {\n <ion-item\n class=\"calendarItem\"\n [button]=\"!disabled\"\n [title]=\"'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n >\n @if (!hideColor) {\n <ion-avatar slot=\"start\" class=\"colorCircle\" [style.background-color]=\"calendar.color\" />\n }\n <ion-label>\n {{ calendar.name }}\n <p>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-text color=\"danger\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n }\n {{ calendar.description }}\n </p>\n </ion-label>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n [title]=\"'IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT' | translate\"\n />\n }\n @if (calendar.external?.service) {\n <ion-icon\n slot=\"end\"\n [name]=\"calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n ('IDEA_AGENDA.CALENDARS.LINKED_TO' | translate) +\n ' ' +\n ('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service | translate)\n \"\n />\n }\n </ion-item>\n}\n", styles: [".calendarItem ion-avatar.colorCircle{width:20px;height:20px;background-color:#555}\n"] }]
|
|
107
|
+
}], propDecorators: { calendar: [{
|
|
126
108
|
type: Input
|
|
127
109
|
}], disabled: [{
|
|
128
110
|
type: Input
|
|
@@ -133,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
|
|
|
133
115
|
}], somethingChanged: [{
|
|
134
116
|
type: Output
|
|
135
117
|
}] } });
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJJdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9jYWxlbmRhckl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hZ2VuZGEvc3JjL2NhbGVuZGFySXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTXZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFPN0QsTUFBTSxPQUFPLHlCQUF5QjtJQXNCcEMsWUFDUyxTQUErQixFQUMvQixTQUEwQixFQUMxQixTQUEwQixFQUMxQixPQUEyQixFQUMzQixPQUEyQixFQUMzQixDQUEwQjtRQUwxQixjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUMvQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixNQUFDLEdBQUQsQ0FBQyxDQUF5QjtRQVhuQzs7V0FFRztRQUNjLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7SUFTOUQsQ0FBQztJQUVKOztPQUVHO0lBQ0ksY0FBYztRQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsU0FBUzthQUNYLE1BQU0sQ0FBQztZQUNOLFNBQVMsRUFBRSxxQkFBcUI7WUFDaEMsY0FBYyxFQUFFO2dCQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDN0MsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCO1NB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IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdpZGVhLXRvb2xib3gnO1xuaW1wb3J0IHsgSURFQUxvYWRpbmdTZXJ2aWNlLCBJREVBTWVzc2FnZVNlcnZpY2UsIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUNhbGVuZGFyc1NlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFycy5zZXJ2aWNlJztcbmltcG9ydCB7IElERUFDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS1jYWxlbmRhci1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhckl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnY2FsZW5kYXJJdGVtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQUNhbGVuZGFySXRlbUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgY2FsZW5kYXIgdG8gc2hvdy5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjYWxlbmRhcjogQ2FsZW5kYXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHdlIHdhbnQgdG8gZW5hYmxlIGFkdmFuY2VkIHBlcm1pc3Npb25zIChiYXNlZCBvbiB0aGUgbWVtYmVyc2hpcHMpIG9uIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBhZHZhbmNlZFBlcm1pc3Npb25zOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgY29sb3IgaXMgYW4gaW1wb3J0YW50IGRldGFpbCBvciBpdCBzaG91bGRuJ3QgYmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgaGlkZUNvbG9yOiBib29sZWFuO1xuICAvKipcbiAgICogUmVwb3J0IHRvIHBhcmVudCBjb21wb25lbnRzIGEgY2hhbmdlLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBzb21ldGhpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDYWxlbmRhcj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2FsZW5kYXJzOiBJREVBQ2FsZW5kYXJzU2VydmljZSxcbiAgICBwdWJsaWMgYWxlcnRDdHJsOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHVibGljIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHB1YmxpYyBtZXNzYWdlOiBJREVBTWVzc2FnZVNlcnZpY2UsXG4gICAgcHVibGljIGxvYWRpbmc6IElERUFMb2FkaW5nU2VydmljZSxcbiAgICBwdWJsaWMgdDogSURFQVRyYW5zbGF0aW9uc1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBtb2RhbCB0byBtYW5hZ2UgdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgcHVibGljIG1hbmFnZUNhbGVuZGFyKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5tb2RhbEN0cmxcbiAgICAgIC5jcmVhdGUoe1xuICAgICAgICBjb21wb25lbnQ6IElERUFDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhcixcbiAgICAgICAgICBhZHZhbmNlZFBlcm1pc3Npb25zOiB0aGlzLmFkdmFuY2VkUGVybWlzc2lvbnMsXG4gICAgICAgICAgaGlkZUNvbG9yOiB0aGlzLmhpZGVDb2xvclxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4obW9kYWwgPT4ge1xuICAgICAgICBtb2RhbC5vbkRpZERpc21pc3MoKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgY29uc3QgY2FsID0gcmVzLmRhdGE7XG4gICAgICAgICAgLy8gbm90aGluZyBjaGFuZ2VkXG4gICAgICAgICAgaWYgKGNhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgICAgLy8gdGhlIGNhbGVuZGFyIHdhcyBkZWxldGVkXG4gICAgICAgICAgZWxzZSBpZiAoY2FsID09PSBudWxsKSB0aGlzLmNhbGVuZGFyID0gbnVsbDtcbiAgICAgICAgICAvLyB0aGUgY2FsZW5kYXIgd2FzIHVwZGF0ZWRcbiAgICAgICAgICBlbHNlIHRoaXMuY2FsZW5kYXIubG9hZChjYWwpO1xuICAgICAgICAgIC8vIHJlcG9ydCBjaGFuZ2VzIHRvIHBhcmVudCBjb21wb25lbnRzXG4gICAgICAgICAgdGhpcy5zb21ldGhpbmdDaGFuZ2VkLmVtaXQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsLnByZXNlbnQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnRpbnVlIHRoZSBhdXRoIGZsb3cgdG8gbGluayBhbiBleHRlcm5hbCBzZXJ2aWNlIGFuZCBzZXQgYW4gZXh0ZXJuYWwgY2FsZW5kYXI7XG4gICAqIG90aGVyd2lzZSwgdGhlIGNhbGVuZGFyIGNhbiBiZSBkZWxldGVkLlxuICAgKi9cbiAgcHVibGljIGxpbmtFeHRDYWxlbmRhck9yRGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgLy8gbGV0IHRoZSB1c2VyIHBpY2sgYW4gZXh0ZXJuYWwgY2FsZW5kYXIsIGluIGNhc2UgdGhlIGV4dGVybmFsIHNlcnZpY2UgaXMgbGlua2VkXG4gICAgdGhpcy5jYWxlbmRhcnNcbiAgICAgIC5jaG9vc2VBbmRTZXRFeHRlcm5hbENhbGVuZGFyKHRoaXMuY2FsZW5kYXIpXG4gICAgICAudGhlbihhc3luYyBjYWwgPT4ge1xuICAgICAgICBpZiAoIWNhbCkgcmV0dXJuIG5ldyBFcnJvcignTk9fRVhURVJOQUxfQ0FMRU5EQVJfQ0hPU0VOJyk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIubG9hZChjYWwpO1xuICAgICAgICB0aGlzLm1lc3NhZ2Uuc3VjY2VzcygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkNBTEVOREFSX0xJTktFRCcpO1xuICAgICAgICAvLyBydW4gYSBmaXJzdCBzeW5jIGZvciB0aGUgbGlua2VkIGV4dGVybmFsIGNhbGVuZGFyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZGluZy5zaG93KHRoaXMudC5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuRklSU1RfU1lOQ19NQVlfVEFLRV9BX1dISUxFJykpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyc1xuICAgICAgICAgIC5zeW5jQ2FsZW5kYXIodGhpcy5jYWxlbmRhcilcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLm1lc3NhZ2Uuc3VjY2VzcygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkZJUlNUX1NZTkNfQ09NUExFVEVEJykpXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHRoaXMubWVzc2FnZS5lcnJvcignQ09NTU9OLk9QRVJBVElPTl9GQUlMRUQnKSlcbiAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgLy8gcmVwb3J0IGNoYW5nZXMgdG8gcGFyZW50IGNvbXBvbmVudHNcbiAgICAgICAgICAgIHRoaXMuc29tZXRoaW5nQ2hhbmdlZC5lbWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLy8gdGhlIGV4dGVybmFsIHNlcnZpY2UgaXNuJ3QgbGlua2VkIHlldCAod2UgZG9uJ3QgaGF2ZSBhIHRva2VuKTogbGluayBvciBkZWxldGVcbiAgICAgICAgdGhpcy5hbGVydEN0cmxcbiAgICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50Ll8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5DQUxFTkRBUl9OT1RfWUVUX0xJTktFRCcpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50Ll8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5ET19ZT1VfV0FOVF9QUk9DRUVEX0xJTktJTkdfT1JfREVMRVRFJyksXG4gICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnQuXygnQ09NTU9OLkRFTEVURScpLFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgdGhlIGNhbGVuZGFyIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRpbmcuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNcbiAgICAgICAgICAgICAgICAgICAgLmRlbGV0ZUNhbGVuZGFyKHRoaXMuY2FsZW5kYXIpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uuc3VjY2VzcygnQ09NTU9OLk9QRVJBVElPTl9DT01QTEVURUQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2hhbmdlcyB0byBwYXJlbnQgY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29tZXRoaW5nQ2hhbmdlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLm1lc3NhZ2UuZXJyb3IoJ0NPTU1PTi5PUEVSQVRJT05fRkFJTEVEJykpXG4gICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMubG9hZGluZy5oaWRlKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudC5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuTElOSycpLFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6ICgpID0+XG4gICAgICAgICAgICAgICAgICAvLyB0cnkgYWdhaW4gdG8gbGluayB0aGUgc2VydmljZVxuICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNcbiAgICAgICAgICAgICAgICAgICAgLmxpbmtFeHRTZXJ2aWNlKHRoaXMuY2FsZW5kYXIpXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzZXJ2aWNlIHdhcyBzdWNjZXNzZnVsbHkgbGlua2VkLCBnbyByZWN1cnNpdmUgdG8gY2hvb3NlIGFuZCBzZXQgdGhlIGV4dGVybmFsIGNhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubGlua0V4dENhbGVuZGFyT3JEZWxldGUoKSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRoaXMubWVzc2FnZS5lcnJvcignQ09NTU9OLk9QRVJBVElPTl9GQUlMRUQnKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oYWxlcnQgPT4gYWxlcnQucHJlc2VudCgpKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8aW9uLWl0ZW1cbiAgY2xhc3M9XCJjYWxlbmRhckl0ZW1cIlxuICAqbmdJZj1cImNhbGVuZGFyXCJcbiAgW2J1dHRvbl09XCIhZGlzYWJsZWRcIlxuICBbdGl0bGVdPVwidC5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuRURJVF9DQUxFTkRBUicpXCJcbiAgKGNsaWNrKT1cImNhbGVuZGFyLmV4dGVybmFsICYmICFjYWxlbmRhci5leHRlcm5hbC5jYWxlbmRhcklkID8gbGlua0V4dENhbGVuZGFyT3JEZWxldGUoKSA6IG1hbmFnZUNhbGVuZGFyKClcIlxuPlxuICA8aW9uLWF2YXRhclxuICAgIHNsb3Q9XCJzdGFydFwiXG4gICAgY2xhc3M9XCJjb2xvckNpcmNsZVwiXG4gICAgKm5nSWY9XCIhaGlkZUNvbG9yXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjYWxlbmRhci5jb2xvclwiXG4gID48L2lvbi1hdmF0YXI+XG4gIDxpb24tbGFiZWw+XG4gICAge3sgY2FsZW5kYXIubmFtZSB9fVxuICAgIDxwPlxuICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFuZ2VyXCIgKm5nSWY9XCJjYWxlbmRhci5leHRlcm5hbCAmJiAhY2FsZW5kYXIuZXh0ZXJuYWwuY2FsZW5kYXJJZFwiPlxuICAgICAgICB7eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlRBUF9UT19DT05GSUdVUkUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2lvbi10ZXh0PlxuICAgICAge3sgY2FsZW5kYXIuZGVzY3JpcHRpb24gfX1cbiAgICA8L3A+XG4gIDwvaW9uLWxhYmVsPlxuICA8aW9uLWljb25cbiAgICBzbG90PVwiZW5kXCJcbiAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgbmFtZT1cImZsYXNoLW9mZlwiXG4gICAgKm5nSWY9XCJjYWxlbmRhci5leHRlcm5hbCAmJiAhY2FsZW5kYXIuZXh0ZXJuYWwuY2FsZW5kYXJJZFwiXG4gICAgW3RpdGxlXT1cInQuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkNBTEVOREFSX05PVF9ZRVRfTElOS0VEX0hJTlQnKVwiXG4gID48L2lvbi1pY29uPlxuICA8aW9uLWljb25cbiAgICBzbG90PVwiZW5kXCJcbiAgICAqbmdJZj1cImNhbGVuZGFyLmV4dGVybmFsPy5zZXJ2aWNlXCJcbiAgICBbbmFtZV09XCJjYWxlbmRhcnMuZ2V0U2VydmljZUljb24oY2FsZW5kYXIuZXh0ZXJuYWwuc2VydmljZSlcIlxuICAgIFt0aXRsZV09XCJcbiAgICAgIHQuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkxJTktFRF9UTycpICsgJyAnICsgdC5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuU0VSVklDRVMuJyArIGNhbGVuZGFyLmV4dGVybmFsLnNlcnZpY2UpXG4gICAgXCJcbiAgPjwvaW9uLWljb24+XG48L2lvbi1pdGVtPlxuIl19
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJJdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9jYWxlbmRhckl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hZ2VuZGEvc3JjL2NhbGVuZGFySXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBTzNELE1BQU0sT0FBTyx5QkFBeUI7SUFMdEM7UUFzQkU7O1dBRUc7UUFDTyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRWxELFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxhQUFRLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUM3QyxlQUFVLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0FzRW5EO0lBcEVDLEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVE7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QUFRO3NCQUFoQixLQUFLO2dCQUlHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdpZGVhLXRvb2xib3gnO1xuaW1wb3J0IHsgSURFQUxvYWRpbmdTZXJ2aWNlLCBJREVBTWVzc2FnZVNlcnZpY2UsIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURFQUNhbGVuZGFyc1NlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFycy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS1jYWxlbmRhci1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhckl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnY2FsZW5kYXJJdGVtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQUNhbGVuZGFySXRlbUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgY2FsZW5kYXIgdG8gc2hvdy5cbiAgICovXG4gIEBJbnB1dCgpIGNhbGVuZGFyOiBDYWxlbmRhcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB3ZSB3YW50IHRvIGVuYWJsZSBhZHZhbmNlZCBwZXJtaXNzaW9ucyAoYmFzZWQgb24gdGhlIG1lbWJlcnNoaXBzKSBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhZHZhbmNlZFBlcm1pc3Npb25zOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgY29sb3IgaXMgYW4gaW1wb3J0YW50IGRldGFpbCBvciBpdCBzaG91bGRuJ3QgYmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBoaWRlQ29sb3I6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXBvcnQgdG8gcGFyZW50IGNvbXBvbmVudHMgYSBjaGFuZ2UuXG4gICAqL1xuICBAT3V0cHV0KCkgc29tZXRoaW5nQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXI+KCk7XG5cbiAgcHJpdmF0ZSBfYWxlcnQgPSBpbmplY3QoQWxlcnRDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfbW9kYWwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChJREVBTWVzc2FnZVNlcnZpY2UpO1xuICBwcml2YXRlIF9sb2FkaW5nID0gaW5qZWN0KElERUFMb2FkaW5nU2VydmljZSk7XG4gIHByaXZhdGUgX3RyYW5zbGF0ZSA9IGluamVjdChJREVBVHJhbnNsYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgX2NhbGVuZGFycyA9IGluamVjdChJREVBQ2FsZW5kYXJzU2VydmljZSk7XG5cbiAgYXN5bmMgbWFuYWdlQ2FsZW5kYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMuX21vZGFsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IElERUFDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyLFxuICAgICAgICBhZHZhbmNlZFBlcm1pc3Npb25zOiB0aGlzLmFkdmFuY2VkUGVybWlzc2lvbnMsXG4gICAgICAgIGhpZGVDb2xvcjogdGhpcy5oaWRlQ29sb3JcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb2RhbC5vbkRpZERpc21pc3MoKS50aGVuKHJlcyA9PiB7XG4gICAgICBjb25zdCBjYWwgPSByZXMuZGF0YTtcbiAgICAgIGlmIChjYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgZWxzZSBpZiAoY2FsID09PSBudWxsKSB0aGlzLmNhbGVuZGFyID0gbnVsbDtcbiAgICAgIGVsc2UgdGhpcy5jYWxlbmRhci5sb2FkKGNhbCk7XG4gICAgICB0aGlzLnNvbWV0aGluZ0NoYW5nZWQuZW1pdCgpO1xuICAgIH0pO1xuICAgIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbGlua0V4dENhbGVuZGFyT3JEZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FsID0gYXdhaXQgdGhpcy5fY2FsZW5kYXJzLmNob29zZUFuZFNldEV4dGVybmFsQ2FsZW5kYXIodGhpcy5jYWxlbmRhcik7XG4gICAgICBpZiAoIWNhbCkgdGhyb3cgbmV3IEVycm9yKCdOT19FWFRFUk5BTF9DQUxFTkRBUl9DSE9TRU4nKTtcbiAgICAgIHRoaXMuY2FsZW5kYXIubG9hZChjYWwpO1xuICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfTElOS0VEJyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkaW5nLnNob3codGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5GSVJTVF9TWU5DX01BWV9UQUtFX0FfV0hJTEUnKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5zeW5jQ2FsZW5kYXIodGhpcy5jYWxlbmRhcik7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkZJUlNUX1NZTkNfQ09NUExFVEVEJyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdDT01NT04uT1BFUkFUSU9OX0ZBSUxFRCcpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fbG9hZGluZy5oaWRlKCk7XG4gICAgICAgIHRoaXMuc29tZXRoaW5nQ2hhbmdlZC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGRvRGVsZXRlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2xvYWRpbmcuc2hvdygpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5kZWxldGVDYWxlbmRhcih0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0NPTU1PTi5PUEVSQVRJT05fQ09NUExFVEVEJyk7XG4gICAgICAgICAgdGhpcy5zb21ldGhpbmdDaGFuZ2VkLmVtaXQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdDT01NT04uT1BFUkFUSU9OX0ZBSUxFRCcpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9MaW5rID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5saW5rRXh0U2VydmljZSh0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgICB0aGlzLmxpbmtFeHRDYWxlbmRhck9yRGVsZXRlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5lcnJvcignQ09NTU9OLk9QRVJBVElPTl9GQUlMRUQnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfTk9UX1lFVF9MSU5LRUQnKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRPX1lPVV9XQU5UX1BST0NFRURfTElOS0lOR19PUl9ERUxFVEUnKTtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBbXG4gICAgICAgIHsgdGV4dDogdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5ERUxFVEUnKSwgaGFuZGxlcjogZG9EZWxldGUgfSxcbiAgICAgICAgeyB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkxJTksnKSwgaGFuZGxlcjogZG9MaW5rIH1cbiAgICAgIF07XG4gICAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuX2FsZXJ0LmNyZWF0ZSh7IGhlYWRlciwgbWVzc2FnZSwgYnV0dG9ucyB9KTtcbiAgICAgIGFsZXJ0LnByZXNlbnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAoY2FsZW5kYXIpIHtcbiAgPGlvbi1pdGVtXG4gICAgY2xhc3M9XCJjYWxlbmRhckl0ZW1cIlxuICAgIFtidXR0b25dPVwiIWRpc2FibGVkXCJcbiAgICBbdGl0bGVdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5FRElUX0NBTEVOREFSJyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cImNhbGVuZGFyLmV4dGVybmFsICYmICFjYWxlbmRhci5leHRlcm5hbC5jYWxlbmRhcklkID8gbGlua0V4dENhbGVuZGFyT3JEZWxldGUoKSA6IG1hbmFnZUNhbGVuZGFyKClcIlxuICA+XG4gICAgQGlmICghaGlkZUNvbG9yKSB7XG4gICAgICA8aW9uLWF2YXRhciBzbG90PVwic3RhcnRcIiBjbGFzcz1cImNvbG9yQ2lyY2xlXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY2FsZW5kYXIuY29sb3JcIiAvPlxuICAgIH1cbiAgICA8aW9uLWxhYmVsPlxuICAgICAge3sgY2FsZW5kYXIubmFtZSB9fVxuICAgICAgPHA+XG4gICAgICAgIEBpZiAoY2FsZW5kYXIuZXh0ZXJuYWwgJiYgIWNhbGVuZGFyLmV4dGVybmFsLmNhbGVuZGFySWQpIHtcbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIj5cbiAgICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuVEFQX1RPX0NPTkZJR1VSRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICB9XG4gICAgICAgIHt7IGNhbGVuZGFyLmRlc2NyaXB0aW9uIH19XG4gICAgICA8L3A+XG4gICAgPC9pb24tbGFiZWw+XG4gICAgQGlmIChjYWxlbmRhci5leHRlcm5hbCAmJiAhY2FsZW5kYXIuZXh0ZXJuYWwuY2FsZW5kYXJJZCkge1xuICAgICAgPGlvbi1pY29uXG4gICAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgIG5hbWU9XCJmbGFzaC1vZmZcIlxuICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5DQUxFTkRBUl9OT1RfWUVUX0xJTktFRF9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAvPlxuICAgIH1cbiAgICBAaWYgKGNhbGVuZGFyLmV4dGVybmFsPy5zZXJ2aWNlKSB7XG4gICAgICA8aW9uLWljb25cbiAgICAgICAgc2xvdD1cImVuZFwiXG4gICAgICAgIFtuYW1lXT1cImNhbGVuZGFycy5nZXRTZXJ2aWNlSWNvbihjYWxlbmRhci5leHRlcm5hbC5zZXJ2aWNlKVwiXG4gICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAoJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LRURfVE8nIHwgdHJhbnNsYXRlKSArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAoJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5TRVJWSUNFUy4nICsgY2FsZW5kYXIuZXh0ZXJuYWwuc2VydmljZSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgXCJcbiAgICAgIC8+XG4gICAgfVxuICA8L2lvbi1pdGVtPlxufVxuIl19
|