@mediusinc/mng-commons 2.3.1 → 2.4.0

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 (26) hide show
  1. package/assets/i18n/en.json +3 -1
  2. package/assets/i18n/sl.json +3 -1
  3. package/esm2020/lib/api/utils/medius-rest.util.mjs +58 -36
  4. package/esm2020/lib/components/action/editor/action-editor.component.mjs +5 -3
  5. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +7 -1
  6. package/esm2020/lib/components/form/formly/formly.config.mjs +31 -3
  7. package/esm2020/lib/components/tableview/table/table.component.mjs +8 -8
  8. package/esm2020/lib/descriptors/editor/field.descriptor.mjs +8 -1
  9. package/esm2020/lib/descriptors/filter/filter.descriptor.mjs +3 -3
  10. package/esm2020/lib/provide-commons.mjs +4 -2
  11. package/esm2020/lib/services/commons.service.mjs +6 -4
  12. package/esm2020/lib/services/providers/formly-config.provider.mjs +3 -3
  13. package/esm2020/lib/validators/field.validator.mjs +33 -0
  14. package/esm2020/lib/validators/index.mjs +2 -0
  15. package/fesm2015/mediusinc-mng-commons.mjs +156 -54
  16. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  17. package/fesm2020/mediusinc-mng-commons.mjs +153 -53
  18. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  19. package/lib/api/utils/medius-rest.util.d.ts +19 -8
  20. package/lib/components/form/formly/formly.config.d.ts +4 -1
  21. package/lib/components/tableview/table/table.component.d.ts +1 -2
  22. package/lib/descriptors/filter/filter.descriptor.d.ts +4 -4
  23. package/lib/services/providers/formly-config.provider.d.ts +2 -1
  24. package/lib/validators/field.validator.d.ts +3 -0
  25. package/lib/validators/index.d.ts +1 -0
  26. package/package.json +1 -1
@@ -56,7 +56,9 @@
56
56
  "min": "Input number must not be lower than {{min}}.",
57
57
  "max": "Input number must not be greater than {{max}}.",
58
58
  "pattern": "Input string must match the pattern '{{pattern}}'.",
59
- "email": "Invalid email address."
59
+ "email": "Invalid email address.",
60
+ "minDate": "Date must not be earlier than {{min}}.",
61
+ "maxDate": "Date must not be later than {{max}}."
60
62
  },
61
63
  "localizations": {
62
64
  "showTranslations": "All translations",
@@ -55,7 +55,9 @@
55
55
  "min": "Vnos ne sme biti manjši od {{min}}.",
56
56
  "max": "Vnos ne sme biti večji od {{max}}.",
57
57
  "pattern": "Vnos se mora ujemati z vzorcem '{{pattern}}'.",
58
- "email": "Neveljaven e-naslov."
58
+ "email": "Neveljaven e-naslov.",
59
+ "minDate": "Datum ne sme biti pred {{min}}.",
60
+ "maxDate": "Datum ne sme biti po {{max}}."
59
61
  },
