@provoly/dashboard 0.15.8 → 0.15.10

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.
Files changed (61) hide show
  1. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +7 -6
  2. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +5 -4
  3. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +3 -3
  4. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +2 -2
  5. package/esm2022/admin/i18n/fr.translations.mjs +2 -2
  6. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  7. package/esm2022/filters/date/date-filter.component.mjs +3 -3
  8. package/esm2022/lib/core/auth/geoAuth.service.mjs +8 -15
  9. package/esm2022/lib/core/components/modal-status/modal-status.component.mjs +2 -2
  10. package/esm2022/lib/core/model/dataset.interface.mjs +1 -1
  11. package/esm2022/lib/core/model/filter.interface.mjs +1 -1
  12. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
  13. package/esm2022/lib/core/public-api.mjs +2 -2
  14. package/esm2022/lib/core/store/aggregation/frontend-aggregation/aggregation-utils.class.mjs +184 -0
  15. package/esm2022/lib/core/store/aggregation/frontend-aggregation/frontend-aggregation.service.mjs +93 -0
  16. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +2 -2
  17. package/esm2022/presentation/components/presentation.component.mjs +3 -3
  18. package/esm2022/presentation/i18n/en.translations.mjs +3 -2
  19. package/esm2022/presentation/i18n/fr.translations.mjs +6 -5
  20. package/esm2022/presentation/style/css.component.mjs +2 -2
  21. package/esm2022/restitution/i18n/fr.translations.mjs +2 -2
  22. package/esm2022/restitution/style/css.component.mjs +2 -2
  23. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +19 -10
  24. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +18 -11
  25. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +36 -1
  26. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +3 -3
  27. package/fesm2022/provoly-dashboard-admin.mjs +14 -12
  28. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  29. package/fesm2022/provoly-dashboard-dataset.mjs +1 -1
  30. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  31. package/fesm2022/provoly-dashboard-filters-date.mjs +2 -2
  32. package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -1
  33. package/fesm2022/provoly-dashboard-presentation.mjs +11 -9
  34. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  35. package/fesm2022/provoly-dashboard-restitution.mjs +3 -3
  36. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  37. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +18 -9
  38. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  39. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +52 -10
  40. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  41. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +2 -2
  42. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  43. package/fesm2022/provoly-dashboard.mjs +237 -179
  44. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  45. package/lib/core/auth/geoAuth.service.d.ts +3 -1
  46. package/lib/core/model/dataset.interface.d.ts +1 -1
  47. package/lib/core/model/filter.interface.d.ts +1 -1
  48. package/lib/core/model/widget-map-manifest.interface.d.ts +1 -0
  49. package/lib/core/public-api.d.ts +1 -1
  50. package/lib/core/store/aggregation/frontend-aggregation/aggregation-utils.class.d.ts +33 -0
  51. package/lib/core/store/aggregation/frontend-aggregation/frontend-aggregation.service.d.ts +22 -0
  52. package/lib/dashboard/store/dashboard.selectors.d.ts +1 -1
  53. package/package.json +30 -30
  54. package/presentation/i18n/en.translations.d.ts +1 -0
  55. package/presentation/i18n/fr.translations.d.ts +1 -0
  56. package/presentation/style/_o-pry-presentation.scss +7 -2
  57. package/tooltips/attribute/attribute-tooltip.component.d.ts +5 -1
  58. package/widgets/widget-map/component/widget-map.component.d.ts +3 -4
  59. package/widgets/widget-map/utils/widget-map.utils.d.ts +1 -0
  60. package/esm2022/lib/core/store/aggregation/frontend-aggregation.service.mjs +0 -210
  61. package/lib/core/store/aggregation/frontend-aggregation.service.d.ts +0 -33
