@rivet-health/design-system 40.35.1 → 40.36.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.
@@ -57,10 +57,10 @@ export var TableColumnHelpers;
57
57
  function getAlignment(metadata, index, allowSelection) {
58
58
  return getColumnAlignment(metadata.dataType, index === 0 && !allowSelection);
59
59
  }
60
- function resolveColumns(state, supportedColumns, columnNameMap, allowSelection) {
60
+ function resolveColumns(state, supportedColumns, columnNameMap, allowSelection, filterTo) {
61
61
  const allColumns = getAllColumns(state, supportedColumns, columnNameMap);
62
62
  return allColumns
63
- .filter(({ enabled }) => enabled)
63
+ .filter(({ enabled }) => (filterTo === 'enabled' ? enabled : !enabled))
64
64
  .reduce((fullColumns, settings, i) => {
65
65
  const metadata = supportedColumns.get(settings.key);
66
66
  const resolvedWidth = settings.preferredWidth === 'auto'
@@ -211,18 +211,30 @@ export var TableColumnHelpers;
211
211
  TableColumnHelpers.changeColumnEnabled = changeColumnEnabled;
212
212
  function enableAllColumns(state, columns, columnNameMap, enabled) {
213
213
  const allColumns = getAllColumns(state, columns, columnNameMap);
214
- if (enabled && allColumns.length > RivTable.ColumnsMaxShown)
214
+ if (enabled && allColumns.length > RivTable.ColumnsMaxShown) {
215
215
  return state;
216
+ }
217
+ const updatedColumnSettings = allColumns.map(currentColumnSettings => {
218
+ const currentColumnMetadata = columns.get(currentColumnSettings.key);
219
+ const isColumnAlwaysVisible = currentColumnMetadata?.alwaysVisible ?? false;
220
+ if (isColumnAlwaysVisible) {
221
+ return {
222
+ ...currentColumnSettings,
223
+ enabled: true,
224
+ };
225
+ }
226
+ return {
227
+ ...currentColumnSettings,
228
+ enabled: enabled,
229
+ // Unpin if being unchecked
230
+ pinned: !enabled ? false : currentColumnSettings.pinned,
231
+ };
232
+ });
216
233
  return {
217
234
  ...state,
218
235
  display: {
219
236
  ...state.display,
220
- columnSettings: orderIntentionally(allColumns.map(c => ({
221
- ...c,
222
- enabled: enabled,
223
- // Unpin if being unchecked
224
- pinned: !enabled ? false : c.pinned,
225
- })), columnNameMap),
237
+ columnSettings: orderIntentionally(updatedColumnSettings, columnNameMap),
226
238
  },
227
239
  };
228
240
  }
@@ -265,9 +277,35 @@ export var TableColumnHelpers;
265
277
  clickPreventDefault: metadata.clickPreventDefault,
266
278
  clickStopPropagation: metadata.clickStopPropagation,
267
279
  displayName: metadata.displayName,
280
+ alwaysVisible: metadata.alwaysVisible,
281
+ tooltipForHideIcon: metadata.tooltipForHideIcon,
268
282
  },
269
283
  ]));
270
284
  }
271
285
  TableColumnHelpers.createColumnMetadataMap = createColumnMetadataMap;