60
62
  "localizations": {
61
63
  "showTranslations": "Vsi prevodi",
@@ -3,7 +3,43 @@ import { FilterTypeEnum } from '../../descriptors/types';
3
3
  import { DateUtil } from '../../utils';
4
4
  import { MediusFilterMatchType, MediusQueryParamBuilder } from '../models';
5
5
  export class MediusRestUtil {
6
- static fromAngularQueryParamsToMediusQueryParams(params, filterDescriptors, defaultItemsPerPage = 10, defaultOffset = 0) {
6
+ constructor() {
7
+ // first value is from primeNG, second is for use in query params
8
+ this.matchModeMapping = [
9
+ [FilterMatchMode.CONTAINS, 'c', MediusFilterMatchType.Contains, null],
10
+ [FilterMatchMode.ENDS_WITH, 'ew', MediusFilterMatchType.EndsWith, null],
11
+ [FilterMatchMode.EQUALS, 'eq', MediusFilterMatchType.Equals, null],
12
+ [FilterMatchMode.GREATER_THAN, 'gt', MediusFilterMatchType.GreaterThan, null],
13
+ [FilterMatchMode.LESS_THAN, 'lt', MediusFilterMatchType.SmallerThan, null],
14
+ [FilterMatchMode.STARTS_WITH, 'sw', MediusFilterMatchType.StartsWith, null],
15
+ [FilterMatchMode.IN, 'in', MediusFilterMatchType.In, null],
16
+ [FilterMatchMode.NOT_EQUALS, 'neq', MediusFilterMatchType.NotEquals, null],
17
+ [FilterMatchMode.BETWEEN, 'ft', MediusFilterMatchType.FromTo, FilterTypeEnum.Date],
18
+ [FilterMatchMode.DATE_IS, 'dteq', MediusFilterMatchType.Equals, FilterTypeEnum.Date],
19
+ [FilterMatchMode.DATE_BEFORE, 'lt', MediusFilterMatchType.SmallerThan, FilterTypeEnum.Date],
20
+ [FilterMatchMode.DATE_AFTER, 'gt', MediusFilterMatchType.GreaterThan, FilterTypeEnum.Date],
21
+ [FilterMatchMode.DATE_IS_NOT, 'neq', MediusFilterMatchType.NotEquals, FilterTypeEnum.Date]
22
+ ];
23
+ this.dateTimeInUtc = true;
24
+ this.dateTimeWithTimezone = true;
25
+ this.dateTimeWithMillis = true;
26
+ // empty
27
+ }
28
+ static get() {
29
+ return MediusRestUtil._instance;
30
+ }
31
+ configure(config) {
32
+ if (config.dateTimeInUtc !== undefined) {
33
+ this.dateTimeInUtc = config.dateTimeInUtc;
34
+ }
35
+ if (config.dateTimeWithTimezone !== undefined) {
36
+ this.dateTimeWithTimezone = config.dateTimeWithTimezone;
37
+ }
38
+ if (config.dateTimeWithMillis !== undefined) {
39
+ this.dateTimeWithMillis = config.dateTimeWithMillis;
40
+ }
41
+ }
42
+ fromAngularQueryParamsToMediusQueryParams(params, filterDescriptors, defaultItemsPerPage = 10, defaultOffset = 0) {
7
43
  const offset = params['first'] ? parseInt(params['first']) : defaultOffset;
8
44
  const itemsPerPage = params['rows'] ? parseInt(params['rows']) : defaultItemsPerPage;
9
45
  const mediusParamsBuilder = MediusQueryParamBuilder.create(itemsPerPage, offset);
@@ -38,15 +74,15 @@ export class MediusRestUtil {
38
74
  value = value[0];
39
75
  }
40
76
  const filterDescriptor = filterDescriptors.find(f => f.property === field);
41
- const matchMode = MediusRestUtil.getMapping(operator, filterDescriptor?.filterType, 1);
77
+ const matchMode = this.getMapping(operator, filterDescriptor?.filterType, 1);
42
78
  if (matchMode && filterDescriptor) {
43
- mediusParamsBuilder.withFilter(filterDescriptor.property, value, valueTo, MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(matchMode[0]));
79
+ mediusParamsBuilder.withFilter(filterDescriptor.property, value, valueTo, this.getMediusFilterMatchTypeFromPrimeMatchMode(matchMode[0]));
44
80
  }
45
81
  }
46
82
  }
47
83
  return mediusParamsBuilder.build();
48
84
  }
49
- static fromPrimeLazyLoadEventToAngularQueryParams(event) {
85
+ fromPrimeLazyLoadEventToAngularQueryParams(event) {
50
86
  const params = {
51
87
  first: null,
52
88
  rows: null,
@@ -67,7 +103,7 @@ export class MediusRestUtil {
67
103
  for (const field in event.filters) {
68
104
  const primeOperator = event.filters[field].matchMode;
69
105
  let value = event.filters[field].value;
70
- const operatorMapping = primeOperator ? MediusRestUtil.getMapping(primeOperator, undefined, 0) : undefined;
106
+ const operatorMapping = primeOperator ? this.getMapping(primeOperator, undefined, 0) : undefined;
71
107
  if (operatorMapping && typeof value !== 'undefined' && value !== null) {
72
108
  let doAddFilter = false;
73
109
  if (typeof value === 'string' && value.length > 0) {
@@ -109,7 +145,7 @@ export class MediusRestUtil {
109
145
  }
110
146
  return params;
111
147
  }
112
- static modifyFilterProperties(mediusQueryParams, filterDescriptors) {
148
+ modifyFilterProperties(mediusQueryParams, filterDescriptors) {
113
149
  for (const filterParam of mediusQueryParams.filterParams ?? []) {
114
150
  const filterDescriptor = filterDescriptors.find(f => f.property === filterParam.property);
115
151
  filterParam.property = filterDescriptor?.filterProperty ?? filterParam.property;
@@ -135,24 +171,25 @@ export class MediusRestUtil {
135
171
  // transform dates to correct iso string
136
172
  if (typeof filterParam.filterValue !== 'undefined') {
137
173
  if (Array.isArray(filterParam.filterValue)) {
138
- filterParam.filterValue = filterParam.filterValue.map(v => DateUtil.toIsoString(v, filterDescriptor.datePickerValueInUtc, filterDescriptor.datePickerValueWithTimezone));
174
+ filterParam.filterValue = filterParam.filterValue.map(v => DateUtil.toIsoString(v, filterDescriptor.datePickerValueInUtc ?? this.dateTimeInUtc, filterDescriptor.datePickerValueWithTimezone ?? this.dateTimeWithTimezone, this.dateTimeWithMillis, !filterDescriptor.datePickerShowTime));
139
175
  }
140
176
  else {
141
- filterParam.filterValue = DateUtil.toIsoString(filterParam.filterValue, filterDescriptor.datePickerValueInUtc, filterDescriptor.datePickerValueWithTimezone);
177
+ filterDescriptor.datePickerValueInUtc;
178
+ filterParam.filterValue = DateUtil.toIsoString(filterParam.filterValue, filterDescriptor.datePickerValueInUtc ?? this.dateTimeInUtc, filterDescriptor.datePickerValueWithTimezone ?? this.dateTimeWithTimezone, this.dateTimeWithMillis, !filterDescriptor.datePickerShowTime);
142
179
  }
143
180
  }
144
181
  if (typeof filterParam.filterValueTo !== 'undefined') {
145
182
  if (Array.isArray(filterParam.filterValueTo)) {
146
- filterParam.filterValueTo = filterParam.filterValueTo.map(v => DateUtil.toIsoString(v, filterDescriptor.datePickerValueInUtc, filterDescriptor.datePickerValueWithTimezone));
183
+ filterParam.filterValueTo = filterParam.filterValueTo.map(v => DateUtil.toIsoString(v, filterDescriptor.datePickerValueInUtc ?? this.dateTimeInUtc, filterDescriptor.datePickerValueWithTimezone ?? this.dateTimeWithTimezone, this.dateTimeWithMillis, !filterDescriptor.datePickerShowTime));
147
184
  }
148
185
  else {
149
- filterParam.filterValueTo = DateUtil.toIsoString(filterParam.filterValueTo, filterDescriptor.datePickerValueInUtc, filterDescriptor.datePickerValueWithTimezone);
186
+ filterParam.filterValueTo = DateUtil.toIsoString(filterParam.filterValueTo, filterDescriptor.datePickerValueInUtc ?? this.dateTimeInUtc, filterDescriptor.datePickerValueWithTimezone ?? this.dateTimeWithTimezone, this.dateTimeWithMillis, !filterDescriptor.datePickerShowTime);
150
187
  }
151
188
  }
152
189
  }
153
190
  }
154
191
  }
155
- static fromPrimeLazyLoadEventToMediusQueryParams(event) {
192
+ fromPrimeLazyLoadEventToMediusQueryParams(event) {
156
193
  const queryParamBuilder = MediusQueryParamBuilder.create(event.rows, event.first);
157
194
  // apply sorting
158
195
  if (event.multiSortMeta) {
@@ -163,26 +200,26 @@ export class MediusRestUtil {
163
200
  for (const key of Object.keys(event.filters)) {
164
201
  const filterEvent = event.filters[key];
165
202
  if (Array.isArray(filterEvent)) {
166
- filterEvent.filter(e => e.value).forEach(e => MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, e));
203
+ filterEvent.filter(e => e.value).forEach(e => this.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, e));
167
204
  }
168
205
  else if (typeof filterEvent === 'object') {
169
206
  if (filterEvent.value) {
170
- MediusRestUtil.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, filterEvent);
207
+ this.addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, key, filterEvent);
171
208
  }
172
209
  }
173
210
  }
174
211
  }
175
212
  return queryParamBuilder.build();
176
213
  }
177
- static addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, property, filterMetadata) {
178
- const matchType = MediusRestUtil.getMediusFilterMatchTypeFromPrimeMatchMode(filterMetadata.matchMode ?? 'equals');
214
+ addMediusFilterFromPrimeFilterMetadata(queryParamBuilder, property, filterMetadata) {
215
+ const matchType = this.getMediusFilterMatchTypeFromPrimeMatchMode(filterMetadata.matchMode ?? 'equals');
179
216
  queryParamBuilder.withFilter(property, filterMetadata.value, undefined, matchType);
180
217
  }
181
- static getMediusFilterMatchTypeFromPrimeMatchMode(matchMode, dataType) {
182
- return MediusRestUtil.getMapping(matchMode, dataType)?.[2] ?? MediusFilterMatchType.Equals;
218
+ getMediusFilterMatchTypeFromPrimeMatchMode(matchMode, dataType) {
219
+ return this.getMapping(matchMode, dataType)?.[2] ?? MediusFilterMatchType.Equals;
183
220
  }
184
- static getMapping(matchMode, dataType, idx = 0) {
185
- const mappings = MediusRestUtil.matchModeMapping.filter(m => m[idx] === matchMode && (!dataType || !m[3] || dataType === m[3]));
221
+ getMapping(matchMode, dataType, idx = 0) {
222
+ const mappings = this.matchModeMapping.filter(m => m[idx] === matchMode && (!dataType || !m[3] || dataType === m[3]));
186
223
  if (mappings.length === 0) {
187
224
  return null;
188
225
  }
@@ -194,20 +231,5 @@ export class MediusRestUtil {
194
231
  }
195
232
  }
196
233
  }
197
- // first value is from primeNG, second is for use in query params
198
- MediusRestUtil.matchModeMapping = [
199
- [FilterMatchMode.CONTAINS, 'c', MediusFilterMatchType.Contains, null],
200
- [FilterMatchMode.ENDS_WITH, 'ew', MediusFilterMatchType.EndsWith, null],
201
- [FilterMatchMode.EQUALS, 'eq', MediusFilterMatchType.Equals, null],
202
- [FilterMatchMode.GREATER_THAN, 'gt', MediusFilterMatchType.GreaterThan, null],
203
- [FilterMatchMode.LESS_THAN, 'lt', MediusFilterMatchType.SmallerThan, null],
204
- [FilterMatchMode.STARTS_WITH, 'sw', MediusFilterMatchType.StartsWith, null],
205
- [FilterMatchMode.IN, 'in', MediusFilterMatchType.In, null],
206
- [FilterMatchMode.NOT_EQUALS, 'neq', MediusFilterMatchType.NotEquals, null],
207
- [FilterMatchMode.BETWEEN, 'ft', MediusFilterMatchType.FromTo, FilterTypeEnum.Date],
208
- [FilterMatchMode.DATE_IS, 'dteq', MediusFilterMatchType.Equals, FilterTypeEnum.Date],
209
- [FilterMatchMode.DATE_BEFORE, 'lt', MediusFilterMatchType.SmallerThan, FilterTypeEnum.Date],
210
- [FilterMatchMode.DATE_AFTER, 'gt', MediusFilterMatchType.GreaterThan, FilterTypeEnum.Date],
211
- [FilterMatchMode.DATE_IS_NOT, 'neq', MediusFilterMatchType.NotEquals, FilterTypeEnum.Date]
212
- ];
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzLXJlc3QudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL21lZGl1cy1yZXN0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGVBQWUsRUFBZ0MsTUFBTSxhQUFhLENBQUM7QUFHM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFDLHFCQUFxQixFQUFvQix1QkFBdUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUUzRixNQUFNLE9BQU8sY0FBYztJQWtCaEIsTUFBTSxDQUFDLHlDQUF5QyxDQUNuRCxNQUFjLEVBQ2QsaUJBQStDLEVBQy9DLG1CQUFtQixHQUFHLEVBQUUsRUFDeEIsYUFBYSxHQUFHLENBQUM7UUFFakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUMzRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7UUFFckYsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWpGLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxH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RSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQ2xFLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztJQUM3RSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7SUFDMUUsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO0lBQzNFLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUMxRCxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7SUFDMUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQztJQUNsRixDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDO0lBQ3BGLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDM0YsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQztJQUMxRixDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDO0NBQzdGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BhcmFtc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtGaWx0ZXJNYXRjaE1vZGUsIEZpbHRlck1ldGFkYXRhLCBMYXp5TG9hZEV2ZW50fSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvcnMvZmlsdGVyJztcbmltcG9ydCB7RmlsdGVyVHlwZUVudW19IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TWF0Y2hNb2RlTWFwVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgTWVkaXVzUmVzdFV0aWwge1xuICAgIC8vIGZpcnN0IHZhbHVlIGlzIGZyb20gcHJpbWVORywgc2Vjb25kIGlzIGZvciB1c2UgaW4gcXVlcnkgcGFyYW1zXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbWF0Y2hNb2RlTWFwcGluZzogQXJyYXk8TWF0Y2hNb2RlTWFwVHlwZT4gPSBbXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuQ09OVEFJTlMsICdjJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5FTkRTX1dJVEgsICdldycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aCwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuRVFVQUxTLCAnZXEnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU4sICdndCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbiwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOLCAnbHQnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU21hbGxlclRoYW4sIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRILCAnc3cnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU3RhcnRzV2l0aCwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuSU4sICdpbicsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5JbiwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUywgJ25lcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHMsIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkJFVFdFRU4sICdmdCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Gcm9tVG8sIEZpbHRlclR5cGVFbnVtLkRhdGVdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVMsICdkdGVxJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscywgRmlsdGVyVHlwZUVudW0uRGF0ZV0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuREFURV9CRUZPUkUsICdsdCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TbWFsbGVyVGhhbiwgRmlsdGVyVHlwZUVudW0uRGF0ZV0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuREFURV9BRlRFUiwgJ2d0JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkdyZWF0ZXJUaGFuLCBGaWx0ZXJUeXBlRW51bS5EYXRlXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5EQVRFX0lTX05PVCwgJ25lcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHMsIEZpbHRlclR5cGVFbnVtLkRhdGVdXG4gICAgXTtcblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFuZ3VsYXJRdWVyeVBhcmFtc1RvTWVkaXVzUXVlcnlQYXJhbXMoXG4gICAgICAgIHBhcmFtczogUGFyYW1zLFxuICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yczogQXJyYXk8RmlsdGVyRGVzY3JpcHRvcjxhbnk+PixcbiAgICAgICAgZGVmYXVsdEl0ZW1zUGVyUGFnZSA9IDEwLFxuICAgICAgICBkZWZhdWx0T2Zmc2V0ID0gMFxuICAgICk6IE1lZGl1c1F1ZXJ5UGFyYW0ge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYXJhbXNbJ2ZpcnN0J10gPyBwYXJzZUludChwYXJhbXNbJ2ZpcnN0J10pIDogZGVmYXVsdE9mZnNldDtcbiAgICAgICAgY29uc3QgaXRlbXNQZXJQYWdlID0gcGFyYW1zWydyb3dzJ10gPyBwYXJzZUludChwYXJhbXNbJ3Jvd3MnXSkgOiBkZWZhdWx0SXRlbXNQZXJQYWdlO1xuXG4gICAgICAgIGNvbnN0IG1lZGl1c1BhcmFtc0J1aWxkZXIgPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoaXRlbXNQZXJQYWdlLCBvZmZzZXQpO1xuXG4gICAgICAgIGlmIChwYXJhbXNbJ3NvcnQnXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzb3J0IG9mIHBhcmFtc1snc29ydCddLnNwbGl0KCcsJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxcFNvcnRTcGxpdCA9IHNvcnQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHFwU29ydFNwbGl0WzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzYyA9IHFwU29ydFNwbGl0Lmxlbmd0aCA+IDEgPyBxcFNvcnRTcGxpdFsxXSA9PT0gJ2FzYycgOiB0cnVlO1xuICAgICAgICAgICAgICAgIG1lZGl1c1BhcmFtc0J1aWxkZXIud2l0aFNvcnQoZmllbGQsIGFzYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtc1snZmlsdGVyJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclNwbGl0ID0gcGFyYW1zWydmaWx0ZXInXS5zcGxpdCgnOycpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXJGaWVsZCBvZiBmaWx0ZXJTcGxpdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckZpZWxkU3BsaXQgPSBmaWx0ZXJGaWVsZC5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmlsdGVyRmllbGRTcGxpdFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IGZpbHRlckZpZWxkU3BsaXQubGVuZ3RoID4gMSA/IGZpbHRlckZpZWxkU3BsaXRbMV0gOiAnZXEnO1xuXG4gICAgICAgICAgICAgICAgLy8gcHJlcGFyZSB2YWx1ZVxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogYW55ID0gZmlsdGVyRmllbGRTcGxpdC5sZW5ndGggPiAyID8gZmlsdGVyRmllbGRTcGxpdC5zbGljZSgyKS5qb2luKCc6JykgOiAnJztcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVUbzogYW55ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh2OiBzdHJpbmcpID0+ICh2LnN0YXJ0c1dpdGgoXCInXCIpID8gdi5zdWJzdHJpbmcoMSwgdi5sZW5ndGggLSAxKSA6IHYpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09ICdmdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUbyA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckRlc2NyaXB0b3IgPSBmaWx0ZXJEZXNjcmlwdG9ycy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gZmllbGQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IE1lZGl1c1Jlc3RVdGlsLmdldE1hcHBpbmcob3BlcmF0b3IsIGZpbHRlckRlc2NyaXB0b3I/LmZpbHRlclR5cGUsIDEpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaE1vZGUgJiYgZmlsdGVyRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICBtZWRpdXNQYXJhbXNCdWlsZGVyLndpdGhGaWx0ZXIoZmlsdGVyRGVzY3JpcHRvci5wcm9wZXJ0eSwgdmFsdWUsIHZhbHVlVG8sIE1lZGl1c1Jlc3RVdGlsLmdldE1lZGl1c0ZpbHRlck1hdGNoVHlwZUZyb21QcmltZU1hdGNoTW9kZShtYXRjaE1vZGVbMF0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVkaXVzUGFyYW1zQnVpbGRlci5idWlsZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVByaW1lTGF6eUxvYWRFdmVudFRvQW5ndWxhclF1ZXJ5UGFyYW1zKGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogUGFyYW1zIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7XG4gICAgICAgICAgICBmaXJzdDogbnVsbCxcbiAgICAgICAgICAgIHJvd3M6IG51bGwsXG4gICAgICAgICAgICBzb3J0OiBudWxsLFxuICAgICAgICAgICAgZmlsdGVyOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV2ZW50LmZpcnN0ICYmIGV2ZW50LmZpcnN0ID4gMCkge1xuICAgICAgICAgICAgcGFyYW1zWydmaXJzdCddID0gZXZlbnQuZmlyc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnJvd3MgJiYgZXZlbnQucm93cyA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtc1sncm93cyddID0gZXZlbnQucm93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5tdWx0aVNvcnRNZXRhPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhcmFtc1snc29ydCddID0gZXZlbnQubXVsdGlTb3J0TWV0YT8ubWFwKHMgPT4gYCR7cy5maWVsZH0ke3Mub3JkZXIgPT09IDEgPyAnJyA6ICc6ZGVzYyd9YCkuam9pbignLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgaW4gZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW1lT3BlcmF0b3IgPSBldmVudC5maWx0ZXJzW2ZpZWxkXS5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZlbnQuZmlsdGVyc1tmaWVsZF0udmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JNYXBwaW5nID0gcHJpbWVPcGVyYXRvciA/IE1lZGl1c1Jlc3RVdGlsLmdldE1hcHBpbmcocHJpbWVPcGVyYXRvciwgdW5kZWZpbmVkLCAwKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JNYXBwaW5nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvQWRkRmlsdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYCcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvQWRkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqb2luZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgcXVlcnkgcGFyYW1zLCBhbHdheXMgY29udmVydCB0byBpc28gc3RyaW5nLCBjb3JyZWN0IHRyYW5zZm9ybWF0aW9uIHdpbGwgYmUgZG9uZSBsYXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYFske2pvaW5lZFZhbHVlfV1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHF1ZXJ5IHBhcmFtcywgYWx3YXlzIGNvbnZlcnQgdG8gaXNvIHN0cmluZywgY29ycmVjdCB0cmFuc2Zvcm1hdGlvbiB3aWxsIGJlIGRvbmUgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvQWRkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb0FkZEZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKGAke2ZpZWxkfToke29wZXJhdG9yTWFwcGluZ1sxXX06JHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNbJ2ZpbHRlciddID0gZmlsdGVycy5qb2luKCc7Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbW9kaWZ5RmlsdGVyUHJvcGVydGllcyhtZWRpdXNRdWVyeVBhcmFtczogTWVkaXVzUXVlcnlQYXJhbSwgZmlsdGVyRGVzY3JpcHRvcnM6IEFycmF5PEZpbHRlckRlc2NyaXB0b3I8YW55Pj4pIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXJQYXJhbSBvZiBtZWRpdXNRdWVyeVBhcmFtcy5maWx0ZXJQYXJhbXMgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckRlc2NyaXB0b3IgPSBmaWx0ZXJEZXNjcmlwdG9ycy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gZmlsdGVyUGFyYW0ucHJvcGVydHkpO1xuICAgICAgICAgICAgZmlsdGVyUGFyYW0ucHJvcGVydHkgPSBmaWx0ZXJEZXNjcmlwdG9yPy5maWx0ZXJQcm9wZXJ0eSA/PyBmaWx0ZXJQYXJhbS5wcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJEZXNjcmlwdG9yPy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlclBhcmFtLmZpbHRlck1hdGNoVHlwZSA9PT0gTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGRhdGUgZXF1YWxzIGZpbHRlciB0byBkYXRlIHJhbmdlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckRhdGUgPSBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSBhcyBEYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKGZpbHRlckRhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoc3RhcnREYXRlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRIb3VycyhzdGFydERhdGUuZ2V0SG91cnMoKSwgc3RhcnREYXRlLmdldE1pbnV0ZXMoKSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmREYXRlLnNldEhvdXJzKGVuZERhdGUuZ2V0SG91cnMoKSwgZW5kRGF0ZS5nZXRNaW51dGVzKCkgKyAxLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlck1hdGNoVHlwZSA9IE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Gcm9tVG87XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlID0gc3RhcnREYXRlO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZVRvID0gZW5kRGF0ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm0gZGF0ZXMgdG8gY29ycmVjdCBpc28gc3RyaW5nXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSA9IGZpbHRlclBhcmFtLmZpbHRlclZhbHVlLm1hcCh2ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVV0aWwudG9Jc29TdHJpbmcodiwgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVJblV0YywgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVXaXRoVGltZXpvbmUpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUgPSBEYXRlVXRpbC50b0lzb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZUluVXRjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8gPSBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZVRvLm1hcCh2ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVV0aWwudG9Jc29TdHJpbmcodiwgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVJblV0YywgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVXaXRoVGltZXpvbmUpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbyA9IERhdGVVdGlsLnRvSXNvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVJblV0YyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZVdpdGhUaW1lem9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVByaW1lTGF6eUxvYWRFdmVudFRvTWVkaXVzUXVlcnlQYXJhbXMoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBNZWRpdXNRdWVyeVBhcmFtIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbUJ1aWxkZXIgPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoZXZlbnQucm93cywgZXZlbnQuZmlyc3QpO1xuXG4gICAgICAgIC8vIGFwcGx5IHNvcnRpbmdcbiAgICAgICAgaWYgKGV2ZW50Lm11bHRpU29ydE1ldGEpIHtcbiAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGEuZm9yRWFjaChtc20gPT4gcXVlcnlQYXJhbUJ1aWxkZXIud2l0aFNvcnQobXNtLmZpZWxkLCBtc20ub3JkZXIgPT09IDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IGZpbHRlcmluZ1xuICAgICAgICBpZiAoZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZXZlbnQuZmlsdGVycykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJFdmVudCA9IGV2ZW50LmZpbHRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgKGZpbHRlckV2ZW50IGFzIEZpbHRlck1ldGFkYXRhW10pLmZpbHRlcihlID0+IGUudmFsdWUpLmZvckVhY2goZSA9PiBNZWRpdXNSZXN0VXRpbC5hZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlciwga2V5LCBlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyRXZlbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJFdmVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTWVkaXVzUmVzdFV0aWwuYWRkTWVkaXVzRmlsdGVyRnJvbVByaW1lRmlsdGVyTWV0YWRhdGEocXVlcnlQYXJhbUJ1aWxkZXIsIGtleSwgZmlsdGVyRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1CdWlsZGVyLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlcjogTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIHByb3BlcnR5OiBzdHJpbmcsIGZpbHRlck1ldGFkYXRhOiBGaWx0ZXJNZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBtYXRjaFR5cGU6IE1lZGl1c0ZpbHRlck1hdGNoVHlwZSA9IE1lZGl1c1Jlc3RVdGlsLmdldE1lZGl1c0ZpbHRlck1hdGNoVHlwZUZyb21QcmltZU1hdGNoTW9kZShmaWx0ZXJNZXRhZGF0YS5tYXRjaE1vZGUgPz8gJ2VxdWFscycpO1xuICAgICAgICBxdWVyeVBhcmFtQnVpbGRlci53aXRoRmlsdGVyKHByb3BlcnR5LCBmaWx0ZXJNZXRhZGF0YS52YWx1ZSwgdW5kZWZpbmVkLCBtYXRjaFR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWVkaXVzRmlsdGVyTWF0Y2hUeXBlRnJvbVByaW1lTWF0Y2hNb2RlKG1hdGNoTW9kZTogc3RyaW5nLCBkYXRhVHlwZT86IEZpbHRlclR5cGVFbnVtKTogTWVkaXVzRmlsdGVyTWF0Y2hUeXBlIHtcbiAgICAgICAgcmV0dXJuIE1lZGl1c1Jlc3RVdGlsLmdldE1hcHBpbmcobWF0Y2hNb2RlLCBkYXRhVHlwZSk/LlsyXSA/PyBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWFwcGluZyhtYXRjaE1vZGU6IHN0cmluZywgZGF0YVR5cGU/OiBGaWx0ZXJUeXBlRW51bSwgaWR4ID0gMCk6IE1hdGNoTW9kZU1hcFR5cGUgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbWFwcGluZ3MgPSBNZWRpdXNSZXN0VXRpbC5tYXRjaE1vZGVNYXBwaW5nLmZpbHRlcihtID0+IG1baWR4XSA9PT0gbWF0Y2hNb2RlICYmICghZGF0YVR5cGUgfHwgIW1bM10gfHwgZGF0YVR5cGUgPT09IG1bM10pKTtcbiAgICAgICAgaWYgKG1hcHBpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAobWFwcGluZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFwcGluZ3NbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWFwcGluZ3Muc29ydCgobTEsIG0yKSA9PiAobTJbM10gPz8gLTEpIC0gKG0xWzNdID8/IC0xKSlbMF07XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
234
+ MediusRestUtil._instance = new MediusRestUtil();
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzLXJlc3QudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL21lZGl1cy1yZXN0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGVBQWUsRUFBZ0MsTUFBTSxhQUFhLENBQUM7QUFHM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFDLHFCQUFxQixFQUFvQix1QkFBdUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUUzRixNQUFNLE9BQU8sY0FBYztJQXVCdkI7UUFyQkEsaUVBQWlFO1FBQ2hELHFCQUFnQixHQUE0QjtZQUN6RCxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7WUFDckUsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1lBQ3ZFLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNsRSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7WUFDN0UsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO1lBQzFFLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztZQUMzRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUM7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Q0FBQztJQUVNLDBDQUEwQyxDQUFDLFNBQWlCLEVBQUUsUUFBeUI7UUFDMUYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztJQUNyRixDQUFDO0lBRU0sVUFBVSxDQUFDLFNBQWlCLEVBQUUsUUFBeUIsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RILElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7YUFBTTtZQUNILE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO0lBQ0wsQ0FBQzs7QUF4UmMsd0JBQVMsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZSwgRmlsdGVyTWV0YWRhdGEsIExhenlMb2FkRXZlbnR9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycy9maWx0ZXInO1xuaW1wb3J0IHtGaWx0ZXJUeXBlRW51bX0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNYXRjaE1vZGVNYXBUeXBlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge0RhdGVVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge01lZGl1c0ZpbHRlck1hdGNoVHlwZSwgTWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXJ9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBNZWRpdXNSZXN0VXRpbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBNZWRpdXNSZXN0VXRpbCA9IG5ldyBNZWRpdXNSZXN0VXRpbCgpO1xuICAgIC8vIGZpcnN0IHZhbHVlIGlzIGZyb20gcHJpbWVORywgc2Vjb25kIGlzIGZvciB1c2UgaW4gcXVlcnkgcGFyYW1zXG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXRjaE1vZGVNYXBwaW5nOiBBcnJheTxNYXRjaE1vZGVNYXBUeXBlPiA9IFtcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5DT05UQUlOUywgJ2MnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQ29udGFpbnMsIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkVORFNfV0lUSCwgJ2V3JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVuZHNXaXRoLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5FUVVBTFMsICdlcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FcXVhbHMsIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTiwgJ2d0JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkdyZWF0ZXJUaGFuLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5MRVNTX1RIQU4sICdsdCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TbWFsbGVyVGhhbiwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuU1RBUlRTX1dJVEgsICdzdycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TdGFydHNXaXRoLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5JTiwgJ2luJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkluLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5OT1RfRVFVQUxTLCAnbmVxJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEVxdWFscywgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuQkVUV0VFTiwgJ2Z0JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkZyb21UbywgRmlsdGVyVHlwZUVudW0uRGF0ZV0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuREFURV9JUywgJ2R0ZXEnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzLCBGaWx0ZXJUeXBlRW51bS5EYXRlXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5EQVRFX0JFRk9SRSwgJ2x0JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlNtYWxsZXJUaGFuLCBGaWx0ZXJUeXBlRW51bS5EYXRlXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5EQVRFX0FGVEVSLCAnZ3QnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuR3JlYXRlclRoYW4sIEZpbHRlclR5cGVFbnVtLkRhdGVdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVNfTk9ULCAnbmVxJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEVxdWFscywgRmlsdGVyVHlwZUVudW0uRGF0ZV1cbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBkYXRlVGltZUluVXRjID0gdHJ1ZTtcbiAgICBwcml2YXRlIGRhdGVUaW1lV2l0aFRpbWV6b25lID0gdHJ1ZTtcbiAgICBwcml2YXRlIGRhdGVUaW1lV2l0aE1pbGxpcyA9IHRydWU7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvLyBlbXB0eVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0KCk6IE1lZGl1c1Jlc3RVdGlsIHtcbiAgICAgICAgcmV0dXJuIE1lZGl1c1Jlc3RVdGlsLl9pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uZmlndXJlKGNvbmZpZzoge2RhdGVUaW1lSW5VdGM/OiBib29sZWFuOyBkYXRlVGltZVdpdGhUaW1lem9uZT86IGJvb2xlYW47IGRhdGVUaW1lV2l0aE1pbGxpcz86IGJvb2xlYW59KTogdm9pZCB7XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVJblV0YyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5VdGMgPSBjb25maWcuZGF0ZVRpbWVJblV0YztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lV2l0aFRpbWV6b25lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoVGltZXpvbmUgPSBjb25maWcuZGF0ZVRpbWVXaXRoVGltZXpvbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZVdpdGhNaWxsaXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZVdpdGhNaWxsaXMgPSBjb25maWcuZGF0ZVRpbWVXaXRoTWlsbGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZyb21Bbmd1bGFyUXVlcnlQYXJhbXNUb01lZGl1c1F1ZXJ5UGFyYW1zKFxuICAgICAgICBwYXJhbXM6IFBhcmFtcyxcbiAgICAgICAgZmlsdGVyRGVzY3JpcHRvcnM6IEFycmF5PEZpbHRlckRlc2NyaXB0b3I8YW55Pj4sXG4gICAgICAgIGRlZmF1bHRJdGVtc1BlclBhZ2UgPSAxMCxcbiAgICAgICAgZGVmYXVsdE9mZnNldCA9IDBcbiAgICApOiBNZWRpdXNRdWVyeVBhcmFtIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyYW1zWydmaXJzdCddID8gcGFyc2VJbnQocGFyYW1zWydmaXJzdCddKSA6IGRlZmF1bHRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHBhcmFtc1sncm93cyddID8gcGFyc2VJbnQocGFyYW1zWydyb3dzJ10pIDogZGVmYXVsdEl0ZW1zUGVyUGFnZTtcblxuICAgICAgICBjb25zdCBtZWRpdXNQYXJhbXNCdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKGl0ZW1zUGVyUGFnZSwgb2Zmc2V0KTtcblxuICAgICAgICBpZiAocGFyYW1zWydzb3J0J10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc29ydCBvZiBwYXJhbXNbJ3NvcnQnXS5zcGxpdCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXBTb3J0U3BsaXQgPSBzb3J0LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBxcFNvcnRTcGxpdFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc2MgPSBxcFNvcnRTcGxpdC5sZW5ndGggPiAxID8gcXBTb3J0U3BsaXRbMV0gPT09ICdhc2MnIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICBtZWRpdXNQYXJhbXNCdWlsZGVyLndpdGhTb3J0KGZpZWxkLCBhc2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXNbJ2ZpbHRlciddKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJTcGxpdCA9IHBhcmFtc1snZmlsdGVyJ10uc3BsaXQoJzsnKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyRmllbGQgb2YgZmlsdGVyU3BsaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZFNwbGl0ID0gZmlsdGVyRmllbGQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpbHRlckZpZWxkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXJGaWVsZFNwbGl0Lmxlbmd0aCA+IDEgPyBmaWx0ZXJGaWVsZFNwbGl0WzFdIDogJ2VxJztcblxuICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGZpbHRlckZpZWxkU3BsaXQubGVuZ3RoID4gMiA/IGZpbHRlckZpZWxkU3BsaXQuc2xpY2UoMikuam9pbignOicpIDogJyc7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVG86IGFueSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIidcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdbJykgJiYgdmFsdWUuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodjogc3RyaW5nKSA9PiAodi5zdGFydHNXaXRoKFwiJ1wiKSA/IHYuc3Vic3RyaW5nKDEsIHYubGVuZ3RoIC0gMSkgOiB2KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVG8gPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcnMuZmluZChmID0+IGYucHJvcGVydHkgPT09IGZpZWxkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaE1vZGUgPSB0aGlzLmdldE1hcHBpbmcob3BlcmF0b3IsIGZpbHRlckRlc2NyaXB0b3I/LmZpbHRlclR5cGUsIDEpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaE1vZGUgJiYgZmlsdGVyRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICBtZWRpdXNQYXJhbXNCdWlsZGVyLndpdGhGaWx0ZXIoZmlsdGVyRGVzY3JpcHRvci5wcm9wZXJ0eSwgdmFsdWUsIHZhbHVlVG8sIHRoaXMuZ2V0TWVkaXVzRmlsdGVyTWF0Y2hUeXBlRnJvbVByaW1lTWF0Y2hNb2RlKG1hdGNoTW9kZVswXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZWRpdXNQYXJhbXNCdWlsZGVyLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZyb21QcmltZUxhenlMb2FkRXZlbnRUb0FuZ3VsYXJRdWVyeVBhcmFtcyhldmVudDogTGF6eUxvYWRFdmVudCk6IFBhcmFtcyB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogUGFyYW1zID0ge1xuICAgICAgICAgICAgZmlyc3Q6IG51bGwsXG4gICAgICAgICAgICByb3dzOiBudWxsLFxuICAgICAgICAgICAgc29ydDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChldmVudC5maXJzdCAmJiBldmVudC5maXJzdCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtc1snZmlyc3QnXSA9IGV2ZW50LmZpcnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5yb3dzICYmIGV2ZW50LnJvd3MgPiAwKSB7XG4gICAgICAgICAgICBwYXJhbXNbJ3Jvd3MnXSA9IGV2ZW50LnJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQubXVsdGlTb3J0TWV0YT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbXNbJ3NvcnQnXSA9IGV2ZW50Lm11bHRpU29ydE1ldGE/Lm1hcChzID0+IGAke3MuZmllbGR9JHtzLm9yZGVyID09PSAxID8gJycgOiAnOmRlc2MnfWApLmpvaW4oJywnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5maWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIGluIGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmltZU9wZXJhdG9yID0gZXZlbnQuZmlsdGVyc1tmaWVsZF0ubWF0Y2hNb2RlO1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGV2ZW50LmZpbHRlcnNbZmllbGRdLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yTWFwcGluZyA9IHByaW1lT3BlcmF0b3IgPyB0aGlzLmdldE1hcHBpbmcocHJpbWVPcGVyYXRvciwgdW5kZWZpbmVkLCAwKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JNYXBwaW5nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvQWRkRmlsdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYCcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvQWRkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqb2luZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgcXVlcnkgcGFyYW1zLCBhbHdheXMgY29udmVydCB0byBpc28gc3RyaW5nLCBjb3JyZWN0IHRyYW5zZm9ybWF0aW9uIHdpbGwgYmUgZG9uZSBsYXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYFske2pvaW5lZFZhbHVlfV1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHF1ZXJ5IHBhcmFtcywgYWx3YXlzIGNvbnZlcnQgdG8gaXNvIHN0cmluZywgY29ycmVjdCB0cmFuc2Zvcm1hdGlvbiB3aWxsIGJlIGRvbmUgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvQWRkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb0FkZEZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKGAke2ZpZWxkfToke29wZXJhdG9yTWFwcGluZ1sxXX06JHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNbJ2ZpbHRlciddID0gZmlsdGVycy5qb2luKCc7Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBtb2RpZnlGaWx0ZXJQcm9wZXJ0aWVzKG1lZGl1c1F1ZXJ5UGFyYW1zOiBNZWRpdXNRdWVyeVBhcmFtLCBmaWx0ZXJEZXNjcmlwdG9yczogQXJyYXk8RmlsdGVyRGVzY3JpcHRvcjxhbnk+Pikge1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlclBhcmFtIG9mIG1lZGl1c1F1ZXJ5UGFyYW1zLmZpbHRlclBhcmFtcyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRGVzY3JpcHRvciA9IGZpbHRlckRlc2NyaXB0b3JzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBmaWx0ZXJQYXJhbS5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBmaWx0ZXJQYXJhbS5wcm9wZXJ0eSA9IGZpbHRlckRlc2NyaXB0b3I/LmZpbHRlclByb3BlcnR5ID8/IGZpbHRlclBhcmFtLnByb3BlcnR5O1xuICAgICAgICAgICAgaWYgKGZpbHRlckRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyUGFyYW0uZmlsdGVyTWF0Y2hUeXBlID09PSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZGF0ZSBlcXVhbHMgZmlsdGVyIHRvIGRhdGUgcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0ZSA9IGZpbHRlclBhcmFtLmZpbHRlclZhbHVlIGFzIERhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZmlsdGVyRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJTaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKHN0YXJ0RGF0ZS5nZXRIb3VycygpLCBzdGFydERhdGUuZ2V0TWludXRlcygpLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERhdGUuc2V0SG91cnMoZW5kRGF0ZS5nZXRIb3VycygpLCBlbmREYXRlLmdldE1pbnV0ZXMoKSArIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERhdGUuc2V0RGF0ZShlbmREYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyTWF0Y2hUeXBlID0gTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkZyb21UbztcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUgPSBzdGFydERhdGU7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8gPSBlbmREYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBkYXRlcyB0byBjb3JyZWN0IGlzbyBzdHJpbmdcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlID0gZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUubWFwKHYgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVXRpbC50b0lzb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVJblV0YyA/PyB0aGlzLmRhdGVUaW1lSW5VdGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lID8/IHRoaXMuZGF0ZVRpbWVXaXRoVGltZXpvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVJblV0YztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlID0gRGF0ZVV0aWwudG9Jc29TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVJblV0YyA/PyB0aGlzLmRhdGVUaW1lSW5VdGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVXaXRoVGltZXpvbmUgPz8gdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZVRvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZVRvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbyA9IGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8ubWFwKHYgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVXRpbC50b0lzb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVJblV0YyA/PyB0aGlzLmRhdGVUaW1lSW5VdGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclZhbHVlV2l0aFRpbWV6b25lID8/IHRoaXMuZGF0ZVRpbWVXaXRoVGltZXpvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbyA9IERhdGVVdGlsLnRvSXNvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVJblV0YyA/PyB0aGlzLmRhdGVUaW1lSW5VdGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVXaXRoVGltZXpvbmUgPz8gdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZnJvbVByaW1lTGF6eUxvYWRFdmVudFRvTWVkaXVzUXVlcnlQYXJhbXMoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBNZWRpdXNRdWVyeVBhcmFtIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbUJ1aWxkZXIgPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoZXZlbnQucm93cywgZXZlbnQuZmlyc3QpO1xuXG4gICAgICAgIC8vIGFwcGx5IHNvcnRpbmdcbiAgICAgICAgaWYgKGV2ZW50Lm11bHRpU29ydE1ldGEpIHtcbiAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGEuZm9yRWFjaChtc20gPT4gcXVlcnlQYXJhbUJ1aWxkZXIud2l0aFNvcnQobXNtLmZpZWxkLCBtc20ub3JkZXIgPT09IDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IGZpbHRlcmluZ1xuICAgICAgICBpZiAoZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZXZlbnQuZmlsdGVycykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJFdmVudCA9IGV2ZW50LmZpbHRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgKGZpbHRlckV2ZW50IGFzIEZpbHRlck1ldGFkYXRhW10pLmZpbHRlcihlID0+IGUudmFsdWUpLmZvckVhY2goZSA9PiB0aGlzLmFkZE1lZGl1c0ZpbHRlckZyb21QcmltZUZpbHRlck1ldGFkYXRhKHF1ZXJ5UGFyYW1CdWlsZGVyLCBrZXksIGUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXJFdmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE1lZGl1c0ZpbHRlckZyb21QcmltZUZpbHRlck1ldGFkYXRhKHF1ZXJ5UGFyYW1CdWlsZGVyLCBrZXksIGZpbHRlckV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBxdWVyeVBhcmFtQnVpbGRlci5idWlsZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlcjogTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIHByb3BlcnR5OiBzdHJpbmcsIGZpbHRlck1ldGFkYXRhOiBGaWx0ZXJNZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBtYXRjaFR5cGU6IE1lZGl1c0ZpbHRlck1hdGNoVHlwZSA9IHRoaXMuZ2V0TWVkaXVzRmlsdGVyTWF0Y2hUeXBlRnJvbVByaW1lTWF0Y2hNb2RlKGZpbHRlck1ldGFkYXRhLm1hdGNoTW9kZSA/PyAnZXF1YWxzJyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIocHJvcGVydHksIGZpbHRlck1ldGFkYXRhLnZhbHVlLCB1bmRlZmluZWQsIG1hdGNoVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1lZGl1c0ZpbHRlck1hdGNoVHlwZUZyb21QcmltZU1hdGNoTW9kZShtYXRjaE1vZGU6IHN0cmluZywgZGF0YVR5cGU/OiBGaWx0ZXJUeXBlRW51bSk6IE1lZGl1c0ZpbHRlck1hdGNoVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1hcHBpbmcobWF0Y2hNb2RlLCBkYXRhVHlwZSk/LlsyXSA/PyBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNYXBwaW5nKG1hdGNoTW9kZTogc3RyaW5nLCBkYXRhVHlwZT86IEZpbHRlclR5cGVFbnVtLCBpZHggPSAwKTogTWF0Y2hNb2RlTWFwVHlwZSB8IG51bGwge1xuICAgICAgICBjb25zdCBtYXBwaW5ncyA9IHRoaXMubWF0Y2hNb2RlTWFwcGluZy5maWx0ZXIobSA9PiBtW2lkeF0gPT09IG1hdGNoTW9kZSAmJiAoIWRhdGFUeXBlIHx8ICFtWzNdIHx8IGRhdGFUeXBlID09PSBtWzNdKSk7XG4gICAgICAgIGlmIChtYXBwaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcHBpbmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmdzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmdzLnNvcnQoKG0xLCBtMikgPT4gKG0yWzNdID8/IC0xKSAtIChtMVszXSA/PyAtMSkpWzBdO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -6,7 +6,7 @@ import { ToolbarModule } from 'primeng/toolbar';
6
6
  import { ReplaySubject, of, throwError } from 'rxjs';
7
7
  import { catchError, finalize, first } from 'rxjs/operators';
8
8
  import { ActionEditorDescriptor, ActionEditorSubmitDescriptor } from '../../../descriptors/action';
9
- import { ActionEditorSubmitTypeEnum, ActionPositionEnum } from '../../../descriptors/types';
9
+ import { ActionActivationTriggerEnum, ActionEditorSubmitTypeEnum, ActionPositionEnum } from '../../../descriptors/types';
10
10
  import { MngTemplateDirective } from '../../../directives';
11
11
  import { MngActionExecutorService, MngCommonsService, MngNavigationService } from '../../../services';
12
12
  import { I18nUtils, NotificationUtil } from '../../../utils';
@@ -227,7 +227,9 @@ export class MngActionEditorComponent {
227
227
  if (this.dialogConfig) {
228
228
  requestAnimationFrame(() => {
229
229
  this.dialogConfig.header = t ?? undefined;
230
- this.mngCommonsService.setPageTitle(t ?? undefined);
230
+ if (this.action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
231
+ this.mngCommonsService.setPageTitle(t ?? undefined);
232
+ }
231
233
  });
232
234
  }
233
235
  });
@@ -304,4 +306,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImpor
304
306
  type: ViewChild,
305
307
  args: [MngFormEditorComponent]
306
308
  }] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYWN0aW9uL2VkaXRvci9hY3Rpb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vZWRpdG9yL2FjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBYSxhQUFhLEVBQWdCLEVBQUUsRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0QsT0FBTyxFQUFtQixzQkFBc0IsRUFBRSw0QkFBNEIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ25ILE9BQU8sRUFBQywwQkFBMEIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXpELE9BQU8sRUFB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O3VCQUFDLGNBQWM7Z0JBR3dCLFNBQVM7c0JBQXRELGVBQWU7dUJBQUMsb0JBQW9CO2dCQUNILHNCQUFzQjtzQkFBdkQsU0FBUzt1QkFBQyxjQUFjO2dCQUNpQixlQUFlO3NCQUF4RCxTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBOZ0Zvck9mLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcbmltcG9ydCB7VG9vbGJhck1vZHVsZX0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbmFsaXplLCBmaXJzdH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0lFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvYWN0aW9uJztcbmltcG9ydCB7QWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0sIEFjdGlvblBvc2l0aW9uRW51bX0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBJVmlld0NvbnRhaW5lckVkaXRvcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdDb21tb25zU2VydmljZSwgTW5nTmF2aWdhdGlvblNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbHMsIE5vdGlmaWNhdGlvblV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7TW5nRm9ybUVkaXRvckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5pbXBvcnQge01uZ0Zvcm1FZGl0b3JTdWJtaXRFdmVudH0gZnJvbSAnLi4vLi4vZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25Db21wb25lbnR9IGZyb20gJy4uL2FjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uUGFyYW1ldGVyc30gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1hY3Rpb24tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW05nSWYsIFRvb2xiYXJNb2R1bGUsIE1uZ0FjdGlvbkNvbXBvbmVudCwgTmdGb3JPZiwgQXN5bmNQaXBlLCBQcm9ncmVzc1NwaW5uZXJNb2R1bGUsIE1uZ0Zvcm1FZGl0b3JDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvbkVkaXRvckNvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0O1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0ID0gb2YoZmFsc2UpO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbiE6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD47XG5cbiAgICAvLyBkYXRhIHNvdXJjZSBpbnB1dHNcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbUlkPzogSWRUeXBlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtPzogVDtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgQElucHV0KCd2aWV3Q29udGFpbmVyJykgcHVibGljIHZpZXdDb250YWluZXJJbml0PzogSVZpZXdDb250YWluZXI8VCwgUz47XG5cbiAgICBAT3V0cHV0KCdhY3Rpb25TdWJtaXQnKSBwdWJsaWMgYWN0aW9uUnVuRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgICBAT3V0cHV0KCdhY3Rpb25DYW5jZWwnKSBwdWJsaWMgYWN0aW9uQ2FuY2VsRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTW5nVGVtcGxhdGVEaXJlY3RpdmUpIHB1YmxpYyB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8TW5nVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIEBWaWV3Q2hpbGQoJ3N1Ym1pdEJ1dHRvbicpIHB1YmxpYyBzdWJtaXRCdXR0b25FbGVtZW50UmVmITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQpIHB1YmxpYyBlZGl0b3JDb21wb25lbnQhOiBNbmdGb3JtRWRpdG9yQ29tcG9uZW50PFQ+O1xuXG4gICAgcHVibGljIHRpdGxlPzogc3RyaW5nO1xuICAgIHB1YmxpYyBpc0RpYWxvZyA9IHRydWU7XG5cbiAgICAvLyBhY3Rpb25zXG4gICAgcHJpdmF0ZSBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+O1xuICAgIHByaXZhdGUgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+O1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcbiAgICBwdWJsaWMgZm9vdGVyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb290ZXJSaWdodEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHJpdmF0ZSBzdWJtaXRBY3Rpb25JZFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIHN1Ym1pdExvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHVibGljIHN1Ym1pdExvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwcml2YXRlIGlzRmluaXNoZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgcHVibGljIGRpYWxvZ1JvdXRlPzogQWN0aXZhdGVkUm91dGU7XG4gICAgcHJpdmF0ZSBzb3VyY2VDb21wb25lbnQ6IGFueSA9IHRoaXM7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtbmdDb21tb25zU2VydmljZTogTW5nQ29tbW9uc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpYWxvZ1JlZjogRHluYW1pY0RpYWxvZ1JlZiB8IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnIHwgbnVsbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWc/LmRhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZy5kYXRhLmFjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uID0gdGhpcy5pbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbUlkID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/Lml0ZW1JZDtcbiAgICAgICAgICAgIHRoaXMuaXRlbSA9IHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25QYXJhbWV0ZXJzPy5pdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25EYXRhID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/LmFjdGlvbkRhdGE7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8udmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50ID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/LnNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUm91dGUgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8ucm91dGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVByb3ZpZGVyICYmIHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IHRoaXMudmlld0NvbnRhaW5lci5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVByb3ZpZGVyICYmIHR5cGVvZiBkYXRhUHJvdmlkZXJbJ2ZldGNoJyBhcyBrZXlvZiBvYmplY3RdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaWFsb2cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVZpZXdDb250YWluZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VGl0bGUoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmFjdGlvbi5lZGl0b3JBY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmJ1dHRvbi5pY29uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uLndpdGhJY29uKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQgPyAncGkgcGktY2hlY2snIDogJ3BpIHBpLXRpbWVzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmJ1dHRvbi5sYWJlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmJ1dHRvbi53aXRoTGFiZWwoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdnZW5lcmFsLnNhdmUnIDogdGhpcy5pc0RpYWxvZyA/ICdnZW5lcmFsLmNsb3NlJyA6ICdnZW5lcmFsLmNhbmNlbCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBydW4gb3BlcmF0aW9uc1xuICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuTm90aWZpY2F0aW9uU3VjY2Vzcyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5oYXNSdW5Db25maXJtYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuQ29uZmlybWF0aW9uRGVzY3JpcHRvcih0aGlzLmFjdGlvbi5ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yISk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy52aWV3Q29udGFpbmVyPy5nZXRBY3Rpb25zKCkuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnBvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllcz8uaW5jbHVkZXModGhpcy5hY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkhKSkgPz8gW10pIHtcbiAgICAgICAgICAgIHRoaXMucGxhY2VBY3Rpb25zT25Qb3NpdGlvbnMoYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucyA9IHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5yZXZlcnNlKCk7XG4gICAgICAgIHRoaXMuZm9vdGVyUmlnaHRBY3Rpb25zID0gdGhpcy5mb290ZXJSaWdodEFjdGlvbnMucmV2ZXJzZSgpO1xuXG4gICAgICAgIHRoaXMuZmV0Y2hJdGVtKCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyRWRpdG9yPFQsIFM+KT8uZ2V0RWRpdG9yUmVzZXQkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRWRpdG9yID0gdGhpcy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyRWRpdG9yPFQsIFM+O1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lckVkaXRvci5nZXRFZGl0b3JSZXNldCQoKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmZldGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JDb21wb25lbnQ/LnJlc2V0Rm9ybU1vZGVsKGUuaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JDb21wb25lbnQ/LnJlc2V0Rm9ybUZpZWxkVmFsdWUoa2V5LCBlLmZpZWxkc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lckVkaXRvcjxULCBTPik/LmdldEVkaXRvckNsb3NlJCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckVkaXRvciA9IHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lckVkaXRvcjxULCBTPjtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJFZGl0b3IuZ2V0RWRpdG9yQ2xvc2UkKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1sndmlld0NvbnRhaW5lckluaXQnXSAmJiAhY2hhbmdlc1sndmlld0NvbnRhaW5lckluaXQnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplVmlld0NvbnRhaW5lcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KGV2ZW50OiBNbmdGb3JtRWRpdG9yU3VibWl0RXZlbnQ8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIGV2ZW50LmZvcm1JdGVtKVxuICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzLnNvdXJjZUNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uZWRpdG9yRGVzY3JpcHRvci5pc0xvY2FsaXplZCkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMud2l0aExvY2FsZSh0aGlzLm1uZ0NvbW1vbnNTZXJ2aWNlLmFwcERhdGFMYW5ndWFnZURlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucnVuRWRpdG9yU2F2ZSh0aGlzLmFjdGlvbiwgYWN0aW9uUGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIsIHRoaXMuaW5zdGFuY2UsIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gY29udGV4dC5pbnN0YW5jZTtcblxuICAgICAgICAgICAgY29udGV4dC5leGVjdXRpb24kLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0ZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25SdW5FdmVudEVtaXR0ZXIubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24ocmVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICB0aGlzLmFjdGlvbkNhbmNlbEV2ZW50RW1pdHRlci5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZUFjdGlvbih1bmRlZmluZWQsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyU3VibWl0KCkge1xuICAgICAgICB0aGlzLmVkaXRvckNvbXBvbmVudC5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZldGNoSXRlbSgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICBjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIHRoaXMuaXRlbSlcbiAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyKVxuICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQodGhpcy5zb3VyY2VDb21wb25lbnQpO1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24uZWRpdG9yRGVzY3JpcHRvci5pc0xvY2FsaXplZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmVkaXRvckRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLndpdGhMb2NhbGUodGhpcy5tbmdDb21tb25zU2VydmljZS5hcHBEYXRhTGFuZ3VhZ2UhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoTG9jYWxlKHRoaXMubW5nQ29tbW9uc1NlcnZpY2UuYXBwRGF0YUxhbmd1YWdlRGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucnVuRWRpdG9yRmV0Y2godGhpcy5hY3Rpb24sIGFjdGlvblBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyLCB0aGlzLmluc3RhbmNlLCB0aGlzLnByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gY29udGV4dC5pbnN0YW5jZTtcblxuICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbiRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMuYWN0aW9uRXhlY3V0b3IudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCBhY3Rpb25FcnJvciwgJ2ZldGNoJywgdGhpcy52aWV3Q29udGFpbmVyLCB0aGlzLml0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGFjdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbSA9IHJlcyA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmhhc0ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZldGNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uLmZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb24uZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpdGxlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRpdGxlKCkge1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24uZWRpdG9yVGl0bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWcpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0NvbmZpZyEuaGVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0RWRpdG9yVGl0bGVBc3luYyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5hY3Rpb24sIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHQgPT4ge1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IHQgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dDb25maWchLmhlYWRlciA9IHQgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1uZ0NvbW1vbnNTZXJ2aWNlLnNldFBhZ2VUaXRsZSh0ID8/IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVhY3RpdmF0ZUFjdGlvbihpdGVtPzogVCB8IG51bGwsIGNhbmNlbCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlhbG9nKSB7XG4gICAgICAgICAgICAvLyBpZiBjYW5jZWwsIHRoZW4gZm9yY2UgY2xvc2UgdGhlIGRpYWxvZ1xuICAgICAgICAgICAgaWYgKGNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmPy5jbG9zZShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IuZGVhY3RpdmF0ZUFjdGlvbih0aGlzLmluc3RhbmNlISk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBsYWNlQWN0aW9uc09uUG9zaXRpb25zKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+KSB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdDpcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJMZWZ0QWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy50b29sYmFyUmlnaHRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlckxlZnQ6XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJMZWZ0QWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJSaWdodDpcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlclJpZ2h0QWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVWaWV3Q29udGFpbmVyKCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLnZpZXdDb250YWluZXJJbml0ID8/IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UgPz8gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiIsIjxoNSAqbmdJZj1cIiFpc0RpYWxvZyAmJiB0aXRsZVwiPnt7IHRpdGxlIH19PC9oNT5cbjxkaXYgY2xhc3M9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbHVtblwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci10b29sYmFyLWNvbnRhaW5lclwiICpuZ0lmPVwidG9vbGJhckxlZnRBY3Rpb25zLmxlbmd0aCA+IDAgfHwgdG9vbGJhclJpZ2h0QWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cIm1uZy1hY3Rpb24tZWRpdG9yLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nJFwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZyQgOiBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWRcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmckIDogYWN0aW9uRGVmYXVsdExvYWRpbmdJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlXT1cImRpYWxvZ1JvdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLXRvb2xiYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbW5nLWFjdGlvbi1lZGl0b3ItZm9ybS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgW3N0eWxlXT1cInt3aWR0aDogJzNyZW0nLCBoZWlnaHQ6ICczcmVtJ31cIiBzdHJva2VXaWR0aD1cIjNcIj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1uZy1mb3JtLWVkaXRvclxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uZWRpdG9yRGVzY3JpcHRvciAmJiAobG9hZGluZyQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImFjdGlvbi5lZGl0b3JEZXNjcmlwdG9yXCJcbiAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICAoZm9ybVN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCI+XG4gICAgICAgIDwvbW5nLWZvcm0tZWRpdG9yPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gbW5nLWFjdGlvbi1lZGl0b3ItZm9vdGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGZvb3RlckxlZnRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmckXCJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmckIDogYWN0aW9uRGVmYXVsdExvYWRpbmdJbnB1dFwiXG4gICAgICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlXT1cImRpYWxvZ1JvdXRlXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZFwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZm9vdGVyUmlnaHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmckXCJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmckIDogYWN0aW9uRGVmYXVsdExvYWRpbmdJbnB1dFwiXG4gICAgICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlXT1cImRpYWxvZ1JvdXRlXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZFwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYWN0aW9uL2VkaXRvci9hY3Rpb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vZWRpdG9yL2FjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBYSxhQUFhLEVBQWdCLEVBQUUsRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0QsT0FBTyxFQUFtQixzQkFBc0IsRUFBRSw0QkFBNEIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ25ILE9BQU8sRUFBQywyQkFBMkIsRUFBRSwwQkFBMEIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FB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O3NCQUEvQyxLQUFLO3VCQUFDLGVBQWU7Z0JBRVMscUJBQXFCO3NCQUFuRCxNQUFNO3VCQUFDLGNBQWM7Z0JBQ1Msd0JBQXdCO3NCQUF0RCxNQUFNO3VCQUFDLGNBQWM7Z0JBR3dCLFNBQVM7c0JBQXRELGVBQWU7dUJBQUMsb0JBQW9CO2dCQUNILHNCQUFzQjtzQkFBdkQsU0FBUzt1QkFBQyxjQUFjO2dCQUNpQixlQUFlO3NCQUF4RCxTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBOZ0Zvck9mLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcbmltcG9ydCB7VG9vbGJhck1vZHVsZX0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbmFsaXplLCBmaXJzdH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0lFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvYWN0aW9uJztcbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLCBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSwgQWN0aW9uUG9zaXRpb25FbnVtfSBmcm9tICcuLi8uLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIElWaWV3Q29udGFpbmVyRWRpdG9yfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ0NvbW1vbnNTZXJ2aWNlLCBNbmdOYXZpZ2F0aW9uU2VydmljZSwgTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQge0kxOG5VdGlscywgTm90aWZpY2F0aW9uVXRpbH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdGb3JtRWRpdG9yQ29tcG9uZW50fSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7TW5nRm9ybUVkaXRvclN1Ym1pdEV2ZW50fSBmcm9tICcuLi8uLi9mb3JtL21vZGVscyc7XG5pbXBvcnQge01uZ0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0FjdGlvbkRhdGEsIEFjdGlvbkluc3RhbmNlLCBBY3Rpb25QYXJhbWV0ZXJzfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWFjdGlvbi1lZGl0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb24tZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbTmdJZiwgVG9vbGJhck1vZHVsZSwgTW5nQWN0aW9uQ29tcG9uZW50LCBOZ0Zvck9mLCBBc3luY1BpcGUsIFByb2dyZXNzU3Bpbm5lck1vZHVsZSwgTW5nRm9ybUVkaXRvckNvbXBvbmVudF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRWRpdG9yQ29tcG9uZW50PFQsIFM+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQ7XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbkRlZmF1bHRMb2FkaW5nSW5wdXQgPSBvZihmYWxzZSk7XG5cbiAgICAvLyBtZXRhZGF0YSBhbmQgZWRpdG9yIG1vZGUgaW5wdXRcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uITogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgIC8vIGRhdGEgc291cmNlIGlucHV0c1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW0/OiBUO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPjtcbiAgICBASW5wdXQoJ3ZpZXdDb250YWluZXInKSBwdWJsaWMgdmlld0NvbnRhaW5lckluaXQ/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcblxuICAgIEBPdXRwdXQoJ2FjdGlvblN1Ym1pdCcpIHB1YmxpYyBhY3Rpb25SdW5FdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIEBPdXRwdXQoJ2FjdGlvbkNhbmNlbCcpIHB1YmxpYyBhY3Rpb25DYW5jZWxFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLy8gY29udGVudCBhbmQgdmlldyBxdWVyaWVzXG4gICAgQENvbnRlbnRDaGlsZHJlbihNbmdUZW1wbGF0ZURpcmVjdGl2ZSkgcHVibGljIHRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxNbmdUZW1wbGF0ZURpcmVjdGl2ZT47XG4gICAgQFZpZXdDaGlsZCgnc3VibWl0QnV0dG9uJykgcHVibGljIHN1Ym1pdEJ1dHRvbkVsZW1lbnRSZWYhOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoTW5nRm9ybUVkaXRvckNvbXBvbmVudCkgcHVibGljIGVkaXRvckNvbXBvbmVudCE6IE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQ8VD47XG5cbiAgICBwdWJsaWMgdGl0bGU/OiBzdHJpbmc7XG4gICAgcHVibGljIGlzRGlhbG9nID0gdHJ1ZTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBwcml2YXRlIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz47XG4gICAgcHJpdmF0ZSBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj47XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHRvb2xiYXJSaWdodEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb290ZXJMZWZ0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIGZvb3RlclJpZ2h0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG5cbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHVibGljIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwcml2YXRlIHN1Ym1pdEFjdGlvbklkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgc3VibWl0TG9hZGluZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwdWJsaWMgc3VibWl0TG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHByaXZhdGUgaXNGaW5pc2hlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICBwdWJsaWMgZGlhbG9nUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBwcml2YXRlIHNvdXJjZUNvbXBvbmVudDogYW55ID0gdGhpcztcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhY3Rpb25FeGVjdXRvcjogTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1uZ0NvbW1vbnNTZXJ2aWNlOiBNbmdDb21tb25zU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTW5nTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGlhbG9nUmVmOiBEeW5hbWljRGlhbG9nUmVmIHwgbnVsbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgfCBudWxsLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHZpZXdDb250YWluZXJTZXJ2aWNlOiBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZTxULCBTPiB8IG51bGxcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZz8uZGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gdGhpcy5kaWFsb2dDb25maWcuZGF0YS5hY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb24gPSB0aGlzLmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pdGVtSWQgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8uaXRlbUlkO1xuICAgICAgICAgICAgdGhpcy5pdGVtID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/Lml0ZW07XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkRhdGEgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8uYWN0aW9uRGF0YTtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25QYXJhbWV0ZXJzPy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyPFQsIFM+O1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8uc291cmNlQ29tcG9uZW50O1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dSb3V0ZSA9IHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25QYXJhbWV0ZXJzPy5yb3V0ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhUHJvdmlkZXIgJiYgdGhpcy52aWV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gdGhpcy52aWV3Q29udGFpbmVyLmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhUHJvdmlkZXIgJiYgdHlwZW9mIGRhdGFQcm92aWRlclsnZmV0Y2gnIGFzIGtleW9mIG9iamVjdF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWcuZGF0YS5wcmV2aW91c0FjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0FjdGlvbkluc3RhbmNlID0gdGhpcy5kaWFsb2dDb25maWcuZGF0YS5wcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0RpYWxvZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplVmlld0NvbnRhaW5lcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRUaXRsZSgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuYWN0aW9uLmVkaXRvckFjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uYnV0dG9uLmljb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5idXR0b24ud2l0aEljb24oYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdwaSBwaS1jaGVjaycgOiAncGkgcGktdGltZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uYnV0dG9uLmxhYmVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uLndpdGhMYWJlbChhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0ID8gJ2dlbmVyYWwuc2F2ZScgOiB0aGlzLmlzRGlhbG9nID8gJ2dlbmVyYWwuY2xvc2UnIDogJ2dlbmVyYWwuY2FuY2VsJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYXNzaWduIHJ1biBvcGVyYXRpb25zXG4gICAgICAgICAgICAgICAgYWN0aW9uLndpdGhSdW5Ob3RpZmljYXRpb25TdWNjZXNzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLndpdGhSdW5GdW5jdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTdWJtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLndpdGhSdW5Db25maXJtYXRpb25EZXNjcmlwdG9yKHRoaXMuYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBsYWNlQWN0aW9uc09uUG9zaXRpb25zKGFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLnZpZXdDb250YWluZXI/LmdldEFjdGlvbnMoKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUucG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzPy5pbmNsdWRlcyh0aGlzLmFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeSEpKSA/PyBbXSkge1xuICAgICAgICAgICAgdGhpcy5wbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b29sYmFyUmlnaHRBY3Rpb25zID0gdGhpcy50b29sYmFyUmlnaHRBY3Rpb25zLnJldmVyc2UoKTtcbiAgICAgICAgdGhpcy5mb290ZXJSaWdodEFjdGlvbnMgPSB0aGlzLmZvb3RlclJpZ2h0QWN0aW9ucy5yZXZlcnNlKCk7XG5cbiAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcblxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz4pPy5nZXRFZGl0b3JSZXNldCQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb250YWluZXJFZGl0b3IgPSB0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz47XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyRWRpdG9yLmdldEVkaXRvclJlc2V0JCgpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuZmV0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLml0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvckNvbXBvbmVudD8ucmVzZXRGb3JtTW9kZWwoZS5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvckNvbXBvbmVudD8ucmVzZXRGb3JtRmllbGRWYWx1ZShrZXksIGUuZmllbGRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyRWRpdG9yPFQsIFM+KT8uZ2V0RWRpdG9yQ2xvc2UkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRWRpdG9yID0gdGhpcy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyRWRpdG9yPFQsIFM+O1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lckVkaXRvci5nZXRFZGl0b3JDbG9zZSQoKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd2aWV3Q29udGFpbmVySW5pdCddICYmICFjaGFuZ2VzWyd2aWV3Q29udGFpbmVySW5pdCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVWaWV3Q29udGFpbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWJtaXQoZXZlbnQ6IE1uZ0Zvcm1FZGl0b3JTdWJtaXRFdmVudDxUPikge1xuICAgICAgICBpZiAodGhpcy5pc0ZpbmlzaGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgZXZlbnQuZm9ybUl0ZW0pXG4gICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyKVxuICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMuc291cmNlQ29tcG9uZW50KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoTG9jYWxlKHRoaXMubW5nQ29tbW9uc1NlcnZpY2UuYXBwRGF0YUxhbmd1YWdlRGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5hY3Rpb25FeGVjdXRvci5ydW5FZGl0b3JTYXZlKHRoaXMuYWN0aW9uLCBhY3Rpb25QYXJhbWV0ZXJzLCB0aGlzLmRhdGFQcm92aWRlciwgdGhpcy5pbnN0YW5jZSwgdGhpcy5wcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBjb250ZXh0Lmluc3RhbmNlO1xuXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbiQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblJ1bkV2ZW50RW1pdHRlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUFjdGlvbihyZXMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uQ2FuY2VsRXZlbnRFbWl0dGVyLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJTdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tcG9uZW50LnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmV0Y2hJdGVtKCkge1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXIpXG4gICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzLnNvdXJjZUNvbXBvbmVudCk7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uZWRpdG9yRGVzY3JpcHRvci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMud2l0aExvY2FsZSh0aGlzLm1uZ0NvbW1vbnNTZXJ2aWNlLmFwcERhdGFMYW5ndWFnZSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLndpdGhMb2NhbGUodGhpcy5tbmdDb21tb25zU2VydmljZS5hcHBEYXRhTGFuZ3VhZ2VEZWZhdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5hY3Rpb25FeGVjdXRvci5ydW5FZGl0b3JGZXRjaCh0aGlzLmFjdGlvbiwgYWN0aW9uUGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIsIHRoaXMuaW5zdGFuY2UsIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBjb250ZXh0Lmluc3RhbmNlO1xuXG4gICAgICAgIGNvbnRleHQuZXhlY3V0aW9uJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy5hY3Rpb25FeGVjdXRvci50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcih0aGlzLnRyYW5zbGF0ZSwgdGhpcy5hY3Rpb24sIGFjdGlvbkVycm9yLCAnZmV0Y2gnLCB0aGlzLnZpZXdDb250YWluZXIsIHRoaXMuaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gYWN0aW9uRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtID0gcmVzID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uaGFzRmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAnZmV0Y2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb24uZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbi5mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGl0bGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGl0bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi5lZGl0b3JUaXRsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnIS5oZWFkZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gSTE4blV0aWxzLkFjdGlvbi5nZXRFZGl0b3JUaXRsZUFzeW5jKHRoaXMudHJhbnNsYXRlLCB0aGlzLmFjdGlvbiwgdGhpcy5pdGVtKS5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gdCA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWcpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0NvbmZpZyEuaGVhZGVyID0gdCA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW5nQ29tbW9uc1NlcnZpY2Uuc2V0UGFnZVRpdGxlKHQgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYWN0aXZhdGVBY3Rpb24oaXRlbT86IFQgfCBudWxsLCBjYW5jZWwgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5pc0RpYWxvZykge1xuICAgICAgICAgICAgLy8gaWYgY2FuY2VsLCB0aGVuIGZvcmNlIGNsb3NlIHRoZSBkaWFsb2dcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZj8uY2xvc2UoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLmRlYWN0aXZhdGVBY3Rpb24odGhpcy5pbnN0YW5jZSEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQ6XG4gICAgICAgICAgICAgICAgdGhpcy50b29sYmFyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0OlxuICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplVmlld0NvbnRhaW5lcigpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyID0gdGhpcy52aWV3Q29udGFpbmVySW5pdCA/PyB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlID8/IHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLCI8aDUgKm5nSWY9XCIhaXNEaWFsb2cgJiYgdGl0bGVcIj57eyB0aXRsZSB9fTwvaDU+XG48ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2x1bW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhci1jb250YWluZXJcIiAqbmdJZj1cInRvb2xiYXJMZWZ0QWN0aW9ucy5sZW5ndGggPiAwIHx8IHRvb2xiYXJSaWdodEFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJtbmctYWN0aW9uLWVkaXRvci10b29sYmFyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdG9vbGJhckxlZnRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmckIDogYWN0aW9uRGVmYXVsdExvYWRpbmdJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlXT1cImRpYWxvZ1JvdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdG9vbGJhclJpZ2h0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmckXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nJCA6IGFjdGlvbkRlZmF1bHRMb2FkaW5nSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZV09XCJkaWFsb2dSb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZFwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10b29sYmFyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1uZy1hY3Rpb24tZWRpdG9yLWZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICpuZ0lmPVwibG9hZGluZyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIFtzdHlsZV09XCJ7d2lkdGg6ICczcmVtJywgaGVpZ2h0OiAnM3JlbSd9XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtbmctZm9ybS1lZGl0b3JcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLmVkaXRvckRlc2NyaXB0b3IgJiYgKGxvYWRpbmckIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRvcl09XCJhY3Rpb24uZWRpdG9yRGVzY3JpcHRvclwiXG4gICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgKGZvcm1TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L21uZy1mb3JtLWVkaXRvcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1uZy1hY3Rpb24tZWRpdG9yLWZvb3Rlci1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBmb290ZXJMZWZ0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nJFwiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nJCA6IGFjdGlvbkRlZmF1bHRMb2FkaW5nSW5wdXRcIlxuICAgICAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZV09XCJkaWFsb2dSb3V0ZVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWRcIj48L21uZy1hY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGZvb3RlclJpZ2h0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nJFwiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nJCA6IGFjdGlvbkRlZmF1bHRMb2FkaW5nSW5wdXRcIlxuICAgICAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZV09XCJkaWFsb2dSb3V0ZVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWRcIj48L21uZy1hY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=