@@ -0,0 +1,184 @@
1
+ import { Operation } from '../../../model/widget-aggregated-chart-manifest.interface';
2
+ import { ResultsetUtils } from '../../../../dashboard/resultset-utils';
3
+ import { ItemUtils } from '../../../../dashboard/item-utils';
4
+ export class AggregationUtils {
5
+ static getAxisAttribute(classes, options, axis) {
6
+ return classes
7
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options[axis].attribute))
8
+ .find((attr) => !!attr)?.name;
9
+ }
10
+ static getChartDatasourceResultSet(datasources, resultSets) {
11
+ return datasources
12
+ .filter((rsName) => rsName in resultSets)
13
+ .map((rsName) => resultSets[rsName])
14
+ .reduce((rs1, rs2) => ResultsetUtils.mergeResultSets(rs1, rs2), {
15
+ items: {},
16
+ relations: [],
17
+ merged: datasources.filter((rsName) => rsName in resultSets).length
18
+ });
19
+ }
20
+ static getAggregatedValue(operation, groupedItems, abscissaAttribute, ordinateAttribute) {
21
+ return this.getAggregatedValueForOperation(operation, groupedItems[abscissaAttribute].map((item) => this.getValueFromAttribute(item, ordinateAttribute).value));
22
+ }
23
+ static getValueFromAttribute(item, attribute) {
24
+ let value = ItemUtils.getAttributeValue(item, attribute);
25
+ return Array.isArray(value) ? value[0] : value;
26
+ }
27
+ static getAggregatedValueForOperation(operation, values) {
28
+ switch (operation) {
29
+ case Operation.COUNT:
30
+ return values.length;
31
+ case Operation.SUM:
32
+ return values.reduce((acc, val) => acc + val, 0);
33
+ case Operation.DISTINCT:
34
+ return [...new Set(values)].length;
35
+ case Operation.AVERAGE:
36
+ return values.reduce((acc, val) => acc + val, 0) / values.length;
37
+ case Operation.MEDIAN:
38
+ return this.getQuartile(values, 0.5);
39
+ case Operation.Q1:
40
+ return this.getQuartile(values, 0.25);
41
+ case Operation.Q3:
42
+ return this.getQuartile(values, 0.75);
43
+ case Operation.MIN:
44
+ return Math.min(...values);
45
+ case Operation.MAX:
46
+ return Math.max(...values);
47
+ default:
48
+ return -1;
49
+ }
50
+ }
51
+ static getQuartile(values, q) {
52
+ if (values.length === 0)
53
+ return 0;
54
+ values.sort((a, b) => a - b);
55
+ let pos = (values.length - 1) * q;
56
+ if (pos % 1 === 0) {
57
+ return values[pos];
58
+ }
59
+ pos = Math.floor(pos);
60
+ return values[pos + 1] !== undefined ? (values[pos] + values[pos + 1]) / 2 : values[pos];
61
+ }
62
+ static formatByLimit(data, limit, operation) {
63
+ if (!limit.isTimeLimit) {
64
+ data
65
+ .sort((a, b) => (limit.order === 'asc' ? (a.value > b.value ? 1 : -1) : a.value < b.value ? 1 : -1))
66
+ .splice(limit.at);
67
+ return data;
68
+ }
69
+ return this.formatDataByTimeLimit(data, limit, operation);
70
+ }
71
+ static formatDataByTimeLimit(data, limit, operation) {
72
+ let distinctValues = [];
73
+ data
74
+ .map((obj) => ({ ...obj, key: this.getKeyValueForTimeInterval(obj.key, limit.interval) }))
75
+ .forEach((obj) => {
76
+ const isNotDistinct = distinctValues.find((distinct) => obj.key === distinct.key);
77
+ if (!!isNotDistinct) {
78
+ isNotDistinct.values.push(obj.value);
79
+ }
80
+ else {
81
+ distinctValues.push({ key: obj.key, values: [] });
82
+ }
83
+ });
84
+ return distinctValues.map((obj) => ({
85
+ ...obj,
86
+ value: AggregationUtils.getAggregatedValueForOperation(operation, obj.values)
87
+ }));
88
+ }
89
+ static getKeyValueForTimeInterval(key, interval) {
90
+ const date = new Date(key);
91
+ switch (interval) {
92
+ case 'second':
93
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()).toISOString();
94
+ case 'minute':
95
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes()).toISOString();
96
+ case 'hour':
97
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours()).toISOString();
98
+ case 'day':
99
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate()).toISOString();
100
+ case 'week':
101
+ const daysToSubtract = (7 + date.getUTCDay()) % 7;
102
+ date.setUTCDate(date.getUTCDate() - daysToSubtract);
103
+ return date.toISOString();
104
+ case 'quarter':
105
+ const quarterStartMonths = [0, 3, 6, 9]; // January, April, July, October
106
+ const quarter = Math.floor(date.getUTCMonth() / 3);
107
+ const year = date.getUTCFullYear();
108
+ const startOfQuarter = new Date(Date.UTC(year, quarterStartMonths[quarter], 1, 0, 0, 0, 0));
109
+ return startOfQuarter.toISOString();
110
+ case 'year':
111
+ return new Date(new Date(key).getFullYear(), 0, 1).toISOString();
112
+ default:
113
+ return date.toISOString();
114
+ }
115
+ }
116
+ static filterItems(items, filters) {
117
+ let filtersByAttribute = filters
118
+ .map((filter) => filter.attributes.map((attribute) => ({
119
+ ...filter,
120
+ attribute: attribute.id,
121
+ attributes: undefined
122
+ })))
123
+ .flat();
124
+ return filters.length > 0
125
+ ? [
126
+ ...new Set(filtersByAttribute
127
+ .map((filter) => items.filter((item) => this.doesItemValuePassFilter(item, filter.attribute, filter.operator, filter.value)))
128
+ .flat())
129
+ ]
130
+ : items;
131
+ }
132
+ static doesItemValuePassFilter(item, attribute, operator, filterValue) {
133
+ let value = AggregationUtils.getValueFromAttribute(item, attribute)?.value;
134
+ let date1, date2;
135
+ console.log(operator);
136
+ switch (operator) {
137
+ case 'EQUALS':
138
+ return value === filterValue;
139
+ case 'NOT_EQUALS':
140
+ return value !== filterValue;
141
+ case 'CONTAINS':
142
+ return value.includes(filterValue);
143
+ case 'START_WITH':
144
+ return value.startsWith(filterValue);
145
+ case 'END_WITH':
146
+ return value.endsWith(filterValue);
147
+ case 'GREATER_THAN':
148
+ if (typeof filterValue === 'number') {
149
+ return value > filterValue;
150
+ }
151
+ else if (typeof filterValue === 'string') {
152
+ return new Date(value) > new Date(filterValue);
153
+ }
154
+ else {
155
+ return false;
156
+ }
157
+ case 'LOWER_THAN':
158
+ if (typeof filterValue === 'number') {
159
+ return value < filterValue;
160
+ }
161
+ else if (typeof filterValue === 'string') {
162
+ return new Date(value) < new Date(filterValue);
163
+ }
164
+ else {
165
+ return false;
166
+ }
167
+ case 'INSIDE':
168
+ [date1, date2] = [
169
+ new Date(filterValue.split(',')[0]),
170
+ new Date(filterValue.split(',')[1])
171
+ ];
172
+ return new Date(value) > new Date(date1) && new Date(value) < new Date(date2);
173
+ case 'OUTSIDE':
174
+ [date1, date2] = [
175
+ new Date(filterValue.split(',')[0]),
176
+ new Date(filterValue.split(',')[1])
177
+ ];
178
+ return new Date(value) < new Date(date1) && new Date(value) > new Date(date2);
179
+ default:
180
+ return true;
181
+ }
182
+ }
183
+ }
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24tdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvY29yZS9zdG9yZS9hZ2dyZWdhdGlvbi9mcm9udGVuZC1hZ2dyZWdhdGlvbi9hZ2dyZWdhdGlvbi11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVWLE1BQU0sMkRBQTJELENBQUM7QUFJbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUc3RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFnQixFQUFFLE9BQXFDLEVBQUUsSUFBNkI7UUFDNUcsT0FBTyxPQUFPO2FBQ1gsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDcEYsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsMkJBQTJCLENBQUMsV0FBcUIsRUFBRSxVQUFzQjtRQUM5RSxPQUFPLFdBQVc7YUFDZixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUM7YUFDeEMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsTUFBTSxDQUFDLENB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b0JBQ2YsSUFBSSxJQUFJLENBQUUsV0FBc0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9DLElBQUksSUFBSSxDQUFFLFdBQXNCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoRCxDQUFDO2dCQUNGLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEY7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF0TGltaXQsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIE9wZXJhdGlvbixcbiAgVGltZUxpbWl0XG59IGZyb20gJy4uLy4uLy4uL21vZGVsL3dpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LW1hbmlmZXN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDbGFzcyB9IGZyb20gJy4uLy4uL2NsYXNzL2NsYXNzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJdGVtLCBWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXN1bHRTZXRzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvcmVzdWx0LXNldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0c2V0VXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXNoYm9hcmQvcmVzdWx0c2V0LXV0aWxzJztcbmltcG9ydCB7IEl0ZW1VdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL2Rhc2hib2FyZC9pdGVtLXV0aWxzJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2ZpbHRlci5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25VdGlscyB7XG4gIHN0YXRpYyBnZXRBeGlzQXR0cmlidXRlKGNsYXNzZXM6IENsYXNzW10sIG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsIGF4aXM6ICdvcmRpbmF0ZScgfCAnYWJzY2lzc2EnKSB7XG4gICAgcmV0dXJuIGNsYXNzZXNcbiAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnNbYXhpc10uYXR0cmlidXRlKSlcbiAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpPy5uYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldENoYXJ0RGF0YXNvdXJjZVJlc3VsdFNldChkYXRhc291cmNlczogc3RyaW5nW10sIHJlc3VsdFNldHM6IFJlc3VsdFNldHMpIHtcbiAgICByZXR1cm4gZGF0YXNvdXJjZXNcbiAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4gcnNOYW1lIGluIHJlc3VsdFNldHMpXG4gICAgICAubWFwKChyc05hbWUpID0+IHJlc3VsdFNldHNbcnNOYW1lXSlcbiAgICAgIC5yZWR1Y2UoKHJzMSwgcnMyKSA9PiBSZXN1bHRzZXRVdGlscy5tZXJnZVJlc3VsdFNldHMocnMxLCByczIpLCB7XG4gICAgICAgIGl0ZW1zOiB7fSxcbiAgICAgICAgcmVsYXRpb25zOiBbXSxcbiAgICAgICAgbWVyZ2VkOiBkYXRhc291cmNlcy5maWx0ZXIoKHJzTmFtZSkgPT4gcnNOYW1lIGluIHJlc3VsdFNldHMpLmxlbmd0aFxuICAgICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0QWdncmVnYXRlZFZhbHVlKFxuICAgIG9wZXJhdGlvbjogT3BlcmF0aW9uLFxuICAgIGdyb3VwZWRJdGVtczogeyBba2V5OiBzdHJpbmcgfCBudW1iZXJdOiBJdGVtW10gfSxcbiAgICBhYnNjaXNzYUF0dHJpYnV0ZToga2V5b2YgdHlwZW9mIGdyb3VwZWRJdGVtcyxcbiAgICBvcmRpbmF0ZUF0dHJpYnV0ZTogc3RyaW5nXG4gICk6IG51bWJlciB8IFZhbHVlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRlZFZhbHVlRm9yT3BlcmF0aW9uKFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgZ3JvdXBlZEl0ZW1zW2Fic2Npc3NhQXR0cmlidXRlXS5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0VmFsdWVGcm9tQXR0cmlidXRlKGl0ZW0sIG9yZGluYXRlQXR0cmlidXRlKS52YWx1ZSBhcyBudW1iZXIpXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRWYWx1ZUZyb21BdHRyaWJ1dGUoaXRlbTogSXRlbSwgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBsZXQgdmFsdWUgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoaXRlbSwgYXR0cmlidXRlKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGdldEFnZ3JlZ2F0ZWRWYWx1ZUZvck9wZXJhdGlvbihvcGVyYXRpb246IE9wZXJhdGlvbiwgdmFsdWVzOiBudW1iZXJbXSk6IG51bWJlciB8IFZhbHVlVHlwZSB7XG4gICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgT3BlcmF0aW9uLkNPVU5UOlxuICAgICAgICByZXR1cm4gdmFsdWVzLmxlbmd0aDtcbiAgICAgIGNhc2UgT3BlcmF0aW9uLlNVTTpcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApO1xuICAgICAgY2FzZSBPcGVyYXRpb24uRElTVElOQ1Q6XG4gICAgICAgIHJldHVybiBbLi4ubmV3IFNldCh2YWx1ZXMpXS5sZW5ndGg7XG4gICAgICBjYXNlIE9wZXJhdGlvbi5BVkVSQUdFOlxuICAgICAgICByZXR1cm4gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCkgLyB2YWx1ZXMubGVuZ3RoO1xuICAgICAgY2FzZSBPcGVyYXRpb24uTUVESUFOOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWFydGlsZSh2YWx1ZXMsIDAuNSk7XG4gICAgICBjYXNlIE9wZXJhdGlvbi5RMTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVhcnRpbGUodmFsdWVzLCAwLjI1KTtcbiAgICAgIGNhc2UgT3BlcmF0aW9uLlEzOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWFydGlsZSh2YWx1ZXMsIDAuNzUpO1xuICAgICAgY2FzZSBPcGVyYXRpb24uTUlOOlxuICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4udmFsdWVzKTtcbiAgICAgIGNhc2UgT3BlcmF0aW9uLk1BWDpcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnZhbHVlcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFF1YXJ0aWxlKHZhbHVlczogbnVtYmVyW10sIHE6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgICB2YWx1ZXMuc29ydCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgLSBiKTtcblxuICAgIGxldCBwb3MgPSAodmFsdWVzLmxlbmd0aCAtIDEpICogcTtcbiAgICBpZiAocG9zICUgMSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHZhbHVlc1twb3NdO1xuICAgIH1cblxuICAgIHBvcyA9IE1hdGguZmxvb3IocG9zKTtcbiAgICByZXR1cm4gdmFsdWVzW3BvcyArIDFdICE9PSB1bmRlZmluZWQgPyAodmFsdWVzW3Bvc10gKyB2YWx1ZXNbcG9zICsgMV0pIC8gMiA6IHZhbHVlc1twb3NdO1xuICB9XG5cbiAgc3RhdGljIGZvcm1hdEJ5TGltaXQoZGF0YTogeyBrZXk6IFZhbHVlVHlwZTsgdmFsdWU6IFZhbHVlVHlwZSB9W10sIGxpbWl0OiBBdExpbWl0IHwgVGltZUxpbWl0LCBvcGVyYXRpb246IE9wZXJhdGlvbikge1xuICAgIGlmICghbGltaXQuaXNUaW1lTGltaXQpIHtcbiAgICAgIGRhdGFcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IChsaW1pdC5vcmRlciA9PT0gJ2FzYycgPyAoYS52YWx1ZSA+IGIudmFsdWUgPyAxIDogLTEpIDogYS52YWx1ZSA8IGIudmFsdWUgPyAxIDogLTEpKVxuICAgICAgICAuc3BsaWNlKGxpbWl0LmF0KTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRhQnlUaW1lTGltaXQoZGF0YSwgbGltaXQsIG9wZXJhdGlvbik7XG4gIH1cbiAgc3RhdGljIGZvcm1hdERhdGFCeVRpbWVMaW1pdChkYXRhOiB7IGtleTogVmFsdWVUeXBlOyB2YWx1ZTogVmFsdWVUeXBlIH1bXSwgbGltaXQ6IFRpbWVMaW1pdCwgb3BlcmF0aW9uOiBPcGVyYXRpb24pIHtcbiAgICBsZXQgZGlzdGluY3RWYWx1ZXM6IHsga2V5OiBWYWx1ZVR5cGU7IHZhbHVlczogVmFsdWVUeXBlW10gfVtdID0gW107XG4gICAgZGF0YVxuICAgICAgLm1hcCgob2JqKSA9PiAoeyAuLi5vYmosIGtleTogdGhpcy5nZXRLZXlWYWx1ZUZvclRpbWVJbnRlcnZhbChvYmoua2V5LCBsaW1pdC5pbnRlcnZhbCkgfSkpXG4gICAgICAuZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTm90RGlzdGluY3QgPSBkaXN0aW5jdFZhbHVlcy5maW5kKChkaXN0aW5jdCkgPT4gb2JqLmtleSA9PT0gZGlzdGluY3Qua2V5KTtcbiAgICAgICAgaWYgKCEhaXNOb3REaXN0aW5jdCkge1xuICAgICAgICAgIGlzTm90RGlzdGluY3QudmFsdWVzLnB1c2gob2JqLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXN0aW5jdFZhbHVlcy5wdXNoKHsga2V5OiBvYmoua2V5LCB2YWx1ZXM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gZGlzdGluY3RWYWx1ZXMubWFwKChvYmopID0+ICh7XG4gICAgICAuLi5vYmosXG4gICAgICB2YWx1ZTogQWdncmVnYXRpb25VdGlscy5nZXRBZ2dyZWdhdGVkVmFsdWVGb3JPcGVyYXRpb24ob3BlcmF0aW9uLCBvYmoudmFsdWVzIGFzIG51bWJlcltdKVxuICAgIH0pKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRLZXlWYWx1ZUZvclRpbWVJbnRlcnZhbChcbiAgICBrZXk6IFZhbHVlVHlwZSxcbiAgICBpbnRlcnZhbDogJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ3dlZWsnIHwgJ3F1YXJ0ZXInIHwgJ3llYXInXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGtleSBhcyBzdHJpbmcpO1xuICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgICBkYXRlLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICBkYXRlLmdldFNlY29uZHMoKVxuICAgICAgICApLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSxcbiAgICAgICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgICAgZGF0ZS5nZXRNaW51dGVzKClcbiAgICAgICAgKS50b0lTT1N0cmluZygpO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSkudG9JU09TdHJpbmcoKTtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY29uc3QgZGF5c1RvU3VidHJhY3QgPSAoNyArIGRhdGUuZ2V0VVRDRGF5KCkpICUgNztcbiAgICAgICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGF5c1RvU3VidHJhY3QpO1xuICAgICAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgIGNvbnN0IHF1YXJ0ZXJTdGFydE1vbnRocyA9IFswLCAzLCA2LCA5XTsgLy8gSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXJcbiAgICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRVVENNb250aCgpIC8gMyk7XG4gICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRPZlF1YXJ0ZXIgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBxdWFydGVyU3RhcnRNb250aHNbcXVhcnRlcl0sIDEsIDAsIDAsIDAsIDApKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZRdWFydGVyLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKGtleSBhcyBzdHJpbmcpLmdldEZ1bGxZZWFyKCksIDAsIDEpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmaWx0ZXJJdGVtcyhpdGVtczogSXRlbVtdLCBmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgIGxldCBmaWx0ZXJzQnlBdHRyaWJ1dGUgPSBmaWx0ZXJzXG4gICAgICAubWFwKChmaWx0ZXIpID0+XG4gICAgICAgIGZpbHRlci5hdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiAoe1xuICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICBhdHRyaWJ1dGU6IGF0dHJpYnV0ZS5pZCxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB1bmRlZmluZWRcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuZmxhdCgpO1xuXG4gICAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgIGZpbHRlcnNCeUF0dHJpYnV0ZVxuICAgICAgICAgICAgICAubWFwKChmaWx0ZXIpID0+XG4gICAgICAgICAgICAgICAgaXRlbXMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5kb2VzSXRlbVZhbHVlUGFzc0ZpbHRlcihpdGVtLCBmaWx0ZXIuYXR0cmlidXRlLCBmaWx0ZXIub3BlcmF0b3IsIGZpbHRlci52YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBpdGVtcztcbiAgfVxuXG4gIHN0YXRpYyBkb2VzSXRlbVZhbHVlUGFzc0ZpbHRlcihcbiAgICBpdGVtOiBJdGVtLFxuICAgIGF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIG9wZXJhdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmlsdGVyVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuICApOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWUgPSBBZ2dyZWdhdGlvblV0aWxzLmdldFZhbHVlRnJvbUF0dHJpYnV0ZShpdGVtLCBhdHRyaWJ1dGUpPy52YWx1ZSBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgbGV0IGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZTtcblxuICAgIGNvbnNvbGUubG9nKG9wZXJhdG9yKTtcblxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgJ0VRVUFMUyc6XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gZmlsdGVyVmFsdWU7XG4gICAgICBjYXNlICdOT1RfRVFVQUxTJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBmaWx0ZXJWYWx1ZTtcbiAgICAgIGNhc2UgJ0NPTlRBSU5TJzpcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBzdHJpbmcpLmluY2x1ZGVzKGZpbHRlclZhbHVlIGFzIHN0cmluZyk7XG4gICAgICBjYXNlICdTVEFSVF9XSVRIJzpcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBzdHJpbmcpLnN0YXJ0c1dpdGgoZmlsdGVyVmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIGNhc2UgJ0VORF9XSVRIJzpcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBzdHJpbmcpLmVuZHNXaXRoKGZpbHRlclZhbHVlIGFzIHN0cmluZyk7XG4gICAgICBjYXNlICdHUkVBVEVSX1RIQU4nOlxuICAgICAgICBpZiAodHlwZW9mIGZpbHRlclZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA+IGZpbHRlclZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXJWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpID4gbmV3IERhdGUoZmlsdGVyVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnTE9XRVJfVEhBTic6XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlIDwgZmlsdGVyVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlclZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZShmaWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICBjYXNlICdJTlNJREUnOlxuICAgICAgICBbZGF0ZTEsIGRhdGUyXSA9IFtcbiAgICAgICAgICBuZXcgRGF0ZSgoZmlsdGVyVmFsdWUgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBuZXcgRGF0ZSgoZmlsdGVyVmFsdWUgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzFdKVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpID4gbmV3IERhdGUoZGF0ZTEpICYmIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKGRhdGUyKTtcbiAgICAgIGNhc2UgJ09VVFNJREUnOlxuICAgICAgICBbZGF0ZTEsIGRhdGUyXSA9IFtcbiAgICAgICAgICBuZXcgRGF0ZSgoZmlsdGVyVmFsdWUgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBuZXcgRGF0ZSgoZmlsdGVyVmFsdWUgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzFdKVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoZGF0ZTEpICYmIG5ldyBEYXRlKHZhbHVlKSA+IG5ldyBEYXRlKGRhdGUyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,93 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { combineLatest, map } from 'rxjs';
3
+ import { DashboardSelectors } from '../../../../dashboard/store/dashboard.selectors';
4
+ import { ClassSelectors } from '../../class/class.selectors';
5
+ import { PryAggregationService } from '../base-aggregation.service';
6
+ import { AggregationUtils } from './aggregation-utils.class';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ngrx/store";
9
+ export class PryFrontendAggregationService extends PryAggregationService {
10
+ constructor(store) {
11
+ super();
12
+ this.store = store;
13
+ }
14
+ aggregate(datasources, options) {
15
+ return combineLatest([
16
+ this.store.select(DashboardSelectors.resultSets),
17
+ this.store.select(ClassSelectors.classes),
18
+ this.store.select(DashboardSelectors.filters)
19
+ ]).pipe(map(([resultSets, classes, filters]) => {
20
+ const resultSet = AggregationUtils.getChartDatasourceResultSet(datasources, resultSets);
21
+ let items = Object.keys(resultSet.items)
22
+ .map((classId) => resultSet.items[classId])
23
+ .reduce((prev, curr) => [...prev, ...curr], []);
24
+ items = AggregationUtils.filterItems(items, filters);
25
+ return this.getAggregationResult(options, classes, items);
26
+ }));
27
+ }
28
+ getAggregationResult(options, classes, items) {
29
+ const [abscissa, ordinate] = [
30
+ AggregationUtils.getAxisAttribute(classes, options, 'abscissa') ?? '',
31
+ AggregationUtils.getAxisAttribute(classes, options, 'ordinate') ?? ''
32
+ ];
33
+ const aggregationResult = {
34
+ operation: options.ordinate.operation,
35
+ values: []
36
+ };
37
+ if (!options.groupBy) {
38
+ if (!!options.ordinate.operation)
39
+ console.warn('no ordinate operation selected');
40
+ aggregationResult.values = this.getChartDataBasedOnOperation(items, options.ordinate.operation, abscissa, ordinate, options.abscissa.limit);
41
+ console.log(aggregationResult.values);
42
+ }
43
+ else {
44
+ const groupByAttribute = classes
45
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))
46
+ .find((attr) => !!attr)?.name ?? '';
47
+ const itemsGrouped = this.getItemsGroupedByAttributeValue(items, groupByAttribute);
48
+ aggregationResult.values = Object.keys(itemsGrouped).map((key) => ({
49
+ key,
50
+ groupBy: this.getChartDataBasedOnOperation(itemsGrouped[key], options.ordinate.operation, abscissa, ordinate, options.abscissa.limit)
51
+ }));
52
+ }
53
+ return aggregationResult;
54
+ }
55
+ getItemsGroupedByAttributeValue(items, attribute) {
56
+ if (attribute === '')
57
+ console.warn('groupBy attribute not found');
58
+ let distinctValues = {};
59
+ items.forEach((item) => {
60
+ let value = AggregationUtils.getValueFromAttribute(item, attribute)?.value;
61
+ if (!!value)
62
+ distinctValues[value] = [...(distinctValues[value] ?? []), item];
63
+ });
64
+ return distinctValues;
65
+ }
66
+ // get { key, value } object list that will be our data to show in the chart
67
+ getChartDataBasedOnOperation(items, operation, abscissa, ordinate, limit) {
68
+ if (abscissa === '' || ordinate === '')
69
+ console.warn('abscissa or ordinate attribute not found');
70
+ const groupByAbscissa = this.getItemsGroupedByAttributeValue(items, abscissa);
71
+ let result = [
72
+ ...Object.keys(groupByAbscissa).map((abscissaAttribute) => {
73
+ console.log(AggregationUtils.getAggregatedValue(operation, groupByAbscissa, abscissaAttribute, ordinate ?? ''));
74
+ return {
75
+ key: +abscissaAttribute || abscissaAttribute,
76
+ value: AggregationUtils.getAggregatedValue(operation, groupByAbscissa, abscissaAttribute, ordinate ?? '')
77
+ };
78
+ })
79
+ ];
80
+ if (limit)
81
+ result = AggregationUtils.formatByLimit(result, limit, operation);
82
+ return result;
83
+ }
84
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
85
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, providedIn: 'root' }); }
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, decorators: [{
88
+ type: Injectable,
89
+ args: [{
90
+ providedIn: 'root'
91
+ }]
92
+ }], ctorParameters: function () { return [{ type: i1.Store }]; } });
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtYWdncmVnYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL3N0b3JlL2FnZ3JlZ2F0aW9uL2Zyb250ZW5kLWFnZ3JlZ2F0aW9uL2Zyb250ZW5kLWFnZ3JlZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQVFyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFxQixxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFNN0QsTUFBTSxPQUFPLDZCQUE4QixTQUFRLHFCQUFxQjtJQUN0RSxZQUFvQixLQUFZO1FBQzlCLEtBQUssRUFBRSxDQUFDO1FBRFUsVUFBSyxHQUFMLEtBQUssQ0FBTztJQUVoQyxDQUFDO0lBRVEsU0FBUyxDQUFDLFdBQXFCLEVBQUUsT0FBcUM7UUFDN0UsT0FBTyxhQUFhLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1NBQzlDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVB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UUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hILE9BQU87b0JBQ0wsR0FBRyxFQUFFLENBQUMsaUJBQWlCLElBQUksaUJBQWlCO29CQUM1QyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO2lCQUMxRyxDQUFDO1lBQ0osQ0FBQyxDQUFDO1NBQ0gsQ0FBQztRQUVGLElBQUksS0FBSztZQUFFLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzhHQW5HVSw2QkFBNkI7a0hBQTdCLDZCQUE2QixjQUY1QixNQUFNOzsyRkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhc2hib2FyZFNlbGVjdG9ycyB9IGZyb20gJy4uLy4uLy4uLy4uL2Rhc2hib2FyZC9zdG9yZS9kYXNoYm9hcmQuc2VsZWN0b3JzJztcbmltcG9ydCB7IEl0ZW0sIFZhbHVlVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2l0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEF0TGltaXQsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIE9wZXJhdGlvbixcbiAgVGltZUxpbWl0XG59IGZyb20gJy4uLy4uLy4uL21vZGVsL3dpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LW1hbmlmZXN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDbGFzc1NlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2NsYXNzL2NsYXNzLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvblJlc3VsdCwgUHJ5QWdncmVnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS1hZ2dyZWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uVXRpbHMgfSBmcm9tICcuL2FnZ3JlZ2F0aW9uLXV0aWxzLmNsYXNzJztcbmltcG9ydCB7IENsYXNzIH0gZnJvbSAnLi4vLi4vY2xhc3MvY2xhc3MuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHJ5RnJvbnRlbmRBZ2dyZWdhdGlvblNlcnZpY2UgZXh0ZW5kcyBQcnlBZ2dyZWdhdGlvblNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvdmVycmlkZSBhZ2dyZWdhdGUoZGF0YXNvdXJjZXM6IHN0cmluZ1tdLCBvcHRpb25zOiBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTogT2JzZXJ2YWJsZTxBZ2dyZWdhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmZpbHRlcnMpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdFNldHMsIGNsYXNzZXMsIGZpbHRlcnNdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFNldCA9IEFnZ3JlZ2F0aW9uVXRpbHMuZ2V0Q2hhcnREYXRhc291cmNlUmVzdWx0U2V0KGRhdGFzb3VyY2VzLCByZXN1bHRTZXRzKTtcbiAgICAgICAgbGV0IGl0ZW1zOiBJdGVtW10gPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gcmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdKVxuICAgICAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IFsuLi5wcmV2LCAuLi5jdXJyXSwgW10pIGFzIEl0ZW1bXTtcbiAgICAgICAgaXRlbXMgPSBBZ2dyZWdhdGlvblV0aWxzLmZpbHRlckl0ZW1zKGl0ZW1zLCBmaWx0ZXJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb25SZXN1bHQob3B0aW9ucywgY2xhc3NlcywgaXRlbXMpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRpb25SZXN1bHQob3B0aW9uczogQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucywgY2xhc3NlczogQ2xhc3NbXSwgaXRlbXM6IEl0ZW1bXSk6IEFnZ3JlZ2F0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBbYWJzY2lzc2EsIG9yZGluYXRlXSA9IFtcbiAgICAgIEFnZ3JlZ2F0aW9uVXRpbHMuZ2V0QXhpc0F0dHJpYnV0ZShjbGFzc2VzLCBvcHRpb25zLCAnYWJzY2lzc2EnKSA/PyAnJyxcbiAgICAgIEFnZ3JlZ2F0aW9uVXRpbHMuZ2V0QXhpc0F0dHJpYnV0ZShjbGFzc2VzLCBvcHRpb25zLCAnb3JkaW5hdGUnKSA/PyAnJ1xuICAgIF07XG5cbiAgICBjb25zdCBhZ2dyZWdhdGlvblJlc3VsdDogQWdncmVnYXRpb25SZXN1bHQgPSB7XG4gICAgICBvcGVyYXRpb246IG9wdGlvbnMub3JkaW5hdGUub3BlcmF0aW9uLFxuICAgICAgdmFsdWVzOiBbXVxuICAgIH07XG5cbiAgICBpZiAoIW9wdGlvbnMuZ3JvdXBCeSkge1xuICAgICAgaWYgKCEhb3B0aW9ucy5vcmRpbmF0ZS5vcGVyYXRpb24pIGNvbnNvbGUud2Fybignbm8gb3JkaW5hdGUgb3BlcmF0aW9uIHNlbGVjdGVkJyk7XG4gICAgICBhZ2dyZWdhdGlvblJlc3VsdC52YWx1ZXMgPSB0aGlzLmdldENoYXJ0RGF0YUJhc2VkT25PcGVyYXRpb24oXG4gICAgICAgIGl0ZW1zLFxuICAgICAgICBvcHRpb25zLm9yZGluYXRlLm9wZXJhdGlvbixcbiAgICAgICAgYWJzY2lzc2EsXG4gICAgICAgIG9yZGluYXRlLFxuICAgICAgICBvcHRpb25zLmFic2Npc3NhLmxpbWl0XG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coYWdncmVnYXRpb25SZXN1bHQudmFsdWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZ3JvdXBCeUF0dHJpYnV0ZSA9XG4gICAgICAgIGNsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLmlkID09PSBvcHRpb25zLmdyb3VwQnk/LmF0dHJpYnV0ZSkpXG4gICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik/Lm5hbWUgPz8gJyc7XG4gICAgICBjb25zdCBpdGVtc0dyb3VwZWQ6IHsgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogSXRlbVtdIH0gPSB0aGlzLmdldEl0ZW1zR3JvdXBlZEJ5QXR0cmlidXRlVmFsdWUoXG4gICAgICAgIGl0ZW1zLFxuICAgICAgICBncm91cEJ5QXR0cmlidXRlXG4gICAgICApO1xuXG4gICAgICBhZ2dyZWdhdGlvblJlc3VsdC52YWx1ZXMgPSBPYmplY3Qua2V5cyhpdGVtc0dyb3VwZWQpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIGdyb3VwQnk6IHRoaXMuZ2V0Q2hhcnREYXRhQmFzZWRPbk9wZXJhdGlvbihcbiAgICAgICAgICBpdGVtc0dyb3VwZWRba2V5XSxcbiAgICAgICAgICBvcHRpb25zLm9yZGluYXRlLm9wZXJhdGlvbixcbiAgICAgICAgICBhYnNjaXNzYSxcbiAgICAgICAgICBvcmRpbmF0ZSxcbiAgICAgICAgICBvcHRpb25zLmFic2Npc3NhLmxpbWl0XG4gICAgICAgIClcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFnZ3JlZ2F0aW9uUmVzdWx0O1xuICB9XG5cbiAgZ2V0SXRlbXNHcm91cGVkQnlBdHRyaWJ1dGVWYWx1ZShpdGVtczogSXRlbVtdLCBhdHRyaWJ1dGU6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogSXRlbVtdIH0ge1xuICAgIGlmIChhdHRyaWJ1dGUgPT09ICcnKSBjb25zb2xlLndhcm4oJ2dyb3VwQnkgYXR0cmlidXRlIG5vdCBmb3VuZCcpO1xuICAgIGxldCBkaXN0aW5jdFZhbHVlczogeyBba2V5OiBzdHJpbmcgfCBudW1iZXJdOiBJdGVtW10gfSA9IHt9O1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IEl0ZW0pID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IEFnZ3JlZ2F0aW9uVXRpbHMuZ2V0VmFsdWVGcm9tQXR0cmlidXRlKGl0ZW0sIGF0dHJpYnV0ZSk/LnZhbHVlIGFzIHN0cmluZyB8IG51bWJlcjtcbiAgICAgIGlmICghIXZhbHVlKSBkaXN0aW5jdFZhbHVlc1t2YWx1ZV0gPSBbLi4uKGRpc3RpbmN0VmFsdWVzW3ZhbHVlXSA/PyBbXSksIGl0ZW1dO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXN0aW5jdFZhbHVlcztcbiAgfVxuXG4gIC8vIGdldCB7IGtleSwgdmFsdWUgfSBvYmplY3QgbGlzdCB0aGF0IHdpbGwgYmUgb3VyIGRhdGEgdG8gc2hvdyBpbiB0aGUgY2hhcnRcbiAgZ2V0Q2hhcnREYXRhQmFzZWRPbk9wZXJhdGlvbihcbiAgICBpdGVtczogSXRlbVtdLFxuICAgIG9wZXJhdGlvbjogT3BlcmF0aW9uLFxuICAgIGFic2Npc3NhOiBzdHJpbmcsXG4gICAgb3JkaW5hdGU6IHN0cmluZyxcbiAgICBsaW1pdD86IEF0TGltaXQgfCBUaW1lTGltaXRcbiAgKTogeyBrZXk6IFZhbHVlVHlwZTsgdmFsdWU6IFZhbHVlVHlwZSB9W10ge1xuICAgIGlmIChhYnNjaXNzYSA9PT0gJycgfHwgb3JkaW5hdGUgPT09ICcnKSBjb25zb2xlLndhcm4oJ2Fic2Npc3NhIG9yIG9yZGluYXRlIGF0dHJpYnV0ZSBub3QgZm91bmQnKTtcbiAgICBjb25zdCBncm91cEJ5QWJzY2lzc2EgPSB0aGlzLmdldEl0ZW1zR3JvdXBlZEJ5QXR0cmlidXRlVmFsdWUoaXRlbXMsIGFic2Npc3NhKTtcbiAgICBsZXQgcmVzdWx0OiB7IGtleTogVmFsdWVUeXBlOyB2YWx1ZTogVmFsdWVUeXBlIH1bXSA9IFtcbiAgICAgIC4uLk9iamVjdC5rZXlzKGdyb3VwQnlBYnNjaXNzYSkubWFwKChhYnNjaXNzYUF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhBZ2dyZWdhdGlvblV0aWxzLmdldEFnZ3JlZ2F0ZWRWYWx1ZShvcGVyYXRpb24sIGdyb3VwQnlBYnNjaXNzYSwgYWJzY2lzc2FBdHRyaWJ1dGUsIG9yZGluYXRlID8/ICcnKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAga2V5OiArYWJzY2lzc2FBdHRyaWJ1dGUgfHwgYWJzY2lzc2FBdHRyaWJ1dGUsXG4gICAgICAgICAgdmFsdWU6IEFnZ3JlZ2F0aW9uVXRpbHMuZ2V0QWdncmVnYXRlZFZhbHVlKG9wZXJhdGlvbiwgZ3JvdXBCeUFic2Npc3NhLCBhYnNjaXNzYUF0dHJpYnV0ZSwgb3JkaW5hdGUgPz8gJycpXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgIF07XG5cbiAgICBpZiAobGltaXQpIHJlc3VsdCA9IEFnZ3JlZ2F0aW9uVXRpbHMuZm9ybWF0QnlMaW1pdChyZXN1bHQsIGxpbWl0LCBvcGVyYXRpb24pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
@@ -72,7 +72,7 @@ const namedQueriesUses = createSelector(globalManifest, (manifest) => manifest.w
72
72
  const presentation = createSelector(feature, (state) => state?.presentation);
73
73
  const isCurrentPresentationModified = createSelector(presentation, globalManifest, (state, global) => !equal(global, state.initial));
74
74
  const isCurrentPresentationOwner = createSelector(presentation, (state) => !!state.current && state.current.owner);
75
- const filters = createSelector(feature, (state) => state?.manifests.manifest.filters ?? {});
75
+ const filters = createSelector(feature, (state) => state?.manifests.manifest.filters ?? []);
76
76
  const datasourceFilters = createSelector(feature, (state) => state?.manifests.manifest.filters
77
77
  ? state?.manifests.manifest.filters.reduce((obj, filter) => (filter.attributes.forEach((attribute) => (obj[attribute.datasource] || (obj[attribute.datasource] = [])).push({
78
78
  attribute: attribute.id,
@@ -123,4 +123,4 @@ export const DashboardSelectors = {
123
123
  displayOptions,
124
124
  capabilities
125
125
  };
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLnNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvc3RvcmUvZGFzaGJvYXJkLnNlbGVjdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUN0RixPQUFPLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUd4QyxPQUFPLEVBQ0wsbUJBQW1CLEVBS3BCLE1BQU0scUNBQXFDLENBQUM7QUFLN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFN0IsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQWlCLGdCQUFnQixDQUFDLENBQUM7QUFDeEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNwRyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4RixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQ25DLFNBQVM7QUFDVCxhQUFhO0FBQ2IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFL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QUM7QUFDM0YsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLE9BQU87SUFDUCxJQUFJO0lBQ0osaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGNBQWM7SUFDZCxjQUFjO0lBQ2QsYUFBYTtJQUNiLFVBQVU7SUFDVixPQUFPO0lBQ1AsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsZUFBZTtJQUNmLFFBQVE7SUFDUixhQUFhO0lBQ2IsYUFBYTtJQUNiLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsU0FBUztJQUNULG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsY0FBYztJQUNkLE9BQU87SUFDUCxVQUFVO0lBQ1YsWUFBWTtJQUNaLE9BQU87SUFDUCw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsY0FBYztJQUNkLFlBQVk7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLCBjcmVhdGVTZWxlY3RvciwgTWVtb2l6ZWRTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRHcmlkTGF5b3V0LFxuICBEYXNoYm9hcmRNYW5pZmVzdCxcbiAgR2xvYmFsTWFuaWZlc3QsXG4gIFdpZGdldExheW91dCxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0T3JkZXIgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL3Jlc3VsdC1vcmRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0U2V0LCBSZXN1bHRTZXRzIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9yZXN1bHQtc2V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDZWxsUGFyYW1zLCBWaWV3TW9kZSB9IGZyb20gJy4vZGFzaGJvYXJkLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU3RhdGUgfSBmcm9tICcuL2Rhc2hib2FyZC5yZWR1Y2Vycyc7XG5pbXBvcnQgeyBNYW5pZmVzdFV0aWxzIH0gZnJvbSAnLi9tYW5pZmVzdC11dGlscy5jbGFzcyc7XG5cbmNvbnN0IE5FV19XSU5ET1dfVEFSR0VUID0gLTE7XG5cbmNvbnN0IGZlYXR1cmUgPSBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8RGFzaGJvYXJkU3RhdGU+KCdAcHJ5L2Rhc2hib2FyZCcpO1xuY29uc3QgbWFuaWZlc3RzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/Lm1hbmlmZXN0cyk7XG5jb25zdCByYW5rID0gY3JlYXRlU2VsZWN0b3IobWFuaWZlc3RzLCAobWFuaWZlc3RzKSA9PiBtYW5pZmVzdHM/LnRlbmFudHMuaW5kZXhPZihtYW5pZmVzdHMuc2VuZGVyKSk7XG5jb25zdCBjdXJyZW50TWFuaWZlc3RJZCA9IGNyZWF0ZVNlbGVjdG9yKG1hbmlmZXN0cywgKG1hbmlmZXN0cykgPT4gbWFuaWZlc3RzLmN1cnJlbnRJZCk7XG5jb25zdCBnbG9iYWxNYW5pZmVzdCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBtYW5pZmVzdHMsXG4gIC8vIEB0cy1pZ25vcmVcbiAgKG1hbmlmZXN0cykgPT4gKHsgd2luZG93czogW10sIC4uLm1hbmlmZXN0cz8ubWFuaWZlc3QgfSA/PyAoeyB3aW5kb3dzOiBbXSB9IGFzIEdsb2JhbE1hbmlmZXN0KSlcbik7XG5jb25zdCBtYW5pZmVzdERhdGFzb3VyY2VzID0gY3JlYXRlU2VsZWN0b3IoZ2xvYmFsTWFuaWZlc3QsIChtYW5pZmVzdCkgPT5cbiAgTWFuaWZlc3RVdGlscy5nZXREYXRhc291cmNlc1VzZWRCeU1hbmlmZXN0KG1hbmlmZXN0KVxuKTtcbmNvbnN0IHN0YXRpY01hbmlmZXN0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIG1hbmlmZXN0cyxcbiAgLy8gQHRzLWlnbm9yZVxuICAobWFuaWZlc3RzKSA9PiAoeyB3aW5kb3dzOiBbXSwgLi4ubWFuaWZlc3RzPy5zdGF0aWNNYW5pZmVzdCB9ID8/ICh7IHdpbmRvd3M6IFtdIH0gYXMgR2xvYmFsTWFuaWZlc3QpKVxuKTtcbmNvbnN0IGxvYWRpbmcgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+ICEhbWFuaWZlc3RzPy5sb2FkaW5nKTtcbmNvbnN0IHJlZnJlc2hSYXRlcyA9IGNyZWF0ZVNlbGVjdG9yKGdsb2JhbE1hbmlmZXN0LCAobWFuaWZlc3RzKSA9PiBtYW5pZmVzdHMucmVmcmVzaFJhdGVzID8/IHt9KTtcbmNvbnN0IHdpbmRvd01hbmlmZXN0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdsb2JhbE1hbmlmZXN0LFxuICByYW5rLFxuICAobWFuaWZlc3QsIHJhbmspID0+IG1hbmlmZXN0LndpbmRvd3NbcmFua10gPz8gPERhc2hib2FyZE1hbmlmZXN0Pnsgd2lkZ2V0czogW10gfVxuKTtcbmNvbnN0IGdyaWRMYXlvdXQgPSBjcmVhdGVTZWxlY3RvcihcbiAgd2luZG93TWFuaWZlc3QsXG4gIChtYW5pZmVzdCkgPT4gKG1hbmlmZXN0LmdyaWQgPz8ge30pLmxheW91dCA/PyBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTFxuKTtcbmNvbnN0IG1lbW9pemVXaWRnZXRNYW5pZmVzdCA9IHt9IGFzIGFueTtcbmNvbnN0IHdpZGdldE1hbmlmZXN0ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgaWYgKCFtZW1vaXplV2lkZ2V0TWFuaWZlc3RbaW5kZXhdKSB7XG4gICAgbWVtb2l6ZVdpZGdldE1hbmlmZXN0W2luZGV4XSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgd2luZG93TWFuaWZlc3QsXG4gICAgICAod2luZG93TWFuaWZlc3Q6IERhc2hib2FyZE1hbmlmZXN0KSA9PlxuICAgICAgICB3aW5kb3dNYW5pZmVzdC53aWRnZXRzW2luZGV4XSA/P1xuICAgICAgICAoe1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IDEsIHk6IDEsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfVxuICAgICAgICB9IGFzIFdpZGdldE1hbmlmZXN0KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1lbW9pemVXaWRnZXRNYW5pZmVzdFtpbmRleF0gYXMgTWVtb2l6ZWRTZWxlY3RvcjxEYXNoYm9hcmRNYW5pZmVzdCwgV2lkZ2V0TWFuaWZlc3Q+O1xufTtcbmNvbnN0IG1hbmlmZXN0c0xpc3QgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+IG1hbmlmZXN0cy5saXN0KTtcbmNvbnN0IHRlbmFudHMgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+IG1hbmlmZXN0cy50ZW5hbnRzID8/IDxzdHJpbmdbXT5bXSk7XG5jb25zdCB0YXJnZXRUZW5hbnRzSW5kZXhlcyA9IGNyZWF0ZVNlbGVjdG9yKG1hbmlmZXN0cywgcmFuaywgKG1hbmlmZXN0cywgcmFuaykgPT4gW1xuICBORVdfV0lORE9XX1RBUkdFVCxcbiAgLi4uKG1hbmlmZXN0cy50ZW5hbnRzID8/IChbXSBhcyBzdHJpbmdbXSkpLm1hcCgodGVuLCBpZHgpID0+IGlkeCkuZmlsdGVyKChpZHgpID0+IGlkeCAhPT0gcmFuaylcbl0pO1xuY29uc3QgcmVzdWx0cyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+IHN0YXRlPy5yZXN1bHRzKTtcbmNvbnN0IHJlc3VsdFNldHMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5yZXN1bHRTZXRzID8/ICh7fSBhcyBSZXN1bHRTZXRzKSk7XG5jb25zdCByZXN1bHRTZXRzUGFyYW1zID0gY3JlYXRlU2VsZWN0b3IoXG4gIHJlc3VsdHMsXG4gIChyZXN1bHRzKSA9PiByZXN1bHRzLnJlc3VsdFNldHNQYXJhbXMgPz8gKHt9IGFzIHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSlcbik7XG5jb25zdCBuYW1lZFF1ZXJpZXNOYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdFNldHMsIChzdGF0ZTogUmVzdWx0U2V0cykgPT4gT2JqZWN0LmtleXMoc3RhdGUpID8/IDxzdHJpbmdbXT5bXSk7XG5jb25zdCBhdmFpbGFibGVOYW1lZFF1ZXJpZXMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLnJlc3VsdHMuYXZhaWxhYmxlRGF0YXNvdXJjZU5hbWVzLCAuLi5PYmplY3Qua2V5cyhyZXN1bHRzLnJlc3VsdFNldHMpXSldID8/IDxzdHJpbmdbXT5bXTtcbn0pO1xuY29uc3QgZGVmYXVsdERhdGFzb3VyY2VOYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdHMsIChyZXN1bHRzKSA9PiByZXN1bHRzLmRlZmF1bHREYXRhc291cmNlID8/ICdjdXJyZW50Jyk7XG5jb25zdCBzZWxlY3RlZEl0ZW1JZHMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5zZWxlY3RlZEl0ZW1zID8/IChbXSBhcyBzdHJpbmdbXSkpO1xuY29uc3Qgb2JqZWN0RGV0YWlscyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdHMsIChyZXN1bHRzKSA9PiByZXN1bHRzLm9iamVjdERldGFpbHMgPz8gKHt9IGFzIHsgW2lkOiBzdHJpbmddOiBJdGVtIH0pKTtcbmNvbnN0IHF1aWNrT3JkZXIgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5xdWlja09yZGVyID8/ICh7fSBhcyB7IFtpZDogc3RyaW5nXTogUmVzdWx0T3JkZXIgfSkpO1xuY29uc3QgYWxsSXRlbXMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT5cbiAgT2JqZWN0LmtleXMocmVzdWx0cy5yZXN1bHRTZXRzKVxuICAgIC5tYXAoKHJzS2V5KSA9PlxuICAgICAgT2JqZWN0LmtleXMocmVzdWx0cy5yZXN1bHRTZXRzW3JzS2V5XS5pdGVtcylcbiAgICAgICAgLm1hcCgoY2xhc3NLZXkpID0+IChyZXN1bHRzLnJlc3VsdFNldHNbcnNLZXldIGFzIFJlc3VsdFNldCkuaXRlbXNbY2xhc3NLZXldKVxuICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgIClcbiAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuKTtcbmNvbnN0IGdldEl0ZW1zQnlJZHMgPSAoaWRzOiBzdHJpbmdbXSkgPT5cbiAgY3JlYXRlU2VsZWN0b3IoYWxsSXRlbXMsIChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpZHMuaW5jbHVkZXMoaXRlbS5pZCkpKTtcbmNvbnN0IHNlbGVjdGVkSXRlbXMgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0ZWRJdGVtSWRzLFxuICBhbGxJdGVtcyxcbiAgKGl0ZW1OYW1lcywgYWxsSXRlbXMpID0+IGl0ZW1OYW1lcy5tYXAoKG5hbWUpID0+IGFsbEl0ZW1zLmZpbmQoKGl0KSA9PiBpdC5pZCA9PT0gbmFtZSkpID8/IChbXSBhcyBJdGVtW10pXG4pO1xuY29uc3QgZGFzaGJvYXJkID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmRhc2hib2FyZCA/PyB7fSk7XG5jb25zdCBkYXNoYm9hcmRDZWxsUGFyYW1zID0gY3JlYXRlU2VsZWN0b3IoZGFzaGJvYXJkLCAoZGFzaGJvYXJkKSA9PiBkYXNoYm9hcmQucGFyYW1zID8/IDxEYXNoYm9hcmRDZWxsUGFyYW1zPnt9KTtcbmNvbnN0IGRhc2hib2FyZEVkaXRpb25Nb2RlID0gY3JlYXRlU2VsZWN0b3IoZGFzaGJvYXJkLCAoZGFzaGJvYXJkKSA9PiBkYXNoYm9hcmQuZWRpdGlvbk1vZGUgPz8gZmFsc2UpO1xuY29uc3QgbmFtZWRRdWVyaWVzVXNlcyA9IGNyZWF0ZVNlbGVjdG9yKGdsb2JhbE1hbmlmZXN0LCAobWFuaWZlc3QpID0+XG4gIG1hbmlmZXN0LndpbmRvd3NcbiAgICAubWFwKCh3aW5kb3csIGlkeCkgPT4gKHsgd2luZG93SW5kZXg6IGlkeCwgd2lkZ2V0czogd2luZG93LndpZGdldHMgfSkpXG4gICAgLm1hcCgoeyB3aW5kb3dJbmRleCwgd2lkZ2V0cyB9KSA9PlxuICAgICAgd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT5cbiAgICAgICAgKEFycmF5LmlzQXJyYXkod2lkZ2V0LmRhdGFzb3VyY2UpID8gd2lkZ2V0LmRhdGFzb3VyY2UgOiBbd2lkZ2V0LmRhdGFzb3VyY2VdKVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4gcnNOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgocnNOYW1lKSA9PiAoe1xuICAgICAgICAgICAgcnNOYW1lLFxuICAgICAgICAgICAgd2luZG93SW5kZXgsXG4gICAgICAgICAgICB0eXBlOiB3aWRnZXQudHlwZSxcbiAgICAgICAgICAgIGxheW91dDogd2lkZ2V0LmxheW91dFxuICAgICAgICAgIH0pKVxuICAgICAgKVxuICAgIClcbiAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgLnJlZHVjZShcbiAgICAgIChwLCBjKSA9PiAoeyAuLi5wLCBbYy5yc05hbWUgPz8gJyddOiBbLi4uKHBbYy5yc05hbWUgPz8gJyddIHx8IFtdKSwgeyAuLi5jIH1dIH0pLFxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiB7IHdpbmRvd0luZGV4OiBudW1iZXI7IHR5cGU6IHN0cmluZzsgbGF5b3V0OiBXaWRnZXRMYXlvdXQ7IHJzTmFtZT86IHN0cmluZyB9W10gfVxuICAgIClcbik7XG5jb25zdCBwcmVzZW50YXRpb24gPSBjcmVhdGVTZWxlY3RvcihmZWF0dXJlLCAoc3RhdGU6IERhc2hib2FyZFN0YXRlKSA9PiBzdGF0ZT8ucHJlc2VudGF0aW9uKTtcbmNvbnN0IGlzQ3VycmVudFByZXNlbnRhdGlvbk1vZGlmaWVkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHByZXNlbnRhdGlvbixcbiAgZ2xvYmFsTWFuaWZlc3QsXG4gIChzdGF0ZSwgZ2xvYmFsKSA9PiAhZXF1YWwoZ2xvYmFsLCBzdGF0ZS5pbml0aWFsKVxuKTtcbmNvbnN0IGlzQ3VycmVudFByZXNlbnRhdGlvbk93bmVyID0gY3JlYXRlU2VsZWN0b3IocHJlc2VudGF0aW9uLCAoc3RhdGUpID0+ICEhc3RhdGUuY3VycmVudCAmJiBzdGF0ZS5jdXJyZW50Lm93bmVyKTtcblxuY29uc3QgZmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+IHN0YXRlPy5tYW5pZmVzdHMubWFuaWZlc3QuZmlsdGVycyA/PyB7fSk7XG5jb25zdCBkYXRhc291cmNlRmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+XG4gIHN0YXRlPy5tYW5pZmVzdHMubWFuaWZlc3QuZmlsdGVyc1xuICAgID8gc3RhdGU/Lm1hbmlmZXN0cy5tYW5pZmVzdC5maWx0ZXJzLnJlZHVjZShcbiAgICAgICAgKG9iajogeyBbZGF0YXNvdXJjZUlkOiBzdHJpbmddOiBGaWx0ZXJDb250ZXh0W10gfSwgZmlsdGVyOiBGaWx0ZXIpID0+IChcbiAgICAgICAgICBmaWx0ZXIuYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAob2JqW2F0dHJpYnV0ZS5kYXRhc291cmNlXSB8fCAob2JqW2F0dHJpYnV0ZS5kYXRhc291cmNlXSA9IFtdKSkucHVzaCh7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlLmlkLFxuICAgICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8/ICcnLFxuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgb2JqXG4gICAgICAgICksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgOiB7fVxuKTtcbmNvbnN0IHdtc0ZlYXR1cmVzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/Lndtc0ZlYXR1cmVzKTtcbmNvbnN0IGRpc3BsYXlPcHRpb25zID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmRpc3BsYXkpO1xuY29uc3QgY2FwYWJpbGl0aWVzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmNhcGFiaWxpdGllcyk7XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRTZWxlY3RvcnMgPSB7XG4gIGZlYXR1cmUsXG4gIHJhbmssXG4gIGN1cnJlbnRNYW5pZmVzdElkLFxuICBnbG9iYWxNYW5pZmVzdCxcbiAgbWFuaWZlc3REYXRhc291cmNlcyxcbiAgcmVmcmVzaFJhdGVzLFxuICB3aW5kb3dNYW5pZmVzdCxcbiAgd2lkZ2V0TWFuaWZlc3QsXG4gIG1hbmlmZXN0c0xpc3QsXG4gIGdyaWRMYXlvdXQsXG4gIHRlbmFudHMsXG4gIHJlc3VsdFNldHMsXG4gIHJlc3VsdFNldHNQYXJhbXMsXG4gIG5hbWVkUXVlcmllc05hbWVzLFxuICBuYW1lZFF1ZXJpZXNVc2VzLFxuICBhdmFpbGFibGVOYW1lZFF1ZXJpZXMsXG4gIGRlZmF1bHREYXRhc291cmNlTmFtZXMsXG4gIHNlbGVjdGVkSXRlbUlkcyxcbiAgYWxsSXRlbXMsXG4gIGdldEl0ZW1zQnlJZHMsXG4gIHNlbGVjdGVkSXRlbXMsXG4gIG9iamVjdERldGFpbHMsXG4gIHRhcmdldFRlbmFudHNJbmRleGVzLFxuICBkYXNoYm9hcmQsXG4gIGRhc2hib2FyZENlbGxQYXJhbXMsXG4gIGRhc2hib2FyZEVkaXRpb25Nb2RlLFxuICBzdGF0aWNNYW5pZmVzdCxcbiAgbG9hZGluZyxcbiAgcXVpY2tPcmRlcixcbiAgcHJlc2VudGF0aW9uLFxuICBmaWx0ZXJzLFxuICBpc0N1cnJlbnRQcmVzZW50YXRpb25Nb2RpZmllZCxcbiAgaXNDdXJyZW50UHJlc2VudGF0aW9uT3duZXIsXG4gIGRhdGFzb3VyY2VGaWx0ZXJzLFxuICB3bXNGZWF0dXJlcyxcbiAgZGlzcGxheU9wdGlvbnMsXG4gIGNhcGFiaWxpdGllc1xufTtcbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLnNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvc3RvcmUvZGFzaGJvYXJkLnNlbGVjdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUN0RixPQUFPLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUd4QyxPQUFPLEVBQ0wsbUJBQW1CLEVBS3BCLE1BQU0scUNBQXFDLENBQUM7QUFLN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFN0IsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQWlCLGdCQUFnQixDQUFDLENBQUM7QUFDeEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNwRyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4RixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQ25DLFNBQVM7QUFDVCxhQUFhO0FBQ2IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFL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QUM7QUFDM0YsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLE9BQU87SUFDUCxJQUFJO0lBQ0osaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGNBQWM7SUFDZCxjQUFjO0lBQ2QsYUFBYTtJQUNiLFVBQVU7SUFDVixPQUFPO0lBQ1AsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsZUFBZTtJQUNmLFFBQVE7SUFDUixhQUFhO0lBQ2IsYUFBYTtJQUNiLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsU0FBUztJQUNULG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsY0FBYztJQUNkLE9BQU87SUFDUCxVQUFVO0lBQ1YsWUFBWTtJQUNaLE9BQU87SUFDUCw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsY0FBYztJQUNkLFlBQVk7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLCBjcmVhdGVTZWxlY3RvciwgTWVtb2l6ZWRTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRHcmlkTGF5b3V0LFxuICBEYXNoYm9hcmRNYW5pZmVzdCxcbiAgR2xvYmFsTWFuaWZlc3QsXG4gIFdpZGdldExheW91dCxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0T3JkZXIgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL3Jlc3VsdC1vcmRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0U2V0LCBSZXN1bHRTZXRzIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9yZXN1bHQtc2V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDZWxsUGFyYW1zLCBWaWV3TW9kZSB9IGZyb20gJy4vZGFzaGJvYXJkLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU3RhdGUgfSBmcm9tICcuL2Rhc2hib2FyZC5yZWR1Y2Vycyc7XG5pbXBvcnQgeyBNYW5pZmVzdFV0aWxzIH0gZnJvbSAnLi9tYW5pZmVzdC11dGlscy5jbGFzcyc7XG5cbmNvbnN0IE5FV19XSU5ET1dfVEFSR0VUID0gLTE7XG5cbmNvbnN0IGZlYXR1cmUgPSBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8RGFzaGJvYXJkU3RhdGU+KCdAcHJ5L2Rhc2hib2FyZCcpO1xuY29uc3QgbWFuaWZlc3RzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/Lm1hbmlmZXN0cyk7XG5jb25zdCByYW5rID0gY3JlYXRlU2VsZWN0b3IobWFuaWZlc3RzLCAobWFuaWZlc3RzKSA9PiBtYW5pZmVzdHM/LnRlbmFudHMuaW5kZXhPZihtYW5pZmVzdHMuc2VuZGVyKSk7XG5jb25zdCBjdXJyZW50TWFuaWZlc3RJZCA9IGNyZWF0ZVNlbGVjdG9yKG1hbmlmZXN0cywgKG1hbmlmZXN0cykgPT4gbWFuaWZlc3RzLmN1cnJlbnRJZCk7XG5jb25zdCBnbG9iYWxNYW5pZmVzdCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBtYW5pZmVzdHMsXG4gIC8vIEB0cy1pZ25vcmVcbiAgKG1hbmlmZXN0cykgPT4gKHsgd2luZG93czogW10sIC4uLm1hbmlmZXN0cz8ubWFuaWZlc3QgfSA/PyAoeyB3aW5kb3dzOiBbXSB9IGFzIEdsb2JhbE1hbmlmZXN0KSlcbik7XG5jb25zdCBtYW5pZmVzdERhdGFzb3VyY2VzID0gY3JlYXRlU2VsZWN0b3IoZ2xvYmFsTWFuaWZlc3QsIChtYW5pZmVzdCkgPT5cbiAgTWFuaWZlc3RVdGlscy5nZXREYXRhc291cmNlc1VzZWRCeU1hbmlmZXN0KG1hbmlmZXN0KVxuKTtcbmNvbnN0IHN0YXRpY01hbmlmZXN0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIG1hbmlmZXN0cyxcbiAgLy8gQHRzLWlnbm9yZVxuICAobWFuaWZlc3RzKSA9PiAoeyB3aW5kb3dzOiBbXSwgLi4ubWFuaWZlc3RzPy5zdGF0aWNNYW5pZmVzdCB9ID8/ICh7IHdpbmRvd3M6IFtdIH0gYXMgR2xvYmFsTWFuaWZlc3QpKVxuKTtcbmNvbnN0IGxvYWRpbmcgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+ICEhbWFuaWZlc3RzPy5sb2FkaW5nKTtcbmNvbnN0IHJlZnJlc2hSYXRlcyA9IGNyZWF0ZVNlbGVjdG9yKGdsb2JhbE1hbmlmZXN0LCAobWFuaWZlc3RzKSA9PiBtYW5pZmVzdHMucmVmcmVzaFJhdGVzID8/IHt9KTtcbmNvbnN0IHdpbmRvd01hbmlmZXN0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdsb2JhbE1hbmlmZXN0LFxuICByYW5rLFxuICAobWFuaWZlc3QsIHJhbmspID0+IG1hbmlmZXN0LndpbmRvd3NbcmFua10gPz8gPERhc2hib2FyZE1hbmlmZXN0Pnsgd2lkZ2V0czogW10gfVxuKTtcbmNvbnN0IGdyaWRMYXlvdXQgPSBjcmVhdGVTZWxlY3RvcihcbiAgd2luZG93TWFuaWZlc3QsXG4gIChtYW5pZmVzdCkgPT4gKG1hbmlmZXN0LmdyaWQgPz8ge30pLmxheW91dCA/PyBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTFxuKTtcbmNvbnN0IG1lbW9pemVXaWRnZXRNYW5pZmVzdCA9IHt9IGFzIGFueTtcbmNvbnN0IHdpZGdldE1hbmlmZXN0ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgaWYgKCFtZW1vaXplV2lkZ2V0TWFuaWZlc3RbaW5kZXhdKSB7XG4gICAgbWVtb2l6ZVdpZGdldE1hbmlmZXN0W2luZGV4XSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgd2luZG93TWFuaWZlc3QsXG4gICAgICAod2luZG93TWFuaWZlc3Q6IERhc2hib2FyZE1hbmlmZXN0KSA9PlxuICAgICAgICB3aW5kb3dNYW5pZmVzdC53aWRnZXRzW2luZGV4XSA/P1xuICAgICAgICAoe1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IDEsIHk6IDEsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfVxuICAgICAgICB9IGFzIFdpZGdldE1hbmlmZXN0KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1lbW9pemVXaWRnZXRNYW5pZmVzdFtpbmRleF0gYXMgTWVtb2l6ZWRTZWxlY3RvcjxEYXNoYm9hcmRNYW5pZmVzdCwgV2lkZ2V0TWFuaWZlc3Q+O1xufTtcbmNvbnN0IG1hbmlmZXN0c0xpc3QgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+IG1hbmlmZXN0cy5saXN0KTtcbmNvbnN0IHRlbmFudHMgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+IG1hbmlmZXN0cy50ZW5hbnRzID8/IDxzdHJpbmdbXT5bXSk7XG5jb25zdCB0YXJnZXRUZW5hbnRzSW5kZXhlcyA9IGNyZWF0ZVNlbGVjdG9yKG1hbmlmZXN0cywgcmFuaywgKG1hbmlmZXN0cywgcmFuaykgPT4gW1xuICBORVdfV0lORE9XX1RBUkdFVCxcbiAgLi4uKG1hbmlmZXN0cy50ZW5hbnRzID8/IChbXSBhcyBzdHJpbmdbXSkpLm1hcCgodGVuLCBpZHgpID0+IGlkeCkuZmlsdGVyKChpZHgpID0+IGlkeCAhPT0gcmFuaylcbl0pO1xuY29uc3QgcmVzdWx0cyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+IHN0YXRlPy5yZXN1bHRzKTtcbmNvbnN0IHJlc3VsdFNldHMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5yZXN1bHRTZXRzID8/ICh7fSBhcyBSZXN1bHRTZXRzKSk7XG5jb25zdCByZXN1bHRTZXRzUGFyYW1zID0gY3JlYXRlU2VsZWN0b3IoXG4gIHJlc3VsdHMsXG4gIChyZXN1bHRzKSA9PiByZXN1bHRzLnJlc3VsdFNldHNQYXJhbXMgPz8gKHt9IGFzIHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSlcbik7XG5jb25zdCBuYW1lZFF1ZXJpZXNOYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdFNldHMsIChzdGF0ZTogUmVzdWx0U2V0cykgPT4gT2JqZWN0LmtleXMoc3RhdGUpID8/IDxzdHJpbmdbXT5bXSk7XG5jb25zdCBhdmFpbGFibGVOYW1lZFF1ZXJpZXMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLnJlc3VsdHMuYXZhaWxhYmxlRGF0YXNvdXJjZU5hbWVzLCAuLi5PYmplY3Qua2V5cyhyZXN1bHRzLnJlc3VsdFNldHMpXSldID8/IDxzdHJpbmdbXT5bXTtcbn0pO1xuY29uc3QgZGVmYXVsdERhdGFzb3VyY2VOYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdHMsIChyZXN1bHRzKSA9PiByZXN1bHRzLmRlZmF1bHREYXRhc291cmNlID8/ICdjdXJyZW50Jyk7XG5jb25zdCBzZWxlY3RlZEl0ZW1JZHMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5zZWxlY3RlZEl0ZW1zID8/IChbXSBhcyBzdHJpbmdbXSkpO1xuY29uc3Qgb2JqZWN0RGV0YWlscyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdHMsIChyZXN1bHRzKSA9PiByZXN1bHRzLm9iamVjdERldGFpbHMgPz8gKHt9IGFzIHsgW2lkOiBzdHJpbmddOiBJdGVtIH0pKTtcbmNvbnN0IHF1aWNrT3JkZXIgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5xdWlja09yZGVyID8/ICh7fSBhcyB7IFtpZDogc3RyaW5nXTogUmVzdWx0T3JkZXIgfSkpO1xuY29uc3QgYWxsSXRlbXMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT5cbiAgT2JqZWN0LmtleXMocmVzdWx0cy5yZXN1bHRTZXRzKVxuICAgIC5tYXAoKHJzS2V5KSA9PlxuICAgICAgT2JqZWN0LmtleXMocmVzdWx0cy5yZXN1bHRTZXRzW3JzS2V5XS5pdGVtcylcbiAgICAgICAgLm1hcCgoY2xhc3NLZXkpID0+IChyZXN1bHRzLnJlc3VsdFNldHNbcnNLZXldIGFzIFJlc3VsdFNldCkuaXRlbXNbY2xhc3NLZXldKVxuICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgIClcbiAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuKTtcbmNvbnN0IGdldEl0ZW1zQnlJZHMgPSAoaWRzOiBzdHJpbmdbXSkgPT5cbiAgY3JlYXRlU2VsZWN0b3IoYWxsSXRlbXMsIChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpZHMuaW5jbHVkZXMoaXRlbS5pZCkpKTtcbmNvbnN0IHNlbGVjdGVkSXRlbXMgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0ZWRJdGVtSWRzLFxuICBhbGxJdGVtcyxcbiAgKGl0ZW1OYW1lcywgYWxsSXRlbXMpID0+IGl0ZW1OYW1lcy5tYXAoKG5hbWUpID0+IGFsbEl0ZW1zLmZpbmQoKGl0KSA9PiBpdC5pZCA9PT0gbmFtZSkpID8/IChbXSBhcyBJdGVtW10pXG4pO1xuY29uc3QgZGFzaGJvYXJkID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmRhc2hib2FyZCA/PyB7fSk7XG5jb25zdCBkYXNoYm9hcmRDZWxsUGFyYW1zID0gY3JlYXRlU2VsZWN0b3IoZGFzaGJvYXJkLCAoZGFzaGJvYXJkKSA9PiBkYXNoYm9hcmQucGFyYW1zID8/IDxEYXNoYm9hcmRDZWxsUGFyYW1zPnt9KTtcbmNvbnN0IGRhc2hib2FyZEVkaXRpb25Nb2RlID0gY3JlYXRlU2VsZWN0b3IoZGFzaGJvYXJkLCAoZGFzaGJvYXJkKSA9PiBkYXNoYm9hcmQuZWRpdGlvbk1vZGUgPz8gZmFsc2UpO1xuY29uc3QgbmFtZWRRdWVyaWVzVXNlcyA9IGNyZWF0ZVNlbGVjdG9yKGdsb2JhbE1hbmlmZXN0LCAobWFuaWZlc3QpID0+XG4gIG1hbmlmZXN0LndpbmRvd3NcbiAgICAubWFwKCh3aW5kb3csIGlkeCkgPT4gKHsgd2luZG93SW5kZXg6IGlkeCwgd2lkZ2V0czogd2luZG93LndpZGdldHMgfSkpXG4gICAgLm1hcCgoeyB3aW5kb3dJbmRleCwgd2lkZ2V0cyB9KSA9PlxuICAgICAgd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT5cbiAgICAgICAgKEFycmF5LmlzQXJyYXkod2lkZ2V0LmRhdGFzb3VyY2UpID8gd2lkZ2V0LmRhdGFzb3VyY2UgOiBbd2lkZ2V0LmRhdGFzb3VyY2VdKVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4gcnNOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgocnNOYW1lKSA9PiAoe1xuICAgICAgICAgICAgcnNOYW1lLFxuICAgICAgICAgICAgd2luZG93SW5kZXgsXG4gICAgICAgICAgICB0eXBlOiB3aWRnZXQudHlwZSxcbiAgICAgICAgICAgIGxheW91dDogd2lkZ2V0LmxheW91dFxuICAgICAgICAgIH0pKVxuICAgICAgKVxuICAgIClcbiAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgLnJlZHVjZShcbiAgICAgIChwLCBjKSA9PiAoeyAuLi5wLCBbYy5yc05hbWUgPz8gJyddOiBbLi4uKHBbYy5yc05hbWUgPz8gJyddIHx8IFtdKSwgeyAuLi5jIH1dIH0pLFxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiB7IHdpbmRvd0luZGV4OiBudW1iZXI7IHR5cGU6IHN0cmluZzsgbGF5b3V0OiBXaWRnZXRMYXlvdXQ7IHJzTmFtZT86IHN0cmluZyB9W10gfVxuICAgIClcbik7XG5jb25zdCBwcmVzZW50YXRpb24gPSBjcmVhdGVTZWxlY3RvcihmZWF0dXJlLCAoc3RhdGU6IERhc2hib2FyZFN0YXRlKSA9PiBzdGF0ZT8ucHJlc2VudGF0aW9uKTtcbmNvbnN0IGlzQ3VycmVudFByZXNlbnRhdGlvbk1vZGlmaWVkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHByZXNlbnRhdGlvbixcbiAgZ2xvYmFsTWFuaWZlc3QsXG4gIChzdGF0ZSwgZ2xvYmFsKSA9PiAhZXF1YWwoZ2xvYmFsLCBzdGF0ZS5pbml0aWFsKVxuKTtcbmNvbnN0IGlzQ3VycmVudFByZXNlbnRhdGlvbk93bmVyID0gY3JlYXRlU2VsZWN0b3IocHJlc2VudGF0aW9uLCAoc3RhdGUpID0+ICEhc3RhdGUuY3VycmVudCAmJiBzdGF0ZS5jdXJyZW50Lm93bmVyKTtcblxuY29uc3QgZmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+IHN0YXRlPy5tYW5pZmVzdHMubWFuaWZlc3QuZmlsdGVycyA/PyBbXSk7XG5jb25zdCBkYXRhc291cmNlRmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+XG4gIHN0YXRlPy5tYW5pZmVzdHMubWFuaWZlc3QuZmlsdGVyc1xuICAgID8gc3RhdGU/Lm1hbmlmZXN0cy5tYW5pZmVzdC5maWx0ZXJzLnJlZHVjZShcbiAgICAgICAgKG9iajogeyBbZGF0YXNvdXJjZUlkOiBzdHJpbmddOiBGaWx0ZXJDb250ZXh0W10gfSwgZmlsdGVyOiBGaWx0ZXIpID0+IChcbiAgICAgICAgICBmaWx0ZXIuYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAob2JqW2F0dHJpYnV0ZS5kYXRhc291cmNlXSB8fCAob2JqW2F0dHJpYnV0ZS5kYXRhc291cmNlXSA9IFtdKSkucHVzaCh7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlLmlkLFxuICAgICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8/ICcnLFxuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgb2JqXG4gICAgICAgICksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgOiB7fVxuKTtcbmNvbnN0IHdtc0ZlYXR1cmVzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/Lndtc0ZlYXR1cmVzKTtcbmNvbnN0IGRpc3BsYXlPcHRpb25zID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmRpc3BsYXkpO1xuY29uc3QgY2FwYWJpbGl0aWVzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmNhcGFiaWxpdGllcyk7XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRTZWxlY3RvcnMgPSB7XG4gIGZlYXR1cmUsXG4gIHJhbmssXG4gIGN1cnJlbnRNYW5pZmVzdElkLFxuICBnbG9iYWxNYW5pZmVzdCxcbiAgbWFuaWZlc3REYXRhc291cmNlcyxcbiAgcmVmcmVzaFJhdGVzLFxuICB3aW5kb3dNYW5pZmVzdCxcbiAgd2lkZ2V0TWFuaWZlc3QsXG4gIG1hbmlmZXN0c0xpc3QsXG4gIGdyaWRMYXlvdXQsXG4gIHRlbmFudHMsXG4gIHJlc3VsdFNldHMsXG4gIHJlc3VsdFNldHNQYXJhbXMsXG4gIG5hbWVkUXVlcmllc05hbWVzLFxuICBuYW1lZFF1ZXJpZXNVc2VzLFxuICBhdmFpbGFibGVOYW1lZFF1ZXJpZXMsXG4gIGRlZmF1bHREYXRhc291cmNlTmFtZXMsXG4gIHNlbGVjdGVkSXRlbUlkcyxcbiAgYWxsSXRlbXMsXG4gIGdldEl0ZW1zQnlJZHMsXG4gIHNlbGVjdGVkSXRlbXMsXG4gIG9iamVjdERldGFpbHMsXG4gIHRhcmdldFRlbmFudHNJbmRleGVzLFxuICBkYXNoYm9hcmQsXG4gIGRhc2hib2FyZENlbGxQYXJhbXMsXG4gIGRhc2hib2FyZEVkaXRpb25Nb2RlLFxuICBzdGF0aWNNYW5pZmVzdCxcbiAgbG9hZGluZyxcbiAgcXVpY2tPcmRlcixcbiAgcHJlc2VudGF0aW9uLFxuICBmaWx0ZXJzLFxuICBpc0N1cnJlbnRQcmVzZW50YXRpb25Nb2RpZmllZCxcbiAgaXNDdXJyZW50UHJlc2VudGF0aW9uT3duZXIsXG4gIGRhdGFzb3VyY2VGaWx0ZXJzLFxuICB3bXNGZWF0dXJlcyxcbiAgZGlzcGxheU9wdGlvbnMsXG4gIGNhcGFiaWxpdGllc1xufTtcbiJdfQ==