286
+ function getColumnSettingsColumnList(state) {
287
+ const allColumnMetadata = [
288
+ ...state.display.columns,
289
+ ...state.display.disabledColumns,
290
+ ];
291
+ const columnsLength = state.display.allColumns.length;
292
+ const allColumns = state.display.allColumns.map((column, i) => {
293
+ const nextColumnPinned = i + 2 <= columnsLength
294
+ ? state.display.allColumns[i + 1].pinned
295
+ : false;
296
+ const currentColumnMetadata = allColumnMetadata.find(metadata => metadata.key === column.key);
297
+ return {
298
+ ...column,
299
+ resolvedName: state.display.columnNameMap.get(column.key) ?? column.key,
300
+ stateIndex: i,
301
+ isLastPinnedColumn: column.pinned && !nextColumnPinned,
302
+ alwaysVisible: currentColumnMetadata?.alwaysVisible ?? false,
303
+ tooltipForHideIcon: currentColumnMetadata?.tooltipForHideIcon,
304
+ highlightIndices: [],
305
+ };
306
+ });
307
+ return allColumns;
308
+ }
309
+ TableColumnHelpers.getColumnSettingsColumnList = getColumnSettingsColumnList;
272
310
  })(TableColumnHelpers || (TableColumnHelpers = {}));
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL2NvbHVtbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwQyxNQUFNLEtBQVcsa0JBQWtCLENBaWNsQztBQWpjRCxXQUFpQixrQkFBa0I7SUFDakMsU0FBZ0Isa0JBQWtCLENBQ2hDLFFBQWlDLEVBQ2pDLE9BQWdCO1FBRWhCLElBQUksT0FBTztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzNCLFFBQVEsUUFBUSxFQUFFO1lBQ2hCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxVQUFVO2dCQUNiLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxXQUFXO2dCQUNkLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssUUFBUTtnQkFDWCxPQUFPLE9BQU8sQ0FBQztTQUNsQjtJQUNILENBQUM7SUFqQmUscUNBQWtCLHFCQWlCakMsQ0FBQTtJQUVELFNBQWdCLGFBQWEsQ0FNM0IsS0FBcUMsRUFDckMsZ0JBQWlELEVBQ2pELGFBQXdDO1FBRXhDLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsMkVBQTJFO1FBQzNFLDZFQUE2RTtRQUM3RSx5RUFBeUU7UUFDekUsdUVBQXVFO1FBQ3ZFLGtDQUFrQztRQUNsQyxNQUFNLDhCQUE4QixHQUFHLFVBQVUsQ0FDL0MsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUNuRCxDQUFDO1FBRUYsaUVBQWlFO1FBQ2pFLE1BQU0sdUJBQXVCLEdBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUM5QyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQzFCLENBQUM7UUFFSixNQUFNLDBCQUEwQixHQUFpQztZQUMvRCxHQUFHLDhCQUE4QjtTQUNsQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqQixHQUFHO1lBQ0gsT0FBTyxFQUFFLElBQUk7WUFDYixjQUFjLEVBQUUsTUFBTTtZQUN0QixNQUFNLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhO1NBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUosT0FBTyxrQkFBa0IsQ0FDdkIsQ0FBQyxHQUFHLHVCQUF1QixFQUFFLEdBQUcsMEJBQTBCLENBQUMsRUFDM0QsYUFBYSxDQUNkLENBQUM7SUFDSixDQUFDO0lBekNlLGdDQUFhLGdCQXlDNUIsQ0FBQTtJQUVELFNBQVMsa0JBQWtCLENBQ3pCLE9BQXFDLEVBQ3JDLGFBQXdDO1FBRXhDLE9BQU87WUFDTCxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2hDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzlDLEdBQUcsT0FBTztpQkFDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2lCQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2IsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQztTQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxZQUFZLENBQ25CLFFBQWlDLEVBQ2pDLEtBQWEsRUFDYixjQUF3QjtRQUV4QixPQUFPLGtCQUFrQixDQUN2QixRQUFRLENBQUMsUUFBUSxFQUNqQixLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQWdCLGNBQWMsQ0FNNUIsS0FBcUMsRUFDckMsZ0JBQWlELEVBQ2pELGFBQXdDLEVBQ3hDLGNBQW1DO1FBRW5DLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekUsT0FBTyxVQUFVO2FBQ2QsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ2hDLE1BQU0sQ0FDTCxDQUNFLFdBQXFDLEVBQ3JDLFFBQW9DLEVBQ3BDLENBQVMsRUFDaUIsRUFBRTtZQUM1QixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBRSxDQUFDO1lBQ3JELE1BQU0sYUFBYSxHQUNqQixRQUFRLENBQUMsY0FBYyxLQUFLLE1BQU07Z0JBQ2hDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUTtnQkFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0QsTUFBTSxjQUFjLEdBQ2xCLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTztnQkFDTCxHQUFHLFdBQVc7Z0JBQ2Q7b0JBQ0UsR0FBRyxRQUFRO29CQUNYLEdBQUcsUUFBUTtvQkFDWCxLQUFLLEVBQUUsYUFBYTtvQkFDcEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNO3dCQUNuQixDQUFDLENBQUMsY0FBYzs0QkFDZCxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLOzRCQUNuRCxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWM7Z0NBQ2xCLENBQUMsQ0FBQyxFQUFFO2dDQUNKLENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxJQUFJO29CQUNSLFNBQVMsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDO2lCQUN2RDthQUNGLENBQUM7UUFDSixDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7SUFDTixDQUFDO0lBOUNlLGlDQUFjLGlCQThDN0IsQ0FBQTtJQUVELFNBQWdCLGVBQWUsQ0FNN0IsS0FBcUMsRUFDckMsT0FBd0MsRUFDeEMsYUFBd0MsRUFDeEMsTUFBUyxFQUNULE1BQWU7UUFFZixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVoRSxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2YsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xFLElBQUksWUFBWSxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUU7b0JBQzVDLE9BQU8sS0FBSyxDQUFDLENBQUMsK0NBQStDO2lCQUM5RDthQUNGO1NBQ0Y7UUFFRCxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsT0FBTyxFQUFFO2dCQUNQLEdBQUcsS0FBSyxDQUFDLE9BQU87Z0JBQ2hCLGNBQWMsRUFBRSxrQkFBa0IsQ0FDaEMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25CLEdBQUcsQ0FBQztvQkFDSixNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07b0JBQzVDLCtCQUErQjtvQkFDL0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztpQkFDdkQsQ0FBQyxDQUFDLEVBQ0gsYUFBYSxDQUNkO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQXhDZSxrQ0FBZSxrQkF3QzlCLENBQUE7SUFFRCxTQUFnQix3QkFBd0IsQ0FNdEMsS0FBcUMsRUFDckMsT0FBd0MsRUFDeEMsYUFBd0MsRUFDeEMsS0FBYSxFQUNiLE1BQWU7UUFFZixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVoRSxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsT0FBTyxFQUFFO2dCQUNQLEdBQUcsS0FBSyxDQUFDLE9BQU87Z0JBQ2hCLGNBQWMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN0QyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ2hELENBQUMsQ0FBQzthQUNIO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUF2QmUsMkNBQXdCLDJCQXVCdkMsQ0FBQTtJQUVELFNBQWdCLFlBQVksQ0FNMUIsS0FBcUMsRUFDckMsT0FBd0MsRUFDeEMsYUFBd0MsRUFDeEMsTUFBUyxFQUNULFFBQXlCO1FBRXpCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sU0FBUyxHQUNiLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUNaLFFBQVEsSUFBSSxPQUFPO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFaEIsSUFDRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPO1lBQ2xDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxlQUFlO1lBRXhFLE9BQU8sS0FBSyxDQUFDO1FBRWYsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQ2xDLEtBQUssRUFDTCxPQUFPLEVBQ1AsYUFBYSxFQUNiLGFBQWEsRUFDYixRQUFRLENBQ1QsQ0FBQztRQUNGLGlDQUFpQztRQUNqQyxPQUFPLG1CQUFtQixDQUN4QixVQUFVLEVBQ1YsT0FBTyxFQUNQLGFBQWEsRUFDYixNQUFNLEVBQ04sSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBNUNlLCtCQUFZLGVBNEMzQixDQUFBO0lBRUQsU0FBZ0IsaUJBQWlCLENBTS9CLEtBQXFDLEVBQ3JDLE9BQXdDLEVBQ3hDLGFBQXdDLEVBQ3hDLGFBQXFCLEVBQ3JCLFFBQWdCO1FBRWhCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWhFLCtDQUErQztRQUMvQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsQ0FBQztRQUNyRSxNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztZQUNqQyxJQUFJO1lBQ0osR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUMvQixDQUFDO1FBRUYsc0VBQXNFO1FBQ3RFLG9FQUFvRTtRQUNwRSxvRUFBb0U7UUFDcEUsMERBQTBEO1FBQzFELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2pELElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtnQkFDbEIsT0FBTztvQkFDTCxHQUFHLFFBQVE7b0JBQ1gsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO3dCQUNyQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksSUFBSTt3QkFDNUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUs7b0JBQy9CLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTzt3QkFDdkIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUk7d0JBQzdCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxLQUFLO2lCQUNqQyxDQUFDO2FBQ0g7O2dCQUFNLE9BQU8sUUFBUSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2xDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDaEQsSUFBSSxXQUFXLElBQUksYUFBYSxFQUFFO1lBQ2hDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzlELElBQUksWUFBWSxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUU7Z0JBQzVDLG9DQUFvQztnQkFDcEMsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEtBQUssQ0FBQyxPQUFPO2dCQUNoQixjQUFjLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQzthQUMzRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBMURlLG9DQUFpQixvQkEwRGhDLENBQUE7SUFFRCxTQUFnQixtQkFBbUIsQ0FNakMsS0FBcUMsRUFDckMsT0FBd0MsRUFDeEMsYUFBd0MsRUFDeEMsTUFBUyxFQUNULE9BQWdCO1FBRWhCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLElBQ0UsT0FBTztZQUNQLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQ3hFO1lBQ0EsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxLQUFLLENBQUMsT0FBTztnQkFDaEIsY0FBYyxFQUFFLGtCQUFrQixDQUNoQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbkIsR0FBRyxDQUFDO29CQUNKLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztvQkFDL0MsMkJBQTJCO29CQUMzQixNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07aUJBQ3hELENBQUMsQ0FBQyxFQUNILGFBQWEsQ0FDZDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFuQ2Usc0NBQW1CLHNCQW1DbEMsQ0FBQTtJQUVELFNBQWdCLGdCQUFnQixDQU05QixLQUFxQyxFQUNyQyxPQUF3QyxFQUN4QyxhQUF3QyxFQUN4QyxPQUFnQjtRQUVoQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNoRSxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFMUUsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEtBQUssQ0FBQyxPQUFPO2dCQUNoQixjQUFjLEVBQUUsa0JBQWtCLENBQ2hDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNuQixHQUFHLENBQUM7b0JBQ0osT0FBTyxFQUFFLE9BQU87b0JBQ2hCLDJCQUEyQjtvQkFDM0IsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO2lCQUNwQyxDQUFDLENBQUMsRUFDSCxhQUFhLENBQ2Q7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBN0JlLG1DQUFnQixtQkE2Qi9CLENBQUE7SUFFRCxTQUFnQixpQkFBaUIsQ0FNL0IsS0FBcUMsRUFDckMsT0FBd0MsRUFDeEMsYUFBd0MsRUFDeEMsTUFBUyxFQUNULGNBQTREO1FBRTVELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxLQUFLLENBQUMsT0FBTztnQkFDaEIsY0FBYyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNuQyxHQUFHLENBQUM7b0JBQ0osY0FBYyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO2lCQUNyRSxDQUFDLENBQUM7YUFDSjtTQUNGLENBQUM7SUFDSixDQUFDO0lBdkJlLG9DQUFpQixvQkF1QmhDLENBQUE7SUFFRCxTQUFnQixxQkFBcUIsQ0FNbkMsS0FBcUMsRUFDckMsT0FBd0MsRUFDeEMsYUFBd0MsRUFDeEMsa0JBQWdEO1FBRWhELE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxLQUFLLENBQUMsT0FBTztnQkFDaEIsY0FBYyxFQUFFLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQzthQUN0RTtTQUNGLENBQUM7SUFDSixDQUFDO0lBbEJlLHdDQUFxQix3QkFrQnBDLENBQUE7SUFFRCxTQUFnQix1QkFBdUIsQ0FJckMsT0FBbUQ7UUFFbkQsT0FBTyxJQUFJLEdBQUcsQ0FDWixDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQy9DLElBQUk7WUFDSjtnQkFDRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRO2dCQUM5QixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7Z0JBQy9CLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtnQkFDL0IsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzNCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0IsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhO2dCQUNyQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsbUJBQW1CO2dCQUNqRCxvQkFBb0IsRUFBRSxRQUFRLENBQUMsb0JBQW9CO2dCQUNuRCxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7YUFDbEM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUF2QmUsMENBQXVCLDBCQXVCdEMsQ0FBQTtBQUNILENBQUMsRUFqY2dCLGtCQUFrQixLQUFsQixrQkFBa0IsUUFpY2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlmZmVyZW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZUNvbHVtbkhlbHBlcnMge1xuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQWxpZ25tZW50KFxuICAgIGRhdGFUeXBlOiBSaXZUYWJsZS5Db2x1bW5EYXRhVHlwZSxcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db2x1bW5BbGlnbm1lbnQge1xuICAgIGlmIChpc0ZpcnN0KSByZXR1cm4gJ2xlZnQnO1xuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAnbG9uZ1RleHQnOlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgY2FzZSAnYWR2YW5jZWQnOlxuICAgICAgY2FzZSAnaWNvbic6XG4gICAgICBjYXNlICdzaG9ydFRleHQnOlxuICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QWxsQ29sdW1uczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgc3VwcG9ydGVkQ29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICApOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdIHtcbiAgICAvLyBJZiB0aGUgdGFibGUgb2ZmZXJzIG1vcmUgY29sdW1ucyB0aGFuIHRoZSB1c2VyIGhhcyBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4gICAgLy8gZm9yIChvciBpZiB0aGUgdXNlciBoYXMgbm8gY29uZmlndXJhdGlvbiBzZXR0aW5ncyB5ZXQpLCB3ZSdsbCBhcHBlbmQgdGhlbVxuICAgIC8vIHRvIHRoZSBlbmQgKHVubGVzcyB0aGV5IHNob3VsZCBiZSBwaW5uZWQgYnkgZGVmYXVsdCwgaW4gd2hpY2ggY2FzZSB3ZSdsbFxuICAgIC8vIGFwcGVuZCB0aGVtIGFmdGVyIHRoZSBvdGhlciBwaW5uZWQgY29sdW1ucykuIFRoaXMgZW5zdXJlcyB0aGF0IG5ldyBjb2x1bW5zXG4gICAgLy8gd2UgYWRkIHRvIGV4aXN0aW5nIHRhYmxlcyBvdmVyIHRpbWUgKDEpIGdldCBkaXNwbGF5ZWQgZXZlbiB0aG91Z2ggdGhleVxuICAgIC8vIGRvbid0IGFwcGVhciBpbiB0aGUgdXNlcidzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgeWV0LCBhbmQgKDIpIGRvbid0XG4gICAgLy8gaW50ZXJydXB0IHRoZWlyIGV4aXN0aW5nIHNldHVwLlxuICAgIGNvbnN0IGNvbHVtbk5hbWVzV2l0aG91dFVzZXJTZXR0aW5ncyA9IGRpZmZlcmVuY2UoXG4gICAgICBbLi4uc3VwcG9ydGVkQ29sdW1ucy5rZXlzKCldLFxuICAgICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5tYXAoKHsga2V5IH0pID0+IGtleSksXG4gICAgKTtcblxuICAgIC8vIFRocm93IG91dCBzZXR0aW5ncyBmb3IgY29sdW1ucyBubyBsb25nZXIgb2ZmZXJlZCBieSB0aGUgdGFibGUuXG4gICAgY29uc3QgY29sdW1uc1dpdGhVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPVxuICAgICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5maWx0ZXIoKHsga2V5IH0pID0+XG4gICAgICAgIHN1cHBvcnRlZENvbHVtbnMuaGFzKGtleSksXG4gICAgICApO1xuXG4gICAgY29uc3QgY29sdW1uc1dpdGhvdXRVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPSBbXG4gICAgICAuLi5jb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MsXG4gICAgXS5tYXAoKGtleTogQykgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBwcmVmZXJyZWRXaWR0aDogJ2F1dG8nLFxuICAgICAgcGlubmVkOiAhIXN1cHBvcnRlZENvbHVtbnMuZ2V0KGtleSk/LmRlZmF1bHRQaW5uZWQsXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIG9yZGVySW50ZW50aW9uYWxseShcbiAgICAgIFsuLi5jb2x1bW5zV2l0aFVzZXJTZXR0aW5ncywgLi4uY29sdW1uc1dpdGhvdXRVc2VyU2V0dGluZ3NdLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gb3JkZXJJbnRlbnRpb25hbGx5PEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4+KFxuICAgIGNvbHVtbnM6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgKTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmNvbHVtbnMuZmlsdGVyKHYgPT4gdi5waW5uZWQpLFxuICAgICAgLi4uY29sdW1ucy5maWx0ZXIodiA9PiB2LmVuYWJsZWQgJiYgIXYucGlubmVkKSxcbiAgICAgIC4uLmNvbHVtbnNcbiAgICAgICAgLmZpbHRlcih2ID0+ICF2LmVuYWJsZWQgJiYgIXYucGlubmVkKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFOYW1lID0gY29sdW1uTmFtZU1hcC5nZXQoYS5rZXkpID8/IGEua2V5O1xuICAgICAgICAgIGNvbnN0IGJOYW1lID0gY29sdW1uTmFtZU1hcC5nZXQoYi5rZXkpID8/IGIua2V5O1xuICAgICAgICAgIHJldHVybiBhTmFtZS5sb2NhbGVDb21wYXJlKGJOYW1lKTtcbiAgICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsaWdubWVudChcbiAgICBtZXRhZGF0YTogUml2VGFibGUuQ29sdW1uTWV0YWRhdGEsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGxvd1NlbGVjdGlvbj86IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvbHVtbkFsaWdubWVudCB7XG4gICAgcmV0dXJuIGdldENvbHVtbkFsaWdubWVudChcbiAgICAgIG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgICAgaW5kZXggPT09IDAgJiYgIWFsbG93U2VsZWN0aW9uLFxuICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBhbGxvd1NlbGVjdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgKTogUml2VGFibGUuRnVsbENvbHVtbjxDPltdIHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgc3VwcG9ydGVkQ29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgcmV0dXJuIGFsbENvbHVtbnNcbiAgICAgIC5maWx0ZXIoKHsgZW5hYmxlZCB9KSA9PiBlbmFibGVkKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFxuICAgICAgICAgIGZ1bGxDb2x1bW5zOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10sXG4gICAgICAgICAgc2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LFxuICAgICAgICAgIGk6IG51bWJlcixcbiAgICAgICAgKTogUml2VGFibGUuRnVsbENvbHVtbjxDPltdID0+IHtcbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHN1cHBvcnRlZENvbHVtbnMuZ2V0KHNldHRpbmdzLmtleSkhO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkV2lkdGggPVxuICAgICAgICAgICAgc2V0dGluZ3MucHJlZmVycmVkV2lkdGggPT09ICdhdXRvJ1xuICAgICAgICAgICAgICA/IG1ldGFkYXRhLm1pbldpZHRoXG4gICAgICAgICAgICAgIDogTWF0aC5tYXgobWV0YWRhdGEubWluV2lkdGgsIHNldHRpbmdzLnByZWZlcnJlZFdpZHRoKTtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c0NvbHVtbjogUml2VGFibGUuRnVsbENvbHVtbjxDPiB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICBmdWxsQ29sdW1uc1tpIC0gMV07XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLmZ1bGxDb2x1bW5zLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgICAgICAgIHdpZHRoOiByZXNvbHZlZFdpZHRoLFxuICAgICAgICAgICAgICBsZWZ0OiBzZXR0aW5ncy5waW5uZWRcbiAgICAgICAgICAgICAgICA/IHByZXZpb3VzQ29sdW1uXG4gICAgICAgICAgICAgICAgICA/IChwcmV2aW91c0NvbHVtbi5sZWZ0IHx8IDApICsgcHJldmlvdXNDb2x1bW4ud2lkdGhcbiAgICAgICAgICAgICAgICAgIDogISFhbGxvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgPyA0MFxuICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdldEFsaWdubWVudChtZXRhZGF0YSwgaSwgISFhbGxvd1NlbGVjdGlvbiksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgICAgIFtdLFxuICAgICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5QaW48XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBjb2x1bW46IEMsXG4gICAgcGlubmVkOiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcblxuICAgIGlmIChwaW5uZWQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGFsbENvbHVtbnMuZmluZChjID0+IGMua2V5ID09PSBjb2x1bW4pO1xuICAgICAgY29uc3Qgd2FzRW5hYmxlZCA9ICEhdGFyZ2V0Py5lbmFibGVkO1xuICAgICAgaWYgKCF3YXNFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IGVuYWJsZWRDb3VudCA9IGFsbENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZW5hYmxlZCkubGVuZ3RoO1xuICAgICAgICBpZiAoZW5hYmxlZENvdW50ID49IFJpdlRhYmxlLkNvbHVtbnNNYXhTaG93bikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZTsgLy8gcmVmdXNlIHRoZSBwaW4gc2luY2UgaXQgd291bGQgZXhjZWVkIHRoZSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IG9yZGVySW50ZW50aW9uYWxseShcbiAgICAgICAgICBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgICAgICAuLi5jLFxuICAgICAgICAgICAgcGlubmVkOiBjLmtleSA9PT0gY29sdW1uID8gcGlubmVkIDogYy5waW5uZWQsXG4gICAgICAgICAgICAvLyBDaGVjay9lbmFibGUgaWYgYmVpbmcgcGlubmVkXG4gICAgICAgICAgICBlbmFibGVkOiBjLmtleSA9PT0gY29sdW1uICYmIHBpbm5lZCA/IHRydWUgOiBjLmVuYWJsZWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uc0ZyZWV6ZVN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmcmVlemU6IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogYWxsQ29sdW1ucy5tYXAoKGMsIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4geyAuLi5jLCBwaW5uZWQ6IGZyZWV6ZSAmJiBpIDw9IGluZGV4IH07XG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG1vdmVDb2x1bW5UbzxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICAgIGNvbHVtbjogQyxcbiAgICBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gYWxsQ29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLmtleSA9PT0gY29sdW1uKTtcbiAgICBjb25zdCBsYXN0SW5kZXggPVxuICAgICAgcG9zaXRpb24gPT0gJ2VuZCcgPyBhbGxDb2x1bW5zLmZpbmRJbmRleChjID0+ICFjLmVuYWJsZWQpIDogMDtcbiAgICBjb25zdCBuZXdJbmRleCA9XG4gICAgICBwb3NpdGlvbiA9PSAnc3RhcnQnXG4gICAgICAgID8gMFxuICAgICAgICA6IGxhc3RJbmRleCA9PSAtMVxuICAgICAgICA/IGFsbENvbHVtbnMubGVuZ3RoIC0gMVxuICAgICAgICA6IGxhc3RJbmRleDtcblxuICAgIGlmIChcbiAgICAgICFhbGxDb2x1bW5zW3ByZXZpb3VzSW5kZXhdLmVuYWJsZWQgJiZcbiAgICAgIGFsbENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZW5hYmxlZCkubGVuZ3RoID49IFJpdlRhYmxlLkNvbHVtbnNNYXhTaG93blxuICAgIClcbiAgICAgIHJldHVybiBzdGF0ZTtcblxuICAgIGNvbnN0IG1vdmVkU3RhdGUgPSBjaGFuZ2VDb2x1bW5PcmRlcihcbiAgICAgIHN0YXRlLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgbmV3SW5kZXgsXG4gICAgKTtcbiAgICAvL01ha2Ugc3VyZSB0aGUgY29sdW1uIGlzIGVuYWJsZWRcbiAgICByZXR1cm4gY2hhbmdlQ29sdW1uRW5hYmxlZChcbiAgICAgIG1vdmVkU3RhdGUsXG4gICAgICBjb2x1bW5zLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIGNvbHVtbixcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5PcmRlcjxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICAgIHByZXZpb3VzSW5kZXg6IG51bWJlcixcbiAgICBuZXdJbmRleDogbnVtYmVyLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcblxuICAgIC8vIEZpcnN0LCBwdXQgdGhlIGNvbHVtbnMgaW4gdGhlIGRlc2lyZWQgb3JkZXIuXG4gICAgY29uc3QgaXRlbSA9IGFsbENvbHVtbnNbcHJldmlvdXNJbmRleF07XG4gICAgY29uc3Qgd2l0aG91dEl0ZW0gPSBhbGxDb2x1bW5zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gcHJldmlvdXNJbmRleCk7XG4gICAgY29uc3QgcmVvcmRlcmVkID0gW1xuICAgICAgLi4ud2l0aG91dEl0ZW0uc2xpY2UoMCwgbmV3SW5kZXgpLFxuICAgICAgaXRlbSxcbiAgICAgIC4uLndpdGhvdXRJdGVtLnNsaWNlKG5ld0luZGV4KSxcbiAgICBdO1xuXG4gICAgLy8gVGhlbiwgd2UgbWF5IG5lZWQgdG8gZml4IHRoZSBwaW5zIChhbGwgcGlubmVkIGNvbHVtbnMgYXBwZWFyIGF0IHRoZVxuICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgY29sdW1ucyBhcnJheSkgc2luY2UgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBkcmFnXG4gICAgLy8gYW5kIGRyb3AgY29sdW1ucyB0byBhbmQgZnJvbSB0aGUgcGlubmVkIGFyZWEuIElmIHRoZSB1c2VyIGRyYWdzIGFcbiAgICAvLyBjb2x1bW4gYWNyb3NzIHRoYXQgdGhyZXNob2xkLCB1cGRhdGUgaXRzIHBpbm5lZCBzdGF0dXMuXG4gICAgY29uc3QgdXBkYXRlZCA9IHJlb3JkZXJlZC5tYXAoKHNldHRpbmdzLCBpLCBhcnIpID0+IHtcbiAgICAgIGlmIChuZXdJbmRleCA9PT0gaSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgIHBpbm5lZDogc2V0dGluZ3MucGlubmVkXG4gICAgICAgICAgICA/IGFycltpIC0gMV0/LnBpbm5lZCA/PyB0cnVlXG4gICAgICAgICAgICA6IGFycltpICsgMV0/LnBpbm5lZCA/PyBmYWxzZSxcbiAgICAgICAgICBlbmFibGVkOiBzZXR0aW5ncy5lbmFibGVkXG4gICAgICAgICAgICA/IGFycltpIC0gMV0/LmVuYWJsZWQgPz8gdHJ1ZVxuICAgICAgICAgICAgOiBhcnJbaSArIDFdPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHJldHVybiBzZXR0aW5ncztcbiAgICB9KTtcblxuICAgIGNvbnN0IHdhc0Rpc2FibGVkID0gIWl0ZW0uZW5hYmxlZDtcbiAgICBjb25zdCBiZWNhbWVFbmFibGVkID0gdXBkYXRlZFtuZXdJbmRleF0uZW5hYmxlZDtcbiAgICBpZiAod2FzRGlzYWJsZWQgJiYgYmVjYW1lRW5hYmxlZCkge1xuICAgICAgY29uc3QgZW5hYmxlZENvdW50ID0gYWxsQ29sdW1ucy5maWx0ZXIoYyA9PiBjLmVuYWJsZWQpLmxlbmd0aDtcbiAgICAgIGlmIChlbmFibGVkQ291bnQgPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duKSB7XG4gICAgICAgIC8vIFJlZnVzZSB0aGUgbW92ZTsga2VlcCBzdGF0ZSBhcy1pc1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KHVwZGF0ZWQsIGNvbHVtbk5hbWVNYXApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbkVuYWJsZWQ8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBjb2x1bW46IEMsXG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgaWYgKFxuICAgICAgZW5hYmxlZCAmJlxuICAgICAgYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5lbmFibGVkKS5sZW5ndGggPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duXG4gICAgKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KFxuICAgICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgICBlbmFibGVkOiBjLmtleSA9PT0gY29sdW1uID8gZW5hYmxlZCA6IGMuZW5hYmxlZCxcbiAgICAgICAgICAgIC8vIFVucGluIGlmIGJlaW5nIHVuY2hlY2tlZFxuICAgICAgICAgICAgcGlubmVkOiBjLmtleSA9PT0gY29sdW1uICYmICFlbmFibGVkID8gZmFsc2UgOiBjLnBpbm5lZCxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbmFibGVBbGxDb2x1bW5zPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgaWYgKGVuYWJsZWQgJiYgYWxsQ29sdW1ucy5sZW5ndGggPiBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd24pIHJldHVybiBzdGF0ZTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IG9yZGVySW50ZW50aW9uYWxseShcbiAgICAgICAgICBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgICAgICAuLi5jLFxuICAgICAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgICAgIC8vIFVucGluIGlmIGJlaW5nIHVuY2hlY2tlZFxuICAgICAgICAgICAgcGlubmVkOiAhZW5hYmxlZCA/IGZhbHNlIDogYy5waW5uZWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uV2lkdGg8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBjb2x1bW46IEMsXG4gICAgcHJlZmVycmVkV2lkdGg6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+WydwcmVmZXJyZWRXaWR0aCddLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBwcmVmZXJyZWRXaWR0aDogYy5rZXkgPT09IGNvbHVtbiA/IHByZWZlcnJlZFdpZHRoIDogYy5wcmVmZXJyZWRXaWR0aCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc2V0VG9EZWZhdWx0Q29sdW1uczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICAgIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoZGVmYXVsdENvbHVtblN0YXRlLCBjb2x1bW5OYW1lTWFwKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb2x1bW5NZXRhZGF0YU1hcDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gID4oXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICApOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+IHtcbiAgICByZXR1cm4gbmV3IE1hcChcbiAgICAgIFsuLi5jb2x1bW5zLmVudHJpZXMoKV0ubWFwKChbbmFtZSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBvcmRlcmFibGU6ICEhbWV0YWRhdGEub3JkZXJLZXksXG4gICAgICAgICAgZmlsdGVyYWJsZTogbWV0YWRhdGEuZmlsdGVyYWJsZSxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBtZXRhZGF0YS5zZWFyY2hhYmxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICBtaW5XaWR0aDogbWV0YWRhdGEubWluV2lkdGgsXG4gICAgICAgICAgZGF0YVR5cGU6IG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgICAgICAgIGRlZmF1bHRQaW5uZWQ6IG1ldGFkYXRhLmRlZmF1bHRQaW5uZWQsXG4gICAgICAgICAgY2xpY2tQcmV2ZW50RGVmYXVsdDogbWV0YWRhdGEuY2xpY2tQcmV2ZW50RGVmYXVsdCxcbiAgICAgICAgICBjbGlja1N0b3BQcm9wYWdhdGlvbjogbWV0YWRhdGEuY2xpY2tTdG9wUHJvcGFnYXRpb24sXG4gICAgICAgICAgZGlzcGxheU5hbWU6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgfVxufVxuIl19
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL2NvbHVtbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwQyxNQUFNLEtBQVcsa0JBQWtCLENBdWdCbEM7QUF2Z0JELFdBQWlCLGtCQUFrQjtJQUNqQyxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBaUMsRUFDakMsT0FBZ0I7UUFFaEIsSUFBSSxPQUFPO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDM0IsUUFBUSxRQUFRLEVBQUU7WUFDaEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxRQUFRLENBQUM7WUFDbEIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sT0FBTyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQWpCZSxxQ0FBa0IscUJBaUJqQyxDQUFBO0lBRUQsU0FBZ0IsYUFBYSxDQU0zQixLQUFxQyxFQUNyQyxnQkFBaUQsRUFDakQsYUFBd0M7UUFFeEMsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSwyRUFBMkU7UUFDM0UsNkVBQTZFO1FBQzdFLHlFQUF5RTtRQUN6RSx1RUFBdUU7UUFDdkUsa0NBQWtDO1FBQ2xDLE1BQU0sOEJBQThCLEdBQUcsVUFBVSxDQUMvQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FB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QWEsSUFBSSxLQUFLO2dCQUM1RCxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0I7Z0JBQzdELGdCQUFnQixFQUFFLEVBQUU7YUFDckIsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQW5DZSw4Q0FBMkIsOEJBbUMxQyxDQUFBO0FBQ0gsQ0FBQyxFQXZnQmdCLGtCQUFrQixLQUFsQixrQkFBa0IsUUF1Z0JsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpZmZlcmVuY2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZUNvbHVtbkhlbHBlcnMge1xuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQWxpZ25tZW50KFxuICAgIGRhdGFUeXBlOiBSaXZUYWJsZS5Db2x1bW5EYXRhVHlwZSxcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db2x1bW5BbGlnbm1lbnQge1xuICAgIGlmIChpc0ZpcnN0KSByZXR1cm4gJ2xlZnQnO1xuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAnbG9uZ1RleHQnOlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgY2FzZSAnYWR2YW5jZWQnOlxuICAgICAgY2FzZSAnaWNvbic6XG4gICAgICBjYXNlICdzaG9ydFRleHQnOlxuICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QWxsQ29sdW1uczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgc3VwcG9ydGVkQ29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICApOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdIHtcbiAgICAvLyBJZiB0aGUgdGFibGUgb2ZmZXJzIG1vcmUgY29sdW1ucyB0aGFuIHRoZSB1c2VyIGhhcyBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4gICAgLy8gZm9yIChvciBpZiB0aGUgdXNlciBoYXMgbm8gY29uZmlndXJhdGlvbiBzZXR0aW5ncyB5ZXQpLCB3ZSdsbCBhcHBlbmQgdGhlbVxuICAgIC8vIHRvIHRoZSBlbmQgKHVubGVzcyB0aGV5IHNob3VsZCBiZSBwaW5uZWQgYnkgZGVmYXVsdCwgaW4gd2hpY2ggY2FzZSB3ZSdsbFxuICAgIC8vIGFwcGVuZCB0aGVtIGFmdGVyIHRoZSBvdGhlciBwaW5uZWQgY29sdW1ucykuIFRoaXMgZW5zdXJlcyB0aGF0IG5ldyBjb2x1bW5zXG4gICAgLy8gd2UgYWRkIHRvIGV4aXN0aW5nIHRhYmxlcyBvdmVyIHRpbWUgKDEpIGdldCBkaXNwbGF5ZWQgZXZlbiB0aG91Z2ggdGhleVxuICAgIC8vIGRvbid0IGFwcGVhciBpbiB0aGUgdXNlcidzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgeWV0LCBhbmQgKDIpIGRvbid0XG4gICAgLy8gaW50ZXJydXB0IHRoZWlyIGV4aXN0aW5nIHNldHVwLlxuICAgIGNvbnN0IGNvbHVtbk5hbWVzV2l0aG91dFVzZXJTZXR0aW5ncyA9IGRpZmZlcmVuY2UoXG4gICAgICBbLi4uc3VwcG9ydGVkQ29sdW1ucy5rZXlzKCldLFxuICAgICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5tYXAoKHsga2V5IH0pID0+IGtleSksXG4gICAgKTtcblxuICAgIC8vIFRocm93IG91dCBzZXR0aW5ncyBmb3IgY29sdW1ucyBubyBsb25nZXIgb2ZmZXJlZCBieSB0aGUgdGFibGUuXG4gICAgY29uc3QgY29sdW1uc1dpdGhVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPVxuICAgICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5maWx0ZXIoKHsga2V5IH0pID0+XG4gICAgICAgIHN1cHBvcnRlZENvbHVtbnMuaGFzKGtleSksXG4gICAgICApO1xuXG4gICAgY29uc3QgY29sdW1uc1dpdGhvdXRVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPSBbXG4gICAgICAuLi5jb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MsXG4gICAgXS5tYXAoKGtleTogQykgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBwcmVmZXJyZWRXaWR0aDogJ2F1dG8nLFxuICAgICAgcGlubmVkOiAhIXN1cHBvcnRlZENvbHVtbnMuZ2V0KGtleSk/LmRlZmF1bHRQaW5uZWQsXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIG9yZGVySW50ZW50aW9uYWxseShcbiAgICAgIFsuLi5jb2x1bW5zV2l0aFVzZXJTZXR0aW5ncywgLi4uY29sdW1uc1dpdGhvdXRVc2VyU2V0dGluZ3NdLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gb3JkZXJJbnRlbnRpb25hbGx5PEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4+KFxuICAgIGNvbHVtbnM6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgKTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmNvbHVtbnMuZmlsdGVyKHYgPT4gdi5waW5uZWQpLFxuICAgICAgLi4uY29sdW1ucy5maWx0ZXIodiA9PiB2LmVuYWJsZWQgJiYgIXYucGlubmVkKSxcbiAgICAgIC4uLmNvbHVtbnNcbiAgICAgICAgLmZpbHRlcih2ID0+ICF2LmVuYWJsZWQgJiYgIXYucGlubmVkKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFOYW1lID0gY29sdW1uTmFtZU1hcC5nZXQoYS5rZXkpID8/IGEua2V5O1xuICAgICAgICAgIGNvbnN0IGJOYW1lID0gY29sdW1uTmFtZU1hcC5nZXQoYi5rZXkpID8/IGIua2V5O1xuICAgICAgICAgIHJldHVybiBhTmFtZS5sb2NhbGVDb21wYXJlKGJOYW1lKTtcbiAgICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsaWdubWVudChcbiAgICBtZXRhZGF0YTogUml2VGFibGUuQ29sdW1uTWV0YWRhdGEsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGxvd1NlbGVjdGlvbj86IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvbHVtbkFsaWdubWVudCB7XG4gICAgcmV0dXJuIGdldENvbHVtbkFsaWdubWVudChcbiAgICAgIG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgICAgaW5kZXggPT09IDAgJiYgIWFsbG93U2VsZWN0aW9uLFxuICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBhbGxvd1NlbGVjdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgICBmaWx0ZXJUbzogJ2VuYWJsZWQnIHwgJ2Rpc2FibGVkJyxcbiAgKTogUml2VGFibGUuRnVsbENvbHVtbjxDPltdIHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgc3VwcG9ydGVkQ29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgcmV0dXJuIGFsbENvbHVtbnNcbiAgICAgIC5maWx0ZXIoKHsgZW5hYmxlZCB9KSA9PiAoZmlsdGVyVG8gPT09ICdlbmFibGVkJyA/IGVuYWJsZWQgOiAhZW5hYmxlZCkpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoXG4gICAgICAgICAgZnVsbENvbHVtbnM6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSxcbiAgICAgICAgICBzZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4sXG4gICAgICAgICAgaTogbnVtYmVyLFxuICAgICAgICApOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10gPT4ge1xuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gc3VwcG9ydGVkQ29sdW1ucy5nZXQoc2V0dGluZ3Mua2V5KSE7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRXaWR0aCA9XG4gICAgICAgICAgICBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCA9PT0gJ2F1dG8nXG4gICAgICAgICAgICAgID8gbWV0YWRhdGEubWluV2lkdGhcbiAgICAgICAgICAgICAgOiBNYXRoLm1heChtZXRhZGF0YS5taW5XaWR0aCwgc2V0dGluZ3MucHJlZmVycmVkV2lkdGgpO1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ29sdW1uOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+IHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgIGZ1bGxDb2x1bW5zW2kgLSAxXTtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uZnVsbENvbHVtbnMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgd2lkdGg6IHJlc29sdmVkV2lkdGgsXG4gICAgICAgICAgICAgIGxlZnQ6IHNldHRpbmdzLnBpbm5lZFxuICAgICAgICAgICAgICAgID8gcHJldmlvdXNDb2x1bW5cbiAgICAgICAgICAgICAgICAgID8gKHByZXZpb3VzQ29sdW1uLmxlZnQgfHwgMCkgKyBwcmV2aW91c0NvbHVtbi53aWR0aFxuICAgICAgICAgICAgICAgICAgOiAhIWFsbG93U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICA/IDQwXG4gICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgIGFsaWdubWVudDogZ2V0QWxpZ25tZW50KG1ldGFkYXRhLCBpLCAhIWFsbG93U2VsZWN0aW9uKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgW10sXG4gICAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtblBpbjxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICAgIGNvbHVtbjogQyxcbiAgICBwaW5uZWQ6IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gICAgaWYgKHBpbm5lZCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gYWxsQ29sdW1ucy5maW5kKGMgPT4gYy5rZXkgPT09IGNvbHVtbik7XG4gICAgICBjb25zdCB3YXNFbmFibGVkID0gISF0YXJnZXQ/LmVuYWJsZWQ7XG4gICAgICBpZiAoIXdhc0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlZENvdW50ID0gYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5lbmFibGVkKS5sZW5ndGg7XG4gICAgICAgIGlmIChlbmFibGVkQ291bnQgPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlOyAvLyByZWZ1c2UgdGhlIHBpbiBzaW5jZSBpdCB3b3VsZCBleGNlZWQgdGhlIG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KFxuICAgICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgICBwaW5uZWQ6IGMua2V5ID09PSBjb2x1bW4gPyBwaW5uZWQgOiBjLnBpbm5lZCxcbiAgICAgICAgICAgIC8vIENoZWNrL2VuYWJsZSBpZiBiZWluZyBwaW5uZWRcbiAgICAgICAgICAgIGVuYWJsZWQ6IGMua2V5ID09PSBjb2x1bW4gJiYgcGlubmVkID8gdHJ1ZSA6IGMuZW5hYmxlZCxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5zRnJlZXplU3RhdGU8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGZyZWV6ZTogYm9vbGVhbixcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBhbGxDb2x1bW5zLm1hcCgoYywgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7IC4uLmMsIHBpbm5lZDogZnJlZXplICYmIGkgPD0gaW5kZXggfTtcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbW92ZUNvbHVtblRvPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgY29sdW1uOiBDLFxuICAgIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCcsXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBhbGxDb2x1bW5zLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBjb2x1bW4pO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9XG4gICAgICBwb3NpdGlvbiA9PSAnZW5kJyA/IGFsbENvbHVtbnMuZmluZEluZGV4KGMgPT4gIWMuZW5hYmxlZCkgOiAwO1xuICAgIGNvbnN0IG5ld0luZGV4ID1cbiAgICAgIHBvc2l0aW9uID09ICdzdGFydCdcbiAgICAgICAgPyAwXG4gICAgICAgIDogbGFzdEluZGV4ID09IC0xXG4gICAgICAgID8gYWxsQ29sdW1ucy5sZW5ndGggLSAxXG4gICAgICAgIDogbGFzdEluZGV4O1xuXG4gICAgaWYgKFxuICAgICAgIWFsbENvbHVtbnNbcHJldmlvdXNJbmRleF0uZW5hYmxlZCAmJlxuICAgICAgYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5lbmFibGVkKS5sZW5ndGggPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duXG4gICAgKVxuICAgICAgcmV0dXJuIHN0YXRlO1xuXG4gICAgY29uc3QgbW92ZWRTdGF0ZSA9IGNoYW5nZUNvbHVtbk9yZGVyKFxuICAgICAgc3RhdGUsXG4gICAgICBjb2x1bW5zLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICBuZXdJbmRleCxcbiAgICApO1xuICAgIC8vTWFrZSBzdXJlIHRoZSBjb2x1bW4gaXMgZW5hYmxlZFxuICAgIHJldHVybiBjaGFuZ2VDb2x1bW5FbmFibGVkKFxuICAgICAgbW92ZWRTdGF0ZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgY29sdW1uLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbk9yZGVyPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgcHJldmlvdXNJbmRleDogbnVtYmVyLFxuICAgIG5ld0luZGV4OiBudW1iZXIsXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gICAgLy8gRmlyc3QsIHB1dCB0aGUgY29sdW1ucyBpbiB0aGUgZGVzaXJlZCBvcmRlci5cbiAgICBjb25zdCBpdGVtID0gYWxsQ29sdW1uc1twcmV2aW91c0luZGV4XTtcbiAgICBjb25zdCB3aXRob3V0SXRlbSA9IGFsbENvbHVtbnMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBwcmV2aW91c0luZGV4KTtcbiAgICBjb25zdCByZW9yZGVyZWQgPSBbXG4gICAgICAuLi53aXRob3V0SXRlbS5zbGljZSgwLCBuZXdJbmRleCksXG4gICAgICBpdGVtLFxuICAgICAgLi4ud2l0aG91dEl0ZW0uc2xpY2UobmV3SW5kZXgpLFxuICAgIF07XG5cbiAgICAvLyBUaGVuLCB3ZSBtYXkgbmVlZCB0byBmaXggdGhlIHBpbnMgKGFsbCBwaW5uZWQgY29sdW1ucyBhcHBlYXIgYXQgdGhlXG4gICAgLy8gYmVnaW5uaW5nIG9mIHRoZSBjb2x1bW5zIGFycmF5KSBzaW5jZSB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIGRyYWdcbiAgICAvLyBhbmQgZHJvcCBjb2x1bW5zIHRvIGFuZCBmcm9tIHRoZSBwaW5uZWQgYXJlYS4gSWYgdGhlIHVzZXIgZHJhZ3MgYVxuICAgIC8vIGNvbHVtbiBhY3Jvc3MgdGhhdCB0aHJlc2hvbGQsIHVwZGF0ZSBpdHMgcGlubmVkIHN0YXR1cy5cbiAgICBjb25zdCB1cGRhdGVkID0gcmVvcmRlcmVkLm1hcCgoc2V0dGluZ3MsIGksIGFycikgPT4ge1xuICAgICAgaWYgKG5ld0luZGV4ID09PSBpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgcGlubmVkOiBzZXR0aW5ncy5waW5uZWRcbiAgICAgICAgICAgID8gYXJyW2kgLSAxXT8ucGlubmVkID8/IHRydWVcbiAgICAgICAgICAgIDogYXJyW2kgKyAxXT8ucGlubmVkID8/IGZhbHNlLFxuICAgICAgICAgIGVuYWJsZWQ6IHNldHRpbmdzLmVuYWJsZWRcbiAgICAgICAgICAgID8gYXJyW2kgLSAxXT8uZW5hYmxlZCA/PyB0cnVlXG4gICAgICAgICAgICA6IGFycltpICsgMV0/LmVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgcmV0dXJuIHNldHRpbmdzO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgd2FzRGlzYWJsZWQgPSAhaXRlbS5lbmFibGVkO1xuICAgIGNvbnN0IGJlY2FtZUVuYWJsZWQgPSB1cGRhdGVkW25ld0luZGV4XS5lbmFibGVkO1xuICAgIGlmICh3YXNEaXNhYmxlZCAmJiBiZWNhbWVFbmFibGVkKSB7XG4gICAgICBjb25zdCBlbmFibGVkQ291bnQgPSBhbGxDb2x1bW5zLmZpbHRlcihjID0+IGMuZW5hYmxlZCkubGVuZ3RoO1xuICAgICAgaWYgKGVuYWJsZWRDb3VudCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd24pIHtcbiAgICAgICAgLy8gUmVmdXNlIHRoZSBtb3ZlOyBrZWVwIHN0YXRlIGFzLWlzXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkodXBkYXRlZCwgY29sdW1uTmFtZU1hcCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uRW5hYmxlZDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICAgIGNvbHVtbjogQyxcbiAgICBlbmFibGVkOiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgICBpZiAoXG4gICAgICBlbmFibGVkICYmXG4gICAgICBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmVuYWJsZWQpLmxlbmd0aCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd25cbiAgICApIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgICAgYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgICAgLi4uYyxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGMua2V5ID09PSBjb2x1bW4gPyBlbmFibGVkIDogYy5lbmFibGVkLFxuICAgICAgICAgICAgLy8gVW5waW4gaWYgYmVpbmcgdW5jaGVja2VkXG4gICAgICAgICAgICBwaW5uZWQ6IGMua2V5ID09PSBjb2x1bW4gJiYgIWVuYWJsZWQgPyBmYWxzZSA6IGMucGlubmVkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUFsbENvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBlbmFibGVkOiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgICBpZiAoZW5hYmxlZCAmJiBhbGxDb2x1bW5zLmxlbmd0aCA+IFJpdlRhYmxlLkNvbHVtbnNNYXhTaG93bikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW5TZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9IGFsbENvbHVtbnMubWFwKFxuICAgICAgY3VycmVudENvbHVtblNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudENvbHVtbk1ldGFkYXRhOiBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YSB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgY29sdW1ucy5nZXQoY3VycmVudENvbHVtblNldHRpbmdzLmtleSk7XG4gICAgICAgIGNvbnN0IGlzQ29sdW1uQWx3YXlzVmlzaWJsZTogYm9vbGVhbiA9XG4gICAgICAgICAgY3VycmVudENvbHVtbk1ldGFkYXRhPy5hbHdheXNWaXNpYmxlID8/IGZhbHNlO1xuXG4gICAgICAgIGlmIChpc0NvbHVtbkFsd2F5c1Zpc2libGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY3VycmVudENvbHVtblNldHRpbmdzLFxuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jdXJyZW50Q29sdW1uU2V0dGluZ3MsXG4gICAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgICAvLyBVbnBpbiBpZiBiZWluZyB1bmNoZWNrZWRcbiAgICAgICAgICBwaW5uZWQ6ICFlbmFibGVkID8gZmFsc2UgOiBjdXJyZW50Q29sdW1uU2V0dGluZ3MucGlubmVkLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KFxuICAgICAgICAgIHVwZGF0ZWRDb2x1bW5TZXR0aW5ncyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbldpZHRoPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgY29sdW1uOiBDLFxuICAgIHByZWZlcnJlZFdpZHRoOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPlsncHJlZmVycmVkV2lkdGgnXSxcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgcHJlZmVycmVkV2lkdGg6IGMua2V5ID09PSBjb2x1bW4gPyBwcmVmZXJyZWRXaWR0aCA6IGMucHJlZmVycmVkV2lkdGgsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNldFRvRGVmYXVsdENvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBkZWZhdWx0Q29sdW1uU3RhdGU6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KGRlZmF1bHRDb2x1bW5TdGF0ZSwgY29sdW1uTmFtZU1hcCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29sdW1uTWV0YWRhdGFNYXA8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICA+KFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Jbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFI+PixcbiAgKTogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICBbLi4uY29sdW1ucy5lbnRyaWVzKCldLm1hcCgoW25hbWUsIG1ldGFkYXRhXSkgPT4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgb3JkZXJhYmxlOiAhIW1ldGFkYXRhLm9yZGVyS2V5LFxuICAgICAgICAgIGZpbHRlcmFibGU6IG1ldGFkYXRhLmZpbHRlcmFibGUsXG4gICAgICAgICAgc2VhcmNoYWJsZTogbWV0YWRhdGEuc2VhcmNoYWJsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogbWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbWluV2lkdGg6IG1ldGFkYXRhLm1pbldpZHRoLFxuICAgICAgICAgIGRhdGFUeXBlOiBtZXRhZGF0YS5kYXRhVHlwZSxcbiAgICAgICAgICBkZWZhdWx0UGlubmVkOiBtZXRhZGF0YS5kZWZhdWx0UGlubmVkLFxuICAgICAgICAgIGNsaWNrUHJldmVudERlZmF1bHQ6IG1ldGFkYXRhLmNsaWNrUHJldmVudERlZmF1bHQsXG4gICAgICAgICAgY2xpY2tTdG9wUHJvcGFnYXRpb246IG1ldGFkYXRhLmNsaWNrU3RvcFByb3BhZ2F0aW9uLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBhbHdheXNWaXNpYmxlOiBtZXRhZGF0YS5hbHdheXNWaXNpYmxlLFxuICAgICAgICAgIHRvb2x0aXBGb3JIaWRlSWNvbjogbWV0YWRhdGEudG9vbHRpcEZvckhpZGVJY29uLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIENvbHVtbkxpc3Q8QyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbj4gPVxuICAgIChSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPiAmIHtcbiAgICAgIHJlc29sdmVkTmFtZTogQyB8IHN0cmluZztcbiAgICAgIGhpZ2hsaWdodEluZGljZXM6IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gICAgICBzdGF0ZUluZGV4OiBudW1iZXI7XG4gICAgICBpc0xhc3RQaW5uZWRDb2x1bW46IGJvb2xlYW47XG4gICAgICBhbHdheXNWaXNpYmxlOiBib29sZWFuO1xuICAgICAgdG9vbHRpcEZvckhpZGVJY29uPzogc3RyaW5nO1xuICAgIH0pW107XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtblNldHRpbmdzQ29sdW1uTGlzdDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4pOiBDb2x1bW5MaXN0PEM+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5NZXRhZGF0YSA9IFtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXkuY29sdW1ucyxcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXkuZGlzYWJsZWRDb2x1bW5zLFxuICAgIF07XG4gICAgY29uc3QgY29sdW1uc0xlbmd0aCA9IHN0YXRlLmRpc3BsYXkuYWxsQ29sdW1ucy5sZW5ndGg7XG4gICAgY29uc3QgYWxsQ29sdW1uczogQ29sdW1uTGlzdDxDPiA9IHN0YXRlLmRpc3BsYXkuYWxsQ29sdW1ucy5tYXAoXG4gICAgICAoY29sdW1uLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRDb2x1bW5QaW5uZWQgPVxuICAgICAgICAgIGkgKyAyIDw9IGNvbHVtbnNMZW5ndGhcbiAgICAgICAgICAgID8gc3RhdGUuZGlzcGxheS5hbGxDb2x1bW5zW2kgKyAxXS5waW5uZWRcbiAgICAgICAgICAgIDogZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY3VycmVudENvbHVtbk1ldGFkYXRhOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+IHwgdW5kZWZpbmVkID1cbiAgICAgICAgICBhbGxDb2x1bW5NZXRhZGF0YS5maW5kKG1ldGFkYXRhID0+IG1ldGFkYXRhLmtleSA9PT0gY29sdW1uLmtleSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgcmVzb2x2ZWROYW1lOlxuICAgICAgICAgICAgc3RhdGUuZGlzcGxheS5jb2x1bW5OYW1lTWFwLmdldChjb2x1bW4ua2V5KSA/PyBjb2x1bW4ua2V5LFxuICAgICAgICAgIHN0YXRlSW5kZXg6IGksXG4gICAgICAgICAgaXNMYXN0UGlubmVkQ29sdW1uOiBjb2x1bW4ucGlubmVkICYmICFuZXh0Q29sdW1uUGlubmVkLFxuICAgICAgICAgIGFsd2F5c1Zpc2libGU6IGN1cnJlbnRDb2x1bW5NZXRhZGF0YT8uYWx3YXlzVmlzaWJsZSA/PyBmYWxzZSxcbiAgICAgICAgICB0b29sdGlwRm9ySGlkZUljb246IGN1cnJlbnRDb2x1bW5NZXRhZGF0YT8udG9vbHRpcEZvckhpZGVJY29uLFxuICAgICAgICAgIGhpZ2hsaWdodEluZGljZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGFsbENvbHVtbnM7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,49 @@
1
1
  export var TableSearchHelpers;
