@provoly/dashboard 0.18.1 → 0.18.2
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/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +21 -9
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +20 -8
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
- package/package.json +13 -13
- package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +1 -0
package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, ViewChild } from '@angular/core';
|
|
2
|
-
import { ClassSelectors, DataWidgetComponent, FieldSelectors, FieldType, GraphType, Operation, VegaColorType, VegaType, WIDGET_HEADER_HEIGHT } from '@provoly/dashboard';
|
|
2
|
+
import { ClassSelectors, DataWidgetComponent, FieldSelectors, FieldType, GraphType, NamedQueryTypes, Operation, VegaColorType, VegaType, WIDGET_HEADER_HEIGHT } from '@provoly/dashboard';
|
|
3
3
|
import { BehaviorSubject, combineLatest, debounceTime, filter, fromEvent, map, share, startWith, Subject, switchMap, withLatestFrom } from 'rxjs';
|
|
4
4
|
import embed, { vega } from 'vega-embed';
|
|
5
5
|
import { mergeDeep } from 'vega-lite';
|
|
@@ -66,8 +66,23 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
66
66
|
.sort((a, b) => a.label.localeCompare(b.label))));
|
|
67
67
|
this.subscriptions.add(this.fields$.subscribe((fields) => (this.fields = fields)));
|
|
68
68
|
this.subscriptions.add(this.classes$.subscribe((classes) => (this.classes = classes)));
|
|
69
|
-
this.
|
|
70
|
-
|
|
69
|
+
this.allowedClasses$ = combineLatest([this.classes$, this.usedDatasources$]).pipe(map(([classes, datasources]) => {
|
|
70
|
+
const hasFullText = datasources
|
|
71
|
+
.map((ds) => ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MULTI_CLASS)
|
|
72
|
+
.reduce((p, c) => p || c, false);
|
|
73
|
+
const multiClassDatasourcesClasses = datasources
|
|
74
|
+
.filter((ds) => ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MULTI_CLASS)
|
|
75
|
+
.map((multiDs) => multiDs.request)
|
|
76
|
+
.map((payload) => payload.oClasses);
|
|
77
|
+
const hasMultiNoClass = multiClassDatasourcesClasses.includes(undefined);
|
|
78
|
+
const multiClasses = multiClassDatasourcesClasses.filter((classes) => !!classes).reduce((p, c) => [...p, ...c], []);
|
|
79
|
+
const singleClasses = datasources
|
|
80
|
+
.filter((ds) => (ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MONO_CLASS) ||
|
|
81
|
+
ds.sourceType === 'dataset')
|
|
82
|
+
.map((singleDs) => singleDs.oClass ?? singleDs.request.oClass);
|
|
83
|
+
return classes.filter((clazz) => hasFullText || hasMultiNoClass || multiClasses.includes(clazz.id) || singleClasses.includes(clazz.id));
|
|
84
|
+
}));
|
|
85
|
+
this.abscissaAttributes$ = combineLatest([this.fields$, this.allowedClasses$, this.optionsCopy$]).pipe(map(([fields, allowedClasses, optionCopy]) => allowedClasses
|
|
71
86
|
.map((clazz) => clazz.attributes)
|
|
72
87
|
.map((attrs) => attrs.filter((attr) => {
|
|
73
88
|
const field = fields.find((field) => {
|
|
@@ -80,12 +95,10 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
80
95
|
}))
|
|
81
96
|
.reduce((a, b) => [...a, ...b], [])));
|
|
82
97
|
this.ordinateAttributes$ = combineLatest([
|
|
83
|
-
this.classes$,
|
|
84
98
|
this.fields$,
|
|
85
|
-
this.
|
|
99
|
+
this.allowedClasses$,
|
|
86
100
|
this.triggerOrdinateAttributes$
|
|
87
|
-
]).pipe(map(([
|
|
88
|
-
.filter((clazz) => Object.keys(rs.items).includes(clazz.id))
|
|
101
|
+
]).pipe(map(([fields, allowedClasses]) => allowedClasses
|
|
89
102
|
.map((clazz) => clazz.attributes)
|
|
90
103
|
.map((attrs) => attrs.filter((attr) => {
|
|
91
104
|
const field = fields.find((field) => {
|
|
@@ -151,7 +164,6 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
151
164
|
this.aggregatedValues$ = combineLatest([
|
|
152
165
|
this.datasourceIds$,
|
|
153
166
|
this.options$,
|
|
154
|
-
this.resultSet$.pipe(filter((rs) => (rs.merged ?? 0) > 0)),
|
|
155
167
|
combineLatest([fromEvent(window, 'datasourceRefresh'), this.datasourceIds$]).pipe(filter(([event, datasources]) => datasources.includes(event.detail)), startWith(undefined))
|
|
156
168
|
]).pipe(debounceTime(100), switchMap(([datasources, options]) => this.aggregationService.aggregate(datasources, options)), withLatestFrom(this.options$), map(([aggregate, options]) => {
|
|
157
169
|
// @ts-ignore
|
|
@@ -656,4 +668,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
|
|
|
656
668
|
type: ViewChild,
|
|
657
669
|
args: ['vega']
|
|
658
670
|
}] } });
|
|
659
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFJTCxjQUFjLEVBQ2QsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFJVCxhQUFhLEVBQ2IsUUFBUSxFQUNSLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFFSCxLQUFLLEVBQ0wsU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLEVBQ1QsY0FBYyxFQUNmLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxXQUFXLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7OztBQUV4RCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBbHhCVSw4QkFBOEI7a0dBQTlCLDhCQUE4Qix3TEM3QzNDLDRyYkFvVUE7OzJGRHZSYSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0UsNkJBQTZCO3NMQUlwQixJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEdyYXBoVHlwZSxcbiAgT3BlcmF0aW9uLFxuICBQcnlBZ2dyZWdhdGlvblNlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBWYWx1ZVR5cGUsXG4gIFZlZ2FDb2xvclR5cGUsXG4gIFZlZ2FUeXBlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHNoYXJlLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgd2l0aExhdGVzdEZyb21cbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAndmVnYSc7XG5pbXBvcnQgZW1iZWQsIHsgdmVnYSB9IGZyb20gJ3ZlZ2EtZW1iZWQnO1xuaW1wb3J0IHsgbWVyZ2VEZWVwLCBUb3BMZXZlbFNwZWMgfSBmcm9tICd2ZWdhLWxpdGUnO1xuaW1wb3J0IHsgZm9udENvbmZpZyB9IGZyb20gJ3ZlZ2EtbGl0ZS9idWlsZC9zcmMvY29uZmlnJztcblxudmVnYS5zY2hlbWUoJ0tPL1cvT0snLCBbJyNDMDREM0YnLCAnI0ZEOTg0MycsICcjOUFCRTI5J10pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmVnYScpIHZlZ2EhOiBFbGVtZW50UmVmO1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9uc0NvcHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gIHZpZXc/OiBWaWV3O1xuICB0cmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHZlZ2FMaXRlU3BlYyQ6IE9ic2VydmFibGU8VG9wTGV2ZWxTcGVjPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGF0dHJpYnV0ZVR5cGVzJDogT2JzZXJ2YWJsZTx7XG4gICAgb3JkaW5hdGU6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZFR5cGU6IGFueTsgbmFtZTogc3RyaW5nIH07XG4gICAgYWJzY2lzc2E6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZFR5cGU6IGFueTsgbmFtZTogc3RyaW5nIH07XG4gICAgZ3JvdXBCeTogeyB2ZWdhVHlwZT86IFZlZ2FUeXBlOyBmaWVsZFR5cGU/OiBhbnk7IG5hbWU6IHN0cmluZyB9O1xuICB9PjtcbiAgYWdncmVnYXRlZFZhbHVlcyQ6IE9ic2VydmFibGU8eyBkYXRhOiBhbnk7IG9wZXJhdGlvbjogYW55IH0+O1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBHcmFwaFR5cGUgPSBHcmFwaFR5cGU7XG4gIE9wZXJhdGlvbiA9IE9wZXJhdGlvbjtcbiAgaXNDaGFydFZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdHlwZU9wdGlvbnM6IHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcbiAgb3BlcmF0aW9ucyQ6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXT47XG4gIGFic2Npc3NhQXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICBjbGFzc2VzOiBDbGFzc1tdID0gW107XG4gIGZpZWxkczogRmllbGRbXSA9IFtdO1xuICBvcmRpbmF0ZUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgdHJpZ2dlck9yZGluYXRlQXR0cmlidXRlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb3B5QWJzY2lzc2FGaWVsZD86IEZpZWxkO1xuICBjb3B5T3JkaW5hdGVGaWVsZD86IEZpZWxkO1xuICBzY2hlbWVzOiB7IGlkOiBzdHJpbmcgfVtdID0gW107XG4gIG5vRGF0YSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNvcnRBY3RpdmU/ID0gJ25hbWUnO1xuICBzb3J0RGlyZWN0aW9uPyA9ICdhc2MnO1xuICBub0FnZ3JlZ2F0aW9uRGF0YSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGFnZ3JlZ2F0aW9uU2VydmljZTogUHJ5QWdncmVnYXRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG4gICAgdGhpcy5zY2hlbWVzID0gT2JqZWN0LnZhbHVlcyhWZWdhQ29sb3JUeXBlKS5tYXAoKGlkKSA9PiAoeyBpZCB9KSk7XG4gICAgdGhpcy50eXBlT3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoR3JhcGhUeXBlKVxuICAgICAgLm1hcCgodikgPT4gKHtcbiAgICAgICAgaWQ6IHYsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuZ3JhcGhUeXBlLicgKyB2KVxuICAgICAgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLm1hbmlmZXN0JC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAobWFuaWZlc3QpID0+XG4gICAgICAgICAgbWVyZ2VEZWVwKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBncmFwaDogeyB0eXBlOiBHcmFwaFR5cGUuQkFSLCB0b29sdGlwOiB0cnVlLCBsZWdlbmQ6IGZhbHNlIH0sXG4gICAgICAgICAgICAgIGFic2Npc3NhOiB7IGtlZXAwOiB0cnVlIH0sXG4gICAgICAgICAgICAgIG9yZGluYXRlOiB7IGtlZXAwOiB0cnVlIH1cbiAgICAgICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyxcbiAgICAgICAgICAgIChtYW5pZmVzdC5vcHRpb25zID8/IHt9KSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zXG4gICAgICAgICAgKSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLm9wdGlvbnMkLnBpcGUoZmlsdGVyKChvcHQpID0+ICEhb3B0KSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpKTtcbiAgICB9KTtcbiAgICB0aGlzLmZpZWxkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpO1xuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcblxuICAgIHRoaXMub3BlcmF0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMuY2xhc3NlcyQsIHRoaXMuZmllbGRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtycywgY2xhc3NlcywgZmllbGRzXSkgPT5cbiAgICAgICAgY2xhc3Nlc1xuICAgICAgICAgIC5maWx0ZXIoKGNsYXp6KSA9PiBPYmplY3Qua2V5cyhycy5pdGVtcykuaW5jbHVkZXMoY2xhenouaWQpKVxuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuICEhZmllbGQgJiYgW0ZpZWxkVHlwZS5JTlRFR0VSLCBGaWVsZFR5cGUuREVDSU1BTCwgRmllbGRUeXBlLkxPTkddLmluY2x1ZGVzKGZpZWxkLnR5cGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyKSA9PiAhIWF0dHIpXG4gICAgICApLFxuICAgICAgbWFwKChhdHRyaWJ1dGVzKSA9PlxuICAgICAgICAoYXR0cmlidXRlcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBPYmplY3QudmFsdWVzKE9wZXJhdGlvbikuZmlsdGVyKChvcGVyYXRpb24pID0+IG9wZXJhdGlvbiAhPT0gT3BlcmF0aW9uLkVYVEVOVClcbiAgICAgICAgICA6IFtPcGVyYXRpb24uQ09VTlQsIE9wZXJhdGlvbi5ESVNUSU5DVCwgT3BlcmF0aW9uLk5PTkVdXG4gICAgICAgIClcbiAgICAgICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9wZXJhdGlvbi4nICsgdilcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZmllbGRzJC5zdWJzY3JpYmUoKGZpZWxkcykgPT4gKHRoaXMuZmllbGRzID0gZmllbGRzKSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5jbGFzc2VzJC5zdWJzY3JpYmUoKGNsYXNzZXMpID0+ICh0aGlzLmNsYXNzZXMgPSBjbGFzc2VzKSkpO1xuXG4gICAgdGhpcy5hYnNjaXNzYUF0dHJpYnV0ZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkLCB0aGlzLnJlc3VsdFNldCQsIHRoaXMub3B0aW9uc0NvcHkkXSkucGlwZShcbiAgICAgIG1hcCgoW2NsYXNzZXMsIGZpZWxkcywgcnMsIG9wdGlvbkNvcHldKSA9PlxuICAgICAgICBjbGFzc2VzXG4gICAgICAgICAgLmZpbHRlcigoY2xhenopID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKS5pbmNsdWRlcyhjbGF6ei5pZCkpXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgLm1hcCgoYXR0cnMpID0+XG4gICAgICAgICAgICBhdHRycy5maWx0ZXIoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICEhZmllbGQgJiZcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuUkFXICYmXG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlNUUklORyAmJlxuICAgICAgICAgICAgICAgIChvcHRpb25Db3B5Py5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuSElTVE9HUkFNIHx8IGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5LRVlXT1JEKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5vcmRpbmF0ZUF0dHJpYnV0ZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy50cmlnZ2VyT3JkaW5hdGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCBmaWVsZHMsIHJzXSkgPT5cbiAgICAgICAgY2xhc3Nlc1xuICAgICAgICAgIC5maWx0ZXIoKGNsYXp6KSA9PiBPYmplY3Qua2V5cyhycy5pdGVtcykuaW5jbHVkZXMoY2xhenouaWQpKVxuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk1BWCxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5NSU4sXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uU1VNLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlExLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlEzLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLkFWRVJBR0UsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTUVESUFOLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk5PTkVcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLm9yZGluYXRlLm9wZXJhdGlvbilcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICEhZmllbGQgJiZcbiAgICAgICAgICAgICAgICAgIFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuREVDSU1BTF0uaW5jbHVkZXMoZmllbGQudHlwZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAhIWZpZWxkICYmIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcgJiYgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuaXNDaGFydFZhbGlkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMuYWJzY2lzc2FBdHRyaWJ1dGVzJCwgdGhpcy5vcmRpbmF0ZUF0dHJpYnV0ZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIGFic2Npc3NhQXR0cnMsIG9yZGluYXRlQXR0cnNdKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgISFvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSAmJlxuICAgICAgICAgIGFic2Npc3NhQXR0cnMubWFwKChhdHRyKSA9PiBhdHRyLmlkKS5pbmNsdWRlcyhvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSkgJiZcbiAgICAgICAgICAob3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGVcbiAgICAgICAgICAgID8gb3JkaW5hdGVBdHRycy5tYXAoKGF0dHIpID0+IGF0dHIuaWQpLmluY2x1ZGVzKG9wdGlvbnMub3JkaW5hdGUuYXR0cmlidXRlKVxuICAgICAgICAgICAgOiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLmZpZWxkcyQsIHRoaXMuY2xhc3NlcyRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbb3B0aW9ucywgZmllbGRzLCBjbGFzc2VzXSkgPT4gISFvcHRpb25zLmFic2Npc3NhICYmICEhb3B0aW9ucy5vcmRpbmF0ZSksXG4gICAgICBtYXAoKFtvcHRpb25zLCBmaWVsZHMsIGNsYXNzZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFic2Npc3NhID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMuYWJzY2lzc2EuYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3Qgb3JkaW5hdGUgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGUpKVxuICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpO1xuICAgICAgICBjb25zdCBncm91cEJ5ID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMuZ3JvdXBCeT8uYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3QgYWJzY2lzc2FGaWVsZFR5cGUgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhYnNjaXNzYT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIGNvbnN0IG9yZGluYXRlRmllbGRUeXBlID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gb3JkaW5hdGU/LmZpZWxkKT8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HO1xuICAgICAgICBjb25zdCBncm91cEJ5RmllbGRUeXBlID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gZ3JvdXBCeT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogYWJzY2lzc2FGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGFic2Npc3NhRmllbGRUeXBlLCBhYnNjaXNzYT8ubmFtZSA/PyAnJyksXG4gICAgICAgICAgICBuYW1lOiBhYnNjaXNzYT8ubmFtZSA/PyAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3JkaW5hdGU6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogb3JkaW5hdGVGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5vcmRpbmF0ZS5vcGVyYXRpb24gPT09IE9wZXJhdGlvbi5DT1VOVCB8fCBvcHRpb25zLm9yZGluYXRlLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uLkRJU1RJTkNUXG4gICAgICAgICAgICAgICAgPyBWZWdhVHlwZS5RVUFOVElUQVRJVkVcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlVG9WZWdhVHlwZShvcmRpbmF0ZUZpZWxkVHlwZSwgb3JkaW5hdGU/Lm5hbWUgPz8gJycpLFxuICAgICAgICAgICAgbmFtZTogb3JkaW5hdGU/Lm5hbWUgPz8gJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogZ3JvdXBCeUZpZWxkVHlwZSxcbiAgICAgICAgICAgIHZlZ2FUeXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoZ3JvdXBCeUZpZWxkVHlwZSwgZ3JvdXBCeT8ubmFtZSksXG4gICAgICAgICAgICBuYW1lOiBncm91cEJ5Py5uYW1lID8/ICcnXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGVkVmFsdWVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5kYXRhc291cmNlSWRzJCxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQucGlwZShmaWx0ZXIoKHJzKSA9PiAocnMubWVyZ2VkID8/IDApID4gMCkpLFxuICAgICAgY29tYmluZUxhdGVzdChbZnJvbUV2ZW50KHdpbmRvdywgJ2RhdGFzb3VyY2VSZWZyZXNoJyksIHRoaXMuZGF0YXNvdXJjZUlkcyRdKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKFtldmVudCwgZGF0YXNvdXJjZXNdKSA9PiBkYXRhc291cmNlcy5pbmNsdWRlcygoZXZlbnQgYXMgQ3VzdG9tRXZlbnQpLmRldGFpbCkpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKVxuICAgICAgKVxuICAgIF0pLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIHN3aXRjaE1hcCgoW2RhdGFzb3VyY2VzLCBvcHRpb25zXSkgPT4gdGhpcy5hZ2dyZWdhdGlvblNlcnZpY2UuYWdncmVnYXRlKGRhdGFzb3VyY2VzLCBvcHRpb25zKSksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLm9wdGlvbnMkKSxcbiAgICAgIG1hcCgoW2FnZ3JlZ2F0ZSwgb3B0aW9uc10pID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoYWdncmVnYXRlLnZhbHVlcy5sZW5ndGggPiAwICYmICFhZ2dyZWdhdGUudmFsdWVzWzBdLmdyb3VwQnkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBhZ2dyZWdhdGUub3BlcmF0aW9uLFxuICAgICAgICAgICAgZGF0YTogYWdncmVnYXRlLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgc2VyaWVzOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsIH0pKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gKFxuICAgICAgICAgIGFnZ3JlZ2F0ZS52YWx1ZXMgYXMge1xuICAgICAgICAgICAga2V5OiBWYWx1ZVR5cGU7XG4gICAgICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICAgIGtleTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgICB2YWx1ZTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgfVtdO1xuICAgICAgICAgIH1bXVxuICAgICAgICApXG4gICAgICAgICAgLm1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB2YWx1ZS5ncm91cEJ5Lm1hcCgoZ3JvdXBCeSkgPT4gKHtcbiAgICAgICAgICAgICAga2V5OiB2YWx1ZS5rZXksXG4gICAgICAgICAgICAgIHNlcmllczogZ3JvdXBCeS5rZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBncm91cEJ5LnZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSk7XG4gICAgICAgIHJldHVybiB7IG9wZXJhdGlvbjogYWdncmVnYXRlLm9wZXJhdGlvbiwgZGF0YTogZmxhdHRlbmVkIH07XG4gICAgICB9KSxcbiAgICAgIHN0YXJ0V2l0aCh7IG9wZXJhdGlvbjogT3BlcmF0aW9uLk5PTkUsIGRhdGE6IFtdIH0pLFxuICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICB0aGlzLm5vRGF0YSQgPSB0aGlzLmRhdGFzb3VyY2VJZHMkLnBpcGUobWFwKChpZHMpID0+IGlkcy5sZW5ndGggPT09IDApKTtcbiAgICB0aGlzLm5vQWdncmVnYXRpb25EYXRhJCA9IHRoaXMuYWdncmVnYXRlZFZhbHVlcyQucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhLmxlbmd0aCA9PT0gMCkpO1xuXG4gICAgdGhpcy52ZWdhTGl0ZVNwZWMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQsXG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRWYWx1ZXMkLFxuICAgICAgdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgdHlwZXMsIHZhbHVlcywgc2l6ZSwgZGlzcGxheV0pID0+IHtcbiAgICAgICAgY29uc3QgaXNDaXJjdWxhciA9IFtHcmFwaFR5cGUuQ0lSQ1VMQVIsIEdyYXBoVHlwZS5ET05VVF0uaW5jbHVkZXMob3B0aW9ucy5ncmFwaC50eXBlKTtcbiAgICAgICAgY29uc3Qgc3RhY2tlZCA9IG9wdGlvbnMuZ3JhcGgudHlwZS5zdGFydHNXaXRoKCdiYXInKSA/ICFvcHRpb25zLmdyYXBoLnN0YWNrZWQgOiBvcHRpb25zLmdyYXBoLnN0YWNrZWQ7XG4gICAgICAgIGNvbnN0IGxlZ2VuZFRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgb3B0aW9ucy5ncm91cEJ5ID8gdHlwZXMuZ3JvdXBCeS5uYW1lID8/ICcnIDogJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxlZ2VuZExhYmVsJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWVyZ2VEZWVwKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRzY2hlbWE6ICdodHRwczovL3ZlZ2EuZ2l0aHViLmlvL3NjaGVtYS92ZWdhLWxpdGUvdjUuanNvbicsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRUaXRsZShvcHRpb25zKSxcbiAgICAgICAgICAgIHdpZHRoOiAnY29udGFpbmVyJyxcbiAgICAgICAgICAgIGhlaWdodDogKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSAoZGlzcGxheSA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCksXG4gICAgICAgICAgICBwYWRkaW5nOiAxMCxcbiAgICAgICAgICAgIGF1dG9zaXplOiB7IHR5cGU6ICdmaXQnLCBjb250YWluczogJ3BhZGRpbmcnIH0sXG4gICAgICAgICAgICBkYXRhOiB7IHZhbHVlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZXMuZGF0YSkpIH0sXG4gICAgICAgICAgICBsYXllcjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyazoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogb3B0aW9ucy5ncmFwaC50eXBlLnNwbGl0KCctJylbMF0gYXMgJ2FyYycgfCAnbGluZScgfCAncG9pbnQnIHwgJ2JhcicgfCAnYXJlYScsXG4gICAgICAgICAgICAgICAgICBwb2ludDogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ3BvaW50JykgPj0gMCxcbiAgICAgICAgICAgICAgICAgIGxpbmU6IG9wdGlvbnMuZ3JhcGgudHlwZS5pbmRleE9mKCdsaW5lJykgPj0gMCxcbiAgICAgICAgICAgICAgICAgIGlubmVyUmFkaXVzOiBvcHRpb25zLmdyYXBoLmRvbnV0U2l6ZSA/PyAzMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICAgIHg6ICFpc0NpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuYWJzY2lzc2EubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVVbml0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgJiYgb3B0aW9ucy5hYnNjaXNzYS5saW1pdD8uaXNUaW1lTGltaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuYWJzY2lzc2EubGltaXQuaW50ZXJ2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbjogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ2hpc3RvZ3JhbScpID49IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBheGlzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9ybWF0OiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgPyAnJVktJUItJWRUJUg6JU06JVMnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uV2lkZ2V0QWdncmVnYXRlZENoYXJ0Q29tcG9uZW50Lm1pblRpY2sodHlwZXMuYWJzY2lzc2EuZmllbGRUeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxFeHByOiBgaGVpZ2h0IDwgMzAwID8gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ0aW1lRm9ybWF0KGRhdHVtLnZhbHVlLCAnJVktJUItJWRUJUg6JU06JVMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0cnVuY2F0ZShkYXR1bS52YWx1ZSwgMTApJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IDogJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ0aW1lRm9ybWF0KGRhdHVtLnZhbHVlLCAnJVktJUItJWRUJUg6JU06JVMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdkYXR1bS52YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBhIGZhbHNlIHZhbHVlIGhlcmUgc28gdGhhdCB2ZWdhIHVuZGVyc3RhbmRzIHByb3Blcmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHplcm86ICEhb3B0aW9ucy5hYnNjaXNzYS5rZWVwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvL3R5cGU6IFdpZGdldENoYXJ0Q29tcG9uZW50LmlzVGltZVVuaXRVVEModmFyaWFibGVzWzBdKSA/ICd1dGMnIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHk6ICFpc0NpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXhpczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5XaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQubWluVGljayh0eXBlcy5vcmRpbmF0ZS5maWVsZFR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnNldFRpY2tDb3VudCh2YWx1ZXMuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuUVVBTlRJVEFUSVZFID8gISFvcHRpb25zLm9yZGluYXRlLmtlZXAwIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oc3RhY2tlZCA/IHsgc3RhY2s6IHRydWUgfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0aGV0YTogaXNDaXJjdWxhciA/IHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGVnZW5kVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAhaXNDaXJjdWxhciA/ICdzZXJpZXMnIDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZDogb3B0aW9ucy5ncmFwaC5sZWdlbmQsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiBvcHRpb25zLmdyYXBoLmxlZ2VuZCA/IHsgc2NoZW1lOiBvcHRpb25zLmdyb3VwQnk/LmNvbG9yID8/IHRoaXMuc2NoZW1lc1swXS5pZCB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgeE9mZnNldDogc3RhY2tlZCAmJiBvcHRpb25zLmdyb3VwQnkgPyB7IGZpZWxkOiAnc2VyaWVzJyB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcDogb3B0aW9ucy5ncmFwaC50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5ncm91cEJ5XG4gICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuYWJzY2lzc2EubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSAndGVtcG9yYWwnID8geyBmb3JtYXQ6ICclWS0lQi0lZFQlSDolTTolUycgfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAndmFsdWUnLCB0eXBlOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSwgdGl0bGU6IG9wdGlvbnMub3JkaW5hdGUubGFiZWwgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnc2VyaWVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGVnZW5kVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ25vbWluYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09ICd0ZW1wb3JhbCcgPyB7IGZvcm1hdDogJyVZLSVCLSVkVCVIOiVNOiVTJyB9IDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLCB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29uZmlnOiBmb250Q29uZmlnKCdVYnVudHUsIHNhbnMtc2VyaWYnKVxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICAgIG9wdGlvbnMuYWRkaXRpb25hbFNwZWNcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy52ZWdhTGl0ZVNwZWMkLCB0aGlzLnRyaWdnZXIkXSkuc3Vic2NyaWJlKChbc3BlYywgX10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVnYSkge1xuICAgICAgICAgIHRoaXMudmlldz8uZmluYWxpemUoKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHNwZWMpO1xuICAgICAgICAgIGVtYmVkKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNwZWMpKSwge1xuICAgICAgICAgICAgYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICByZW5kZXJlcjogJ2NhbnZhcycsXG4gICAgICAgICAgICBmb3JtYXRMb2NhbGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50T2JqZWN0KCdAcHJ5LndpZGdldC5jaGFydC5udW1iZXJMb2NhbGUnKSBhcyBhbnksXG4gICAgICAgICAgICB0aW1lRm9ybWF0TG9jYWxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudE9iamVjdCgnQHByeS53aWRnZXQuY2hhcnQudGltZUZvcm1hdExvY2FsZScpIGFzIGFueVxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiAodGhpcy52aWV3ID0gcmVzdWx0LnZpZXcpKVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBkaXNwbGF5IGNoYXJ0JywgZXJyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXIkLm5leHQoKSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlciQubmV4dCgpO1xuICB9XG5cbiAgdHJhbnNsYXRlVG9WZWdhVHlwZSh0eXBlPzogRmllbGRUeXBlLCBuYW1lPzogc3RyaW5nKTogVmVnYVR5cGUge1xuICAgIGxldCBpZFJlZ2V4ID0gbmV3IFJlZ0V4cCgvX2lkfGlkX3xfSUR8SURffF9JZHxJZF8vLCAnZycpO1xuICAgIGlmIChpZFJlZ2V4LnRlc3QobmFtZSA/PyAnLS0tLS0tLScpKSB7XG4gICAgICByZXR1cm4gVmVnYVR5cGUuT1JESU5BTDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLkRFQ0lNQUw6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlRFR0VSOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuTE9ORzpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLlFVQU5USVRBVElWRTtcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOU1RBTlQ6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5URU1QT1JBTDtcbiAgICAgIGNhc2UgRmllbGRUeXBlLktFWVdPUkQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5TVFJJTkc6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5OT01JTkFMO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLk5PTUlOQUw7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1pblRpY2sodHlwZTogRmllbGRUeXBlKTogeyB0aWNrTWluU3RlcDogbnVtYmVyIH0gfCB7fSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlRFR0VSOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuTE9ORzpcbiAgICAgICAgcmV0dXJuIHsgdGlja01pblN0ZXA6IDEgfTtcbiAgICAgIGNhc2UgRmllbGRUeXBlLkRFQ0lNQUw6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlNUQU5UOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuS0VZV09SRDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLlNUUklORzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLmdldFZhbHVlKCkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9wZW5EYXRhKCkge1xuICAgICh0aGlzLm9wZW5EYXRhJCBhcyBTdWJqZWN0PHZvaWQ+KS5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRpdGxlKG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ncmFwaD8udGl0bGUgPz8gKG9wdGlvbnMuYWJzY2lzc2EubGFiZWwgPz8gJ2tleScpICsgJyAvICcgKyAob3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCA/PyAndmFsdWUnKTtcbiAgfVxuXG4gIGNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0aXRsZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVR5cGUoJGV2ZW50OiBHcmFwaFR5cGUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0eXBlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBpZiAoW0dyYXBoVHlwZS5DSVJDVUxBUiwgR3JhcGhUeXBlLkRPTlVUXS5pbmNsdWRlcygkZXZlbnQpKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgIGdyb3VwQnk6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChbR3JhcGhUeXBlLkhJU1RPR1JBTV0uaW5jbHVkZXMoJGV2ZW50KSkge1xuICAgICAgICB0aGlzLmxpbWl0RWxlbWVudHModHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlRG9udXRTaXplKCRldmVudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCwgZG9udXRTaXplOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3BlcmF0aW9uKCRldmVudDogT3BlcmF0aW9uKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgb3BlcmF0aW9uOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBpZiAoJGV2ZW50ID09PSBPcGVyYXRpb24uQ09VTlQgfHwgJGV2ZW50ID09PSBPcGVyYXRpb24uRElTVElOQ1QpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgb3JkaW5hdGU6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLicgKyAkZXZlbnQpLFxuICAgICAgICAgICAgYXR0cmlidXRlOiB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkLm5leHQoKSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUFic2Npc3NhKCRldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKCRldmVudCAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuY2xhc3Nlc1xuICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09ICRldmVudCk7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgbGFiZWw6IGF0dHI/Lm5hbWUgPz8gJ2F0dHItbm90LWZvdW5kJyB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb3B5QWJzY2lzc2FGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBhdHRyPy5maWVsZCA9PT0gZmllbGQuaWQpO1xuXG4gICAgICB0aGlzLmxpbWl0RWxlbWVudHMoISF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUFic2Npc3NhTGFiZWwoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsYWJlbDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU9yZGluYXRlKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudCAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuY2xhc3Nlc1xuICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09ICRldmVudCk7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgbGFiZWw6IGF0dHI/Lm5hbWUgPz8gJ2F0dHItbm90LWZvdW5kJyB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb3B5T3JkaW5hdGVGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBhdHRyPy5maWVsZCA9PT0gZmllbGQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU9yZGluYXRlTGFiZWwoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBsYWJlbDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBrZWVwMDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUtlZXAwT3JkaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBrZWVwMDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxpbWl0RWxlbWVudHMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY29weUFic2Npc3NhRmllbGQ/LnR5cGUgIT09IEZpZWxkVHlwZS5JTlNUQU5UICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhPy5saW1pdCAmJlxuICAgICAgICAgICdhdCcgaW4gdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhPy5saW1pdFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgICAgIGF0OiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0Py5hdCA/PyAzLFxuICAgICAgICAgICAgICAgIG90aGVyczogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgICAgICAgICAgIGlzVGltZUxpbWl0OiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgbGltaXQ6IHsgaW50ZXJ2YWw6ICdzZWNvbmQnLCBpc1RpbWVMaW1pdDogdHJ1ZSB9IH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsaW1pdDogdW5kZWZpbmVkIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgYXQ6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXRPdGhlcnMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgb3RoZXJzOiAkZXZlbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUxpbWl0T3JkZXIoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgb3JkZXI6ICRldmVudCA/ICdhc2MnIDogJ2Rlc2MnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUaW1lTGltaXQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EsXG4gICAgICAgICAgbGltaXQ6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgaW50ZXJ2YWw6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTGVnZW5kKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyYXBoLCBsZWdlbmQ6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVUb29sdGlwKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCwgdG9vbHRpcDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUdyb3VwQnkoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeTogeyBhdHRyaWJ1dGU6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5Py5hdHRyaWJ1dGUgPz8gJycsIGNvbG9yOiB0aGlzLnNjaGVtZXNbMF0uaWQgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgIGdyb3VwQnk6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VHcm91cEJ5KCRldmVudDogYW55KSB7XG4gICAgaWYgKHR5cGVvZiAkZXZlbnQgPT09ICdzdHJpbmcnICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyb3VwQnkpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5LFxuICAgICAgICAgIGF0dHJpYnV0ZTogJGV2ZW50XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUNvbG9yU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyb3VwQnkpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgIGF0dHJpYnV0ZTogdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JvdXBCeT8uYXR0cmlidXRlLFxuICAgICAgICAgIGNvbG9yOiAkZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0VGlja0NvdW50KGRhdGE6IGFueSkge1xuICAgIHJldHVybiBNYXRoLm1heCguLi5kYXRhLm1hcCgodmFsOiBhbnkpID0+IHZhbC52YWx1ZSkpIDwgM1xuICAgICAgPyB7IHRpY2tDb3VudDogTWF0aC5tYXgoLi4uZGF0YS5tYXAoKHZhbDogYW55KSA9PiB2YWwudmFsdWUpKSB9XG4gICAgICA6IHt9O1xuICB9XG5cbiAgc2NoZW1lKCkge1xuICAgIHJldHVybiB2ZWdhLnNjaGVtZSh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JvdXBCeT8uY29sb3IgPz8gJycpO1xuICB9XG5cbiAgdG9nZ2xlU3RhY2tlZCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDoge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCxcbiAgICAgICAgICBzdGFja2VkOiAkZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2NhbnZhcycpWzBdLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LWNzcz48L3ByeS13aWRnZXQtYWdncmVnYXRlZC1jaGFydC1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLWNoYXJ0XCIgKm5nSWY9XCJvcHRpb25zQ29weSQgfCBhc3luYyBhcyBvcHRpb25zQ29weVwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAjaGVhZGVyXG4gICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgICBbZGlzcGxheUNvdW50XT1cImZhbHNlXCJcbiAgICBbb3BlbkRhdGEkXT1cIm9wZW5EYXRhJFwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQudGl0bGVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50KVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGgudGl0bGVcIlxuICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uc0NvcHlcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF90eXBlXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnR5cGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVR5cGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJ0eXBlT3B0aW9uc1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC50eXBlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgIGlkPVwiY2hhcnRfdHlwZVwiXG4gICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgPT09IEdyYXBoVHlwZS5ET05VVFwiPlxuICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLmRvbnV0U2l6ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VEb251dFNpemUoJGV2ZW50KVwiXG4gICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRvbnV0U2l6ZVwiXG4gICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgIG1heD1cIjUwMFwiXG4gICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVMZWdlbmQoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuZ3JhcGgubGVnZW5kXCI+XG4gICAgICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQubGVnZW5kJyB8IGkxOG4gfX1cbiAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlVG9vbHRpcCgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5ncmFwaC50b29sdGlwXCJcbiAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQudG9vbHRpcCcgfCBpMThuIH19XG4gICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LmdyYXBoLnR5cGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhYnNjaXNzYVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5hYnNjaXNzYScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUFic2Npc3NhKCRldmVudClcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImFic2Npc3NhQXR0cmlidXRlcyQgfCBhc3luYyB8IHByeVNvcnREYXRhIDogc29ydEFjdGl2ZSA6IHNvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwiYWJzY2lzc2FcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5jaGFydC5kYXRhTGFiZWxcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWJzY2lzc2FMYWJlbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxhYmVsXCJcbiAgICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIFsncXVhbnRpdGF0aXZlJywgJ3RlbXBvcmFsJ10uaW5jbHVkZXModHJhbnNsYXRlVG9WZWdhVHlwZShjb3B5QWJzY2lzc2FGaWVsZD8udHlwZSkpICYmXG4gICAgICAgICAgICAgIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ET05VVCAmJlxuICAgICAgICAgICAgICBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuQ0lSQ1VMQVJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VLZWVwMEFic2Npc3NhKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5rZWVwMFwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQub3JpZ2luJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImxpbWl0RWxlbWVudHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSA9PT0gR3JhcGhUeXBlLkhJU1RPR1JBTVwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQubGltaXQnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdCA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5hdFwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMaW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuY2hhcnQubGltaXRcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICBtYXg9XCIxMFwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ISVNUT0dSQU1cIj5cbiAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGltaXRPdGhlcnMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0Lm90aGVyc1wiXG4gICAgICAgICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQub3RoZXJzJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiZGF0ZV9saW1pdFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmRlcicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpbWl0T3JkZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiW3sgaWQ6ICdhc2MnIH0sIHsgaWQ6ICdkZXNjJyB9XVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0Lm9yZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2Jhc2VUcmFuc2xhdGVdPVwiJ0Bwcnkud2lkZ2V0LmNoYXJ0LidcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxUcmFuc2xhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwib3RoZXJfbGltaXRcIlxuICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQuaXNUaW1lTGltaXRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiZGF0ZV9saW1pdFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50aW1lSW50ZXJ2YWwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVRpbWVMaW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIltcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3NlY29uZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ21pbnV0ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ2hvdXInIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdkYXknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICd3ZWVrJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnbW9udGgnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdxdWFydGVyJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAneWVhcicgfVxuICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5pbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxUcmFuc2xhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBiYXNlVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuY2hhcnQudGltZS5cIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJkYXRlX2xpbWl0XCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm9wZXJhdGlvbnNcIj57eyAnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLnRpdGxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlT3BlcmF0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cIm9wZXJhdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5vcGVyYXRpb25cIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICBpZD1cIm9wZXJhdGlvbnNcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5vcGVyYXRpb24gIT09IE9wZXJhdGlvbi5DT1VOVFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwib3JkaW5hdGVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQub3JkaW5hdGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlT3JkaW5hdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm9yZGluYXRlQXR0cmlidXRlcyQgfCBhc3luYyB8IHByeVNvcnREYXRhIDogc29ydEFjdGl2ZSA6IHNvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBpZD1cIm9yZGluYXRlXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRhdGFMYWJlbFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcmRpbmF0ZUxhYmVsKCRldmVudClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUubGFiZWxcIlxuICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInRyYW5zbGF0ZVRvVmVnYVR5cGUoY29weU9yZGluYXRlRmllbGQ/LnR5cGUpID09PSAncXVhbnRpdGF0aXZlJ1wiIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUtlZXAwT3JkaW5hdGUoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLmtlZXAwXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ET05VVCAmJiBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuQ0lSQ1VMQVJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUdyb3VwQnkoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuZ3JvdXBCeVwiXG4gICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5ncm91cEJ5JyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuZ3JvdXBCeVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3Nlcmllc0F0dHJcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuZ3JvdXBBdHRyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VHcm91cEJ5KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JvdXBCeS5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImFic2Npc3NhQXR0cmlidXRlcyQgfCBhc3luYyB8IHByeVNvcnREYXRhIDogc29ydEFjdGl2ZSA6IHNvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImNoYXJ0X3Nlcmllc0F0dHJcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc2VyaWVzU2NoZW1lXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbG9yU2NoZW1lJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDb2xvclNjaGVtZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lmdyb3VwQnkuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwic2NoZW1lc1wiXG4gICAgICAgICAgICAgICAgICBpZD1cImNoYXJ0X3Nlcmllc1NjaGVtZVwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxUcmFuc2xhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBiYXNlVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuY2hhcnQuc2NoZW1lLlwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJpZFwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0LS1jaGFydC1jb2xvci10aHVtYlwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzY2hlbWVDb2xvciBvZiBzY2hlbWUoKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm8td2lkZ2V0LS1jaGFydC1jb2xvci10aHVtYi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJzY2hlbWVDb2xvclwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJzY2hlbWVDb2xvclwiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC5zdGFja2VkXCIgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU3RhY2tlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQuc3RhY2tlZCcgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9wcnktc2V0dGluZ3M+XG4gIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpICYmICEobm9EYXRhJCB8IGFzeW5jKSAmJiAhKG5vQWdncmVnYXRpb25EYXRhJCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgI3ZlZ2E+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJub0RhdGEkIHwgYXN5bmNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQuY2hhcnQubm9EYXRhJyB8IGkxOG4gfX1cIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm5vRGF0YScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5EYXRhKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQudG9vbHRpcC5yZWFkU2VhcmNoJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEobm9EYXRhJCB8IGFzeW5jKSAmJiAobm9BZ2dyZWdhdGlvbkRhdGEkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmFnZ05vUmVzdWx0JyB8IGkxOG4gfX1cIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmFnZ05vUmVzdWx0JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblNldHRpbmdzKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQuc2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShub0RhdGEkIHwgYXN5bmMpICYmICEobm9BZ2dyZWdhdGlvbkRhdGEkIHwgYXN5bmMpICYmICEoaXNDaGFydFZhbGlkJCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldF9fY2hvb3NlLXBhcmFtZXRlcnNcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC5jaGFydC5jaG9vc2VQYXJhbWV0ZXJzJyB8IGkxOG4gfX1cIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNob29zZVBhcmFtZXRlcnMnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuU2V0dGluZ3MoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIiBpY29uU3ZnPVwiY29udHJvbFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC5zZXR0aW5ncy50aXRsZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|
|
671
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFJTCxjQUFjLEVBRWQsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUlULGVBQWUsRUFDZixTQUFTLEVBSVQsYUFBYSxFQUNiLFFBQVEsRUFDUixvQkFBb0IsRUFDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxHQUFHLEVBRUgsS0FBSyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxFQUNULGNBQWMsRUFDZixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFFeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxF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T0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBbHpCVSw4QkFBOEI7a0dBQTlCLDhCQUE4Qix3TENsRDNDLDRyYkFvVUE7OzJGRGxSYSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0UsNkJBQTZCO3NMQUlwQixJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgRGF0YXNldCxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEdyYXBoVHlwZSxcbiAgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCxcbiAgTXVsdGlDbGFzc1NlYXJjaFBheWxvYWQsXG4gIE5hbWVkUXVlcnksXG4gIE5hbWVkUXVlcnlUeXBlcyxcbiAgT3BlcmF0aW9uLFxuICBQcnlBZ2dyZWdhdGlvblNlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBWYWx1ZVR5cGUsXG4gIFZlZ2FDb2xvclR5cGUsXG4gIFZlZ2FUeXBlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHNoYXJlLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgd2l0aExhdGVzdEZyb21cbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAndmVnYSc7XG5pbXBvcnQgZW1iZWQsIHsgdmVnYSB9IGZyb20gJ3ZlZ2EtZW1iZWQnO1xuaW1wb3J0IHsgbWVyZ2VEZWVwLCBUb3BMZXZlbFNwZWMgfSBmcm9tICd2ZWdhLWxpdGUnO1xuaW1wb3J0IHsgZm9udENvbmZpZyB9IGZyb20gJ3ZlZ2EtbGl0ZS9idWlsZC9zcmMvY29uZmlnJztcblxudmVnYS5zY2hlbWUoJ0tPL1cvT0snLCBbJyNDMDREM0YnLCAnI0ZEOTg0MycsICcjOUFCRTI5J10pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmVnYScpIHZlZ2EhOiBFbGVtZW50UmVmO1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9uc0NvcHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gIHZpZXc/OiBWaWV3O1xuICB0cmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHZlZ2FMaXRlU3BlYyQ6IE9ic2VydmFibGU8VG9wTGV2ZWxTcGVjPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGF0dHJpYnV0ZVR5cGVzJDogT2JzZXJ2YWJsZTx7XG4gICAgb3JkaW5hdGU6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZFR5cGU6IGFueTsgbmFtZTogc3RyaW5nIH07XG4gICAgYWJzY2lzc2E6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZFR5cGU6IGFueTsgbmFtZTogc3RyaW5nIH07XG4gICAgZ3JvdXBCeTogeyB2ZWdhVHlwZT86IFZlZ2FUeXBlOyBmaWVsZFR5cGU/OiBhbnk7IG5hbWU6IHN0cmluZyB9O1xuICB9PjtcbiAgYWdncmVnYXRlZFZhbHVlcyQ6IE9ic2VydmFibGU8eyBkYXRhOiBhbnk7IG9wZXJhdGlvbjogYW55IH0+O1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBHcmFwaFR5cGUgPSBHcmFwaFR5cGU7XG4gIE9wZXJhdGlvbiA9IE9wZXJhdGlvbjtcbiAgaXNDaGFydFZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdHlwZU9wdGlvbnM6IHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcbiAgb3BlcmF0aW9ucyQ6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXT47XG4gIGFic2Npc3NhQXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICBjbGFzc2VzOiBDbGFzc1tdID0gW107XG4gIGZpZWxkczogRmllbGRbXSA9IFtdO1xuICBvcmRpbmF0ZUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgdHJpZ2dlck9yZGluYXRlQXR0cmlidXRlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb3B5QWJzY2lzc2FGaWVsZD86IEZpZWxkO1xuICBjb3B5T3JkaW5hdGVGaWVsZD86IEZpZWxkO1xuICBzY2hlbWVzOiB7IGlkOiBzdHJpbmcgfVtdID0gW107XG4gIG5vRGF0YSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNvcnRBY3RpdmU/ID0gJ25hbWUnO1xuICBzb3J0RGlyZWN0aW9uPyA9ICdhc2MnO1xuICBub0FnZ3JlZ2F0aW9uRGF0YSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFsbG93ZWRDbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgYWdncmVnYXRpb25TZXJ2aWNlOiBQcnlBZ2dyZWdhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcbiAgICB0aGlzLnNjaGVtZXMgPSBPYmplY3QudmFsdWVzKFZlZ2FDb2xvclR5cGUpLm1hcCgoaWQpID0+ICh7IGlkIH0pKTtcbiAgICB0aGlzLnR5cGVPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhHcmFwaFR5cGUpXG4gICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICBpZDogdixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5ncmFwaFR5cGUuJyArIHYpXG4gICAgICB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IHRoaXMubWFuaWZlc3QkLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChtYW5pZmVzdCkgPT5cbiAgICAgICAgICBtZXJnZURlZXAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGdyYXBoOiB7IHR5cGU6IEdyYXBoVHlwZS5CQVIsIHRvb2x0aXA6IHRydWUsIGxlZ2VuZDogZmFsc2UgfSxcbiAgICAgICAgICAgICAgYWJzY2lzc2E6IHsga2VlcDA6IHRydWUgfSxcbiAgICAgICAgICAgICAgb3JkaW5hdGU6IHsga2VlcDA6IHRydWUgfVxuICAgICAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgKG1hbmlmZXN0Lm9wdGlvbnMgPz8ge30pIGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnNcbiAgICAgICAgICApIGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnNcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkpO1xuICAgIH0pO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuXG4gICAgdGhpcy5vcGVyYXRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3JzLCBjbGFzc2VzLCBmaWVsZHNdKSA9PlxuICAgICAgICBjbGFzc2VzXG4gICAgICAgICAgLmZpbHRlcigoY2xhenopID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKS5pbmNsdWRlcyhjbGF6ei5pZCkpXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgLm1hcCgoYXR0cnMpID0+XG4gICAgICAgICAgICBhdHRycy5maWx0ZXIoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gISFmaWVsZCAmJiBbRmllbGRUeXBlLklOVEVHRVIsIEZpZWxkVHlwZS5ERUNJTUFMLCBGaWVsZFR5cGUuTE9OR10uaW5jbHVkZXMoZmllbGQudHlwZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGF0dHIpID0+ICEhYXR0cilcbiAgICAgICksXG4gICAgICBtYXAoKGF0dHJpYnV0ZXMpID0+XG4gICAgICAgIChhdHRyaWJ1dGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IE9iamVjdC52YWx1ZXMoT3BlcmF0aW9uKS5maWx0ZXIoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uICE9PSBPcGVyYXRpb24uRVhURU5UKVxuICAgICAgICAgIDogW09wZXJhdGlvbi5DT1VOVCwgT3BlcmF0aW9uLkRJU1RJTkNULCBPcGVyYXRpb24uTk9ORV1cbiAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKHYpID0+ICh7XG4gICAgICAgICAgICBpZDogdixcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLicgKyB2KVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5maWVsZHMkLnN1YnNjcmliZSgoZmllbGRzKSA9PiAodGhpcy5maWVsZHMgPSBmaWVsZHMpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmNsYXNzZXMkLnN1YnNjcmliZSgoY2xhc3NlcykgPT4gKHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMpKSk7XG5cbiAgICB0aGlzLmFsbG93ZWRDbGFzc2VzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2xhc3NlcyQsIHRoaXMudXNlZERhdGFzb3VyY2VzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCBkYXRhc291cmNlc10pID0+IHtcbiAgICAgICAgY29uc3QgaGFzRnVsbFRleHQgPSBkYXRhc291cmNlc1xuICAgICAgICAgIC5tYXAoKGRzKSA9PiBkcy5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgZHMucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTVVMVElfQ0xBU1MpXG4gICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcCB8fCBjLCBmYWxzZSk7XG5cbiAgICAgICAgY29uc3QgbXVsdGlDbGFzc0RhdGFzb3VyY2VzQ2xhc3NlcyA9IGRhdGFzb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcigoZHMpID0+IGRzLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiBkcy5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NVUxUSV9DTEFTUylcbiAgICAgICAgICAubWFwKChtdWx0aURzKSA9PiAobXVsdGlEcyBhcyBOYW1lZFF1ZXJ5KS5yZXF1ZXN0IGFzIE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkKVxuICAgICAgICAgIC5tYXAoKHBheWxvYWQpID0+IHBheWxvYWQub0NsYXNzZXMpO1xuXG4gICAgICAgIGNvbnN0IGhhc011bHRpTm9DbGFzcyA9IG11bHRpQ2xhc3NEYXRhc291cmNlc0NsYXNzZXMuaW5jbHVkZXModW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBtdWx0aUNsYXNzZXMgPSAoXG4gICAgICAgICAgbXVsdGlDbGFzc0RhdGFzb3VyY2VzQ2xhc3Nlcy5maWx0ZXIoKGNsYXNzZXMpID0+ICEhY2xhc3NlcykgYXMgdW5rbm93biBhcyBzdHJpbmdbXVxuICAgICAgICApLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSBhcyBzdHJpbmdbXSk7XG5cbiAgICAgICAgY29uc3Qgc2luZ2xlQ2xhc3NlcyA9IGRhdGFzb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChkcykgPT5cbiAgICAgICAgICAgICAgKGRzLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiBkcy5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NT05PX0NMQVNTKSB8fFxuICAgICAgICAgICAgICBkcy5zb3VyY2VUeXBlID09PSAnZGF0YXNldCdcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChzaW5nbGVEcykgPT5cbiAgICAgICAgICAgICAgKHNpbmdsZURzIGFzIERhdGFzZXQpLm9DbGFzcyA/PyAoKHNpbmdsZURzIGFzIE5hbWVkUXVlcnkpLnJlcXVlc3QgYXMgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCkub0NsYXNzXG4gICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoXG4gICAgICAgICAgKGNsYXp6KSA9PlxuICAgICAgICAgICAgaGFzRnVsbFRleHQgfHwgaGFzTXVsdGlOb0NsYXNzIHx8IG11bHRpQ2xhc3Nlcy5pbmNsdWRlcyhjbGF6ei5pZCkgfHwgc2luZ2xlQ2xhc3Nlcy5pbmNsdWRlcyhjbGF6ei5pZClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWJzY2lzc2FBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZmllbGRzJCwgdGhpcy5hbGxvd2VkQ2xhc3NlcyQsIHRoaXMub3B0aW9uc0NvcHkkXSkucGlwZShcbiAgICAgIG1hcCgoW2ZpZWxkcywgYWxsb3dlZENsYXNzZXMsIG9wdGlvbkNvcHldKSA9PlxuICAgICAgICBhbGxvd2VkQ2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAhIWZpZWxkICYmXG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlJBVyAmJlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5TVFJJTkcgJiZcbiAgICAgICAgICAgICAgICAob3B0aW9uQ29weT8uZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkhJU1RPR1JBTSB8fCBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuS0VZV09SRClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMub3JkaW5hdGVBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5hbGxvd2VkQ2xhc3NlcyQsXG4gICAgICB0aGlzLnRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2ZpZWxkcywgYWxsb3dlZENsYXNzZXNdKSA9PlxuICAgICAgICBhbGxvd2VkQ2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk1BWCxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5NSU4sXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uU1VNLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlExLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlEzLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLkFWRVJBR0UsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTUVESUFOLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk5PTkVcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLm9yZGluYXRlLm9wZXJhdGlvbilcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICEhZmllbGQgJiZcbiAgICAgICAgICAgICAgICAgIFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuREVDSU1BTF0uaW5jbHVkZXMoZmllbGQudHlwZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAhIWZpZWxkICYmIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcgJiYgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuaXNDaGFydFZhbGlkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMuYWJzY2lzc2FBdHRyaWJ1dGVzJCwgdGhpcy5vcmRpbmF0ZUF0dHJpYnV0ZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIGFic2Npc3NhQXR0cnMsIG9yZGluYXRlQXR0cnNdKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgISFvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSAmJlxuICAgICAgICAgIGFic2Npc3NhQXR0cnMubWFwKChhdHRyKSA9PiBhdHRyLmlkKS5pbmNsdWRlcyhvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSkgJiZcbiAgICAgICAgICAob3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGVcbiAgICAgICAgICAgID8gb3JkaW5hdGVBdHRycy5tYXAoKGF0dHIpID0+IGF0dHIuaWQpLmluY2x1ZGVzKG9wdGlvbnMub3JkaW5hdGUuYXR0cmlidXRlKVxuICAgICAgICAgICAgOiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLmZpZWxkcyQsIHRoaXMuY2xhc3NlcyRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbb3B0aW9ucywgZmllbGRzLCBjbGFzc2VzXSkgPT4gISFvcHRpb25zLmFic2Npc3NhICYmICEhb3B0aW9ucy5vcmRpbmF0ZSksXG4gICAgICBtYXAoKFtvcHRpb25zLCBmaWVsZHMsIGNsYXNzZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFic2Npc3NhID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMuYWJzY2lzc2EuYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3Qgb3JkaW5hdGUgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGUpKVxuICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpO1xuICAgICAgICBjb25zdCBncm91cEJ5ID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMuZ3JvdXBCeT8uYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3QgYWJzY2lzc2FGaWVsZFR5cGUgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhYnNjaXNzYT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIGNvbnN0IG9yZGluYXRlRmllbGRUeXBlID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gb3JkaW5hdGU/LmZpZWxkKT8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HO1xuICAgICAgICBjb25zdCBncm91cEJ5RmllbGRUeXBlID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gZ3JvdXBCeT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogYWJzY2lzc2FGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGFic2Npc3NhRmllbGRUeXBlLCBhYnNjaXNzYT8ubmFtZSA/PyAnJyksXG4gICAgICAgICAgICBuYW1lOiBhYnNjaXNzYT8ubmFtZSA/PyAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3JkaW5hdGU6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogb3JkaW5hdGVGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5vcmRpbmF0ZS5vcGVyYXRpb24gPT09IE9wZXJhdGlvbi5DT1VOVCB8fCBvcHRpb25zLm9yZGluYXRlLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uLkRJU1RJTkNUXG4gICAgICAgICAgICAgICAgPyBWZWdhVHlwZS5RVUFOVElUQVRJVkVcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlVG9WZWdhVHlwZShvcmRpbmF0ZUZpZWxkVHlwZSwgb3JkaW5hdGU/Lm5hbWUgPz8gJycpLFxuICAgICAgICAgICAgbmFtZTogb3JkaW5hdGU/Lm5hbWUgPz8gJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogZ3JvdXBCeUZpZWxkVHlwZSxcbiAgICAgICAgICAgIHZlZ2FUeXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoZ3JvdXBCeUZpZWxkVHlwZSwgZ3JvdXBCeT8ubmFtZSksXG4gICAgICAgICAgICBuYW1lOiBncm91cEJ5Py5uYW1lID8/ICcnXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGVkVmFsdWVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5kYXRhc291cmNlSWRzJCxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICBjb21iaW5lTGF0ZXN0KFtmcm9tRXZlbnQod2luZG93LCAnZGF0YXNvdXJjZVJlZnJlc2gnKSwgdGhpcy5kYXRhc291cmNlSWRzJF0pLnBpcGUoXG4gICAgICAgIGZpbHRlcigoW2V2ZW50LCBkYXRhc291cmNlc10pID0+IGRhdGFzb3VyY2VzLmluY2x1ZGVzKChldmVudCBhcyBDdXN0b21FdmVudCkuZGV0YWlsKSksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpXG4gICAgICApXG4gICAgXSkucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgc3dpdGNoTWFwKChbZGF0YXNvdXJjZXMsIG9wdGlvbnNdKSA9PiB0aGlzLmFnZ3JlZ2F0aW9uU2VydmljZS5hZ2dyZWdhdGUoZGF0YXNvdXJjZXMsIG9wdGlvbnMpKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMub3B0aW9ucyQpLFxuICAgICAgbWFwKChbYWdncmVnYXRlLCBvcHRpb25zXSkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChhZ2dyZWdhdGUudmFsdWVzLmxlbmd0aCA+IDAgJiYgIWFnZ3JlZ2F0ZS52YWx1ZXNbMF0uZ3JvdXBCeSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcGVyYXRpb246IGFnZ3JlZ2F0ZS5vcGVyYXRpb24sXG4gICAgICAgICAgICBkYXRhOiBhZ2dyZWdhdGUudmFsdWVzLm1hcCgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBzZXJpZXM6IG9wdGlvbnMub3JkaW5hdGUubGFiZWwgfSkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSAoXG4gICAgICAgICAgYWdncmVnYXRlLnZhbHVlcyBhcyB7XG4gICAgICAgICAgICBrZXk6IFZhbHVlVHlwZTtcbiAgICAgICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgICAga2V5OiBWYWx1ZVR5cGU7XG4gICAgICAgICAgICAgIHZhbHVlOiBWYWx1ZVR5cGU7XG4gICAgICAgICAgICB9W107XG4gICAgICAgICAgfVtdXG4gICAgICAgIClcbiAgICAgICAgICAubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHZhbHVlLmdyb3VwQnkubWFwKChncm91cEJ5KSA9PiAoe1xuICAgICAgICAgICAgICBrZXk6IHZhbHVlLmtleSxcbiAgICAgICAgICAgICAgc2VyaWVzOiBncm91cEJ5LmtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwQnkudmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKTtcbiAgICAgICAgcmV0dXJuIHsgb3BlcmF0aW9uOiBhZ2dyZWdhdGUub3BlcmF0aW9uLCBkYXRhOiBmbGF0dGVuZWQgfTtcbiAgICAgIH0pLFxuICAgICAgc3RhcnRXaXRoKHsgb3BlcmF0aW9uOiBPcGVyYXRpb24uTk9ORSwgZGF0YTogW10gfSksXG4gICAgICBzaGFyZSgpXG4gICAgKTtcblxuICAgIHRoaXMubm9EYXRhJCA9IHRoaXMuZGF0YXNvdXJjZUlkcyQucGlwZShtYXAoKGlkcykgPT4gaWRzLmxlbmd0aCA9PT0gMCkpO1xuICAgIHRoaXMubm9BZ2dyZWdhdGlvbkRhdGEkID0gdGhpcy5hZ2dyZWdhdGVkVmFsdWVzJC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEubGVuZ3RoID09PSAwKSk7XG5cbiAgICB0aGlzLnZlZ2FMaXRlU3BlYyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGVzJCxcbiAgICAgIHRoaXMuYWdncmVnYXRlZFZhbHVlcyQsXG4gICAgICB0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCB0eXBlcywgdmFsdWVzLCBzaXplLCBkaXNwbGF5XSkgPT4ge1xuICAgICAgICBjb25zdCBpc0NpcmN1bGFyID0gW0dyYXBoVHlwZS5DSVJDVUxBUiwgR3JhcGhUeXBlLkRPTlVUXS5pbmNsdWRlcyhvcHRpb25zLmdyYXBoLnR5cGUpO1xuICAgICAgICBjb25zdCBzdGFja2VkID0gb3B0aW9ucy5ncmFwaC50eXBlLnN0YXJ0c1dpdGgoJ2JhcicpID8gIW9wdGlvbnMuZ3JhcGguc3RhY2tlZCA6IG9wdGlvbnMuZ3JhcGguc3RhY2tlZDtcbiAgICAgICAgY29uc3QgbGVnZW5kVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBvcHRpb25zLmdyb3VwQnkgPyB0eXBlcy5ncm91cEJ5Lm5hbWUgPz8gJycgOiAnQHByeS53aWRnZXQuY2hhcnQubGVnZW5kTGFiZWwnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBtZXJnZURlZXAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgJHNjaGVtYTogJ2h0dHBzOi8vdmVnYS5naXRodWIuaW8vc2NoZW1hL3ZlZ2EtbGl0ZS92NS5qc29uJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRpdGxlKG9wdGlvbnMpLFxuICAgICAgICAgICAgd2lkdGg6ICdjb250YWluZXInLFxuICAgICAgICAgICAgaGVpZ2h0OiAoc2l6ZS5oZWlnaHQgPz8gMTAwKSAtIChkaXNwbGF5ID8gV0lER0VUX0hFQURFUl9IRUlHSFQgOiAwKSxcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgICAgYXV0b3NpemU6IHsgdHlwZTogJ2ZpdCcsIGNvbnRhaW5zOiAncGFkZGluZycgfSxcbiAgICAgICAgICAgIGRhdGE6IHsgdmFsdWVzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlcy5kYXRhKSkgfSxcbiAgICAgICAgICAgIGxheWVyOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBvcHRpb25zLmdyYXBoLnR5cGUuc3BsaXQoJy0nKVswXSBhcyAnYXJjJyB8ICdsaW5lJyB8ICdwb2ludCcgfCAnYmFyJyB8ICdhcmVhJyxcbiAgICAgICAgICAgICAgICAgIHBvaW50OiBvcHRpb25zLmdyYXBoLnR5cGUuaW5kZXhPZigncG9pbnQnKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgbGluZTogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ2xpbmUnKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgaW5uZXJSYWRpdXM6IG9wdGlvbnMuZ3JhcGguZG9udXRTaXplID8/IDMwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmNvZGluZzoge1xuICAgICAgICAgICAgICAgICAgeDogIWlzQ2lyY3VsYXJcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZVVuaXQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5URU1QT1JBTCAmJiBvcHRpb25zLmFic2Npc3NhLmxpbWl0Py5pc1RpbWVMaW1pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5hYnNjaXNzYS5saW1pdC5pbnRlcnZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmluOiBvcHRpb25zLmdyYXBoLnR5cGUuaW5kZXhPZignaGlzdG9ncmFtJykgPj0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3JtYXQ6IHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5URU1QT1JBTCA/ICclWS0lQi0lZFQlSDolTTolUycgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5XaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQubWluVGljayh0eXBlcy5hYnNjaXNzYS5maWVsZFR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbEV4cHI6IGBoZWlnaHQgPCAzMDAgPyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5URU1QT1JBTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInRpbWVGb3JtYXQoZGF0dW0udmFsdWUsICclWS0lQi0lZFQlSDolTTolUycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RydW5jYXRlKGRhdHVtLnZhbHVlLCAxMCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5URU1QT1JBTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInRpbWVGb3JtYXQoZGF0dW0udmFsdWUsICclWS0lQi0lZFQlSDolTTolUycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RhdHVtLnZhbHVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgZmFsc2UgdmFsdWUgaGVyZSBzbyB0aGF0IHZlZ2EgdW5kZXJzdGFuZHMgcHJvcGVybHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgemVybzogISFvcHRpb25zLmFic2Npc3NhLmtlZXAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vdHlwZTogV2lkZ2V0Q2hhcnRDb21wb25lbnQuaXNUaW1lVW5pdFVUQyh2YXJpYWJsZXNbMF0pID8gJ3V0YycgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgeTogIWlzQ2lyY3VsYXJcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBheGlzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLldpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudC5taW5UaWNrKHR5cGVzLm9yZGluYXRlLmZpZWxkVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuc2V0VGlja0NvdW50KHZhbHVlcy5kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHplcm86IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5RVUFOVElUQVRJVkUgPyAhIW9wdGlvbnMub3JkaW5hdGUua2VlcDAgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihzdGFja2VkID8geyBzdGFjazogdHJ1ZSB9IDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRoZXRhOiBpc0NpcmN1bGFyID8geyBmaWVsZDogJ3ZhbHVlJywgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsZWdlbmRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICFpc0NpcmN1bGFyID8gJ3NlcmllcycgOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kOiBvcHRpb25zLmdyYXBoLmxlZ2VuZCxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IG9wdGlvbnMuZ3JhcGgubGVnZW5kID8geyBzY2hlbWU6IG9wdGlvbnMuZ3JvdXBCeT8uY29sb3IgPz8gdGhpcy5zY2hlbWVzWzBdLmlkIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB4T2Zmc2V0OiBzdGFja2VkICYmIG9wdGlvbnMuZ3JvdXBCeSA/IHsgZmllbGQ6ICdzZXJpZXMnIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBvcHRpb25zLmdyYXBoLnRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmdyb3VwQnlcbiAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09ICd0ZW1wb3JhbCcgPyB7IGZvcm1hdDogJyVZLSVCLSVkVCVIOiVNOiVTJyB9IDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLCB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsZWdlbmRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9taW5hbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLmFic2Npc3NhLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gJ3RlbXBvcmFsJyA/IHsgZm9ybWF0OiAnJVktJUItJWRUJUg6JU06JVMnIH0gOiB7fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ3ZhbHVlJywgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUsIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjb25maWc6IGZvbnRDb25maWcoJ1VidW50dSwgc2Fucy1zZXJpZicpXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgb3B0aW9ucy5hZGRpdGlvbmFsU3BlY1xuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnZlZ2FMaXRlU3BlYyQsIHRoaXMudHJpZ2dlciRdKS5zdWJzY3JpYmUoKFtzcGVjLCBfXSkgPT4ge1xuICAgICAgICBpZiAodGhpcy52ZWdhKSB7XG4gICAgICAgICAgdGhpcy52aWV3Py5maW5hbGl6ZSgpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coc3BlYyk7XG4gICAgICAgICAgZW1iZWQodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3BlYykpLCB7XG4gICAgICAgICAgICBhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICAgIHJlbmRlcmVyOiAnY2FudmFzJyxcbiAgICAgICAgICAgIGZvcm1hdExvY2FsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnRPYmplY3QoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm51bWJlckxvY2FsZScpIGFzIGFueSxcbiAgICAgICAgICAgIHRpbWVGb3JtYXRMb2NhbGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50T2JqZWN0KCdAcHJ5LndpZGdldC5jaGFydC50aW1lRm9ybWF0TG9jYWxlJykgYXMgYW55XG4gICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+ICh0aGlzLnZpZXcgPSByZXN1bHQudmlldykpXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignQ2Fubm90IGRpc3BsYXkgY2hhcnQnLCBlcnIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlciQubmV4dCgpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy50cmlnZ2VyJC5uZXh0KCk7XG4gIH1cblxuICB0cmFuc2xhdGVUb1ZlZ2FUeXBlKHR5cGU/OiBGaWVsZFR5cGUsIG5hbWU/OiBzdHJpbmcpOiBWZWdhVHlwZSB7XG4gICAgbGV0IGlkUmVnZXggPSBuZXcgUmVnRXhwKC9faWR8aWRffF9JRHxJRF98X0lkfElkXy8sICdnJyk7XG4gICAgaWYgKGlkUmVnZXgudGVzdChuYW1lID8/ICctLS0tLS0tJykpIHtcbiAgICAgIHJldHVybiBWZWdhVHlwZS5PUkRJTkFMO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuUVVBTlRJVEFUSVZFO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuS0VZV09SRDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLlNUUklORzpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLk5PTUlOQUw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWluVGljayh0eXBlOiBGaWVsZFR5cGUpOiB7IHRpY2tNaW5TdGVwOiBudW1iZXIgfSB8IHt9IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4geyB0aWNrTWluU3RlcDogMSB9O1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOU1RBTlQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgIG9wdGlvbnM6IHsgLi4udGhpcy5vcHRpb25zQ29weSQuZ2V0VmFsdWUoKSB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcGVuU2V0dGluZ3MoKSB7XG4gICAgKHRoaXMub3BlbiQgYXMgU3ViamVjdDx2b2lkPikubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgb3BlbkRhdGEoKSB7XG4gICAgKHRoaXMub3BlbkRhdGEkIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGl0bGUob3B0aW9uczogQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmdyYXBoPy50aXRsZSA/PyAob3B0aW9ucy5hYnNjaXNzYS5sYWJlbCA/PyAna2V5JykgKyAnIC8gJyArIChvcHRpb25zLm9yZGluYXRlLmxhYmVsID8/ICd2YWx1ZScpO1xuICB9XG5cbiAgY2hhbmdlQ2hhcnRUaXRsZSgkZXZlbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHRpdGxlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVHlwZSgkZXZlbnQ6IEdyYXBoVHlwZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHR5cGU6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICAgIGlmIChbR3JhcGhUeXBlLkNJUkNVTEFSLCBHcmFwaFR5cGUuRE9OVVRdLmluY2x1ZGVzKCRldmVudCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKFtHcmFwaFR5cGUuSElTVE9HUkFNXS5pbmNsdWRlcygkZXZlbnQpKSB7XG4gICAgICAgIHRoaXMubGltaXRFbGVtZW50cyh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VEb251dFNpemUoJGV2ZW50OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCBkb251dFNpemU6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VPcGVyYXRpb24oJGV2ZW50OiBPcGVyYXRpb24pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBvcGVyYXRpb246ICRldmVudCB9XG4gICAgICB9KTtcbiAgICAgIGlmICgkZXZlbnQgPT09IE9wZXJhdGlvbi5DT1VOVCB8fCAkZXZlbnQgPT09IE9wZXJhdGlvbi5ESVNUSU5DVCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBvcmRpbmF0ZToge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5vcGVyYXRpb24uJyArICRldmVudCksXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlck9yZGluYXRlQXR0cmlidXRlcyQubmV4dCgpLCAxMCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQWJzY2lzc2EoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoJGV2ZW50ICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgYXR0cmlidXRlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gJGV2ZW50KTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsYWJlbDogYXR0cj8ubmFtZSA/PyAnYXR0ci1ub3QtZm91bmQnIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvcHlBYnNjaXNzYUZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGF0dHI/LmZpZWxkID09PSBmaWVsZC5pZCk7XG5cbiAgICAgIHRoaXMubGltaXRFbGVtZW50cyghIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYS5saW1pdCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQWJzY2lzc2FMYWJlbCgkZXZlbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGxhYmVsOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3JkaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50ICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgYXR0cmlidXRlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gJGV2ZW50KTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBsYWJlbDogYXR0cj8ubmFtZSA/PyAnYXR0ci1ub3QtZm91bmQnIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvcHlPcmRpbmF0ZUZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGF0dHI/LmZpZWxkID09PSBmaWVsZC5pZCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3JkaW5hdGVMYWJlbCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGxhYmVsOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlS2VlcDBBYnNjaXNzYSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGtlZXAwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlS2VlcDBPcmRpbmF0ZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGtlZXAwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGltaXRFbGVtZW50cygkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5jb3B5QWJzY2lzc2FGaWVsZD8udHlwZSAhPT0gRmllbGRUeXBlLklOU1RBTlQgJiZcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0ICYmXG4gICAgICAgICAgJ2F0JyBpbiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsXG4gICAgICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAgICAgYXQ6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYT8ubGltaXQ/LmF0ID8/IDMsXG4gICAgICAgICAgICAgICAgb3RoZXJzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcmRlcjogJ2FzYycsXG4gICAgICAgICAgICAgICAgaXNUaW1lTGltaXQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsaW1pdDogeyBpbnRlcnZhbDogJ3NlY29uZCcsIGlzVGltZUxpbWl0OiB0cnVlIH0gfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGxpbWl0OiB1bmRlZmluZWQgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMaW1pdCgkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBhdDogJGV2ZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMaW1pdE90aGVycygkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBvdGhlcnM6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXRPcmRlcigkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBvcmRlcjogJGV2ZW50ID8gJ2FzYycgOiAnZGVzYydcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRpbWVMaW1pdCgkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQuaXNUaW1lTGltaXRcbiAgICApIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBpbnRlcnZhbDogJGV2ZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVMZWdlbmQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JhcGgsIGxlZ2VuZDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVRvb2x0aXAoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0b29sdGlwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlR3JvdXBCeSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBncm91cEJ5OiB7IGF0dHJpYnV0ZTogdGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lmdyb3VwQnk/LmF0dHJpYnV0ZSA/PyAnJywgY29sb3I6IHRoaXMuc2NoZW1lc1swXS5pZCB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUdyb3VwQnkoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mICRldmVudCA9PT0gJ3N0cmluZycgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JvdXBCeSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lmdyb3VwQnksXG4gICAgICAgICAgYXR0cmlidXRlOiAkZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQ29sb3JTY2hlbWUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JvdXBCeSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgYXR0cmlidXRlOiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5ncm91cEJ5Py5hdHRyaWJ1dGUsXG4gICAgICAgICAgY29sb3I6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRUaWNrQ291bnQoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmRhdGEubWFwKCh2YWw6IGFueSkgPT4gdmFsLnZhbHVlKSkgPCAzXG4gICAgICA/IHsgdGlja0NvdW50OiBNYXRoLm1heCguLi5kYXRhLm1hcCgodmFsOiBhbnkpID0+IHZhbC52YWx1ZSkpIH1cbiAgICAgIDoge307XG4gIH1cblxuICBzY2hlbWUoKSB7XG4gICAgcmV0dXJuIHZlZ2Euc2NoZW1lKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5Py5jb2xvciA/PyAnJyk7XG4gIH1cblxuICB0b2dnbGVTdGFja2VkKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLFxuICAgICAgICAgIHN0YWNrZWQ6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSB0b0ltYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnY2FudmFzJylbMF0udG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQtY3NzPjwvcHJ5LXdpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tY2hhcnRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5JCB8IGFzeW5jIGFzIG9wdGlvbnNDb3B5XCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgIFtkaXNwbGF5Q291bnRdPVwiZmFsc2VcIlxuICAgIFtvcGVuRGF0YSRdPVwib3BlbkRhdGEkXCJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5jaGFydC50aXRsZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2hhcnRUaXRsZSgkZXZlbnQpXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC50aXRsZVwiXG4gICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zQ29weVwiIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3R5cGVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQudHlwZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVHlwZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInR5cGVPcHRpb25zXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgaWQ9XCJjaGFydF90eXBlXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSA9PT0gR3JhcGhUeXBlLkRPTlVUXCI+XG4gICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGguZG9udXRTaXplXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZURvbnV0U2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuY2hhcnQuZG9udXRTaXplXCJcbiAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgbWF4PVwiNTAwXCJcbiAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUxlZ2VuZCgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5ncmFwaC5sZWdlbmRcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5jaGFydC5sZWdlbmQnIHwgaTE4biB9fVxuICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVUb29sdGlwKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmdyYXBoLnRvb2x0aXBcIlxuICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC50b29sdGlwJyB8IGkxOG4gfX1cbiAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuZ3JhcGgudHlwZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImFic2Npc3NhXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmFic2Npc3NhJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWJzY2lzc2EoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiYWJzY2lzc2FBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgaWQ9XCJhYnNjaXNzYVwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRhdGFMYWJlbFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBYnNjaXNzYUxhYmVsKCRldmVudClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGFiZWxcIlxuICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgWydxdWFudGl0YXRpdmUnLCAndGVtcG9yYWwnXS5pbmNsdWRlcyh0cmFuc2xhdGVUb1ZlZ2FUeXBlKGNvcHlBYnNjaXNzYUZpZWxkPy50eXBlKSkgJiZcbiAgICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmXG4gICAgICAgICAgICAgIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5DSVJDVUxBUlxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmtlZXAwXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibGltaXRFbGVtZW50cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuSElTVE9HUkFNXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5saW1pdCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0ID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmF0XCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5saW1pdFwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIG1heD1cIjEwXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktcmFuZ2U+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkhJU1RPR1JBTVwiPlxuICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMaW1pdE90aGVycygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQub3RoZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vdGhlcnMnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJkYXRlX2xpbWl0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yZGVyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGltaXRPcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJbeyBpZDogJ2FzYycgfSwgeyBpZDogJ2Rlc2MnIH1dXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQub3JkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbYmFzZVRyYW5zbGF0ZV09XCInQHByeS53aWRnZXQuY2hhcnQuJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJvdGhlcl9saW1pdFwiXG4gICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJkYXRlX2xpbWl0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVJbnRlcnZhbCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVGltZUxpbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiW1xuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnc2Vjb25kJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnbWludXRlJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnaG91cicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ2RheScgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3dlZWsnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdtb250aCcgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3F1YXJ0ZXInIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICd5ZWFyJyB9XG4gICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGJhc2VUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC50aW1lLlwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImRhdGVfbGltaXRcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwib3BlcmF0aW9uc1wiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcGVyYXRpb24udGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcGVyYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwib3BlcmF0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLm9wZXJhdGlvblwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwib3BlcmF0aW9uc1wiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLm9wZXJhdGlvbiAhPT0gT3BlcmF0aW9uLkNPVU5UXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJvcmRpbmF0ZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmRpbmF0ZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcmRpbmF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwib3JkaW5hdGVBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIGlkPVwib3JkaW5hdGVcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9yZGluYXRlTGFiZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5sYWJlbFwiXG4gICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHJhbnNsYXRlVG9WZWdhVHlwZShjb3B5T3JkaW5hdGVGaWVsZD8udHlwZSkgPT09ICdxdWFudGl0YXRpdmUnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlS2VlcDBPcmRpbmF0ZSgkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUua2VlcDBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yaWdpbicgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5DSVJDVUxBUlwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlR3JvdXBCeSgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5ncm91cEJ5XCJcbiAgICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lmdyb3VwQnknIHwgaTE4biB9fVxuICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5ncm91cEJ5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc2VyaWVzQXR0clwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5ncm91cEF0dHInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUdyb3VwQnkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncm91cEJ5LmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiYWJzY2lzc2FBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzQXR0clwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNTY2hlbWVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY29sb3JTY2hlbWUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNvbG9yU2NoZW1lKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JvdXBCeS5jb2xvclwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzY2hlbWVzXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzU2NoZW1lXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGJhc2VUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5zY2hlbWUuXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImlkXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXQtLWNoYXJ0LWNvbG9yLXRodW1iXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNjaGVtZUNvbG9yIG9mIHNjaGVtZSgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiby13aWRnZXQtLWNoYXJ0LWNvbG9yLXRodW1iLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInNjaGVtZUNvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNjaGVtZUNvbG9yXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnN0YWNrZWRcIiAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTdGFja2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5jaGFydC5zdGFja2VkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGlzQ2hhcnRWYWxpZCQgfCBhc3luYykgJiYgIShub0RhdGEkIHwgYXN5bmMpICYmICEobm9BZ2dyZWdhdGlvbkRhdGEkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiAjdmVnYT48L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YSQgfCBhc3luY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldF9fY2hvb3NlLXBhcmFtZXRlcnNcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC5jaGFydC5ub0RhdGEnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQubm9EYXRhJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbkRhdGEoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIiBpY29uU3ZnPVwiY29udHJvbFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC50b29sdGlwLnJlYWRTZWFyY2gnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShub0RhdGEkIHwgYXN5bmMpICYmIChub0FnZ3JlZ2F0aW9uRGF0YSQgfCBhc3luYylcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQuY2hhcnQuYWdnTm9SZXN1bHQnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuYWdnTm9SZXN1bHQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuU2V0dGluZ3MoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIiBpY29uU3ZnPVwiY29udHJvbFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC5zZXR0aW5ncy50aXRsZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKG5vRGF0YSQgfCBhc3luYykgJiYgIShub0FnZ3JlZ2F0aW9uRGF0YSQgfCBhc3luYykgJiYgIShpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNob29zZVBhcmFtZXRlcnMnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2hvb3NlUGFyYW1ldGVycycgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5TZXR0aW5ncygpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiIGljb25Tdmc9XCJjb250cm9sXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnNldHRpbmdzLnRpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -6,7 +6,7 @@ import { Component, ViewEncapsulation, ViewChild, NgModule } from '@angular/core
|
|
|
6
6
|
import * as i4 from '@angular/forms';
|
|
7
7
|
import { FormsModule } from '@angular/forms';
|
|
8
8
|
import * as i2 from '@provoly/dashboard';
|
|
9
|
-
import { DataWidgetComponent, WIDGET_HEADER_HEIGHT, GraphType, Operation, VegaColorType, FieldSelectors, ClassSelectors, FieldType, VegaType, BaseWidgetModule, PryCoreModule, PryDashboardModule, PrySelectModule, PryIconModule, PryToggleModule, PryEditInputModule, PryI18nModule, PryRangeModule, PrySortModule, PryAggregationService } from '@provoly/dashboard';
|
|
9
|
+
import { DataWidgetComponent, WIDGET_HEADER_HEIGHT, GraphType, Operation, VegaColorType, FieldSelectors, ClassSelectors, FieldType, NamedQueryTypes, VegaType, BaseWidgetModule, PryCoreModule, PryDashboardModule, PrySelectModule, PryIconModule, PryToggleModule, PryEditInputModule, PryI18nModule, PryRangeModule, PrySortModule, PryAggregationService } from '@provoly/dashboard';
|
|
10
10
|
import * as i5 from '@provoly/dashboard/components/checkbox';
|
|
11
11
|
import { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';
|
|
12
12
|
import { BehaviorSubject, Subject, map, filter, combineLatest, fromEvent, startWith, debounceTime, switchMap, withLatestFrom, share } from 'rxjs';
|
|
@@ -79,8 +79,23 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
79
79
|
.sort((a, b) => a.label.localeCompare(b.label))));
|
|
80
80
|
this.subscriptions.add(this.fields$.subscribe((fields) => (this.fields = fields)));
|
|
81
81
|
this.subscriptions.add(this.classes$.subscribe((classes) => (this.classes = classes)));
|
|
82
|
-
this.
|
|
83
|
-
|
|
82
|
+
this.allowedClasses$ = combineLatest([this.classes$, this.usedDatasources$]).pipe(map(([classes, datasources]) => {
|
|
83
|
+
const hasFullText = datasources
|
|
84
|
+
.map((ds) => ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MULTI_CLASS)
|
|
85
|
+
.reduce((p, c) => p || c, false);
|
|
86
|
+
const multiClassDatasourcesClasses = datasources
|
|
87
|
+
.filter((ds) => ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MULTI_CLASS)
|
|
88
|
+
.map((multiDs) => multiDs.request)
|
|
89
|
+
.map((payload) => payload.oClasses);
|
|
90
|
+
const hasMultiNoClass = multiClassDatasourcesClasses.includes(undefined);
|
|
91
|
+
const multiClasses = multiClassDatasourcesClasses.filter((classes) => !!classes).reduce((p, c) => [...p, ...c], []);
|
|
92
|
+
const singleClasses = datasources
|
|
93
|
+
.filter((ds) => (ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MONO_CLASS) ||
|
|
94
|
+
ds.sourceType === 'dataset')
|
|
95
|
+
.map((singleDs) => singleDs.oClass ?? singleDs.request.oClass);
|
|
96
|
+
return classes.filter((clazz) => hasFullText || hasMultiNoClass || multiClasses.includes(clazz.id) || singleClasses.includes(clazz.id));
|
|
97
|
+
}));
|
|
98
|
+
this.abscissaAttributes$ = combineLatest([this.fields$, this.allowedClasses$, this.optionsCopy$]).pipe(map(([fields, allowedClasses, optionCopy]) => allowedClasses
|
|
84
99
|
.map((clazz) => clazz.attributes)
|
|
85
100
|
.map((attrs) => attrs.filter((attr) => {
|
|
86
101
|
const field = fields.find((field) => {
|
|
@@ -93,12 +108,10 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
93
108
|
}))
|
|
94
109
|
.reduce((a, b) => [...a, ...b], [])));
|
|
95
110
|
this.ordinateAttributes$ = combineLatest([
|
|
96
|
-
this.classes$,
|
|
97
111
|
this.fields$,
|
|
98
|
-
this.
|
|
112
|
+
this.allowedClasses$,
|
|
99
113
|
this.triggerOrdinateAttributes$
|
|
100
|
-
]).pipe(map(([
|
|
101
|
-
.filter((clazz) => Object.keys(rs.items).includes(clazz.id))
|
|
114
|
+
]).pipe(map(([fields, allowedClasses]) => allowedClasses
|
|
102
115
|
.map((clazz) => clazz.attributes)
|
|
103
116
|
.map((attrs) => attrs.filter((attr) => {
|
|
104
117
|
const field = fields.find((field) => {
|
|
@@ -164,7 +177,6 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
164
177
|
this.aggregatedValues$ = combineLatest([
|
|
165
178
|
this.datasourceIds$,
|
|
166
179
|
this.options$,
|
|
167
|
-
this.resultSet$.pipe(filter((rs) => (rs.merged ?? 0) > 0)),
|
|
168
180
|
combineLatest([fromEvent(window, 'datasourceRefresh'), this.datasourceIds$]).pipe(filter(([event, datasources]) => datasources.includes(event.detail)), startWith(undefined))
|
|
169
181
|
]).pipe(debounceTime(100), switchMap(([datasources, options]) => this.aggregationService.aggregate(datasources, options)), withLatestFrom(this.options$), map(([aggregate, options]) => {
|
|
170
182
|
// @ts-ignore
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provoly-dashboard-widgets-widget-aggregated-chart.mjs","sources":["../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/style/css.component.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.html","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/i18n/en.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/i18n/fr.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/widget-aggregated-chart.module.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/provoly-dashboard-widgets-widget-aggregated-chart.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-widget-aggregated-chart-css',\n template: '',\n styleUrls: ['./_o-widget-chart.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryWidgetAggregatedChartCssComponent {}\n","import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport {\n Attribute,\n ChartAggregatedWidgetOptions,\n Class,\n ClassSelectors,\n DataWidgetComponent,\n Field,\n FieldSelectors,\n FieldType,\n GraphType,\n Operation,\n PryAggregationService,\n PryI18nService,\n ValueType,\n VegaColorType,\n VegaType,\n WIDGET_HEADER_HEIGHT\n} from '@provoly/dashboard';\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n filter,\n fromEvent,\n map,\n Observable,\n share,\n startWith,\n Subject,\n switchMap,\n withLatestFrom\n} from 'rxjs';\nimport { View } from 'vega';\nimport embed, { vega } from 'vega-embed';\nimport { mergeDeep, TopLevelSpec } from 'vega-lite';\nimport { fontConfig } from 'vega-lite/build/src/config';\n\nvega.scheme('KO/W/OK', ['#C04D3F', '#FD9843', '#9ABE29']);\n\n@Component({\n selector: 'pry-widget-aggregated-chart',\n templateUrl: './widget-aggregated-chart.component.html'\n})\nexport class WidgetAggregatedChartComponent extends DataWidgetComponent implements AfterViewInit {\n @ViewChild('vega') vega!: ElementRef;\n options$: Observable<ChartAggregatedWidgetOptions>;\n optionsCopy$ = new BehaviorSubject<ChartAggregatedWidgetOptions | null>(null);\n view?: View;\n trigger$ = new Subject<void>();\n vegaLiteSpec$: Observable<TopLevelSpec>;\n fields$: Observable<Field[]>;\n classes$: Observable<Class[]>;\n attributeTypes$: Observable<{\n ordinate: { vegaType: VegaType; fieldType: any; name: string };\n abscissa: { vegaType: VegaType; fieldType: any; name: string };\n groupBy: { vegaType?: VegaType; fieldType?: any; name: string };\n }>;\n aggregatedValues$: Observable<{ data: any; operation: any }>;\n WIDGET_HEADER_HEIGHT = WIDGET_HEADER_HEIGHT;\n GraphType = GraphType;\n Operation = Operation;\n isChartValid$: Observable<boolean>;\n typeOptions: { id: string; label: string }[] = [];\n operations$: Observable<{ id: string; label: string }[]>;\n abscissaAttributes$: Observable<Attribute[]>;\n classes: Class[] = [];\n fields: Field[] = [];\n ordinateAttributes$: Observable<Attribute[]>;\n triggerOrdinateAttributes$ = new Subject<void>();\n copyAbscissaField?: Field;\n copyOrdinateField?: Field;\n schemes: { id: string }[] = [];\n noData$: Observable<boolean>;\n sortActive? = 'name';\n sortDirection? = 'asc';\n noAggregationData$: Observable<boolean>;\n\n constructor(\n store: Store<any>,\n private translateService: PryI18nService,\n el: ElementRef,\n private aggregationService: PryAggregationService\n ) {\n super(store, el);\n this.schemes = Object.values(VegaColorType).map((id) => ({ id }));\n this.typeOptions = Object.values(GraphType)\n .map((v) => ({\n id: v,\n label: this.translateService.instant('@pry.widget.chart.graphType.' + v)\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\n this.options$ = this.manifest$.pipe(\n map(\n (manifest) =>\n mergeDeep(\n {\n graph: { type: GraphType.BAR, tooltip: true, legend: false },\n abscissa: { keep0: true },\n ordinate: { keep0: true }\n } as ChartAggregatedWidgetOptions,\n (manifest.options ?? {}) as ChartAggregatedWidgetOptions\n ) as ChartAggregatedWidgetOptions\n )\n );\n this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {\n this.optionsCopy$.next(JSON.parse(JSON.stringify(options)));\n });\n this.fields$ = this.store.select(FieldSelectors.fields);\n this.classes$ = this.store.select(ClassSelectors.classes);\n\n this.operations$ = combineLatest([this.resultSet$, this.classes$, this.fields$]).pipe(\n map(([rs, classes, fields]) =>\n classes\n .filter((clazz) => Object.keys(rs.items).includes(clazz.id))\n .map((clazz) => clazz.attributes)\n .map((attrs) =>\n attrs.filter((attr) => {\n const field = fields.find((field) => {\n return field.id === attr.field;\n });\n return !!field && [FieldType.INTEGER, FieldType.DECIMAL, FieldType.LONG].includes(field.type);\n })\n )\n .reduce((a, b) => [...a, ...b], [])\n .filter((attr) => !!attr)\n ),\n map((attributes) =>\n (attributes.length > 0\n ? Object.values(Operation).filter((operation) => operation !== Operation.EXTENT)\n : [Operation.COUNT, Operation.DISTINCT, Operation.NONE]\n )\n .map((v) => ({\n id: v,\n label: this.translateService.instant('@pry.widget.chart.operation.' + v)\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n )\n );\n\n this.subscriptions.add(this.fields$.subscribe((fields) => (this.fields = fields)));\n this.subscriptions.add(this.classes$.subscribe((classes) => (this.classes = classes)));\n\n this.abscissaAttributes$ = combineLatest([this.classes$, this.fields$, this.resultSet$, this.optionsCopy$]).pipe(\n map(([classes, fields, rs, optionCopy]) =>\n classes\n .filter((clazz) => Object.keys(rs.items).includes(clazz.id))\n .map((clazz) => clazz.attributes)\n .map((attrs) =>\n attrs.filter((attr) => {\n const field = fields.find((field) => {\n return field.id === attr.field;\n });\n return (\n !!field &&\n field.type !== FieldType.RAW &&\n field.type !== FieldType.STRING &&\n (optionCopy?.graph.type !== GraphType.HISTOGRAM || field.type !== FieldType.KEYWORD)\n );\n })\n )\n .reduce((a, b) => [...a, ...b], [])\n )\n );\n\n this.ordinateAttributes$ = combineLatest([\n this.classes$,\n this.fields$,\n this.resultSet$,\n this.triggerOrdinateAttributes$\n ]).pipe(\n map(([classes, fields, rs]) =>\n classes\n .filter((clazz) => Object.keys(rs.items).includes(clazz.id))\n .map((clazz) => clazz.attributes)\n .map((attrs) =>\n attrs.filter((attr) => {\n const field = fields.find((field) => {\n return field.id === attr.field;\n });\n if (\n this.optionsCopy$.value &&\n [\n Operation.MAX,\n Operation.MIN,\n Operation.SUM,\n Operation.Q1,\n Operation.Q3,\n Operation.AVERAGE,\n Operation.MEDIAN,\n Operation.NONE\n ].includes(this.optionsCopy$.value.ordinate.operation)\n ) {\n return (\n !!field &&\n [FieldType.INTEGER, FieldType.INSTANT, FieldType.LONG, FieldType.DECIMAL].includes(field.type)\n );\n }\n return !!field && field.type !== FieldType.RAW && field.type !== FieldType.STRING;\n })\n )\n .reduce((a, b) => [...a, ...b], [])\n )\n );\n\n this.isChartValid$ = combineLatest([this.options$, this.abscissaAttributes$, this.ordinateAttributes$]).pipe(\n map(([options, abscissaAttrs, ordinateAttrs]) => {\n return (\n !!options.abscissa.attribute &&\n abscissaAttrs.map((attr) => attr.id).includes(options.abscissa.attribute) &&\n (options.ordinate.attribute\n ? ordinateAttrs.map((attr) => attr.id).includes(options.ordinate.attribute)\n : true)\n );\n })\n );\n\n this.attributeTypes$ = combineLatest([this.options$, this.fields$, this.classes$]).pipe(\n filter(([options, fields, classes]) => !!options.abscissa && !!options.ordinate),\n map(([options, fields, classes]) => {\n const abscissa = classes\n .map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa.attribute))\n .find((attr) => !!attr);\n const ordinate = classes\n .map((clazz) => clazz.attributes.find((attr) => attr.id === options.ordinate.attribute))\n .find((attr) => !!attr);\n const groupBy = classes\n .map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))\n .find((attr) => !!attr);\n const abscissaFieldType = fields.find((field) => field.id === abscissa?.field)?.type ?? FieldType.STRING;\n const ordinateFieldType = fields.find((field) => field.id === ordinate?.field)?.type ?? FieldType.STRING;\n const groupByFieldType = fields.find((field) => field.id === groupBy?.field)?.type ?? FieldType.STRING;\n return {\n abscissa: {\n fieldType: abscissaFieldType,\n vegaType: this.translateToVegaType(abscissaFieldType, abscissa?.name ?? ''),\n name: abscissa?.name ?? ''\n },\n ordinate: {\n fieldType: ordinateFieldType,\n vegaType:\n options.ordinate.operation === Operation.COUNT || options.ordinate.operation === Operation.DISTINCT\n ? VegaType.QUANTITATIVE\n : this.translateToVegaType(ordinateFieldType, ordinate?.name ?? ''),\n name: ordinate?.name ?? ''\n },\n groupBy: {\n fieldType: groupByFieldType,\n vegaType: this.translateToVegaType(groupByFieldType, groupBy?.name),\n name: groupBy?.name ?? ''\n }\n };\n })\n );\n\n this.aggregatedValues$ = combineLatest([\n this.datasourceIds$,\n this.options$,\n this.resultSet$.pipe(filter((rs) => (rs.merged ?? 0) > 0)),\n combineLatest([fromEvent(window, 'datasourceRefresh'), this.datasourceIds$]).pipe(\n filter(([event, datasources]) => datasources.includes((event as CustomEvent).detail)),\n startWith(undefined)\n )\n ]).pipe(\n debounceTime(100),\n switchMap(([datasources, options]) => this.aggregationService.aggregate(datasources, options)),\n withLatestFrom(this.options$),\n map(([aggregate, options]) => {\n // @ts-ignore\n if (aggregate.values.length > 0 && !aggregate.values[0].groupBy) {\n return {\n operation: aggregate.operation,\n data: aggregate.values.map((value) => ({ ...value, series: options.ordinate.label }))\n };\n }\n const flattened = (\n aggregate.values as {\n key: ValueType;\n groupBy: {\n key: ValueType;\n value: ValueType;\n }[];\n }[]\n )\n .map((value) =>\n value.groupBy.map((groupBy) => ({\n key: value.key,\n series: groupBy.key,\n value: groupBy.value\n }))\n )\n .reduce((a, b) => [...a, ...b], []);\n return { operation: aggregate.operation, data: flattened };\n }),\n startWith({ operation: Operation.NONE, data: [] }),\n share()\n );\n\n this.noData$ = this.datasourceIds$.pipe(map((ids) => ids.length === 0));\n this.noAggregationData$ = this.aggregatedValues$.pipe(map(({ data }) => data.length === 0));\n\n this.vegaLiteSpec$ = combineLatest([\n this.options$,\n this.attributeTypes$,\n this.aggregatedValues$,\n this.widgetSize$.pipe(debounceTime(100)),\n this.displayHeader$\n ]).pipe(\n map(([options, types, values, size, display]) => {\n const isCircular = [GraphType.CIRCULAR, GraphType.DONUT].includes(options.graph.type);\n const stacked = options.graph.type.startsWith('bar') ? !options.graph.stacked : options.graph.stacked;\n const legendTitle = this.translateService.instant(\n options.groupBy ? types.groupBy.name ?? '' : '@pry.widget.chart.legendLabel'\n );\n return mergeDeep(\n {\n $schema: 'https://vega.github.io/schema/vega-lite/v5.json',\n title: this.getTitle(options),\n width: 'container',\n height: (size.height ?? 100) - (display ? WIDGET_HEADER_HEIGHT : 0),\n padding: 10,\n autosize: { type: 'fit', contains: 'padding' },\n data: { values: JSON.parse(JSON.stringify(values.data)) },\n layer: [\n {\n mark: {\n type: options.graph.type.split('-')[0] as 'arc' | 'line' | 'point' | 'bar' | 'area',\n point: options.graph.type.indexOf('point') >= 0,\n line: options.graph.type.indexOf('line') >= 0,\n innerRadius: options.graph.donutSize ?? 30\n },\n encoding: {\n x: !isCircular\n ? {\n field: 'key',\n title: options.abscissa.label,\n type: types.abscissa.vegaType,\n timeUnit:\n types.abscissa.vegaType === VegaType.TEMPORAL && options.abscissa.limit?.isTimeLimit\n ? options.abscissa.limit.interval\n : undefined,\n bin: options.graph.type.indexOf('histogram') >= 0,\n axis: {\n //format: types.abscissa.vegaType === VegaType.TEMPORAL ? '%Y-%B-%dT%H:%M:%S' : undefined,\n grid: false,\n ...WidgetAggregatedChartComponent.minTick(types.abscissa.fieldType),\n labelExpr: `height < 300 ? ${\n types.abscissa.vegaType === VegaType.TEMPORAL\n ? \"timeFormat(datum.value, '%Y-%B-%dT%H:%M:%S')\"\n : 'truncate(datum.value, 10)'\n } : ${\n types.abscissa.vegaType === VegaType.TEMPORAL\n ? \"timeFormat(datum.value, '%Y-%B-%dT%H:%M:%S')\"\n : 'datum.value'\n }`\n },\n scale: {\n // Force a false value here so that vega understands properly\n zero: !!options.abscissa.keep0\n //type: WidgetChartComponent.isTimeUnitUTC(variables[0]) ? 'utc' : undefined\n }\n }\n : undefined,\n y: !isCircular\n ? {\n field: 'value',\n title: options.ordinate.label,\n type: types.ordinate.vegaType,\n axis: {\n ...WidgetAggregatedChartComponent.minTick(types.ordinate.fieldType),\n ...this.setTickCount(values.data)\n },\n scale: {\n zero: types.ordinate.vegaType === VegaType.QUANTITATIVE ? !!options.ordinate.keep0 : false\n },\n ...(stacked ? { stack: true } : {})\n }\n : undefined,\n theta: isCircular ? { field: 'value', type: types.ordinate.vegaType } : undefined,\n color: {\n title: legendTitle,\n field: !isCircular ? 'series' : 'key',\n legend: options.graph.legend,\n scale: options.graph.legend ? { scheme: options.groupBy?.color ?? this.schemes[0].id } : undefined\n },\n xOffset: stacked && options.groupBy ? { field: 'series' } : undefined,\n tooltip: options.graph.tooltip\n ? options.groupBy\n ? [\n {\n field: 'key',\n type: types.abscissa.vegaType,\n title: options.abscissa.label,\n ...(types.abscissa.vegaType === 'temporal' ? { format: '%Y-%B-%dT%H:%M:%S' } : {})\n },\n { field: 'value', type: types.ordinate.vegaType, title: options.ordinate.label },\n {\n field: 'series',\n title: legendTitle,\n type: 'nominal'\n }\n ]\n : [\n {\n field: 'key',\n type: types.abscissa.vegaType,\n title: options.abscissa.label,\n ...(types.abscissa.vegaType === 'temporal' ? { format: '%Y-%B-%dT%H:%M:%S' } : {})\n },\n { field: 'value', type: types.ordinate.vegaType, title: options.ordinate.label }\n ]\n : undefined\n }\n }\n ],\n config: fontConfig('Ubuntu, sans-serif')\n } as any,\n options.additionalSpec\n );\n })\n );\n }\n\n ngAfterViewInit() {\n this.subscriptions.add(\n combineLatest([this.vegaLiteSpec$, this.trigger$]).subscribe(([spec, _]) => {\n if (this.vega) {\n this.view?.finalize();\n //console.log(spec);\n embed(this.vega.nativeElement, JSON.parse(JSON.stringify(spec)), {\n actions: false,\n renderer: 'canvas',\n formatLocale: this.translateService.instantObject('@pry.widget.chart.numberLocale') as any,\n timeFormatLocale: this.translateService.instantObject('@pry.widget.chart.timeFormatLocale') as any\n })\n .then((result) => (this.view = result.view))\n .catch((err) => console.error('Cannot display chart', err));\n } else {\n setTimeout(() => this.trigger$.next(), 100);\n }\n })\n );\n this.trigger$.next();\n }\n\n translateToVegaType(type?: FieldType, name?: string): VegaType {\n let idRegex = new RegExp(/_id|id_|_ID|ID_|_Id|Id_/, 'g');\n if (idRegex.test(name ?? '-------')) {\n return VegaType.ORDINAL;\n }\n\n switch (type) {\n case FieldType.DECIMAL:\n case FieldType.INTEGER:\n case FieldType.LONG:\n return VegaType.QUANTITATIVE;\n case FieldType.INSTANT:\n return VegaType.TEMPORAL;\n case FieldType.KEYWORD:\n case FieldType.STRING:\n return VegaType.NOMINAL;\n default:\n return VegaType.NOMINAL;\n }\n }\n\n static minTick(type: FieldType): { tickMinStep: number } | {} {\n switch (type) {\n case FieldType.INTEGER:\n case FieldType.LONG:\n return { tickMinStep: 1 };\n case FieldType.DECIMAL:\n case FieldType.INSTANT:\n case FieldType.KEYWORD:\n case FieldType.STRING:\n default:\n return {};\n }\n }\n\n emitManifest() {\n this.manifestModified.emit({\n widgetIndex: this.widgetIndex,\n manifest: {\n ...this.manifest,\n options: { ...this.optionsCopy$.getValue() }\n }\n });\n }\n\n openSettings() {\n (this.open$ as Subject<void>).next(undefined);\n }\n\n openData() {\n (this.openData$ as Subject<void>).next(undefined);\n }\n\n private getTitle(options: ChartAggregatedWidgetOptions) {\n return options.graph?.title ?? (options.abscissa.label ?? 'key') + ' / ' + (options.ordinate.label ?? 'value');\n }\n\n changeChartTitle($event: string) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value?.graph, title: $event }\n });\n }\n }\n\n changeType($event: GraphType) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value?.graph, type: $event }\n });\n if ([GraphType.CIRCULAR, GraphType.DONUT].includes($event)) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: undefined\n });\n }\n if ([GraphType.HISTOGRAM].includes($event)) {\n this.limitElements(true);\n }\n }\n }\n\n changeDonutSize($event: number) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value?.graph, donutSize: $event }\n });\n }\n }\n\n changeOperation($event: Operation) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, operation: $event }\n });\n if ($event === Operation.COUNT || $event === Operation.DISTINCT) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: {\n ...this.optionsCopy$.value?.ordinate,\n label: this.translateService.instant('@pry.widget.chart.operation.' + $event),\n attribute: undefined\n }\n });\n }\n setTimeout(() => this.triggerOrdinateAttributes$.next(), 10);\n }\n }\n\n changeAbscissa($event: string) {\n if ($event && this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, attribute: $event }\n });\n const attr = this.classes\n .map((clazz) => clazz.attributes)\n .reduce((a, b) => [...a, ...b], [])\n .find((attr) => attr.id === $event);\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, label: attr?.name ?? 'attr-not-found' }\n });\n\n this.copyAbscissaField = this.fields.find((field) => attr?.field === field.id);\n\n this.limitElements(!!this.optionsCopy$.value?.abscissa.limit);\n }\n }\n\n changeAbscissaLabel($event: string) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, label: $event }\n });\n }\n }\n\n changeOrdinate($event: any) {\n if ($event && this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, attribute: $event }\n });\n const attr = this.classes\n .map((clazz) => clazz.attributes)\n .reduce((a, b) => [...a, ...b], [])\n .find((attr) => attr.id === $event);\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, label: attr?.name ?? 'attr-not-found' }\n });\n\n this.copyOrdinateField = this.fields.find((field) => attr?.field === field.id);\n }\n }\n\n changeOrdinateLabel($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, label: $event }\n });\n }\n }\n\n changeKeep0Abscissa($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, keep0: $event }\n });\n }\n }\n\n changeKeep0Ordinate($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, keep0: $event }\n });\n }\n }\n\n limitElements($event: any) {\n if (this.optionsCopy$.value) {\n if ($event) {\n if (\n this.copyAbscissaField?.type !== FieldType.INSTANT &&\n this.optionsCopy$.value?.abscissa?.limit &&\n 'at' in this.optionsCopy$.value?.abscissa?.limit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value?.abscissa,\n limit: {\n at: this.optionsCopy$.value?.abscissa?.limit?.at ?? 3,\n others: false,\n order: 'asc',\n isTimeLimit: false\n }\n }\n });\n } else {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, limit: { interval: 'second', isTimeLimit: true } }\n });\n }\n } else {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, limit: undefined }\n });\n }\n }\n }\n\n changeLimit($event: any) {\n if (\n this.optionsCopy$.value &&\n this.optionsCopy$.value.abscissa.limit &&\n !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value?.abscissa,\n limit: {\n ...this.optionsCopy$.value?.abscissa.limit,\n at: $event\n }\n }\n });\n }\n }\n\n changeLimitOthers($event: any) {\n if (\n this.optionsCopy$.value &&\n this.optionsCopy$.value.abscissa.limit &&\n !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value?.abscissa,\n limit: {\n ...this.optionsCopy$.value?.abscissa.limit,\n others: $event\n }\n }\n });\n }\n }\n\n changeLimitOrder($event: any) {\n if (\n this.optionsCopy$.value &&\n this.optionsCopy$.value.abscissa.limit &&\n !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value?.abscissa,\n limit: {\n ...this.optionsCopy$.value?.abscissa.limit,\n order: $event ? 'asc' : 'desc'\n }\n }\n });\n }\n }\n\n changeTimeLimit($event: any) {\n if (\n this.optionsCopy$.value &&\n this.optionsCopy$.value.abscissa.limit &&\n this.optionsCopy$.value.abscissa.limit.isTimeLimit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value.abscissa,\n limit: {\n ...this.optionsCopy$.value.abscissa.limit,\n interval: $event\n }\n }\n });\n }\n }\n\n toggleLegend($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value.graph, legend: $event }\n });\n }\n }\n\n toggleTooltip($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value?.graph, tooltip: $event }\n });\n }\n }\n\n toggleGroupBy($event: any) {\n if (this.optionsCopy$.value) {\n if ($event) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: { attribute: this.optionsCopy$.value?.groupBy?.attribute ?? '', color: this.schemes[0].id }\n });\n } else {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: undefined\n });\n }\n }\n }\n\n changeGroupBy($event: any) {\n if (typeof $event === 'string' && this.optionsCopy$.value && this.optionsCopy$.value.groupBy) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: {\n ...this.optionsCopy$.value?.groupBy,\n attribute: $event\n }\n });\n }\n }\n\n changeColorScheme($event: any) {\n if (this.optionsCopy$.value && this.optionsCopy$.value.groupBy) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: {\n attribute: this.optionsCopy$.value.groupBy?.attribute,\n color: $event\n }\n });\n }\n }\n\n setTickCount(data: any) {\n return Math.max(...data.map((val: any) => val.value)) < 3\n ? { tickCount: Math.max(...data.map((val: any) => val.value)) }\n : {};\n }\n\n scheme() {\n return vega.scheme(this.optionsCopy$.value?.groupBy?.color ?? '');\n }\n\n toggleStacked($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: {\n ...this.optionsCopy$.value?.graph,\n stacked: $event\n }\n });\n }\n }\n\n override toImage(): Promise<string> {\n return new Promise((resolve, reject) => {\n resolve(this.vega.nativeElement.querySelectorAll('canvas')[0].toDataURL('image/png'));\n });\n }\n}\n","<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesScheme\">{{ '@pry.widget.chart.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n","export const enTranslations = {\n '@pry': {\n widget: {\n chart: {\n numberLocale: {\n decimal: '.',\n thousands: ',',\n grouping: [3],\n currency: ['$', '']\n },\n timeFormatLocale: {\n dateTime: '%Y %B %d %H:%M:%S',\n date: '%d/%m/%Y',\n time: '%H:%M:%S',\n periods: ['AM', 'PM'],\n days: ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'],\n shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n shortMonths: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']\n },\n operation: {\n none: 'Attribute value',\n count: 'Count',\n sum: 'Sum',\n cardinality: 'Distinct elements',\n avg: 'Average',\n median: 'Median',\n q1: 'Lower quartile',\n q3: 'Upper Quartile',\n min: 'Minimum',\n max: 'Maximum',\n percent: 'Percent',\n title: 'Operation'\n },\n chooseParameters: 'Please select parameters to display chart.',\n series: 'Series',\n type: 'Chart type',\n title: 'Chart title',\n graphType: {\n 'area-default': 'Area',\n 'area-with-lines-and-points': 'Curve with lines and points',\n 'bar-default': 'Bar',\n 'arc-default': 'Circular',\n 'line-default': 'Curve',\n 'line-with-points': 'Curve with points',\n 'arc-donut': 'Donut',\n 'bar-histogram': 'Histogram',\n 'point-default': 'Points'\n },\n donutSize: 'Donut inner radius',\n abscissa: 'Abscissa',\n ordinate: 'Ordinate',\n dataLabel: 'Data label',\n origin: 'Axis containing 0',\n limit: 'Limit elements',\n asc: 'Biggest elements',\n desc: 'Smallest elements',\n timeInterval: 'Time interval',\n others: 'Regroup remaining values in category \"Other\"',\n order: 'Component selection',\n groupBy: 'Group by',\n groupAttr: 'Grouping attribute',\n colorScheme: 'Color scheme',\n legend: 'Display legend',\n legendLabel: 'Legend',\n tooltip: 'Display tooltip',\n stacked: 'Vertical stacking',\n noData: 'No selected datasource',\n aggNoResult: 'No results to display',\n scheme: {\n accent: '8 colors n°1',\n set2: '8 colors n°2',\n dark2: '8 dark colors',\n pastel2: '8 pastel colors',\n set1: '9 colors',\n pastel1: '9 pastel colors',\n category10: '10 colors',\n tableau10: '10 different colors',\n set3: '12 colors',\n paired: '12 different colors',\n tableau20: '20 colors',\n category20: '20 colors with 2 shades',\n category20b: '20 colors with 4 shades n°1',\n category20c: '20 colors with 4 shades n°2',\n 'KO/W/OK': 'Traffic light'\n },\n time: {\n second: 'Second',\n minute: 'Minute',\n hour: 'Hour',\n day: 'Day',\n week: 'Week',\n month: 'Month',\n quarter: 'Quarter',\n year: 'Year'\n }\n }\n },\n message: {\n 'backend-only-1-datasource': 'Aggregation service can only manage the first datasource linked to the widget.',\n 'cannot-aggregate-virtual-ds':\n 'Aggregation service cannot perform aggregation on virtual datasets such as current search.'\n }\n }\n};\n","export const frTranslations = {\n '@pry': {\n widget: {\n chart: {\n numberLocale: {\n decimal: '.',\n thousands: ' ',\n grouping: [3],\n currency: ['€', '']\n },\n timeFormatLocale: {\n dateTime: '%Y %B %d %H:%M:%S',\n date: '%d/%m/%Y',\n time: '%H:%M:%S',\n periods: ['AM', 'PM'],\n days: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],\n shortDays: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n months: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n shortMonths: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']\n },\n operation: {\n none: \"Valeur de l'attribut\",\n count: 'Nombre',\n sum: 'Somme',\n cardinality: \"Nombre d'éléments distincts\",\n avg: 'Moyenne',\n median: 'Médiane',\n q1: 'Quartile inférieur',\n q3: 'Quartile supérieur',\n min: 'Minimum',\n max: 'Maximum',\n percent: 'Pourcentage',\n title: 'Opération'\n },\n chooseParameters: \"Merci de sélectionner les paramètres afin d'afficher le graphique\",\n type: 'Type de graphique',\n title: 'Titre du graphique',\n graphType: {\n 'area-default': 'Aire',\n 'area-with-lines-and-points': 'Aire avec lignes et marques',\n 'bar-default': 'Barres',\n 'arc-default': 'Circulaire',\n 'line-default': 'Courbe',\n 'line-with-points': 'Courbe avec marques',\n 'arc-donut': 'Diagramme anneau',\n 'bar-histogram': 'Histogramme',\n 'point-default': 'Points'\n },\n donutSize: \"Diamètre intérieur de l'anneau\",\n abscissa: 'Abscisse',\n ordinate: 'Ordonnée',\n dataLabel: 'Libellé de la donnée',\n origin: 'Axe contenant 0',\n limit: 'Limiter les éléments',\n asc: 'Aux plus grands éléments',\n desc: 'Aux plus petits éléments',\n timeInterval: 'Intervalle de temps',\n others: 'Regrouper les valeurs restantes dans une catégorie \"Autre\"',\n order: 'Choix des éléments',\n groupBy: 'Regroupement',\n groupAttr: 'Attribut de regroupement',\n colorScheme: 'Schéma de couleur',\n legend: 'Afficher la légende',\n legendLabel: 'Légende',\n tooltip: 'Affichage des info-bulles',\n stacked: 'Superposition verticale',\n noData: 'Aucune datasource sélectionnée',\n aggNoResult: 'Aucune donnée à afficher',\n scheme: {\n accent: '8 couleurs n°1',\n set2: '8 couleurs n°2',\n dark2: '8 couleurs sombre',\n pastel2: '8 couleurs pastel',\n set1: '9 couleurs',\n pastel1: '9 couleurs pastel',\n category10: '10 couleurs',\n tableau10: '10 couleurs différentes',\n set3: '12 couleurs',\n paired: '12 couleurs différentes',\n tableau20: '20 couleurs',\n category20: '20 couleurs avec 2 nuances',\n category20b: '20 couleurs avec 4 nuances n°1',\n category20c: '20 couleurs avec 4 nuances n°2',\n 'KO/W/OK': 'Feu de signalisation'\n },\n time: {\n second: 'Seconde',\n minute: 'Minute',\n hour: 'Heure',\n day: 'Jour',\n week: 'Semaine',\n month: 'Mois',\n quarter: 'Trimestre',\n year: 'Année'\n }\n }\n },\n message: {\n 'backend-only-1-datasource':\n 'Le service aggregation ne peut prendre en compte que la première datasource associée au widget.',\n 'cannot-aggregate-virtual-ds':\n 'Le service aggregation ne peut pas agréger sur des dataset virtuels tels que la recherche courante.'\n }\n }\n};\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseWidgetComponent,\n BaseWidgetModule,\n PryAggregationService,\n PryCoreModule,\n PryDashboardModule,\n PryEditInputModule,\n PryI18nModule,\n PryI18nService,\n PryIconModule,\n PryRangeModule,\n PrySelectModule,\n PrySortModule,\n PryToggleModule\n} from '@provoly/dashboard';\nimport { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';\nimport { WidgetAggregatedChartComponent } from './component/widget-aggregated-chart.component';\nimport { enTranslations } from './i18n/en.translations';\nimport { frTranslations } from './i18n/fr.translations';\nimport { PryWidgetAggregatedChartCssComponent } from './style/css.component';\n\n@NgModule({\n declarations: [WidgetAggregatedChartComponent, PryWidgetAggregatedChartCssComponent],\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n PryCoreModule,\n PryDashboardModule,\n PrySelectModule,\n PryIconModule,\n PryCheckboxModule,\n PryToggleModule,\n PryEditInputModule,\n PryI18nModule,\n PryRangeModule,\n PrySortModule\n ],\n exports: [WidgetAggregatedChartComponent],\n providers: [PryAggregationService]\n})\nexport class WidgetAggregatedChartModule extends BaseWidgetModule {\n constructor(private pryTranslateService: PryI18nService) {\n super();\n this.pryTranslateService.addLangObject('fr', 'widget-aggregated-chart', frTranslations);\n this.pryTranslateService.addLangObject('en', 'widget-aggregated-chart', enTranslations);\n }\n\n override getComponent() {\n return WidgetAggregatedChartComponent as Type<BaseWidgetComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6.PryWidgetAggregatedChartCssComponent","i1"],"mappings":";;;;;;;;;;;;;;;;;MAQa,oCAAoC,CAAA;8GAApC,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oCAAoC,uEAJrC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,giBAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAID,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBANhD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EACjC,QAAA,EAAA,EAAE,EAEG,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,giBAAA,CAAA,EAAA,CAAA;;;ACiCvC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAMpD,MAAO,8BAA+B,SAAQ,mBAAmB,CAAA;AAkCrE,IAAA,WAAA,CACE,KAAiB,EACT,gBAAgC,EACxC,EAAc,EACN,kBAAyC,EAAA;AAEjD,QAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAJT,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAgB;QAEhC,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAuB;AAnCnD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAsC,IAAI,CAAC,CAAC;AAE9E,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAU/B,IAAoB,CAAA,oBAAA,GAAG,oBAAoB,CAAC;QAC5C,IAAS,CAAA,SAAA,GAAG,SAAS,CAAC;QACtB,IAAS,CAAA,SAAA,GAAG,SAAS,CAAC;QAEtB,IAAW,CAAA,WAAA,GAAoC,EAAE,CAAC;QAGlD,IAAO,CAAA,OAAA,GAAY,EAAE,CAAC;QACtB,IAAM,CAAA,MAAA,GAAY,EAAE,CAAC;AAErB,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,OAAO,EAAQ,CAAC;QAGjD,IAAO,CAAA,OAAA,GAAqB,EAAE,CAAC;QAE/B,IAAU,CAAA,UAAA,GAAI,MAAM,CAAC;QACrB,IAAa,CAAA,aAAA,GAAI,KAAK,CAAC;QAUrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;AACxC,aAAA,GAAG,CAAC,CAAC,CAAC,MAAM;AACX,YAAA,EAAE,EAAE,CAAC;YACL,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,8BAA8B,GAAG,CAAC,CAAC;AACzE,SAAA,CAAC,CAAC;AACF,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAElD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACjC,GAAG,CACD,CAAC,QAAQ,KACP,SAAS,CACP;AACE,YAAA,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAC5D,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACzB,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;SACM,GAChC,QAAQ,CAAC,OAAO,IAAI,EAAE,EACQ,CACpC,CACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;AAC/D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9D,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACnF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KACxB,OAAO;aACJ,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC3D,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC;AAChC,aAAA,GAAG,CAAC,CAAC,KAAK,KACT,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAClC,gBAAA,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC;AACjC,aAAC,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChG,SAAC,CAAC,CACH;AACA,aAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;aAClC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAC5B,EACD,GAAG,CAAC,CAAC,UAAU,KACb,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;cAClB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,SAAS,CAAC,MAAM,CAAC;AAChF,cAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC;AAEtD,aAAA,GAAG,CAAC,CAAC,CAAC,MAAM;AACX,YAAA,EAAE,EAAE,CAAC;YACL,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,8BAA8B,GAAG,CAAC,CAAC;AACzE,SAAA,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAClD,CACF,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvF,QAAA,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAC9G,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,KACpC,OAAO;aACJ,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC3D,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC;AAChC,aAAA,GAAG,CAAC,CAAC,KAAK,KACT,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAClC,gBAAA,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC;AACjC,aAAC,CAAC,CAAC;YACH,QACE,CAAC,CAAC,KAAK;AACP,gBAAA,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG;AAC5B,gBAAA,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;AAC/B,iBAAC,UAAU,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,CAAC,EACpF;AACJ,SAAC,CAAC,CACH;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CACtC,CACF,CAAC;AAEF,QAAA,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,OAAO;AACZ,YAAA,IAAI,CAAC,UAAU;AACf,YAAA,IAAI,CAAC,0BAA0B;AAChC,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KACxB,OAAO;aACJ,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC3D,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC;AAChC,aAAA,GAAG,CAAC,CAAC,KAAK,KACT,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAClC,gBAAA,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC;AACjC,aAAC,CAAC,CAAC;AACH,YAAA,IACE,IAAI,CAAC,YAAY,CAAC,KAAK;AACvB,gBAAA;AACE,oBAAA,SAAS,CAAC,GAAG;AACb,oBAAA,SAAS,CAAC,GAAG;AACb,oBAAA,SAAS,CAAC,GAAG;AACb,oBAAA,SAAS,CAAC,EAAE;AACZ,oBAAA,SAAS,CAAC,EAAE;AACZ,oBAAA,SAAS,CAAC,OAAO;AACjB,oBAAA,SAAS,CAAC,MAAM;AAChB,oBAAA,SAAS,CAAC,IAAI;AACf,iBAAA,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EACtD;gBACA,QACE,CAAC,CAAC,KAAK;oBACP,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAC9F;AACH,aAAA;AACD,YAAA,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC;AACpF,SAAC,CAAC,CACH;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CACtC,CACF,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAC1G,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,KAAI;AAC9C,YAAA,QACE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAC5B,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACzE,iBAAC,OAAO,CAAC,QAAQ,CAAC,SAAS;sBACvB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC3E,sBAAE,IAAI,CAAC,EACT;SACH,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACrF,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAChF,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,KAAI;YACjC,MAAM,QAAQ,GAAG,OAAO;iBACrB,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;iBACvF,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,OAAO;iBACrB,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;iBACvF,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO;iBACpB,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;iBACvF,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC;YACzG,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC;YACzG,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC;YACvG,OAAO;AACL,gBAAA,QAAQ,EAAE;AACR,oBAAA,SAAS,EAAE,iBAAiB;AAC5B,oBAAA,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;AAC3E,oBAAA,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC3B,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,SAAS,EAAE,iBAAiB;AAC5B,oBAAA,QAAQ,EACN,OAAO,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,QAAQ;0BAC/F,QAAQ,CAAC,YAAY;AACvB,0BAAE,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;AACvE,oBAAA,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC3B,iBAAA;AACD,gBAAA,OAAO,EAAE;AACP,oBAAA,SAAS,EAAE,gBAAgB;oBAC3B,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC;AACnE,oBAAA,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;AAC1B,iBAAA;aACF,CAAC;SACH,CAAC,CACH,CAAC;AAEF,QAAA,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC;AACrC,YAAA,IAAI,CAAC,cAAc;AACnB,YAAA,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,YAAA,aAAa,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAC/E,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAE,KAAqB,CAAC,MAAM,CAAC,CAAC,EACrF,SAAS,CAAC,SAAS,CAAC,CACrB;SACF,CAAC,CAAC,IAAI,CACL,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EAC9F,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,KAAI;;AAE3B,YAAA,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;gBAC/D,OAAO;oBACL,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;iBACtF,CAAC;AACH,aAAA;AACD,YAAA,MAAM,SAAS,GACb,SAAS,CAAC,MAOX;AACE,iBAAA,GAAG,CAAC,CAAC,KAAK,KACT,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;gBAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,MAAM,EAAE,OAAO,CAAC,GAAG;gBACnB,KAAK,EAAE,OAAO,CAAC,KAAK;AACrB,aAAA,CAAC,CAAC,CACJ;AACA,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SAC5D,CAAC,EACF,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAClD,KAAK,EAAE,CACR,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;AAE5F,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACjC,YAAA,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,cAAc;AACpB,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAI;YAC9C,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtF,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YACtG,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC/C,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,GAAG,+BAA+B,CAC7E,CAAC;AACF,YAAA,OAAO,SAAS,CACd;AACE,gBAAA,OAAO,EAAE,iDAAiD;AAC1D,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC7B,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,KAAK,OAAO,GAAG,oBAAoB,GAAG,CAAC,CAAC;AACnE,gBAAA,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE;AAC9C,gBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AACzD,gBAAA,KAAK,EAAE;AACL,oBAAA;AACE,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAA8C;AACnF,4BAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,4BAAA,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AAC7C,4BAAA,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE;AAC3C,yBAAA;AACD,wBAAA,QAAQ,EAAE;4BACR,CAAC,EAAE,CAAC,UAAU;AACZ,kCAAE;AACE,oCAAA,KAAK,EAAE,KAAK;AACZ,oCAAA,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;AAC7B,oCAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;AAC7B,oCAAA,QAAQ,EACN,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW;AAClF,0CAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;AACjC,0CAAE,SAAS;AACf,oCAAA,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AACjD,oCAAA,IAAI,EAAE;;AAEJ,wCAAA,IAAI,EAAE,KAAK;wCACX,GAAG,8BAA8B,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;wCACnE,SAAS,EAAE,CACT,eAAA,EAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;AAC3C,8CAAE,8CAA8C;8CAC9C,2BACN,CAAA,GAAA,EACE,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;AAC3C,8CAAE,8CAA8C;8CAC9C,aACN,CAAE,CAAA;AACH,qCAAA;AACD,oCAAA,KAAK,EAAE;;AAEL,wCAAA,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;;AAE/B,qCAAA;AACF,iCAAA;AACH,kCAAE,SAAS;4BACb,CAAC,EAAE,CAAC,UAAU;AACZ,kCAAE;AACE,oCAAA,KAAK,EAAE,OAAO;AACd,oCAAA,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;AAC7B,oCAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;AAC7B,oCAAA,IAAI,EAAE;wCACJ,GAAG,8BAA8B,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;AACnE,wCAAA,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,qCAAA;AACD,oCAAA,KAAK,EAAE;wCACL,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK;AAC3F,qCAAA;AACD,oCAAA,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACpC,iCAAA;AACH,kCAAE,SAAS;4BACb,KAAK,EAAE,UAAU,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,SAAS;AACjF,4BAAA,KAAK,EAAE;AACL,gCAAA,KAAK,EAAE,WAAW;gCAClB,KAAK,EAAE,CAAC,UAAU,GAAG,QAAQ,GAAG,KAAK;AACrC,gCAAA,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;AAC5B,gCAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,SAAS;AACnG,6BAAA;AACD,4BAAA,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS;AACrE,4BAAA,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;kCAC1B,OAAO,CAAC,OAAO;AACf,sCAAE;AACE,wCAAA;AACE,4CAAA,KAAK,EAAE,KAAK;AACZ,4CAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;AAC7B,4CAAA,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;4CAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,UAAU,GAAG,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;AACnF,yCAAA;AACD,wCAAA,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;AAChF,wCAAA;AACE,4CAAA,KAAK,EAAE,QAAQ;AACf,4CAAA,KAAK,EAAE,WAAW;AAClB,4CAAA,IAAI,EAAE,SAAS;AAChB,yCAAA;AACF,qCAAA;AACH,sCAAE;AACE,wCAAA;AACE,4CAAA,KAAK,EAAE,KAAK;AACZ,4CAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;AAC7B,4CAAA,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;4CAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,UAAU,GAAG,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;AACnF,yCAAA;AACD,wCAAA,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;AACjF,qCAAA;AACL,kCAAE,SAAS;AACd,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,MAAM,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAClC,aAAA,EACR,OAAO,CAAC,cAAc,CACvB,CAAC;SACH,CAAC,CACH,CAAC;KACH;IAED,eAAe,GAAA;QACb,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAI;YACzE,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;;AAEtB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/D,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,QAAQ;oBAClB,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,gCAAgC,CAAQ;oBAC1F,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,oCAAoC,CAAQ;iBACnG,CAAC;AACC,qBAAA,IAAI,CAAC,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3C,qBAAA,KAAK,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D,aAAA;AAAM,iBAAA;AACL,gBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;AAC7C,aAAA;SACF,CAAC,CACH,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;IAED,mBAAmB,CAAC,IAAgB,EAAE,IAAa,EAAA;QACjD,IAAI,OAAO,GAAG,IAAI,MAAM,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE;YACnC,OAAO,QAAQ,CAAC,OAAO,CAAC;AACzB,SAAA;AAED,QAAA,QAAQ,IAAI;YACV,KAAK,SAAS,CAAC,OAAO,CAAC;YACvB,KAAK,SAAS,CAAC,OAAO,CAAC;YACvB,KAAK,SAAS,CAAC,IAAI;gBACjB,OAAO,QAAQ,CAAC,YAAY,CAAC;YAC/B,KAAK,SAAS,CAAC,OAAO;gBACpB,OAAO,QAAQ,CAAC,QAAQ,CAAC;YAC3B,KAAK,SAAS,CAAC,OAAO,CAAC;YACvB,KAAK,SAAS,CAAC,MAAM;gBACnB,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,YAAA;gBACE,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC3B,SAAA;KACF;IAED,OAAO,OAAO,CAAC,IAAe,EAAA;AAC5B,QAAA,QAAQ,IAAI;YACV,KAAK,SAAS,CAAC,OAAO,CAAC;YACvB,KAAK,SAAS,CAAC,IAAI;AACjB,gBAAA,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YAC5B,KAAK,SAAS,CAAC,OAAO,CAAC;YACvB,KAAK,SAAS,CAAC,OAAO,CAAC;YACvB,KAAK,SAAS,CAAC,OAAO,CAAC;YACvB,KAAK,SAAS,CAAC,MAAM,CAAC;AACtB,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC;AACb,SAAA;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,YAAA,QAAQ,EAAE;gBACR,GAAG,IAAI,CAAC,QAAQ;gBAChB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE;AAC7C,aAAA;AACF,SAAA,CAAC,CAAC;KACJ;IAED,YAAY,GAAA;AACT,QAAA,IAAI,CAAC,KAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC/C;IAED,QAAQ,GAAA;AACL,QAAA,IAAI,CAAC,SAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACnD;AAEO,IAAA,QAAQ,CAAC,OAAqC,EAAA;QACpD,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC;KAChH;AAED,IAAA,gBAAgB,CAAC,MAAc,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;AAC5D,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,UAAU,CAAC,MAAiB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;AAC3D,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1D,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,oBAAA,OAAO,EAAE,SAAS;AACnB,iBAAA,CAAC,CAAC;AACJ,aAAA;YACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC1B,aAAA;AACF,SAAA;KACF;AAED,IAAA,eAAe,CAAC,MAAc,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;AAChE,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,eAAe,CAAC,MAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;AACtE,aAAA,CAAC,CAAC;YACH,IAAI,MAAM,KAAK,SAAS,CAAC,KAAK,IAAI,MAAM,KAAK,SAAS,CAAC,QAAQ,EAAE;AAC/D,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,oBAAA,QAAQ,EAAE;AACR,wBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ;wBACpC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,8BAA8B,GAAG,MAAM,CAAC;AAC7E,wBAAA,SAAS,EAAE,SAAS;AACrB,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AACD,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9D,SAAA;KACF;AAED,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;AACtE,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;iBACtB,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC;AAChC,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;AAClC,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,gBAAgB,EAAE;AAC1F,aAAA,CAAC,CAAC;YAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;AAE/E,YAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/D,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,MAAc,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;AAClE,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,cAAc,CAAC,MAAW,EAAA;AACxB,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;AACtE,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;iBACtB,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC;AAChC,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;AAClC,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,gBAAgB,EAAE;AAC1F,aAAA,CAAC,CAAC;YAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;AAChF,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,MAAW,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;AAClE,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,MAAW,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;AAClE,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,MAAW,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;AAClE,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,MAAM,EAAE;gBACV,IACE,IAAI,CAAC,iBAAiB,EAAE,IAAI,KAAK,SAAS,CAAC,OAAO;AAClD,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK;oBACxC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAChD;AACA,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,wBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,wBAAA,QAAQ,EAAE;AACR,4BAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ;AACpC,4BAAA,KAAK,EAAE;AACL,gCAAA,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC;AACrD,gCAAA,MAAM,EAAE,KAAK;AACb,gCAAA,KAAK,EAAE,KAAK;AACZ,gCAAA,WAAW,EAAE,KAAK;AACnB,6BAAA;AACF,yBAAA;AACF,qBAAA,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,wBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;wBAC1B,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;AACrG,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,oBAAA,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;AACrE,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;KACF;AAED,IAAA,WAAW,CAAC,MAAW,EAAA;AACrB,QAAA,IACE,IAAI,CAAC,YAAY,CAAC,KAAK;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK;YACtC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EACnD;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ;AACpC,oBAAA,KAAK,EAAE;wBACL,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK;AAC1C,wBAAA,EAAE,EAAE,MAAM;AACX,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,MAAW,EAAA;AAC3B,QAAA,IACE,IAAI,CAAC,YAAY,CAAC,KAAK;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK;YACtC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EACnD;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ;AACpC,oBAAA,KAAK,EAAE;wBACL,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK;AAC1C,wBAAA,MAAM,EAAE,MAAM;AACf,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,MAAW,EAAA;AAC1B,QAAA,IACE,IAAI,CAAC,YAAY,CAAC,KAAK;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK;YACtC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EACnD;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ;AACpC,oBAAA,KAAK,EAAE;wBACL,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK;wBAC1C,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM;AAC/B,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,eAAe,CAAC,MAAW,EAAA;AACzB,QAAA,IACE,IAAI,CAAC,YAAY,CAAC,KAAK;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK;YACtC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAClD;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ;AACnC,oBAAA,KAAK,EAAE;wBACL,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK;AACzC,wBAAA,QAAQ,EAAE,MAAM;AACjB,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,YAAY,CAAC,MAAW,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;AAC5D,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;AAC9D,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;oBAC1B,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACrG,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,oBAAA,OAAO,EAAE,SAAS;AACnB,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;KACF;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE;AAC5F,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,OAAO,EAAE;AACP,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO;AACnC,oBAAA,SAAS,EAAE,MAAM;AAClB,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,MAAW,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE;AAC9D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,OAAO,EAAE;oBACP,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS;AACrD,oBAAA,KAAK,EAAE,MAAM;AACd,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,YAAY,CAAC,IAAS,EAAA;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;cACrD,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;cAC7D,EAAE,CAAC;KACR;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;KACnE;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1B,gBAAA,KAAK,EAAE;AACL,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK;AACjC,oBAAA,OAAO,EAAE,MAAM;AAChB,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;IAEQ,OAAO,GAAA;QACd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;AACxF,SAAC,CAAC,CAAC;KACJ;8GAlxBU,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,KAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,wLC7C3C,4rbAoUA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,KAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,oCAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDvRa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;+BACE,6BAA6B,EAAA,QAAA,EAAA,4rbAAA,EAAA,CAAA;sLAIpB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM,CAAA;;;AE9CZ,MAAM,cAAc,GAAG;AAC5B,IAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE;AACL,gBAAA,YAAY,EAAE;AACZ,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,SAAS,EAAE,GAAG;oBACd,QAAQ,EAAE,CAAC,CAAC,CAAC;AACb,oBAAA,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AACpB,iBAAA;AACD,gBAAA,gBAAgB,EAAE;AAChB,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACrB,oBAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;AACpF,oBAAA,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;oBAC5D,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;oBAChF,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACtF,iBAAA;AACD,gBAAA,SAAS,EAAE;AACT,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,WAAW,EAAE,mBAAmB;AAChC,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,EAAE,EAAE,gBAAgB;AACpB,oBAAA,EAAE,EAAE,gBAAgB;AACpB,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,OAAO,EAAE,SAAS;AAClB,oBAAA,KAAK,EAAE,WAAW;AACnB,iBAAA;AACD,gBAAA,gBAAgB,EAAE,4CAA4C;AAC9D,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,SAAS,EAAE;AACT,oBAAA,cAAc,EAAE,MAAM;AACtB,oBAAA,4BAA4B,EAAE,6BAA6B;AAC3D,oBAAA,aAAa,EAAE,KAAK;AACpB,oBAAA,aAAa,EAAE,UAAU;AACzB,oBAAA,cAAc,EAAE,OAAO;AACvB,oBAAA,kBAAkB,EAAE,mBAAmB;AACvC,oBAAA,WAAW,EAAE,OAAO;AACpB,oBAAA,eAAe,EAAE,WAAW;AAC5B,oBAAA,eAAe,EAAE,QAAQ;AAC1B,iBAAA;AACD,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,SAAS,EAAE,YAAY;AACvB,gBAAA,MAAM,EAAE,mBAAmB;AAC3B,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,GAAG,EAAE,kBAAkB;AACvB,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,YAAY,EAAE,eAAe;AAC7B,gBAAA,MAAM,EAAE,8CAA8C;AACtD,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,MAAM,EAAE,gBAAgB;AACxB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,MAAM,EAAE,wBAAwB;AAChC,gBAAA,WAAW,EAAE,uBAAuB;AACpC,gBAAA,MAAM,EAAE;AACN,oBAAA,MAAM,EAAE,cAAc;AACtB,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,KAAK,EAAE,eAAe;AACtB,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,UAAU,EAAE,WAAW;AACvB,oBAAA,SAAS,EAAE,qBAAqB;AAChC,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,MAAM,EAAE,qBAAqB;AAC7B,oBAAA,SAAS,EAAE,WAAW;AACtB,oBAAA,UAAU,EAAE,yBAAyB;AACrC,oBAAA,WAAW,EAAE,6BAA6B;AAC1C,oBAAA,WAAW,EAAE,6BAA6B;AAC1C,oBAAA,SAAS,EAAE,eAAe;AAC3B,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,OAAO,EAAE,SAAS;AAClB,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,2BAA2B,EAAE,gFAAgF;AAC7G,YAAA,6BAA6B,EAC3B,4FAA4F;AAC/F,SAAA;AACF,KAAA;CACF;;ACxGM,MAAM,cAAc,GAAG;AAC5B,IAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE;AACL,gBAAA,YAAY,EAAE;AACZ,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,SAAS,EAAE,GAAG;oBACd,QAAQ,EAAE,CAAC,CAAC,CAAC;AACb,oBAAA,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AACpB,iBAAA;AACD,gBAAA,gBAAgB,EAAE;AAChB,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACrB,oBAAA,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;AAC/E,oBAAA,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oBACnE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;oBAChF,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACtF,iBAAA;AACD,gBAAA,SAAS,EAAE;AACT,oBAAA,IAAI,EAAE,sBAAsB;AAC5B,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,GAAG,EAAE,OAAO;AACZ,oBAAA,WAAW,EAAE,6BAA6B;AAC1C,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,EAAE,EAAE,oBAAoB;AACxB,oBAAA,EAAE,EAAE,oBAAoB;AACxB,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,OAAO,EAAE,aAAa;AACtB,oBAAA,KAAK,EAAE,WAAW;AACnB,iBAAA;AACD,gBAAA,gBAAgB,EAAE,mEAAmE;AACrF,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,SAAS,EAAE;AACT,oBAAA,cAAc,EAAE,MAAM;AACtB,oBAAA,4BAA4B,EAAE,6BAA6B;AAC3D,oBAAA,aAAa,EAAE,QAAQ;AACvB,oBAAA,aAAa,EAAE,YAAY;AAC3B,oBAAA,cAAc,EAAE,QAAQ;AACxB,oBAAA,kBAAkB,EAAE,qBAAqB;AACzC,oBAAA,WAAW,EAAE,kBAAkB;AAC/B,oBAAA,eAAe,EAAE,aAAa;AAC9B,oBAAA,eAAe,EAAE,QAAQ;AAC1B,iBAAA;AACD,gBAAA,SAAS,EAAE,gCAAgC;AAC3C,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,SAAS,EAAE,sBAAsB;AACjC,gBAAA,MAAM,EAAE,iBAAiB;AACzB,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,GAAG,EAAE,0BAA0B;AAC/B,gBAAA,IAAI,EAAE,0BAA0B;AAChC,gBAAA,YAAY,EAAE,qBAAqB;AACnC,gBAAA,MAAM,EAAE,4DAA4D;AACpE,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,SAAS,EAAE,0BAA0B;AACrC,gBAAA,WAAW,EAAE,mBAAmB;AAChC,gBAAA,MAAM,EAAE,qBAAqB;AAC7B,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,MAAM,EAAE,gCAAgC;AACxC,gBAAA,WAAW,EAAE,0BAA0B;AACvC,gBAAA,MAAM,EAAE;AACN,oBAAA,MAAM,EAAE,gBAAgB;AACxB,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,KAAK,EAAE,mBAAmB;AAC1B,oBAAA,OAAO,EAAE,mBAAmB;AAC5B,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,OAAO,EAAE,mBAAmB;AAC5B,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,SAAS,EAAE,yBAAyB;AACpC,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,MAAM,EAAE,yBAAyB;AACjC,oBAAA,SAAS,EAAE,aAAa;AACxB,oBAAA,UAAU,EAAE,4BAA4B;AACxC,oBAAA,WAAW,EAAE,gCAAgC;AAC7C,oBAAA,WAAW,EAAE,gCAAgC;AAC7C,oBAAA,SAAS,EAAE,sBAAsB;AAClC,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,GAAG,EAAE,MAAM;AACX,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,IAAI,EAAE,OAAO;AACd,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,2BAA2B,EACzB,iGAAiG;AACnG,YAAA,6BAA6B,EAC3B,qGAAqG;AACxG,SAAA;AACF,KAAA;CACF;;AC3DK,MAAO,2BAA4B,SAAQ,gBAAgB,CAAA;AAC/D,IAAA,WAAA,CAAoB,mBAAmC,EAAA;AACrD,QAAA,KAAK,EAAE,CAAC;QADU,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAgB;QAErD,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,yBAAyB,EAAE,cAAc,CAAC,CAAC;QACxF,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,yBAAyB,EAAE,cAAc,CAAC,CAAC;KACzF;IAEQ,YAAY,GAAA;AACnB,QAAA,OAAO,8BAA2D,CAAC;KACpE;8GATU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAnBvB,YAAA,EAAA,CAAA,8BAA8B,EAAE,oCAAoC,aAEjF,YAAY;YACZ,WAAW;YACX,aAAa;YACb,aAAa;YACb,kBAAkB;YAClB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,aAAa;YACb,cAAc;AACd,YAAA,aAAa,aAEL,8BAA8B,CAAA,EAAA,CAAA,CAAA,EAAA;AAG7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAF3B,SAAA,EAAA,CAAC,qBAAqB,CAAC,YAfhC,YAAY;YACZ,WAAW;YACX,aAAa;YACb,aAAa;YACb,kBAAkB;YAClB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,aAAa;YACb,cAAc;YACd,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKJ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBApBvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,8BAA8B,EAAE,oCAAoC,CAAC;AACpF,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,aAAa;wBACb,aAAa;wBACb,kBAAkB;wBAClB,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,aAAa;AACd,qBAAA;oBACD,OAAO,EAAE,CAAC,8BAA8B,CAAC;oBACzC,SAAS,EAAE,CAAC,qBAAqB,CAAC;AACnC,iBAAA,CAAA;;;AC5CD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"provoly-dashboard-widgets-widget-aggregated-chart.mjs","sources":["../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/style/css.component.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.html","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/i18n/en.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/i18n/fr.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/widget-aggregated-chart.module.ts","../../../../projects/provoly/dashboard/widgets/widget-aggregated-chart/provoly-dashboard-widgets-widget-aggregated-chart.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-widget-aggregated-chart-css',\n template: '',\n styleUrls: ['./_o-widget-chart.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryWidgetAggregatedChartCssComponent {}\n","import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport {\n Attribute,\n ChartAggregatedWidgetOptions,\n Class,\n ClassSelectors,\n Dataset,\n DataWidgetComponent,\n Field,\n FieldSelectors,\n FieldType,\n GraphType,\n MonoClassSearchPayload,\n MultiClassSearchPayload,\n NamedQuery,\n NamedQueryTypes,\n Operation,\n PryAggregationService,\n PryI18nService,\n ValueType,\n VegaColorType,\n VegaType,\n WIDGET_HEADER_HEIGHT\n} from '@provoly/dashboard';\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n filter,\n fromEvent,\n map,\n Observable,\n share,\n startWith,\n Subject,\n switchMap,\n withLatestFrom\n} from 'rxjs';\nimport { View } from 'vega';\nimport embed, { vega } from 'vega-embed';\nimport { mergeDeep, TopLevelSpec } from 'vega-lite';\nimport { fontConfig } from 'vega-lite/build/src/config';\n\nvega.scheme('KO/W/OK', ['#C04D3F', '#FD9843', '#9ABE29']);\n\n@Component({\n selector: 'pry-widget-aggregated-chart',\n templateUrl: './widget-aggregated-chart.component.html'\n})\nexport class WidgetAggregatedChartComponent extends DataWidgetComponent implements AfterViewInit {\n @ViewChild('vega') vega!: ElementRef;\n options$: Observable<ChartAggregatedWidgetOptions>;\n optionsCopy$ = new BehaviorSubject<ChartAggregatedWidgetOptions | null>(null);\n view?: View;\n trigger$ = new Subject<void>();\n vegaLiteSpec$: Observable<TopLevelSpec>;\n fields$: Observable<Field[]>;\n classes$: Observable<Class[]>;\n attributeTypes$: Observable<{\n ordinate: { vegaType: VegaType; fieldType: any; name: string };\n abscissa: { vegaType: VegaType; fieldType: any; name: string };\n groupBy: { vegaType?: VegaType; fieldType?: any; name: string };\n }>;\n aggregatedValues$: Observable<{ data: any; operation: any }>;\n WIDGET_HEADER_HEIGHT = WIDGET_HEADER_HEIGHT;\n GraphType = GraphType;\n Operation = Operation;\n isChartValid$: Observable<boolean>;\n typeOptions: { id: string; label: string }[] = [];\n operations$: Observable<{ id: string; label: string }[]>;\n abscissaAttributes$: Observable<Attribute[]>;\n classes: Class[] = [];\n fields: Field[] = [];\n ordinateAttributes$: Observable<Attribute[]>;\n triggerOrdinateAttributes$ = new Subject<void>();\n copyAbscissaField?: Field;\n copyOrdinateField?: Field;\n schemes: { id: string }[] = [];\n noData$: Observable<boolean>;\n sortActive? = 'name';\n sortDirection? = 'asc';\n noAggregationData$: Observable<boolean>;\n allowedClasses$: Observable<Class[]>;\n\n constructor(\n store: Store<any>,\n private translateService: PryI18nService,\n el: ElementRef,\n private aggregationService: PryAggregationService\n ) {\n super(store, el);\n this.schemes = Object.values(VegaColorType).map((id) => ({ id }));\n this.typeOptions = Object.values(GraphType)\n .map((v) => ({\n id: v,\n label: this.translateService.instant('@pry.widget.chart.graphType.' + v)\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\n this.options$ = this.manifest$.pipe(\n map(\n (manifest) =>\n mergeDeep(\n {\n graph: { type: GraphType.BAR, tooltip: true, legend: false },\n abscissa: { keep0: true },\n ordinate: { keep0: true }\n } as ChartAggregatedWidgetOptions,\n (manifest.options ?? {}) as ChartAggregatedWidgetOptions\n ) as ChartAggregatedWidgetOptions\n )\n );\n this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {\n this.optionsCopy$.next(JSON.parse(JSON.stringify(options)));\n });\n this.fields$ = this.store.select(FieldSelectors.fields);\n this.classes$ = this.store.select(ClassSelectors.classes);\n\n this.operations$ = combineLatest([this.resultSet$, this.classes$, this.fields$]).pipe(\n map(([rs, classes, fields]) =>\n classes\n .filter((clazz) => Object.keys(rs.items).includes(clazz.id))\n .map((clazz) => clazz.attributes)\n .map((attrs) =>\n attrs.filter((attr) => {\n const field = fields.find((field) => {\n return field.id === attr.field;\n });\n return !!field && [FieldType.INTEGER, FieldType.DECIMAL, FieldType.LONG].includes(field.type);\n })\n )\n .reduce((a, b) => [...a, ...b], [])\n .filter((attr) => !!attr)\n ),\n map((attributes) =>\n (attributes.length > 0\n ? Object.values(Operation).filter((operation) => operation !== Operation.EXTENT)\n : [Operation.COUNT, Operation.DISTINCT, Operation.NONE]\n )\n .map((v) => ({\n id: v,\n label: this.translateService.instant('@pry.widget.chart.operation.' + v)\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n )\n );\n\n this.subscriptions.add(this.fields$.subscribe((fields) => (this.fields = fields)));\n this.subscriptions.add(this.classes$.subscribe((classes) => (this.classes = classes)));\n\n this.allowedClasses$ = combineLatest([this.classes$, this.usedDatasources$]).pipe(\n map(([classes, datasources]) => {\n const hasFullText = datasources\n .map((ds) => ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MULTI_CLASS)\n .reduce((p, c) => p || c, false);\n\n const multiClassDatasourcesClasses = datasources\n .filter((ds) => ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MULTI_CLASS)\n .map((multiDs) => (multiDs as NamedQuery).request as MultiClassSearchPayload)\n .map((payload) => payload.oClasses);\n\n const hasMultiNoClass = multiClassDatasourcesClasses.includes(undefined);\n\n const multiClasses = (\n multiClassDatasourcesClasses.filter((classes) => !!classes) as unknown as string[]\n ).reduce((p, c) => [...p, ...c], [] as string[]);\n\n const singleClasses = datasources\n .filter(\n (ds) =>\n (ds.sourceType === 'namedQuery' && ds.request.type === NamedQueryTypes.MONO_CLASS) ||\n ds.sourceType === 'dataset'\n )\n .map(\n (singleDs) =>\n (singleDs as Dataset).oClass ?? ((singleDs as NamedQuery).request as MonoClassSearchPayload).oClass\n );\n\n return classes.filter(\n (clazz) =>\n hasFullText || hasMultiNoClass || multiClasses.includes(clazz.id) || singleClasses.includes(clazz.id)\n );\n })\n );\n\n this.abscissaAttributes$ = combineLatest([this.fields$, this.allowedClasses$, this.optionsCopy$]).pipe(\n map(([fields, allowedClasses, optionCopy]) =>\n allowedClasses\n .map((clazz) => clazz.attributes)\n .map((attrs) =>\n attrs.filter((attr) => {\n const field = fields.find((field) => {\n return field.id === attr.field;\n });\n return (\n !!field &&\n field.type !== FieldType.RAW &&\n field.type !== FieldType.STRING &&\n (optionCopy?.graph.type !== GraphType.HISTOGRAM || field.type !== FieldType.KEYWORD)\n );\n })\n )\n .reduce((a, b) => [...a, ...b], [])\n )\n );\n\n this.ordinateAttributes$ = combineLatest([\n this.fields$,\n this.allowedClasses$,\n this.triggerOrdinateAttributes$\n ]).pipe(\n map(([fields, allowedClasses]) =>\n allowedClasses\n .map((clazz) => clazz.attributes)\n .map((attrs) =>\n attrs.filter((attr) => {\n const field = fields.find((field) => {\n return field.id === attr.field;\n });\n if (\n this.optionsCopy$.value &&\n [\n Operation.MAX,\n Operation.MIN,\n Operation.SUM,\n Operation.Q1,\n Operation.Q3,\n Operation.AVERAGE,\n Operation.MEDIAN,\n Operation.NONE\n ].includes(this.optionsCopy$.value.ordinate.operation)\n ) {\n return (\n !!field &&\n [FieldType.INTEGER, FieldType.INSTANT, FieldType.LONG, FieldType.DECIMAL].includes(field.type)\n );\n }\n return !!field && field.type !== FieldType.RAW && field.type !== FieldType.STRING;\n })\n )\n .reduce((a, b) => [...a, ...b], [])\n )\n );\n\n this.isChartValid$ = combineLatest([this.options$, this.abscissaAttributes$, this.ordinateAttributes$]).pipe(\n map(([options, abscissaAttrs, ordinateAttrs]) => {\n return (\n !!options.abscissa.attribute &&\n abscissaAttrs.map((attr) => attr.id).includes(options.abscissa.attribute) &&\n (options.ordinate.attribute\n ? ordinateAttrs.map((attr) => attr.id).includes(options.ordinate.attribute)\n : true)\n );\n })\n );\n\n this.attributeTypes$ = combineLatest([this.options$, this.fields$, this.classes$]).pipe(\n filter(([options, fields, classes]) => !!options.abscissa && !!options.ordinate),\n map(([options, fields, classes]) => {\n const abscissa = classes\n .map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa.attribute))\n .find((attr) => !!attr);\n const ordinate = classes\n .map((clazz) => clazz.attributes.find((attr) => attr.id === options.ordinate.attribute))\n .find((attr) => !!attr);\n const groupBy = classes\n .map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))\n .find((attr) => !!attr);\n const abscissaFieldType = fields.find((field) => field.id === abscissa?.field)?.type ?? FieldType.STRING;\n const ordinateFieldType = fields.find((field) => field.id === ordinate?.field)?.type ?? FieldType.STRING;\n const groupByFieldType = fields.find((field) => field.id === groupBy?.field)?.type ?? FieldType.STRING;\n return {\n abscissa: {\n fieldType: abscissaFieldType,\n vegaType: this.translateToVegaType(abscissaFieldType, abscissa?.name ?? ''),\n name: abscissa?.name ?? ''\n },\n ordinate: {\n fieldType: ordinateFieldType,\n vegaType:\n options.ordinate.operation === Operation.COUNT || options.ordinate.operation === Operation.DISTINCT\n ? VegaType.QUANTITATIVE\n : this.translateToVegaType(ordinateFieldType, ordinate?.name ?? ''),\n name: ordinate?.name ?? ''\n },\n groupBy: {\n fieldType: groupByFieldType,\n vegaType: this.translateToVegaType(groupByFieldType, groupBy?.name),\n name: groupBy?.name ?? ''\n }\n };\n })\n );\n\n this.aggregatedValues$ = combineLatest([\n this.datasourceIds$,\n this.options$,\n combineLatest([fromEvent(window, 'datasourceRefresh'), this.datasourceIds$]).pipe(\n filter(([event, datasources]) => datasources.includes((event as CustomEvent).detail)),\n startWith(undefined)\n )\n ]).pipe(\n debounceTime(100),\n switchMap(([datasources, options]) => this.aggregationService.aggregate(datasources, options)),\n withLatestFrom(this.options$),\n map(([aggregate, options]) => {\n // @ts-ignore\n if (aggregate.values.length > 0 && !aggregate.values[0].groupBy) {\n return {\n operation: aggregate.operation,\n data: aggregate.values.map((value) => ({ ...value, series: options.ordinate.label }))\n };\n }\n const flattened = (\n aggregate.values as {\n key: ValueType;\n groupBy: {\n key: ValueType;\n value: ValueType;\n }[];\n }[]\n )\n .map((value) =>\n value.groupBy.map((groupBy) => ({\n key: value.key,\n series: groupBy.key,\n value: groupBy.value\n }))\n )\n .reduce((a, b) => [...a, ...b], []);\n return { operation: aggregate.operation, data: flattened };\n }),\n startWith({ operation: Operation.NONE, data: [] }),\n share()\n );\n\n this.noData$ = this.datasourceIds$.pipe(map((ids) => ids.length === 0));\n this.noAggregationData$ = this.aggregatedValues$.pipe(map(({ data }) => data.length === 0));\n\n this.vegaLiteSpec$ = combineLatest([\n this.options$,\n this.attributeTypes$,\n this.aggregatedValues$,\n this.widgetSize$.pipe(debounceTime(100)),\n this.displayHeader$\n ]).pipe(\n map(([options, types, values, size, display]) => {\n const isCircular = [GraphType.CIRCULAR, GraphType.DONUT].includes(options.graph.type);\n const stacked = options.graph.type.startsWith('bar') ? !options.graph.stacked : options.graph.stacked;\n const legendTitle = this.translateService.instant(\n options.groupBy ? types.groupBy.name ?? '' : '@pry.widget.chart.legendLabel'\n );\n return mergeDeep(\n {\n $schema: 'https://vega.github.io/schema/vega-lite/v5.json',\n title: this.getTitle(options),\n width: 'container',\n height: (size.height ?? 100) - (display ? WIDGET_HEADER_HEIGHT : 0),\n padding: 10,\n autosize: { type: 'fit', contains: 'padding' },\n data: { values: JSON.parse(JSON.stringify(values.data)) },\n layer: [\n {\n mark: {\n type: options.graph.type.split('-')[0] as 'arc' | 'line' | 'point' | 'bar' | 'area',\n point: options.graph.type.indexOf('point') >= 0,\n line: options.graph.type.indexOf('line') >= 0,\n innerRadius: options.graph.donutSize ?? 30\n },\n encoding: {\n x: !isCircular\n ? {\n field: 'key',\n title: options.abscissa.label,\n type: types.abscissa.vegaType,\n timeUnit:\n types.abscissa.vegaType === VegaType.TEMPORAL && options.abscissa.limit?.isTimeLimit\n ? options.abscissa.limit.interval\n : undefined,\n bin: options.graph.type.indexOf('histogram') >= 0,\n axis: {\n //format: types.abscissa.vegaType === VegaType.TEMPORAL ? '%Y-%B-%dT%H:%M:%S' : undefined,\n grid: false,\n ...WidgetAggregatedChartComponent.minTick(types.abscissa.fieldType),\n labelExpr: `height < 300 ? ${\n types.abscissa.vegaType === VegaType.TEMPORAL\n ? \"timeFormat(datum.value, '%Y-%B-%dT%H:%M:%S')\"\n : 'truncate(datum.value, 10)'\n } : ${\n types.abscissa.vegaType === VegaType.TEMPORAL\n ? \"timeFormat(datum.value, '%Y-%B-%dT%H:%M:%S')\"\n : 'datum.value'\n }`\n },\n scale: {\n // Force a false value here so that vega understands properly\n zero: !!options.abscissa.keep0\n //type: WidgetChartComponent.isTimeUnitUTC(variables[0]) ? 'utc' : undefined\n }\n }\n : undefined,\n y: !isCircular\n ? {\n field: 'value',\n title: options.ordinate.label,\n type: types.ordinate.vegaType,\n axis: {\n ...WidgetAggregatedChartComponent.minTick(types.ordinate.fieldType),\n ...this.setTickCount(values.data)\n },\n scale: {\n zero: types.ordinate.vegaType === VegaType.QUANTITATIVE ? !!options.ordinate.keep0 : false\n },\n ...(stacked ? { stack: true } : {})\n }\n : undefined,\n theta: isCircular ? { field: 'value', type: types.ordinate.vegaType } : undefined,\n color: {\n title: legendTitle,\n field: !isCircular ? 'series' : 'key',\n legend: options.graph.legend,\n scale: options.graph.legend ? { scheme: options.groupBy?.color ?? this.schemes[0].id } : undefined\n },\n xOffset: stacked && options.groupBy ? { field: 'series' } : undefined,\n tooltip: options.graph.tooltip\n ? options.groupBy\n ? [\n {\n field: 'key',\n type: types.abscissa.vegaType,\n title: options.abscissa.label,\n ...(types.abscissa.vegaType === 'temporal' ? { format: '%Y-%B-%dT%H:%M:%S' } : {})\n },\n { field: 'value', type: types.ordinate.vegaType, title: options.ordinate.label },\n {\n field: 'series',\n title: legendTitle,\n type: 'nominal'\n }\n ]\n : [\n {\n field: 'key',\n type: types.abscissa.vegaType,\n title: options.abscissa.label,\n ...(types.abscissa.vegaType === 'temporal' ? { format: '%Y-%B-%dT%H:%M:%S' } : {})\n },\n { field: 'value', type: types.ordinate.vegaType, title: options.ordinate.label }\n ]\n : undefined\n }\n }\n ],\n config: fontConfig('Ubuntu, sans-serif')\n } as any,\n options.additionalSpec\n );\n })\n );\n }\n\n ngAfterViewInit() {\n this.subscriptions.add(\n combineLatest([this.vegaLiteSpec$, this.trigger$]).subscribe(([spec, _]) => {\n if (this.vega) {\n this.view?.finalize();\n //console.log(spec);\n embed(this.vega.nativeElement, JSON.parse(JSON.stringify(spec)), {\n actions: false,\n renderer: 'canvas',\n formatLocale: this.translateService.instantObject('@pry.widget.chart.numberLocale') as any,\n timeFormatLocale: this.translateService.instantObject('@pry.widget.chart.timeFormatLocale') as any\n })\n .then((result) => (this.view = result.view))\n .catch((err) => console.error('Cannot display chart', err));\n } else {\n setTimeout(() => this.trigger$.next(), 100);\n }\n })\n );\n this.trigger$.next();\n }\n\n translateToVegaType(type?: FieldType, name?: string): VegaType {\n let idRegex = new RegExp(/_id|id_|_ID|ID_|_Id|Id_/, 'g');\n if (idRegex.test(name ?? '-------')) {\n return VegaType.ORDINAL;\n }\n\n switch (type) {\n case FieldType.DECIMAL:\n case FieldType.INTEGER:\n case FieldType.LONG:\n return VegaType.QUANTITATIVE;\n case FieldType.INSTANT:\n return VegaType.TEMPORAL;\n case FieldType.KEYWORD:\n case FieldType.STRING:\n return VegaType.NOMINAL;\n default:\n return VegaType.NOMINAL;\n }\n }\n\n static minTick(type: FieldType): { tickMinStep: number } | {} {\n switch (type) {\n case FieldType.INTEGER:\n case FieldType.LONG:\n return { tickMinStep: 1 };\n case FieldType.DECIMAL:\n case FieldType.INSTANT:\n case FieldType.KEYWORD:\n case FieldType.STRING:\n default:\n return {};\n }\n }\n\n emitManifest() {\n this.manifestModified.emit({\n widgetIndex: this.widgetIndex,\n manifest: {\n ...this.manifest,\n options: { ...this.optionsCopy$.getValue() }\n }\n });\n }\n\n openSettings() {\n (this.open$ as Subject<void>).next(undefined);\n }\n\n openData() {\n (this.openData$ as Subject<void>).next(undefined);\n }\n\n private getTitle(options: ChartAggregatedWidgetOptions) {\n return options.graph?.title ?? (options.abscissa.label ?? 'key') + ' / ' + (options.ordinate.label ?? 'value');\n }\n\n changeChartTitle($event: string) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value?.graph, title: $event }\n });\n }\n }\n\n changeType($event: GraphType) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value?.graph, type: $event }\n });\n if ([GraphType.CIRCULAR, GraphType.DONUT].includes($event)) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: undefined\n });\n }\n if ([GraphType.HISTOGRAM].includes($event)) {\n this.limitElements(true);\n }\n }\n }\n\n changeDonutSize($event: number) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value?.graph, donutSize: $event }\n });\n }\n }\n\n changeOperation($event: Operation) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, operation: $event }\n });\n if ($event === Operation.COUNT || $event === Operation.DISTINCT) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: {\n ...this.optionsCopy$.value?.ordinate,\n label: this.translateService.instant('@pry.widget.chart.operation.' + $event),\n attribute: undefined\n }\n });\n }\n setTimeout(() => this.triggerOrdinateAttributes$.next(), 10);\n }\n }\n\n changeAbscissa($event: string) {\n if ($event && this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, attribute: $event }\n });\n const attr = this.classes\n .map((clazz) => clazz.attributes)\n .reduce((a, b) => [...a, ...b], [])\n .find((attr) => attr.id === $event);\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, label: attr?.name ?? 'attr-not-found' }\n });\n\n this.copyAbscissaField = this.fields.find((field) => attr?.field === field.id);\n\n this.limitElements(!!this.optionsCopy$.value?.abscissa.limit);\n }\n }\n\n changeAbscissaLabel($event: string) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, label: $event }\n });\n }\n }\n\n changeOrdinate($event: any) {\n if ($event && this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, attribute: $event }\n });\n const attr = this.classes\n .map((clazz) => clazz.attributes)\n .reduce((a, b) => [...a, ...b], [])\n .find((attr) => attr.id === $event);\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, label: attr?.name ?? 'attr-not-found' }\n });\n\n this.copyOrdinateField = this.fields.find((field) => attr?.field === field.id);\n }\n }\n\n changeOrdinateLabel($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, label: $event }\n });\n }\n }\n\n changeKeep0Abscissa($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, keep0: $event }\n });\n }\n }\n\n changeKeep0Ordinate($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n ordinate: { ...this.optionsCopy$.value?.ordinate, keep0: $event }\n });\n }\n }\n\n limitElements($event: any) {\n if (this.optionsCopy$.value) {\n if ($event) {\n if (\n this.copyAbscissaField?.type !== FieldType.INSTANT &&\n this.optionsCopy$.value?.abscissa?.limit &&\n 'at' in this.optionsCopy$.value?.abscissa?.limit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value?.abscissa,\n limit: {\n at: this.optionsCopy$.value?.abscissa?.limit?.at ?? 3,\n others: false,\n order: 'asc',\n isTimeLimit: false\n }\n }\n });\n } else {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, limit: { interval: 'second', isTimeLimit: true } }\n });\n }\n } else {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: { ...this.optionsCopy$.value?.abscissa, limit: undefined }\n });\n }\n }\n }\n\n changeLimit($event: any) {\n if (\n this.optionsCopy$.value &&\n this.optionsCopy$.value.abscissa.limit &&\n !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value?.abscissa,\n limit: {\n ...this.optionsCopy$.value?.abscissa.limit,\n at: $event\n }\n }\n });\n }\n }\n\n changeLimitOthers($event: any) {\n if (\n this.optionsCopy$.value &&\n this.optionsCopy$.value.abscissa.limit &&\n !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value?.abscissa,\n limit: {\n ...this.optionsCopy$.value?.abscissa.limit,\n others: $event\n }\n }\n });\n }\n }\n\n changeLimitOrder($event: any) {\n if (\n this.optionsCopy$.value &&\n this.optionsCopy$.value.abscissa.limit &&\n !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value?.abscissa,\n limit: {\n ...this.optionsCopy$.value?.abscissa.limit,\n order: $event ? 'asc' : 'desc'\n }\n }\n });\n }\n }\n\n changeTimeLimit($event: any) {\n if (\n this.optionsCopy$.value &&\n this.optionsCopy$.value.abscissa.limit &&\n this.optionsCopy$.value.abscissa.limit.isTimeLimit\n ) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n abscissa: {\n ...this.optionsCopy$.value.abscissa,\n limit: {\n ...this.optionsCopy$.value.abscissa.limit,\n interval: $event\n }\n }\n });\n }\n }\n\n toggleLegend($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value.graph, legend: $event }\n });\n }\n }\n\n toggleTooltip($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: { ...this.optionsCopy$.value?.graph, tooltip: $event }\n });\n }\n }\n\n toggleGroupBy($event: any) {\n if (this.optionsCopy$.value) {\n if ($event) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: { attribute: this.optionsCopy$.value?.groupBy?.attribute ?? '', color: this.schemes[0].id }\n });\n } else {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: undefined\n });\n }\n }\n }\n\n changeGroupBy($event: any) {\n if (typeof $event === 'string' && this.optionsCopy$.value && this.optionsCopy$.value.groupBy) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: {\n ...this.optionsCopy$.value?.groupBy,\n attribute: $event\n }\n });\n }\n }\n\n changeColorScheme($event: any) {\n if (this.optionsCopy$.value && this.optionsCopy$.value.groupBy) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n groupBy: {\n attribute: this.optionsCopy$.value.groupBy?.attribute,\n color: $event\n }\n });\n }\n }\n\n setTickCount(data: any) {\n return Math.max(...data.map((val: any) => val.value)) < 3\n ? { tickCount: Math.max(...data.map((val: any) => val.value)) }\n : {};\n }\n\n scheme() {\n return vega.scheme(this.optionsCopy$.value?.groupBy?.color ?? '');\n }\n\n toggleStacked($event: any) {\n if (this.optionsCopy$.value) {\n this.optionsCopy$.next({\n ...this.optionsCopy$.value,\n graph: {\n ...this.optionsCopy$.value?.graph,\n stacked: $event\n }\n });\n }\n }\n\n override toImage(): Promise<string> {\n return new Promise((resolve, reject) => {\n resolve(this.vega.nativeElement.querySelectorAll('canvas')[0].toDataURL('image/png'));\n });\n }\n}\n","<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesScheme\">{{ '@pry.widget.chart.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n","export const enTranslations = {\n '@pry': {\n widget: {\n chart: {\n numberLocale: {\n decimal: '.',\n thousands: ',',\n grouping: [3],\n currency: ['$', '']\n },\n timeFormatLocale: {\n dateTime: '%Y %B %d %H:%M:%S',\n date: '%d/%m/%Y',\n time: '%H:%M:%S',\n periods: ['AM', 'PM'],\n days: ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'],\n shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n shortMonths: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']\n },\n operation: {\n none: 'Attribute value',\n count: 'Count',\n sum: 'Sum',\n cardinality: 'Distinct elements',\n avg: 'Average',\n median: 'Median',\n q1: 'Lower quartile',\n q3: 'Upper Quartile',\n min: 'Minimum',\n max: 'Maximum',\n percent: 'Percent',\n title: 'Operation'\n },\n chooseParameters: 'Please select parameters to display chart.',\n series: 'Series',\n type: 'Chart type',\n title: 'Chart title',\n graphType: {\n 'area-default': 'Area',\n 'area-with-lines-and-points': 'Curve with lines and points',\n 'bar-default': 'Bar',\n 'arc-default': 'Circular',\n 'line-default': 'Curve',\n 'line-with-points': 'Curve with points',\n 'arc-donut': 'Donut',\n 'bar-histogram': 'Histogram',\n 'point-default': 'Points'\n },\n donutSize: 'Donut inner radius',\n abscissa: 'Abscissa',\n ordinate: 'Ordinate',\n dataLabel: 'Data label',\n origin: 'Axis containing 0',\n limit: 'Limit elements',\n asc: 'Biggest elements',\n desc: 'Smallest elements',\n timeInterval: 'Time interval',\n others: 'Regroup remaining values in category \"Other\"',\n order: 'Component selection',\n groupBy: 'Group by',\n groupAttr: 'Grouping attribute',\n colorScheme: 'Color scheme',\n legend: 'Display legend',\n legendLabel: 'Legend',\n tooltip: 'Display tooltip',\n stacked: 'Vertical stacking',\n noData: 'No selected datasource',\n aggNoResult: 'No results to display',\n scheme: {\n accent: '8 colors n°1',\n set2: '8 colors n°2',\n dark2: '8 dark colors',\n pastel2: '8 pastel colors',\n set1: '9 colors',\n pastel1: '9 pastel colors',\n category10: '10 colors',\n tableau10: '10 different colors',\n set3: '12 colors',\n paired: '12 different colors',\n tableau20: '20 colors',\n category20: '20 colors with 2 shades',\n category20b: '20 colors with 4 shades n°1',\n category20c: '20 colors with 4 shades n°2',\n 'KO/W/OK': 'Traffic light'\n },\n time: {\n second: 'Second',\n minute: 'Minute',\n hour: 'Hour',\n day: 'Day',\n week: 'Week',\n month: 'Month',\n quarter: 'Quarter',\n year: 'Year'\n }\n }\n },\n message: {\n 'backend-only-1-datasource': 'Aggregation service can only manage the first datasource linked to the widget.',\n 'cannot-aggregate-virtual-ds':\n 'Aggregation service cannot perform aggregation on virtual datasets such as current search.'\n }\n }\n};\n","export const frTranslations = {\n '@pry': {\n widget: {\n chart: {\n numberLocale: {\n decimal: '.',\n thousands: ' ',\n grouping: [3],\n currency: ['€', '']\n },\n timeFormatLocale: {\n dateTime: '%Y %B %d %H:%M:%S',\n date: '%d/%m/%Y',\n time: '%H:%M:%S',\n periods: ['AM', 'PM'],\n days: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],\n shortDays: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n months: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n shortMonths: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']\n },\n operation: {\n none: \"Valeur de l'attribut\",\n count: 'Nombre',\n sum: 'Somme',\n cardinality: \"Nombre d'éléments distincts\",\n avg: 'Moyenne',\n median: 'Médiane',\n q1: 'Quartile inférieur',\n q3: 'Quartile supérieur',\n min: 'Minimum',\n max: 'Maximum',\n percent: 'Pourcentage',\n title: 'Opération'\n },\n chooseParameters: \"Merci de sélectionner les paramètres afin d'afficher le graphique\",\n type: 'Type de graphique',\n title: 'Titre du graphique',\n graphType: {\n 'area-default': 'Aire',\n 'area-with-lines-and-points': 'Aire avec lignes et marques',\n 'bar-default': 'Barres',\n 'arc-default': 'Circulaire',\n 'line-default': 'Courbe',\n 'line-with-points': 'Courbe avec marques',\n 'arc-donut': 'Diagramme anneau',\n 'bar-histogram': 'Histogramme',\n 'point-default': 'Points'\n },\n donutSize: \"Diamètre intérieur de l'anneau\",\n abscissa: 'Abscisse',\n ordinate: 'Ordonnée',\n dataLabel: 'Libellé de la donnée',\n origin: 'Axe contenant 0',\n limit: 'Limiter les éléments',\n asc: 'Aux plus grands éléments',\n desc: 'Aux plus petits éléments',\n timeInterval: 'Intervalle de temps',\n others: 'Regrouper les valeurs restantes dans une catégorie \"Autre\"',\n order: 'Choix des éléments',\n groupBy: 'Regroupement',\n groupAttr: 'Attribut de regroupement',\n colorScheme: 'Schéma de couleur',\n legend: 'Afficher la légende',\n legendLabel: 'Légende',\n tooltip: 'Affichage des info-bulles',\n stacked: 'Superposition verticale',\n noData: 'Aucune datasource sélectionnée',\n aggNoResult: 'Aucune donnée à afficher',\n scheme: {\n accent: '8 couleurs n°1',\n set2: '8 couleurs n°2',\n dark2: '8 couleurs sombre',\n pastel2: '8 couleurs pastel',\n set1: '9 couleurs',\n pastel1: '9 couleurs pastel',\n category10: '10 couleurs',\n tableau10: '10 couleurs différentes',\n set3: '12 couleurs',\n paired: '12 couleurs différentes',\n tableau20: '20 couleurs',\n category20: '20 couleurs avec 2 nuances',\n category20b: '20 couleurs avec 4 nuances n°1',\n category20c: '20 couleurs avec 4 nuances n°2',\n 'KO/W/OK': 'Feu de signalisation'\n },\n time: {\n second: 'Seconde',\n minute: 'Minute',\n hour: 'Heure',\n day: 'Jour',\n week: 'Semaine',\n month: 'Mois',\n quarter: 'Trimestre',\n year: 'Année'\n }\n }\n },\n message: {\n 'backend-only-1-datasource':\n 'Le service aggregation ne peut prendre en compte que la première datasource associée au widget.',\n 'cannot-aggregate-virtual-ds':\n 'Le service aggregation ne peut pas agréger sur des dataset virtuels tels que la recherche courante.'\n }\n }\n};\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseWidgetComponent,\n BaseWidgetModule,\n PryAggregationService,\n PryCoreModule,\n PryDashboardModule,\n PryEditInputModule,\n PryI18nModule,\n PryI18nService,\n PryIconModule,\n PryRangeModule,\n PrySelectModule,\n PrySortModule,\n PryToggleModule\n} from '@provoly/dashboard';\nimport { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';\nimport { WidgetAggregatedChartComponent } from './component/widget-aggregated-chart.component';\nimport { enTranslations } from './i18n/en.translations';\nimport { frTranslations } from './i18n/fr.translations';\nimport { PryWidgetAggregatedChartCssComponent } from './style/css.component';\n\n@NgModule({\n declarations: [WidgetAggregatedChartComponent, PryWidgetAggregatedChartCssComponent],\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n PryCoreModule,\n PryDashboardModule,\n PrySelectModule,\n PryIconModule,\n PryCheckboxModule,\n PryToggleModule,\n PryEditInputModule,\n PryI18nModule,\n PryRangeModule,\n PrySortModule\n ],\n exports: [WidgetAggregatedChartComponent],\n providers: [PryAggregationService]\n})\nexport class WidgetAggregatedChartModule extends BaseWidgetModule {\n constructor(private pryTranslateService: PryI18nService) {\n super();\n this.pryTranslateService.addLangObject('fr', 'widget-aggregated-chart', frTranslations);\n this.pryTranslateService.addLangObject('en', 'widget-aggregated-chart', enTranslations);\n }\n\n override getComponent() {\n return WidgetAggregatedChartComponent as Type<BaseWidgetComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6.PryWidgetAggregatedChartCssComponent","i1"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@provoly/dashboard",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.2",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/cdk": "14.x || 15.x || 16.x",
|
|
@@ -85,18 +85,18 @@
|
|
|
85
85
|
"esm": "./esm2022/admin/provoly-dashboard-admin.mjs",
|
|
86
86
|
"default": "./fesm2022/provoly-dashboard-admin.mjs"
|
|
87
87
|
},
|
|
88
|
-
"./dataset": {
|
|
89
|
-
"types": "./dataset/index.d.ts",
|
|
90
|
-
"esm2022": "./esm2022/dataset/provoly-dashboard-dataset.mjs",
|
|
91
|
-
"esm": "./esm2022/dataset/provoly-dashboard-dataset.mjs",
|
|
92
|
-
"default": "./fesm2022/provoly-dashboard-dataset.mjs"
|
|
93
|
-
},
|
|
94
88
|
"./import": {
|
|
95
89
|
"types": "./import/index.d.ts",
|
|
96
90
|
"esm2022": "./esm2022/import/provoly-dashboard-import.mjs",
|
|
97
91
|
"esm": "./esm2022/import/provoly-dashboard-import.mjs",
|
|
98
92
|
"default": "./fesm2022/provoly-dashboard-import.mjs"
|
|
99
93
|
},
|
|
94
|
+
"./dataset": {
|
|
95
|
+
"types": "./dataset/index.d.ts",
|
|
96
|
+
"esm2022": "./esm2022/dataset/provoly-dashboard-dataset.mjs",
|
|
97
|
+
"esm": "./esm2022/dataset/provoly-dashboard-dataset.mjs",
|
|
98
|
+
"default": "./fesm2022/provoly-dashboard-dataset.mjs"
|
|
99
|
+
},
|
|
100
100
|
"./notification": {
|
|
101
101
|
"types": "./notification/index.d.ts",
|
|
102
102
|
"esm2022": "./esm2022/notification/provoly-dashboard-notification.mjs",
|
|
@@ -163,18 +163,18 @@
|
|
|
163
163
|
"esm": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
164
164
|
"default": "./fesm2022/provoly-dashboard-filters-text.mjs"
|
|
165
165
|
},
|
|
166
|
-
"./components/checkbox": {
|
|
167
|
-
"types": "./components/checkbox/index.d.ts",
|
|
168
|
-
"esm2022": "./esm2022/components/checkbox/provoly-dashboard-components-checkbox.mjs",
|
|
169
|
-
"esm": "./esm2022/components/checkbox/provoly-dashboard-components-checkbox.mjs",
|
|
170
|
-
"default": "./fesm2022/provoly-dashboard-components-checkbox.mjs"
|
|
171
|
-
},
|
|
172
166
|
"./components/card": {
|
|
173
167
|
"types": "./components/card/index.d.ts",
|
|
174
168
|
"esm2022": "./esm2022/components/card/provoly-dashboard-components-card.mjs",
|
|
175
169
|
"esm": "./esm2022/components/card/provoly-dashboard-components-card.mjs",
|
|
176
170
|
"default": "./fesm2022/provoly-dashboard-components-card.mjs"
|
|
177
171
|
},
|
|
172
|
+
"./components/checkbox": {
|
|
173
|
+
"types": "./components/checkbox/index.d.ts",
|
|
174
|
+
"esm2022": "./esm2022/components/checkbox/provoly-dashboard-components-checkbox.mjs",
|
|
175
|
+
"esm": "./esm2022/components/checkbox/provoly-dashboard-components-checkbox.mjs",
|
|
176
|
+
"default": "./fesm2022/provoly-dashboard-components-checkbox.mjs"
|
|
177
|
+
},
|
|
178
178
|
"./components/expand-panel": {
|
|
179
179
|
"types": "./components/expand-panel/index.d.ts",
|
|
180
180
|
"esm2022": "./esm2022/components/expand-panel/provoly-dashboard-components-expand-panel.mjs",
|
|
@@ -63,6 +63,7 @@ export declare class WidgetAggregatedChartComponent extends DataWidgetComponent
|
|
|
63
63
|
sortActive?: string | undefined;
|
|
64
64
|
sortDirection?: string | undefined;
|
|
65
65
|
noAggregationData$: Observable<boolean>;
|
|
66
|
+
allowedClasses$: Observable<Class[]>;
|
|
66
67
|
constructor(store: Store<any>, translateService: PryI18nService, el: ElementRef, aggregationService: PryAggregationService);
|
|
67
68
|
ngAfterViewInit(): void;
|
|
68
69
|
translateToVegaType(type?: FieldType, name?: string): VegaType;
|