2
2
  (function (TableSearchHelpers) {
3
+ /**
4
+ * The configured fuse options, without the keys for columns search does not
5
+ * cover: the ones marked `searchable: false` and the ones turned off in
6
+ * "Search in". Keys that don't belong to a column are left alone.
7
+ */
8
+ function fuseOptionsForSearchColumns(fuseOptions, columns, query) {
9
+ if (!fuseOptions?.keys)
10
+ return fuseOptions;
11
+ const excludedPaths = new Set(Array.from(columns.entries())
12
+ .filter(([key, column]) => column.searchable === false ||
13
+ query.searchColumns.get(key) === false)
14
+ .map(([key, column]) => columnPath(key, column)));
15
+ return {
16
+ ...fuseOptions,
17
+ keys: fuseOptions.keys.filter(key => !excludedPaths.has(fuseKeyPath(key))),
18
+ };
19
+ }
20
+ TableSearchHelpers.fuseOptionsForSearchColumns = fuseOptionsForSearchColumns;
21
+ /**
22
+ * Marks the columns with no key in `fuseOptions.keys` as `searchable: false`,
23
+ * so "Search in" only offers columns that search can cover.
24
+ */
25
+ function markColumnsOutsideFuseKeysUnsearchable(columns, fuseOptions) {
26
+ if (!fuseOptions?.keys)
27
+ return columns;
28
+ const keyPaths = new Set(fuseOptions.keys.map(fuseKeyPath));
29
+ return new Map(Array.from(columns.entries()).map(([key, column]) => [
30
+ key,
31
+ keyPaths.has(columnPath(key, column))
32
+ ? column
33
+ : { ...column, searchable: false },
34
+ ]));
35
+ }
36
+ TableSearchHelpers.markColumnsOutsideFuseKeysUnsearchable = markColumnsOutsideFuseKeysUnsearchable;
37
+ function columnPath(key, column) {
38
+ return column.orderKey?.toString() ?? key.toString();
39
+ }
40
+ function fuseKeyPath(key) {
41
+ if (typeof key === 'string')
42
+ return key;
43
+ if (Array.isArray(key))
44
+ return key.join('.');
45
+ return Array.isArray(key.name) ? key.name.join('.') : key.name;
46
+ }
3
47
  function getSearchColumnsSelectedState(state, expectedValue) {
4
48
  switch (expectedValue) {
5
49
  case 'all':
@@ -25,4 +69,4 @@ export var TableSearchHelpers;
25
69
  }
26
70
  TableSearchHelpers.toggleAllSearchColumns = toggleAllSearchColumns;
27
71
  })(TableSearchHelpers || (TableSearchHelpers = {}));
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL3NlYXJjaC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sS0FBVyxrQkFBa0IsQ0E0Q2xDO0FBNUNELFdBQWlCLGtCQUFrQjtJQUNqQyxTQUFnQiw2QkFBNkIsQ0FNM0MsS0FBcUMsRUFDckMsYUFBNkI7UUFFN0IsUUFBUSxhQUFhLEVBQUU7WUFDckIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FDekQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQ2YsQ0FBQztZQUVKLEtBQUssTUFBTTtnQkFDVCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQ3pELEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQ2hCLENBQUM7U0FDTDtJQUNILENBQUM7SUFwQmUsZ0RBQTZCLGdDQW9CNUMsQ0FBQTtJQUVELFNBQWdCLHNCQUFzQixDQUtwQyxLQUFxQztRQUNyQyxNQUFNLFlBQVksR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxHQUFHO1lBQ0gsWUFBWTtTQUNiLENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRTtnQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO2dCQUNkLGFBQWEsRUFBRSxPQUFPO2FBQ3ZCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFwQmUseUNBQXNCLHlCQW9CckMsQ0FBQTtBQUNILENBQUMsRUE1Q2dCLGtCQUFrQixLQUFsQixrQkFBa0IsUUE0Q2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVTZWFyY2hIZWxwZXJzIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBleHBlY3RlZFZhbHVlOiAnYWxsJyB8ICdub25lJyxcbiAgKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChleHBlY3RlZFZhbHVlKSB7XG4gICAgICBjYXNlICdhbGwnOlxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShzdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLnZhbHVlcygpKS5ldmVyeShcbiAgICAgICAgICB2YWx1ZSA9PiB2YWx1ZSxcbiAgICAgICAgKTtcblxuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMudmFsdWVzKCkpLmV2ZXJ5KFxuICAgICAgICAgIHZhbHVlID0+ICF2YWx1ZSxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9nZ2xlQWxsU2VhcmNoQ29sdW1uczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IG5vbmVTZWxlY3RlZCA9IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHN0YXRlLCAnbm9uZScpO1xuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgTWFwKFxuICAgICAgQXJyYXkuZnJvbShzdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLmtleXMoKSkubWFwKGtleSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgbm9uZVNlbGVjdGVkLFxuICAgICAgXSksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBxdWVyeToge1xuICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgc2VhcmNoQ29sdW1uczogcGF5bG9hZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL3NlYXJjaC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sS0FBVyxrQkFBa0IsQ0FnSGxDO0FBaEhELFdBQWlCLGtCQUFrQjtJQUNqQzs7OztPQUlHO0lBQ0gsU0FBZ0IsMkJBQTJCLENBS3pDLFdBQXdDLEVBQ3hDLE9BQW1ELEVBQ25ELEtBQTJCO1FBRTNCLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSTtZQUFFLE9BQU8sV0FBVyxDQUFDO1FBQzNDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUMxQixNQUFNLENBQ0wsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQ2hCLE1BQU0sQ0FBQyxVQUFVLEtBQUssS0FBSztZQUMzQixLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQ3pDO2FBQ0EsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDbkQsQ0FBQztRQUNGLE9BQU87WUFDTCxHQUFHLFdBQVc7WUFDZCxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM1QztTQUNGLENBQUM7SUFDSixDQUFDO0lBekJlLDhDQUEyQiw4QkF5QjFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixz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WyJpbXBvcnQgeyBGdXNlT3B0aW9uS2V5LCBJRnVzZU9wdGlvbnMgfSBmcm9tICdmdXNlLmpzJztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRhYmxlU2VhcmNoSGVscGVycyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJlZCBmdXNlIG9wdGlvbnMsIHdpdGhvdXQgdGhlIGtleXMgZm9yIGNvbHVtbnMgc2VhcmNoIGRvZXMgbm90XG4gICAqIGNvdmVyOiB0aGUgb25lcyBtYXJrZWQgYHNlYXJjaGFibGU6IGZhbHNlYCBhbmQgdGhlIG9uZXMgdHVybmVkIG9mZiBpblxuICAgKiBcIlNlYXJjaCBpblwiLiBLZXlzIHRoYXQgZG9uJ3QgYmVsb25nIHRvIGEgY29sdW1uIGFyZSBsZWZ0IGFsb25lLlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGZ1c2VPcHRpb25zRm9yU2VhcmNoQ29sdW1uczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gID4oXG4gICAgZnVzZU9wdGlvbnM6IElGdXNlT3B0aW9uczxSPiB8IHVuZGVmaW5lZCxcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcXVlcnk6IFJpdlRhYmxlLlF1ZXJ5PEMsIEY+LFxuICApOiBJRnVzZU9wdGlvbnM8Uj4gfCB1bmRlZmluZWQge1xuICAgIGlmICghZnVzZU9wdGlvbnM/LmtleXMpIHJldHVybiBmdXNlT3B0aW9ucztcbiAgICBjb25zdCBleGNsdWRlZFBhdGhzID0gbmV3IFNldChcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKFtrZXksIGNvbHVtbl0pID0+XG4gICAgICAgICAgICBjb2x1bW4uc2VhcmNoYWJsZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgIHF1ZXJ5LnNlYXJjaENvbHVtbnMuZ2V0KGtleSkgPT09IGZhbHNlLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKFtrZXksIGNvbHVtbl0pID0+IGNvbHVtblBhdGgoa2V5LCBjb2x1bW4pKSxcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5mdXNlT3B0aW9ucyxcbiAgICAgIGtleXM6IGZ1c2VPcHRpb25zLmtleXMuZmlsdGVyKFxuICAgICAgICBrZXkgPT4gIWV4Y2x1ZGVkUGF0aHMuaGFzKGZ1c2VLZXlQYXRoKGtleSkpLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBjb2x1bW5zIHdpdGggbm8ga2V5IGluIGBmdXNlT3B0aW9ucy5rZXlzYCBhcyBgc2VhcmNoYWJsZTogZmFsc2VgLFxuICAgKiBzbyBcIlNlYXJjaCBpblwiIG9ubHkgb2ZmZXJzIGNvbHVtbnMgdGhhdCBzZWFyY2ggY2FuIGNvdmVyLlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIG1hcmtDb2x1bW5zT3V0c2lkZUZ1c2VLZXlzVW5zZWFyY2hhYmxlPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgPihcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgZnVzZU9wdGlvbnM6IElGdXNlT3B0aW9uczxSPiB8IHVuZGVmaW5lZCxcbiAgKTogTWFwPEMsIFJpdlRhYmxlLkluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+IHtcbiAgICBpZiAoIWZ1c2VPcHRpb25zPy5rZXlzKSByZXR1cm4gY29sdW1ucztcbiAgICBjb25zdCBrZXlQYXRocyA9IG5ldyBTZXQoZnVzZU9wdGlvbnMua2V5cy5tYXAoZnVzZUtleVBhdGgpKTtcbiAgICByZXR1cm4gbmV3IE1hcChcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgY29sdW1uXSkgPT4gW1xuICAgICAgICBrZXksXG4gICAgICAgIGtleVBhdGhzLmhhcyhjb2x1bW5QYXRoKGtleSwgY29sdW1uKSlcbiAgICAgICAgICA/IGNvbHVtblxuICAgICAgICAgIDogeyAuLi5jb2x1bW4sIHNlYXJjaGFibGU6IGZhbHNlIH0sXG4gICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY29sdW1uUGF0aDxSIGV4dGVuZHMgUml2VGFibGUuUm93LCBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPihcbiAgICBrZXk6IEMsXG4gICAgY29sdW1uOiBSaXZUYWJsZS5Jbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFI+LFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4ub3JkZXJLZXk/LnRvU3RyaW5nKCkgPz8ga2V5LnRvU3RyaW5nKCk7XG4gIH1cblxuICBmdW5jdGlvbiBmdXNlS2V5UGF0aDxSPihrZXk6IEZ1c2VPcHRpb25LZXk8Uj4pOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykgcmV0dXJuIGtleTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSByZXR1cm4ga2V5LmpvaW4oJy4nKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShrZXkubmFtZSkgPyBrZXkubmFtZS5qb2luKCcuJykgOiBrZXkubmFtZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgZXhwZWN0ZWRWYWx1ZTogJ2FsbCcgfCAnbm9uZScsXG4gICk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoZXhwZWN0ZWRWYWx1ZSkge1xuICAgICAgY2FzZSAnYWxsJzpcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucy52YWx1ZXMoKSkuZXZlcnkoXG4gICAgICAgICAgdmFsdWUgPT4gdmFsdWUsXG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShzdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLnZhbHVlcygpKS5ldmVyeShcbiAgICAgICAgICB2YWx1ZSA9PiAhdmFsdWUsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUFsbFNlYXJjaENvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBub25lU2VsZWN0ZWQgPSBnZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShzdGF0ZSwgJ25vbmUnKTtcbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IE1hcChcbiAgICAgIEFycmF5LmZyb20oc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucy5rZXlzKCkpLm1hcChrZXkgPT4gW1xuICAgICAgICBrZXksXG4gICAgICAgIG5vbmVTZWxlY3RlZCxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgcXVlcnk6IHtcbiAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgIHNlYXJjaENvbHVtbnM6IHBheWxvYWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==