@kepler.gl/reducers 3.3.0-alpha.16 → 3.3.0-alpha.18

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 (42) hide show
  1. package/dist/cjs/column-edit-reconcile.js +100 -0
  2. package/dist/cjs/column-edit-updaters.spec.js +840 -0
  3. package/dist/cjs/combined-updaters.js +28 -9
  4. package/dist/cjs/dataset-ops-updaters.js +101 -15
  5. package/dist/cjs/dataset-ops-updaters.spec.js +129 -4
  6. package/dist/cjs/export-utils.js +118 -46
  7. package/dist/cjs/interaction-utils.js +11 -3
  8. package/dist/cjs/layer-utils.js +3 -2
  9. package/dist/cjs/ui-state-updaters.js +70 -26
  10. package/dist/cjs/ui-state.js +2 -2
  11. package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
  12. package/dist/cjs/vis-state-merger.js +65 -22
  13. package/dist/cjs/vis-state-updaters.js +811 -298
  14. package/dist/cjs/vis-state.js +2 -2
  15. package/dist/column-edit-reconcile.d.ts +4 -0
  16. package/dist/column-edit-updaters.spec.d.ts +1 -0
  17. package/dist/combined-updaters.d.ts +14 -4
  18. package/dist/composers.d.ts +13 -2
  19. package/dist/dataset-ops-updaters.d.ts +3 -0
  20. package/dist/esm/column-edit-reconcile.js +95 -0
  21. package/dist/esm/column-edit-updaters.spec.js +839 -0
  22. package/dist/esm/combined-updaters.js +29 -10
  23. package/dist/esm/dataset-ops-updaters.js +99 -16
  24. package/dist/esm/dataset-ops-updaters.spec.js +129 -4
  25. package/dist/esm/export-utils.js +117 -45
  26. package/dist/esm/interaction-utils.js +10 -3
  27. package/dist/esm/layer-utils.js +3 -2
  28. package/dist/esm/ui-state-updaters.js +69 -25
  29. package/dist/esm/ui-state.js +2 -2
  30. package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
  31. package/dist/esm/vis-state-merger.js +66 -24
  32. package/dist/esm/vis-state-updaters.js +801 -306
  33. package/dist/esm/vis-state.js +2 -2
  34. package/dist/export-utils.d.ts +2 -2
  35. package/dist/interaction-utils.d.ts +4 -1
  36. package/dist/layer-utils.d.ts +1 -0
  37. package/dist/ui-state-updaters.d.ts +10 -0
  38. package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
  39. package/dist/vis-state-merger.d.ts +10 -2
  40. package/dist/vis-state-updaters.d.ts +31 -9
  41. package/dist/vis-state.d.ts +4 -0
  42. package/package.json +17 -17
@@ -6,7 +6,8 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
6
6
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
7
7
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
8
8
  var _excluded = ["dataId"],
9
- _excluded2 = ["info"];
9
+ _excluded2 = ["info"],
10
+ _excluded3 = ["syncedWithLayerTimeline", "syncTimelineMode", "timeBins", "lineChart", "timezone", "invertTrendColor", "showTimeDisplay"];
10
11
  import _regeneratorRuntime from "@babel/runtime/regenerator";
11
12
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
12
13
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -35,23 +36,24 @@ import { DELAY_TASK, ACTION_TASK, EXPAND_ZIP_TASK, LOAD_FILE_TASK, PROCESS_FILE_
35
36
  import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, expandZipArchiveSuccess, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig, loadColumnStatsSuccess, loadColumnStatsError, refreshDatasetSuccess, refreshDatasetError, refreshDatasetProgress, setLoadingProgress } from '@kepler.gl/actions';
36
37
 
37
38
  // Utils
38
- import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, combineSplitMapsByIndex, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, successNotification, editorFeaturesToFeatureCollection, extractRowsInsideFeature, isRasterTileExtractLayer, isVectorTileExtractLayer, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
39
+ import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, combineSplitMapsByIndex, computeSplitMapLayers, adjustValueToFilterDomain, areFilterFieldTypesCompatible, disableGpuIfInverted, filterTypeUsesGpu, getPlotBaseIndexByDataId, errorNotification, successNotification, editorFeaturesToFeatureCollection, extractRowsInsideFeature, isRasterTileExtractLayer, isVectorTileExtractLayer, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
39
40
  import { generateHashId, toArray, arrayMove } from '@kepler.gl/common-utils';
40
41
  // Mergers
41
- import { ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_TEXT_SIDE, INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION, ANNOTATION_ANGLE_BY_PLACEMENT, textPlacementFromAngle, AnnotationKind, DatasetType, getDatasetRefreshIntervalMs, getRemoteSourceFormat } from '@kepler.gl/constants';
42
- import { LAYER_ID_LENGTH, Layer, LayerClasses } from '@kepler.gl/layers';
42
+ import { ALL_FIELD_TYPES, ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_TEXT_SIDE, INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION, ANNOTATION_ANGLE_BY_PLACEMENT, textPlacementFromAngle, AnnotationKind, DatasetType, getDatasetRefreshIntervalMs, getRemoteSourceFormat, GEOCODER_DATASET_NAME, GEOCODER_ICON_COLOR, GEOCODER_LAYER_ID } from '@kepler.gl/constants';
43
+ import { AGGREGATION_COUNT_LAYER_TYPES, isPointCountLabel, LAYER_ID_LENGTH, Layer, LayerClasses } from '@kepler.gl/layers';
43
44
  import { apply_, compose_, filterOutById, if_, merge_, payload_, pick_, removeElementAtIndex, swap_ } from './composer-helpers';
44
45
  import { isValidMerger, mergeStateFromMergers } from './merger-handler';
45
46
  import { VIS_STATE_MERGERS, createLayerFromConfig, isSavedLayerConfigV1, parseLayerConfig, serializeFilter, serializeLayer, serializeVisState, validateLayerWithData } from './vis-state-merger';
46
47
  import KeplerGLSchema from '@kepler.gl/schemas';
47
48
  import { getFilesToParse, isZipFileName, loadExternallyHostedDataset, processGeojson } from '@kepler.gl/processors';
48
- import { assignGpuChannel, copyTableAndUpdate, createNewDataEntry, pinTableColumns, setFilterGpuMode, sortDatasetByColumn } from '@kepler.gl/table';
49
- import { findFieldsToShow, removeLayerFromZoomOpacity } from './interaction-utils';
49
+ import { buildChangeColumnTypeData, formatColumnTypeConversionError, assignGpuChannel, buildDeleteColumnData, buildRenameColumnData, canMutateDatasetSchema, copyTableAndUpdate, createNewDataEntry, pinTableColumns, showAllTableColumns, toggleHiddenTableColumn, setFilterGpuMode, sortDatasetByColumn } from '@kepler.gl/table';
50
+ import { remapChartsForDataset } from './column-edit-reconcile';
51
+ import { findFieldsToShow, getZoomOpacityAnnotationTargetId, removeLayerFromZoomOpacity } from './interaction-utils';
50
52
  import { calculateLayerData, findDefaultLayer, getLayerOrderFromLayers, mergeLayerVisConfigForNewDatasets, getNewLayerGroup, addLayerOrGroupToLayerOrder, removeElementFromLayerOrder, getLayerGroupFromLayerOrder, findParentGroupForLayer, getIndexFromLayerEntryId, updateLayerGroupInLayerOrder, getFlatLayerOrder, replaceLayerEntryInLayerOrder } from './layer-utils';
51
53
  import { getPropValueToMerger, hasPropsToMerge } from './merger-handler';
52
54
  import { mergeDatasetsByOrder } from './vis-state-merger';
53
- import { addGroupByUpdater, addJoinUpdater, addSpatialJoinUpdater, executeGroupBy, executeJoin, executeSpatialJoin, removeDatasetOpUpdater, removeOpsForDatasets, setGroupByConfigUpdater, setJoinConfigUpdater, setSpatialJoinConfigUpdater } from './dataset-ops-updaters';
54
- import { fixEffectOrder, getAnimatableVisibleLayers, getIntervalBasedAnimationLayers, mergeTimeDomains, adjustValueToAnimationWindow, updateTimeFilterPlotType, mergePlotGroupBy, getDefaultTimeFormat, LayerToFilterTimeInterval, TIME_INTERVALS_ORDERED, mergeFilterDomain, initCustomPaletteByCustomScale, collectColumnValues, getColumnStatistics } from '@kepler.gl/utils';
55
+ import { addGroupByUpdater, addJoinUpdater, addSpatialJoinUpdater, addSuitabilityUpdater, executeGroupBy, executeJoin, executeSpatialJoin, executeSuitability, removeDatasetOpUpdater, removeOpsForDatasets, setGroupByConfigUpdater, setJoinConfigUpdater, setSpatialJoinConfigUpdater, setSuitabilityConfigUpdater } from './dataset-ops-updaters';
56
+ import { fixEffectOrder, getAnimatableVisibleLayers, getIntervalBasedAnimationLayers, mergeTimeDomains, adjustValueToAnimationWindow, updateTimeFilterPlotType, mergePlotGroupBy, getDefaultTimeFormat, LayerToFilterTimeInterval, TIME_INTERVALS_ORDERED, mergeFilterDomain, initCustomPaletteByCustomScale, collectColumnValues, getColumnStatistics, optionalMapText } from '@kepler.gl/utils';
55
57
  import { createEffect } from '@kepler.gl/effects';
56
58
  import { findMapBounds } from './data-utils';
57
59
 
@@ -106,6 +108,7 @@ export var defaultInteractionConfig = {
106
108
  enabled: true,
107
109
  config: {
108
110
  fieldsToShow: {},
111
+ timezone: null,
109
112
  compareMode: false,
110
113
  compareType: COMPARE_TYPES.ABSOLUTE
111
114
  }
@@ -124,7 +127,8 @@ export var defaultInteractionConfig = {
124
127
  enabled: false,
125
128
  position: null,
126
129
  config: {
127
- limitSearch: false
130
+ limitSearch: false,
131
+ color: GEOCODER_ICON_COLOR
128
132
  }
129
133
  },
130
134
  brush: {
@@ -184,8 +188,8 @@ export var DEFAULT_EDITOR = {
184
188
  export var INITIAL_VIS_STATE = {
185
189
  // map info
186
190
  mapInfo: {
187
- title: '',
188
- description: ''
191
+ title: undefined,
192
+ description: undefined
189
193
  },
190
194
  // layers
191
195
  layers: [],
@@ -201,6 +205,7 @@ export var INITIAL_VIS_STATE = {
201
205
  editingDataset: undefined,
202
206
  groupBys: [],
203
207
  joins: [],
208
+ suitabilities: [],
204
209
  // effects
205
210
  effects: [],
206
211
  effectOrder: [],
@@ -320,7 +325,8 @@ export function applyLayerConfigUpdater(state, action) {
320
325
  layerIndex = action.layerIndex;
321
326
  // Saved configs have a visualChannels sibling; parsed/editor JSON folds those
322
327
  // fields into config. Re-parsing the latter drops colorField and resets the scale.
323
- var newParsedLayer = isSavedLayerConfigV1(newLayerConfig) ? parseLayerConfig(state.schema, newLayerConfig) : newLayerConfig;
328
+ var savedLayerConfig = isSavedLayerConfigV1(newLayerConfig);
329
+ var newParsedLayer = savedLayerConfig ? parseLayerConfig(state.schema, newLayerConfig) : newLayerConfig;
324
330
  var oldLayer = state.layers.find(function (l) {
325
331
  return l.id === oldLayerId;
326
332
  });
@@ -336,7 +342,9 @@ export function applyLayerConfigUpdater(state, action) {
336
342
  return state;
337
343
  }
338
344
  // Make sure the layer is valid and convert it to Layer
339
- var newLayer = validateLayerWithData(dataset, newParsedLayer, state.layerClasses);
345
+ var newLayer = validateLayerWithData(dataset, newParsedLayer, state.layerClasses, {
346
+ keepUnlabeledAggregationTextLabel: savedLayerConfig
347
+ });
340
348
  if (!newLayer) {
341
349
  return state;
342
350
  }
@@ -608,8 +616,10 @@ function addOrRemoveTextLabels(newFields, textLabel) {
608
616
  }).filter(function (d) {
609
617
  return d;
610
618
  });
611
- var addFields = newFields.filter(function (f) {
612
- return !currentFields.includes(f.name);
619
+ var addFields = newFields.filter(function (field, index) {
620
+ return field && field.name && !currentFields.includes(field.name) && newFields.findIndex(function (other) {
621
+ return other && other.name === field.name;
622
+ }) === index;
613
623
  });
614
624
  var deleteFields = currentFields.filter(function (f) {
615
625
  return !newFields.find(function (fd) {
@@ -621,7 +631,12 @@ function addOrRemoveTextLabels(newFields, textLabel) {
621
631
  newTextLabel = newTextLabel.filter(function (tl) {
622
632
  return tl.field && !deleteFields.includes(tl.field.name);
623
633
  });
624
- newTextLabel = !newTextLabel.length ? [defaultTextLabel] : newTextLabel;
634
+ // Aggregation defaults already name Point Count. Using that object as the
635
+ // empty placeholder, then appending the field just picked, inserts the same
636
+ // label twice. deck.gl then rejects the duplicate collision layer ids.
637
+ newTextLabel = !newTextLabel.length ? [_objectSpread(_objectSpread({}, defaultTextLabel), {}, {
638
+ field: null
639
+ })] : newTextLabel;
625
640
 
626
641
  // add
627
642
  newTextLabel = [].concat(_toConsumableArray(newTextLabel.filter(function (tl) {
@@ -676,6 +691,9 @@ export function layerTextLabelChangeUpdater(state, action) {
676
691
  var _textLabel$;
677
692
  // if idx is set to length, add empty text label
678
693
  newTextLabel = [].concat(_toConsumableArray(textLabel), [_objectSpread(_objectSpread({}, defaultTextLabel), {}, {
694
+ // The slot is empty until a field is picked. Aggregation defaults already
695
+ // carry Point Count, and copying that field would add a second label.
696
+ field: null,
679
697
  collisionEnabled: Boolean((_textLabel$ = textLabel[0]) === null || _textLabel$ === void 0 ? void 0 : _textLabel$.collisionEnabled)
680
698
  })]);
681
699
  }
@@ -865,6 +883,16 @@ export function layerTypeChangeUpdater(state, action) {
865
883
 
866
884
  var defaultLayerProps = typeof state.layerClasses[newType].findDefaultLayerProps === 'function' ? state.layerClasses[newType].findDefaultLayerProps(state.datasets[newLayer.config.dataId]) : null;
867
885
  newLayer.assignConfigToLayer(oldLayer.config, oldLayer.visConfigSettings, state.datasets, defaultLayerProps);
886
+ if (!AGGREGATION_COUNT_LAYER_TYPES.has(newType)) {
887
+ var textLabel = newLayer.config.textLabel.filter(function (label) {
888
+ return !isPointCountLabel(label);
889
+ });
890
+ if (textLabel.length !== newLayer.config.textLabel.length) {
891
+ newLayer.updateLayerConfig({
892
+ textLabel: textLabel.length ? textLabel : [_objectSpread({}, DEFAULT_TEXT_LABEL)]
893
+ });
894
+ }
895
+ }
868
896
  newLayer.updateLayerDomain(state.datasets);
869
897
  }
870
898
  var clicked = state.clicked,
@@ -1116,17 +1144,24 @@ export function setFilterAnimationWindowUpdater(state, _ref5) {
1116
1144
  });
1117
1145
 
1118
1146
  // Entering or leaving interval playback snaps the window onto histogram bins.
1119
- if (filter.type === FILTER_TYPES.timeRange && (previousWindow === ANIMATION_WINDOW.interval || animationWindow === ANIMATION_WINDOW.interval)) {
1120
- var adjusted = adjustValueToAnimationWindow(state, nextFilter);
1147
+ if ((filter.type === FILTER_TYPES.timeRange || filter.type === FILTER_TYPES.range) && (previousWindow === ANIMATION_WINDOW.interval || animationWindow === ANIMATION_WINDOW.interval)) {
1148
+ var adjusted = adjustValueToAnimationWindow(state, nextFilter, getPlotBaseIndexByDataId(state.datasets, nextFilter, state.layers));
1121
1149
  if (Array.isArray(adjusted.value) && adjusted.value.every(function (v) {
1122
1150
  return Number.isFinite(v);
1123
1151
  })) {
1124
1152
  nextFilter = adjusted;
1125
1153
  }
1126
1154
  }
1155
+ if (filter.type === FILTER_TYPES.range) {
1156
+ var filterIndex = state.filters.indexOf(filter);
1157
+ return setFilterUpdater(state, setFilter(filterIndex, ['animationWindow', 'value'], [animationWindow, nextFilter.value]));
1158
+ }
1127
1159
  var newState = _objectSpread(_objectSpread({}, state), {}, {
1128
1160
  filters: swap_(nextFilter)(state.filters)
1129
1161
  });
1162
+ if (filter.type !== FILTER_TYPES.timeRange) {
1163
+ return newState;
1164
+ }
1130
1165
  var newSyncTimelineMode = getSyncAnimationMode(nextFilter);
1131
1166
  return setTimeFilterTimelineModeUpdater(newState, {
1132
1167
  id: id,
@@ -1165,6 +1200,27 @@ export function applyFilterConfigUpdater(state, action) {
1165
1200
  }
1166
1201
  return setFilterUpdater(state, setFilter(filterIndex, Object.keys(changed), Object.values(changed)));
1167
1202
  }
1203
+ function updateFilterPlotsAfterFiltering(state, affectedDatasetIds, updatedFilterIndex) {
1204
+ var filters = state.filters.map(function (filter, filterIndex) {
1205
+ var _filter$plotType;
1206
+ if (filterIndex === updatedFilterIndex) {
1207
+ return updateFilterPlot(state.datasets, filter, undefined, state.layers);
1208
+ }
1209
+ var shouldRefreshNumericPlot = filter.type === FILTER_TYPES.range && (!isSideFilter(filter) || ((_filter$plotType = filter.plotType) === null || _filter$plotType === void 0 ? void 0 : _filter$plotType.type) === PLOT_TYPES.lineChart);
1210
+ if (filter.type !== FILTER_TYPES.timeRange && !shouldRefreshNumericPlot) {
1211
+ return filter;
1212
+ }
1213
+ var sharedDatasetIds = filter.dataId.filter(function (dataId) {
1214
+ return affectedDatasetIds.includes(dataId);
1215
+ });
1216
+ if (!sharedDatasetIds.length) {
1217
+ return filter;
1218
+ }
1219
+ var invalidatedFilter = sharedDatasetIds.reduce(removeFilterPlot, filter);
1220
+ return updateFilterPlot(state.datasets, invalidatedFilter, undefined, state.layers);
1221
+ });
1222
+ return set(['filters'], filters, state);
1223
+ }
1168
1224
 
1169
1225
  /**
1170
1226
  * Update filter property
@@ -1223,12 +1279,13 @@ export function setFilterUpdater(state, action) {
1223
1279
  newState = set(['filters', idx], newFilter, newState);
1224
1280
 
1225
1281
  // filter data
1226
- var filteredDatasets = applyFiltersToDatasets(uniq(datasetIdsToFilter), newState.datasets, newState.filters, newState.layers);
1282
+ var affectedDatasetIds = uniq(datasetIdsToFilter);
1283
+ var filteredDatasets = applyFiltersToDatasets(affectedDatasetIds, newState.datasets, newState.filters, newState.layers);
1227
1284
  newState = set(['datasets'], filteredDatasets, newState);
1228
1285
 
1229
- // need to update filterPlot after filter Dataset for plot to update on filtered result
1230
- var filterWithPLot = updateFilterPlot(newState.datasets, newState.filters[idx]);
1231
- newState = set(['filters', idx], filterWithPLot, newState);
1286
+ // Update plots after filtering so they use the latest filtered indexes.
1287
+ // Other time filters need their cached bins invalidated for shared datasets.
1288
+ newState = updateFilterPlotsAfterFiltering(newState, affectedDatasetIds, idx);
1232
1289
 
1233
1290
  // dataId is an array
1234
1291
  // pass only the dataset we need to update
@@ -1240,9 +1297,73 @@ export function setFilterUpdater(state, action) {
1240
1297
  }
1241
1298
  return newState;
1242
1299
  }
1243
- function _updateFilterDataIdAtValueIndex(filter, valueIndex, value, datasets) {
1300
+ function _updateFilterDataIdAtValueIndex(filter, valueIndex, value, datasets, filters) {
1301
+ var currentDataId = filter.dataId[valueIndex];
1302
+ if (currentDataId && value && filter.dataId.length > 1) {
1303
+ var fieldName = filter.name[valueIndex];
1304
+ var endFieldName = toArray(filter.endName)[valueIndex];
1305
+ var previousValue = filter.value;
1306
+ var nextDataIds = filter.dataId.slice();
1307
+ nextDataIds[valueIndex] = value;
1308
+ var nextFilter = removeFilterPlot(filter, currentDataId);
1309
+ nextFilter = set(['dataId'], nextDataIds, nextFilter);
1310
+ for (var _i = 0, _arr = ['gpuChannel', 'gpuEndChannel']; _i < _arr.length; _i++) {
1311
+ var prop = _arr[_i];
1312
+ if (Array.isArray(nextFilter[prop])) {
1313
+ var nextChannels = nextFilter[prop].slice();
1314
+ nextChannels[valueIndex] = undefined;
1315
+ nextFilter = set([prop], nextChannels, nextFilter);
1316
+ }
1317
+ }
1318
+ var dataset = datasets[value];
1319
+ var field = dataset === null || dataset === void 0 ? void 0 : dataset.fields.find(function (candidate) {
1320
+ return candidate.name === fieldName;
1321
+ });
1322
+ var canRebindField = field && (!filter.fieldType || areFilterFieldTypesCompatible(filter.fieldType, field.type));
1323
+ var _ref6 = canRebindField ? applyFilterFieldName(nextFilter, datasets, value, fieldName, valueIndex, {
1324
+ mergeDomain: true
1325
+ }) : {
1326
+ filter: null
1327
+ },
1328
+ reboundFilter = _ref6.filter;
1329
+ if (reboundFilter) {
1330
+ nextFilter = reboundFilter;
1331
+ } else {
1332
+ var nextNames = nextFilter.name.slice();
1333
+ var nextFieldIdx = nextFilter.fieldIdx.slice();
1334
+ nextNames[valueIndex] = '';
1335
+ nextFieldIdx[valueIndex] = -1;
1336
+ nextFilter = _objectSpread(_objectSpread({}, nextFilter), {}, {
1337
+ name: nextNames,
1338
+ fieldIdx: nextFieldIdx,
1339
+ gpu: false
1340
+ });
1341
+ }
1342
+ if (endFieldName && nextFilter.type === FILTER_TYPES.timeRange) {
1343
+ var _applyTimeFilterEndFi = applyTimeFilterEndFieldName(nextFilter, datasets, value, endFieldName, valueIndex),
1344
+ reboundEndFilter = _applyTimeFilterEndFi.filter;
1345
+ if (reboundEndFilter) {
1346
+ nextFilter = reboundEndFilter;
1347
+ } else {
1348
+ var _applyTimeFilterEndFi2 = applyTimeFilterEndFieldName(nextFilter, datasets, value, null, valueIndex),
1349
+ clearedEndFilter = _applyTimeFilterEndFi2.filter;
1350
+ nextFilter = clearedEndFilter || nextFilter;
1351
+ }
1352
+ }
1353
+ var domainSteps = mergeFilterDomain(nextFilter, datasets);
1354
+ nextFilter = _objectSpread(_objectSpread({}, nextFilter), domainSteps ? {
1355
+ domain: domainSteps.domain,
1356
+ step: domainSteps.step
1357
+ } : {});
1358
+ if (nextFilter.gpu) {
1359
+ nextFilter = assignGpuChannel(setFilterGpuMode(nextFilter, filters), filters);
1360
+ }
1361
+ return _objectSpread(_objectSpread({}, nextFilter), {}, {
1362
+ value: adjustValueToFilterDomain(previousValue, nextFilter)
1363
+ });
1364
+ }
1244
1365
  var newFilter = filter;
1245
- if (filter.dataId[valueIndex]) {
1366
+ if (currentDataId) {
1246
1367
  // if dataId already exist
1247
1368
  newFilter = _removeFilterDataIdAtValueIndex(filter, valueIndex, datasets);
1248
1369
  }
@@ -1264,8 +1385,8 @@ function _removeFilterDataIdAtValueIndex(filter, valueIndex, datasets) {
1264
1385
  if (dataId) {
1265
1386
  filter = removeFilterPlot(filter, dataId);
1266
1387
  }
1267
- for (var _i = 0, _arr = ['dataId', 'name', 'fieldIdx', 'gpuChannel', 'endName', 'endFieldIdx', 'endMappedValue', 'gpuEndChannel']; _i < _arr.length; _i++) {
1268
- var prop = _arr[_i];
1388
+ for (var _i2 = 0, _arr2 = ['dataId', 'name', 'fieldIdx', 'gpuChannel', 'endName', 'endFieldIdx', 'endMappedValue', 'gpuEndChannel']; _i2 < _arr2.length; _i2++) {
1389
+ var prop = _arr2[_i2];
1269
1390
  if (Array.isArray(filter[prop])) {
1270
1391
  var nextVal = filter[prop].slice();
1271
1392
  nextVal.splice(valueIndex, 1);
@@ -1297,7 +1418,7 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
1297
1418
  case FILTER_UPDATER_PROPS.dataId:
1298
1419
  {
1299
1420
  var oldDataId = _toConsumableArray(filter.dataId);
1300
- filter = _updateFilterDataIdAtValueIndex(filter, valueIndex, value, state.datasets);
1421
+ filter = _updateFilterDataIdAtValueIndex(filter, valueIndex, value, state.datasets, state.filters);
1301
1422
  datasetIdsToFilter = uniq([].concat(_toConsumableArray(oldDataId), _toConsumableArray(filter.dataId)));
1302
1423
  break;
1303
1424
  }
@@ -1308,7 +1429,7 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
1308
1429
  // we are gonna use pair of datasets and fieldIdx to update the filter
1309
1430
  var datasetId = filter.dataId[valueIndex];
1310
1431
  var _applyFilterFieldName = applyFilterFieldName(filter, state.datasets, datasetId, value, valueIndex, {
1311
- mergeDomain: valueIndex > 0
1432
+ mergeDomain: filter.dataId.length > 1
1312
1433
  }),
1313
1434
  updatedFilter = _applyFilterFieldName.filter,
1314
1435
  newDataset = _applyFilterFieldName.dataset;
@@ -1329,9 +1450,9 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
1329
1450
  case FILTER_UPDATER_PROPS.endName:
1330
1451
  {
1331
1452
  var _datasetId = filter.dataId[valueIndex];
1332
- var _applyTimeFilterEndFi = applyTimeFilterEndFieldName(filter, state.datasets, _datasetId, value, valueIndex),
1333
- _updatedFilter = _applyTimeFilterEndFi.filter,
1334
- _newDataset = _applyTimeFilterEndFi.dataset;
1453
+ var _applyTimeFilterEndFi3 = applyTimeFilterEndFieldName(filter, state.datasets, _datasetId, value, valueIndex),
1454
+ _updatedFilter = _applyTimeFilterEndFi3.filter,
1455
+ _newDataset = _applyTimeFilterEndFi3.dataset;
1335
1456
  if (_updatedFilter) {
1336
1457
  filter = _updatedFilter;
1337
1458
  filter = setFilterGpuMode(filter, state.filters);
@@ -1345,6 +1466,26 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
1345
1466
  }
1346
1467
  break;
1347
1468
  }
1469
+ case 'inverted':
1470
+ {
1471
+ var supportsInversion = filter.dataId.every(function (datasetId) {
1472
+ var _state$datasets$datas;
1473
+ return !((_state$datasets$datas = state.datasets[datasetId]) !== null && _state$datasets$datas !== void 0 && _state$datasets$datas.disableDataOperation);
1474
+ });
1475
+ filter = _objectSpread(_objectSpread({}, filter), {}, {
1476
+ inverted: supportsInversion && Boolean(value)
1477
+ });
1478
+ if (filter.inverted) {
1479
+ // GPU range tests can only keep values inside the window.
1480
+ filter = disableGpuIfInverted(filter);
1481
+ } else if (filterTypeUsesGpu(filter.type)) {
1482
+ filter = assignGpuChannel(setFilterGpuMode(_objectSpread(_objectSpread({}, filter), {}, {
1483
+ gpu: true
1484
+ }), state.filters), state.filters);
1485
+ }
1486
+ datasetIdsToFilter = _toConsumableArray(filter.dataId);
1487
+ break;
1488
+ }
1348
1489
  case FILTER_UPDATER_PROPS.layerId:
1349
1490
  {
1350
1491
  // We need to update only datasetId/s if we have added/removed layers
@@ -1396,21 +1537,23 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
1396
1537
  * @memberof visStateUpdaters
1397
1538
  * @public
1398
1539
  */
1399
- export var setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref6) {
1400
- var idx = _ref6.idx,
1401
- newProp = _ref6.newProp;
1540
+ export var setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref7) {
1541
+ var _newFilter$plotType, _newFilter$plotType3;
1542
+ var idx = _ref7.idx,
1543
+ newProp = _ref7.newProp;
1402
1544
  if (!state.filters[idx]) {
1403
1545
  Console.error("filters[".concat(idx, "] is undefined"));
1404
1546
  return state;
1405
1547
  }
1406
1548
  var newFilter = state.filters[idx];
1549
+ var previousNumericInterval = (_newFilter$plotType = newFilter.plotType) === null || _newFilter$plotType === void 0 ? void 0 : _newFilter$plotType.numericInterval;
1407
1550
  for (var prop in newProp) {
1408
1551
  if (prop === 'plotType') {
1409
1552
  var plotTypeUpdate = newProp.plotType;
1410
1553
  if (plotTypeUpdate && Object.prototype.hasOwnProperty.call(plotTypeUpdate, 'groupBy')) {
1411
- var _newFilter$plotType;
1554
+ var _newFilter$plotType2;
1412
1555
  plotTypeUpdate = _objectSpread(_objectSpread({}, plotTypeUpdate), {}, {
1413
- groupBy: mergePlotGroupBy((_newFilter$plotType = newFilter.plotType) === null || _newFilter$plotType === void 0 ? void 0 : _newFilter$plotType.groupBy, plotTypeUpdate.groupBy)
1556
+ groupBy: mergePlotGroupBy((_newFilter$plotType2 = newFilter.plotType) === null || _newFilter$plotType2 === void 0 ? void 0 : _newFilter$plotType2.groupBy, plotTypeUpdate.groupBy)
1414
1557
  });
1415
1558
  }
1416
1559
  newFilter = pick_('plotType')(merge_(plotTypeUpdate))(newFilter);
@@ -1421,12 +1564,30 @@ export var setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref6) {
1421
1564
  }))(merge_(newProp)(newFilter));
1422
1565
  }
1423
1566
  }
1424
- newFilter = updateFilterPlot(state.datasets, newFilter);
1425
- return _objectSpread(_objectSpread({}, state), {}, {
1567
+ var numericIntervalChanged = newFilter.type === FILTER_TYPES.range && ((_newFilter$plotType3 = newFilter.plotType) === null || _newFilter$plotType3 === void 0 ? void 0 : _newFilter$plotType3.numericInterval) !== previousNumericInterval;
1568
+ if (numericIntervalChanged) {
1569
+ newFilter = _objectSpread(_objectSpread({}, newFilter), {}, {
1570
+ bins: undefined,
1571
+ lineChart: undefined
1572
+ });
1573
+ }
1574
+ newFilter = updateFilterPlot(state.datasets, newFilter, undefined, state.layers);
1575
+ var newState = _objectSpread(_objectSpread({}, state), {}, {
1426
1576
  filters: state.filters.map(function (f, i) {
1427
1577
  return i === idx ? newFilter : f;
1428
1578
  })
1429
1579
  });
1580
+ if (numericIntervalChanged && newFilter.type === FILTER_TYPES.range && newFilter.animationWindow === ANIMATION_WINDOW.interval) {
1581
+ var adjusted = adjustValueToAnimationWindow(newState, newFilter, getPlotBaseIndexByDataId(newState.datasets, newFilter, newState.layers));
1582
+ if (Array.isArray(adjusted.value) && adjusted.value.every(Number.isFinite)) {
1583
+ return setFilterUpdater(newState, {
1584
+ idx: idx,
1585
+ prop: 'value',
1586
+ value: adjusted.value
1587
+ });
1588
+ }
1589
+ }
1590
+ return newState;
1430
1591
  };
1431
1592
 
1432
1593
  /**
@@ -1516,10 +1677,10 @@ export var createOrUpdateFilterUpdater = function createOrUpdateFilterUpdater(st
1516
1677
  * Set layer color palette ui state
1517
1678
  * @memberof visStateUpdaters
1518
1679
  */
1519
- export var layerColorUIChangeUpdater = function layerColorUIChangeUpdater(state, _ref7) {
1520
- var oldLayer = _ref7.oldLayer,
1521
- prop = _ref7.prop,
1522
- newConfig = _ref7.newConfig;
1680
+ export var layerColorUIChangeUpdater = function layerColorUIChangeUpdater(state, _ref8) {
1681
+ var oldLayer = _ref8.oldLayer,
1682
+ prop = _ref8.prop,
1683
+ newConfig = _ref8.newConfig;
1523
1684
  var oldVixConfig = oldLayer.config.visConfig[prop];
1524
1685
  var newLayer = oldLayer.updateLayerColorUI(prop, newConfig);
1525
1686
  var newVisConfig = newLayer.config.visConfig[prop];
@@ -1619,8 +1780,8 @@ export var updateFilterAnimationSpeedUpdater = function updateFilterAnimationSpe
1619
1780
  * @public
1620
1781
  *
1621
1782
  */
1622
- export var updateLayerAnimationSpeedUpdater = function updateLayerAnimationSpeedUpdater(state, _ref8) {
1623
- var speed = _ref8.speed;
1783
+ export var updateLayerAnimationSpeedUpdater = function updateLayerAnimationSpeedUpdater(state, _ref9) {
1784
+ var speed = _ref9.speed;
1624
1785
  return _objectSpread(_objectSpread({}, state), {}, {
1625
1786
  animationConfig: _objectSpread(_objectSpread({}, state.animationConfig), {}, {
1626
1787
  speed: speed
@@ -1637,14 +1798,20 @@ export var setFilterViewUpdater = function setFilterViewUpdater(state, action) {
1637
1798
  var view = action.view,
1638
1799
  idx = action.idx;
1639
1800
  var shouldResetOtherFiltersView = view === FILTER_VIEW_TYPES.enlarged;
1801
+ var filters = state.filters.map(function (f, i) {
1802
+ return i === idx ? _objectSpread(_objectSpread({}, f), {}, {
1803
+ view: view
1804
+ }) : shouldResetOtherFiltersView ? _objectSpread(_objectSpread({}, f), {}, {
1805
+ view: FILTER_VIEW_TYPES.side
1806
+ }) : f;
1807
+ });
1808
+ var openedFilter = filters[idx];
1809
+ if (view === FILTER_VIEW_TYPES.enlarged && (openedFilter === null || openedFilter === void 0 ? void 0 : openedFilter.type) === FILTER_TYPES.range) {
1810
+ var invalidatedFilter = toArray(openedFilter.dataId).reduce(removeFilterPlot, openedFilter);
1811
+ filters[idx] = updateFilterPlot(state.datasets, invalidatedFilter, undefined, state.layers);
1812
+ }
1640
1813
  return _objectSpread(_objectSpread({}, state), {}, {
1641
- filters: state.filters.map(function (f, i) {
1642
- return i === idx ? _objectSpread(_objectSpread({}, f), {}, {
1643
- view: view
1644
- }) : shouldResetOtherFiltersView ? _objectSpread(_objectSpread({}, f), {}, {
1645
- view: FILTER_VIEW_TYPES.side
1646
- }) : f;
1647
- })
1814
+ filters: filters
1648
1815
  });
1649
1816
  };
1650
1817
 
@@ -1687,6 +1854,7 @@ export var removeFilterUpdater = function removeFilterUpdater(state, action) {
1687
1854
  }) : state.editor;
1688
1855
  var newState = set(['filters'], newFilters, state);
1689
1856
  newState = set(['datasets'], filteredDatasets, newState);
1857
+ newState = updateFilterPlotsAfterFiltering(newState, dataId);
1690
1858
  newState = set(['editor'], newEditor, newState);
1691
1859
  return updateAllLayerDomainData(newState, dataId, undefined);
1692
1860
  };
@@ -1737,8 +1905,8 @@ export var addLayerUpdater = function addLayerUpdater(state, action) {
1737
1905
  * @memberof visStateUpdaters
1738
1906
  * @public
1739
1907
  */
1740
- export function removeLayerUpdater(state, _ref9) {
1741
- var id = _ref9.id;
1908
+ export function removeLayerUpdater(state, _ref0) {
1909
+ var id = _ref0.id;
1742
1910
  var idx = Number.isFinite(id) ?
1743
1911
  // support older API, remove layer by idx
1744
1912
  Number(id) : state.layers.findIndex(function (l) {
@@ -1776,8 +1944,8 @@ export function removeLayerUpdater(state, _ref9) {
1776
1944
  * @memberof visStateUpdaters
1777
1945
  * @public
1778
1946
  */
1779
- export var reorderLayerUpdater = function reorderLayerUpdater(state, _ref0) {
1780
- var order = _ref0.order;
1947
+ export var reorderLayerUpdater = function reorderLayerUpdater(state, _ref1) {
1948
+ var order = _ref1.order;
1781
1949
  return _objectSpread(_objectSpread({}, state), {}, {
1782
1950
  layerOrder: order
1783
1951
  });
@@ -2030,8 +2198,8 @@ export var swapLayerOrderEntriesUpdater = function swapLayerOrderEntriesUpdater(
2030
2198
  * @memberof visStateUpdaters
2031
2199
  * @public
2032
2200
  */
2033
- export var duplicateLayerUpdater = function duplicateLayerUpdater(state, _ref1) {
2034
- var id = _ref1.id;
2201
+ export var duplicateLayerUpdater = function duplicateLayerUpdater(state, _ref10) {
2202
+ var id = _ref10.id;
2035
2203
  var idx = Number.isFinite(id) ?
2036
2204
  // support older API, remove layer by idx
2037
2205
  Number(id) : state.layers.findIndex(function (l) {
@@ -2142,8 +2310,8 @@ export var addEffectUpdater = function addEffectUpdater(state, action) {
2142
2310
  * @memberof visStateUpdaters
2143
2311
  * @public
2144
2312
  */
2145
- export var removeEffectUpdater = function removeEffectUpdater(state, _ref10) {
2146
- var id = _ref10.id;
2313
+ export var removeEffectUpdater = function removeEffectUpdater(state, _ref11) {
2314
+ var id = _ref11.id;
2147
2315
  var idx = state.effects.findIndex(function (l) {
2148
2316
  return l.id === id;
2149
2317
  });
@@ -2168,8 +2336,8 @@ export var removeEffectUpdater = function removeEffectUpdater(state, _ref10) {
2168
2336
  * @memberof visStateUpdaters
2169
2337
  * @public
2170
2338
  */
2171
- export var reorderEffectUpdater = function reorderEffectUpdater(state, _ref11) {
2172
- var order = _ref11.order;
2339
+ export var reorderEffectUpdater = function reorderEffectUpdater(state, _ref12) {
2340
+ var order = _ref12.order;
2173
2341
  return _objectSpread(_objectSpread({}, state), {}, {
2174
2342
  effectOrder: fixEffectOrder(state.effects, _toConsumableArray(order))
2175
2343
  });
@@ -2180,9 +2348,9 @@ export var reorderEffectUpdater = function reorderEffectUpdater(state, _ref11) {
2180
2348
  * @memberof visStateUpdaters
2181
2349
  * @public
2182
2350
  */
2183
- export var updateEffectUpdater = function updateEffectUpdater(state, _ref12) {
2184
- var id = _ref12.id,
2185
- props = _ref12.props;
2351
+ export var updateEffectUpdater = function updateEffectUpdater(state, _ref13) {
2352
+ var id = _ref13.id,
2353
+ props = _ref13.props;
2186
2354
  var idx = state.effects.findIndex(function (l) {
2187
2355
  return l.id === id;
2188
2356
  });
@@ -2285,9 +2453,9 @@ function removeChartsAndFilters(state, shouldRemove) {
2285
2453
  * @memberof visStateUpdaters
2286
2454
  * @public
2287
2455
  */
2288
- export var addChartUpdater = function addChartUpdater(state, _ref13) {
2456
+ export var addChartUpdater = function addChartUpdater(state, _ref14) {
2289
2457
  var _chart$display$isConf, _chart$display;
2290
- var chart = _ref13.chart;
2458
+ var chart = _ref14.chart;
2291
2459
  if (!(chart !== null && chart !== void 0 && chart.id)) {
2292
2460
  return state;
2293
2461
  }
@@ -2317,10 +2485,10 @@ export var addChartUpdater = function addChartUpdater(state, _ref13) {
2317
2485
  * @memberof visStateUpdaters
2318
2486
  * @public
2319
2487
  */
2320
- export var updateChartUpdater = function updateChartUpdater(state, _ref14) {
2488
+ export var updateChartUpdater = function updateChartUpdater(state, _ref15) {
2321
2489
  var _next$crossFilter2, _prev$crossFilter, _prev$crossFilter2, _next$crossFilter3;
2322
- var id = _ref14.id,
2323
- props = _ref14.props;
2490
+ var id = _ref15.id,
2491
+ props = _ref15.props;
2324
2492
  var idx = (state.charts || []).findIndex(function (chart) {
2325
2493
  return chart.id === id;
2326
2494
  });
@@ -2367,8 +2535,8 @@ export var updateChartUpdater = function updateChartUpdater(state, _ref14) {
2367
2535
  * @memberof visStateUpdaters
2368
2536
  * @public
2369
2537
  */
2370
- export var removeChartUpdater = function removeChartUpdater(state, _ref15) {
2371
- var id = _ref15.id;
2538
+ export var removeChartUpdater = function removeChartUpdater(state, _ref16) {
2539
+ var id = _ref16.id;
2372
2540
  return removeChartsAndFilters(state, function (chart) {
2373
2541
  return chart.id === id;
2374
2542
  });
@@ -2377,12 +2545,12 @@ export var removeChartUpdater = function removeChartUpdater(state, _ref15) {
2377
2545
  // ANNOTATION UPDATERS
2378
2546
 
2379
2547
  function makeNewAnnotation(config) {
2380
- var _config$kind, _ref16, _config$textSide, _ref17, _config$textVerticalP, _config$id, _config$isVisible, _config$autoSize, _config$autoSizeY, _config$anchorPoint, _config$label, _config$lineColor, _config$lineWidth, _config$textWidth, _config$textHeight, _config$textVerticalA, _armLength, _armLength2, _armLength3, _radiusInMeters;
2548
+ var _config$kind, _ref17, _config$textSide, _ref18, _config$textVerticalP, _config$id, _config$isVisible, _config$autoSize, _config$autoSizeY, _config$anchorPoint, _config$label, _config$lineColor, _config$lineWidth, _config$textWidth, _config$textHeight, _config$textVerticalA, _armLength, _armLength2, _armLength3, _radiusInMeters;
2381
2549
  var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : INITIAL_ANNOTATION_KIND;
2382
2550
  var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
2383
2551
  var derivedFromAngle = providedAngle != null ? textPlacementFromAngle(providedAngle) : undefined;
2384
- var textSide = (_ref16 = (_config$textSide = config === null || config === void 0 ? void 0 : config.textSide) !== null && _config$textSide !== void 0 ? _config$textSide : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.side) !== null && _ref16 !== void 0 ? _ref16 : kind === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_SIDE;
2385
- var textVerticalPosition = (_ref17 = (_config$textVerticalP = config === null || config === void 0 ? void 0 : config.textVerticalPosition) !== null && _config$textVerticalP !== void 0 ? _config$textVerticalP : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.vertical) !== null && _ref17 !== void 0 ? _ref17 : kind === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2552
+ var textSide = (_ref17 = (_config$textSide = config === null || config === void 0 ? void 0 : config.textSide) !== null && _config$textSide !== void 0 ? _config$textSide : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.side) !== null && _ref17 !== void 0 ? _ref17 : kind === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_SIDE;
2553
+ var textVerticalPosition = (_ref18 = (_config$textVerticalP = config === null || config === void 0 ? void 0 : config.textVerticalPosition) !== null && _config$textVerticalP !== void 0 ? _config$textVerticalP : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.vertical) !== null && _ref18 !== void 0 ? _ref18 : kind === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2386
2554
  var base = _objectSpread(_objectSpread(_objectSpread({
2387
2555
  id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : generateHashId(6),
2388
2556
  kind: kind,
@@ -2451,12 +2619,13 @@ export var addAnnotationUpdater = function addAnnotationUpdater(state, action) {
2451
2619
  * @memberof visStateUpdaters
2452
2620
  * @public
2453
2621
  */
2454
- export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref18) {
2455
- var id = _ref18.id;
2622
+ export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref19) {
2623
+ var id = _ref19.id;
2456
2624
  return _objectSpread(_objectSpread({}, state), {}, {
2457
2625
  annotations: state.annotations.filter(function (a) {
2458
2626
  return a.id !== id;
2459
2627
  }),
2628
+ interactionConfig: removeLayerFromZoomOpacity(state.interactionConfig, getZoomOpacityAnnotationTargetId(id)),
2460
2629
  selectedAnnotationId: state.selectedAnnotationId === id ? null : state.selectedAnnotationId,
2461
2630
  isEditingAnnotationText: state.selectedAnnotationId === id ? false : state.isEditingAnnotationText
2462
2631
  });
@@ -2467,9 +2636,9 @@ export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _re
2467
2636
  * @memberof visStateUpdaters
2468
2637
  * @public
2469
2638
  */
2470
- export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref19) {
2471
- var id = _ref19.id,
2472
- config = _ref19.config;
2639
+ export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref20) {
2640
+ var id = _ref20.id,
2641
+ config = _ref20.config;
2473
2642
  var idx = state.annotations.findIndex(function (a) {
2474
2643
  return a.id === id;
2475
2644
  });
@@ -2496,8 +2665,8 @@ export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _re
2496
2665
  * @memberof visStateUpdaters
2497
2666
  * @public
2498
2667
  */
2499
- export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref20) {
2500
- var id = _ref20.id;
2668
+ export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref21) {
2669
+ var id = _ref21.id;
2501
2670
  var original = state.annotations.find(function (a) {
2502
2671
  return a.id === id;
2503
2672
  });
@@ -2521,9 +2690,9 @@ export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(stat
2521
2690
  * @memberof visStateUpdaters
2522
2691
  * @public
2523
2692
  */
2524
- export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref21) {
2525
- var id = _ref21.id,
2526
- isEditingText = _ref21.isEditingText;
2693
+ export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref22) {
2694
+ var id = _ref22.id,
2695
+ isEditingText = _ref22.isEditingText;
2527
2696
  if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
2528
2697
  return state;
2529
2698
  }
@@ -2604,8 +2773,8 @@ function removeSingleDatasetUpdater(state, datasetKey) {
2604
2773
  return false;
2605
2774
  });
2606
2775
  }
2607
- function removeDatasetFromInteractionConfig(state, _ref22) {
2608
- var dataId = _ref22.dataId;
2776
+ function removeDatasetFromInteractionConfig(state, _ref23) {
2777
+ var dataId = _ref23.dataId;
2609
2778
  var interactionConfig = state.interactionConfig;
2610
2779
  var _interactionConfig = interactionConfig,
2611
2780
  tooltip = _interactionConfig.tooltip;
@@ -2690,12 +2859,12 @@ export var resetMapConfigUpdater = function resetMapConfigUpdater(state) {
2690
2859
  * @memberof visStateUpdaters
2691
2860
  * @public
2692
2861
  */
2693
- export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref23) {
2694
- var _ref23$payload = _ref23.payload,
2695
- _ref23$payload$config = _ref23$payload.config,
2696
- config = _ref23$payload$config === void 0 ? {} : _ref23$payload$config,
2697
- _ref23$payload$option = _ref23$payload.options,
2698
- options = _ref23$payload$option === void 0 ? {} : _ref23$payload$option;
2862
+ export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref24) {
2863
+ var _ref24$payload = _ref24.payload,
2864
+ _ref24$payload$config = _ref24$payload.config,
2865
+ config = _ref24$payload$config === void 0 ? {} : _ref24$payload$config,
2866
+ _ref24$payload$option = _ref24$payload.options,
2867
+ options = _ref24$payload$option === void 0 ? {} : _ref24$payload$option;
2699
2868
  if (!config.visState) {
2700
2869
  return state;
2701
2870
  }
@@ -2764,8 +2933,22 @@ export function interactionConfigChangeUpdater(state, action) {
2764
2933
  });
2765
2934
  if (config.id === 'geocoder' && !config.enabled) {
2766
2935
  return removeDatasetUpdater(newState, {
2767
- dataId: 'geocoder_dataset'
2936
+ dataId: GEOCODER_DATASET_NAME
2937
+ });
2938
+ }
2939
+ if (config.id === 'geocoder') {
2940
+ var geocoderLayer = newState.layers.find(function (layer) {
2941
+ return layer.id === GEOCODER_LAYER_ID;
2768
2942
  });
2943
+ if (geocoderLayer) {
2944
+ var _config$config$color;
2945
+ return layerConfigChangeUpdater(newState, {
2946
+ oldLayer: geocoderLayer,
2947
+ newConfig: {
2948
+ color: (_config$config$color = config.config.color) !== null && _config$config$color !== void 0 ? _config$config$color : GEOCODER_ICON_COLOR
2949
+ }
2950
+ });
2951
+ }
2769
2952
  }
2770
2953
  return newState;
2771
2954
  }
@@ -2800,8 +2983,8 @@ export var mapClickUpdater = function mapClickUpdater(state, action) {
2800
2983
  * @memberof visStateUpdaters
2801
2984
  * @public
2802
2985
  */
2803
- export var mouseMoveUpdater = function mouseMoveUpdater(state, _ref24) {
2804
- var evt = _ref24.evt;
2986
+ export var mouseMoveUpdater = function mouseMoveUpdater(state, _ref25) {
2987
+ var evt = _ref25.evt;
2805
2988
  if (Object.values(state.interactionConfig).some(function (config) {
2806
2989
  return config.enabled;
2807
2990
  })) {
@@ -2835,9 +3018,9 @@ export var toggleSplitMapUpdater = function toggleSplitMapUpdater(state, action)
2835
3018
  * @memberof visStateUpdaters
2836
3019
  * @public
2837
3020
  */
2838
- export var toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref25) {
2839
- var mapIndex = _ref25.mapIndex,
2840
- layerId = _ref25.layerId;
3021
+ export var toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref26) {
3022
+ var mapIndex = _ref26.mapIndex,
3023
+ layerId = _ref26.layerId;
2841
3024
  var splitMaps = state.splitMaps;
2842
3025
  return _objectSpread(_objectSpread({}, state), {}, {
2843
3026
  splitMaps: splitMaps.map(function (sm, i) {
@@ -2859,13 +3042,13 @@ function hydrateExternallyHostedProtoDataset(_x) {
2859
3042
  return _hydrateExternallyHostedProtoDataset.apply(this, arguments);
2860
3043
  }
2861
3044
  function _hydrateExternallyHostedProtoDataset() {
2862
- _hydrateExternallyHostedProtoDataset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref26) {
3045
+ _hydrateExternallyHostedProtoDataset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref27) {
2863
3046
  var _dataset$metadata7, _dataset$metadata8;
2864
3047
  var dataset, onProgress, loaded, _dataset$metadata9;
2865
3048
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
2866
3049
  while (1) switch (_context2.prev = _context2.next) {
2867
3050
  case 0:
2868
- dataset = _ref26.arg, onProgress = _ref26.onProgress;
3051
+ dataset = _ref27.arg, onProgress = _ref27.onProgress;
2869
3052
  if (needsExternallyHostedHydrate(dataset)) {
2870
3053
  _context2.next = 3;
2871
3054
  break;
@@ -2910,7 +3093,7 @@ function _hydrateExternallyHostedProtoDataset() {
2910
3093
  }
2911
3094
  var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromiseWithProgress(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
2912
3095
  var FAIL_CREATE_DATASET_TASK = Task.fromPromise(/*#__PURE__*/function () {
2913
- var _ref27 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(message) {
3096
+ var _ref28 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(message) {
2914
3097
  return _regeneratorRuntime.wrap(function _callee$(_context) {
2915
3098
  while (1) switch (_context.prev = _context.next) {
2916
3099
  case 0:
@@ -2922,7 +3105,7 @@ var FAIL_CREATE_DATASET_TASK = Task.fromPromise(/*#__PURE__*/function () {
2922
3105
  }, _callee);
2923
3106
  }));
2924
3107
  return function (_x2) {
2925
- return _ref27.apply(this, arguments);
3108
+ return _ref28.apply(this, arguments);
2926
3109
  };
2927
3110
  }(), 'FAIL_CREATE_DATASET_TASK');
2928
3111
  function getDatasetProgressId(dataset) {
@@ -2987,12 +3170,12 @@ function refreshExternallyHostedTable(_x3) {
2987
3170
  return _refreshExternallyHostedTable.apply(this, arguments);
2988
3171
  }
2989
3172
  function _refreshExternallyHostedTable() {
2990
- _refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref28) {
3173
+ _refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref29) {
2991
3174
  var metadata, onProgress;
2992
3175
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
2993
3176
  while (1) switch (_context3.prev = _context3.next) {
2994
3177
  case 0:
2995
- metadata = _ref28.arg, onProgress = _ref28.onProgress;
3178
+ metadata = _ref29.arg, onProgress = _ref29.onProgress;
2996
3179
  return _context3.abrupt("return", loadExternallyHostedDataset(_objectSpread(_objectSpread({}, metadata), {}, {
2997
3180
  onProgress: onProgress,
2998
3181
  bypassCache: true
@@ -3013,9 +3196,9 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromiseWithProgress(refres
3013
3196
  * @memberof visStateUpdaters
3014
3197
  * @public
3015
3198
  */
3016
- export function refreshDatasetUpdater(state, _ref29) {
3199
+ export function refreshDatasetUpdater(state, _ref30) {
3017
3200
  var _dataset$metadata3, _dataset$metadata4;
3018
- var dataId = _ref29.dataId;
3201
+ var dataId = _ref30.dataId;
3019
3202
  var dataset = state.datasets[dataId];
3020
3203
  if (!dataset || dataset.type !== DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.source) !== 'string') {
3021
3204
  return state;
@@ -3054,10 +3237,10 @@ export function refreshDatasetUpdater(state, _ref29) {
3054
3237
  * @memberof visStateUpdaters
3055
3238
  * @public
3056
3239
  */
3057
- export function refreshDatasetProgressUpdater(state, _ref30) {
3240
+ export function refreshDatasetProgressUpdater(state, _ref31) {
3058
3241
  var _dataset$metadata5, _dataset$metadata6;
3059
- var dataId = _ref30.dataId,
3060
- percent = _ref30.percent;
3242
+ var dataId = _ref31.dataId,
3243
+ percent = _ref31.percent;
3061
3244
  var dataset = state.datasets[dataId];
3062
3245
  if (!dataset || ((_dataset$metadata5 = dataset.metadata) === null || _dataset$metadata5 === void 0 ? void 0 : _dataset$metadata5.refreshStatus) !== 'loading') {
3063
3246
  return state;
@@ -3147,10 +3330,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
3147
3330
  * @memberof visStateUpdaters
3148
3331
  * @public
3149
3332
  */
3150
- export function refreshDatasetSuccessUpdater(state, _ref31) {
3333
+ export function refreshDatasetSuccessUpdater(state, _ref32) {
3151
3334
  var _result$data;
3152
- var dataId = _ref31.dataId,
3153
- result = _ref31.result;
3335
+ var dataId = _ref32.dataId,
3336
+ result = _ref32.result;
3154
3337
  var dataset = state.datasets[dataId];
3155
3338
  if (!dataset) {
3156
3339
  return state;
@@ -3244,10 +3427,10 @@ function normalizeDatasetRows(rows, fields) {
3244
3427
  * @memberof visStateUpdaters
3245
3428
  * @public
3246
3429
  */
3247
- export function addToDatasetUpdater(state, _ref32) {
3248
- var dataId = _ref32.dataId,
3249
- rows = _ref32.rows,
3250
- options = _ref32.options;
3430
+ export function addToDatasetUpdater(state, _ref33) {
3431
+ var dataId = _ref33.dataId,
3432
+ rows = _ref33.rows,
3433
+ options = _ref33.options;
3251
3434
  var dataset = state.datasets[dataId];
3252
3435
  if (!dataset) {
3253
3436
  return state;
@@ -3272,10 +3455,10 @@ export function addToDatasetUpdater(state, _ref32) {
3272
3455
  * @memberof visStateUpdaters
3273
3456
  * @public
3274
3457
  */
3275
- export function removeFromDatasetUpdater(state, _ref33) {
3276
- var dataId = _ref33.dataId,
3277
- rowIndexes = _ref33.rowIndexes,
3278
- byField = _ref33.byField;
3458
+ export function removeFromDatasetUpdater(state, _ref34) {
3459
+ var dataId = _ref34.dataId,
3460
+ rowIndexes = _ref34.rowIndexes,
3461
+ byField = _ref34.byField;
3279
3462
  var dataset = state.datasets[dataId];
3280
3463
  if (!dataset) {
3281
3464
  return state;
@@ -3298,9 +3481,9 @@ export function removeFromDatasetUpdater(state, _ref33) {
3298
3481
  * @memberof visStateUpdaters
3299
3482
  * @public
3300
3483
  */
3301
- export function refreshDatasetErrorUpdater(state, _ref34) {
3302
- var dataId = _ref34.dataId,
3303
- error = _ref34.error;
3484
+ export function refreshDatasetErrorUpdater(state, _ref35) {
3485
+ var dataId = _ref35.dataId,
3486
+ error = _ref35.error;
3304
3487
  var dataset = state.datasets[dataId];
3305
3488
  if (!dataset) {
3306
3489
  return state;
@@ -3320,6 +3503,7 @@ export function refreshDatasetErrorUpdater(state, _ref34) {
3320
3503
  * @memberof visStateUpdaters
3321
3504
  * @public
3322
3505
  */
3506
+
3323
3507
  // eslint-disable-next-line complexity
3324
3508
  export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
3325
3509
  // datasets can be a single data entries or an array of multiple data entries
@@ -3342,10 +3526,10 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
3342
3526
  var remoteTasks = [];
3343
3527
  var notificationTasks = [];
3344
3528
  var hydrateProgress = {};
3345
- datasets.forEach(function (_ref35, datasetIndex) {
3346
- var _ref35$info = _ref35.info,
3347
- info = _ref35$info === void 0 ? {} : _ref35$info,
3348
- rest = _objectWithoutProperties(_ref35, _excluded2);
3529
+ datasets.forEach(function (_ref36, datasetIndex) {
3530
+ var _ref36$info = _ref36.info,
3531
+ info = _ref36$info === void 0 ? {} : _ref36$info,
3532
+ rest = _objectWithoutProperties(_ref36, _excluded2);
3349
3533
  var proto = _objectSpread({
3350
3534
  info: info
3351
3535
  }, rest);
@@ -3393,21 +3577,26 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
3393
3577
  });
3394
3578
  }
3395
3579
  }
3396
- return withTask(updatedState, [].concat(_toConsumableArray(batches.map(function (batch) {
3580
+ return withTask(updatedState, [].concat(_toConsumableArray(batches.map(function (batch, batchIndex) {
3397
3581
  return Task.allSettled(batch.tasks).map(function (results) {
3398
- return createNewDatasetSuccess({
3582
+ var onFinish = action.onFinish;
3583
+ var payload = _objectSpread({
3399
3584
  results: results,
3400
3585
  addToMapOptions: options,
3401
3586
  progressIds: batch.progressIds
3402
- });
3587
+ }, onFinish && batchIndex === batches.length - 1 ? {
3588
+ onFinish: onFinish
3589
+ } : {});
3590
+ return createNewDatasetSuccess(payload);
3403
3591
  });
3404
3592
  })), notificationTasks));
3405
3593
  };
3406
3594
  export var createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpdater(state, action) {
3407
- var _action$payload = action.payload,
3408
- results = _action$payload.results,
3409
- addToMapOptions = _action$payload.addToMapOptions,
3410
- progressIds = _action$payload.progressIds;
3595
+ var _ref37 = action.payload,
3596
+ results = _ref37.results,
3597
+ addToMapOptions = _ref37.addToMapOptions,
3598
+ progressIds = _ref37.progressIds,
3599
+ onFinish = _ref37.onFinish;
3411
3600
  var notificationTasks = [];
3412
3601
  var newDataEntries = results.reduce(function (accu, result, idx) {
3413
3602
  if (result.status === 'fulfilled') {
@@ -3448,7 +3637,9 @@ export var createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpda
3448
3637
  });
3449
3638
  return withTask(clearLoadingProgress(setLoadingIndicatorUpdater(updatedState, payload_({
3450
3639
  change: -1
3451
- })), progressIds), notificationTasks);
3640
+ })), progressIds), [].concat(notificationTasks, _toConsumableArray(onFinish ? [DELAY_TASK(10).map(function () {
3641
+ return onFinish;
3642
+ })] : [])));
3452
3643
  };
3453
3644
 
3454
3645
  /**
@@ -3686,10 +3877,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3686
3877
  // follow renamed columns
3687
3878
  var columnsPatch = {};
3688
3879
  var columnsChanged = false;
3689
- Object.entries(layer.config.columns || {}).forEach(function (_ref36) {
3690
- var _ref37 = _slicedToArray(_ref36, 2),
3691
- ckey = _ref37[0],
3692
- col = _ref37[1];
3880
+ Object.entries(layer.config.columns || {}).forEach(function (_ref38) {
3881
+ var _ref39 = _slicedToArray(_ref38, 2),
3882
+ ckey = _ref39[0],
3883
+ col = _ref39[1];
3693
3884
  if (col !== null && col !== void 0 && col.value && renames[col.value]) {
3694
3885
  columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
3695
3886
  value: renames[col.value]
@@ -3702,8 +3893,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3702
3893
  }
3703
3894
 
3704
3895
  // follow renamed visual-channel fields (colorField, sizeField, ...)
3705
- Object.values(layer.visualChannels).forEach(function (_ref38) {
3706
- var field = _ref38.field;
3896
+ Object.values(layer.visualChannels).forEach(function (_ref40) {
3897
+ var field = _ref40.field;
3707
3898
  var fieldConfig = layer.config[field];
3708
3899
  if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
3709
3900
  configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
@@ -3712,20 +3903,19 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3712
3903
  }
3713
3904
  });
3714
3905
 
3715
- // follow renamed text-label fields
3906
+ // follow renamed or re-typed text-label fields
3716
3907
  if ((_layer$config$textLab = layer.config.textLabel) !== null && _layer$config$textLab !== void 0 && _layer$config$textLab.length) {
3717
- var textLabel = layer.config.textLabel.map(function (tl) {
3718
- return tl.field && renames[tl.field.name] ? _objectSpread(_objectSpread({}, tl), {}, {
3719
- field: _objectSpread(_objectSpread({}, tl.field), {}, {
3720
- name: renames[tl.field.name]
3721
- })
3908
+ configPatch.textLabel = layer.config.textLabel.map(function (tl) {
3909
+ var _tl$field, _tl$field2;
3910
+ var name = (_tl$field = tl.field) === null || _tl$field === void 0 ? void 0 : _tl$field.name;
3911
+ var field = name && newTable.fields.find(function (candidate) {
3912
+ var _renames$name;
3913
+ return candidate.name === ((_renames$name = renames[name]) !== null && _renames$name !== void 0 ? _renames$name : name);
3914
+ });
3915
+ return field && (field.name !== name || field.type !== ((_tl$field2 = tl.field) === null || _tl$field2 === void 0 ? void 0 : _tl$field2.type)) ? _objectSpread(_objectSpread({}, tl), {}, {
3916
+ field: field
3722
3917
  }) : tl;
3723
3918
  });
3724
- if (textLabel.some(function (tl, i) {
3725
- return tl !== layer.config.textLabel[i];
3726
- })) {
3727
- configPatch.textLabel = textLabel;
3728
- }
3729
3919
  }
3730
3920
 
3731
3921
  // shallow-copy the layer so we never mutate redux state; the copy keeps the
@@ -3738,6 +3928,52 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3738
3928
  var validated = validateExistingLayerWithData(newTable, state.layerClasses, layerCopy, state.schema);
3739
3929
  return validated && validated.hasAllColumns() ? validated : null;
3740
3930
  }
3931
+ var FILTER_PLOT_Y_AXIS_TYPES = new Set([ALL_FIELD_TYPES.integer, ALL_FIELD_TYPES.real]);
3932
+ function clearTimelineFilterState(filter) {
3933
+ var _ref41 = filter,
3934
+ _syncedWithLayerTimeline = _ref41.syncedWithLayerTimeline,
3935
+ _syncTimelineMode = _ref41.syncTimelineMode,
3936
+ _timeBins = _ref41.timeBins,
3937
+ _lineChart = _ref41.lineChart,
3938
+ _timezone = _ref41.timezone,
3939
+ _invertTrendColor = _ref41.invertTrendColor,
3940
+ _showTimeDisplay = _ref41.showTimeDisplay,
3941
+ rest = _objectWithoutProperties(_ref41, _excluded3);
3942
+ return _objectSpread(_objectSpread({}, rest), {}, {
3943
+ fixedDomain: false,
3944
+ isAnimating: false,
3945
+ animationWindow: ANIMATION_WINDOW.free,
3946
+ yAxis: null,
3947
+ plotType: {
3948
+ type: PLOT_TYPES.histogram
3949
+ }
3950
+ });
3951
+ }
3952
+ function reconcileTimelinePlotAfterPrimaryRemoval(filter, datasets) {
3953
+ var _filter$yAxis, _primaryDataset$field, _filter$plotType2;
3954
+ if (filter.type !== FILTER_TYPES.timeRange) {
3955
+ return filter;
3956
+ }
3957
+ var primaryDataset = datasets[filter.dataId[0]];
3958
+ var yAxis = (_filter$yAxis = filter.yAxis) !== null && _filter$yAxis !== void 0 && _filter$yAxis.name ? (_primaryDataset$field = primaryDataset === null || primaryDataset === void 0 ? void 0 : primaryDataset.fields.find(function (field) {
3959
+ var _filter$yAxis2;
3960
+ return field.name === ((_filter$yAxis2 = filter.yAxis) === null || _filter$yAxis2 === void 0 ? void 0 : _filter$yAxis2.name) && FILTER_PLOT_Y_AXIS_TYPES.has(field.type);
3961
+ })) !== null && _primaryDataset$field !== void 0 ? _primaryDataset$field : null : null;
3962
+ var groupByFieldName = (_filter$plotType2 = filter.plotType) === null || _filter$plotType2 === void 0 || (_filter$plotType2 = _filter$plotType2.groupBy) === null || _filter$plotType2 === void 0 ? void 0 : _filter$plotType2.fieldName;
3963
+ var hasGroupByField = groupByFieldName ? primaryDataset === null || primaryDataset === void 0 ? void 0 : primaryDataset.fields.some(function (field) {
3964
+ return field.name === groupByFieldName;
3965
+ }) : true;
3966
+ var plotType = _objectSpread(_objectSpread(_objectSpread({}, filter.plotType), filter.yAxis && !yAxis ? {
3967
+ type: PLOT_TYPES.histogram
3968
+ } : {}), !hasGroupByField ? {
3969
+ groupBy: null
3970
+ } : {});
3971
+ return _objectSpread(_objectSpread({}, filter), {}, {
3972
+ yAxis: yAxis,
3973
+ plotType: plotType,
3974
+ lineChart: undefined
3975
+ });
3976
+ }
3741
3977
 
3742
3978
  /**
3743
3979
  * Update an existing dataset's schema (columns/fields) in place and reconcile
@@ -3758,7 +3994,7 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3758
3994
  * @public
3759
3995
  */
3760
3996
  export function updateDatasetUpdater(state, action) {
3761
- var _interactionConfig2, _tooltip$config;
3997
+ var _renames$sortedColumn, _interactionConfig2, _tooltip$config;
3762
3998
  var dataId = action.dataId,
3763
3999
  data = action.data,
3764
4000
  _action$renames = action.renames,
@@ -3770,7 +4006,12 @@ export function updateDatasetUpdater(state, action) {
3770
4006
 
3771
4007
  // 1. rebuild the table schema in place (same id/label/color/metadata)
3772
4008
  var newTable = copyTableAndUpdate(existing, {});
4009
+ var _ref42 = Object.entries(existing.sortColumn || {})[0] || [],
4010
+ _ref43 = _slicedToArray(_ref42, 2),
4011
+ sortedColumn = _ref43[0],
4012
+ sortMode = _ref43[1];
3773
4013
  newTable.updateSchema(data);
4014
+ newTable.dataRevision = existing.dataRevision + 1;
3774
4015
 
3775
4016
  // The data container is rebuilt unsorted and unfiltered; reset the table's
3776
4017
  // view state that indexes into the old container.
@@ -3778,30 +4019,55 @@ export function updateDatasetUpdater(state, action) {
3778
4019
  newTable.filterRecordCPU = undefined;
3779
4020
  newTable.sortColumn = undefined;
3780
4021
  newTable.sortOrder = null;
4022
+ var newFieldsByName = new Map(newTable.fields.map(function (field) {
4023
+ return [field.name, field];
4024
+ }));
3781
4025
  newTable.pinnedColumns = (existing.pinnedColumns || []).map(function (name) {
3782
- var _renames$name;
3783
- return (_renames$name = renames[name]) !== null && _renames$name !== void 0 ? _renames$name : name;
4026
+ var _renames$name2;
4027
+ return (_renames$name2 = renames[name]) !== null && _renames$name2 !== void 0 ? _renames$name2 : name;
3784
4028
  }).filter(function (name) {
3785
- return newTable.getColumnFieldIdx(name) > -1;
4029
+ return newFieldsByName.has(name);
3786
4030
  });
3787
- var newFieldsByName = new Set(newTable.fields.map(function (f) {
3788
- return f.name;
3789
- }));
4031
+ newTable.hiddenColumns = (existing.hiddenColumns || []).map(function (name) {
4032
+ var _renames$name3;
4033
+ return (_renames$name3 = renames[name]) !== null && _renames$name3 !== void 0 ? _renames$name3 : name;
4034
+ }).filter(function (name) {
4035
+ return newFieldsByName.has(name);
4036
+ });
4037
+ var nextSortedColumn = sortedColumn ? (_renames$sortedColumn = renames[sortedColumn]) !== null && _renames$sortedColumn !== void 0 ? _renames$sortedColumn : sortedColumn : null;
4038
+ if (nextSortedColumn && sortMode && newFieldsByName.has(nextSortedColumn)) {
4039
+ sortDatasetByColumn(newTable, nextSortedColumn, sortMode);
4040
+ }
3790
4041
  var newDatasets = _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, newTable));
4042
+ var datasetIdsToRefilter = new Set([dataId]);
3791
4043
 
3792
4044
  // 2. reconcile filters
3793
4045
  var newFilters = state.filters.map(function (filter) {
3794
- var _renames$oldName, _updated$yAxis;
4046
+ var _renames$oldName, _newTable$getColumnFi, _updated$yAxis;
3795
4047
  var vi = filter.dataId.indexOf(dataId);
3796
4048
  if (vi === -1) {
3797
4049
  return filter;
3798
4050
  }
4051
+
4052
+ // Polygon filters target layers rather than dataset fields, so a column
4053
+ // type change should not reconcile them against the field list.
4054
+ if (filter.type === FILTER_TYPES.polygon) {
4055
+ return filter;
4056
+ }
3799
4057
  var oldName = filter.name[vi];
3800
4058
  var newName = (_renames$oldName = renames[oldName]) !== null && _renames$oldName !== void 0 ? _renames$oldName : oldName;
3801
4059
  var fieldIdx = newTable.getColumnFieldIdx(newName);
3802
- if (fieldIdx === -1) {
3803
- // column is gone: drop a single-dataset filter, splice it out of a synced one
3804
- return filter.dataId.length === 1 ? null : _removeFilterDataIdAtValueIndex(filter, vi, newDatasets);
4060
+ var nextFilterType = fieldIdx === -1 ? null : (_newTable$getColumnFi = newTable.getColumnFilterProps(newName)) === null || _newTable$getColumnFi === void 0 ? void 0 : _newTable$getColumnFi.type;
4061
+ if (fieldIdx === -1 || filter.dataId.length > 1 && nextFilterType && nextFilterType !== filter.type) {
4062
+ // Drop a missing field or detach an incompatible synced member.
4063
+ if (filter.dataId.length === 1) {
4064
+ return null;
4065
+ }
4066
+ filter.dataId.forEach(function (id) {
4067
+ return datasetIdsToRefilter.add(id);
4068
+ });
4069
+ var detachedFilter = _removeFilterDataIdAtValueIndex(filter, vi, newDatasets);
4070
+ return vi === 0 ? reconcileTimelinePlotAfterPrimaryRemoval(detachedFilter, newDatasets) : detachedFilter;
3805
4071
  }
3806
4072
 
3807
4073
  // column present (possibly renamed): re-resolve name/fieldIdx/domain
@@ -3812,30 +4078,56 @@ export function updateDatasetUpdater(state, action) {
3812
4078
  if (!updated) {
3813
4079
  return null;
3814
4080
  }
4081
+ var leavingTimeFilter = filter.type === FILTER_TYPES.timeRange && updated.type !== FILTER_TYPES.timeRange;
4082
+ var oldEndName = toArray(filter.endName)[vi];
4083
+ if (updated.type === FILTER_TYPES.timeRange && oldEndName) {
4084
+ var _renames$oldEndName, _ref44, _applyTimeFilterEndFi4;
4085
+ var endName = (_renames$oldEndName = renames[oldEndName]) !== null && _renames$oldEndName !== void 0 ? _renames$oldEndName : oldEndName;
4086
+ updated = (_ref44 = (_applyTimeFilterEndFi4 = applyTimeFilterEndFieldName(updated, newDatasets, dataId, endName, vi).filter) !== null && _applyTimeFilterEndFi4 !== void 0 ? _applyTimeFilterEndFi4 : applyTimeFilterEndFieldName(updated, newDatasets, dataId, null, vi).filter) !== null && _ref44 !== void 0 ? _ref44 : updated;
4087
+ }
3815
4088
 
3816
- // brush filters carry a second y-axis field; follow a rename there too
3817
- var yAxis = ((_updated$yAxis = updated.yAxis) === null || _updated$yAxis === void 0 ? void 0 : _updated$yAxis.name) && (renames[updated.yAxis.name] ? _objectSpread(_objectSpread({}, updated.yAxis), {}, {
3818
- name: renames[updated.yAxis.name]
3819
- }) : newFieldsByName.has(updated.yAxis.name) ? updated.yAxis : null);
3820
- return _objectSpread(_objectSpread({}, updated), {}, {
3821
- yAxis: yAxis,
4089
+ // Time plots only accept numeric y-axis fields. Re-resolve the complete
4090
+ // field so type and fieldIdx also follow a schema change.
4091
+ var yAxis = updated.yAxis;
4092
+ if (vi === 0 && (_updated$yAxis = updated.yAxis) !== null && _updated$yAxis !== void 0 && _updated$yAxis.name) {
4093
+ var _renames$updated$yAxi;
4094
+ var yAxisName = (_renames$updated$yAxi = renames[updated.yAxis.name]) !== null && _renames$updated$yAxi !== void 0 ? _renames$updated$yAxi : updated.yAxis.name;
4095
+ var yAxisField = newFieldsByName.get(yAxisName);
4096
+ yAxis = yAxisField && FILTER_PLOT_Y_AXIS_TYPES.has(yAxisField.type) ? yAxisField : null;
4097
+ }
4098
+ var nextFilter = _objectSpread(_objectSpread(_objectSpread({}, updated), {}, {
4099
+ yAxis: yAxis
4100
+ }, updated.yAxis && !yAxis ? {
4101
+ plotType: _objectSpread(_objectSpread({}, updated.plotType), {}, {
4102
+ type: PLOT_TYPES.histogram
4103
+ })
4104
+ } : {}), {}, {
3822
4105
  // clamp the user's previous selection into the new domain instead of
3823
4106
  // resetting it to the full range
3824
4107
  value: adjustValueToFilterDomain(filter.value, updated)
3825
4108
  });
4109
+ if (leavingTimeFilter) {
4110
+ nextFilter = clearTimelineFilterState(nextFilter);
4111
+ } else if (vi === 0 && nextFilter.type === FILTER_TYPES.timeRange) {
4112
+ var groupBy = nextFilter.plotType.groupBy;
4113
+ if (groupBy && renames[groupBy.fieldName]) {
4114
+ nextFilter.plotType = _objectSpread(_objectSpread({}, nextFilter.plotType), {}, {
4115
+ groupBy: _objectSpread(_objectSpread({}, groupBy), {}, {
4116
+ fieldName: renames[groupBy.fieldName]
4117
+ })
4118
+ });
4119
+ }
4120
+ // Timeline bins can remain identical while y-axis or group-by values
4121
+ // change, so do not reuse the old series cache after a data rebuild.
4122
+ nextFilter = _objectSpread(_objectSpread({}, nextFilter), {}, {
4123
+ lineChart: undefined
4124
+ });
4125
+ }
4126
+ // Keep existing plots; time plots are rebuilt after filtering below.
4127
+ return filter.type === nextFilter.type || nextFilter.type === FILTER_TYPES.timeRange ? nextFilter : updateFilterPlot(newDatasets, nextFilter, dataId, state.layers);
3826
4128
  }).filter(Boolean);
3827
4129
 
3828
- // reassign GPU channels now that the filter list is settled
3829
- newFilters = newFilters.map(function (filter) {
3830
- return filter.gpu ? assignGpuChannel(setFilterGpuMode(filter, newFilters), newFilters) : filter;
3831
- });
3832
-
3833
- // 3. rebuild the table's filter state (gpuFilter / filterRecord / filteredIndex)
3834
- newTable.filterTable(newFilters, state.layers.filter(function (l) {
3835
- return l.config.dataId === dataId;
3836
- }), {});
3837
-
3838
- // 4. reconcile layers
4130
+ // 3. reconcile layers
3839
4131
  var layersToRemove = [];
3840
4132
  var newLayers = state.layers.map(function (layer) {
3841
4133
  if (layer.config.dataId !== dataId) {
@@ -3849,6 +4141,41 @@ export function updateDatasetUpdater(state, action) {
3849
4141
  return layer; // placeholder, dropped via removeLayerUpdater below
3850
4142
  });
3851
4143
 
4144
+ // Polygon filters reference layers, not fields. Preserve them for schema
4145
+ // edits that keep their target layers, but remove invalid targets before
4146
+ // rebuilding filter records when a required layer column was deleted.
4147
+ var removedLayerIds = new Set(layersToRemove);
4148
+ if (removedLayerIds.size) {
4149
+ newFilters = newFilters.flatMap(function (filter) {
4150
+ var _filter$layerId;
4151
+ if (filter.type !== FILTER_TYPES.polygon || !((_filter$layerId = filter.layerId) !== null && _filter$layerId !== void 0 && _filter$layerId.some(function (id) {
4152
+ return removedLayerIds.has(id);
4153
+ }))) {
4154
+ return [filter];
4155
+ }
4156
+ filter.dataId.forEach(function (id) {
4157
+ return datasetIdsToRefilter.add(id);
4158
+ });
4159
+ var layerId = filter.layerId.filter(function (id) {
4160
+ return !removedLayerIds.has(id);
4161
+ });
4162
+ return layerId.length ? [_objectSpread(_objectSpread({}, filter), {}, {
4163
+ layerId: layerId
4164
+ })] : [];
4165
+ });
4166
+ }
4167
+
4168
+ // Reassign GPU channels now that the filter list is settled.
4169
+ newFilters = newFilters.map(function (filter) {
4170
+ return filter.gpu ? assignGpuChannel(setFilterGpuMode(filter, newFilters), newFilters) : filter;
4171
+ });
4172
+
4173
+ // 4. rebuild the table's filter state using only layers that will survive
4174
+ var survivingLayers = newLayers.filter(function (layer) {
4175
+ return !removedLayerIds.has(layer.id);
4176
+ });
4177
+ var filteredDatasets = applyFiltersToDatasets(Array.from(datasetIdsToRefilter), newDatasets, newFilters, survivingLayers);
4178
+
3852
4179
  // 5. reconcile tooltip fieldsToShow
3853
4180
  var interactionConfig = state.interactionConfig;
3854
4181
  var tooltip = (_interactionConfig2 = interactionConfig) === null || _interactionConfig2 === void 0 ? void 0 : _interactionConfig2.tooltip;
@@ -3870,10 +4197,11 @@ export function updateDatasetUpdater(state, action) {
3870
4197
  });
3871
4198
  }
3872
4199
  var nextState = _objectSpread(_objectSpread({}, state), {}, {
3873
- datasets: newDatasets,
4200
+ datasets: filteredDatasets,
3874
4201
  filters: newFilters,
3875
4202
  layers: newLayers,
3876
- interactionConfig: interactionConfig
4203
+ interactionConfig: interactionConfig,
4204
+ charts: remapChartsForDataset(state.charts, dataId, renames, newFieldsByName)
3877
4205
  });
3878
4206
 
3879
4207
  // 6. drop layers that lost their required columns
@@ -3883,11 +4211,91 @@ export function updateDatasetUpdater(state, action) {
3883
4211
  });
3884
4212
  }, nextState);
3885
4213
 
4214
+ // Filtering and polygon-layer removal can change the rows behind timeline
4215
+ // plots, so rebuild their cached bins/series from the reconciled state.
4216
+ nextState = updateFilterPlotsAfterFiltering(nextState, Array.from(datasetIdsToRefilter));
4217
+
3886
4218
  // 7. recompute layer domains + data for the updated dataset
3887
4219
  nextState = updateAllLayerDomainData(nextState, dataId);
3888
4220
  return nextState;
3889
4221
  }
3890
4222
 
4223
+ /**
4224
+ * Rename a column's stored identity (`field.name`) and every layer, filter,
4225
+ * tooltip, and chart reference that used the old name.
4226
+ */
4227
+ export function renameTableColumnUpdater(state, action) {
4228
+ var dataId = action.dataId,
4229
+ fieldName = action.fieldName,
4230
+ newName = action.newName;
4231
+ var dataset = state.datasets[dataId];
4232
+ if (!dataset || !canMutateDatasetSchema(dataset)) {
4233
+ return state;
4234
+ }
4235
+ var payload = buildRenameColumnData(dataset, fieldName, newName);
4236
+ if (!payload) {
4237
+ return state;
4238
+ }
4239
+ return updateDatasetUpdater(state, {
4240
+ dataId: dataId,
4241
+ data: payload.data,
4242
+ renames: payload.renames
4243
+ });
4244
+ }
4245
+
4246
+ /**
4247
+ * Convert a complete column before committing its new type. A failed value
4248
+ * leaves the table and every reference unchanged.
4249
+ */
4250
+ export function changeTableColumnTypeUpdater(state, action) {
4251
+ var dataId = action.dataId,
4252
+ fieldName = action.fieldName,
4253
+ newType = action.newType;
4254
+ var dataset = state.datasets[dataId];
4255
+ if (!dataset || !canMutateDatasetSchema(dataset)) {
4256
+ return state;
4257
+ }
4258
+ var result = buildChangeColumnTypeData(dataset, fieldName, newType);
4259
+ if (!result) {
4260
+ return state;
4261
+ }
4262
+ if (result.error) {
4263
+ return withTask(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4264
+ return addNotification(errorNotification({
4265
+ id: "column-type-".concat(dataId, "-").concat(fieldName),
4266
+ message: "Cannot change \u201C".concat(fieldName, "\u201D to ").concat(newType, ": ").concat(formatColumnTypeConversionError(result.error), ". No values were changed.")
4267
+ }));
4268
+ }));
4269
+ }
4270
+ return updateDatasetUpdater(state, {
4271
+ dataId: dataId,
4272
+ data: result.payload.data,
4273
+ renames: result.payload.renames
4274
+ });
4275
+ }
4276
+
4277
+ /**
4278
+ * Drop a column and the layers, filters, and other references that required it.
4279
+ * The last remaining column is kept.
4280
+ */
4281
+ export function deleteTableColumnUpdater(state, action) {
4282
+ var dataId = action.dataId,
4283
+ fieldName = action.fieldName;
4284
+ var dataset = state.datasets[dataId];
4285
+ if (!dataset || !canMutateDatasetSchema(dataset)) {
4286
+ return state;
4287
+ }
4288
+ var payload = buildDeleteColumnData(dataset, fieldName);
4289
+ if (!payload) {
4290
+ return state;
4291
+ }
4292
+ return updateDatasetUpdater(state, {
4293
+ dataId: dataId,
4294
+ data: payload.data,
4295
+ renames: payload.renames
4296
+ });
4297
+ }
4298
+
3891
4299
  /**
3892
4300
  * When a user clicks on the specific map closing icon
3893
4301
  * the application will close the selected map
@@ -3963,9 +4371,9 @@ export var loadFilesUpdater = function loadFilesUpdater(state, action) {
3963
4371
 
3964
4372
  // A deferred load is another batch for the same Add Data click. Keep files
3965
4373
  // already staged, and keep their error cards, instead of starting over.
3966
- var previousErrors = options !== null && options !== void 0 && options.deferAddToMap && state.fileLoadingProgress ? Object.fromEntries(Object.entries(state.fileLoadingProgress).filter(function (_ref39) {
3967
- var _ref40 = _slicedToArray(_ref39, 2),
3968
- value = _ref40[1];
4374
+ var previousErrors = options !== null && options !== void 0 && options.deferAddToMap && state.fileLoadingProgress ? Object.fromEntries(Object.entries(state.fileLoadingProgress).filter(function (_ref45) {
4375
+ var _ref46 = _slicedToArray(_ref45, 2),
4376
+ value = _ref46[1];
3969
4377
  return value === null || value === void 0 ? void 0 : value.error;
3970
4378
  })) : {};
3971
4379
  var fileLoadingProgress = filesToLoad.reduce(function (accu, f, i) {
@@ -3993,9 +4401,9 @@ export var loadFilesUpdater = function loadFilesUpdater(state, action) {
3993
4401
  * Add a drop to the deferred load that is already parsing.
3994
4402
  * The current file keeps its cache; the new files run after it.
3995
4403
  */
3996
- function appendDeferredFileLoad(state, _ref41) {
3997
- var filesToLoad = _ref41.filesToLoad,
3998
- companionFiles = _ref41.companionFiles;
4404
+ function appendDeferredFileLoad(state, _ref47) {
4405
+ var filesToLoad = _ref47.filesToLoad,
4406
+ companionFiles = _ref47.companionFiles;
3999
4407
  var loading = state.fileLoading;
4000
4408
  if (!loading || !filesToLoad.length && !companionFiles.length) {
4001
4409
  return state;
@@ -4207,7 +4615,9 @@ export function makeLoadFileTask(file, fileCache) {
4207
4615
  fileName: displayName,
4208
4616
  onFinish: function onFinish(result) {
4209
4617
  return processFileContent({
4210
- content: result,
4618
+ content: _objectSpread(_objectSpread({}, result), addDataOptions !== null && addDataOptions !== void 0 && addDataOptions.deferAddToMap && getApplicationConfig().useArrowProgressiveLoading ? {
4619
+ prepareProgressiveReplay: true
4620
+ } : {}),
4211
4621
  fileCache: fileCache
4212
4622
  });
4213
4623
  }
@@ -4227,9 +4637,9 @@ export function makeLoadFileTask(file, fileCache) {
4227
4637
  * @public
4228
4638
  */
4229
4639
  export function processFileContentUpdater(state, action) {
4230
- var _action$payload2 = action.payload,
4231
- content = _action$payload2.content,
4232
- fileCache = _action$payload2.fileCache;
4640
+ var _action$payload = action.payload,
4641
+ content = _action$payload.content,
4642
+ fileCache = _action$payload.fileCache;
4233
4643
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
4234
4644
  fileName: content.fileName,
4235
4645
  progress: {
@@ -4269,15 +4679,15 @@ export function parseProgress() {
4269
4679
  * @memberof visStateUpdaters
4270
4680
  * @public
4271
4681
  */
4272
- export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref42) {
4682
+ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref48) {
4273
4683
  var _accumulated$data;
4274
- var _ref42$payload = _ref42.payload,
4275
- gen = _ref42$payload.gen,
4276
- fileName = _ref42$payload.fileName,
4277
- progress = _ref42$payload.progress,
4278
- accumulated = _ref42$payload.accumulated,
4279
- onFinish = _ref42$payload.onFinish,
4280
- options = _ref42$payload.options;
4684
+ var _ref48$payload = _ref48.payload,
4685
+ gen = _ref48$payload.gen,
4686
+ fileName = _ref48$payload.fileName,
4687
+ progress = _ref48$payload.progress,
4688
+ accumulated = _ref48$payload.accumulated,
4689
+ onFinish = _ref48$payload.onFinish,
4690
+ options = _ref48$payload.options;
4281
4691
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
4282
4692
  fileName: fileName,
4283
4693
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
@@ -4295,9 +4705,9 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref42) {
4295
4705
  return options ? loadFilesSuccess(result, options) : loadFilesSuccess(result);
4296
4706
  }, function (err) {
4297
4707
  return loadFilesErr(fileName, err);
4298
- })] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref43) {
4299
- var value = _ref43.value,
4300
- done = _ref43.done;
4708
+ })] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref49) {
4709
+ var value = _ref49.value,
4710
+ done = _ref49.done;
4301
4711
  return done ? onFinish(accumulated) : nextFileBatch(_objectSpread({
4302
4712
  gen: gen,
4303
4713
  fileName: fileName,
@@ -4329,10 +4739,10 @@ export var clearStagedLoadedFilesUpdater = function clearStagedLoadedFilesUpdate
4329
4739
  stagedToAdd: null
4330
4740
  });
4331
4741
  };
4332
- export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref44) {
4333
- var error = _ref44.error,
4334
- fileName = _ref44.fileName,
4335
- errorLoadId = _ref44.loadId;
4742
+ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref50) {
4743
+ var error = _ref50.error,
4744
+ fileName = _ref50.fileName,
4745
+ errorLoadId = _ref50.loadId;
4336
4746
  if (!state.fileLoading || errorLoadId != null && state.fileLoading.loadId !== errorLoadId) {
4337
4747
  return state;
4338
4748
  }
@@ -4357,8 +4767,8 @@ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref44) {
4357
4767
  * @memberof visStateUpdaters
4358
4768
  * @public
4359
4769
  */
4360
- export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref45) {
4361
- var dataId = _ref45.dataId;
4770
+ export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref51) {
4771
+ var dataId = _ref51.dataId;
4362
4772
  // apply cpuFilter
4363
4773
  var dataIds = toArray(dataId);
4364
4774
  return dataIds.reduce(function (accu, id) {
@@ -4372,8 +4782,12 @@ export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref45)
4372
4782
  * @public
4373
4783
  */
4374
4784
  export var setMapInfoUpdater = function setMapInfoUpdater(state, action) {
4785
+ var next = _objectSpread(_objectSpread({}, state.mapInfo), action.info);
4375
4786
  return _objectSpread(_objectSpread({}, state), {}, {
4376
- mapInfo: _objectSpread(_objectSpread({}, state.mapInfo), action.info)
4787
+ mapInfo: {
4788
+ title: optionalMapText(next.title),
4789
+ description: optionalMapText(next.description)
4790
+ }
4377
4791
  });
4378
4792
  };
4379
4793
  /**
@@ -4417,9 +4831,9 @@ export function initialFileLoadingProgress(file, index) {
4417
4831
  error: null
4418
4832
  });
4419
4833
  }
4420
- export function updateFileLoadingProgressUpdater(state, _ref47) {
4421
- var fileName = _ref47.fileName,
4422
- progress = _ref47.progress;
4834
+ export function updateFileLoadingProgressUpdater(state, _ref53) {
4835
+ var fileName = _ref53.fileName,
4836
+ progress = _ref53.progress;
4423
4837
  // @ts-expect-error
4424
4838
  return pick_('fileLoadingProgress')(pick_(fileName)(merge_(progress)))(state);
4425
4839
  }
@@ -4511,8 +4925,8 @@ export function updateAnimationDomain(state) {
4511
4925
  * Update the status of the editor
4512
4926
  * @memberof visStateUpdaters
4513
4927
  */
4514
- export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref48) {
4515
- var mode = _ref48.mode;
4928
+ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref54) {
4929
+ var mode = _ref54.mode;
4516
4930
  var sketchesEnabled = getApplicationConfig().enableDrawOnMapSketches;
4517
4931
  if (!sketchesEnabled && (mode === EDITOR_MODES.DRAW_POINT || mode === EDITOR_MODES.DRAW_LINESTRING)) {
4518
4932
  return state;
@@ -4530,10 +4944,10 @@ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref48) {
4530
4944
  * Update editor features
4531
4945
  * @memberof visStateUpdaters
4532
4946
  */
4533
- export function setFeaturesUpdater(state, _ref49) {
4947
+ export function setFeaturesUpdater(state, _ref55) {
4534
4948
  var _lastFeature$properti, _lastFeature$properti2;
4535
- var _ref49$features = _ref49.features,
4536
- features = _ref49$features === void 0 ? [] : _ref49$features;
4949
+ var _ref55$features = _ref55.features,
4950
+ features = _ref55$features === void 0 ? [] : _ref55$features;
4537
4951
  var lastFeature = features.length && features[features.length - 1];
4538
4952
  var newState = _objectSpread(_objectSpread({}, state), {}, {
4539
4953
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -4606,10 +5020,10 @@ function findEditorFeature(state, feature) {
4606
5020
  * Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
4607
5021
  * @memberof visStateUpdaters
4608
5022
  */
4609
- export function setEditorFeaturePropertiesUpdater(state, _ref50) {
5023
+ export function setEditorFeaturePropertiesUpdater(state, _ref56) {
4610
5024
  var _state$editor$selecte2;
4611
- var feature = _ref50.feature,
4612
- properties = _ref50.properties;
5025
+ var feature = _ref56.feature,
5026
+ properties = _ref56.properties;
4613
5027
  if (!getApplicationConfig().enableDrawOnMapSketches) {
4614
5028
  return state;
4615
5029
  }
@@ -4648,9 +5062,9 @@ export function setEditorFeaturePropertiesUpdater(state, _ref50) {
4648
5062
  * Set the current selected feature
4649
5063
  * @memberof uiStateUpdaters
4650
5064
  */
4651
- export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref51) {
4652
- var feature = _ref51.feature,
4653
- selectionContext = _ref51.selectionContext;
5065
+ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref57) {
5066
+ var feature = _ref57.feature,
5067
+ selectionContext = _ref57.selectionContext;
4654
5068
  // add bbox for polygon filter to speed up filtering
4655
5069
  var selectedFeature = feature;
4656
5070
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -4672,8 +5086,8 @@ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
4672
5086
  * Delete existing feature from filters
4673
5087
  * @memberof visStateUpdaters
4674
5088
  */
4675
- export function deleteFeatureUpdater(state, _ref52) {
4676
- var feature = _ref52.feature;
5089
+ export function deleteFeatureUpdater(state, _ref58) {
5090
+ var feature = _ref58.feature;
4677
5091
  if (!feature) {
4678
5092
  return state;
4679
5093
  }
@@ -4738,8 +5152,8 @@ export function setPolygonFilterLayerUpdater(state, payload) {
4738
5152
  });
4739
5153
  }
4740
5154
  var filter = state.filters[filterIdx];
4741
- var _filter$layerId = filter.layerId,
4742
- layerId = _filter$layerId === void 0 ? [] : _filter$layerId;
5155
+ var _filter$layerId2 = filter.layerId,
5156
+ layerId = _filter$layerId2 === void 0 ? [] : _filter$layerId2;
4743
5157
  var isLayerIncluded = layerId.includes(layer.id);
4744
5158
  newLayerId = isLayerIncluded ?
4745
5159
  // if layer is included, remove it
@@ -4818,10 +5232,10 @@ export function setPolygonFilterAllLayersUpdater(state, payload) {
4818
5232
  * @memberof visStateUpdaters
4819
5233
  * @public
4820
5234
  */
4821
- export function sortTableColumnUpdater(state, _ref53) {
4822
- var dataId = _ref53.dataId,
4823
- column = _ref53.column,
4824
- mode = _ref53.mode;
5235
+ export function sortTableColumnUpdater(state, _ref59) {
5236
+ var dataId = _ref59.dataId,
5237
+ column = _ref59.column,
5238
+ mode = _ref59.mode;
4825
5239
  var dataset = state.datasets[dataId];
4826
5240
  if (!dataset) {
4827
5241
  return state;
@@ -4842,9 +5256,9 @@ export function sortTableColumnUpdater(state, _ref53) {
4842
5256
  * @memberof visStateUpdaters
4843
5257
  * @public
4844
5258
  */
4845
- export function pinTableColumnUpdater(state, _ref54) {
4846
- var dataId = _ref54.dataId,
4847
- column = _ref54.column;
5259
+ export function pinTableColumnUpdater(state, _ref60) {
5260
+ var dataId = _ref60.dataId,
5261
+ column = _ref60.column;
4848
5262
  var dataset = state.datasets[dataId];
4849
5263
  if (!dataset) {
4850
5264
  return state;
@@ -4853,14 +5267,41 @@ export function pinTableColumnUpdater(state, _ref54) {
4853
5267
  return set(['datasets', dataId], newDataset, state);
4854
5268
  }
4855
5269
 
5270
+ /**
5271
+ * @memberof visStateUpdaters
5272
+ * @public
5273
+ */
5274
+ export function toggleTableColumnHiddenUpdater(state, _ref61) {
5275
+ var dataId = _ref61.dataId,
5276
+ column = _ref61.column;
5277
+ var dataset = state.datasets[dataId];
5278
+ if (!dataset) {
5279
+ return state;
5280
+ }
5281
+ return set(['datasets', dataId], toggleHiddenTableColumn(dataset, column), state);
5282
+ }
5283
+
5284
+ /**
5285
+ * @memberof visStateUpdaters
5286
+ * @public
5287
+ */
5288
+ export function showAllTableColumnsUpdater(state, _ref62) {
5289
+ var dataId = _ref62.dataId;
5290
+ var dataset = state.datasets[dataId];
5291
+ if (!dataset) {
5292
+ return state;
5293
+ }
5294
+ return set(['datasets', dataId], showAllTableColumns(dataset), state);
5295
+ }
5296
+
4856
5297
  /**
4857
5298
  * Copy column content as strings
4858
5299
  * @memberof visStateUpdaters
4859
5300
  * @public
4860
5301
  */
4861
- export function copyTableColumnUpdater(state, _ref55) {
4862
- var dataId = _ref55.dataId,
4863
- column = _ref55.column;
5302
+ export function copyTableColumnUpdater(state, _ref63) {
5303
+ var dataId = _ref63.dataId,
5304
+ column = _ref63.column;
4864
5305
  var dataset = state.datasets[dataId];
4865
5306
  if (!dataset) {
4866
5307
  return state;
@@ -4884,9 +5325,9 @@ export function copyTableColumnUpdater(state, _ref55) {
4884
5325
  * @memberof visStateUpdaters
4885
5326
  * @public
4886
5327
  */
4887
- export function setColumnDisplayFormatUpdater(state, _ref56) {
4888
- var dataId = _ref56.dataId,
4889
- formats = _ref56.formats;
5328
+ export function setColumnDisplayFormatUpdater(state, _ref64) {
5329
+ var dataId = _ref64.dataId,
5330
+ formats = _ref64.formats;
4890
5331
  var dataset = state.datasets[dataId];
4891
5332
  if (!dataset) {
4892
5333
  return state;
@@ -4908,18 +5349,59 @@ export function setColumnDisplayFormatUpdater(state, _ref56) {
4908
5349
  fields: newFields
4909
5350
  });
4910
5351
  var newState = pick_('datasets')(merge_(_defineProperty({}, dataId, newDataset)))(state);
5352
+ var textLabelLayerIndexes = [];
4911
5353
 
4912
- // update colorField displayFormat
5354
+ // Layer configs retain their own field objects, so keep those copies in sync
5355
+ // with the display format stored on the dataset field.
4913
5356
  newState = _objectSpread(_objectSpread({}, newState), {}, {
4914
- layers: newState.layers.map(function (layer) {
5357
+ layers: newState.layers.map(function (layer, layerIndex) {
4915
5358
  var _layer$config2;
4916
- return (_layer$config2 = layer.config) !== null && _layer$config2 !== void 0 && (_layer$config2 = _layer$config2.colorField) !== null && _layer$config2 !== void 0 && _layer$config2.name && layer.config.colorField.name in formats ? layer.updateLayerConfig({
4917
- colorField: _objectSpread(_objectSpread({}, layer.config.colorField), {}, {
4918
- displayFormat: formats[layer.config.colorField.name]
4919
- })
4920
- }) : layer;
5359
+ // Column names are not unique across datasets. Only update layers that
5360
+ // belong to the dataset targeted by this action.
5361
+ if (layer.config.dataId !== dataId) {
5362
+ return layer;
5363
+ }
5364
+ var colorField = (_layer$config2 = layer.config) === null || _layer$config2 === void 0 ? void 0 : _layer$config2.colorField;
5365
+ var updatedColorField = colorField !== null && colorField !== void 0 && colorField.name && colorField.name in formats ? _objectSpread(_objectSpread({}, colorField), {}, {
5366
+ displayFormat: formats[colorField.name]
5367
+ }) : null;
5368
+ // Text labels also keep field copies instead of reading dataset.fields at render time.
5369
+ var textLabel = layer.config.textLabel.map(function (label) {
5370
+ var field = label.field;
5371
+ return field !== null && field !== void 0 && field.name && field.name in formats ? _objectSpread(_objectSpread({}, label), {}, {
5372
+ field: _objectSpread(_objectSpread({}, field), {}, {
5373
+ displayFormat: formats[field.name]
5374
+ })
5375
+ }) : label;
5376
+ });
5377
+ var updateTextLabel = textLabel.some(function (label, index) {
5378
+ return label !== layer.config.textLabel[index];
5379
+ });
5380
+ if (updateTextLabel) {
5381
+ textLabelLayerIndexes.push(layerIndex);
5382
+ }
5383
+ return updatedColorField || updateTextLabel ? layer.updateLayerConfig(_objectSpread(_objectSpread({}, updatedColorField ? {
5384
+ colorField: updatedColorField
5385
+ } : {}), updateTextLabel ? {
5386
+ textLabel: textLabel
5387
+ } : {})) : layer;
4921
5388
  })
4922
5389
  });
5390
+ if (textLabelLayerIndexes.length) {
5391
+ // Label accessors and character sets are cached in layerData. Rebuild them
5392
+ // immediately so the new format appears without removing and re-adding the label field.
5393
+ var layers = newState.layers.slice();
5394
+ var layerData = newState.layerData.slice();
5395
+ textLabelLayerIndexes.forEach(function (layerIndex) {
5396
+ var result = calculateLayerData(layers[layerIndex], newState, layerData[layerIndex]);
5397
+ layers[layerIndex] = result.layer;
5398
+ layerData[layerIndex] = result.layerData;
5399
+ });
5400
+ newState = _objectSpread(_objectSpread({}, newState), {}, {
5401
+ layers: layers,
5402
+ layerData: layerData
5403
+ });
5404
+ }
4923
5405
  return newState;
4924
5406
  }
4925
5407
  function getMappedValue(filterProps) {
@@ -4937,12 +5419,12 @@ function requestDatasetColumnStatistics(_x4) {
4937
5419
  return _requestDatasetColumnStatistics.apply(this, arguments);
4938
5420
  }
4939
5421
  function _requestDatasetColumnStatistics() {
4940
- _requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref57) {
5422
+ _requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref65) {
4941
5423
  var dataset, field, filterProps, mappedValue, values, result;
4942
5424
  return _regeneratorRuntime.wrap(function _callee4$(_context4) {
4943
5425
  while (1) switch (_context4.prev = _context4.next) {
4944
5426
  case 0:
4945
- dataset = _ref57.dataset, field = _ref57.field;
5427
+ dataset = _ref65.dataset, field = _ref65.field;
4946
5428
  _context4.next = 3;
4947
5429
  return yieldForPaint();
4948
5430
  case 3:
@@ -4975,9 +5457,9 @@ var LOAD_COLUMN_STATS_TASK = Task.fromPromise(requestDatasetColumnStatistics, 'L
4975
5457
  * @memberof visStateUpdaters
4976
5458
  * @public
4977
5459
  */
4978
- export function loadColumnStatsUpdater(state, _ref58) {
4979
- var dataId = _ref58.dataId,
4980
- fieldName = _ref58.fieldName;
5460
+ export function loadColumnStatsUpdater(state, _ref66) {
5461
+ var dataId = _ref66.dataId,
5462
+ fieldName = _ref66.fieldName;
4981
5463
  var fieldNamesToLoad = toArray(fieldName);
4982
5464
  var dataset = state.datasets[dataId];
4983
5465
  var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
@@ -4998,12 +5480,16 @@ export function loadColumnStatsUpdater(state, _ref58) {
4998
5480
  return LOAD_COLUMN_STATS_TASK({
4999
5481
  dataset: newDataset,
5000
5482
  field: f
5001
- }).bimap(function (_ref59) {
5002
- var result = _ref59.result,
5003
- filterProps = _ref59.filterProps;
5004
- return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps);
5483
+ }).bimap(function (_ref67) {
5484
+ var result = _ref67.result,
5485
+ filterProps = _ref67.filterProps;
5486
+ return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps, {
5487
+ fieldType: f.type
5488
+ });
5005
5489
  }, function (error) {
5006
- return loadColumnStatsError(newDataset.id, f.name, error);
5490
+ return loadColumnStatsError(newDataset.id, f.name, error, {
5491
+ fieldType: f.type
5492
+ });
5007
5493
  });
5008
5494
  });
5009
5495
  var nextState = pick_('datasets')(merge_(_defineProperty({}, dataId, newDataset)))(state);
@@ -5015,16 +5501,17 @@ export function loadColumnStatsUpdater(state, _ref58) {
5015
5501
  * @memberof visStateUpdaters
5016
5502
  * @public
5017
5503
  */
5018
- export function loadColumnStatsSuccessUpdater(state, _ref60) {
5019
- var result = _ref60.result,
5020
- filterProps = _ref60.filterProps,
5021
- dataId = _ref60.dataId,
5022
- fieldName = _ref60.fieldName;
5504
+ export function loadColumnStatsSuccessUpdater(state, _ref68) {
5505
+ var result = _ref68.result,
5506
+ filterProps = _ref68.filterProps,
5507
+ dataId = _ref68.dataId,
5508
+ fieldName = _ref68.fieldName,
5509
+ fieldType = _ref68.fieldType;
5023
5510
  var dataset = state.datasets[dataId];
5024
5511
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
5025
5512
  return f.name === fieldName;
5026
5513
  });
5027
- if (!dataset || !field) {
5514
+ if (!dataset || !field || fieldType !== undefined && field.type !== fieldType) {
5028
5515
  return state;
5029
5516
  }
5030
5517
  var newFilterProps = _objectSpread(_objectSpread({}, filterProps), {}, {
@@ -5047,18 +5534,19 @@ export function loadColumnStatsSuccessUpdater(state, _ref60) {
5047
5534
  * @memberof visStateUpdaters
5048
5535
  * @public
5049
5536
  */
5050
- export function loadColumnStatsErrorUpdater(state, _ref61) {
5051
- var error = _ref61.error,
5052
- dataId = _ref61.dataId,
5053
- fieldName = _ref61.fieldName;
5054
- Console.error(error);
5537
+ export function loadColumnStatsErrorUpdater(state, _ref69) {
5538
+ var error = _ref69.error,
5539
+ dataId = _ref69.dataId,
5540
+ fieldName = _ref69.fieldName,
5541
+ fieldType = _ref69.fieldType;
5055
5542
  var dataset = state.datasets[dataId];
5056
5543
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
5057
5544
  return f.name === fieldName;
5058
5545
  });
5059
- if (!dataset || !field) {
5546
+ if (!dataset || !field || fieldType !== undefined && field.type !== fieldType) {
5060
5547
  return state;
5061
5548
  }
5549
+ Console.error(error);
5062
5550
  var newFields = dataset.fields.map(function (f) {
5063
5551
  return f.name === fieldName ? _objectSpread(_objectSpread({}, f), {}, {
5064
5552
  isLoadingStats: false
@@ -5137,8 +5625,8 @@ _action) {
5137
5625
  * Draw on Map polygon into a new dataset. Raster tiles download a PNG clip and a
5138
5626
  * GeoJSON sidecar (bbox rectangle + stats) instead of creating a dataset.
5139
5627
  */
5140
- export function extractDataFromFeatureUpdater(state, _ref62) {
5141
- var layerId = _ref62.layerId;
5628
+ export function extractDataFromFeatureUpdater(state, _ref70) {
5629
+ var layerId = _ref70.layerId;
5142
5630
  var feature = state.editor.selectedFeature;
5143
5631
  var layer = state.layers.find(function (l) {
5144
5632
  return l.id === layerId;
@@ -5240,9 +5728,9 @@ export function extractDataFromFeatureUpdater(state, _ref62) {
5240
5728
  }
5241
5729
  });
5242
5730
  }
5243
- export function setFilterAnimationTimeConfigUpdater(state, _ref63) {
5244
- var idx = _ref63.idx,
5245
- config = _ref63.config;
5731
+ export function setFilterAnimationTimeConfigUpdater(state, _ref71) {
5732
+ var idx = _ref71.idx,
5733
+ config = _ref71.config;
5246
5734
  var oldFilter = state.filters[idx];
5247
5735
  if (!oldFilter) {
5248
5736
  Console.error("filters.".concat(idx, " is undefined"));
@@ -5272,8 +5760,8 @@ function checkTimeConfigArgs(config) {
5272
5760
  /**
5273
5761
  * Update editor
5274
5762
  */
5275
- export function setLayerAnimationTimeConfigUpdater(state, _ref64) {
5276
- var config = _ref64.config;
5763
+ export function setLayerAnimationTimeConfigUpdater(state, _ref72) {
5764
+ var config = _ref72.config;
5277
5765
  if (!config) {
5278
5766
  return state;
5279
5767
  }
@@ -5471,8 +5959,8 @@ export function setTimeFilterTimelineModeUpdater(state, action) {
5471
5959
  * @returns nextState
5472
5960
  * @public
5473
5961
  */
5474
- export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref65) {
5475
- var change = _ref65.payload.change;
5962
+ export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref73) {
5963
+ var change = _ref73.payload.change;
5476
5964
  var loadingIndicatorValue = state.loadingIndicatorValue;
5477
5965
  if (!loadingIndicatorValue) {
5478
5966
  loadingIndicatorValue = 0;
@@ -5491,11 +5979,11 @@ export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(stat
5491
5979
  * @memberof visStateUpdaters
5492
5980
  * @public
5493
5981
  */
5494
- export function setLoadingProgressUpdater(state, _ref66) {
5982
+ export function setLoadingProgressUpdater(state, _ref74) {
5495
5983
  var _state$loadingProgres, _state$loadingProcess;
5496
- var id = _ref66.id,
5497
- percent = _ref66.percent,
5498
- phase = _ref66.phase;
5984
+ var id = _ref74.id,
5985
+ percent = _ref74.percent,
5986
+ phase = _ref74.phase;
5499
5987
  if ((state.loadingIndicatorValue || 0) <= 0) {
5500
5988
  return state;
5501
5989
  }
@@ -5561,8 +6049,9 @@ function adjustTimeFilterInterval(state, filter) {
5561
6049
  interval: interval,
5562
6050
  timeFormat: timeFormat
5563
6051
  });
5564
- var newFilter = updateTimeFilterPlotType(filter, updatedPlotType, state.datasets);
5565
- return adjustValueToAnimationWindow(state, newFilter);
6052
+ var plotBaseIndexByDataId = getPlotBaseIndexByDataId(state.datasets, filter, state.layers);
6053
+ var newFilter = updateTimeFilterPlotType(filter, updatedPlotType, state.datasets, undefined, plotBaseIndexByDataId);
6054
+ return adjustValueToAnimationWindow(state, newFilter, plotBaseIndexByDataId);
5566
6055
  }
5567
6056
 
5568
6057
  // Find dataId from a saved visState property:
@@ -5621,10 +6110,10 @@ function findChildDatasetIds(value) {
5621
6110
  }
5622
6111
 
5623
6112
  // moved unmerged layers, filters, interactions
5624
- function moveValueToBeMerged(state, propValues, _ref68) {
5625
- var prop = _ref68.prop,
5626
- toMergeProp = _ref68.toMergeProp,
5627
- saveUnmerged = _ref68.saveUnmerged;
6113
+ function moveValueToBeMerged(state, propValues, _ref76) {
6114
+ var prop = _ref76.prop,
6115
+ toMergeProp = _ref76.toMergeProp,
6116
+ saveUnmerged = _ref76.saveUnmerged;
5628
6117
  // remove prop value from state
5629
6118
  // TODO: should we add remove updater to merger as well?
5630
6119
  if (!propValues) {
@@ -5726,17 +6215,17 @@ export function preservedOrderWithParked() {
5726
6215
  });
5727
6216
  return [].concat(_toConsumableArray(ordered), _toConsumableArray(rest));
5728
6217
  }
5729
- export function replaceDatasetDepsInState(state, _ref69) {
5730
- var dataId = _ref69.dataId,
5731
- dataIdToUse = _ref69.dataIdToUse;
6218
+ export function replaceDatasetDepsInState(state, _ref77) {
6219
+ var dataId = _ref77.dataId,
6220
+ dataIdToUse = _ref77.dataIdToUse;
5732
6221
  var serializedState = serializeVisState(state, state.schema);
5733
- var nextState = state.mergers.reduce(function (accuState, _ref70) {
5734
- var prop = _ref70.prop,
5735
- toMergeProp = _ref70.toMergeProp,
5736
- replaceParentDatasetIds = _ref70.replaceParentDatasetIds,
5737
- getChildDatasetIds = _ref70.getChildDatasetIds,
5738
- saveUnmerged = _ref70.saveUnmerged,
5739
- preserveOrder = _ref70.preserveOrder;
6222
+ var nextState = state.mergers.reduce(function (accuState, _ref78) {
6223
+ var prop = _ref78.prop,
6224
+ toMergeProp = _ref78.toMergeProp,
6225
+ replaceParentDatasetIds = _ref78.replaceParentDatasetIds,
6226
+ getChildDatasetIds = _ref78.getChildDatasetIds,
6227
+ saveUnmerged = _ref78.saveUnmerged,
6228
+ preserveOrder = _ref78.preserveOrder;
5740
6229
  // get dataset ids that are depends on this dataset
5741
6230
  var props = toArray(prop);
5742
6231
  var toMergeProps = toArray(toMergeProp);
@@ -5776,11 +6265,11 @@ export function replaceDatasetDepsInState(state, _ref69) {
5776
6265
  }, state);
5777
6266
  return nextState;
5778
6267
  }
5779
- function replacePropValueInState(state, replacedItem, _ref71) {
5780
- var prop = _ref71.prop,
5781
- toMergeProp = _ref71.toMergeProp,
5782
- getChildDatasetIds = _ref71.getChildDatasetIds,
5783
- saveUnmerged = _ref71.saveUnmerged;
6268
+ function replacePropValueInState(state, replacedItem, _ref79) {
6269
+ var prop = _ref79.prop,
6270
+ toMergeProp = _ref79.toMergeProp,
6271
+ getChildDatasetIds = _ref79.getChildDatasetIds,
6272
+ saveUnmerged = _ref79.saveUnmerged;
5784
6273
  // prop is depends on the dataset to be replaced
5785
6274
  // remove prop from state, and move it to toBeMerged
5786
6275
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -5844,5 +6333,11 @@ export function runSpatialJoinUpdater(state, action) {
5844
6333
  proto = _executeSpatialJoin.proto;
5845
6334
  return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
5846
6335
  }
5847
- export { addGroupByUpdater, addJoinUpdater, addSpatialJoinUpdater, removeDatasetOpUpdater, setGroupByConfigUpdater, setJoinConfigUpdater, setSpatialJoinConfigUpdater };
5848
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiRVhQQU5EX1pJUF9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MiLCJuZXh0RmlsZUJhdGNoIiwic2V0RmlsdGVyIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiZml0Qm91bmRzIiwiZml0TWFwQm91bmRzIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJhcHBseUZpbHRlckNvbmZpZyIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzIiwic2V0TG9hZGluZ1Byb2dyZXNzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwic25hcFRvTWFya3MiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJhcnJheUluc2VydCIsImNvbWJpbmVTcGxpdE1hcHNCeUluZGV4IiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImVycm9yTm90aWZpY2F0aW9uIiwic3VjY2Vzc05vdGlmaWNhdGlvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSIsImlzUmFzdGVyVGlsZUV4dHJhY3RMYXllciIsImlzVmVjdG9yVGlsZUV4dHJhY3RMYXllciIsIm1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzIiwidG9Ta2V0Y2hGZWF0dXJlIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwiZ2V0RGVmYXVsdEZpbHRlciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwiaXNJblJhbmdlIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiaXNSZ2JDb2xvciIsInBhcnNlRmllbGRWYWx1ZSIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsInNldCIsInVwZGF0ZUZpbHRlclBsb3QiLCJyZW1vdmVGaWx0ZXJQbG90IiwiaXNMYXllckFuaW1hdGFibGUiLCJpc1NpZGVGaWx0ZXIiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwiZ2VuZXJhdGVIYXNoSWQiLCJ0b0FycmF5IiwiYXJyYXlNb3ZlIiwiQU5JTUFUSU9OX1dJTkRPVyIsIkJBU0VfU1BFRUQiLCJDT01QQVJFX1RZUEVTIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiRURJVE9SX01PREVTIiwiRklMVEVSX1RZUEVTIiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJMQVlFUl9UWVBFUyIsIkZQUyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJQTE9UX1RZUEVTIiwiU09SVF9PUkRFUiIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJDSEFOTkVMX1NDQUxFUyIsIlNDQUxFX1RZUEVTIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsIkFubm90YXRpb25LaW5kIiwiRGF0YXNldFR5cGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJMQVlFUl9JRF9MRU5HVEgiLCJMYXllciIsIkxheWVyQ2xhc3NlcyIsImFwcGx5XyIsImNvbXBvc2VfIiwiZmlsdGVyT3V0QnlJZCIsImlmXyIsIm1lcmdlXyIsInBheWxvYWRfIiwicGlja18iLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInN3YXBfIiwiaXNWYWxpZE1lcmdlciIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJwYXJzZUxheWVyQ29uZmlnIiwic2VyaWFsaXplRmlsdGVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIktlcGxlckdMU2NoZW1hIiwiZ2V0RmlsZXNUb1BhcnNlIiwiaXNaaXBGaWxlTmFtZSIsImxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCIsInByb2Nlc3NHZW9qc29uIiwiYXNzaWduR3B1Q2hhbm5lbCIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsInBpblRhYmxlQ29sdW1ucyIsInNldEZpbHRlckdwdU1vZGUiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZmluZEZpZWxkc1RvU2hvdyIsInJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwiZ2V0TmV3TGF5ZXJHcm91cCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsImdldEZsYXRMYXllck9yZGVyIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwiYWRkR3JvdXBCeVVwZGF0ZXIiLCJhZGRKb2luVXBkYXRlciIsImFkZFNwYXRpYWxKb2luVXBkYXRlciIsImV4ZWN1dGVHcm91cEJ5IiwiZXhlY3V0ZUpvaW4iLCJleGVjdXRlU3BhdGlhbEpvaW4iLCJyZW1vdmVEYXRhc2V0T3BVcGRhdGVyIiwicmVtb3ZlT3BzRm9yRGF0YXNldHMiLCJzZXRHcm91cEJ5Q29uZmlnVXBkYXRlciIsInNldEpvaW5Db25maWdVcGRhdGVyIiwic2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyIiwiZml4RWZmZWN0T3JkZXIiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJtZXJnZVRpbWVEb21haW5zIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsIm1lcmdlUGxvdEdyb3VwQnkiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwibWVyZ2VGaWx0ZXJEb21haW4iLCJpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImNyZWF0ZUVmZmVjdCIsImZpbmRNYXBCb3VuZHMiLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkFCU09MVVRFIiwibGVnZW5kIiwiaGlkZUludmlzaWJsZUxheWVycyIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJhbm5vdGF0aW9uIiwiem9vbU9wYWNpdHkiLCJjb250cm9sbGVycyIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVTdGVwcyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJmaWx0ZXJzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImRhdGFzZXRzIiwiZWRpdGluZ0RhdGFzZXQiLCJ1bmRlZmluZWQiLCJncm91cEJ5cyIsImpvaW5zIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsInNwbGl0TWFwcyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJpc01lcmdpbmdEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFuaW1hdGlvbkNvbmZpZyIsImVkaXRvciIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YWdlZFRvQWRkIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ1Byb2Nlc3NpbmciLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwic2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIl9vYmplY3RTcHJlYWQiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXJJZCIsInNlcmlhbGl6ZWRPbGRMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlcnIiLCJlIiwiZiIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlciIsImVuYWJsZSIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlciIsImxheWVySWQiLCJzcGxpdE1hcElkIiwibWFwSW5kZXgiLCJzbSIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsImFyZ3VtZW50cyIsIm5ld1RleHRMYWJlbCIsInNsaWNlIiwiY3VycmVudEZpZWxkcyIsInRsIiwiZmllbGQiLCJuYW1lIiwiZmlsdGVyIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFmIiwiX3RleHRMYWJlbCRmaW5kJGNvbGxpIiwiX3RleHRMYWJlbCRmaW5kIiwiY29sbGlzaW9uRW5hYmxlZCIsIkJvb2xlYW4iLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiX3RleHRMYWJlbCQiLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwibWF5YmVGaXRNYW51YWxMYXllckJvdW5kcyIsImVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXIiLCJib3VuZHMiLCJuZXdUeXBlIiwib2xkSWQiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJfdG9Qcm9wZXJ0eUtleSIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YiLCJmb3VuZCIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwiY2hhbm5lbFNjYWxlVHlwZSIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiY2hhbm5lbEtleSIsImplbmtzIiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWY0IiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmNSIsImFuaW1hdGlvbldpbmRvdyIsInByZXZpb3VzV2luZG93IiwibmV4dEZpbHRlciIsInRpbWVSYW5nZSIsImludGVydmFsIiwiYWRqdXN0ZWQiLCJldmVyeSIsInYiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwibmV3RmlsdGVyIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwiZGF0YXNldElkc1RvRmlsdGVyIiwiX2xvb3AiLCJyZXMiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsImVubGFyZ2VkIiwic2lkZSIsImZpbHRlcmVkRGF0YXNldHMiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsInN0ZXAiLCJkYXRhc2V0SWRzIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGVVcGRhdGUiLCJwbG90VHlwZSIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUiLCJncm91cEJ5IiwiY2hhcnRUeXBlIiwieUF4aXMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY3Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJfc3RhdGUkZmlsdGVycyRpZHgiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImxheWVyVG9SZW1vdmUiLCJyZW1vdmVDaGFydHNBbmRGaWx0ZXJzIiwiY2hhcnQiLCJpc0xheWVyQ2hhcnRDb25maWciLCJyZW9yZGVyTGF5ZXJVcGRhdGVyIiwiX3JlZjAiLCJvcmRlciIsImFkZExheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImxheWVySWRzVG9SZW1vdmUiLCJ1cGRhdGVMYXllckdyb3VwVXBkYXRlciIsIm9wdGlvbnMiLCJuZXdMYXllckdyb3VwIiwibGF5ZXJJZHMiLCJhY2MiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJwYXJlbnRHcm91cCIsImxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkIiwiaWR4SW5Hcm91cCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsImVmZmVjdCIsIm5ld0VmZmVjdCIsInNldFByb3BzIiwicmVtb3ZlRWZmZWN0VXBkYXRlciIsIl9yZWYxMCIsImVmZmVjdFRvUmVtb3ZlIiwiZWZmZWN0SWQiLCJyZW9yZGVyRWZmZWN0VXBkYXRlciIsIl9yZWYxMSIsInVwZGF0ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTIiLCJpZHgyIiwiZWZmZWN0T3JkZXJJZCIsIm5leHRQYXJhbXMiLCJwYXJhbWV0ZXJzIiwidGltZXN0YW1wIiwibmV3RWZmZWN0cyIsIm1lcmdlQ2hhcnRDb25maWciLCJkaXNwbGF5IiwiY2hhcnREaXNwbGF5IiwiYXhpc0ZpZWxkSWZQcmVzZW50IiwiYXhpcyIsImZpZWxkTmFtZXMiLCJfYXhpcyRmaWVsZCIsImhhcyIsImRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMiLCJTZXQiLCJ4QXhpcyIsInNob3VsZFJlbW92ZSIsInJlbW92ZWQiLCJyZW1vdmVkSWRzIiwiZmlsdGVySWRzIiwiZmxhdE1hcCIsIl9jaGFydCRjcm9zc0ZpbHRlciIsImNyb3NzRmlsdGVyIiwicmVkdWNlUmlnaHQiLCJhZGRDaGFydFVwZGF0ZXIiLCJfcmVmMTMiLCJfY2hhcnQkZGlzcGxheSRpc0NvbmYiLCJfY2hhcnQkZGlzcGxheSIsImV4aXN0aW5nIiwiaXNKc29uRWRpdG9yQWN0aXZlIiwidXBkYXRlQ2hhcnRVcGRhdGVyIiwiX3JlZjE0IiwiX25leHQkY3Jvc3NGaWx0ZXIyIiwiX3ByZXYkY3Jvc3NGaWx0ZXIiLCJfcHJldiRjcm9zc0ZpbHRlcjIiLCJfbmV4dCRjcm9zc0ZpbHRlcjMiLCJkYXRhSWRDaGFuZ2VkIiwibGF5ZXJJZENoYW5nZWQiLCJfbmV4dCRjcm9zc0ZpbHRlciIsIm93bmVkRmlsdGVySWRzIiwicmVtb3ZlQ2hhcnRVcGRhdGVyIiwiX3JlZjE1IiwibWFrZU5ld0Fubm90YXRpb24iLCJfY29uZmlnJGtpbmQiLCJfcmVmMTYiLCJfY29uZmlnJHRleHRTaWRlIiwiX3JlZjE3IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxQIiwiX2NvbmZpZyRpZCIsIl9jb25maWckaXNWaXNpYmxlIiwiX2NvbmZpZyRhdXRvU2l6ZSIsIl9jb25maWckYXV0b1NpemVZIiwiX2NvbmZpZyRhbmNob3JQb2ludCIsIl9jb25maWckbGFiZWwiLCJfY29uZmlnJGxpbmVDb2xvciIsIl9jb25maWckbGluZVdpZHRoIiwiX2NvbmZpZyR0ZXh0V2lkdGgiLCJfY29uZmlnJHRleHRIZWlnaHQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbEEiLCJfYXJtTGVuZ3RoIiwiX2FybUxlbmd0aDIiLCJfYXJtTGVuZ3RoMyIsIl9yYWRpdXNJbk1ldGVycyIsImtpbmQiLCJwcm92aWRlZEFuZ2xlIiwiYW5nbGUiLCJkZXJpdmVkRnJvbUFuZ2xlIiwidGV4dFNpZGUiLCJURVhUIiwidGV4dFZlcnRpY2FsUG9zaXRpb24iLCJ2ZXJ0aWNhbCIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwibGluZVdpZHRoIiwidGV4dFdpZHRoIiwidGV4dEhlaWdodCIsInRleHRWZXJ0aWNhbEFsaWduIiwiZGVmYXVsdEFuZ2xlIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJBUlJPVyIsIkNJUkNMRSIsInJhZGl1c0luTWV0ZXJzIiwiYWRkQW5ub3RhdGlvblVwZGF0ZXIiLCJuZXdBbm5vdGF0aW9uIiwicmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTgiLCJhIiwidXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTkiLCJuZXh0QW5ub3RhdGlvbiIsIm5ld0Fubm90YXRpb25zIiwiZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjAiLCJzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIxIiwiaXNFZGl0aW5nVGV4dCIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsInJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyIiwiX3N0YXRlJGRhdGFzZXRzIiwiX2RhdGFzZXQiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJwdXNoIiwicmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyIsIl9yZWYyMiIsIl9pbnRlcmFjdGlvbkNvbmZpZyIsIl9jb25maWckZmllbGRzVG9TaG93IiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyIiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJ1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciIsInVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIiLCJuZXdDb2xvciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiX3JlZjIzIiwiX3JlZjIzJHBheWxvYWQiLCJwYXlsb2FkIiwiX3JlZjIzJHBheWxvYWQkY29uZmlnIiwiX3JlZjIzJHBheWxvYWQkb3B0aW9uIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJtZXJnZSIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJfcmVmMjQiLCJldnQiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsIl9yZWYyNSIsImhhc1RhYnVsYXJEYXRhc2V0RGF0YSIsImRhdGEiLCJfZGF0YSRyb3dzIiwiX2RhdGEkY29scyIsInJvd3MiLCJjb2xzIiwiYXJyb3dUYWJsZSIsIm5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUiLCJfZGF0YXNldCRpbmZvIiwiX2RhdGFzZXQkbWV0YWRhdGEiLCJFWFRFUk5BTExZX0hPU1RFRCIsIm1ldGFkYXRhIiwic291cmNlIiwiaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfeCIsIl9oeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsImFwcGx5IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUyIiwiX3JlZjI2IiwiX2RhdGFzZXQkbWV0YWRhdGE3IiwiX2RhdGFzZXQkbWV0YWRhdGE4Iiwib25Qcm9ncmVzcyIsImxvYWRlZCIsIl9kYXRhc2V0JG1ldGFkYXRhOSIsIndyYXAiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJhcmciLCJhYnJ1cHQiLCJmb3JtYXQiLCJieXBhc3NDYWNoZSIsInNlbnQiLCJFcnJvciIsImV0YWciLCJsYXN0TW9kaWZpZWQiLCJsYXN0RmV0Y2hlZEF0IiwiRGF0ZSIsIm5vdyIsInJlZnJlc2hTdGF0dXMiLCJzdG9wIiwiSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsIkZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyIsImZyb21Qcm9taXNlIiwiX3JlZjI3IiwiX2NhbGxlZSIsIm1lc3NhZ2UiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiX3gyIiwiZ2V0RGF0YXNldFByb2dyZXNzSWQiLCJfZGF0YXNldCRpbmZvMiIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsImNyZWF0ZU5ld0RhdGFFbnRyeVRhc2siLCJwcm9ncmVzc0lkIiwicHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudCIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJwaGFzZSIsImNoYWluIiwiaHlkcmF0ZWQiLCJ0YXNrIiwiY2xlYXJMb2FkaW5nUHJvZ3Jlc3MiLCJpZHMiLCJjdXJyZW50IiwicHJvY2Vzc2luZyIsIm5leHRQcm9jZXNzaW5nIiwicGF0Y2hEYXRhc2V0TWV0YWRhdGEiLCJwYXRjaCIsInJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfeDMiLCJfcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl9jYWxsZWUzIiwiX3JlZjI4IiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJyZWZyZXNoRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjkiLCJfZGF0YXNldCRtZXRhZGF0YTMiLCJfZGF0YXNldCRtZXRhZGF0YTQiLCJuZXh0RGF0YXNldCIsInJlZnJlc2hFcnJvciIsInJlZnJlc2hQcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50MiIsImJpbWFwIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmMzAiLCJfZGF0YXNldCRtZXRhZGF0YTUiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJuZXh0UGVyY2VudCIsIm1heCIsIm1pbiIsImZpZWxkTmFtZXNFcXVhbCIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInVwZGF0ZWREYXRhc2V0cyIsIm5leHRGaWx0ZXJzIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYzMSIsIl9yZXN1bHQkZGF0YSIsIm1ldGFkYXRhUGF0Y2giLCJzY2hlbWFVbmNoYW5nZWQiLCJub3RNb2RpZmllZCIsInVwZGF0ZSIsInJlZnJlc2hlZCIsInJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhIiwiaXNEYXRhc2V0Um93TGlzdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjMyIiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzMiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzQiLCJTdHJpbmciLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsInJlYWR5VGFza3MiLCJyZW1vdGVUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiaHlkcmF0ZVByb2dyZXNzIiwiX3JlZjM1IiwiZGF0YXNldEluZGV4IiwiX3JlZjM1JGluZm8iLCJyZXN0IiwiX2V4Y2x1ZGVkMiIsInByb3RvIiwicmVtb3RlIiwicHJvZ3Jlc3NJZHMiLCJiYXRjaGVzIiwidGFza3MiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsImNoYW5nZSIsImJhdGNoIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJhZGRUb01hcE9wdGlvbnMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQiLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsInJlYXNvbiIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibGF5ZXJzTm90SW5TcGxpdE1hcHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheSIsInJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYSIsInJlbmFtZXMiLCJuZXdUYWJsZSIsIl9sYXllciRjb25maWckdGV4dExhYiIsImNvbmZpZ1BhdGNoIiwiY29sdW1uc1BhdGNoIiwiY29sdW1uc0NoYW5nZWQiLCJjb2x1bW5zIiwiX3JlZjM2IiwiX3JlZjM3IiwiY2tleSIsImNvbCIsIl9yZWYzOCIsImZpZWxkQ29uZmlnIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwidXBkYXRlU2NoZW1hIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsInBpbm5lZENvbHVtbnMiLCJfcmVuYW1lcyRuYW1lIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXdGaWVsZHNCeU5hbWUiLCJfcmVuYW1lcyRvbGROYW1lIiwiX3VwZGF0ZWQkeUF4aXMiLCJ2aSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiZmllbGRJZHgiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImZpbHRlclRhYmxlIiwicmVjb25jaWxlZCIsIm5leHRGaWVsZHNUb1Nob3ciLCJfcmVuYW1lcyRmJG5hbWUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJuZXh0RmlsZUxvYWRJZCIsImNyZWF0ZUZpbGVMb2FkSWQiLCJsb2FkSWQiLCJmaW5pc2hGaWxlTG9hZCIsIm9uRmluaXNoIiwiZmlsZUNhY2hlIiwibG9hZEZpbGVzVXBkYXRlciIsIl9zdGF0ZSRmaWxlTG9hZGluZyRvcCIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsImNvbXBhbmlvbkZpbGVzIiwiZnJvbSIsImZpbGVzVG9Mb2FkIiwiZGVmZXJBZGRUb01hcCIsImFwcGVuZERlZmVycmVkRmlsZUxvYWQiLCJwcmV2aW91c0Vycm9ycyIsImZyb21FbnRyaWVzIiwiX3JlZjM5IiwiX3JlZjQwIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwiX3JlZjQxIiwibG9hZGluZyIsImZpbGUiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwiY3VycmVudExvYWRJZCIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5IiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJleHRlbnNpb25zIiwiZGF0YXNldEV4dGVuc2lvbnNGcm9tTG9hZGVycyIsImV4cGFuc2lvbiIsImFyY2hpdmVOYW1lIiwibWFrZUxvYWRGaWxlVGFzayIsInNlZW4iLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwibG9hZGVyIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsImV4dGVuc2lvbiIsImV4dCIsInJlcGxhY2UiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJhZGQiLCJjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUiLCJleHRyYWN0ZWQiLCJzaGFwZWZpbGUiLCJjb21wYW5pb25zIiwid2l0aG91dEZpbGVMb2FkaW5nUHJvZ3Jlc3NFbnRyeSIsImV4cGFuZFppcEFyY2hpdmVTdWNjZXNzVXBkYXRlciIsImFkZERhdGFPcHRpb25zIiwiZGlzcGxheU5hbWUiLCJnZW4iLCJjb250ZW50IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmNDIiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWY0MiRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIl9yZWY0MyIsImNsZWFyU3RhZ2VkTG9hZGVkRmlsZXNVcGRhdGVyIiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWY0NCIsImVycm9yTG9hZElkIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjQ1IiwiZGF0YUlkcyIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJtZXJnZWQiLCJfcmVmNDciLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQ4Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQ5IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0OSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNTAiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY1MSIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY1MiIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MyIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTQiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjU1IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJ2YWx1ZUF0Iiwiam9pbiIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjU2IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjU3IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJmaWVsZFR5cGUiLCJMT0FEX0NPTFVNTl9TVEFUU19UQVNLIiwibG9hZENvbHVtblN0YXRzVXBkYXRlciIsIl9yZWY1OCIsImZpZWxkTmFtZSIsImZpZWxkTmFtZXNUb0xvYWQiLCJmaWVsZHNUb0xvYWQiLCJpc0xvYWRpbmdTdGF0cyIsIl9yZWY1OSIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjYwIiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY2MSIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwiZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNjIiLCJpc1RpbGVkRXh0cmFjdCIsInJvd0NvdW50IiwiZG93bmxvYWQiLCJkb3dubG9hZENsaXAiLCJwbmciLCJqc29uIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNjMiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjY0IiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNjUiLCJzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjY2IiwiX3N0YXRlJGxvYWRpbmdQcm9ncmVzIiwiX3N0YXRlJGxvYWRpbmdQcm9jZXNzIiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJsYXllclRpbWVJbnRlcnZhbCIsInVwZGF0ZWRQbG90VHlwZSIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNjgiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiZGVsZXRlT3JpZ2luYWxEYXRhc2V0IiwicmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSIsInByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlIiwiX25leHRTdGF0ZSRsYXllclRvQmVNIiwic2VyaWFsaXplZFN0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQiLCJwcmV2aW91c09yZGVyIiwicGFya2VkIiwicGFya2VkSWRzIiwia25vd24iLCJvcmRlcmVkIiwiX3JlZjY5IiwiYWNjdVN0YXRlIiwiX3JlZjcwIiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIyIiwibWVyZ2VyT3B0aW9ucyIsInBhcmtlZEVsc2V3aGVyZSIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjcxIiwiY2hpbGREYXRhSWQiLCJEQVRBU0VUX09QX0FERF9PUFRJT05TIiwiYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0IiwicmVzdWx0SWQiLCJydW5Hcm91cEJ5VXBkYXRlciIsIl9leGVjdXRlR3JvdXBCeSIsInJ1bkpvaW5VcGRhdGVyIiwiX2V4ZWN1dGVKb2luIiwicnVuU3BhdGlhbEpvaW5VcGRhdGVyIiwiX2V4ZWN1dGVTcGF0aWFsSm9pbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG5pbXBvcnQgdHlwZSB7VGFza0Rlc2NyaXB0b3J9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBFWFBBTkRfWklQX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBleHBhbmRaaXBBcmNoaXZlU3VjY2VzcyxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZyxcbiAgU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQsXG4gIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MsXG4gIGxvYWRDb2x1bW5TdGF0c0Vycm9yLFxuICByZWZyZXNoRGF0YXNldFN1Y2Nlc3MsXG4gIHJlZnJlc2hEYXRhc2V0RXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MsXG4gIHNldExvYWRpbmdQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIHN1Y2Nlc3NOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlLFxuICBpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIsXG4gIGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTixcbiAgQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQsXG4gIHRleHRQbGFjZW1lbnRGcm9tQW5nbGUsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBnZXRSZW1vdGVTb3VyY2VGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIGlmXyxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgaXNTYXZlZExheWVyQ29uZmlnVjEsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge1xuICBnZXRGaWxlc1RvUGFyc2UsXG4gIGlzWmlwRmlsZU5hbWUsXG4gIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCxcbiAgcHJvY2Vzc0dlb2pzb24sXG4gIFppcEFyY2hpdmVFeHBhbnNpb25cbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldCxcbiAgQ2hhcnRDb25maWcsXG4gIExheWVyQ2hhcnRDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIEtlcGxlclRhYmxlLFxuICBGaWx0ZXJQcm9wcyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvdywgcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHl9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICBleGVjdXRlR3JvdXBCeSxcbiAgZXhlY3V0ZUpvaW4sXG4gIGV4ZWN1dGVTcGF0aWFsSm9pbixcbiAgcmVtb3ZlRGF0YXNldE9wVXBkYXRlcixcbiAgcmVtb3ZlT3BzRm9yRGF0YXNldHMsXG4gIHNldEdyb3VwQnlDb25maWdVcGRhdGVyLFxuICBzZXRKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyXG59IGZyb20gJy4vZGF0YXNldC1vcHMtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIG1lcmdlUGxvdEdyb3VwQnksXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIGRpc2FibGUgc3RhY2sgY2FwdHVyZSBmb3Igd2l0aFRhc2sgY2FsbHMgdGhhdCBoYXBwZW4gb3V0c2lkZSBzdHJpY3QgcmVkdWNlciBjb250ZXh0XG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgbGVnZW5kOiB7XG4gICAgaWQ6ICdsZWdlbmQnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmxlZ2VuZCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICBoaWRlSW52aXNpYmxlTGF5ZXJzOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMi41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9LFxuICBhbm5vdGF0aW9uOiB7XG4gICAgaWQ6ICdhbm5vdGF0aW9uJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5hbm5vdGF0aW9uJyxcbiAgICBlbmFibGVkOiBmYWxzZVxuICB9LFxuICB6b29tT3BhY2l0eToge1xuICAgIGlkOiAnem9vbU9wYWNpdHknLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmZhZGVPblpvb20nLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgY29udHJvbGxlcnM6IFtdXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbCxcblxuICAvLyBmaWx0ZXJzXG4gIGZpbHRlcnM6IFtdLFxuICBmaWx0ZXJUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhIGNvbGxlY3Rpb24gb2YgbXVsdGlwbGUgZGF0YXNldFxuICBkYXRhc2V0czoge30sXG4gIGVkaXRpbmdEYXRhc2V0OiB1bmRlZmluZWQsXG4gIGdyb3VwQnlzOiBbXSxcbiAgam9pbnM6IFtdLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBjaGFydHMgKGVuYWJsZWQgYnkgZGVmYXVsdDsgZ2F0ZWQgYnkgZW5hYmxlQ2hhcnRzUGFuZWwpXG4gIGNoYXJ0czogW10sXG4gIGNoYXJ0c1RvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgc3RhZ2VkVG9BZGQ6IG51bGwsXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcbiAgbG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9LFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgLy8gU2F2ZWQgY29uZmlncyBoYXZlIGEgdmlzdWFsQ2hhbm5lbHMgc2libGluZzsgcGFyc2VkL2VkaXRvciBKU09OIGZvbGRzIHRob3NlXG4gIC8vIGZpZWxkcyBpbnRvIGNvbmZpZy4gUmUtcGFyc2luZyB0aGUgbGF0dGVyIGRyb3BzIGNvbG9yRmllbGQgYW5kIHJlc2V0cyB0aGUgc2NhbGUuXG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID0gaXNTYXZlZExheWVyQ29uZmlnVjEobmV3TGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpXG4gICAgOiBuZXdMYXllckNvbmZpZztcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmLFxuICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbihcbiAgICAgICAgdGV4dExhYmVsLmZpbmQodGwgPT4gdGwuY29sbGlzaW9uRW5hYmxlZCk/LmNvbGxpc2lvbkVuYWJsZWQgPz9cbiAgICAgICAgICBkZWZhdWx0VGV4dExhYmVsLmNvbGxpc2lvbkVuYWJsZWRcbiAgICAgIClcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICB7XG4gICAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4odGV4dExhYmVsWzBdPy5jb2xsaXNpb25FbmFibGVkKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIGlmIChpZHggPT09ICdhbGwnICYmIHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKHRsID0+ICh7Li4udGwsIFtwcm9wXTogdmFsdWV9KSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogRml0IHRoZSBtYXAgd2hlbiB0aGUgbGF5ZXIgdHlwZSBkcm9wZG93biBnaXZlcyBhbiBlbXB0eSBsYXllciBpdHMgZmlyc3RcbiAqIHR5cGUgYW5kIHRoYXQgbGF5ZXIgYWxyZWFkeSBwb2ludHMgYXQgYSBkYXRhc2V0LiBMYXRlciB0eXBlIGNoYW5nZXMsXG4gKiBwcm9ncmFtbWF0aWMgYGxheWVyVHlwZUNoYW5nZWAsIGFuZCBzYXZlZC1jb25maWcgYXBwbGllcyBsZWF2ZSB0aGUgY2FtZXJhXG4gKiBhbG9uZS4gR2F0ZWQgYnkgYGVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXJgLlxuICovXG5mdW5jdGlvbiBtYXliZUZpdE1hbnVhbExheWVyQm91bmRzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIG9sZExheWVyOiBMYXllcixcbiAgbGF5ZXI6IExheWVyLFxuICBmaXRCb3VuZHM/OiBib29sZWFuXG4pOiBWaXNTdGF0ZSB7XG4gIGlmIChcbiAgICAhZml0Qm91bmRzIHx8XG4gICAgb2xkTGF5ZXIudHlwZSB8fFxuICAgICFsYXllci5jb25maWcuZGF0YUlkIHx8XG4gICAgIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllclxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhbbGF5ZXJdKTtcbiAgaWYgKCFib3VuZHMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlLFxuICAgIEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4gZml0TWFwQm91bmRzKGJvdW5kcykpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMobmV3U3RhdGUsIG9sZExheWVyLCBsYXllciwgYWN0aW9uLmZpdEJvdW5kcyk7XG59XG5cbi8qKlxuICogQmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIGRhdGFzZXQgZmllbGQgb2YgdGhlIHNhbWUgbmFtZS5cbiAqIGBhZGREYXRhVG9NYXBgIGFuZCBgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlYCBvZnRlbiBwYXNzIGB7bmFtZSwgdHlwZX1gXG4gKiBvciBwcm9jZXNzb3IgZmllbGRzIHdob3NlIHZhbHVlQWNjZXNzb3IgaXMgbm90IGJvdW5kIHRvIHRoZSBLZXBsZXJUYWJsZSwgd2hpY2hcbiAqIGxlYXZlcyBzdHJva2VDb2xvckRvbWFpbiBhdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICBuZXdDb25maWc6IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uWyduZXdDb25maWcnXSxcbiAgZGF0YXNldDogS2VwbGVyVGFibGUgfCB1bmRlZmluZWQsXG4gIHZpc3VhbENoYW5uZWw6IExheWVyWyd2aXN1YWxDaGFubmVscyddW3N0cmluZ10gfCB1bmRlZmluZWRcbikge1xuICBpZiAoIWRhdGFzZXQgfHwgIXZpc3VhbENoYW5uZWwpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGluY29taW5nID0gbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICBpZiAoIWluY29taW5nIHx8IHR5cGVvZiBpbmNvbWluZyAhPT0gJ29iamVjdCcgfHwgIWluY29taW5nLm5hbWUpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGZvdW5kID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBpbmNvbWluZy5uYW1lKTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdDb25maWcsXG4gICAgW3Zpc3VhbENoYW5uZWwuZmllbGRdOiBmb3VuZFxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VmlzQ29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBjb25zdCBuZXdDb25maWcgPSByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gICAgYWN0aW9uLm5ld0NvbmZpZyxcbiAgICBkYXRhc2V0LFxuICAgIG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdXG4gICk7XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgLy8gSmVua3MgYnJlYWtzIGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9mIGNvbG9ycy4gUmVjYWxjdWxhdGUgdGhlIGRvbWFpbiB3aGVuXG4gIC8vIHRoZSBjb2xvciByYW5nZSBvZiBhIEplbmtzIGNoYW5uZWwgY2hhbmdlcy5cbiAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgIE9iamVjdC5rZXlzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxLZXkgPT4ge1xuICAgICAgICBjb25zdCBjaGFubmVsID0gbmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbEtleV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGFubmVsPy5zY2FsZSAmJlxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZ1tjaGFubmVsLnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuamVua3MgJiZcbiAgICAgICAgICBjaGFubmVsLnJhbmdlICYmXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbi5uZXdWaXNDb25maWcsIGNoYW5uZWwucmFuZ2UpXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJiBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWUpIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHByZXZpb3VzV2luZG93ID0gKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLmFuaW1hdGlvbldpbmRvdztcbiAgbGV0IG5leHRGaWx0ZXIgPSB7Li4uZmlsdGVyLCBhbmltYXRpb25XaW5kb3d9IGFzIEZpbHRlcjtcblxuICAvLyBFbnRlcmluZyBvciBsZWF2aW5nIGludGVydmFsIHBsYXliYWNrIHNuYXBzIHRoZSB3aW5kb3cgb250byBoaXN0b2dyYW0gYmlucy5cbiAgaWYgKFxuICAgIGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmXG4gICAgKHByZXZpb3VzV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsIHx8IGFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbClcbiAgKSB7XG4gICAgY29uc3QgYWRqdXN0ZWQgPSBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXh0RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWRqdXN0ZWQudmFsdWUpICYmIGFkanVzdGVkLnZhbHVlLmV2ZXJ5KHYgPT4gTnVtYmVyLmlzRmluaXRlKHYpKSkge1xuICAgICAgbmV4dEZpbHRlciA9IGFkanVzdGVkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV4dEZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV4dEZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogdmFsdWVJbmRleCA+IDB9XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgaWYgKGZpbHRlci5ncHUpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIC8vIHJlbW92ZSBmaWx0ZXIgUGxvdCBhdCBkYXRhc2V0SWQsIHNvIGl0IHdpbGwgYmUgcmVjYWxjdWxhdGVkXG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuXG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgLy8gb25seSBmaWx0ZXIgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5lbmROYW1lOiB7XG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIGZpbHRlciA9IGZpbHRlci5ncHVcbiAgICAgICAgICA/IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKVxuICAgICAgICAgIDogey4uLmZpbHRlciwgZ3B1Q2hhbm5lbDogdW5kZWZpbmVkLCBncHVFbmRDaGFubmVsOiB1bmRlZmluZWR9O1xuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbGV0IHBsb3RUeXBlVXBkYXRlID0gbmV3UHJvcC5wbG90VHlwZTtcbiAgICAgIGlmIChwbG90VHlwZVVwZGF0ZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGxvdFR5cGVVcGRhdGUsICdncm91cEJ5JykpIHtcbiAgICAgICAgcGxvdFR5cGVVcGRhdGUgPSB7XG4gICAgICAgICAgLi4ucGxvdFR5cGVVcGRhdGUsXG4gICAgICAgICAgZ3JvdXBCeTogbWVyZ2VQbG90R3JvdXBCeShuZXdGaWx0ZXIucGxvdFR5cGU/Lmdyb3VwQnksIHBsb3RUeXBlVXBkYXRlLmdyb3VwQnkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8ocGxvdFR5cGVVcGRhdGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnXG4gICAgPyByZW1vdmVMYXllckZyb21ab29tT3BhY2l0eShzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZywgbGF5ZXJUb1JlbW92ZS5pZClcbiAgICA6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKSxcbiAgICAvLyBPbmx5IHJlcGxhY2UgaW50ZXJhY3Rpb25Db25maWcgd2hlbiBhIGNvbnRyb2xsZXIgYWN0dWFsbHkgbGlzdGVkIHRoaXMgbGF5ZXIuXG4gICAgLy8gUGFydGlhbCB0ZXN0IHN0YXRlcyBvbWl0IGl0LCBhbmQgYWRkaW5nIHRoZSBrZXkgd291bGQgY2hhbmdlIHRoYXQgc2hhcGUuXG4gICAgLi4uKGludGVyYWN0aW9uQ29uZmlnICE9PSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyA/IHtpbnRlcmFjdGlvbkNvbmZpZ30gOiB7fSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4oXG4gICAgcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgY2hhcnQgPT4gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSAmJiBjaGFydC5sYXllcklkID09PSBsYXllclRvUmVtb3ZlLmlkXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXROZXdMYXllckdyb3VwKGFjdGlvbik7XG4gIGxldCBuZXdMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIGlmIChhY3Rpb24ubGF5ZXJPcmRlcikge1xuICAgIGFjdGlvbi5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVyR3JvdXApXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGdyb3VwIGFuZCBhbGwgbGF5ZXJzIHdpdGhpbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXBUb1JlbW92ZSA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cFRvUmVtb3ZlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJJZHNUb1JlbW92ZSA9IGdldEZsYXRMYXllck9yZGVyKGxheWVyR3JvdXBUb1JlbW92ZS5sYXllck9yZGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBsYXllcklkc1RvUmVtb3ZlLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbmV3U3RhdGUgPSByZW1vdmVMYXllclVwZGF0ZXIobmV3U3RhdGUsIHtpZDogbGF5ZXJJZH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwVG9SZW1vdmUpO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgbGF5ZXIgZ3JvdXAgKGxhYmVsLCB2aXNpYmlsaXR5LCBsYXllciBtZW1iZXJzaGlwKVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgb3B0aW9uc30gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGlmIChvcHRpb25zLmxheWVyT3JkZXIpIHtcbiAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gWy4uLmxheWVyR3JvdXAubGF5ZXJPcmRlciwgLi4ubmV3U3RhdGUubGF5ZXJPcmRlcl07XG4gICAgb3B0aW9ucy5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXAgPSB7XG4gICAgLi4ubGF5ZXJHcm91cCxcbiAgICAuLi5vcHRpb25zXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlICE9PSBsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgIGNvbnN0IGxheWVySWRzID0gZ2V0RmxhdExheWVyT3JkZXIobmV3TGF5ZXJHcm91cC5sYXllck9yZGVyKTtcbiAgICBuZXdTdGF0ZSA9IG5ld1N0YXRlLmxheWVycy5yZWR1Y2UoKGFjYywgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcklkcy5pbmNsdWRlcyhsYXllci5pZCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihhY2MsIHtcbiAgICAgICAgICBvbGRMYXllcjogbGF5ZXIsXG4gICAgICAgICAgbmV3Q29uZmlnOiB7aXNWaXNpYmxlOiBuZXdMYXllckdyb3VwLmlzVmlzaWJsZX1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG5ld0xheWVyR3JvdXApO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGF5ZXIgdG8gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBpZiAoIWxheWVyR3JvdXAgfHwgIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kKGVudHJ5ID0+IGVudHJ5ID09PSBsYXllcklkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBmcm9tIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3TGF5ZXJHcm91cE9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogU3dhcCBsYXllciBvcmRlciBlbnRyaWVzIGJldHdlZW4gcm9vdCBhbmQgZ3JvdXBzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7b3JpZ2luTGF5ZXJJZCwgZGVzdGluYXRpb25MYXllcklkLCBvcmlnaW5MYXllckdyb3VwSWQsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfSA9IGFjdGlvbjtcblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCAmJiBvcmlnaW5JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAoZGVzdGluYXRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5TW92ZShzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdGluYXRpb25JbmRleCk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgbGV0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IG5ld0xheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZmFsc2VcbiAgICAgICk7XG4gICAgICBuZXdMYXllck9yZGVyLnNwbGljZShkZXN0aW5hdGlvbkluZGV4ID09PSAtMSA/IDAgOiBkZXN0aW5hdGlvbkluZGV4LCAwLCBvcmlnaW5MYXllcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IFsuLi5uZXdMYXllck9yZGVyLCBvcmlnaW5MYXllcklkXTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCA9PT0gZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXN0SW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWdyb3VwIG1vdmU6IHJlbW92ZSBmcm9tIG9yaWdpbiwgdGhlbiBhZGQgdG8gZGVzdGluYXRpb25cbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGxldCBuZXdTdGF0ZSA9IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCk7XG4gICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQpO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ICE9PSAtMSAmJiBkZXN0SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgcmV0dXJuIGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbmFsIGxheWVyIGlzIGluc2lkZSBhIGdyb3VwXG4gIGNvbnN0IHBhcmVudEdyb3VwID0gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuXG4gIGlmIChwYXJlbnRHcm91cCkge1xuICAgIC8vIExheWVyIGlzIGluc2lkZSBhIGdyb3VwIC0gcmVtb3ZlIHRoZSBwcmVwZW5kZWQgaWQgZnJvbSByb290IGFuZCBpbnNlcnQgaW50byB0aGUgZ3JvdXBcbiAgICBjb25zdCBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCA9IG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEpO1xuICAgIGNvbnN0IGlkeEluR3JvdXAgPSBwYXJlbnRHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlID0+IGUgPT09IG9yaWdpbmFsLmlkKTtcbiAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheUluc2VydChwYXJlbnRHcm91cC5sYXllck9yZGVyLCBpZHhJbkdyb3VwLCBuZXdMYXllci5pZCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gey4uLnBhcmVudEdyb3VwLCBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9O1xuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLCB1cGRhdGVkR3JvdXApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBhdCByb290IGxldmVsIC0gdXNlIG9yaWdpbmFsIGluZGV4LWJhc2VkIGluc2VydGlvblxuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgICBuZXdMYXllci5pZFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdCA9IHN0YXRlLmVmZmVjdHNbaWR4XTtcbiAgY29uc3QgbmV4dFBhcmFtcyA9IHByb3BzLnBhcmFtZXRlcnM7XG4gIC8vIEEgdGltZXN0YW1wLW9ubHkgbm8tb3Agc3RpbGwgdXNlZCB0byBhbGxvY2F0ZSBhIG5ldyB2aXNTdGF0ZSAoc2V0UHJvcHNcbiAgLy8gbXV0YXRlcyBpbiBwbGFjZSkuIFRoYXQgcmV0cmlnZ2VyZWQgbmVzdGVkIHJlYWN0LXJlZHV4IGNvbm5lY3Qgc3Vic2NyaWJlcnNcbiAgLy8gd2hpbGUgZHJhZ2dpbmcgdGhlIExpZ2h0ICYgU2hhZG93IGRheS10aW1lIHNsaWRlciB1bnRpbCBSZWFjdCB0aHJld1xuICAvLyBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkXCIuXG4gIGlmIChcbiAgICBuZXh0UGFyYW1zICYmXG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIE9iamVjdC5rZXlzKG5leHRQYXJhbXMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wICE9IG51bGwgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCA9PT0gZWZmZWN0LnBhcmFtZXRlcnMudGltZXN0YW1wXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQ6IENoYXJ0Q29uZmlnKTogY2hhcnQgaXMgTGF5ZXJDaGFydENvbmZpZyB7XG4gIHJldHVybiBjaGFydC50eXBlID09PSAnbGF5ZXJDaGFydCc7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQ6IENoYXJ0Q29uZmlnLCBwcm9wczogUGFydGlhbDxDaGFydENvbmZpZz4pOiBDaGFydENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uY2hhcnQsXG4gICAgLi4ucHJvcHMsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgIC4uLihwcm9wcy5kaXNwbGF5IHx8IHt9KVxuICAgIH0sXG4gICAgY2hhcnREaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5jaGFydERpc3BsYXksXG4gICAgICAuLi4oKHByb3BzIGFzIENoYXJ0Q29uZmlnKS5jaGFydERpc3BsYXkgfHwge30pXG4gICAgfVxuICB9IGFzIENoYXJ0Q29uZmlnO1xufVxuXG5mdW5jdGlvbiBheGlzRmllbGRJZlByZXNlbnQ8VCBleHRlbmRzIHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbDsgdGl0bGU/OiBzdHJpbmcgfCBudWxsfT4oXG4gIGF4aXM6IFQgfCB1bmRlZmluZWQsXG4gIGZpZWxkTmFtZXM6IFNldDxzdHJpbmc+XG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFheGlzPy5maWVsZD8ubmFtZSB8fCBmaWVsZE5hbWVzLmhhcyhheGlzLmZpZWxkLm5hbWUpKSB7XG4gICAgcmV0dXJuIGF4aXM7XG4gIH1cbiAgcmV0dXJuIHsuLi5heGlzLCBmaWVsZDogbnVsbCwgdGl0bGU6IG51bGx9O1xufVxuXG5mdW5jdGlvbiBkcm9wTWlzc2luZ0NoYXJ0RmllbGRzKFxuICBjaGFydDogQ2hhcnRDb25maWcsXG4gIGRhdGFzZXQ6IHtmaWVsZHM/OiB7bmFtZTogc3RyaW5nfVtdfSB8IHVuZGVmaW5lZFxuKTogQ2hhcnRDb25maWcge1xuICBjb25zdCBmaWVsZE5hbWVzID0gbmV3IFNldCgoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5tYXAoZmllbGQgPT4gZmllbGQubmFtZSkpO1xuICBjb25zdCBuZXh0ID0gY2hhcnQgYXMgQ2hhcnRDb25maWcgJiB7XG4gICAgeEF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHlBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICBheGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICBncm91cEJ5Pzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB2YWx1ZT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gIH07XG4gIHJldHVybiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0LCB7XG4gICAgeEF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnhBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICB5QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueUF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIGF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LmF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIGdyb3VwQnk6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0Lmdyb3VwQnksIGZpZWxkTmFtZXMpLFxuICAgIHZhbHVlOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC52YWx1ZSwgZmllbGROYW1lcylcbiAgfSBhcyBQYXJ0aWFsPENoYXJ0Q29uZmlnPik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHNob3VsZFJlbW92ZTogKGNoYXJ0OiBDaGFydENvbmZpZykgPT4gYm9vbGVhblxuKTogVCB7XG4gIGNvbnN0IGNoYXJ0cyA9IHN0YXRlLmNoYXJ0cyB8fCBbXTtcbiAgY29uc3QgcmVtb3ZlZCA9IGNoYXJ0cy5maWx0ZXIoc2hvdWxkUmVtb3ZlKTtcbiAgaWYgKCFyZW1vdmVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCByZW1vdmVkSWRzID0gbmV3IFNldChyZW1vdmVkLm1hcChjaGFydCA9PiBjaGFydC5pZCkpO1xuICBjb25zdCBmaWx0ZXJJZHMgPSBuZXcgU2V0KFxuICAgIHJlbW92ZWQuZmxhdE1hcChjaGFydCA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNoYXJ0LmNyb3NzRmlsdGVyPy5maWx0ZXJJZDtcbiAgICAgIHJldHVybiBpZCA/IFtpZCwgYCR7aWR9LXhgLCBgJHtpZH0teWBdIDogW107XG4gICAgfSlcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBjaGFydHMuZmlsdGVyKGNoYXJ0ID0+ICFyZW1vdmVkSWRzLmhhcyhjaGFydC5pZCkpXG4gIH07XG4gIGlmIChmaWx0ZXJJZHMuc2l6ZSkge1xuICAgIG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5maWx0ZXJzLnJlZHVjZVJpZ2h0KChhY2N1LCBmaWx0ZXIsIGlkeCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlcklkcy5oYXMoZmlsdGVyLmlkKSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIoYWNjdSwge2lkeH0pIDogYWNjdTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGUgYXMgVDtcbn1cblxuLyoqXG4gKiBBZGQgYSBjaGFydFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZENoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y2hhcnR9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY2hhcnQ/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUuY2hhcnRzIHx8IFtdKS5zb21lKGV4aXN0aW5nID0+IGV4aXN0aW5nLmlkID09PSBjaGFydC5pZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChleGlzdGluZyA9PiAoe1xuICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmV4aXN0aW5nLmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGlzSnNvbkVkaXRvckFjdGl2ZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkpLFxuICAgICAge1xuICAgICAgICAuLi5jaGFydCxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGNoYXJ0LmRpc3BsYXk/LmlzQ29uZmlnQWN0aXZlID8/IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IChzdGF0ZS5jaGFydHMgfHwgW10pLmZpbmRJbmRleChjaGFydCA9PiBjaGFydC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuY2hhcnRzW2lkeF07XG4gIGNvbnN0IGRhdGFJZENoYW5nZWQgPSB0eXBlb2YgcHJvcHMuZGF0YUlkID09PSAnc3RyaW5nJyAmJiBwcm9wcy5kYXRhSWQgIT09IHByZXYuZGF0YUlkO1xuICBjb25zdCBsYXllcklkQ2hhbmdlZCA9XG4gICAgaXNMYXllckNoYXJ0Q29uZmlnKHByZXYpICYmXG4gICAgdHlwZW9mIChwcm9wcyBhcyBMYXllckNoYXJ0Q29uZmlnKS5sYXllcklkID09PSAnc3RyaW5nJyAmJlxuICAgIChwcm9wcyBhcyBMYXllckNoYXJ0Q29uZmlnKS5sYXllcklkICE9PSBwcmV2LmxheWVySWQ7XG4gIGxldCBuZXh0ID0gbWVyZ2VDaGFydENvbmZpZyhwcmV2LCBwcm9wcyk7XG4gIGlmIChkYXRhSWRDaGFuZ2VkIHx8IGxheWVySWRDaGFuZ2VkKSB7XG4gICAgY29uc3QgZGF0YUlkID0gbmV4dC5kYXRhSWQgfHwgdW5kZWZpbmVkO1xuICAgIG5leHQgPSBkcm9wTWlzc2luZ0NoYXJ0RmllbGRzKG5leHQsIGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiB1bmRlZmluZWQpO1xuICAgIGlmIChuZXh0LmNyb3NzRmlsdGVyPy5lbmFibGVkKSB7XG4gICAgICBuZXh0ID0gbWVyZ2VDaGFydENvbmZpZyhuZXh0LCB7XG4gICAgICAgIGNyb3NzRmlsdGVyOiB7Li4ubmV4dC5jcm9zc0ZpbHRlciwgZW5hYmxlZDogZmFsc2UsIHZhbHVlOiB7fSwgZmllbGROYW1lczoge319XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hhcnRzID0gWy4uLnN0YXRlLmNoYXJ0c107XG4gIGNoYXJ0c1tpZHhdID0gbmV4dDtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzXG4gIH07XG4gIGNvbnN0IGZpbHRlcklkID0gbmV4dC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQgfHwgcHJldi5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gIGlmIChwcmV2LmNyb3NzRmlsdGVyPy5lbmFibGVkICYmICFuZXh0LmNyb3NzRmlsdGVyPy5lbmFibGVkICYmIGZpbHRlcklkKSB7XG4gICAgY29uc3Qgb3duZWRGaWx0ZXJJZHMgPSBuZXcgU2V0KFtmaWx0ZXJJZCwgYCR7ZmlsdGVySWR9LXhgLCBgJHtmaWx0ZXJJZH0teWBdKTtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBvd25lZEZpbHRlcklkcy5oYXMoZmlsdGVyLmlkKSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIoYWNjdSwge2lkeH0pIDogYWNjdTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGNoYXJ0IGFuZCBhbnkgY3Jvc3MtZmlsdGVyIGl0IG93bnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUNoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhzdGF0ZSwgY2hhcnQgPT4gY2hhcnQuaWQgPT09IGlkKTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/OiBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTogQW5ub3RhdGlvbiB7XG4gIGNvbnN0IGtpbmQgPSBjb25maWc/LmtpbmQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQ7XG4gIGNvbnN0IHByb3ZpZGVkQW5nbGUgPSBOdW1iZXIuaXNGaW5pdGUoKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSkgPyAoY29uZmlnIGFzIGFueSkuYW5nbGUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlcml2ZWRGcm9tQW5nbGUgPVxuICAgIHByb3ZpZGVkQW5nbGUgIT0gbnVsbCA/IHRleHRQbGFjZW1lbnRGcm9tQW5nbGUocHJvdmlkZWRBbmdsZSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRleHRTaWRlID1cbiAgICBjb25maWc/LnRleHRTaWRlID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8uc2lkZSA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSk7XG4gIGNvbnN0IHRleHRWZXJ0aWNhbFBvc2l0aW9uID1cbiAgICBjb25maWc/LnRleHRWZXJ0aWNhbFBvc2l0aW9uID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8udmVydGljYWwgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OKTtcbiAgY29uc3QgYmFzZSA9IHtcbiAgICBpZDogY29uZmlnPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBraW5kLFxuICAgIGlzVmlzaWJsZTogY29uZmlnPy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZTogY29uZmlnPy5hdXRvU2l6ZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplWTogY29uZmlnPy5hdXRvU2l6ZVkgPz8gdHJ1ZSxcbiAgICBhbmNob3JQb2ludDogY29uZmlnPy5hbmNob3JQb2ludCA/PyAoWzAsIDBdIGFzIFtudW1iZXIsIG51bWJlcl0pLFxuICAgIGxhYmVsOiBjb25maWc/LmxhYmVsID8/ICdOZXcgQW5ub3RhdGlvbicsXG4gICAgbGluZUNvbG9yOiBjb25maWc/LmxpbmVDb2xvciA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICBsaW5lV2lkdGg6IGNvbmZpZz8ubGluZVdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgIHRleHRXaWR0aDogY29uZmlnPy50ZXh0V2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gICAgdGV4dEhlaWdodDogY29uZmlnPy50ZXh0SGVpZ2h0ID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgICB0ZXh0VmVydGljYWxBbGlnbjogY29uZmlnPy50ZXh0VmVydGljYWxBbGlnbiA/PyAoJ2JvdHRvbScgYXMgY29uc3QpLFxuICAgIC4uLih0ZXh0U2lkZSA/IHt0ZXh0U2lkZX0gOiB7fSksXG4gICAgLi4uKHRleHRWZXJ0aWNhbFBvc2l0aW9uID8ge3RleHRWZXJ0aWNhbFBvc2l0aW9ufSA6IHt9KSxcbiAgICBtYXBJbmRleDogY29uZmlnPy5tYXBJbmRleFxuICB9O1xuXG4gIGNvbnN0IGRlZmF1bHRBbmdsZSA9XG4gICAgdGV4dFNpZGUgJiYgdGV4dFZlcnRpY2FsUG9zaXRpb25cbiAgICAgID8gQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlRbYCR7dGV4dFNpZGV9LSR7dGV4dFZlcnRpY2FsUG9zaXRpb259YF1cbiAgICAgIDogSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFO1xuXG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUE9JTlQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5QT0lOVCxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQVJST1c6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5BUlJPVyxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQ0lSQ0xFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQ0lSQ0xFLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGUsXG4gICAgICAgIHJhZGl1c0luTWV0ZXJzOiAoY29uZmlnIGFzIGFueSk/LnJhZGl1c0luTWV0ZXJzID8/IDEwMDBcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5URVhUOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5URVhUXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXdBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oYWN0aW9uLmNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IHRydWVcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogc3RhdGUuYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBEZXJpdmVkIHRhYmxlcyBhcmUgc25hcHNob3RzOiBrZWVwIHRoZW0gd2hlbiBhIHNvdXJjZSBkYXRhc2V0IGlzIGRlbGV0ZWQuXG4gIC8vIE9ubHkgZHJvcCBpbi1wcm9ncmVzcyBncm91cC1ieSAvIGpvaW4gZHJhZnRzIHRoYXQgcmVmZXJlbmNlZCB0aGlzIGRhdGFzZXQuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlbW92ZU9wc0ZvckRhdGFzZXRzKHN0YXRlLCBbZGF0YXNldEtleV0pIGFzIFQ7XG4gIHJldHVybiByZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlcihuZXh0U3RhdGUsIGRhdGFzZXRLZXkpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBULCBkYXRhc2V0S2V5OiBzdHJpbmcpOiBUIHtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogX2RhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pLFxuICAgIGNoYXJ0ID0+IHtcbiAgICAgIGlmIChjaGFydC5kYXRhSWQgPT09IGRhdGFzZXRLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJzVG9SZW1vdmUuaW5jbHVkZXMoY2hhcnQubGF5ZXJJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KHtcbiAgYXJnOiBkYXRhc2V0LFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzogUHJvdG9EYXRhc2V0O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KTogUHJvbWlzZTxQcm90b0RhdGFzZXQ+IHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cbiAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHtcbiAgICBzb3VyY2U6IGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQoZGF0YXNldC5tZXRhZGF0YSksXG4gICAgc2l6ZTogdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNpemUgPT09ICdudW1iZXInID8gZGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgIGJ5cGFzc0NhY2hlOiBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMoZGF0YXNldC5tZXRhZGF0YSkgPiAwLFxuICAgIG9uUHJvZ3Jlc3NcbiAgfSk7XG4gIGlmICghbG9hZGVkLmRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRhdGEgbG9hZGVkIGZyb20gJHtkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2V9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIGRhdGE6IGxvYWRlZC5kYXRhLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgZXRhZzogbG9hZGVkLmV0YWcsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGxvYWRlZC5sYXN0TW9kaWZpZWQsXG4gICAgICAuLi4odHlwZW9mIGxvYWRlZC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiBsb2FkZWQuc2l6ZX0gOiB7fSksXG4gICAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnXG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0LFxuICAnSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG5jb25zdCBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKGFzeW5jIChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufSwgJ0ZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSycpO1xuXG5mdW5jdGlvbiBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGluZGV4ID0gMCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZGF0YXNldC5pbmZvPy5pZCA9PT0gJ3N0cmluZycgJiYgZGF0YXNldC5pbmZvLmlkKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQuaW5mby5pZDtcbiAgfVxuICBpZiAodHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiYgZGF0YXNldC5tZXRhZGF0YS5zb3VyY2UpIHtcbiAgICByZXR1cm4gZGF0YXNldC5tZXRhZGF0YS5zb3VyY2U7XG4gIH1cbiAgcmV0dXJuIGBkYXRhc2V0LSR7aW5kZXh9YDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGRhdGFzZXRzOiBEYXRhc2V0cykge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RGF0YUVudHJ5KGRhdGFzZXQsIGRhdGFzZXRzKTtcbiAgfVxuICBjb25zdCBwcm9ncmVzc0lkID0gZ2V0RGF0YXNldFByb2dyZXNzSWQoZGF0YXNldCk7XG4gIHJldHVybiBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgYXJnOiBkYXRhc2V0LFxuICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICBzZXRMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICAgIHByb2dyZXNzSWQsXG4gICAgICAgIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSxcbiAgICAgICAgcHJvZ3Jlc3M/LnBoYXNlID09PSAncHJvY2Vzc2luZycgPyAncHJvY2Vzc2luZycgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgfSkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTG9hZGluZ1Byb2dyZXNzKHN0YXRlOiBWaXNTdGF0ZSwgaWRzPzogc3RyaW5nW10pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MgfHwge307XG4gIGNvbnN0IHByb2Nlc3NpbmcgPSBzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyB8fCB7fTtcbiAgaWYgKCFPYmplY3Qua2V5cyhjdXJyZW50KS5sZW5ndGggJiYgIU9iamVjdC5rZXlzKHByb2Nlc3NpbmcpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbG9hZGluZ1Byb2dyZXNzOiB7fSwgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9fTtcbiAgfVxuICBpZiAoIWlkcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHQgPSB7Li4uY3VycmVudH07XG4gIGNvbnN0IG5leHRQcm9jZXNzaW5nID0gey4uLnByb2Nlc3Npbmd9O1xuICBpZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgZGVsZXRlIG5leHRbaWRdO1xuICAgIGRlbGV0ZSBuZXh0UHJvY2Vzc2luZ1tpZF07XG4gIH0pO1xuICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IG5leHQsIGxvYWRpbmdQcm9jZXNzaW5nOiBuZXh0UHJvY2Vzc2luZ307XG59XG5cbmZ1bmN0aW9uIHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQ6IERhdGFzZXRzW3N0cmluZ10sIHBhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIC4uLnBhdGNoXG4gICAgfVxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSh7XG4gIGFyZzogbWV0YWRhdGEsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgZXRhZz86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWQ/OiBzdHJpbmc7XG4gIH07XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pIHtcbiAgLy8gRmV0Y2ggb25seS4gRG8gbm90IG11dGF0ZSB0aGUgUmVkdXggdGFibGUgaGVyZTogcHJvZ3Jlc3MgZXZlbnRzIGNvcHkgaXQsIGFuZFxuICAvLyB0aGUgc3VjY2VzcyB1cGRhdGVyIGFwcGxpZXMgdGhlIHNuYXBzaG90IHRvIHdoYXRldmVyIGluc3RhbmNlIGlzIGluIHRoZSBzdG9yZS5cbiAgcmV0dXJuIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7Li4ubWV0YWRhdGEsIG9uUHJvZ3Jlc3MsIGJ5cGFzc0NhY2hlOiB0cnVlfSk7XG59XG5cbmNvbnN0IFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSxcbiAgJ1JFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuLyoqXG4gKiBSZS1mZXRjaCBhbiBleHRlcm5hbGx5IGhvc3RlZCBkYXRhc2V0IGFuZCByZXBsYWNlIGl0cyB0YWJsZSBjb250ZW50cyBpbiBwbGFjZS5cbiAqIExheWVycyBhbmQgZmlsdGVycyBhcmUga2VwdCB3aGVuIGZpZWxkIG5hbWVzIG1hdGNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKFxuICAgICFkYXRhc2V0IHx8XG4gICAgZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCB8fFxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dERhdGFzZXQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2xvYWRpbmcnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogbmV4dERhdGFzZXRcbiAgICAgIH1cbiAgICB9LFxuICAgIFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICAgIGFyZzoge1xuICAgICAgICBzb3VyY2U6IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KG5leHREYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICAgICAgc2l6ZTogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgPT09ICdudW1iZXInID8gbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXRhZzogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgPT09ICdzdHJpbmcnID8gbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdE1vZGlmaWVkOlxuICAgICAgICAgIHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PlxuICAgICAgICByZWZyZXNoRGF0YXNldFByb2dyZXNzKGRhdGFJZCwgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApKVxuICAgIH0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IHJlZnJlc2hEYXRhc2V0U3VjY2VzcyhkYXRhSWQsIHJlc3VsdCksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiByZWZyZXNoRGF0YXNldEVycm9yKGRhdGFJZCwgZXJyb3IpXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IHJlZnJlc2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcGVyY2VudH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8IGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgIT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0UGVyY2VudCA9IE51bWJlci5pc0Zpbml0ZShwZXJjZW50KVxuICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHBlcmNlbnQpKSlcbiAgICA6IDA7XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoUHJvZ3Jlc3MgPT09IG5leHRQZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtyZWZyZXNoUHJvZ3Jlc3M6IG5leHRQZXJjZW50fSlcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpZWxkTmFtZXNFcXVhbChjdXJyZW50OiB7bmFtZTogc3RyaW5nfVtdLCBpbmNvbWluZz86IHtuYW1lOiBzdHJpbmd9W10gfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghaW5jb21pbmc/Lmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gaW5jb21pbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBjdXJyZW50LmV2ZXJ5KChmaWVsZCwgaSkgPT4gZmllbGQubmFtZSA9PT0gaW5jb21pbmdbaV0ubmFtZSk7XG59XG5cbi8qKlxuICogV2hlbiBhIHJlbW90ZSBzbmFwc2hvdCBjaGFuZ2VzIGNvbHVtbiBuYW1lcywgb2xkIGxheWVyIGZpZWxkSWR4IC8gZmlsdGVyIG5hbWVzXG4gKiBjYW4gcG9pbnQgYXQgdGhlIHdyb25nIGNvbHVtbi4gUmUtYmluZCBieSBuYW1lIGFuZCBkcm9wIGNvbmZpZ3MgdGhhdCBubyBsb25nZXIgZml0LlxuICovXG5mdW5jdGlvbiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXVxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgbmV4dExheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkcm9wcGVkTGF5ZXJzOiBMYXllcltdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChsYXllcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlYm91bmQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMsIGxheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICAgIGlmIChyZWJvdW5kPy5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChyZWJvdW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHBlZExheWVycy5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZXh0TGF5ZXJPcmRlciA9IHN0YXRlLmxheWVyT3JkZXI7XG4gIGxldCBuZXh0U3BsaXRNYXBzID0gc3RhdGUuc3BsaXRNYXBzO1xuICBkcm9wcGVkTGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIG5leHRMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5leHRMYXllck9yZGVyLCBsYXllci5pZCk7XG4gICAgbmV4dFNwbGl0TWFwcyA9IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhuZXh0U3BsaXRNYXBzLCBsYXllcik7XG4gIH0pO1xuXG4gIGNvbnN0IG5leHRMYXllckRhdGEgPSBuZXh0TGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgY29uc3Qgb2xkSWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChvbGRMYXllciA9PiBvbGRMYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgIHJldHVybiBvbGRJZHggPj0gMCA/IHN0YXRlLmxheWVyRGF0YVtvbGRJZHhdIDoge307XG4gIH0pO1xuXG4gIGNvbnN0IGZpbHRlcnNGb3JEYXRhc2V0ID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG4gIGNvbnN0IG90aGVyRmlsdGVycyA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcblxuICBjb25zdCB7dmFsaWRhdGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoXG4gICAgey4uLnN0YXRlLCBkYXRhc2V0cywgbGF5ZXJzOiBuZXh0TGF5ZXJzfSxcbiAgICBmaWx0ZXJzRm9yRGF0YXNldFxuICApO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXJzID0gWy4uLm90aGVyRmlsdGVycywgLi4udmFsaWRhdGVkXTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIG5leHRGaWx0ZXJzLFxuICAgIG5leHRMYXllcnNcbiAgKTtcblxuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgICBsYXllcnM6IG5leHRMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXh0TGF5ZXJEYXRhLFxuICAgIGxheWVyT3JkZXI6IG5leHRMYXllck9yZGVyLFxuICAgIHNwbGl0TWFwczogbmV4dFNwbGl0TWFwcyxcbiAgICBmaWx0ZXJzOiBuZXh0RmlsdGVyc1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgZmluaXNoZWQgcmVtb3RlIHJlZnJlc2g6IGtlZXAgbGF5ZXJzLCByZS1ydW4gZmlsdGVycyBhbmQgbGF5ZXIgZGF0YS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJlc3VsdH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YVBhdGNoID0ge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZCxcbiAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgIC8vIEFsd2F5cyB3cml0ZSB2YWxpZGF0b3JzLiBBIDIwMCB0aGF0IG9taXRzIHRoZW0gbXVzdCBub3Qga2VlcCB0aGUgcHJldmlvdXNcbiAgICAvLyBFVGFnIG9yIGEgbGF0ZXIgMzA0IGNhbiBza2lwIGEgYm9keSB3ZSBubyBsb25nZXIgaGF2ZS5cbiAgICBldGFnOiByZXN1bHQuZXRhZyxcbiAgICBsYXN0TW9kaWZpZWQ6IHJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgLi4uKHR5cGVvZiByZXN1bHQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogcmVzdWx0LnNpemV9IDoge30pXG4gIH07XG5cbiAgY29uc3Qgc2NoZW1hVW5jaGFuZ2VkID0gZmllbGROYW1lc0VxdWFsKGRhdGFzZXQuZmllbGRzLCByZXN1bHQuZGF0YT8uZmllbGRzKTtcblxuICAvLyBBcHBseSB0aGUgc25hcHNob3QgdG8gdGhlIHRhYmxlIGN1cnJlbnRseSBpbiB0aGUgc3RvcmUuIFByb2dyZXNzIG1heSBoYXZlXG4gIC8vIGNvcGllZCBpdCBvZmYgdGhlIG9iamVjdCB0aGF0IHN0YXJ0ZWQgdGhlIGZldGNoOyB0aGUgdGFzayBuZXZlciBtdXRhdGVzIGl0LlxuICBpZiAoIXJlc3VsdC5ub3RNb2RpZmllZCAmJiByZXN1bHQuZGF0YSkge1xuICAgIC8vIEtlcGxlclRhYmxlLnVwZGF0ZSBpcyBhc3luYyBzbyBEdWNrREIgY2FuIGF3YWl0IEFycm93IGNvbnZlcnNpb24uIFRoZVxuICAgIC8vIENTVi9HZW9KU09OIHBhdGggKGFuZCBLZXBsZXJUYWJsZS5pbXBvcnREYXRhKSBydW4gc3luY2hyb25vdXNseSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgYXdhaXQsIHNvIHRoZSBzdG9yZSB0YWJsZSBpcyB1cGRhdGVkIGJlZm9yZSB3ZSBjb3B5IGl0IGJlbG93LlxuICAgIHZvaWQgZGF0YXNldC51cGRhdGUocmVzdWx0LmRhdGEpO1xuICB9XG5cbiAgY29uc3QgcmVmcmVzaGVkID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwgbWV0YWRhdGFQYXRjaCk7XG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiByZWZyZXNoZWRcbiAgfTtcblxuICBpZiAocmVzdWx0Lm5vdE1vZGlmaWVkIHx8ICFyZXN1bHQuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzXG4gICAgfTtcbiAgfVxuXG4gIGlmICghc2NoZW1hVW5jaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShzdGF0ZSwgZGF0YUlkLCBkYXRhc2V0cyk7XG4gIH1cblxuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbmZ1bmN0aW9uIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHN0YXRlOiBWaXNTdGF0ZSwgZGF0YUlkOiBzdHJpbmcpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YXNldFJvd0xpc3QoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXVxuKTogcm93cyBpcyBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJvd3MpIHx8ICFyb3dzLmxlbmd0aCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3MpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGNvbHVtbi1vcmRlcmVkIHJvdyBpcyBhbiBhcnJheSBvZiBwcmltaXRpdmVzOyBhIGxpc3Qgb2Ygcm93cyBpc1xuICAvLyBhbiBhcnJheSBvZiBhcnJheXMgb3IgYW4gYXJyYXkgb2YgZmllbGQtbmFtZSByZWNvcmRzLlxuICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzWzBdKSB8fCBpc1BsYWluT2JqZWN0KHJvd3NbMF0pO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5Um93KHJvdzogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3csIGZpZWxkczogRmllbGRbXSk6IGFueVtdIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICByZXR1cm4gcm93Lmxlbmd0aCA9PT0gZmllbGRzLmxlbmd0aCA/IHJvdyA6IG51bGw7XG4gIH1cbiAgaWYgKGlzUGxhaW5PYmplY3Qocm93KSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gZmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY29yZCwgZmllbGQubmFtZSkgPyByZWNvcmRbZmllbGQubmFtZV0gOiBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YXNldFJvd3MoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSxcbiAgZmllbGRzOiBGaWVsZFtdXG4pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGxpc3QgPSBpc0RhdGFzZXRSb3dMaXN0KHJvd3MpID8gcm93cyA6IFtyb3dzXTtcbiAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IGFueVtdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJyYXlSb3cgPSB0b0FycmF5Um93KGxpc3RbaV0sIGZpZWxkcyk7XG4gICAgaWYgKCFhcnJheVJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG5vcm1hbGl6ZWQucHVzaChhcnJheVJvdyk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQXBwZW5kIG9yIHVwc2VydCByb3dzIG9uIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC4gS2VlcHMgbGF5ZXJzIGFuZCByZS1ydW5zIGZpbHRlcnMuXG4gKiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZCAoSU5TRVJUIC8gY29uY2F0IG5vdCBpbXBsZW1lbnRlZCkuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dzLCBvcHRpb25zfTogVmlzU3RhdGVBY3Rpb25zLkFkZFRvRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVEYXRhc2V0Um93cyhyb3dzLCBkYXRhc2V0LmZpZWxkcyk7XG4gIGlmICghbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGFwcGxpZWQgPSBvcHRpb25zPy51cHNlcnRCeVxuICAgID8gZGF0YXNldC51cHNlcnRSb3dzKG5vcm1hbGl6ZWQsIG9wdGlvbnMudXBzZXJ0QnkpXG4gICAgOiBkYXRhc2V0LmFwcGVuZFJvd3Mobm9ybWFsaXplZCk7XG4gIGlmICghYXBwbGllZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBEZWxldGUgcm93cyBieSBpbmRleCBvciBieSBmaWVsZCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuXG4gKiBLZWVwcyBsYXllcnMuIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZyb21EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dJbmRleGVzLCBieUZpZWxkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZyb21EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaW5kZXhlcyA9IGJ5RmllbGRcbiAgICA/IGRhdGFzZXQuZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzKGJ5RmllbGQuZmllbGQsIHRvQXJyYXkoYnlGaWVsZC52YWx1ZXMpKVxuICAgIDogdG9BcnJheShyb3dJbmRleGVzID8/IFtdKTtcbiAgaWYgKCFpbmRleGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWRhdGFzZXQucmVtb3ZlUm93cyhpbmRleGVzKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBmYWlsZWQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaCB3aXRob3V0IGRyb3BwaW5nIGV4aXN0aW5nIHJvd3MuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZXJyb3J9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgICAgICByZWZyZXNoU3RhdHVzOiAnZXJyb3InLFxuICAgICAgICByZWZyZXNoRXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHJlYWR5VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3QgcmVtb3RlVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3QgaHlkcmF0ZVByb2dyZXNzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgZGF0YXNldHMuZm9yRWFjaCgoe2luZm8gPSB7fSwgLi4ucmVzdH0sIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHByb3RvID0ge2luZm8sIC4uLnJlc3R9O1xuICAgIGNvbnN0IHJlbW90ZSA9IG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUocHJvdG8pO1xuICAgIGlmIChyZW1vdGUpIHtcbiAgICAgIGh5ZHJhdGVQcm9ncmVzc1tnZXREYXRhc2V0UHJvZ3Jlc3NJZChwcm90bywgZGF0YXNldEluZGV4KV0gPSAwO1xuICAgIH1cbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhwcm90bywgc3RhdGUuZGF0YXNldHMpO1xuICAgIGlmICh0YXNrKSB7XG4gICAgICAocmVtb3RlID8gcmVtb3RlVGFza3MgOiByZWFkeVRhc2tzKS5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFyc2VkIGRhdGFzZXRzIGFyZSBjb21taXR0ZWQgb24gdGhlaXIgb3duLiBBIHJlbW90ZSBkb3dubG9hZCBpbiB0aGUgc2FtZVxuICAvLyBhZGQgbXVzdCBub3QgaG9sZCB0aGVtIHVudGlsIHRoZSBVUkwgZmluaXNoZXMuXG4gIGNvbnN0IHByb2dyZXNzSWRzID0gT2JqZWN0LmtleXMoaHlkcmF0ZVByb2dyZXNzKTtcbiAgY29uc3QgYmF0Y2hlczogQXJyYXk8e3Rhc2tzOiBUYXNrRGVzY3JpcHRvcltdOyBwcm9ncmVzc0lkczogc3RyaW5nW119PiA9IFtdO1xuICBpZiAocmVhZHlUYXNrcy5sZW5ndGgpIHtcbiAgICBiYXRjaGVzLnB1c2goe3Rhc2tzOiByZWFkeVRhc2tzLCBwcm9ncmVzc0lkczogW119KTtcbiAgfVxuICBpZiAocmVtb3RlVGFza3MubGVuZ3RoKSB7XG4gICAgYmF0Y2hlcy5wdXNoKHt0YXNrczogcmVtb3RlVGFza3MsIHByb2dyZXNzSWRzfSk7XG4gIH1cblxuICBpZiAoYmF0Y2hlcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcihcbiAgICAgIHVwZGF0ZWRTdGF0ZSxcbiAgICAgIHBheWxvYWRfKHtjaGFuZ2U6IGJhdGNoZXMubGVuZ3RoLCB0eXBlOiAnJ30pXG4gICAgKTtcbiAgICBpZiAocHJvZ3Jlc3NJZHMubGVuZ3RoKSB7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgbG9hZGluZ1Byb2dyZXNzOiB7XG4gICAgICAgICAgLi4udXBkYXRlZFN0YXRlLmxvYWRpbmdQcm9ncmVzcyxcbiAgICAgICAgICAuLi5oeWRyYXRlUHJvZ3Jlc3NcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uYmF0Y2hlcy5tYXAoYmF0Y2ggPT5cbiAgICAgIFRhc2suYWxsU2V0dGxlZChiYXRjaC50YXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe1xuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgICAgYWRkVG9NYXBPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHByb2dyZXNzSWRzOiBiYXRjaC5wcm9ncmVzc0lkc1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnMsIHByb2dyZXNzSWRzfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIGNsZWFyTG9hZGluZ1Byb2dyZXNzKFxuICAgICAgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAtMX0pKSxcbiAgICAgIHByb2dyZXNzSWRzXG4gICAgKSxcbiAgICBub3RpZmljYXRpb25UYXNrc1xuICApO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVyZ2Vyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgbWVyZ2VyczogTWVyZ2VyPGFueT5bXTtcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge21lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSA9IGFjdGlvbjtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbWVyZ2VTdGF0ZVJlc3VsdCA9IG1lcmdlU3RhdGVGcm9tTWVyZ2VycyhcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIC4uLnN0YXRlLmluaXRpYWxTdGF0ZVxuICAgIH0sXG4gICAgbWVyZ2VycyxcbiAgICAvLyBuZXdEYXRhSWRzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICk7XG5cbiAgLy8gaWYgYWxsIG1lcmdlZCwga2lja3VwIHBvc3QgbWVyZ2UgcHJvY2Vzc1xuICAvLyBpZiBub3Qgd2FpdFxuICByZXR1cm4gbWVyZ2VTdGF0ZVJlc3VsdC5hbGxNZXJnZWRcbiAgICA/IHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQpXG4gICAgOiBtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlO1xufVxuXG4vKiogUmVhZHMgYG9wdGlvbnMubGF5ZXJWaXNDb25maWdgIGZyb20gYWRkLWRhdGEtdG8tbWFwIChzZWUgYEFkZERhdGFUb01hcE9wdGlvbnNgKS4gKi9cbmZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKFxuICBvcHRpb25zOiBQb3N0TWVyZ2VyUGF5bG9hZFsnb3B0aW9ucyddIHwgdW5kZWZpbmVkXG4pOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucyB8fCAhKCdsYXllclZpc0NvbmZpZycgaW4gb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGNoID0gKG9wdGlvbnMgYXMge2xheWVyVmlzQ29uZmlnPzogdW5rbm93bn0pLmxheWVyVmlzQ29uZmlnO1xuICBpZiAocGF0Y2ggPT0gbnVsbCB8fCB0eXBlb2YgcGF0Y2ggIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0Y2ggYXMgUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59XG5cbi8qKlxuICogUG9seWdvbiBmaWx0ZXJzIGZvciB0aGVzZSBsYXllcnMgdXNlIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUgZnJvbVxuICogY2FsY3VsYXRlTGF5ZXJEYXRhLiBPdGhlciB0eXBlcyAobGF0L2xuZyBwb2ludHMsIEgzLCBhcmNzKSBjYW4gZmlsdGVyXG4gKiBmcm9tIGNvbHVtbnMgb24gdGhlIGZpcnN0IHBhc3MgYW5kIG11c3Qgbm90IGJlIHJlY2FsY3VsYXRlZCBoZXJlLlxuICovXG5mdW5jdGlvbiBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuZ2VvanNvbiB8fCBsYXllci5jb25maWc/LmNvbHVtbk1vZGUgPT09ICdnZW9qc29uJztcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgLy8gYSBsYXllciBhbHJlYWR5IGluIGEgcGFuZWwgd2FzIG1lcmdlZCBmcm9tIHNwbGl0IG1hcHMsIHdoaWNoIGRlY2lkZSB0aGUgcGFuZWxzIHNob3dpbmcgaXRcbiAgICBjb25zdCBsYXllcnNOb3RJblNwbGl0TWFwcyA9IG5ld0xheWVycy5maWx0ZXIoXG4gICAgICBsID0+ICFtZXJnZWRTdGF0ZS5zcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycylcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBsYXllcnNOb3RJblNwbGl0TWFwcylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyBQb2x5Z29uIHBlci1sYXllciBpbmRleGVzIG5lZWQgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSwgd2hpY2ggYXJlIG9ubHlcbiAgLy8gcG9wdWxhdGVkIGJ5IHRoZSBsYXllci1kYXRhIHBhc3MgYWJvdmUuIFNraXAgZGF0YXNldHMgd2hvc2UgdGFyZ2V0ZWQgbGF5ZXJzXG4gIC8vIGFscmVhZHkgZmlsdGVyZWQgZnJvbSBjb2x1bW5zIChlLmcuIGxhdC9sbmcgcG9pbnRzKS5cbiAgY29uc3QgcG9seWdvbkZpbHRlcnMgPSB1cGRhdGVkU3RhdGUuZmlsdGVycy5maWx0ZXIoXG4gICAgZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2VcbiAgKTtcbiAgY29uc3QgcG9seWdvbk1ldGFEYXRhSWRzID0gdW5pcShcbiAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBsYXllciA9PlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICAgICAgcG9seWdvbkZpbHRlcnMuc29tZShmID0+IGYubGF5ZXJJZD8uaW5jbHVkZXMobGF5ZXIuaWQpKVxuICAgICAgKVxuICAgICAgLm1hcChsYXllciA9PiBsYXllci5jb25maWcuZGF0YUlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgdXBkYXRlZERhdGFzZXRzLmluY2x1ZGVzKGlkKSlcbiAgKTtcbiAgaWYgKHBvbHlnb25NZXRhRGF0YUlkcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgICB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgICAgICAgcG9seWdvbk1ldGFEYXRhSWRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZmlsdGVycyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uTWV0YURhdGFJZHNcbiAgICApO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHVwZGF0ZWRTdGF0ZSA9XG4gICAgbGF5ZXJNZXJnZXJzICYmIGxheWVyTWVyZ2Vycy5sZW5ndGggPiAwXG4gICAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkOiB7Li4ucG9zdE1lcmdlclBheWxvYWQsIGxheWVyTWVyZ2VyczogW119XG4gICAgICAgIH0pXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcblxuICAvLyBjZW50ZXIgdGhlIG1hcCBvbmNlIHRoZSBkYXRhc2V0IGlzIGNyZWF0ZWRcbiAgaWYgKG5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmNlbnRlck1hcCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucz8ucGFkZGluZztcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIEEgdGlsZXNldCBhY2Nlc3MgdG9rZW4gaXMgcmVhZCB3aGlsZSBmb3JtYXR0aW5nIGxheWVyIGRhdGEuIFJlZnJlc2hcbiAgICAvLyBvbmx5IHdoZW4gdGhhdCBmaWVsZCBjaGFuZ2VzIHNvIG90aGVyIG1ldGFkYXRhIGVkaXRzIChlLmcuIHJlZnJlc2hcbiAgICAvLyBpbnRlcnZhbCkgZG8gbm90IHJlYnVpbGQgZXZlcnkgbGF5ZXIgb24gdGhlIGRhdGFzZXQuXG4gICAgaWYgKHByb3BzLm1ldGFkYXRhICYmICd0aWxlM2RBY2Nlc3NUb2tlbicgaW4gcHJvcHMubWV0YWRhdGEpIHtcbiAgICAgIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlLXZhbGlkYXRlIGEgbGl2ZSBsYXllciBhZ2FpbnN0IGEgdGFibGUgd2hvc2Ugc2NoZW1hIGp1c3QgY2hhbmdlZC5cbiAqXG4gKiBUaGUgbGF5ZXIncyBjb2x1bW5zIC8gdmlzdWFsLWNoYW5uZWwgZmllbGRzIC8gdGV4dC1sYWJlbCBmaWVsZHMgYXJlIGZpcnN0XG4gKiByZW1hcHBlZCB0byB0aGVpciBuZXcgbmFtZXMgKHZpYSBgcmVuYW1lc2ApIHNvIHRoZSBsYXllciBmb2xsb3dzIGEgcmVuYW1lXG4gKiBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQsIHRoZW4gcmUtdmFsaWRhdGVkIHdpdGhcbiAqIGB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YWAg4oCUIHRoZSBzYW1lIHNlcmlhbGl6ZSArIHZhbGlkYXRlIHBhdGggdXNlZFxuICogd2hlbiBhIHNhdmVkIGNvbmZpZyBpcyBsb2FkZWQgYWdhaW5zdCBuZXcgZGF0YS4gUmV0dXJucyBgbnVsbGAgd2hlbiBhXG4gKiByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSAodGhlIGxheWVyIGNhbiBubyBsb25nZXIgYmUgYnVpbHQpLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEoXG4gIGxheWVyOiBMYXllcixcbiAgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmV3VGFibGU6IEtlcGxlclRhYmxlLFxuICBzdGF0ZTogVmlzU3RhdGVcbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgY29sdW1uc1xuICBjb25zdCBjb2x1bW5zUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHt2YWx1ZTogc3RyaW5nIHwgbnVsbDsgZmllbGRJZHg6IG51bWJlcn0+ID0ge307XG4gIGxldCBjb2x1bW5zQ2hhbmdlZCA9IGZhbHNlO1xuICBPYmplY3QuZW50cmllcyhsYXllci5jb25maWcuY29sdW1ucyB8fCB7fSkuZm9yRWFjaCgoW2NrZXksIGNvbF0pID0+IHtcbiAgICBpZiAoY29sPy52YWx1ZSAmJiByZW5hbWVzW2NvbC52YWx1ZV0pIHtcbiAgICAgIGNvbHVtbnNQYXRjaFtja2V5XSA9IHsuLi5jb2wsIHZhbHVlOiByZW5hbWVzW2NvbC52YWx1ZV19O1xuICAgICAgY29sdW1uc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjb2x1bW5zQ2hhbmdlZCkge1xuICAgIGNvbmZpZ1BhdGNoLmNvbHVtbnMgPSB7Li4ubGF5ZXIuY29uZmlnLmNvbHVtbnMsIC4uLmNvbHVtbnNQYXRjaH07XG4gIH1cblxuICAvLyBmb2xsb3cgcmVuYW1lZCB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgKGNvbG9yRmllbGQsIHNpemVGaWVsZCwgLi4uKVxuICBPYmplY3QudmFsdWVzKGxheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGR9KSA9PiB7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBsYXllci5jb25maWdbZmllbGRdO1xuICAgIGlmIChmaWVsZENvbmZpZz8ubmFtZSAmJiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdKSB7XG4gICAgICBjb25maWdQYXRjaFtmaWVsZF0gPSB7Li4uZmllbGRDb25maWcsIG5hbWU6IHJlbmFtZXNbZmllbGRDb25maWcubmFtZV19O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdGV4dC1sYWJlbCBmaWVsZHNcbiAgaWYgKGxheWVyLmNvbmZpZy50ZXh0TGFiZWw/Lmxlbmd0aCkge1xuICAgIGNvbnN0IHRleHRMYWJlbCA9IGxheWVyLmNvbmZpZy50ZXh0TGFiZWwubWFwKHRsID0+XG4gICAgICB0bC5maWVsZCAmJiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdXG4gICAgICAgID8gey4uLnRsLCBmaWVsZDogey4uLnRsLmZpZWxkLCBuYW1lOiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdfX1cbiAgICAgICAgOiB0bFxuICAgICk7XG4gICAgaWYgKHRleHRMYWJlbC5zb21lKCh0bCwgaSkgPT4gdGwgIT09IGxheWVyLmNvbmZpZy50ZXh0TGFiZWxbaV0pKSB7XG4gICAgICBjb25maWdQYXRjaC50ZXh0TGFiZWwgPSB0ZXh0TGFiZWw7XG4gICAgfVxuICB9XG5cbiAgLy8gc2hhbGxvdy1jb3B5IHRoZSBsYXllciBzbyB3ZSBuZXZlciBtdXRhdGUgcmVkdXggc3RhdGU7IHRoZSBjb3B5IGtlZXBzIHRoZVxuICAvLyBwcm90b3R5cGUgbWV0aG9kcyAoYHZpc3VhbENoYW5uZWxzYCBnZXR0ZXIsIGBpc1ZhbGlkVG9TYXZlYCkgc28gaXRcbiAgLy8gc2VyaWFsaXplcyBleGFjdGx5IGxpa2UgYSBsaXZlIGxheWVyLlxuICBjb25zdCBsYXllckNvcHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGxheWVyKSksIGxheWVyKTtcbiAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZ1BhdGNoKS5sZW5ndGgpIHtcbiAgICBsYXllckNvcHkuY29uZmlnID0gey4uLmxheWVyLmNvbmZpZywgLi4uY29uZmlnUGF0Y2h9O1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgbmV3VGFibGUsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyQ29weSxcbiAgICBzdGF0ZS5zY2hlbWFcbiAgKTtcblxuICByZXR1cm4gdmFsaWRhdGVkICYmIHZhbGlkYXRlZC5oYXNBbGxDb2x1bW5zKCkgPyB2YWxpZGF0ZWQgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0J3Mgc2NoZW1hIChjb2x1bW5zL2ZpZWxkcykgaW4gcGxhY2UgYW5kIHJlY29uY2lsZVxuICogZXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZWQgdGhlIG9sZCBjb2x1bW5zOiBmaWx0ZXJzLCBsYXllcnMsIHRvb2x0aXAgZmllbGRzLFxuICogcGlubmVkIGNvbHVtbnMgYW5kIHNvcnQgc3RhdGUuIFRoZSBkYXRhc2V0IGtlZXBzIGl0cyBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YS5cbiAqXG4gKiBgYWN0aW9uLmRhdGFgIGlzIHRoZSBzYW1lIHNoYXBlIGBLZXBsZXJUYWJsZS5pbXBvcnREYXRhYCBhY2NlcHRzIChge2NvbHMsXG4gKiBmaWVsZHMsIGFycm93VGFibGV9YCB3aGVuIHJlcGxhY2luZyBjb2x1bW5zKS4gYGFjdGlvbi5yZW5hbWVzYCBpcyBhbiBvcHRpb25hbFxuICogb2xkIOKGkiBuZXcgY29sdW1uLW5hbWUgbWFwIHNvIGxheWVycy9maWx0ZXJzL3Rvb2x0aXBzIGZvbGxvdyBhIHJlbmFtZSBpbnN0ZWFkXG4gKiBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLlxuICpcbiAqIFJlY29uY2lsaWF0aW9uIGlzIG5hbWUtYmFzZWQg4oCUIHRoZSBzYW1lIHdheSBrZXBsZXIuZ2wgbG9hZHMgYSBzYXZlZCBjb25maWdcbiAqIGFnYWluc3QgY2hhbmdlZCBkYXRhLiBBIGxheWVyIHdob3NlIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lIGlzIHJlbW92ZWQ7IGFcbiAqIGZpbHRlciBvbiBhIGdvbmUgY29sdW1uIGlzIGRyb3BwZWQgKG9yIHRoZSBkYXRhc2V0IGlzIHNwbGljZWQgb3V0IG9mIGEgc3luY2VkXG4gKiBmaWx0ZXIpOyB0b29sdGlwIGZpZWxkcyBhcmUgcmVtYXBwZWQgLyBkcm9wcGVkLlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBkYXRhLCByZW5hbWVzID0ge319ID0gYWN0aW9uO1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyAxLiByZWJ1aWxkIHRoZSB0YWJsZSBzY2hlbWEgaW4gcGxhY2UgKHNhbWUgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEpXG4gIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB7fSk7XG4gIG5ld1RhYmxlLnVwZGF0ZVNjaGVtYShkYXRhKTtcblxuICAvLyBUaGUgZGF0YSBjb250YWluZXIgaXMgcmVidWlsdCB1bnNvcnRlZCBhbmQgdW5maWx0ZXJlZDsgcmVzZXQgdGhlIHRhYmxlJ3NcbiAgLy8gdmlldyBzdGF0ZSB0aGF0IGluZGV4ZXMgaW50byB0aGUgb2xkIGNvbnRhaW5lci5cbiAgbmV3VGFibGUuZmlsdGVyZWRJZHhDUFUgPSBuZXdUYWJsZS5hbGxJbmRleGVzO1xuICBuZXdUYWJsZS5maWx0ZXJSZWNvcmRDUFUgPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRDb2x1bW4gPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRPcmRlciA9IG51bGw7XG4gIG5ld1RhYmxlLnBpbm5lZENvbHVtbnMgPSAoZXhpc3RpbmcucGlubmVkQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuYW1lKSA+IC0xKTtcblxuICBjb25zdCBuZXdGaWVsZHNCeU5hbWUgPSBuZXcgU2V0KG5ld1RhYmxlLmZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpKTtcbiAgY29uc3QgbmV3RGF0YXNldHMgPSB7Li4uc3RhdGUuZGF0YXNldHMsIFtkYXRhSWRdOiBuZXdUYWJsZX07XG5cbiAgLy8gMi4gcmVjb25jaWxlIGZpbHRlcnNcbiAgbGV0IG5ld0ZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzXG4gICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmkgPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YUlkKTtcbiAgICAgIGlmICh2aSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZSA9IGZpbHRlci5uYW1lW3ZpXTtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSByZW5hbWVzW29sZE5hbWVdID8/IG9sZE5hbWU7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5ld05hbWUpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIGNvbHVtbiBpcyBnb25lOiBkcm9wIGEgc2luZ2xlLWRhdGFzZXQgZmlsdGVyLCBzcGxpY2UgaXQgb3V0IG9mIGEgc3luY2VkIG9uZVxuICAgICAgICByZXR1cm4gZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2aSwgbmV3RGF0YXNldHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2x1bW4gcHJlc2VudCAocG9zc2libHkgcmVuYW1lZCk6IHJlLXJlc29sdmUgbmFtZS9maWVsZElkeC9kb21haW5cbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoZmlsdGVyLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBuZXdOYW1lLCB2aSwge1xuICAgICAgICBtZXJnZURvbWFpbjogdmkgPiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghdXBkYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYnJ1c2ggZmlsdGVycyBjYXJyeSBhIHNlY29uZCB5LWF4aXMgZmllbGQ7IGZvbGxvdyBhIHJlbmFtZSB0aGVyZSB0b29cbiAgICAgIGNvbnN0IHlBeGlzID1cbiAgICAgICAgdXBkYXRlZC55QXhpcz8ubmFtZSAmJlxuICAgICAgICAocmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdXG4gICAgICAgICAgPyB7Li4udXBkYXRlZC55QXhpcywgbmFtZTogcmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdfVxuICAgICAgICAgIDogbmV3RmllbGRzQnlOYW1lLmhhcyh1cGRhdGVkLnlBeGlzLm5hbWUpXG4gICAgICAgICAgPyB1cGRhdGVkLnlBeGlzXG4gICAgICAgICAgOiBudWxsKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZCxcbiAgICAgICAgeUF4aXMsXG4gICAgICAgIC8vIGNsYW1wIHRoZSB1c2VyJ3MgcHJldmlvdXMgc2VsZWN0aW9uIGludG8gdGhlIG5ldyBkb21haW4gaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXNldHRpbmcgaXQgdG8gdGhlIGZ1bGwgcmFuZ2VcbiAgICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oZmlsdGVyLnZhbHVlLCB1cGRhdGVkKVxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgRmlsdGVyW107XG5cbiAgLy8gcmVhc3NpZ24gR1BVIGNoYW5uZWxzIG5vdyB0aGF0IHRoZSBmaWx0ZXIgbGlzdCBpcyBzZXR0bGVkXG4gIG5ld0ZpbHRlcnMgPSBuZXdGaWx0ZXJzLm1hcChmaWx0ZXIgPT5cbiAgICBmaWx0ZXIuZ3B1ID8gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgbmV3RmlsdGVycyksIG5ld0ZpbHRlcnMpIDogZmlsdGVyXG4gICk7XG5cbiAgLy8gMy4gcmVidWlsZCB0aGUgdGFibGUncyBmaWx0ZXIgc3RhdGUgKGdwdUZpbHRlciAvIGZpbHRlclJlY29yZCAvIGZpbHRlcmVkSW5kZXgpXG4gIG5ld1RhYmxlLmZpbHRlclRhYmxlKFxuICAgIG5ld0ZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKSxcbiAgICB7fVxuICApO1xuXG4gIC8vIDQuIHJlY29uY2lsZSBsYXllcnNcbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG5ld0xheWVycyA9IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgY29uc3QgcmVjb25jaWxlZCA9IHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShsYXllciwgcmVuYW1lcywgbmV3VGFibGUsIHN0YXRlKTtcbiAgICBpZiAocmVjb25jaWxlZCkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZWQ7XG4gICAgfVxuICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIuaWQpO1xuICAgIHJldHVybiBsYXllcjsgLy8gcGxhY2Vob2xkZXIsIGRyb3BwZWQgdmlhIHJlbW92ZUxheWVyVXBkYXRlciBiZWxvd1xuICB9KTtcblxuICAvLyA1LiByZWNvbmNpbGUgdG9vbHRpcCBmaWVsZHNUb1Nob3dcbiAgbGV0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IHRvb2x0aXAgPSBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcDtcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gdG9vbHRpcD8uY29uZmlnPy5maWVsZHNUb1Nob3c/LltkYXRhSWRdO1xuICBpZiAoZmllbGRzVG9TaG93KSB7XG4gICAgY29uc3QgbmV4dEZpZWxkc1RvU2hvdyA9IGZpZWxkc1RvU2hvdy5mbGF0TWFwKGYgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHJlbmFtZXNbZi5uYW1lXSA/PyBmLm5hbWU7XG4gICAgICByZXR1cm4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSA/IFt7Li4uZiwgbmFtZX1dIDogW107XG4gICAgfSk7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4udG9vbHRpcCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4udG9vbHRpcC5jb25maWcsXG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7Li4udG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LCBbZGF0YUlkXTogbmV4dEZpZWxkc1RvU2hvd31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0cyxcbiAgICBmaWx0ZXJzOiBuZXdGaWx0ZXJzLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgLy8gNi4gZHJvcCBsYXllcnMgdGhhdCBsb3N0IHRoZWlyIHJlcXVpcmVkIGNvbHVtbnNcbiAgbmV4dFN0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCBuZXh0U3RhdGUpO1xuXG4gIC8vIDcuIHJlY29tcHV0ZSBsYXllciBkb21haW5zICsgZGF0YSBmb3IgdGhlIHVwZGF0ZWQgZGF0YXNldFxuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmxldCBuZXh0RmlsZUxvYWRJZCA9IDE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVMb2FkSWQoKTogbnVtYmVyIHtcbiAgY29uc3QgbG9hZElkID0gbmV4dEZpbGVMb2FkSWQ7XG4gIG5leHRGaWxlTG9hZElkICs9IDE7XG4gIHJldHVybiBsb2FkSWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaEZpbGVMb2FkKFxuICBvbkZpbmlzaDogKHBheWxvYWQ6IGFueSwgb3B0aW9ucz86IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNPcHRpb25zKSA9PiBhbnksXG4gIGZpbGVDYWNoZTogYW55W10sXG4gIG9wdGlvbnM6IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNPcHRpb25zIHwgdW5kZWZpbmVkLFxuICBsb2FkSWQ6IG51bWJlclxuKSB7XG4gIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMgPyBvbkZpbmlzaChmaWxlQ2FjaGUsIG9wdGlvbnMpIDogb25GaW5pc2goZmlsZUNhY2hlKTtcbiAgcmV0dXJuIHsuLi5hY3Rpb24sIGxvYWRJZH07XG59XG5cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3MsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBhbmlvbkZpbGVzID0gQXJyYXkuZnJvbShmaWxlcyk7XG4gIGNvbnN0IGZpbGVzVG9Mb2FkID0gZ2V0RmlsZXNUb1BhcnNlKGNvbXBhbmlvbkZpbGVzKTtcblxuICAvLyBBbm90aGVyIGRyb3Agd2hpbGUgYSBkZWZlcnJlZCBwYXJzZSBpcyBydW5uaW5nIG11c3Qgam9pbiB0aGF0IGxvYWQuXG4gIC8vIFJlcGxhY2luZyBgZmlsZUxvYWRpbmdgIG1ha2VzIHRoZSBpbi1mbGlnaHQgZmlsZSBmaW5pc2ggYWdhaW5zdCB0aGUgbmV3XG4gIC8vIGNhY2hlIGFuZCBkcm9wIHRoZSBmaWxlcyB0aGF0IHdlcmUgYWxyZWFkeSBiZWluZyBwYXJzZWQuXG4gIGlmIChzdGF0ZS5maWxlTG9hZGluZyAmJiBzdGF0ZS5maWxlTG9hZGluZy5vcHRpb25zPy5kZWZlckFkZFRvTWFwICYmIG9wdGlvbnM/LmRlZmVyQWRkVG9NYXApIHtcbiAgICByZXR1cm4gYXBwZW5kRGVmZXJyZWRGaWxlTG9hZChzdGF0ZSwge2ZpbGVzVG9Mb2FkLCBjb21wYW5pb25GaWxlc30pO1xuICB9XG5cbiAgaWYgKCFmaWxlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBBIGRlZmVycmVkIGxvYWQgaXMgYW5vdGhlciBiYXRjaCBmb3IgdGhlIHNhbWUgQWRkIERhdGEgY2xpY2suIEtlZXAgZmlsZXNcbiAgLy8gYWxyZWFkeSBzdGFnZWQsIGFuZCBrZWVwIHRoZWlyIGVycm9yIGNhcmRzLCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIG92ZXIuXG4gIGNvbnN0IHByZXZpb3VzRXJyb3JzID1cbiAgICBvcHRpb25zPy5kZWZlckFkZFRvTWFwICYmIHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NcbiAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3MpLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZT8uZXJyb3IpXG4gICAgICAgIClcbiAgICAgIDoge307XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGZpbGVzVG9Mb2FkLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICBwcmV2aW91c0Vycm9yc1xuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGxvYWRJZDogY3JlYXRlRmlsZUxvYWRJZCgpLFxuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQsXG4gICAgY29tcGFuaW9uRmlsZXMsXG4gICAgb25GaW5pc2gsXG4gICAgLi4uKG9wdGlvbnMgPyB7b3B0aW9uc30gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe1xuICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3MsXG4gICAgZmlsZUxvYWRpbmcsXG4gICAgLi4uKG9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgPyB7fSA6IHtzdGFnZWRUb0FkZDogbnVsbH0pXG4gIH0pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBkcm9wIHRvIHRoZSBkZWZlcnJlZCBsb2FkIHRoYXQgaXMgYWxyZWFkeSBwYXJzaW5nLlxuICogVGhlIGN1cnJlbnQgZmlsZSBrZWVwcyBpdHMgY2FjaGU7IHRoZSBuZXcgZmlsZXMgcnVuIGFmdGVyIGl0LlxuICovXG5mdW5jdGlvbiBhcHBlbmREZWZlcnJlZEZpbGVMb2FkKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBmaWxlc1RvTG9hZCxcbiAgICBjb21wYW5pb25GaWxlc1xuICB9OiB7XG4gICAgZmlsZXNUb0xvYWQ6IEZpbGVbXTtcbiAgICBjb21wYW5pb25GaWxlczogRmlsZVtdO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxvYWRpbmcgPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgaWYgKCFsb2FkaW5nIHx8ICghZmlsZXNUb0xvYWQubGVuZ3RoICYmICFjb21wYW5pb25GaWxlcy5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGZpbGVzVG9Mb2FkLnJlZHVjZShcbiAgICAoYWNjdSwgZmlsZSwgaW5kZXgpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkpKGFjY3UpLFxuICAgIHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3MsXG4gICAgZmlsZUxvYWRpbmc6IHtcbiAgICAgIC4uLmxvYWRpbmcsXG4gICAgICBmaWxlc1RvTG9hZDogWy4uLkFycmF5LmZyb20obG9hZGluZy5maWxlc1RvTG9hZCksIC4uLmZpbGVzVG9Mb2FkXSxcbiAgICAgIGNvbXBhbmlvbkZpbGVzOiBbLi4uKGxvYWRpbmcuY29tcGFuaW9uRmlsZXMgfHwgW10pLCAuLi5jb21wYW5pb25GaWxlc11cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IGxvYWRJZCA9IHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZDtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICAvLyBEZWNpZGUgYWZ0ZXIgdGhlIHBhdXNlLCBhbmQgb25seSBmb3IgdGhpcyBsb2FkLiBBIGRyb3AgZHVyaW5nIHRoZXNlXG4gIC8vIDIwMG1zIGpvaW5zIHRoZSBxdWV1ZTsgY2FuY2VsIG9yIGEgbmV3ZXIgbG9hZCBtYWtlcyB0aGlzIGNvbnRpbnVhdGlvbiBzdGFsZS5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoKCkgPT4gbG9hZE5leHRGaWxlKGxvYWRJZCkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSwgYWN0aW9uPzoge2xvYWRJZD86IG51bWJlcn0pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxvYWRJZCA9IGFjdGlvbj8ubG9hZElkO1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nIHx8IChsb2FkSWQgIT0gbnVsbCAmJiBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQgIT09IGxvYWRJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlLCBvcHRpb25zLCBsb2FkSWQ6IGN1cnJlbnRMb2FkSWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGlmICghZmlsZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PiBmaW5pc2hGaWxlTG9hZChvbkZpbmlzaCwgZmlsZUNhY2hlLCBvcHRpb25zLCBjdXJyZW50TG9hZElkKSlcbiAgICApO1xuICB9XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgaWYgKGlzWmlwRmlsZU5hbWUoZmlsZS5uYW1lKSkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgICAgRVhQQU5EX1pJUF9UQVNLKHtmaWxlLCBleHRlbnNpb25zOiBkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzKGxvYWRlcnMpfSkuYmltYXAoXG4gICAgICAgIGV4cGFuc2lvbiA9PlxuICAgICAgICAgIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzKHtcbiAgICAgICAgICAgIGxvYWRJZDogY3VycmVudExvYWRJZCxcbiAgICAgICAgICAgIGFyY2hpdmVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICBleHBhbnNpb25cbiAgICAgICAgICB9KSxcbiAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVyciwgY3VycmVudExvYWRJZClcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nID8gbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmNvbXBhbmlvbkZpbGVzIDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uc1xuICAgIClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZGF0YXNldEV4dGVuc2lvbnNGcm9tTG9hZGVycyhcbiAgbG9hZGVyczogQXJyYXk8e2V4dGVuc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXX0+ID0gW11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgbG9hZGVyPy5leHRlbnNpb25zIHx8IFtdKSB7XG4gICAgICBjb25zdCBleHQgPSBTdHJpbmcoZXh0ZW5zaW9uKS5yZXBsYWNlKC9eXFwuLywgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFleHQgfHwgZXh0ID09PSAnemlwJyB8fCBzZWVuLmhhcyhleHQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoZXh0KTtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChleHQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZXh0ZW5zaW9ucztcbn1cblxuZnVuY3Rpb24gY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlKGV4cGFuc2lvbjogWmlwQXJjaGl2ZUV4cGFuc2lvbiwgZXhpc3Rpbmc/OiBGaWxlW10pOiBGaWxlW10ge1xuICBjb25zdCBleHRyYWN0ZWQgPVxuICAgIGV4cGFuc2lvbi5raW5kID09PSAnc2hhcGVmaWxlJ1xuICAgICAgPyBbZXhwYW5zaW9uLnNoYXBlZmlsZSwgLi4uZXhwYW5zaW9uLmNvbXBhbmlvbnNdXG4gICAgICA6IFsuLi5leHBhbnNpb24uZGF0YXNldHMsIC4uLmV4cGFuc2lvbi5jb21wYW5pb25zXTtcbiAgcmV0dXJuIFsuLi5leHRyYWN0ZWQsIC4uLihleGlzdGluZyB8fCBbXSldO1xufVxuXG5mdW5jdGlvbiB3aXRob3V0RmlsZUxvYWRpbmdQcm9ncmVzc0VudHJ5KFxuICBwcm9ncmVzczogVmlzU3RhdGVbJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnXSxcbiAgZmlsZU5hbWU6IHN0cmluZ1xuKTogVmlzU3RhdGVbJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnXSB7XG4gIGlmICghcHJvZ3Jlc3MgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9ncmVzcywgZmlsZU5hbWUpKSB7XG4gICAgcmV0dXJuIHByb2dyZXNzO1xuICB9XG4gIGNvbnN0IG5leHQgPSB7Li4ucHJvZ3Jlc3N9O1xuICBkZWxldGUgbmV4dFtmaWxlTmFtZV07XG4gIHJldHVybiBuZXh0O1xufVxuXG4vKipcbiAqIEFwcGx5IGFuIHVucGFja2VkIHppcC4gT25lIHNoYXBlZmlsZSBrZWVwcyB0aGUgYXJjaGl2ZSBuYW1lLiBBbnkgb3RoZXJcbiAqIG1peCBpcyBxdWV1ZWQgYXMgb25lIGRhdGFzZXQgcGVyIHN1cHBvcnRlZCBtZW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmRaaXBBcmNoaXZlU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuRXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBpZiAoIWxvYWRpbmcgfHwgbG9hZGluZy5sb2FkSWQgIT09IGFjdGlvbi5sb2FkSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2FyY2hpdmVOYW1lLCBleHBhbnNpb259ID0gYWN0aW9uO1xuICBjb25zdCBjb21wYW5pb25GaWxlcyA9IGNvbXBhbmlvbkZpbGVzRm9yQXJjaGl2ZShleHBhbnNpb24sIGxvYWRpbmcuY29tcGFuaW9uRmlsZXMpO1xuXG4gIGlmIChleHBhbnNpb24ua2luZCA9PT0gJ3NoYXBlZmlsZScpIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2NvbXBhbmlvbkZpbGVzfSkpKHN0YXRlKTtcbiAgICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgbmV4dFN0YXRlLFxuICAgICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgICAgZXhwYW5zaW9uLnNoYXBlZmlsZSxcbiAgICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICAgIGxvYWRlcnMsXG4gICAgICAgIGxvYWRPcHRpb25zLFxuICAgICAgICBjb21wYW5pb25GaWxlcyxcbiAgICAgICAgbG9hZGluZy5vcHRpb25zLFxuICAgICAgICBhcmNoaXZlTmFtZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IGV4cGFuc2lvbi5kYXRhc2V0cztcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBbLi4uZGF0YXNldHMsIC4uLkFycmF5LmZyb20obG9hZGluZy5maWxlc1RvTG9hZCldO1xuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZGF0YXNldHMucmVkdWNlKFxuICAgIChhY2N1LCBmaWxlLCBpbmRleCkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSkoYWNjdSksXG4gICAgd2l0aG91dEZpbGVMb2FkaW5nUHJvZ3Jlc3NFbnRyeShzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzLCBhcmNoaXZlTmFtZSlcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3MsXG4gICAgZmlsZUxvYWRpbmc6IHtcbiAgICAgIC4uLmxvYWRpbmcsXG4gICAgICBmaWxlc1RvTG9hZCxcbiAgICAgIGNvbXBhbmlvbkZpbGVzXG4gICAgfVxuICB9O1xuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUsIHtsb2FkSWQ6IGFjdGlvbi5sb2FkSWR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soXG4gIGZpbGUsXG4gIGZpbGVDYWNoZSxcbiAgbG9hZGVyczogTG9hZGVyW10gPSBbXSxcbiAgbG9hZE9wdGlvbnMgPSB7fSxcbiAgY29tcGFuaW9uRmlsZXM/OiBGaWxlW10sXG4gIGFkZERhdGFPcHRpb25zPzogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMsXG4gIGZpbGVOYW1lPzogc3RyaW5nXG4pIHtcbiAgY29uc3QgZGlzcGxheU5hbWUgPSBmaWxlTmFtZSB8fCBmaWxlLm5hbWU7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7XG4gICAgZmlsZSxcbiAgICBmaWxlQ2FjaGUsXG4gICAgbG9hZGVycyxcbiAgICBsb2FkT3B0aW9ucyxcbiAgICBjb21wYW5pb25GaWxlcyxcbiAgICAuLi4oZmlsZU5hbWUgPyB7ZmlsZU5hbWV9IDoge30pXG4gIH0pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KSxcbiAgICAgICAgLi4uKGFkZERhdGFPcHRpb25zID8ge29wdGlvbnM6IGFkZERhdGFPcHRpb25zfSA6IHt9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZGlzcGxheU5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNoLCBvcHRpb25zfVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgY29uc3QgZGVmZXJBZGRUb01hcCA9IEJvb2xlYW4ob3B0aW9ucz8uZGVmZXJBZGRUb01hcCk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICAhZGVmZXJBZGRUb01hcCAmJlxuICAgIGZpbGVOYW1lLmVuZHNXaXRoKCdhcnJvdycpICYmXG4gICAgYWNjdW11bGF0ZWQ/LmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgID8gW1xuICAgICAgICAgIC8vIFNraXAgY29tcGFjdGlvbiB3aGlsZSBiYXRjaGVzIGFyZSBzdGlsbCBhcnJpdmluZy4gVGhlIGNvbXBsZXRlZFxuICAgICAgICAgIC8vIGZpbGUgaXMgY29tcGFjdGVkIG9uY2UgaW4gcHJvY2Vzc0ZpbGVDb250ZW50LlxuICAgICAgICAgIFBST0NFU1NfRklMRV9EQVRBKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHsuLi5hY2N1bXVsYXRlZCwgc2tpcEFycm93Q29tcGFjdDogdHJ1ZX0sXG4gICAgICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICAgICAgfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gKG9wdGlvbnMgPyBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCwgb3B0aW9ucykgOiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCkpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoLFxuICAgICAgICAgICAgICAuLi4ob3B0aW9ucyA/IHtvcHRpb25zfSA6IHt9KVxuICAgICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgIClcbiAgXSk7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vKipcbiAqIERyb3AgZmlsZXMgd2FpdGluZyBvbiB0aGUgQWRkIERhdGEgYnV0dG9uIGFuZCBhYm9ydCBhbiBpbi1wcm9ncmVzcyBtb2RhbCBsb2FkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFyU3RhZ2VkTG9hZGVkRmlsZXNVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICBzdGFnZWRUb0FkZDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWUsIGxvYWRJZDogZXJyb3JMb2FkSWR9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nIHx8IChlcnJvckxvYWRJZCAhPSBudWxsICYmIHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZCAhPT0gZXJyb3JMb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgY29uc3QgbG9hZElkID0gc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8gU2FtZSBwYXVzZSBhcyBhIHN1Y2Nlc3NmdWwgZmlsZS4gUmUtY2hlY2sgdGhpcyBsb2FkJ3MgcXVldWUgd2hlbiBpdCBlbmRzLlxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoKCkgPT4gbG9hZE5leHRGaWxlKGxvYWRJZCkpXG4gICk7XG59O1xuXG4vKipcbiAqIFdoZW4gc2VsZWN0IGRhdGFzZXQgZm9yIGV4cG9ydCwgYXBwbHkgY3B1IGZpbHRlciB0byBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYXBwbHlDUFVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlDUFVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFwcGx5IGNwdUZpbHRlclxuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhSWQpO1xuXG4gIHJldHVybiBkYXRhSWRzLnJlZHVjZSgoYWNjdSwgaWQpID0+IGZpbHRlckRhdGFzZXRDUFUoYWNjdSwgaWQpLCBzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVzZXIgaW5wdXQgdG8gdXBkYXRlIHRoZSBpbmZvIG9mIHRoZSBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBJbmZvVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRNYXBJbmZvVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcEluZm86IHtcbiAgICAuLi5zdGF0ZS5tYXBJbmZvLFxuICAgIC4uLmFjdGlvbi5pbmZvXG4gIH1cbn0pO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIEFsbCBsYXllciBkb21haW4gYW5kIGxheWVyIGRhdGEgb2Ygc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRMYXllcnMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YXNldHM6IERhdGFzZXRzXG4pOiB7c3RhdGU6IFZpc1N0YXRlOyBuZXdMYXllcnM6IExheWVyW119IHtcbiAgY29uc3QgZW1wdHk6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZGVmYXVsdExheWVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLnJlZHVjZSgoYWNjdTogTGF5ZXJbXSwgZGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gZmluZERlZmF1bHRMYXllcihkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICAgIHJldHVybiBmb3VuZExheWVycyAmJiBmb3VuZExheWVycy5sZW5ndGggPyBhY2N1LmNvbmNhdChmb3VuZExheWVycykgOiBhY2N1O1xuICB9LCBlbXB0eSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIC4uLmRlZmF1bHRMYXllcnNdLFxuICAgICAgbGF5ZXJPcmRlcjogW1xuICAgICAgICAvLyBwdXQgbmV3IGxheWVycyBvbiB0b3Agb2Ygb2xkIG9uZXMgaW4gcmV2ZXJzZVxuICAgICAgICAuLi5nZXRMYXllck9yZGVyRnJvbUxheWVycyhkZWZhdWx0TGF5ZXJzKSxcbiAgICAgICAgLi4uc3RhdGUubGF5ZXJPcmRlclxuICAgICAgXVxuICAgIH0sXG4gICAgbmV3TGF5ZXJzOiBkZWZhdWx0TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogaGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgZGVmYXVsdCB0b29sdGlwc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0VG9vbHRpcHMoc3RhdGUsIGRhdGFzZXQpIHtcbiAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IGZpbmRGaWVsZHNUb1Nob3coe1xuICAgIC4uLmRhdGFzZXQsXG4gICAgbWF4RGVmYXVsdFRvb2x0aXBzOiBzdGF0ZS5tYXhEZWZhdWx0VG9vbHRpcHNcbiAgfSk7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgLi4udG9vbHRpcEZpZWxkc1xuICB9O1xuXG4gIHJldHVybiBzZXQoWydpbnRlcmFjdGlvbkNvbmZpZycsICd0b29sdGlwJywgJ2NvbmZpZycsICdmaWVsZHNUb1Nob3cnXSwgbWVyZ2VkLCBzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkge1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZSB8fCBgVW50aXRsZWQgRmlsZSAke2luZGV4fWA7XG4gIHJldHVybiB7XG4gICAgW2ZpbGVOYW1lXToge1xuICAgICAgLy8gcGVyY2VudCBvZiBjdXJyZW50IGZpbGVcbiAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge2ZpbGVOYW1lLCBwcm9ncmVzc30pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gcGlja18oJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnKShwaWNrXyhmaWxlTmFtZSkobWVyZ2VfKHByb2dyZXNzKSkpKHN0YXRlKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBsYXllciBkb21haW5zIGZvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdLFxuICB1cGRhdGVkRmlsdGVyPzogRmlsdGVyXG4pOiBTIHtcbiAgY29uc3QgZGF0YUlkcyA9IHR5cGVvZiBkYXRhSWQgPT09ICdzdHJpbmcnID8gW2RhdGFJZF0gOiBkYXRhSWQ7XG4gIGNvbnN0IG5ld0xheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllckRhdGE6IGFueVtdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2goKG9sZExheWVyLCBpKSA9PiB7XG4gICAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQgJiYgZGF0YUlkcy5pbmNsdWRlcyhvbGRMYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgLy8gTm8gbmVlZCB0byByZWNhbGN1bGF0ZSBsYXllciBkb21haW4gaWYgZmlsdGVyIGhhcyBmaXhlZCBkb21haW5cbiAgICAgIGNvbnN0IG5ld0xheWVyID1cbiAgICAgICAgdXBkYXRlZEZpbHRlciAmJiB1cGRhdGVkRmlsdGVyLmZpeGVkRG9tYWluXG4gICAgICAgICAgPyBvbGRMYXllclxuICAgICAgICAgIDogb2xkTGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMsIHVwZGF0ZWRGaWx0ZXIpO1xuXG4gICAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaV0pO1xuXG4gICAgICBuZXdMYXllcnMucHVzaChsYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChsYXllckRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllcnMucHVzaChvbGRMYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChzdGF0ZS5sYXllckRhdGFbaV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXdMYXllckRhdGFcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbmltYXRpb25Eb21haW48UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUyk6IFMge1xuICAvLyBtZXJnZSBhbGwgYW5pbWF0YWJsZSBsYXllciBkb21haW4gYW5kIHVwZGF0ZSBnbG9iYWwgY29uZmlnXG4gIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBkb21haW46IG51bGwsXG4gICAgICAgIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgdGltZVN0ZXBzOiBudWxsLFxuICAgICAgICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXllckRvbWFpbnMgPSBhbmltYXRhYmxlTGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmFuaW1hdGlvbi5kb21haW4gfHwgW10pO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1lcmdlZERvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMobGF5ZXJEb21haW5zKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIobWVyZ2VkRG9tYWluKTtcblxuICAvLyBtZXJnZSB0aW1lU3RlcHNcbiAgbGV0IG1lcmdlZFRpbWVTdGVwczogbnVtYmVyW10gfCBudWxsID0gdW5pcTxudW1iZXI+KFxuICAgIGFuaW1hdGFibGVMYXllcnMucmVkdWNlKChhY2N1LCBsYXllcikgPT4ge1xuICAgICAgYWNjdS5wdXNoKC4uLihsYXllci5jb25maWcuYW5pbWF0aW9uLnRpbWVTdGVwcyB8fCBbXSkpO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pXG4gICkuc29ydCgpO1xuXG4gIG1lcmdlZFRpbWVTdGVwcyA9IG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggPyBtZXJnZWRUaW1lU3RlcHMgOiBudWxsO1xuXG4gIC8vIFRPRE86IGJldHRlciBoYW5kbGluZyBvZiBkdXJhdGlvbiBjYWxjdWxhdGlvblxuICBjb25zdCBkdXJhdGlvbiA9IG1lcmdlZFRpbWVTdGVwc1xuICAgID8gKEJBU0VfU1BFRUQgKiAoMTAwMCAvIEZQUykpIC8gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCAvIChzdGF0ZS5hbmltYXRpb25Db25maWcuc3BlZWQgfHwgMSlcbiAgICA6IG51bGw7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgZG9tYWluOiBtZXJnZWREb21haW4sXG4gICAgICBkZWZhdWx0VGltZUZvcm1hdCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGltZVN0ZXBzOiBtZXJnZWRUaW1lU3RlcHNcbiAgICB9XG4gIH07XG5cbiAgLy8gcmVzZXQgY3VycmVudFRpbWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICBjb25zdCBzeW5jZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzPy5maW5kKGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkgYXNcbiAgICB8IFRpbWVSYW5nZUZpbHRlclxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8vIGlmIHN5bmNlZCBmaWx0ZXIgZXhpc3Qgd2VlIG5lZWQgdG8gbWVyZ2UgYW5pbWF0aW9uQ29uZmlnIGFuZCBmaWx0ZXIgZG9tYWluc1xuICAvLyBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgdGltZSBhZ2FpbnN0IHRoZSBuZXcgbWVyZ2VkIGRvbWFpblxuICBjb25zdCBuZXdBbmltYXRpb25Eb21haW4gPSBzeW5jZWRGaWx0ZXJcbiAgICA/IG1lcmdlVGltZURvbWFpbnMoW21lcmdlZERvbWFpbiwgc3luY2VkRmlsdGVyLmRvbWFpbl0pXG4gICAgOiBtZXJnZWREb21haW47XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gaXNJblJhbmdlKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSwgbmV3QW5pbWF0aW9uRG9tYWluKVxuICAgID8gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgOiBuZXdBbmltYXRpb25Eb21haW5bMF07XG5cbiAgaWYgKGN1cnJlbnRUaW1lICE9PSBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpIHtcbiAgICAvLyBpZiBjdXJyZW50VGltZSBjaGFuZ2VkLCBuZWVkIHRvIGNhbGwgYW5pbWF0aW9uVGltZVVwZGF0ZXIgdG8gcmUgY2FsbCBmb3JtYXRMYXllckRhdGFcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXh0U3RhdGUsIHt2YWx1ZTogY3VycmVudFRpbWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBzdGF0dXMgb2YgdGhlIGVkaXRvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRvck1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvck1vZGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHNrZXRjaGVzRW5hYmxlZCA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXM7XG4gIGlmIChcbiAgICAhc2tldGNoZXNFbmFibGVkICYmXG4gICAgKG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX1BPSU5UIHx8IG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX0xJTkVTVFJJTkcpXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBtb2RlLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xufTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTpcbiAgICAgICAgbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWRcbiAgICAgICAgICA/IGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJ1xuICAgICAgICAgICAgPyBzdGF0ZS5lZGl0b3IubW9kZVxuICAgICAgICAgICAgOiBFRElUT1JfTU9ERVMuRURJVFxuICAgICAgICAgIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZTogVmlzU3RhdGUsIGZlYXR1cmU/OiBGZWF0dXJlIHwgbnVsbCk6IEZlYXR1cmUgfCBudWxsIHtcbiAgaWYgKCFmZWF0dXJlPy5pZCkge1xuICAgIHJldHVybiBmZWF0dXJlIHx8IG51bGw7XG4gIH1cbiAgaWYgKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBmZWF0dXJlLmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIH1cbiAgY29uc3QgZnJvbUVkaXRvciA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmVhdHVyZS5pZCk7XG4gIGlmIChmcm9tRWRpdG9yKSB7XG4gICAgcmV0dXJuIGZyb21FZGl0b3I7XG4gIH1cbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICAgIGlmIChmaWx0ZXI/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmVhdHVyZTtcbn1cblxuLyoqXG4gKiBTZXQgdXNlci1mYWNpbmcgR2VvSlNPTiBwcm9wZXJ0aWVzIG9uIGEgc2tldGNoIG9yIHBvbHlnb24tZmlsdGVyIGZlYXR1cmUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBwcm9wZXJ0aWVzfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZSwgZmVhdHVyZSk7XG4gIGlmICghc291cmNlPy5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRGZWF0dXJlID0gbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMoc291cmNlLCBwcm9wZXJ0aWVzKTtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShuZXh0RmVhdHVyZSk7XG4gIGNvbnN0IG5leHRFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBmaWx0ZXJJZFxuICAgICAgPyBzdGF0ZS5lZGl0b3IuZmVhdHVyZXNcbiAgICAgIDogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLm1hcChpdGVtID0+IChpdGVtLmlkID09PSBuZXh0RmVhdHVyZS5pZCA/IG5leHRGZWF0dXJlIDogaXRlbSkpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTpcbiAgICAgIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBuZXh0RmVhdHVyZS5pZFxuICAgICAgICA/IG5leHRGZWF0dXJlXG4gICAgICAgIDogc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5leHRFZGl0b3JcbiAgfTtcblxuICBpZiAoIWZpbHRlcklkKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4IDwgMCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShuZXh0RmVhdHVyZSwgZmlsdGVySWQpXG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcblxuICAgIC8vIExhc3QgbGF5ZXIgcmVtb3ZlZDogdHVybiB0aGUgZmlsdGVyIHBvbHlnb24gYmFjayBpbnRvIGEgc2tldGNoXG4gICAgaWYgKCFuZXdMYXllcklkLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2tldGNoRmVhdHVyZSA9IHRvU2tldGNoRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgIGNvbnN0IHN0YXRlV2l0aG91dEZpbHRlciA9IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvci5mZWF0dXJlcywgc2tldGNoRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBza2V0Y2hGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGx5IHBvbHlnb24gZmlsdGVyIHRvIGFsbCB2aXNpYmxlIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmVhdHVyZX0gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gIGNvbnN0IG5ld1N0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZSxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHZpc2libGVMYXllcklkcyA9IGdldChwYXlsb2FkLCAndmlzaWJsZUxheWVySWRzJyk7XG4gIGNvbnN0IGFsbExheWVySWRzID0gQXJyYXkuaXNBcnJheSh2aXNpYmxlTGF5ZXJJZHMpXG4gICAgPyB2aXNpYmxlTGF5ZXJJZHNcbiAgICA6IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5pc1Zpc2libGUpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBhbGxMYXllcklkc1xuICB9KTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW4sIG1vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBzb3J0TW9kZSA9IG1vZGU7XG4gIGlmICghc29ydE1vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50TW9kZSA9IGdldChkYXRhc2V0LCBbJ3NvcnRDb2x1bW4nLCBjb2x1bW5dKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2hvdWxkIGJlIGZpeGFibGUgaW4gYSBUUyBmaWxlXG4gICAgc29ydE1vZGUgPSBjdXJyZW50TW9kZVxuICAgICAgPyBPYmplY3Qua2V5cyhTT1JUX09SREVSKS5maW5kKG0gPT4gbSAhPT0gY3VycmVudE1vZGUpXG4gICAgICA6IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gc29ydERhdGFzZXRCeUNvbHVtbihkYXRhc2V0LCBjb2x1bW4sIHNvcnRNb2RlKTtcbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc29ydGVkLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RGF0YXNldCA9IHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0LCBjb2x1bW4pO1xuXG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDb3B5IGNvbHVtbiBjb250ZW50IGFzIHN0cmluZ3NcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5Db3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge3R5cGV9ID0gZGF0YXNldC5maWVsZHNbZmllbGRJZHhdO1xuICBjb25zdCB0ZXh0ID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChyb3cgPT4gcGFyc2VGaWVsZFZhbHVlKHJvdy52YWx1ZUF0KGZpZWxkSWR4KSwgdHlwZSksIHRydWUpXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIGNvcHkodGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFNldCBkaXNwbGF5IGZvcm1hdCBmcm9tIGNvbHVtbnMgZnJvbSB1c2VyIHNlbGVjdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZvcm1hdHN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHM7XG4gIE9iamVjdC5rZXlzKGZvcm1hdHMpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgICBpZiAoZmllbGRJZHggPj0gMCkge1xuICAgICAgY29uc3QgZGlzcGxheUZvcm1hdCA9IGZvcm1hdHNbY29sdW1uXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gbmV3RmllbGRzW2ZpZWxkSWR4XTtcbiAgICAgIG5ld0ZpZWxkcyA9IHN3YXBfKG1lcmdlXyh7ZGlzcGxheUZvcm1hdH0pKGZpZWxkKSBhcyB7aWQ6IHN0cmluZ30pKFxuICAgICAgICBuZXdGaWVsZHMgYXMge2lkOiBzdHJpbmd9W11cbiAgICAgICkgYXMgRmllbGRbXTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzIGFzIEZpZWxkW119KTtcbiAgbGV0IG5ld1N0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgLy8gdXBkYXRlIGNvbG9yRmllbGQgZGlzcGxheUZvcm1hdFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllcnM6IG5ld1N0YXRlLmxheWVycy5tYXAobGF5ZXIgPT5cbiAgICAgIGxheWVyLmNvbmZpZz8uY29sb3JGaWVsZD8ubmFtZSAmJiBsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICBjb2xvckZpZWxkOiB7XG4gICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvckZpZWxkLFxuICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2xheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWVdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBsYXllclxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbnR5cGUgTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQgPSB7XG4gIGRhdGFzZXQ6IFZpc1N0YXRlWydkYXRhc2V0cyddW3N0cmluZ107XG4gIGZpZWxkOiBGaWVsZDtcbn07XG5cbmZ1bmN0aW9uIGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMgfCBudWxsKTogdW5rbm93bltdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpbHRlclByb3BzICYmICdtYXBwZWRWYWx1ZScgaW4gZmlsdGVyUHJvcHMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZSkpIHtcbiAgICByZXR1cm4gZmlsdGVyUHJvcHMubWFwcGVkVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24geWllbGRGb3JQYWludCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3Moe2RhdGFzZXQsIGZpZWxkfTogTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQpIHtcbiAgLy8gWWllbGQgc28gdGhlIGRhdGEgdGFibGUgYW5kIHBlci1jb2x1bW4gbG9hZGluZyBzcGlubmVycyBjYW4gcGFpbnQgZmlyc3QuXG4gIGF3YWl0IHlpZWxkRm9yUGFpbnQoKTtcbiAgY29uc3QgZmlsdGVyUHJvcHMgPSBmaWVsZC5maWx0ZXJQcm9wcyB8fCBkYXRhc2V0LmdldENvbHVtbkZpbHRlclByb3BzKGZpZWxkLm5hbWUpO1xuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzKTtcbiAgY29uc3QgdmFsdWVzID0gbWFwcGVkVmFsdWUgPz8gY29sbGVjdENvbHVtblZhbHVlcyhkYXRhc2V0LmRhdGFDb250YWluZXIsIGZpZWxkLmZpZWxkSWR4KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0Q29sdW1uU3RhdGlzdGljcyh7XG4gICAgdmFsdWVzLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZVxuICB9KTtcblxuICByZXR1cm4ge3Jlc3VsdCwgZmlsdGVyUHJvcHN9O1xufVxuXG5jb25zdCBMT0FEX0NPTFVNTl9TVEFUU19UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzLFxuICAnTE9BRF9DT0xVTU5fU1RBVFNfVEFTSydcbik7XG5cbi8qKlxuICogU3RhcnQgbG9hZGluZyBjb2x1bW4gc3RhdGlzdGljcyBmb3Igb25lIG9yIG1vcmUgZmllbGRzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmllbGROYW1lc1RvTG9hZCA9IHRvQXJyYXkoZmllbGROYW1lKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkc1RvTG9hZCA9IGRhdGFzZXQ/LmZpZWxkcy5maWx0ZXIoZiA9PiBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGYubmFtZSkpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGZpZWxkLm5hbWUpID8gey4uLmZpZWxkLCBpc0xvYWRpbmdTdGF0czogdHJ1ZX0gOiBmaWVsZFxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuXG4gIGNvbnN0IHRhc2tzID0gZmllbGRzVG9Mb2FkLm1hcChmID0+XG4gICAgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyh7ZGF0YXNldDogbmV3RGF0YXNldCwgZmllbGQ6IGZ9KS5iaW1hcChcbiAgICAgICh7cmVzdWx0LCBmaWx0ZXJQcm9wc30pID0+IGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MobmV3RGF0YXNldC5pZCwgZi5uYW1lLCByZXN1bHQsIGZpbHRlclByb3BzKSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IGxvYWRDb2x1bW5TdGF0c0Vycm9yKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgZXJyb3IpXG4gICAgKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICByZXR1cm4gd2l0aFRhc2sobmV4dFN0YXRlLCB0YXNrcyk7XG59XG5cbi8qKlxuICogUGVyc2lzdCBsb2FkZWQgY29sdW1uIHN0YXRpc3RpY3Mgb24gdGhlIGZpZWxkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtyZXN1bHQsIGZpbHRlclByb3BzLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyUHJvcHMgPSB7XG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgY29sdW1uU3RhdHM6IHJlc3VsdFxuICB9O1xuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGZpbHRlclByb3BzOiBuZXdGaWx0ZXJQcm9wcywgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIENsZWFyIGxvYWRpbmcgZmxhZyB3aGVuIGNvbHVtbiBzdGF0aXN0aWNzIGZhaWwuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIENvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGVkaXRvciBza2V0Y2ggZmVhdHVyZXMgaW50byBhIEdlb0pTT04gZGF0YXNldC9sYXllciBhbmQgY2xlYXIgdGhlIHNrZXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHByb2Nlc3NHZW9qc29uKGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjb252ZXJ0IGRyYXduIGdlb21ldHJ5IHRvIGEgbGF5ZXI6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdjb252ZXJ0LWVkaXRvci1mZWF0dXJlcydcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFyZWRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYWJlbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTApICsgMTA7XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKGNsZWFyZWRTdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZHJhd24tZ2VvbWV0cnktJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYERyYXduIEdlb21ldHJ5ICR7bGFiZWxJZH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvcHkgaW4tbWVtb3J5IHJvd3MgKG9yIGxvYWRlZCB2ZWN0b3ItdGlsZSBmZWF0dXJlcykgaW5zaWRlIHRoZSBzZWxlY3RlZFxuICogRHJhdyBvbiBNYXAgcG9seWdvbiBpbnRvIGEgbmV3IGRhdGFzZXQuIFJhc3RlciB0aWxlcyBkb3dubG9hZCBhIFBORyBjbGlwIGFuZCBhXG4gKiBHZW9KU09OIHNpZGVjYXIgKGJib3ggcmVjdGFuZ2xlICsgc3RhdHMpIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBkYXRhc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2xheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuRXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmVhdHVyZSA9IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgY29uc3QgZGF0YUlkID0gbGF5ZXI/LmNvbmZpZy5kYXRhSWQ7XG4gIGxldCBkYXRhc2V0ID0gZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IG51bGw7XG5cbiAgaWYgKCFsYXllciB8fCAhZGF0YXNldCB8fCAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaXNUaWxlZEV4dHJhY3QgPSBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpIHx8IGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcik7XG5cbiAgLy8gR1BVIHJhbmdlL3RpbWUgZmlsdGVycyBhcmUgbm90IHJlZmxlY3RlZCBpbiBmaWx0ZXJlZEluZGV4OyBldmFsdWF0ZSB0aGVtIG9uIENQVVxuICAvLyB0aGUgc2FtZSB3YXkgZXhwb3J0IGRhdGEgZG9lcywgdGhlbiBjbGlwIHRoZSByZXN1bHQgdG8gdGhlIGRyYXdpbmcuXG4gIGlmICghaXNUaWxlZEV4dHJhY3QpIHtcbiAgICBzdGF0ZSA9IGZpbHRlckRhdGFzZXRDUFUoc3RhdGUsIGRhdGFJZCk7XG4gICAgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IGV4dHJhY3RlZDtcbiAgdHJ5IHtcbiAgICBleHRyYWN0ZWQgPSBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUoe2xheWVyLCBkYXRhc2V0LCBmZWF0dXJlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkLnJvd0NvdW50KSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCByYXN0ZXIgcGl4ZWxzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCB2ZWN0b3IgdGlsZSBmZWF0dXJlcyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnXG4gICAgICAgICAgICAgIDogJ05vIHJvd3MgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJyxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZS1lbXB0eSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpKSB7XG4gICAgY29uc3QgcG9seWdvbiA9IGZlYXR1cmU7XG4gICAgY29uc3QgZG93bmxvYWQgPVxuICAgICAgdHlwZW9mIChsYXllciBhcyBhbnkpLmRvd25sb2FkQ2xpcCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IFByb21pc2UucmVzb2x2ZSgobGF5ZXIgYXMgYW55KS5kb3dubG9hZENsaXAocG9seWdvbikpXG4gICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHtwbmc6IGZhbHNlLCBqc29uOiBmYWxzZX0pO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgVU5XUkFQX1RBU0soZG93bmxvYWQpLmJpbWFwKFxuICAgICAgICAocmVzdWx0OiB7cG5nPzogYm9vbGVhbn0gfCBudWxsKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIHJlc3VsdD8ucG5nXG4gICAgICAgICAgICAgID8gc3VjY2Vzc05vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRG93bmxvYWRlZCByYXN0ZXIgY2xpcCBpbWFnZSBhbmQgc3RhdHMgZmlsZScsXG4gICAgICAgICAgICAgICAgICBpZDogJ2V4dHJhY3QtcmFzdGVyLWNsaXAnXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRmFpbGVkIHRvIGRvd25sb2FkIHJhc3RlciBjbGlwIGltYWdlJyxcbiAgICAgICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgIGVyciA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBkb3dubG9hZCByYXN0ZXIgY2xpcDogJHtcbiAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID1cbiAgICAgIGV4dHJhY3RlZC5raW5kID09PSAnZ2VvanNvbidcbiAgICAgICAgPyBwcm9jZXNzR2VvanNvbih7XG4gICAgICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgZmVhdHVyZXM6IGV4dHJhY3RlZC5mZWF0dXJlc1xuICAgICAgICAgIH0pXG4gICAgICAgIDoge2ZpZWxkczogZXh0cmFjdGVkLmZpZWxkcywgcm93czogZXh0cmFjdGVkLnJvd3N9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBleHRyYWN0LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBFeHRyYWN0ZWQgJHtkYXRhc2V0LmxhYmVsfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4obmV4dFZhbHVlID09PSAwICYmXG4gICAgKE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fSkubGVuZ3RoIHx8XG4gICAgICBPYmplY3Qua2V5cyhzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyB8fCB7fSkubGVuZ3RoKVxuICAgICAgPyB7bG9hZGluZ1Byb2dyZXNzOiB7fSwgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9fVxuICAgICAgOiB7fSlcbiAgfTtcbn07XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgaHlkcmF0ZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcGVyY2VudCwgcGhhc2V9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgY29uc3QgcHJvY2Vzc2luZyA9IHBoYXNlID09PSAncHJvY2Vzc2luZyc7XG4gIGlmIChcbiAgICBzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3M/LltpZF0gPT09IG5leHRQZXJjZW50ICYmXG4gICAgQm9vbGVhbihzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZz8uW2lkXSkgPT09IHByb2Nlc3NpbmdcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ1Byb2dyZXNzOiB7XG4gICAgICAuLi5zdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MsXG4gICAgICBbaWRdOiBuZXh0UGVyY2VudFxuICAgIH0sXG4gICAgLi4uKHByb2Nlc3NpbmdcbiAgICAgID8ge1xuICAgICAgICAgIGxvYWRpbmdQcm9jZXNzaW5nOiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyxcbiAgICAgICAgICAgIFtpZF06IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDoge30pXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbGF5ZXJUaW1lSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtsYXllclRpbWVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoZmlsdGVyLCB1cGRhdGVkUGxvdFR5cGUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5ld0ZpbHRlcik7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtkZWxldGVPcmlnaW5hbERhdGFzZXQ/OiBib29sZWFufSA9IHt9XG4pOiBUIHtcbiAgLy8gVGhlIHNhbWUgaWQgbWVhbnMgdGhlIG5ldyB0YWJsZSBvY2N1cGllcyB0aGUgb2xkIHNsb3QsIHNvIHRoZSBwcmV2aW91cyByb3dzIGhhdmUgdG8gZ28uXG4gIGNvbnN0IGRlbGV0ZU9yaWdpbmFsRGF0YXNldCA9IG9wdGlvbnMuZGVsZXRlT3JpZ2luYWxEYXRhc2V0ICE9PSBmYWxzZSB8fCBkYXRhSWQgPT09IGRhdGFJZFRvVXNlO1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGlmXyhkZWxldGVPcmlnaW5hbERhdGFzZXQsIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pKVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtkZWxldGVPcmlnaW5hbERhdGFzZXQ/OiBib29sZWFufSA9IHt9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IGRlbGV0ZU9yaWdpbmFsRGF0YXNldCA9IG9wdGlvbnMuZGVsZXRlT3JpZ2luYWxEYXRhc2V0ICE9PSBmYWxzZSB8fCBkYXRhSWQgPT09IGRhdGFJZFRvVXNlO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UsIHtkZWxldGVPcmlnaW5hbERhdGFzZXR9KTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gV2hlbiB0aGUgb3JpZ2luYWwgdGFibGUgc3RheXMsIHRoZSByZXBsYWNlbWVudCB0YWtlcyBpdHMgcGxhY2UgYW5kIHRoZSBvcmlnaW5hbCBmb2xsb3dzIGl0LlxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykuZmxhdE1hcChkID0+IHtcbiAgICBpZiAoZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gW2RdO1xuICAgIH1cbiAgICByZXR1cm4gZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID8gW2RhdGFJZFRvVXNlXSA6IFtkYXRhSWRUb1VzZSwgZF07XG4gIH0pO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllci5cbiAgICAvLyBLZWVwIHRoZSBvbmVzIG9mIGEgZGF0YXNldCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZCBub3QgbWVyZ2VkIGJhY2sgeWV0OlxuICAgIC8vIGl0cyBsYXllcnMgYXJlIG5vIGxvbmdlciBpbiB0aGUgY3VycmVudCBzcGxpdCBtYXBzLlxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoXG4gICAgICBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLFxuICAgICAgc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW11cbiAgICApO1xuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyID0gWy4uLnByZXNlcnZlTGF5ZXJPcmRlcl07XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFRoZSBvcmRlciB0byBwcmVzZXJ2ZSBmb3IgdGhlIGl0ZW1zIHRoYXQgd2lsbCBiZSBtZXJnZWQgYmFjay5cbiAqXG4gKiBgaWRzYCBjb21lcyBmcm9tIHRoZSBzZXJpYWxpemVkIHN0YXRlLCBzbyBpdCBsaXN0cyBldmVyeXRoaW5nIGJ1dCB0aGUgaXRlbXNcbiAqIGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ286IGFuIGFwcCByZWZyZXNoaW5nIHNldmVyYWxcbiAqIGRhdGFzZXRzIGluIGEgcm93IHByZXBhcmVzIHRoZSBzZWNvbmQgcmVwbGFjZW1lbnQgYmVmb3JlIHRoZSBmaXJzdCBvbmUnc1xuICogaXRlbXMgaGF2ZSBtZXJnZWQgYmFjay4gV3JpdGluZyBgaWRzYCBhcyBpdCBpcyB3b3VsZCBkcm9wIHRob3NlLCBhbmRcbiAqIGBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyYCBwdXRzIGFuIGl0ZW0gaXQgY2Fubm90IHBsYWNlIGF0IHRoZSBmcm9udCDigJRcbiAqIHNvIHRoZXkgd291bGQgY29tZSBiYWNrIHJldmVyc2VkLiBXaGVyZSB0aGV5IGJlbG9uZyBpcyB3aGF0IHRoZSBvcmRlciB3cml0dGVuXG4gKiB3aGVuIHRoZXkgd2VyZSBwYXJrZWQgYWxyZWFkeSBzYXlzLCBzbyB0aGF0IG9yZGVyIGlzIGtlcHQgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gIHByZXZpb3VzT3JkZXI6IHN0cmluZ1tdID0gW10sXG4gIGlkczogc3RyaW5nW10sXG4gIHBhcmtlZDoge2lkPzogc3RyaW5nfVtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhcmtlZElkcyA9IHBhcmtlZFxuICAgIC5tYXAoaXRlbSA9PiBpdGVtPy5pZClcbiAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiAhaWRzLmluY2x1ZGVzKGlkIGFzIHN0cmluZykpO1xuXG4gIGlmICghcGFya2VkSWRzLmxlbmd0aCkge1xuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICBjb25zdCBrbm93biA9IG5ldyBTZXQoWy4uLmlkcywgLi4ucGFya2VkSWRzXSk7XG4gIGNvbnN0IG9yZGVyZWQgPSAocHJldmlvdXNPcmRlciB8fCBbXSkuZmlsdGVyKGlkID0+IGtub3duLmhhcyhpZCkpO1xuICBjb25zdCByZXN0ID0gWy4uLmlkcywgLi4ucGFya2VkSWRzXS5maWx0ZXIoaWQgPT4gIW9yZGVyZWQuaW5jbHVkZXMoaWQpKTtcblxuICByZXR1cm4gWy4uLm9yZGVyZWQsIC4uLnJlc3RdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2RhdGFJZCwgZGF0YUlkVG9Vc2V9OiB7ZGF0YUlkOiBzdHJpbmc7IGRhdGFJZFRvVXNlOiBzdHJpbmd9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUubWVyZ2Vycy5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdVN0YXRlLFxuICAgICAge3Byb3AsIHRvTWVyZ2VQcm9wLCByZXBsYWNlUGFyZW50RGF0YXNldElkcywgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWQsIHByZXNlcnZlT3JkZXJ9XG4gICAgKSA9PiB7XG4gICAgICAvLyBnZXQgZGF0YXNldCBpZHMgdGhhdCBhcmUgZGVwZW5kcyBvbiB0aGlzIGRhdGFzZXRcbiAgICAgIGNvbnN0IHByb3BzID0gdG9BcnJheShwcm9wKTtcbiAgICAgIGNvbnN0IHRvTWVyZ2VQcm9wcyA9IHRvQXJyYXkodG9NZXJnZVByb3ApO1xuICAgICAgY29uc3Qgc2F2ZWRQcm9wcyA9IHNlcmlhbGl6ZWRTdGF0ZSA/IHByb3BzLm1hcChwID0+IHNlcmlhbGl6ZWRTdGF0ZVtwXSkgOiBbXTtcblxuICAgICAgbGV0IHJlcGxhY2VkU3RhdGUgPSBhY2N1U3RhdGU7XG4gICAgICBzYXZlZFByb3BzLmZvckVhY2goKHByb3BWYWx1ZSwgaSkgPT4ge1xuICAgICAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXaGF0IGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ28gYW5kIGhhcyBub3RcbiAgICAgICAgLy8gbWVyZ2VkIGJhY2sgeWV0LCByZWFkIGJlZm9yZSB0aGlzIG9uZSBwYXJrcyBhbnl0aGluZyBvZiBpdHMgb3duLlxuICAgICAgICBjb25zdCBwYXJrZWRFbHNld2hlcmUgPVxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0b0FycmF5KHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0gPz8gW10pXG4gICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbSA9XG4gICAgICAgICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM/Lihwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpIHx8XG4gICAgICAgICAgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gICAgICAgIHJlcGxhY2VkU3RhdGUgPSByZXBsYWNlZEl0ZW1cbiAgICAgICAgICA/IHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKHJlcGxhY2VkU3RhdGUsIHJlcGxhY2VkSXRlbSwgbWVyZ2VyT3B0aW9ucylcbiAgICAgICAgICA6IHJlcGxhY2VkU3RhdGU7XG5cbiAgICAgICAgLy8gT25seSB3aGVuIHRoaXMgZGF0YXNldCBoYWQgaXRlbXMgb2YgaXRzIG93biB0byBwYXJrLiBUaGUgdG9CZU1lcmdlZCBsaXN0XG4gICAgICAgIC8vIGNhbiBzdGlsbCBob2xkIGFub3RoZXIgZGF0YXNldCdzIGl0ZW1zLCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZFxuICAgICAgICAvLyBub3QgbWVyZ2VkIGJhY2sgeWV0OyBvdmVyd3JpdGluZyB0aGUgb3JkZXIgdGhleSB3ZXJlIHBhcmtlZCB3aXRoIHdvdWxkXG4gICAgICAgIC8vIG1lcmdlIHRoZW0gYmFjayBpbiByZXZlcnNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVwbGFjZWRJdGVtICYmXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICAgICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSxcbiAgICAgICAgICAgIHByb3BWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtLmlkKSxcbiAgICAgICAgICAgIHBhcmtlZEVsc2V3aGVyZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5jb25zdCBEQVRBU0VUX09QX0FERF9PUFRJT05TID0ge1xuICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLFxuICBjZW50ZXJNYXA6IGZhbHNlLFxuICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChzdGF0ZTogVmlzU3RhdGUsIHByb3RvOiBQcm90b0RhdGFzZXQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHJlc3VsdElkID0gcHJvdG8uaW5mby5pZDtcbiAgaWYgKCFyZXN1bHRJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoc3RhdGUuZGF0YXNldHNbcmVzdWx0SWRdKSB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRGF0YXNldFVwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IHJlc3VsdElkLCBkYXRhOiBwcm90by5kYXRhfSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBuZXh0U3RhdGUuZGF0YXNldHNbcmVzdWx0SWRdO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgfVxuICAgIGV4aXN0aW5nLm1ldGFkYXRhID0ge1xuICAgICAgLi4uZXhpc3RpbmcubWV0YWRhdGEsXG4gICAgICAuLi5wcm90by5tZXRhZGF0YVxuICAgIH07XG4gICAgZXhpc3RpbmcubGFiZWwgPSBwcm90by5pbmZvLmxhYmVsIHx8IGV4aXN0aW5nLmxhYmVsO1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHByb3RvLFxuICAgIG9wdGlvbnM6IERBVEFTRVRfT1BfQUREX09QVElPTlNcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Hcm91cEJ5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5Hcm91cEJ5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZUdyb3VwQnkoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkpvaW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1bkpvaW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlSm9pbihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuU3BhdGlhbEpvaW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1blNwYXRpYWxKb2luVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZVNwYXRpYWxKb2luKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICByZW1vdmVEYXRhc2V0T3BVcGRhdGVyLFxuICBzZXRHcm91cEJ5Q29uZmlnVXBkYXRlcixcbiAgc2V0Sm9pbkNvbmZpZ1VwZGF0ZXIsXG4gIHNldFNwYXRpYWxKb2luQ29uZmlnVXBkYXRlclxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLElBQUksUUFBTyxZQUFZO0FBRS9CLE9BQU9DLElBQUksTUFBTSxtQkFBbUI7QUFDcEMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FBUUMsT0FBTyxJQUFJQyxPQUFPLFFBQU8sZUFBZTtBQUNoRCxPQUFPQyxTQUFTLE1BQU0sNkJBQTZCO0FBQ25ELE9BQU9DLEdBQUcsTUFBTSx1QkFBdUI7QUFDdkMsT0FBT0MsT0FBTyxNQUFNLDJCQUEyQjtBQUMvQyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxJQUFJLElBQUdDLHFCQUFxQixFQUFFQyxRQUFRLFFBQU8sa0JBQWtCO0FBRXRFO0FBQ0EsU0FDRUMsVUFBVSxFQUNWQyxXQUFXLEVBQ1hD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
6336
+ export function runSuitabilityUpdater(state, action) {
6337
+ var _executeSuitability = executeSuitability(state, action),
6338
+ nextState = _executeSuitability.state,
6339
+ proto = _executeSuitability.proto;
6340
+ return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
6341
+ }
6342
+ export { addGroupByUpdater, addJoinUpdater, addSpatialJoinUpdater, addSuitabilityUpdater, removeDatasetOpUpdater, setGroupByConfigUpdater, setJoinConfigUpdater, setSpatialJoinConfigUpdater, setSuitabilityConfigUpdater };
6343
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiRVhQQU5EX1pJUF9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MiLCJuZXh0RmlsZUJhdGNoIiwic2V0RmlsdGVyIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiZml0Qm91bmRzIiwiZml0TWFwQm91bmRzIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJhcHBseUZpbHRlckNvbmZpZyIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzIiwic2V0TG9hZGluZ1Byb2dyZXNzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwic25hcFRvTWFya3MiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJhcnJheUluc2VydCIsImNvbWJpbmVTcGxpdE1hcHNCeUluZGV4IiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImFyZUZpbHRlckZpZWxkVHlwZXNDb21wYXRpYmxlIiwiZGlzYWJsZUdwdUlmSW52ZXJ0ZWQiLCJmaWx0ZXJUeXBlVXNlc0dwdSIsImdldFBsb3RCYXNlSW5kZXhCeURhdGFJZCIsImVycm9yTm90aWZpY2F0aW9uIiwic3VjY2Vzc05vdGlmaWNhdGlvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSIsImlzUmFzdGVyVGlsZUV4dHJhY3RMYXllciIsImlzVmVjdG9yVGlsZUV4dHJhY3RMYXllciIsIm1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzIiwidG9Ta2V0Y2hGZWF0dXJlIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwiZ2V0RGVmYXVsdEZpbHRlciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwiaXNJblJhbmdlIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiaXNSZ2JDb2xvciIsInBhcnNlRmllbGRWYWx1ZSIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsInNldCIsInVwZGF0ZUZpbHRlclBsb3QiLCJyZW1vdmVGaWx0ZXJQbG90IiwiaXNMYXllckFuaW1hdGFibGUiLCJpc1NpZGVGaWx0ZXIiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwiZ2VuZXJhdGVIYXNoSWQiLCJ0b0FycmF5IiwiYXJyYXlNb3ZlIiwiQUxMX0ZJRUxEX1RZUEVTIiwiQU5JTUFUSU9OX1dJTkRPVyIsIkJBU0VfU1BFRUQiLCJDT01QQVJFX1RZUEVTIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiRURJVE9SX01PREVTIiwiRklMVEVSX1RZUEVTIiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJMQVlFUl9UWVBFUyIsIkZQUyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJQTE9UX1RZUEVTIiwiU09SVF9PUkRFUiIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJDSEFOTkVMX1NDQUxFUyIsIlNDQUxFX1RZUEVTIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsIkFubm90YXRpb25LaW5kIiwiRGF0YXNldFR5cGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJHRU9DT0RFUl9EQVRBU0VUX05BTUUiLCJHRU9DT0RFUl9JQ09OX0NPTE9SIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyIsImlzUG9pbnRDb3VudExhYmVsIiwiTEFZRVJfSURfTEVOR1RIIiwiTGF5ZXIiLCJMYXllckNsYXNzZXMiLCJhcHBseV8iLCJjb21wb3NlXyIsImZpbHRlck91dEJ5SWQiLCJpZl8iLCJtZXJnZV8iLCJwYXlsb2FkXyIsInBpY2tfIiwicmVtb3ZlRWxlbWVudEF0SW5kZXgiLCJzd2FwXyIsImlzVmFsaWRNZXJnZXIiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwicGFyc2VMYXllckNvbmZpZyIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplVmlzU3RhdGUiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJLZXBsZXJHTFNjaGVtYSIsImdldEZpbGVzVG9QYXJzZSIsImlzWmlwRmlsZU5hbWUiLCJsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQiLCJwcm9jZXNzR2VvanNvbiIsImJ1aWxkQ2hhbmdlQ29sdW1uVHlwZURhdGEiLCJmb3JtYXRDb2x1bW5UeXBlQ29udmVyc2lvbkVycm9yIiwiYXNzaWduR3B1Q2hhbm5lbCIsImJ1aWxkRGVsZXRlQ29sdW1uRGF0YSIsImJ1aWxkUmVuYW1lQ29sdW1uRGF0YSIsImNhbk11dGF0ZURhdGFzZXRTY2hlbWEiLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJwaW5UYWJsZUNvbHVtbnMiLCJzaG93QWxsVGFibGVDb2x1bW5zIiwidG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4iLCJzZXRGaWx0ZXJHcHVNb2RlIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInJlbWFwQ2hhcnRzRm9yRGF0YXNldCIsImZpbmRGaWVsZHNUb1Nob3ciLCJnZXRab29tT3BhY2l0eUFubm90YXRpb25UYXJnZXRJZCIsInJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwiZ2V0TmV3TGF5ZXJHcm91cCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsImdldEZsYXRMYXllck9yZGVyIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwiYWRkR3JvdXBCeVVwZGF0ZXIiLCJhZGRKb2luVXBkYXRlciIsImFkZFNwYXRpYWxKb2luVXBkYXRlciIsImFkZFN1aXRhYmlsaXR5VXBkYXRlciIsImV4ZWN1dGVHcm91cEJ5IiwiZXhlY3V0ZUpvaW4iLCJleGVjdXRlU3BhdGlhbEpvaW4iLCJleGVjdXRlU3VpdGFiaWxpdHkiLCJyZW1vdmVEYXRhc2V0T3BVcGRhdGVyIiwicmVtb3ZlT3BzRm9yRGF0YXNldHMiLCJzZXRHcm91cEJ5Q29uZmlnVXBkYXRlciIsInNldEpvaW5Db25maWdVcGRhdGVyIiwic2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyIiwic2V0U3VpdGFiaWxpdHlDb25maWdVcGRhdGVyIiwiZml4RWZmZWN0T3JkZXIiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJtZXJnZVRpbWVEb21haW5zIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsIm1lcmdlUGxvdEdyb3VwQnkiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwibWVyZ2VGaWx0ZXJEb21haW4iLCJpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsIm9wdGlvbmFsTWFwVGV4dCIsImNyZWF0ZUVmZmVjdCIsImZpbmRNYXBCb3VuZHMiLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwidGltZXpvbmUiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQUJTT0xVVEUiLCJsZWdlbmQiLCJoaWRlSW52aXNpYmxlTGF5ZXJzIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImxpbWl0U2VhcmNoIiwiY29sb3IiLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiYW5ub3RhdGlvbiIsInpvb21PcGFjaXR5IiwiY29udHJvbGxlcnMiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJ1bmRlZmluZWQiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsImdyb3VwQnlzIiwiam9pbnMiLCJzdWl0YWJpbGl0aWVzIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsInNwbGl0TWFwcyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJpc01lcmdpbmdEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFuaW1hdGlvbkNvbmZpZyIsImVkaXRvciIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YWdlZFRvQWRkIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ1Byb2Nlc3NpbmciLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwic2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIl9vYmplY3RTcHJlYWQiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4Iiwic2F2ZWRMYXllckNvbmZpZyIsIm5ld1BhcnNlZExheWVyIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsImtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbCIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsIm5ld0xheWVySWQiLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwidmlzdWFsQ2hhbm5lbHMiLCJjaGFubmVsTmFtZSIsImNoYW5uZWwiLCJjaGFubmVsUHJvcE5hbWVzIiwicHJvcCIsInNvbWUiLCJsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZXJyIiwiZSIsImYiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ1cGRhdGVsYXllclZpc2liaWx0eSIsImZpbHRlckluZGV4IiwiZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2RlZmluZVByb3BlcnR5IiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJhcmd1bWVudHMiLCJuZXdUZXh0TGFiZWwiLCJzbGljZSIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwibmFtZSIsImZpbHRlciIsImFkZEZpZWxkcyIsImluZGV4IiwiaW5jbHVkZXMiLCJvdGhlciIsImRlbGV0ZUZpZWxkcyIsImZkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYWYiLCJfdGV4dExhYmVsJGZpbmQkY29sbGkiLCJfdGV4dExhYmVsJGZpbmQiLCJjb2xsaXNpb25FbmFibGVkIiwiQm9vbGVhbiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJfdGV4dExhYmVsJCIsInZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhIiwibG9hZGVkTGF5ZXIiLCJhbGxvd0VtcHR5Q29sdW1uIiwiaXNWYWxpZFRvU2F2ZSIsInZhbGlkYXRlZCIsIm9sZExheWVyVHlwZSIsIm5ld0RhdGFzZXRGaWVsZHMiLCJmaWVsZHMiLCJyZW1hcHBlZEZpZWxkcyIsInZhbHVlcyIsIl9yZWYyIiwiZmllbGRLZXkiLCJjdXJyZW50RmllbGQiLCJtYXRjaGVkIiwiX3JlZjMiLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJpc0NvbmZpZ0FjdGl2ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTMiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJtYXliZUZpdE1hbnVhbExheWVyQm91bmRzIiwiZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllciIsImJvdW5kcyIsIm5ld1R5cGUiLCJvbGRJZCIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJoYXMiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIl90b1Byb3BlcnR5S2V5IiwicmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0IiwidmlzdWFsQ2hhbm5lbCIsImluY29taW5nIiwiX3R5cGVvZiIsImZvdW5kIiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJjaGFubmVsU2NhbGVUeXBlIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiY2hhbm5lbEtleSIsImplbmtzIiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWY0IiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmNSIsImFuaW1hdGlvbldpbmRvdyIsInByZXZpb3VzV2luZG93IiwibmV4dEZpbHRlciIsInRpbWVSYW5nZSIsImludGVydmFsIiwiYWRqdXN0ZWQiLCJldmVyeSIsInYiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImluZGV4T2YiLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm5ld0ZpbHRlciIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwidXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZyIsImFmZmVjdGVkRGF0YXNldElkcyIsInVwZGF0ZWRGaWx0ZXJJbmRleCIsIl9maWx0ZXIkcGxvdFR5cGUiLCJzaG91bGRSZWZyZXNoTnVtZXJpY1Bsb3QiLCJwbG90VHlwZSIsImxpbmVDaGFydCIsInNoYXJlZERhdGFzZXRJZHMiLCJpbnZhbGlkYXRlZEZpbHRlciIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiY3VycmVudERhdGFJZCIsImZpZWxkTmFtZSIsImVuZEZpZWxkTmFtZSIsImVuZE5hbWUiLCJwcmV2aW91c1ZhbHVlIiwibmV4dERhdGFJZHMiLCJfaSIsIl9hcnIiLCJuZXh0Q2hhbm5lbHMiLCJjYW5kaWRhdGUiLCJjYW5SZWJpbmRGaWVsZCIsImZpZWxkVHlwZSIsIl9yZWY2IiwibWVyZ2VEb21haW4iLCJyZWJvdW5kRmlsdGVyIiwibmV4dE5hbWVzIiwibmV4dEZpZWxkSWR4IiwiZmllbGRJZHgiLCJncHUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJyZWJvdW5kRW5kRmlsdGVyIiwiX2FwcGx5VGltZUZpbHRlckVuZEZpMiIsImNsZWFyZWRFbmRGaWx0ZXIiLCJkb21haW5TdGVwcyIsInN0ZXAiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiX2kyIiwiX2FycjIiLCJuZXh0VmFsIiwiZGF0YXNldElkcyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiX2FwcGx5VGltZUZpbHRlckVuZEZpMyIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwic3VwcG9ydHNJbnZlcnNpb24iLCJfc3RhdGUkZGF0YXNldHMkZGF0YXMiLCJkaXNhYmxlRGF0YU9wZXJhdGlvbiIsImludmVydGVkIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNyIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUiLCJfbmV3RmlsdGVyJHBsb3RUeXBlMyIsIm5ld1Byb3AiLCJwcmV2aW91c051bWVyaWNJbnRlcnZhbCIsIm51bWVyaWNJbnRlcnZhbCIsInBsb3RUeXBlVXBkYXRlIiwiX25ld0ZpbHRlciRwbG90VHlwZTIiLCJncm91cEJ5IiwiY2hhcnRUeXBlIiwieUF4aXMiLCJoaXN0b2dyYW0iLCJudW1lcmljSW50ZXJ2YWxDaGFuZ2VkIiwiYmlucyIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY4Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY5Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJvcGVuZWRGaWx0ZXIiLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJfc3RhdGUkZmlsdGVycyRpZHgiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmMCIsImxheWVyVG9SZW1vdmUiLCJyZW1vdmVDaGFydHNBbmRGaWx0ZXJzIiwiY2hhcnQiLCJpc0xheWVyQ2hhcnRDb25maWciLCJyZW9yZGVyTGF5ZXJVcGRhdGVyIiwiX3JlZjEiLCJvcmRlciIsImFkZExheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImxheWVySWRzVG9SZW1vdmUiLCJ1cGRhdGVMYXllckdyb3VwVXBkYXRlciIsIm9wdGlvbnMiLCJuZXdMYXllckdyb3VwIiwibGF5ZXJJZHMiLCJhY2MiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxMCIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwicGFyZW50R3JvdXAiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTIiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEzIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJzaG91bGRSZW1vdmUiLCJyZW1vdmVkIiwicmVtb3ZlZElkcyIsImZpbHRlcklkcyIsImZsYXRNYXAiLCJfY2hhcnQkY3Jvc3NGaWx0ZXIiLCJjcm9zc0ZpbHRlciIsInJlZHVjZVJpZ2h0IiwiYWRkQ2hhcnRVcGRhdGVyIiwiX3JlZjE0IiwiX2NoYXJ0JGRpc3BsYXkkaXNDb25mIiwiX2NoYXJ0JGRpc3BsYXkiLCJleGlzdGluZyIsImlzSnNvbkVkaXRvckFjdGl2ZSIsInVwZGF0ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNSIsIl9uZXh0JGNyb3NzRmlsdGVyMiIsIl9wcmV2JGNyb3NzRmlsdGVyIiwiX3ByZXYkY3Jvc3NGaWx0ZXIyIiwiX25leHQkY3Jvc3NGaWx0ZXIzIiwiZGF0YUlkQ2hhbmdlZCIsImxheWVySWRDaGFuZ2VkIiwiX25leHQkY3Jvc3NGaWx0ZXIiLCJvd25lZEZpbHRlcklkcyIsInJlbW92ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNiIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX3JlZjE3IiwiX2NvbmZpZyR0ZXh0U2lkZSIsIl9yZWYxOCIsIl9jb25maWckdGV4dFZlcnRpY2FsUCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hcm1MZW5ndGgyIiwiX2FybUxlbmd0aDMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRTaWRlIiwiVEVYVCIsInRleHRWZXJ0aWNhbFBvc2l0aW9uIiwidmVydGljYWwiLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIlBPSU5UIiwiYXJtTGVuZ3RoIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwiYSIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIwIiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIxIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMiIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJyZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlciIsIl9zdGF0ZSRkYXRhc2V0cyIsIl9kYXRhc2V0IiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJwdXNoIiwicmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyIsIl9yZWYyMyIsIl9pbnRlcmFjdGlvbkNvbmZpZyIsIl9jb25maWckZmllbGRzVG9TaG93IiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyIiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJ1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciIsInVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIiLCJuZXdDb2xvciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiX3JlZjI0IiwiX3JlZjI0JHBheWxvYWQiLCJwYXlsb2FkIiwiX3JlZjI0JHBheWxvYWQkY29uZmlnIiwiX3JlZjI0JHBheWxvYWQkb3B0aW9uIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJtZXJnZSIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJnZW9jb2RlckxheWVyIiwiX2NvbmZpZyRjb25maWckY29sb3IiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJfcmVmMjUiLCJldnQiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsIl9yZWYyNiIsImhhc1RhYnVsYXJEYXRhc2V0RGF0YSIsImRhdGEiLCJfZGF0YSRyb3dzIiwiX2RhdGEkY29scyIsInJvd3MiLCJjb2xzIiwiYXJyb3dUYWJsZSIsIm5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUiLCJfZGF0YXNldCRpbmZvIiwiX2RhdGFzZXQkbWV0YWRhdGEiLCJFWFRFUk5BTExZX0hPU1RFRCIsIm1ldGFkYXRhIiwic291cmNlIiwiaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfeCIsIl9oeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsImFwcGx5IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUyIiwiX3JlZjI3IiwiX2RhdGFzZXQkbWV0YWRhdGE3IiwiX2RhdGFzZXQkbWV0YWRhdGE4Iiwib25Qcm9ncmVzcyIsImxvYWRlZCIsIl9kYXRhc2V0JG1ldGFkYXRhOSIsIndyYXAiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJhcmciLCJhYnJ1cHQiLCJmb3JtYXQiLCJieXBhc3NDYWNoZSIsInNlbnQiLCJFcnJvciIsImV0YWciLCJsYXN0TW9kaWZpZWQiLCJsYXN0RmV0Y2hlZEF0IiwiRGF0ZSIsIm5vdyIsInJlZnJlc2hTdGF0dXMiLCJzdG9wIiwiSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsIkZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyIsImZyb21Qcm9taXNlIiwiX3JlZjI4IiwiX2NhbGxlZSIsIm1lc3NhZ2UiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiX3gyIiwiZ2V0RGF0YXNldFByb2dyZXNzSWQiLCJfZGF0YXNldCRpbmZvMiIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsImNyZWF0ZU5ld0RhdGFFbnRyeVRhc2siLCJwcm9ncmVzc0lkIiwicHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudCIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJwaGFzZSIsImNoYWluIiwiaHlkcmF0ZWQiLCJ0YXNrIiwiY2xlYXJMb2FkaW5nUHJvZ3Jlc3MiLCJpZHMiLCJjdXJyZW50IiwicHJvY2Vzc2luZyIsIm5leHRQcm9jZXNzaW5nIiwicGF0Y2hEYXRhc2V0TWV0YWRhdGEiLCJwYXRjaCIsInJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfeDMiLCJfcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl9jYWxsZWUzIiwiX3JlZjI5IiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJyZWZyZXNoRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzAiLCJfZGF0YXNldCRtZXRhZGF0YTMiLCJfZGF0YXNldCRtZXRhZGF0YTQiLCJuZXh0RGF0YXNldCIsInJlZnJlc2hFcnJvciIsInJlZnJlc2hQcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50MiIsImJpbWFwIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmMzEiLCJfZGF0YXNldCRtZXRhZGF0YTUiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJuZXh0UGVyY2VudCIsIm1heCIsIm1pbiIsImZpZWxkTmFtZXNFcXVhbCIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInVwZGF0ZWREYXRhc2V0cyIsIm5leHRGaWx0ZXJzIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYzMiIsIl9yZXN1bHQkZGF0YSIsIm1ldGFkYXRhUGF0Y2giLCJzY2hlbWFVbmNoYW5nZWQiLCJub3RNb2RpZmllZCIsInVwZGF0ZSIsInJlZnJlc2hlZCIsInJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhIiwiaXNEYXRhc2V0Um93TGlzdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjMzIiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzQiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzUiLCJTdHJpbmciLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsInJlYWR5VGFza3MiLCJyZW1vdGVUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiaHlkcmF0ZVByb2dyZXNzIiwiX3JlZjM2IiwiZGF0YXNldEluZGV4IiwiX3JlZjM2JGluZm8iLCJyZXN0IiwiX2V4Y2x1ZGVkMiIsInByb3RvIiwicmVtb3RlIiwicHJvZ3Jlc3NJZHMiLCJiYXRjaGVzIiwidGFza3MiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsImNoYW5nZSIsImJhdGNoIiwiYmF0Y2hJbmRleCIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwib25GaW5pc2giLCJhZGRUb01hcE9wdGlvbnMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzciLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsInJlYXNvbiIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibGF5ZXJzTm90SW5TcGxpdE1hcHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheSIsInJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYSIsInJlbmFtZXMiLCJuZXdUYWJsZSIsIl9sYXllciRjb25maWckdGV4dExhYiIsImNvbmZpZ1BhdGNoIiwiY29sdW1uc1BhdGNoIiwiY29sdW1uc0NoYW5nZWQiLCJjb2x1bW5zIiwiX3JlZjM4IiwiX3JlZjM5IiwiY2tleSIsImNvbCIsIl9yZWY0MCIsImZpZWxkQ29uZmlnIiwiX3RsJGZpZWxkIiwiX3RsJGZpZWxkMiIsIl9yZW5hbWVzJG5hbWUiLCJsYXllckNvcHkiLCJhc3NpZ24iLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImhhc0FsbENvbHVtbnMiLCJGSUxURVJfUExPVF9ZX0FYSVNfVFlQRVMiLCJpbnRlZ2VyIiwicmVhbCIsImNsZWFyVGltZWxpbmVGaWx0ZXJTdGF0ZSIsIl9yZWY0MSIsIl9zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsIl9zeW5jVGltZWxpbmVNb2RlIiwic3luY1RpbWVsaW5lTW9kZSIsIl90aW1lQmlucyIsInRpbWVCaW5zIiwiX2xpbmVDaGFydCIsIl90aW1lem9uZSIsIl9pbnZlcnRUcmVuZENvbG9yIiwiaW52ZXJ0VHJlbmRDb2xvciIsIl9zaG93VGltZURpc3BsYXkiLCJzaG93VGltZURpc3BsYXkiLCJfZXhjbHVkZWQzIiwiZml4ZWREb21haW4iLCJmcmVlIiwicmVjb25jaWxlVGltZWxpbmVQbG90QWZ0ZXJQcmltYXJ5UmVtb3ZhbCIsIl9maWx0ZXIkeUF4aXMiLCJfcHJpbWFyeURhdGFzZXQkZmllbGQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsInByaW1hcnlEYXRhc2V0IiwiX2ZpbHRlciR5QXhpczIiLCJncm91cEJ5RmllbGROYW1lIiwiaGFzR3JvdXBCeUZpZWxkIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfcmVuYW1lcyRzb3J0ZWRDb2x1bW4iLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwiX3JlZjQyIiwic29ydENvbHVtbiIsIl9yZWY0MyIsInNvcnRlZENvbHVtbiIsInNvcnRNb2RlIiwidXBkYXRlU2NoZW1hIiwiZGF0YVJldmlzaW9uIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydE9yZGVyIiwibmV3RmllbGRzQnlOYW1lIiwiTWFwIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUyIiwiaGlkZGVuQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUzIiwibmV4dFNvcnRlZENvbHVtbiIsImRhdGFzZXRJZHNUb1JlZmlsdGVyIiwiX3JlbmFtZXMkb2xkTmFtZSIsIl9uZXdUYWJsZSRnZXRDb2x1bW5GaSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImdldENvbHVtbkZpZWxkSWR4IiwibmV4dEZpbHRlclR5cGUiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsImFkZCIsImRldGFjaGVkRmlsdGVyIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lMiIsInVwZGF0ZWQiLCJsZWF2aW5nVGltZUZpbHRlciIsIm9sZEVuZE5hbWUiLCJfcmVuYW1lcyRvbGRFbmROYW1lIiwiX3JlZjQ0IiwiX2FwcGx5VGltZUZpbHRlckVuZEZpNCIsIl9yZW5hbWVzJHVwZGF0ZWQkeUF4aSIsInlBeGlzTmFtZSIsInlBeGlzRmllbGQiLCJyZWNvbmNpbGVkIiwicmVtb3ZlZExheWVySWRzIiwiX2ZpbHRlciRsYXllcklkIiwic3Vydml2aW5nTGF5ZXJzIiwiZnJvbSIsIm5leHRGaWVsZHNUb1Nob3ciLCJfcmVuYW1lcyRmJG5hbWUiLCJyZW5hbWVUYWJsZUNvbHVtblVwZGF0ZXIiLCJjaGFuZ2VUYWJsZUNvbHVtblR5cGVVcGRhdGVyIiwiZGVsZXRlVGFibGVDb2x1bW5VcGRhdGVyIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibmV4dEZpbGVMb2FkSWQiLCJjcmVhdGVGaWxlTG9hZElkIiwibG9hZElkIiwiZmluaXNoRmlsZUxvYWQiLCJmaWxlQ2FjaGUiLCJsb2FkRmlsZXNVcGRhdGVyIiwiX3N0YXRlJGZpbGVMb2FkaW5nJG9wIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwiY29tcGFuaW9uRmlsZXMiLCJmaWxlc1RvTG9hZCIsImRlZmVyQWRkVG9NYXAiLCJhcHBlbmREZWZlcnJlZEZpbGVMb2FkIiwicHJldmlvdXNFcnJvcnMiLCJmcm9tRW50cmllcyIsIl9yZWY0NSIsIl9yZWY0NiIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZE5leHRGaWxlVXBkYXRlciIsIl9yZWY0NyIsImxvYWRpbmciLCJmaWxlIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsImN1cnJlbnRMb2FkSWQiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheSIsInJlbWFpbmluZ0ZpbGVzVG9Mb2FkIiwiZXh0ZW5zaW9ucyIsImRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMiLCJleHBhbnNpb24iLCJhcmNoaXZlTmFtZSIsIm1ha2VMb2FkRmlsZVRhc2siLCJzZWVuIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImxvYWRlciIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJleHRlbnNpb24iLCJleHQiLCJyZXBsYWNlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwiY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlIiwiZXh0cmFjdGVkIiwic2hhcGVmaWxlIiwiY29tcGFuaW9ucyIsIndpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkiLCJleHBhbmRaaXBBcmNoaXZlU3VjY2Vzc1VwZGF0ZXIiLCJhZGREYXRhT3B0aW9ucyIsImRpc3BsYXlOYW1lIiwiZ2VuIiwiY29udGVudCIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwicHJlcGFyZVByb2dyZXNzaXZlUmVwbGF5IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWY0OCIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjQ4JHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIl9yZWY0OSIsImNsZWFyU3RhZ2VkTG9hZGVkRmlsZXNVcGRhdGVyIiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWY1MCIsImVycm9yTG9hZElkIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjUxIiwiZGF0YUlkcyIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJtZXJnZWQiLCJfcmVmNTMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWY1NCIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWY1NSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmNTUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjU2IiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTciLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTgiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQyIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjU5IiwiY29sdW1uIiwiY3VycmVudE1vZGUiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNjAiLCJ0b2dnbGVUYWJsZUNvbHVtbkhpZGRlblVwZGF0ZXIiLCJfcmVmNjEiLCJzaG93QWxsVGFibGVDb2x1bW5zVXBkYXRlciIsIl9yZWY2MiIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNjMiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInZhbHVlQXQiLCJqb2luIiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJfcmVmNjQiLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsInRleHRMYWJlbExheWVySW5kZXhlcyIsIl9sYXllciRjb25maWcyIiwiY29sb3JGaWVsZCIsInVwZGF0ZWRDb2xvckZpZWxkIiwidXBkYXRlVGV4dExhYmVsIiwiZ2V0TWFwcGVkVmFsdWUiLCJmaWx0ZXJQcm9wcyIsIm1hcHBlZFZhbHVlIiwieWllbGRGb3JQYWludCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl94NCIsIl9yZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfY2FsbGVlNCIsIl9yZWY2NSIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjY2IiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwiX3JlZjY3IiwibG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIiLCJfcmVmNjgiLCJuZXdGaWx0ZXJQcm9wcyIsImNvbHVtblN0YXRzIiwibG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyIiwiX3JlZjY5IiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlciIsIl9hY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlciIsIl9yZWY3MCIsImlzVGlsZWRFeHRyYWN0Iiwicm93Q291bnQiLCJkb3dubG9hZCIsImRvd25sb2FkQ2xpcCIsInBuZyIsImpzb24iLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY3MSIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNzIiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjczIiwic2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsIl9yZWY3NCIsIl9zdGF0ZSRsb2FkaW5nUHJvZ3JlcyIsIl9zdGF0ZSRsb2FkaW5nUHJvY2VzcyIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJsYXllclRpbWVJbnRlcnZhbCIsInVwZGF0ZWRQbG90VHlwZSIsInBsb3RCYXNlSW5kZXhCeURhdGFJZCIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNzYiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiZGVsZXRlT3JpZ2luYWxEYXRhc2V0IiwicmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSIsInByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlIiwiX25leHRTdGF0ZSRsYXllclRvQmVNIiwic2VyaWFsaXplZFN0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQiLCJwcmV2aW91c09yZGVyIiwicGFya2VkIiwicGFya2VkSWRzIiwia25vd24iLCJvcmRlcmVkIiwiX3JlZjc3IiwiYWNjdVN0YXRlIiwiX3JlZjc4IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIyIiwibWVyZ2VyT3B0aW9ucyIsInBhcmtlZEVsc2V3aGVyZSIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjc5IiwiY2hpbGREYXRhSWQiLCJEQVRBU0VUX09QX0FERF9PUFRJT05TIiwiYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0IiwicmVzdWx0SWQiLCJydW5Hcm91cEJ5VXBkYXRlciIsIl9leGVjdXRlR3JvdXBCeSIsInJ1bkpvaW5VcGRhdGVyIiwiX2V4ZWN1dGVKb2luIiwicnVuU3BhdGlhbEpvaW5VcGRhdGVyIiwiX2V4ZWN1dGVTcGF0aWFsSm9pbiIsInJ1blN1aXRhYmlsaXR5VXBkYXRlciIsIl9leGVjdXRlU3VpdGFiaWxpdHkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgRVhQQU5EX1pJUF9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYWRkTm90aWZpY2F0aW9uLFxuICBBY3Rpb25UeXBlcyxcbiAgQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkLFxuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIGFwcGx5TGF5ZXJDb25maWcsXG4gIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzLFxuICBsYXllckNvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJUeXBlQ2hhbmdlLFxuICBsYXllclZpc0NvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkRmlsZXNFcnIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3MsXG4gIGxvYWROZXh0RmlsZSxcbiAgZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzLFxuICBzZXRMb2FkaW5nUHJvZ3Jlc3Ncbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGFyZUZpbHRlckZpZWxkVHlwZXNDb21wYXRpYmxlLFxuICBkaXNhYmxlR3B1SWZJbnZlcnRlZCxcbiAgZmlsdGVyVHlwZVVzZXNHcHUsXG4gIGdldFBsb3RCYXNlSW5kZXhCeURhdGFJZCxcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIHN1Y2Nlc3NOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlLFxuICBpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIsXG4gIGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTExfRklFTERfVFlQRVMsXG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdCxcbiAgR0VPQ09ERVJfREFUQVNFVF9OQU1FLFxuICBHRU9DT0RFUl9JQ09OX0NPTE9SLFxuICBHRU9DT0RFUl9MQVlFUl9JRFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyxcbiAgaXNQb2ludENvdW50TGFiZWwsXG4gIExBWUVSX0lEX0xFTkdUSCxcbiAgTGF5ZXIsXG4gIExheWVyQ2xhc3Nlc1xufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBpZl8sXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIGlzU2F2ZWRMYXllckNvbmZpZ1YxLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZXNUb1BhcnNlLFxuICBpc1ppcEZpbGVOYW1lLFxuICBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQsXG4gIHByb2Nlc3NHZW9qc29uLFxuICB0eXBlIEZpbGVDYWNoZUl0ZW0sXG4gIFppcEFyY2hpdmVFeHBhbnNpb25cbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBSYW5nZUZpbHRlcixcbiAgVGltZVJhbmdlRmlsdGVyLFxuICBBbm5vdGF0aW9uLFxuICBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsLFxuICBQcm90b0RhdGFzZXQsXG4gIENoYXJ0Q29uZmlnLFxuICBMYXllckNoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBLZXBsZXJUYWJsZSxcbiAgRmlsdGVyUHJvcHMsXG4gIGJ1aWxkQ2hhbmdlQ29sdW1uVHlwZURhdGEsXG4gIGZvcm1hdENvbHVtblR5cGVDb252ZXJzaW9uRXJyb3IsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGJ1aWxkRGVsZXRlQ29sdW1uRGF0YSxcbiAgYnVpbGRSZW5hbWVDb2x1bW5EYXRhLFxuICBjYW5NdXRhdGVEYXRhc2V0U2NoZW1hLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzaG93QWxsVGFibGVDb2x1bW5zLFxuICB0b2dnbGVIaWRkZW5UYWJsZUNvbHVtbixcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7cmVtYXBDaGFydHNGb3JEYXRhc2V0fSBmcm9tICcuL2NvbHVtbi1lZGl0LXJlY29uY2lsZSc7XG5pbXBvcnQge1xuICBmaW5kRmllbGRzVG9TaG93LFxuICBnZXRab29tT3BhY2l0eUFubm90YXRpb25UYXJnZXRJZCxcbiAgcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHlcbn0gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgYWRkR3JvdXBCeVVwZGF0ZXIsXG4gIGFkZEpvaW5VcGRhdGVyLFxuICBhZGRTcGF0aWFsSm9pblVwZGF0ZXIsXG4gIGFkZFN1aXRhYmlsaXR5VXBkYXRlcixcbiAgZXhlY3V0ZUdyb3VwQnksXG4gIGV4ZWN1dGVKb2luLFxuICBleGVjdXRlU3BhdGlhbEpvaW4sXG4gIGV4ZWN1dGVTdWl0YWJpbGl0eSxcbiAgcmVtb3ZlRGF0YXNldE9wVXBkYXRlcixcbiAgcmVtb3ZlT3BzRm9yRGF0YXNldHMsXG4gIHNldEdyb3VwQnlDb25maWdVcGRhdGVyLFxuICBzZXRKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTdWl0YWJpbGl0eUNvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi9kYXRhc2V0LW9wcy11cGRhdGVycyc7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgbWVyZ2VQbG90R3JvdXBCeSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3MsXG4gIG9wdGlvbmFsTWFwVGV4dFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyBkaXNhYmxlIHN0YWNrIGNhcHR1cmUgZm9yIHdpdGhUYXNrIGNhbGxzIHRoYXQgaGFwcGVuIG91dHNpZGUgc3RyaWN0IHJlZHVjZXIgY29udGV4dFxuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgdGltZXpvbmU6IG51bGwsXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgbGVnZW5kOiB7XG4gICAgaWQ6ICdsZWdlbmQnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmxlZ2VuZCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICBoaWRlSW52aXNpYmxlTGF5ZXJzOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2UsXG4gICAgICBjb2xvcjogR0VPQ09ERVJfSUNPTl9DT0xPUlxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAyLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH0sXG4gIGFubm90YXRpb246IHtcbiAgICBpZDogJ2Fubm90YXRpb24nLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmFubm90YXRpb24nLFxuICAgIGVuYWJsZWQ6IGZhbHNlXG4gIH0sXG4gIHpvb21PcGFjaXR5OiB7XG4gICAgaWQ6ICd6b29tT3BhY2l0eScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZmFkZU9uWm9vbScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICBjb250cm9sbGVyczogW11cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICBkZXNjcmlwdGlvbjogdW5kZWZpbmVkXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuICBncm91cEJ5czogW10sXG4gIGpvaW5zOiBbXSxcbiAgc3VpdGFiaWxpdGllczogW10sXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGNoYXJ0cyAoZW5hYmxlZCBieSBkZWZhdWx0OyBnYXRlZCBieSBlbmFibGVDaGFydHNQYW5lbClcbiAgY2hhcnRzOiBbXSxcbiAgY2hhcnRzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICBzdGFnZWRUb0FkZDogbnVsbCxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuICBsb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICBsb2FkaW5nUHJvY2Vzc2luZzoge30sXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICAvLyBTYXZlZCBjb25maWdzIGhhdmUgYSB2aXN1YWxDaGFubmVscyBzaWJsaW5nOyBwYXJzZWQvZWRpdG9yIEpTT04gZm9sZHMgdGhvc2VcbiAgLy8gZmllbGRzIGludG8gY29uZmlnLiBSZS1wYXJzaW5nIHRoZSBsYXR0ZXIgZHJvcHMgY29sb3JGaWVsZCBhbmQgcmVzZXRzIHRoZSBzY2FsZS5cbiAgY29uc3Qgc2F2ZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKG5ld0xheWVyQ29uZmlnKTtcbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPSBzYXZlZExheWVyQ29uZmlnXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpXG4gICAgOiBuZXdMYXllckNvbmZpZztcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMsIHtcbiAgICBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw6IHNhdmVkTGF5ZXJDb25maWdcbiAgfSk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoXG4gICAgKGZpZWxkLCBpbmRleCkgPT5cbiAgICAgIGZpZWxkICYmXG4gICAgICBmaWVsZC5uYW1lICYmXG4gICAgICAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKSAmJlxuICAgICAgbmV3RmllbGRzLmZpbmRJbmRleChvdGhlciA9PiBvdGhlciAmJiBvdGhlci5uYW1lID09PSBmaWVsZC5uYW1lKSA9PT0gaW5kZXhcbiAgKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICAvLyBBZ2dyZWdhdGlvbiBkZWZhdWx0cyBhbHJlYWR5IG5hbWUgUG9pbnQgQ291bnQuIFVzaW5nIHRoYXQgb2JqZWN0IGFzIHRoZVxuICAvLyBlbXB0eSBwbGFjZWhvbGRlciwgdGhlbiBhcHBlbmRpbmcgdGhlIGZpZWxkIGp1c3QgcGlja2VkLCBpbnNlcnRzIHRoZSBzYW1lXG4gIC8vIGxhYmVsIHR3aWNlLiBkZWNrLmdsIHRoZW4gcmVqZWN0cyB0aGUgZHVwbGljYXRlIGNvbGxpc2lvbiBsYXllciBpZHMuXG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW3suLi5kZWZhdWx0VGV4dExhYmVsLCBmaWVsZDogbnVsbH1dIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZixcbiAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICAgIHRleHRMYWJlbC5maW5kKHRsID0+IHRsLmNvbGxpc2lvbkVuYWJsZWQpPy5jb2xsaXNpb25FbmFibGVkID8/XG4gICAgICAgICAgZGVmYXVsdFRleHRMYWJlbC5jb2xsaXNpb25FbmFibGVkXG4gICAgICApXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gW1xuICAgICAgLi4udGV4dExhYmVsLFxuICAgICAge1xuICAgICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgICAvLyBUaGUgc2xvdCBpcyBlbXB0eSB1bnRpbCBhIGZpZWxkIGlzIHBpY2tlZC4gQWdncmVnYXRpb24gZGVmYXVsdHMgYWxyZWFkeVxuICAgICAgICAvLyBjYXJyeSBQb2ludCBDb3VudCwgYW5kIGNvcHlpbmcgdGhhdCBmaWVsZCB3b3VsZCBhZGQgYSBzZWNvbmQgbGFiZWwuXG4gICAgICAgIGZpZWxkOiBudWxsLFxuICAgICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKHRleHRMYWJlbFswXT8uY29sbGlzaW9uRW5hYmxlZClcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCh0bCA9PiAoey4uLnRsLCBbcHJvcF06IHZhbHVlfSkpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZSAoZS5nLiBtaXNzaW5nIGNvbHVtbnMpLCBidXQgd2Ugc3RpbGwgbmVlZCB0b1xuICAgIC8vIHJlbWFwIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgbmV3IGRhdGFzZXQgdG8gYXZvaWQgc3RhbGUgZmllbGQgcmVmZXJlbmNlc1xuICAgIC8vIHRoYXQgcG9pbnQgdG8gcm93cyBiZXlvbmQgdGhlIG5ldyBkYXRhc2V0J3MgbGVuZ3RoXG4gICAgY29uc3QgbmV3RGF0YXNldEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzO1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkOiBmaWVsZEtleX0pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IG5ld0xheWVyLmNvbmZpZ1tmaWVsZEtleV07XG4gICAgICBpZiAoY3VycmVudEZpZWxkKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBuZXdEYXRhc2V0RmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGN1cnJlbnRGaWVsZC5uYW1lKTtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbZmllbGRLZXldID0gbWF0Y2hlZCB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChPYmplY3Qua2V5cyhyZW1hcHBlZEZpZWxkcykubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHJlbWFwcGVkRmllbGRzKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgZmllbGQgdHlwZSBjb21wYXRpYmlsaXR5IOKAlCBjbGVhcnMgZmllbGRzIHdob3NlIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gICAgLy8gd2l0aCB0aGUgY2hhbm5lbCdzIHN1cHBvcnRlZCBmaWVsZCB0eXBlcyAoZS5nLiBzdHJpbmcgZmllbGQgZm9yIGEgbnVtZXJpYyBzY2FsZSlcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7a2V5fSkgPT4ge1xuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgfSk7XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgICAgaXNWaXNpYmxlOiBuZXdMYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgIDogbmV3TGF5ZXI7XG59XG4vKipcbiAqIEZpdCB0aGUgbWFwIHdoZW4gdGhlIGxheWVyIHR5cGUgZHJvcGRvd24gZ2l2ZXMgYW4gZW1wdHkgbGF5ZXIgaXRzIGZpcnN0XG4gKiB0eXBlIGFuZCB0aGF0IGxheWVyIGFscmVhZHkgcG9pbnRzIGF0IGEgZGF0YXNldC4gTGF0ZXIgdHlwZSBjaGFuZ2VzLFxuICogcHJvZ3JhbW1hdGljIGBsYXllclR5cGVDaGFuZ2VgLCBhbmQgc2F2ZWQtY29uZmlnIGFwcGxpZXMgbGVhdmUgdGhlIGNhbWVyYVxuICogYWxvbmUuIEdhdGVkIGJ5IGBlbmFibGVGaXRCb3VuZHNPbk1hbnVhbExheWVyYC5cbiAqL1xuZnVuY3Rpb24gbWF5YmVGaXRNYW51YWxMYXllckJvdW5kcyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIGxheWVyOiBMYXllcixcbiAgZml0Qm91bmRzPzogYm9vbGVhblxuKTogVmlzU3RhdGUge1xuICBpZiAoXG4gICAgIWZpdEJvdW5kcyB8fFxuICAgIG9sZExheWVyLnR5cGUgfHxcbiAgICAhbGF5ZXIuY29uZmlnLmRhdGFJZCB8fFxuICAgICFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXJcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMoW2xheWVyXSk7XG4gIGlmICghYm91bmRzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZSxcbiAgICBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IGZpdE1hcEJvdW5kcyhib3VuZHMpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPVxuICAgICAgdHlwZW9mIHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKHN0YXRlLmRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKFxuICAgICAgb2xkTGF5ZXIuY29uZmlnLFxuICAgICAgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsXG4gICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgIGRlZmF1bHRMYXllclByb3BzXG4gICAgKTtcbiAgICBpZiAoIUFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLmhhcyhuZXdUeXBlKSkge1xuICAgICAgY29uc3QgdGV4dExhYmVsID0gbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbC5maWx0ZXIobGFiZWwgPT4gIWlzUG9pbnRDb3VudExhYmVsKGxhYmVsKSk7XG4gICAgICBpZiAodGV4dExhYmVsLmxlbmd0aCAhPT0gbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIHRleHRMYWJlbDogdGV4dExhYmVsLmxlbmd0aCA/IHRleHRMYWJlbCA6IFt7Li4uREVGQVVMVF9URVhUX0xBQkVMfV1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMobmV3U3RhdGUsIG9sZExheWVyLCBsYXllciwgYWN0aW9uLmZpdEJvdW5kcyk7XG59XG5cbi8qKlxuICogQmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIGRhdGFzZXQgZmllbGQgb2YgdGhlIHNhbWUgbmFtZS5cbiAqIGBhZGREYXRhVG9NYXBgIGFuZCBgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlYCBvZnRlbiBwYXNzIGB7bmFtZSwgdHlwZX1gXG4gKiBvciBwcm9jZXNzb3IgZmllbGRzIHdob3NlIHZhbHVlQWNjZXNzb3IgaXMgbm90IGJvdW5kIHRvIHRoZSBLZXBsZXJUYWJsZSwgd2hpY2hcbiAqIGxlYXZlcyBzdHJva2VDb2xvckRvbWFpbiBhdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICBuZXdDb25maWc6IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uWyduZXdDb25maWcnXSxcbiAgZGF0YXNldDogS2VwbGVyVGFibGUgfCB1bmRlZmluZWQsXG4gIHZpc3VhbENoYW5uZWw6IExheWVyWyd2aXN1YWxDaGFubmVscyddW3N0cmluZ10gfCB1bmRlZmluZWRcbikge1xuICBpZiAoIWRhdGFzZXQgfHwgIXZpc3VhbENoYW5uZWwpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGluY29taW5nID0gbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICBpZiAoIWluY29taW5nIHx8IHR5cGVvZiBpbmNvbWluZyAhPT0gJ29iamVjdCcgfHwgIWluY29taW5nLm5hbWUpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGZvdW5kID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBpbmNvbWluZy5uYW1lKTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdDb25maWcsXG4gICAgW3Zpc3VhbENoYW5uZWwuZmllbGRdOiBmb3VuZFxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VmlzQ29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBjb25zdCBuZXdDb25maWcgPSByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gICAgYWN0aW9uLm5ld0NvbmZpZyxcbiAgICBkYXRhc2V0LFxuICAgIG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdXG4gICk7XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgLy8gSmVua3MgYnJlYWtzIGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9mIGNvbG9ycy4gUmVjYWxjdWxhdGUgdGhlIGRvbWFpbiB3aGVuXG4gIC8vIHRoZSBjb2xvciByYW5nZSBvZiBhIEplbmtzIGNoYW5uZWwgY2hhbmdlcy5cbiAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgIE9iamVjdC5rZXlzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxLZXkgPT4ge1xuICAgICAgICBjb25zdCBjaGFubmVsID0gbmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbEtleV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGFubmVsPy5zY2FsZSAmJlxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZ1tjaGFubmVsLnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuamVua3MgJiZcbiAgICAgICAgICBjaGFubmVsLnJhbmdlICYmXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbi5uZXdWaXNDb25maWcsIGNoYW5uZWwucmFuZ2UpXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJiBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWUpIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHByZXZpb3VzV2luZG93ID0gKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLmFuaW1hdGlvbldpbmRvdztcbiAgbGV0IG5leHRGaWx0ZXIgPSB7Li4uZmlsdGVyLCBhbmltYXRpb25XaW5kb3d9IGFzIEZpbHRlcjtcblxuICAvLyBFbnRlcmluZyBvciBsZWF2aW5nIGludGVydmFsIHBsYXliYWNrIHNuYXBzIHRoZSB3aW5kb3cgb250byBoaXN0b2dyYW0gYmlucy5cbiAgaWYgKFxuICAgIChmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSB8fCBmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnJhbmdlKSAmJlxuICAgIChwcmV2aW91c1dpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCB8fCBhbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpXG4gICkge1xuICAgIGNvbnN0IGFkanVzdGVkID0gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhcbiAgICAgIHN0YXRlLFxuICAgICAgbmV4dEZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIgfCBSYW5nZUZpbHRlcixcbiAgICAgIGdldFBsb3RCYXNlSW5kZXhCeURhdGFJZChzdGF0ZS5kYXRhc2V0cywgbmV4dEZpbHRlciwgc3RhdGUubGF5ZXJzKVxuICAgICk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWRqdXN0ZWQudmFsdWUpICYmIGFkanVzdGVkLnZhbHVlLmV2ZXJ5KHYgPT4gTnVtYmVyLmlzRmluaXRlKHYpKSkge1xuICAgICAgbmV4dEZpbHRlciA9IGFkanVzdGVkO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnJhbmdlKSB7XG4gICAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmluZGV4T2YoZmlsdGVyKTtcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICAgIHN0YXRlLFxuICAgICAgc2V0RmlsdGVyKFxuICAgICAgICBmaWx0ZXJJbmRleCxcbiAgICAgICAgWydhbmltYXRpb25XaW5kb3cnLCAndmFsdWUnXSxcbiAgICAgICAgW2FuaW1hdGlvbldpbmRvdywgbmV4dEZpbHRlci52YWx1ZV1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXh0RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGlmIChmaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXh0RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWZmZWN0ZWREYXRhc2V0SWRzOiBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlckluZGV4PzogbnVtYmVyXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVycyA9IHN0YXRlLmZpbHRlcnMubWFwKChmaWx0ZXIsIGZpbHRlckluZGV4KSA9PiB7XG4gICAgaWYgKGZpbHRlckluZGV4ID09PSB1cGRhdGVkRmlsdGVySW5kZXgpIHtcbiAgICAgIHJldHVybiB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBmaWx0ZXIsIHVuZGVmaW5lZCwgc3RhdGUubGF5ZXJzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRSZWZyZXNoTnVtZXJpY1Bsb3QgPVxuICAgICAgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSAmJlxuICAgICAgKCFpc1NpZGVGaWx0ZXIoZmlsdGVyKSB8fCBmaWx0ZXIucGxvdFR5cGU/LnR5cGUgPT09IFBMT1RfVFlQRVMubGluZUNoYXJ0KTtcbiAgICBpZiAoZmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgIXNob3VsZFJlZnJlc2hOdW1lcmljUGxvdCkge1xuICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBzaGFyZWREYXRhc2V0SWRzID0gZmlsdGVyLmRhdGFJZC5maWx0ZXIoZGF0YUlkID0+IGFmZmVjdGVkRGF0YXNldElkcy5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgICBpZiAoIXNoYXJlZERhdGFzZXRJZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWRhdGVkRmlsdGVyID0gc2hhcmVkRGF0YXNldElkcy5yZWR1Y2UocmVtb3ZlRmlsdGVyUGxvdCwgZmlsdGVyKTtcbiAgICByZXR1cm4gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgaW52YWxpZGF0ZWRGaWx0ZXIsIHVuZGVmaW5lZCwgc3RhdGUubGF5ZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNldChbJ2ZpbHRlcnMnXSwgZmlsdGVycywgc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGFmZmVjdGVkRGF0YXNldElkcyA9IHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgYWZmZWN0ZWREYXRhc2V0SWRzLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG5cbiAgLy8gVXBkYXRlIHBsb3RzIGFmdGVyIGZpbHRlcmluZyBzbyB0aGV5IHVzZSB0aGUgbGF0ZXN0IGZpbHRlcmVkIGluZGV4ZXMuXG4gIC8vIE90aGVyIHRpbWUgZmlsdGVycyBuZWVkIHRoZWlyIGNhY2hlZCBiaW5zIGludmFsaWRhdGVkIGZvciBzaGFyZWQgZGF0YXNldHMuXG4gIG5ld1N0YXRlID0gdXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZyhuZXdTdGF0ZSwgYWZmZWN0ZWREYXRhc2V0SWRzLCBpZHgpO1xuXG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICAvLyBJZiB0aW1lIHJhbmdlIGZpbHRlciB2YWx1ZSB3YXMgdXBkYXRlZCwgYWRqdXN0IGFuaW1hdGlvbiBjb25maWdcbiAgaWYgKG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHByb3BzLmluY2x1ZGVzKCd2YWx1ZScpKSB7XG4gICAgbmV3U3RhdGUgPSBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBhY3Rpb24uaWR4KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBkYXRhc2V0cywgZmlsdGVycykge1xuICBjb25zdCBjdXJyZW50RGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgaWYgKGN1cnJlbnREYXRhSWQgJiYgdmFsdWUgJiYgZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgZmllbGROYW1lID0gZmlsdGVyLm5hbWVbdmFsdWVJbmRleF07XG4gICAgY29uc3QgZW5kRmllbGROYW1lID0gdG9BcnJheShmaWx0ZXIuZW5kTmFtZSlbdmFsdWVJbmRleF07XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGZpbHRlci52YWx1ZTtcbiAgICBjb25zdCBuZXh0RGF0YUlkcyA9IGZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0RGF0YUlkc1t2YWx1ZUluZGV4XSA9IHZhbHVlO1xuXG4gICAgbGV0IG5leHRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgY3VycmVudERhdGFJZCk7XG4gICAgbmV4dEZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0RGF0YUlkcywgbmV4dEZpbHRlcik7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgWydncHVDaGFubmVsJywgJ2dwdUVuZENoYW5uZWwnXSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV4dEZpbHRlcltwcm9wXSkpIHtcbiAgICAgICAgY29uc3QgbmV4dENoYW5uZWxzID0gbmV4dEZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgICBuZXh0Q2hhbm5lbHNbdmFsdWVJbmRleF0gPSB1bmRlZmluZWQ7XG4gICAgICAgIG5leHRGaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0Q2hhbm5lbHMsIG5leHRGaWx0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1t2YWx1ZV07XG4gICAgY29uc3QgZmllbGQgPSBkYXRhc2V0Py5maWVsZHMuZmluZChjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gICAgY29uc3QgY2FuUmViaW5kRmllbGQgPVxuICAgICAgZmllbGQgJiYgKCFmaWx0ZXIuZmllbGRUeXBlIHx8IGFyZUZpbHRlckZpZWxkVHlwZXNDb21wYXRpYmxlKGZpbHRlci5maWVsZFR5cGUsIGZpZWxkLnR5cGUpKTtcbiAgICBjb25zdCB7ZmlsdGVyOiByZWJvdW5kRmlsdGVyfSA9IGNhblJlYmluZEZpZWxkXG4gICAgICA/IGFwcGx5RmlsdGVyRmllbGROYW1lKG5leHRGaWx0ZXIsIGRhdGFzZXRzLCB2YWx1ZSwgZmllbGROYW1lLCB2YWx1ZUluZGV4LCB7XG4gICAgICAgICAgbWVyZ2VEb21haW46IHRydWVcbiAgICAgICAgfSlcbiAgICAgIDoge2ZpbHRlcjogbnVsbH07XG5cbiAgICBpZiAocmVib3VuZEZpbHRlcikge1xuICAgICAgbmV4dEZpbHRlciA9IHJlYm91bmRGaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5leHROYW1lcyA9IG5leHRGaWx0ZXIubmFtZS5zbGljZSgpO1xuICAgICAgY29uc3QgbmV4dEZpZWxkSWR4ID0gbmV4dEZpbHRlci5maWVsZElkeC5zbGljZSgpO1xuICAgICAgbmV4dE5hbWVzW3ZhbHVlSW5kZXhdID0gJyc7XG4gICAgICBuZXh0RmllbGRJZHhbdmFsdWVJbmRleF0gPSAtMTtcbiAgICAgIG5leHRGaWx0ZXIgPSB7XG4gICAgICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgICAgIG5hbWU6IG5leHROYW1lcyxcbiAgICAgICAgZmllbGRJZHg6IG5leHRGaWVsZElkeCxcbiAgICAgICAgZ3B1OiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRmllbGROYW1lICYmIG5leHRGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgICAgY29uc3Qge2ZpbHRlcjogcmVib3VuZEVuZEZpbHRlcn0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgIG5leHRGaWx0ZXIsXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZW5kRmllbGROYW1lLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHJlYm91bmRFbmRGaWx0ZXIpIHtcbiAgICAgICAgbmV4dEZpbHRlciA9IHJlYm91bmRFbmRGaWx0ZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7ZmlsdGVyOiBjbGVhcmVkRW5kRmlsdGVyfSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgICBuZXh0RmlsdGVyLFxuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdmFsdWVJbmRleFxuICAgICAgICApO1xuICAgICAgICBuZXh0RmlsdGVyID0gY2xlYXJlZEVuZEZpbHRlciB8fCBuZXh0RmlsdGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4obmV4dEZpbHRlciwgZGF0YXNldHMpO1xuICAgIG5leHRGaWx0ZXIgPSB7XG4gICAgICAuLi5uZXh0RmlsdGVyLFxuICAgICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHMuZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcy5zdGVwfSA6IHt9KVxuICAgIH07XG5cbiAgICBpZiAobmV4dEZpbHRlci5ncHUpIHtcbiAgICAgIG5leHRGaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUobmV4dEZpbHRlciwgZmlsdGVycyksIGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0RmlsdGVyLFxuICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4ocHJldmlvdXNWYWx1ZSwgbmV4dEZpbHRlcilcbiAgICB9O1xuICB9XG5cbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGN1cnJlbnREYXRhSWQpIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbXG4gICAgJ2RhdGFJZCcsXG4gICAgJ25hbWUnLFxuICAgICdmaWVsZElkeCcsXG4gICAgJ2dwdUNoYW5uZWwnLFxuICAgICdlbmROYW1lJyxcbiAgICAnZW5kRmllbGRJZHgnLFxuICAgICdlbmRNYXBwZWRWYWx1ZScsXG4gICAgJ2dwdUVuZENoYW5uZWwnXG4gIF0pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIHN0YXRlLmZpbHRlcnNcbiAgICAgICk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDF9XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgaWYgKGZpbHRlci5ncHUpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIC8vIHJlbW92ZSBmaWx0ZXIgUGxvdCBhdCBkYXRhc2V0SWQsIHNvIGl0IHdpbGwgYmUgcmVjYWxjdWxhdGVkXG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuXG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgLy8gb25seSBmaWx0ZXIgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5lbmROYW1lOiB7XG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIGZpbHRlciA9IGZpbHRlci5ncHVcbiAgICAgICAgICA/IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKVxuICAgICAgICAgIDogey4uLmZpbHRlciwgZ3B1Q2hhbm5lbDogdW5kZWZpbmVkLCBncHVFbmRDaGFubmVsOiB1bmRlZmluZWR9O1xuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlICdpbnZlcnRlZCc6IHtcbiAgICAgIGNvbnN0IHN1cHBvcnRzSW52ZXJzaW9uID0gZmlsdGVyLmRhdGFJZC5ldmVyeShcbiAgICAgICAgZGF0YXNldElkID0+ICFzdGF0ZS5kYXRhc2V0c1tkYXRhc2V0SWRdPy5kaXNhYmxlRGF0YU9wZXJhdGlvblxuICAgICAgKTtcbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBpbnZlcnRlZDogc3VwcG9ydHNJbnZlcnNpb24gJiYgQm9vbGVhbih2YWx1ZSlcbiAgICAgIH07XG4gICAgICBpZiAoZmlsdGVyLmludmVydGVkKSB7XG4gICAgICAgIC8vIEdQVSByYW5nZSB0ZXN0cyBjYW4gb25seSBrZWVwIHZhbHVlcyBpbnNpZGUgdGhlIHdpbmRvdy5cbiAgICAgICAgZmlsdGVyID0gZGlzYWJsZUdwdUlmSW52ZXJ0ZWQoZmlsdGVyKTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVHlwZVVzZXNHcHUoZmlsdGVyLnR5cGUpKSB7XG4gICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoXG4gICAgICAgICAgc2V0RmlsdGVyR3B1TW9kZSh7Li4uZmlsdGVyLCBncHU6IHRydWV9LCBzdGF0ZS5maWx0ZXJzKSxcbiAgICAgICAgICBzdGF0ZS5maWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGNvbnN0IHByZXZpb3VzTnVtZXJpY0ludGVydmFsID0gbmV3RmlsdGVyLnBsb3RUeXBlPy5udW1lcmljSW50ZXJ2YWw7XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbGV0IHBsb3RUeXBlVXBkYXRlID0gbmV3UHJvcC5wbG90VHlwZTtcbiAgICAgIGlmIChwbG90VHlwZVVwZGF0ZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGxvdFR5cGVVcGRhdGUsICdncm91cEJ5JykpIHtcbiAgICAgICAgcGxvdFR5cGVVcGRhdGUgPSB7XG4gICAgICAgICAgLi4ucGxvdFR5cGVVcGRhdGUsXG4gICAgICAgICAgZ3JvdXBCeTogbWVyZ2VQbG90R3JvdXBCeShuZXdGaWx0ZXIucGxvdFR5cGU/Lmdyb3VwQnksIHBsb3RUeXBlVXBkYXRlLmdyb3VwQnkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8ocGxvdFR5cGVVcGRhdGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBudW1lcmljSW50ZXJ2YWxDaGFuZ2VkID1cbiAgICBuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnJhbmdlICYmXG4gICAgbmV3RmlsdGVyLnBsb3RUeXBlPy5udW1lcmljSW50ZXJ2YWwgIT09IHByZXZpb3VzTnVtZXJpY0ludGVydmFsO1xuICBpZiAobnVtZXJpY0ludGVydmFsQ2hhbmdlZCkge1xuICAgIG5ld0ZpbHRlciA9IHsuLi4obmV3RmlsdGVyIGFzIFJhbmdlRmlsdGVyKSwgYmluczogdW5kZWZpbmVkLCBsaW5lQ2hhcnQ6IHVuZGVmaW5lZH07XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIsIHVuZGVmaW5lZCwgc3RhdGUubGF5ZXJzKTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xuXG4gIGlmIChcbiAgICBudW1lcmljSW50ZXJ2YWxDaGFuZ2VkICYmXG4gICAgbmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSAmJlxuICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgKSB7XG4gICAgY29uc3QgYWRqdXN0ZWQgPSBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBuZXdGaWx0ZXIgYXMgUmFuZ2VGaWx0ZXIsXG4gICAgICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQobmV3U3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlciwgbmV3U3RhdGUubGF5ZXJzKVxuICAgICk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWRqdXN0ZWQudmFsdWUpICYmIGFkanVzdGVkLnZhbHVlLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZTogYWRqdXN0ZWQudmFsdWV9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgaWQ6IGFjdGlvbi5pZH0pXVxuICAgICAgfTtcblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIGRhdGFJZCwgZmllbGQsIHZhbHVlfSA9IGFjdGlvbjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gaWQpO1xuICBsZXQgZmlsdGVySW5kZXggPSBvcmlnaW5hbEluZGV4O1xuICBpZiAoIWlkICYmICFkYXRhSWQpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKG9yaWdpbmFsSW5kZXggPCAwICYmIGRhdGFJZCkge1xuICAgIG5ld1N0YXRlID0gYWRkRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZH0pO1xuICAgIGlmIChuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAhPT0gc3RhdGUuZmlsdGVycy5sZW5ndGggKyAxKSB7XG4gICAgICAvLyBObyBuZXcgZmlsdGVyIHdhcyBhZGRlZFxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBmaWx0ZXIgd2FzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICBmaWx0ZXJJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoIC0gMTtcbiAgICBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdLFxuICAgICAgLi4uKGlkID8ge2lkfSA6IG51bGwpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoaXMgaWYgaXQncyBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyXG4gIC8vIEZpcnN0IHdlIG1ha2Ugc3VyZSBhbGwgdGhlIGRhdGFJZHMgdGhhdCBmaWVsZHMgcmVmZXIgdG8gYXJlIHVwZGF0ZWRcbiAgaWYgKG9yaWdpbmFsSW5kZXggPj0gMCAmJiBkYXRhSWQpIHtcbiAgICAvLyBJZiB0aGUgZGF0YUlkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIG9uZSBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZGF0YUlkKSA/IGRhdGFJZCA6IFtkYXRhSWRdKS5yZWR1Y2UoKGFjY3UsIGQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICdkYXRhSWQnLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgZmllbGRzXG4gIGlmIChmaWVsZCkge1xuICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBmaWVsZCBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZmllbGQpID8gZmllbGQgOiBbZmllbGRdKS5yZWR1Y2UoKGFjY3UsIGYsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIHZhbHVlIHNlcGFyYXRlbHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlckluZGV4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29sZExheWVyLCBwcm9wLCBuZXdDb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIGlzQW5pbWF0aW5nOiAhZi5pc0FuaW1hdGluZ30gOiBmKSlcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICdkYXRhSWQnIGluIGNvbmZpZyAmJiAnYW5pbWF0aW9uV2luZG93JyBpbiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmltYXRpb25Db25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG4gIGlmIChpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gRmluZCBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uXG4gICAgLy8gQXNzdW1pbmcgdGhlcmUncyBvbmx5IG9uZSBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uLCBzZWUgc2V0RmlsdGVyVmlld1VwZGF0ZXJcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiAhaXNTaWRlRmlsdGVyKGYpKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBuZXdGaWx0ZXIgPSB7Li4uZmlsdGVyLCAuLi5jb25maWd9O1xuICAgIHJldHVybiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoc3RhdGUsIGFwcGx5RmlsdGVyQ29uZmlnKGZpbHRlci5pZCwgbmV3RmlsdGVyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgY29uc3QgZmlsdGVycyA9IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgIGkgPT09IGlkeFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uZixcbiAgICAgICAgICB2aWV3XG4gICAgICAgIH1cbiAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICA/IHtcbiAgICAgICAgICAuLi5mLFxuICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgfVxuICAgICAgOiBmXG4gICk7XG5cbiAgY29uc3Qgb3BlbmVkRmlsdGVyID0gZmlsdGVyc1tpZHhdO1xuICBpZiAodmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQgJiYgb3BlbmVkRmlsdGVyPy50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UpIHtcbiAgICBjb25zdCBpbnZhbGlkYXRlZEZpbHRlciA9IHRvQXJyYXkob3BlbmVkRmlsdGVyLmRhdGFJZCkucmVkdWNlKHJlbW92ZUZpbHRlclBsb3QsIG9wZW5lZEZpbHRlcik7XG4gICAgZmlsdGVyc1tpZHhdID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgaW52YWxpZGF0ZWRGaWx0ZXIsIHVuZGVmaW5lZCwgc3RhdGUubGF5ZXJzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyc1xuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nKG5ld1N0YXRlLCBkYXRhSWQpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1xuICAgID8gcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsIGxheWVyVG9SZW1vdmUuaWQpXG4gICAgOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSksXG4gICAgLy8gT25seSByZXBsYWNlIGludGVyYWN0aW9uQ29uZmlnIHdoZW4gYSBjb250cm9sbGVyIGFjdHVhbGx5IGxpc3RlZCB0aGlzIGxheWVyLlxuICAgIC8vIFBhcnRpYWwgdGVzdCBzdGF0ZXMgb21pdCBpdCwgYW5kIGFkZGluZyB0aGUga2V5IHdvdWxkIGNoYW5nZSB0aGF0IHNoYXBlLlxuICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZyAhPT0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWcgPyB7aW50ZXJhY3Rpb25Db25maWd9IDoge30pXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKFxuICAgIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIGNoYXJ0ID0+IGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydCkgJiYgY2hhcnQubGF5ZXJJZCA9PT0gbGF5ZXJUb1JlbW92ZS5pZFxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCwgdXBkYXRlZEdyb3VwKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBlZmZlY3QgPSBzdGF0ZS5lZmZlY3RzW2lkeF07XG4gIGNvbnN0IG5leHRQYXJhbXMgPSBwcm9wcy5wYXJhbWV0ZXJzO1xuICAvLyBBIHRpbWVzdGFtcC1vbmx5IG5vLW9wIHN0aWxsIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcgdmlzU3RhdGUgKHNldFByb3BzXG4gIC8vIG11dGF0ZXMgaW4gcGxhY2UpLiBUaGF0IHJldHJpZ2dlcmVkIG5lc3RlZCByZWFjdC1yZWR1eCBjb25uZWN0IHN1YnNjcmliZXJzXG4gIC8vIHdoaWxlIGRyYWdnaW5nIHRoZSBMaWdodCAmIFNoYWRvdyBkYXktdGltZSBzbGlkZXIgdW50aWwgUmVhY3QgdGhyZXdcbiAgLy8gXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZFwiLlxuICBpZiAoXG4gICAgbmV4dFBhcmFtcyAmJlxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDEgJiZcbiAgICBPYmplY3Qua2V5cyhuZXh0UGFyYW1zKS5sZW5ndGggPT09IDEgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCAhPSBudWxsICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgPT09IGVmZmVjdC5wYXJhbWV0ZXJzLnRpbWVzdGFtcFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZyk6IGNoYXJ0IGlzIExheWVyQ2hhcnRDb25maWcge1xuICByZXR1cm4gY2hhcnQudHlwZSA9PT0gJ2xheWVyQ2hhcnQnO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZywgcHJvcHM6IFBhcnRpYWw8Q2hhcnRDb25maWc+KTogQ2hhcnRDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLmNoYXJ0LFxuICAgIC4uLnByb3BzLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAuLi4ocHJvcHMuZGlzcGxheSB8fCB7fSlcbiAgICB9LFxuICAgIGNoYXJ0RGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuY2hhcnREaXNwbGF5LFxuICAgICAgLi4uKChwcm9wcyBhcyBDaGFydENvbmZpZykuY2hhcnREaXNwbGF5IHx8IHt9KVxuICAgIH1cbiAgfSBhcyBDaGFydENvbmZpZztcbn1cblxuZnVuY3Rpb24gYXhpc0ZpZWxkSWZQcmVzZW50PFQgZXh0ZW5kcyB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGw7IHRpdGxlPzogc3RyaW5nIHwgbnVsbH0+KFxuICBheGlzOiBUIHwgdW5kZWZpbmVkLFxuICBmaWVsZE5hbWVzOiBTZXQ8c3RyaW5nPlxuKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmICghYXhpcz8uZmllbGQ/Lm5hbWUgfHwgZmllbGROYW1lcy5oYXMoYXhpcy5maWVsZC5uYW1lKSkge1xuICAgIHJldHVybiBheGlzO1xuICB9XG4gIHJldHVybiB7Li4uYXhpcywgZmllbGQ6IG51bGwsIHRpdGxlOiBudWxsfTtcbn1cblxuZnVuY3Rpb24gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhcbiAgY2hhcnQ6IENoYXJ0Q29uZmlnLFxuICBkYXRhc2V0OiB7ZmllbGRzPzoge25hbWU6IHN0cmluZ31bXX0gfCB1bmRlZmluZWRcbik6IENoYXJ0Q29uZmlnIHtcbiAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpKTtcbiAgY29uc3QgbmV4dCA9IGNoYXJ0IGFzIENoYXJ0Q29uZmlnICYge1xuICAgIHhBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB5QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgYXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgZ3JvdXBCeT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgdmFsdWU/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICB9O1xuICByZXR1cm4gbWVyZ2VDaGFydENvbmZpZyhjaGFydCwge1xuICAgIHhBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC54QXhpcywgZmllbGROYW1lcyksXG4gICAgeUF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnlBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICBheGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5heGlzLCBmaWVsZE5hbWVzKSxcbiAgICBncm91cEJ5OiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5ncm91cEJ5LCBmaWVsZE5hbWVzKSxcbiAgICB2YWx1ZTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQudmFsdWUsIGZpZWxkTmFtZXMpXG4gIH0gYXMgUGFydGlhbDxDaGFydENvbmZpZz4pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBzaG91bGRSZW1vdmU6IChjaGFydDogQ2hhcnRDb25maWcpID0+IGJvb2xlYW5cbik6IFQge1xuICBjb25zdCBjaGFydHMgPSBzdGF0ZS5jaGFydHMgfHwgW107XG4gIGNvbnN0IHJlbW92ZWQgPSBjaGFydHMuZmlsdGVyKHNob3VsZFJlbW92ZSk7XG4gIGlmICghcmVtb3ZlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcmVtb3ZlZElkcyA9IG5ldyBTZXQocmVtb3ZlZC5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgZmlsdGVySWRzID0gbmV3IFNldChcbiAgICByZW1vdmVkLmZsYXRNYXAoY2hhcnQgPT4ge1xuICAgICAgY29uc3QgaWQgPSBjaGFydC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gICAgICByZXR1cm4gaWQgPyBbaWQsIGAke2lkfS14YCwgYCR7aWR9LXlgXSA6IFtdO1xuICAgIH0pXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogY2hhcnRzLmZpbHRlcihjaGFydCA9PiAhcmVtb3ZlZElkcy5oYXMoY2hhcnQuaWQpKVxuICB9O1xuICBpZiAoZmlsdGVySWRzLnNpemUpIHtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlIGFzIFQ7XG59XG5cbi8qKlxuICogQWRkIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NoYXJ0fTogVmlzU3RhdGVBY3Rpb25zLkFkZENoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNoYXJ0Py5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmNoYXJ0cyB8fCBbXSkuc29tZShleGlzdGluZyA9PiBleGlzdGluZy5pZCA9PT0gY2hhcnQuaWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBbXG4gICAgICAuLi4oc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoZXhpc3RpbmcgPT4gKHtcbiAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5leGlzdGluZy5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBpc0pzb25FZGl0b3JBY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIHtcbiAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBjaGFydC5kaXNwbGF5Py5pc0NvbmZpZ0FjdGl2ZSA/PyBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBjaGFydFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUNoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUNoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSAoc3RhdGUuY2hhcnRzIHx8IFtdKS5maW5kSW5kZXgoY2hhcnQgPT4gY2hhcnQuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmNoYXJ0c1tpZHhdO1xuICBjb25zdCBkYXRhSWRDaGFuZ2VkID0gdHlwZW9mIHByb3BzLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgcHJvcHMuZGF0YUlkICE9PSBwcmV2LmRhdGFJZDtcbiAgY29uc3QgbGF5ZXJJZENoYW5nZWQgPVxuICAgIGlzTGF5ZXJDaGFydENvbmZpZyhwcmV2KSAmJlxuICAgIHR5cGVvZiAocHJvcHMgYXMgTGF5ZXJDaGFydENvbmZpZykubGF5ZXJJZCA9PT0gJ3N0cmluZycgJiZcbiAgICAocHJvcHMgYXMgTGF5ZXJDaGFydENvbmZpZykubGF5ZXJJZCAhPT0gcHJldi5sYXllcklkO1xuICBsZXQgbmV4dCA9IG1lcmdlQ2hhcnRDb25maWcocHJldiwgcHJvcHMpO1xuICBpZiAoZGF0YUlkQ2hhbmdlZCB8fCBsYXllcklkQ2hhbmdlZCkge1xuICAgIGNvbnN0IGRhdGFJZCA9IG5leHQuZGF0YUlkIHx8IHVuZGVmaW5lZDtcbiAgICBuZXh0ID0gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhuZXh0LCBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogdW5kZWZpbmVkKTtcbiAgICBpZiAobmV4dC5jcm9zc0ZpbHRlcj8uZW5hYmxlZCkge1xuICAgICAgbmV4dCA9IG1lcmdlQ2hhcnRDb25maWcobmV4dCwge1xuICAgICAgICBjcm9zc0ZpbHRlcjogey4uLm5leHQuY3Jvc3NGaWx0ZXIsIGVuYWJsZWQ6IGZhbHNlLCB2YWx1ZToge30sIGZpZWxkTmFtZXM6IHt9fVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNoYXJ0cyA9IFsuLi5zdGF0ZS5jaGFydHNdO1xuICBjaGFydHNbaWR4XSA9IG5leHQ7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0c1xuICB9O1xuICBjb25zdCBmaWx0ZXJJZCA9IG5leHQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkIHx8IHByZXYuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICBpZiAocHJldi5jcm9zc0ZpbHRlcj8uZW5hYmxlZCAmJiAhbmV4dC5jcm9zc0ZpbHRlcj8uZW5hYmxlZCAmJiBmaWx0ZXJJZCkge1xuICAgIGNvbnN0IG93bmVkRmlsdGVySWRzID0gbmV3IFNldChbZmlsdGVySWQsIGAke2ZpbHRlcklkfS14YCwgYCR7ZmlsdGVySWR9LXlgXSk7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gb3duZWRGaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBjaGFydCBhbmQgYW55IGNyb3NzLWZpbHRlciBpdCBvd25zXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoc3RhdGUsIGNoYXJ0ID0+IGNoYXJ0LmlkID09PSBpZCk7XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBwcm92aWRlZEFuZ2xlID0gTnVtYmVyLmlzRmluaXRlKChjb25maWcgYXMgYW55KT8uYW5nbGUpID8gKGNvbmZpZyBhcyBhbnkpLmFuZ2xlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZXJpdmVkRnJvbUFuZ2xlID1cbiAgICBwcm92aWRlZEFuZ2xlICE9IG51bGwgPyB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlKHByb3ZpZGVkQW5nbGUpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0ZXh0U2lkZSA9XG4gICAgY29uZmlnPy50ZXh0U2lkZSA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnNpZGUgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUpO1xuICBjb25zdCB0ZXh0VmVydGljYWxQb3NpdGlvbiA9XG4gICAgY29uZmlnPy50ZXh0VmVydGljYWxQb3NpdGlvbiA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnZlcnRpY2FsID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTik7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICAuLi4odGV4dFNpZGUgPyB7dGV4dFNpZGV9IDoge30pLFxuICAgIC4uLih0ZXh0VmVydGljYWxQb3NpdGlvbiA/IHt0ZXh0VmVydGljYWxQb3NpdGlvbn0gOiB7fSksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBjb25zdCBkZWZhdWx0QW5nbGUgPVxuICAgIHRleHRTaWRlICYmIHRleHRWZXJ0aWNhbFBvc2l0aW9uXG4gICAgICA/IEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UW2Ake3RleHRTaWRlfS0ke3RleHRWZXJ0aWNhbFBvc2l0aW9ufWBdXG4gICAgICA6IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzogcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkoXG4gICAgICBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIGdldFpvb21PcGFjaXR5QW5ub3RhdGlvblRhcmdldElkKGlkKVxuICAgICksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIERlcml2ZWQgdGFibGVzIGFyZSBzbmFwc2hvdHM6IGtlZXAgdGhlbSB3aGVuIGEgc291cmNlIGRhdGFzZXQgaXMgZGVsZXRlZC5cbiAgLy8gT25seSBkcm9wIGluLXByb2dyZXNzIGdyb3VwLWJ5IC8gam9pbiBkcmFmdHMgdGhhdCByZWZlcmVuY2VkIHRoaXMgZGF0YXNldC5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVtb3ZlT3BzRm9yRGF0YXNldHMoc3RhdGUsIFtkYXRhc2V0S2V5XSkgYXMgVDtcbiAgcmV0dXJuIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyKG5leHRTdGF0ZSwgZGF0YXNldEtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFQsIGRhdGFzZXRLZXk6IHN0cmluZyk6IFQge1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBfZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSksXG4gICAgY2hhcnQgPT4ge1xuICAgICAgaWYgKGNoYXJ0LmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNUb1JlbW92ZS5pbmNsdWRlcyhjaGFydC5sYXllcklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogR0VPQ09ERVJfREFUQVNFVF9OQU1FfSk7XG4gIH1cblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInKSB7XG4gICAgY29uc3QgZ2VvY29kZXJMYXllciA9IG5ld1N0YXRlLmxheWVycy5maW5kKGxheWVyID0+IGxheWVyLmlkID09PSBHRU9DT0RFUl9MQVlFUl9JRCk7XG4gICAgaWYgKGdlb2NvZGVyTGF5ZXIpIHtcbiAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgb2xkTGF5ZXI6IGdlb2NvZGVyTGF5ZXIsXG4gICAgICAgIG5ld0NvbmZpZzoge2NvbG9yOiBjb25maWcuY29uZmlnLmNvbG9yID8/IEdFT0NPREVSX0lDT05fQ09MT1J9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoe1xuICBhcmc6IGRhdGFzZXQsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiBQcm90b0RhdGFzZXQ7XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDAsXG4gICAgb25Qcm9ncmVzc1xuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgaW5kZXggPSAwKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhc2V0LmluZm8/LmlkID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0LmluZm8uaWQpIHtcbiAgICByZXR1cm4gZGF0YXNldC5pbmZvLmlkO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSkge1xuICAgIHJldHVybiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZTtcbiAgfVxuICByZXR1cm4gYGRhdGFzZXQtJHtpbmRleH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIGNvbnN0IHByb2dyZXNzSWQgPSBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0KTtcbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICBhcmc6IGRhdGFzZXQsXG4gICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgIHNldExvYWRpbmdQcm9ncmVzcyhcbiAgICAgICAgcHJvZ3Jlc3NJZCxcbiAgICAgICAgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApLFxuICAgICAgICBwcm9ncmVzcz8ucGhhc2UgPT09ICdwcm9jZXNzaW5nJyA/ICdwcm9jZXNzaW5nJyA6IHVuZGVmaW5lZFxuICAgICAgKVxuICB9KS5jaGFpbihoeWRyYXRlZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeShoeWRyYXRlZCwgZGF0YXNldHMpO1xuICAgIHJldHVybiAoXG4gICAgICB0YXNrIHx8XG4gICAgICBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0soJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzJylcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJMb2FkaW5nUHJvZ3Jlc3Moc3RhdGU6IFZpc1N0YXRlLCBpZHM/OiBzdHJpbmdbXSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgY3VycmVudCA9IHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fTtcbiAgY29uc3QgcHJvY2Vzc2luZyA9IHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9O1xuICBpZiAoIU9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXMocHJvY2Vzc2luZykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319O1xuICB9XG4gIGlmICghaWRzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5jdXJyZW50fTtcbiAgY29uc3QgbmV4dFByb2Nlc3NpbmcgPSB7Li4ucHJvY2Vzc2luZ307XG4gIGlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBkZWxldGUgbmV4dFtpZF07XG4gICAgZGVsZXRlIG5leHRQcm9jZXNzaW5nW2lkXTtcbiAgfSk7XG4gIHJldHVybiB7Li4uc3RhdGUsIGxvYWRpbmdQcm9ncmVzczogbmV4dCwgbG9hZGluZ1Byb2Nlc3Npbmc6IG5leHRQcm9jZXNzaW5nfTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG50eXBlIFByb2dyZXNzaXZlTG9hZENvbnRpbnVhdGlvbiA9IFJldHVyblR5cGU8dHlwZW9mIGxvYWRGaWxlc1N1Y2Nlc3M+ICYge1xuICBwcm9ncmVzc2l2ZVN0ZXBzOiBGaWxlQ2FjaGVJdGVtW11bXTtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NpdmVVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiAmIHtcbiAgb25GaW5pc2g/OiBQcm9ncmVzc2l2ZUxvYWRDb250aW51YXRpb247XG59O1xuXG50eXBlIFByb2dyZXNzaXZlQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkID0gQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkICYge1xuICBvbkZpbmlzaD86IFByb2dyZXNzaXZlTG9hZENvbnRpbnVhdGlvbjtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCByZWFkeVRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IHJlbW90ZVRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IGh5ZHJhdGVQcm9ncmVzczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCBwcm90byA9IHtpbmZvLCAuLi5yZXN0fTtcbiAgICBjb25zdCByZW1vdGUgPSBuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKHByb3RvKTtcbiAgICBpZiAocmVtb3RlKSB7XG4gICAgICBoeWRyYXRlUHJvZ3Jlc3NbZ2V0RGF0YXNldFByb2dyZXNzSWQocHJvdG8sIGRhdGFzZXRJbmRleCldID0gMDtcbiAgICB9XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2socHJvdG8sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgKHJlbW90ZSA/IHJlbW90ZVRhc2tzIDogcmVhZHlUYXNrcykucHVzaCh0YXNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzYCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWZhaWxlZC0ke2RhdGFzZXRJbmRleH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhcnNlZCBkYXRhc2V0cyBhcmUgY29tbWl0dGVkIG9uIHRoZWlyIG93bi4gQSByZW1vdGUgZG93bmxvYWQgaW4gdGhlIHNhbWVcbiAgLy8gYWRkIG11c3Qgbm90IGhvbGQgdGhlbSB1bnRpbCB0aGUgVVJMIGZpbmlzaGVzLlxuICBjb25zdCBwcm9ncmVzc0lkcyA9IE9iamVjdC5rZXlzKGh5ZHJhdGVQcm9ncmVzcyk7XG4gIGNvbnN0IGJhdGNoZXM6IEFycmF5PHt0YXNrczogVGFza0Rlc2NyaXB0b3JbXTsgcHJvZ3Jlc3NJZHM6IHN0cmluZ1tdfT4gPSBbXTtcbiAgaWYgKHJlYWR5VGFza3MubGVuZ3RoKSB7XG4gICAgYmF0Y2hlcy5wdXNoKHt0YXNrczogcmVhZHlUYXNrcywgcHJvZ3Jlc3NJZHM6IFtdfSk7XG4gIH1cbiAgaWYgKHJlbW90ZVRhc2tzLmxlbmd0aCkge1xuICAgIGJhdGNoZXMucHVzaCh7dGFza3M6IHJlbW90ZVRhc2tzLCBwcm9ncmVzc0lkc30pO1xuICB9XG5cbiAgaWYgKGJhdGNoZXMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIoXG4gICAgICB1cGRhdGVkU3RhdGUsXG4gICAgICBwYXlsb2FkXyh7Y2hhbmdlOiBiYXRjaGVzLmxlbmd0aCwgdHlwZTogJyd9KVxuICAgICk7XG4gICAgaWYgKHByb2dyZXNzSWRzLmxlbmd0aCkge1xuICAgICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGxvYWRpbmdQcm9ncmVzczoge1xuICAgICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MsXG4gICAgICAgICAgLi4uaHlkcmF0ZVByb2dyZXNzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgW1xuICAgIC4uLmJhdGNoZXMubWFwKChiYXRjaCwgYmF0Y2hJbmRleCkgPT5cbiAgICAgIFRhc2suYWxsU2V0dGxlZChiYXRjaC50YXNrcykubWFwKHJlc3VsdHMgPT4ge1xuICAgICAgICBjb25zdCBvbkZpbmlzaCA9IChhY3Rpb24gYXMgUHJvZ3Jlc3NpdmVVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbikub25GaW5pc2g7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFByb2dyZXNzaXZlQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkID0ge1xuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgICAgYWRkVG9NYXBPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHByb2dyZXNzSWRzOiBiYXRjaC5wcm9ncmVzc0lkcyxcbiAgICAgICAgICAuLi4ob25GaW5pc2ggJiYgYmF0Y2hJbmRleCA9PT0gYmF0Y2hlcy5sZW5ndGggLSAxID8ge29uRmluaXNofSA6IHt9KVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MocGF5bG9hZCk7XG4gICAgICB9KVxuICAgICksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnMsIHByb2dyZXNzSWRzLCBvbkZpbmlzaH0gPVxuICAgIGFjdGlvbi5wYXlsb2FkIGFzIFByb2dyZXNzaXZlQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIGNsZWFyTG9hZGluZ1Byb2dyZXNzKFxuICAgICAgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAtMX0pKSxcbiAgICAgIHByb2dyZXNzSWRzXG4gICAgKSxcbiAgICBbXG4gICAgICAuLi5ub3RpZmljYXRpb25UYXNrcyxcbiAgICAgIC8vIE1hdGNoIHRoZSBvcmlnaW5hbCBBcnJvdyBiYXRjaGluZyBjYWRlbmNlOiBjcm9zcyBhbiBldmVudC1sb29wIHR1cm4gc29cbiAgICAgIC8vIFJlYWN0L2RlY2suZ2wgY2FuIHBhaW50IHRoaXMgc25hcHNob3QgYmVmb3JlIHRoZSBuZXh0IHRhYmxlIHVwZGF0ZS5cbiAgICAgIC4uLihvbkZpbmlzaCA/IFtERUxBWV9UQVNLKDEwKS5tYXAoKCkgPT4gb25GaW5pc2gpXSA6IFtdKVxuICAgIF1cbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmdlb2pzb24gfHwgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbic7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIC8vIGEgbGF5ZXIgYWxyZWFkeSBpbiBhIHBhbmVsIHdhcyBtZXJnZWQgZnJvbSBzcGxpdCBtYXBzLCB3aGljaCBkZWNpZGUgdGhlIHBhbmVscyBzaG93aW5nIGl0XG4gICAgY29uc3QgbGF5ZXJzTm90SW5TcGxpdE1hcHMgPSBuZXdMYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiAhbWVyZ2VkU3RhdGUuc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbGF5ZXJzTm90SW5TcGxpdE1hcHMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgICAvLyBBIHRpbGVzZXQgYWNjZXNzIHRva2VuIGlzIHJlYWQgd2hpbGUgZm9ybWF0dGluZyBsYXllciBkYXRhLiBSZWZyZXNoXG4gICAgLy8gb25seSB3aGVuIHRoYXQgZmllbGQgY2hhbmdlcyBzbyBvdGhlciBtZXRhZGF0YSBlZGl0cyAoZS5nLiByZWZyZXNoXG4gICAgLy8gaW50ZXJ2YWwpIGRvIG5vdCByZWJ1aWxkIGV2ZXJ5IGxheWVyIG9uIHRoZSBkYXRhc2V0LlxuICAgIGlmIChwcm9wcy5tZXRhZGF0YSAmJiAndGlsZTNkQWNjZXNzVG9rZW4nIGluIHByb3BzLm1ldGFkYXRhKSB7XG4gICAgICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgZGF0YUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZS12YWxpZGF0ZSBhIGxpdmUgbGF5ZXIgYWdhaW5zdCBhIHRhYmxlIHdob3NlIHNjaGVtYSBqdXN0IGNoYW5nZWQuXG4gKlxuICogVGhlIGxheWVyJ3MgY29sdW1ucyAvIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAvIHRleHQtbGFiZWwgZmllbGRzIGFyZSBmaXJzdFxuICogcmVtYXBwZWQgdG8gdGhlaXIgbmV3IG5hbWVzICh2aWEgYHJlbmFtZXNgKSBzbyB0aGUgbGF5ZXIgZm9sbG93cyBhIHJlbmFtZVxuICogaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLCB0aGVuIHJlLXZhbGlkYXRlZCB3aXRoXG4gKiBgdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGFgIOKAlCB0aGUgc2FtZSBzZXJpYWxpemUgKyB2YWxpZGF0ZSBwYXRoIHVzZWRcbiAqIHdoZW4gYSBzYXZlZCBjb25maWcgaXMgbG9hZGVkIGFnYWluc3QgbmV3IGRhdGEuIFJldHVybnMgYG51bGxgIHdoZW4gYVxuICogcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgKHRoZSBsYXllciBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0KS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKFxuICBsYXllcjogTGF5ZXIsXG4gIHJlbmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5ld1RhYmxlOiBLZXBsZXJUYWJsZSxcbiAgc3RhdGU6IFZpc1N0YXRlXG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCBjb25maWdQYXRjaDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIGNvbHVtbnNcbiAgY29uc3QgY29sdW1uc1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZyB8IG51bGw7IGZpZWxkSWR4OiBudW1iZXJ9PiA9IHt9O1xuICBsZXQgY29sdW1uc0NoYW5nZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmVudHJpZXMobGF5ZXIuY29uZmlnLmNvbHVtbnMgfHwge30pLmZvckVhY2goKFtja2V5LCBjb2xdKSA9PiB7XG4gICAgaWYgKGNvbD8udmFsdWUgJiYgcmVuYW1lc1tjb2wudmFsdWVdKSB7XG4gICAgICBjb2x1bW5zUGF0Y2hbY2tleV0gPSB7Li4uY29sLCB2YWx1ZTogcmVuYW1lc1tjb2wudmFsdWVdfTtcbiAgICAgIGNvbHVtbnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY29sdW1uc0NoYW5nZWQpIHtcbiAgICBjb25maWdQYXRjaC5jb2x1bW5zID0gey4uLmxheWVyLmNvbmZpZy5jb2x1bW5zLCAuLi5jb2x1bW5zUGF0Y2h9O1xuICB9XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdmlzdWFsLWNoYW5uZWwgZmllbGRzIChjb2xvckZpZWxkLCBzaXplRmllbGQsIC4uLilcbiAgT2JqZWN0LnZhbHVlcyhsYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkfSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRDb25maWc/Lm5hbWUgJiYgcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXSkge1xuICAgICAgY29uZmlnUGF0Y2hbZmllbGRdID0gey4uLmZpZWxkQ29uZmlnLCBuYW1lOiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIG9yIHJlLXR5cGVkIHRleHQtbGFiZWwgZmllbGRzXG4gIGlmIChsYXllci5jb25maWcudGV4dExhYmVsPy5sZW5ndGgpIHtcbiAgICBjb25maWdQYXRjaC50ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcCh0bCA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdGwuZmllbGQ/Lm5hbWU7XG4gICAgICBjb25zdCBmaWVsZCA9XG4gICAgICAgIG5hbWUgJiYgbmV3VGFibGUuZmllbGRzLmZpbmQoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5uYW1lID09PSAocmVuYW1lc1tuYW1lXSA/PyBuYW1lKSk7XG4gICAgICByZXR1cm4gZmllbGQgJiYgKGZpZWxkLm5hbWUgIT09IG5hbWUgfHwgZmllbGQudHlwZSAhPT0gdGwuZmllbGQ/LnR5cGUpID8gey4uLnRsLCBmaWVsZH0gOiB0bDtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNoYWxsb3ctY29weSB0aGUgbGF5ZXIgc28gd2UgbmV2ZXIgbXV0YXRlIHJlZHV4IHN0YXRlOyB0aGUgY29weSBrZWVwcyB0aGVcbiAgLy8gcHJvdG90eXBlIG1ldGhvZHMgKGB2aXN1YWxDaGFubmVsc2AgZ2V0dGVyLCBgaXNWYWxpZFRvU2F2ZWApIHNvIGl0XG4gIC8vIHNlcmlhbGl6ZXMgZXhhY3RseSBsaWtlIGEgbGl2ZSBsYXllci5cbiAgY29uc3QgbGF5ZXJDb3B5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihsYXllcikpLCBsYXllcik7XG4gIGlmIChPYmplY3Qua2V5cyhjb25maWdQYXRjaCkubGVuZ3RoKSB7XG4gICAgbGF5ZXJDb3B5LmNvbmZpZyA9IHsuLi5sYXllci5jb25maWcsIC4uLmNvbmZpZ1BhdGNofTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgIG5ld1RhYmxlLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBsYXllckNvcHksXG4gICAgc3RhdGUuc2NoZW1hXG4gICk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZCAmJiB2YWxpZGF0ZWQuaGFzQWxsQ29sdW1ucygpID8gdmFsaWRhdGVkIDogbnVsbDtcbn1cblxuY29uc3QgRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTID0gbmV3IFNldDxzdHJpbmc+KFtBTExfRklFTERfVFlQRVMuaW50ZWdlciwgQUxMX0ZJRUxEX1RZUEVTLnJlYWxdKTtcblxuZnVuY3Rpb24gY2xlYXJUaW1lbGluZUZpbHRlclN0YXRlKGZpbHRlcjogRmlsdGVyKTogRmlsdGVyIHtcbiAgY29uc3Qge1xuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBfc3luY2VkV2l0aExheWVyVGltZWxpbmUsXG4gICAgc3luY1RpbWVsaW5lTW9kZTogX3N5bmNUaW1lbGluZU1vZGUsXG4gICAgdGltZUJpbnM6IF90aW1lQmlucyxcbiAgICBsaW5lQ2hhcnQ6IF9saW5lQ2hhcnQsXG4gICAgdGltZXpvbmU6IF90aW1lem9uZSxcbiAgICBpbnZlcnRUcmVuZENvbG9yOiBfaW52ZXJ0VHJlbmRDb2xvcixcbiAgICBzaG93VGltZURpc3BsYXk6IF9zaG93VGltZURpc3BsYXksXG4gICAgLi4ucmVzdFxuICB9ID0gZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc3QsXG4gICAgZml4ZWREb21haW46IGZhbHNlLFxuICAgIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgICBhbmltYXRpb25XaW5kb3c6IEFOSU1BVElPTl9XSU5ET1cuZnJlZSxcbiAgICB5QXhpczogbnVsbCxcbiAgICBwbG90VHlwZToge3R5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtfVxuICB9IGFzIEZpbHRlcjtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlVGltZWxpbmVQbG90QWZ0ZXJQcmltYXJ5UmVtb3ZhbChcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXVxuKTogRmlsdGVyIHtcbiAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGNvbnN0IHByaW1hcnlEYXRhc2V0ID0gZGF0YXNldHNbZmlsdGVyLmRhdGFJZFswXV07XG4gIGNvbnN0IHlBeGlzID0gZmlsdGVyLnlBeGlzPy5uYW1lXG4gICAgPyBwcmltYXJ5RGF0YXNldD8uZmllbGRzLmZpbmQoXG4gICAgICAgIGZpZWxkID0+IGZpZWxkLm5hbWUgPT09IGZpbHRlci55QXhpcz8ubmFtZSAmJiBGSUxURVJfUExPVF9ZX0FYSVNfVFlQRVMuaGFzKGZpZWxkLnR5cGUpXG4gICAgICApID8/IG51bGxcbiAgICA6IG51bGw7XG4gIGNvbnN0IGdyb3VwQnlGaWVsZE5hbWUgPSBmaWx0ZXIucGxvdFR5cGU/Lmdyb3VwQnk/LmZpZWxkTmFtZTtcbiAgY29uc3QgaGFzR3JvdXBCeUZpZWxkID0gZ3JvdXBCeUZpZWxkTmFtZVxuICAgID8gcHJpbWFyeURhdGFzZXQ/LmZpZWxkcy5zb21lKGZpZWxkID0+IGZpZWxkLm5hbWUgPT09IGdyb3VwQnlGaWVsZE5hbWUpXG4gICAgOiB0cnVlO1xuICBjb25zdCBwbG90VHlwZSA9IHtcbiAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgLi4uKGZpbHRlci55QXhpcyAmJiAheUF4aXMgPyB7dHlwZTogUExPVF9UWVBFUy5oaXN0b2dyYW19IDoge30pLFxuICAgIC4uLighaGFzR3JvdXBCeUZpZWxkID8ge2dyb3VwQnk6IG51bGx9IDoge30pXG4gIH07XG5cbiAgcmV0dXJuIHsuLi5maWx0ZXIsIHlBeGlzLCBwbG90VHlwZSwgbGluZUNoYXJ0OiB1bmRlZmluZWR9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0J3Mgc2NoZW1hIChjb2x1bW5zL2ZpZWxkcykgaW4gcGxhY2UgYW5kIHJlY29uY2lsZVxuICogZXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZWQgdGhlIG9sZCBjb2x1bW5zOiBmaWx0ZXJzLCBsYXllcnMsIHRvb2x0aXAgZmllbGRzLFxuICogcGlubmVkIGNvbHVtbnMgYW5kIHNvcnQgc3RhdGUuIFRoZSBkYXRhc2V0IGtlZXBzIGl0cyBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YS5cbiAqXG4gKiBgYWN0aW9uLmRhdGFgIGlzIHRoZSBzYW1lIHNoYXBlIGBLZXBsZXJUYWJsZS5pbXBvcnREYXRhYCBhY2NlcHRzIChge2NvbHMsXG4gKiBmaWVsZHMsIGFycm93VGFibGV9YCB3aGVuIHJlcGxhY2luZyBjb2x1bW5zKS4gYGFjdGlvbi5yZW5hbWVzYCBpcyBhbiBvcHRpb25hbFxuICogb2xkIOKGkiBuZXcgY29sdW1uLW5hbWUgbWFwIHNvIGxheWVycy9maWx0ZXJzL3Rvb2x0aXBzIGZvbGxvdyBhIHJlbmFtZSBpbnN0ZWFkXG4gKiBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLlxuICpcbiAqIFJlY29uY2lsaWF0aW9uIGlzIG5hbWUtYmFzZWQg4oCUIHRoZSBzYW1lIHdheSBrZXBsZXIuZ2wgbG9hZHMgYSBzYXZlZCBjb25maWdcbiAqIGFnYWluc3QgY2hhbmdlZCBkYXRhLiBBIGxheWVyIHdob3NlIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lIGlzIHJlbW92ZWQ7IGFcbiAqIGZpbHRlciBvbiBhIGdvbmUgY29sdW1uIGlzIGRyb3BwZWQgKG9yIHRoZSBkYXRhc2V0IGlzIHNwbGljZWQgb3V0IG9mIGEgc3luY2VkXG4gKiBmaWx0ZXIpOyB0b29sdGlwIGZpZWxkcyBhcmUgcmVtYXBwZWQgLyBkcm9wcGVkLlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBkYXRhLCByZW5hbWVzID0ge319ID0gYWN0aW9uO1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyAxLiByZWJ1aWxkIHRoZSB0YWJsZSBzY2hlbWEgaW4gcGxhY2UgKHNhbWUgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEpXG4gIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB7fSk7XG4gIGNvbnN0IFtzb3J0ZWRDb2x1bW4sIHNvcnRNb2RlXSA9IE9iamVjdC5lbnRyaWVzKGV4aXN0aW5nLnNvcnRDb2x1bW4gfHwge30pWzBdIHx8IFtdO1xuICBuZXdUYWJsZS51cGRhdGVTY2hlbWEoZGF0YSk7XG4gIG5ld1RhYmxlLmRhdGFSZXZpc2lvbiA9IGV4aXN0aW5nLmRhdGFSZXZpc2lvbiArIDE7XG5cbiAgLy8gVGhlIGRhdGEgY29udGFpbmVyIGlzIHJlYnVpbHQgdW5zb3J0ZWQgYW5kIHVuZmlsdGVyZWQ7IHJlc2V0IHRoZSB0YWJsZSdzXG4gIC8vIHZpZXcgc3RhdGUgdGhhdCBpbmRleGVzIGludG8gdGhlIG9sZCBjb250YWluZXIuXG4gIG5ld1RhYmxlLmZpbHRlcmVkSWR4Q1BVID0gbmV3VGFibGUuYWxsSW5kZXhlcztcbiAgbmV3VGFibGUuZmlsdGVyUmVjb3JkQ1BVID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0Q29sdW1uID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0T3JkZXIgPSBudWxsO1xuICBjb25zdCBuZXdGaWVsZHNCeU5hbWUgPSBuZXcgTWFwKG5ld1RhYmxlLmZpZWxkcy5tYXAoZmllbGQgPT4gW2ZpZWxkLm5hbWUsIGZpZWxkXSkpO1xuICBuZXdUYWJsZS5waW5uZWRDb2x1bW5zID0gKGV4aXN0aW5nLnBpbm5lZENvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSk7XG4gIG5ld1RhYmxlLmhpZGRlbkNvbHVtbnMgPSAoZXhpc3RpbmcuaGlkZGVuQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpKTtcbiAgY29uc3QgbmV4dFNvcnRlZENvbHVtbiA9IHNvcnRlZENvbHVtbiA/IHJlbmFtZXNbc29ydGVkQ29sdW1uXSA/PyBzb3J0ZWRDb2x1bW4gOiBudWxsO1xuICBpZiAobmV4dFNvcnRlZENvbHVtbiAmJiBzb3J0TW9kZSAmJiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5leHRTb3J0ZWRDb2x1bW4pKSB7XG4gICAgc29ydERhdGFzZXRCeUNvbHVtbihuZXdUYWJsZSwgbmV4dFNvcnRlZENvbHVtbiwgc29ydE1vZGUpO1xuICB9XG5cbiAgY29uc3QgbmV3RGF0YXNldHMgPSB7Li4uc3RhdGUuZGF0YXNldHMsIFtkYXRhSWRdOiBuZXdUYWJsZX07XG4gIGNvbnN0IGRhdGFzZXRJZHNUb1JlZmlsdGVyID0gbmV3IFNldDxzdHJpbmc+KFtkYXRhSWRdKTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBQb2x5Z29uIGZpbHRlcnMgdGFyZ2V0IGxheWVycyByYXRoZXIgdGhhbiBkYXRhc2V0IGZpZWxkcywgc28gYSBjb2x1bW5cbiAgICAgIC8vIHR5cGUgY2hhbmdlIHNob3VsZCBub3QgcmVjb25jaWxlIHRoZW0gYWdhaW5zdCB0aGUgZmllbGQgbGlzdC5cbiAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24pIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZSA9IGZpbHRlci5uYW1lW3ZpXTtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSByZW5hbWVzW29sZE5hbWVdID8/IG9sZE5hbWU7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5ld05hbWUpO1xuICAgICAgY29uc3QgbmV4dEZpbHRlclR5cGUgPSBmaWVsZElkeCA9PT0gLTEgPyBudWxsIDogbmV3VGFibGUuZ2V0Q29sdW1uRmlsdGVyUHJvcHMobmV3TmFtZSk/LnR5cGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGRJZHggPT09IC0xIHx8XG4gICAgICAgIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEgJiYgbmV4dEZpbHRlclR5cGUgJiYgbmV4dEZpbHRlclR5cGUgIT09IGZpbHRlci50eXBlKVxuICAgICAgKSB7XG4gICAgICAgIC8vIERyb3AgYSBtaXNzaW5nIGZpZWxkIG9yIGRldGFjaCBhbiBpbmNvbXBhdGlibGUgc3luY2VkIG1lbWJlci5cbiAgICAgICAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZmlsdGVyLmRhdGFJZC5mb3JFYWNoKGlkID0+IGRhdGFzZXRJZHNUb1JlZmlsdGVyLmFkZChpZCkpO1xuICAgICAgICBjb25zdCBkZXRhY2hlZEZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2aSwgbmV3RGF0YXNldHMpO1xuICAgICAgICByZXR1cm4gdmkgPT09IDBcbiAgICAgICAgICA/IHJlY29uY2lsZVRpbWVsaW5lUGxvdEFmdGVyUHJpbWFyeVJlbW92YWwoZGV0YWNoZWRGaWx0ZXIsIG5ld0RhdGFzZXRzKVxuICAgICAgICAgIDogZGV0YWNoZWRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgbGV0IHtmaWx0ZXI6IHVwZGF0ZWR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoZmlsdGVyLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBuZXdOYW1lLCB2aSwge1xuICAgICAgICBtZXJnZURvbWFpbjogdmkgPiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghdXBkYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxlYXZpbmdUaW1lRmlsdGVyID1cbiAgICAgICAgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgdXBkYXRlZC50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlO1xuXG4gICAgICBjb25zdCBvbGRFbmROYW1lID0gdG9BcnJheSgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuZW5kTmFtZSlbdmldO1xuICAgICAgaWYgKHVwZGF0ZWQudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBvbGRFbmROYW1lKSB7XG4gICAgICAgIGNvbnN0IGVuZE5hbWUgPSByZW5hbWVzW29sZEVuZE5hbWVdID8/IG9sZEVuZE5hbWU7XG4gICAgICAgIHVwZGF0ZWQgPVxuICAgICAgICAgIGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSh1cGRhdGVkLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBlbmROYW1lLCB2aSkuZmlsdGVyID8/XG4gICAgICAgICAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKHVwZGF0ZWQsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG51bGwsIHZpKS5maWx0ZXIgPz9cbiAgICAgICAgICB1cGRhdGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaW1lIHBsb3RzIG9ubHkgYWNjZXB0IG51bWVyaWMgeS1heGlzIGZpZWxkcy4gUmUtcmVzb2x2ZSB0aGUgY29tcGxldGVcbiAgICAgIC8vIGZpZWxkIHNvIHR5cGUgYW5kIGZpZWxkSWR4IGFsc28gZm9sbG93IGEgc2NoZW1hIGNoYW5nZS5cbiAgICAgIGxldCB5QXhpcyA9IHVwZGF0ZWQueUF4aXM7XG4gICAgICBpZiAodmkgPT09IDAgJiYgdXBkYXRlZC55QXhpcz8ubmFtZSkge1xuICAgICAgICBjb25zdCB5QXhpc05hbWUgPSByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV0gPz8gdXBkYXRlZC55QXhpcy5uYW1lO1xuICAgICAgICBjb25zdCB5QXhpc0ZpZWxkID0gbmV3RmllbGRzQnlOYW1lLmdldCh5QXhpc05hbWUpO1xuICAgICAgICB5QXhpcyA9IHlBeGlzRmllbGQgJiYgRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTLmhhcyh5QXhpc0ZpZWxkLnR5cGUpID8geUF4aXNGaWVsZCA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGxldCBuZXh0RmlsdGVyID0ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLi4uKHVwZGF0ZWQueUF4aXMgJiYgIXlBeGlzXG4gICAgICAgICAgPyB7cGxvdFR5cGU6IHsuLi51cGRhdGVkLnBsb3RUeXBlLCB0eXBlOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbX19XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC8vIGNsYW1wIHRoZSB1c2VyJ3MgcHJldmlvdXMgc2VsZWN0aW9uIGludG8gdGhlIG5ldyBkb21haW4gaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXNldHRpbmcgaXQgdG8gdGhlIGZ1bGwgcmFuZ2VcbiAgICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oZmlsdGVyLnZhbHVlLCB1cGRhdGVkKVxuICAgICAgfTtcbiAgICAgIGlmIChsZWF2aW5nVGltZUZpbHRlcikge1xuICAgICAgICBuZXh0RmlsdGVyID0gY2xlYXJUaW1lbGluZUZpbHRlclN0YXRlKG5leHRGaWx0ZXIpO1xuICAgICAgfSBlbHNlIGlmICh2aSA9PT0gMCAmJiBuZXh0RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBCeSA9IG5leHRGaWx0ZXIucGxvdFR5cGUuZ3JvdXBCeTtcbiAgICAgICAgaWYgKGdyb3VwQnkgJiYgcmVuYW1lc1tncm91cEJ5LmZpZWxkTmFtZV0pIHtcbiAgICAgICAgICBuZXh0RmlsdGVyLnBsb3RUeXBlID0ge1xuICAgICAgICAgICAgLi4ubmV4dEZpbHRlci5wbG90VHlwZSxcbiAgICAgICAgICAgIGdyb3VwQnk6IHsuLi5ncm91cEJ5LCBmaWVsZE5hbWU6IHJlbmFtZXNbZ3JvdXBCeS5maWVsZE5hbWVdfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGltZWxpbmUgYmlucyBjYW4gcmVtYWluIGlkZW50aWNhbCB3aGlsZSB5LWF4aXMgb3IgZ3JvdXAtYnkgdmFsdWVzXG4gICAgICAgIC8vIGNoYW5nZSwgc28gZG8gbm90IHJldXNlIHRoZSBvbGQgc2VyaWVzIGNhY2hlIGFmdGVyIGEgZGF0YSByZWJ1aWxkLlxuICAgICAgICBuZXh0RmlsdGVyID0gey4uLm5leHRGaWx0ZXIsIGxpbmVDaGFydDogdW5kZWZpbmVkfTtcbiAgICAgIH1cbiAgICAgIC8vIEtlZXAgZXhpc3RpbmcgcGxvdHM7IHRpbWUgcGxvdHMgYXJlIHJlYnVpbHQgYWZ0ZXIgZmlsdGVyaW5nIGJlbG93LlxuICAgICAgcmV0dXJuIGZpbHRlci50eXBlID09PSBuZXh0RmlsdGVyLnR5cGUgfHwgbmV4dEZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlXG4gICAgICAgID8gbmV4dEZpbHRlclxuICAgICAgICA6IHVwZGF0ZUZpbHRlclBsb3QobmV3RGF0YXNldHMsIG5leHRGaWx0ZXIsIGRhdGFJZCwgc3RhdGUubGF5ZXJzKTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgRmlsdGVyW107XG5cbiAgLy8gMy4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIFBvbHlnb24gZmlsdGVycyByZWZlcmVuY2UgbGF5ZXJzLCBub3QgZmllbGRzLiBQcmVzZXJ2ZSB0aGVtIGZvciBzY2hlbWFcbiAgLy8gZWRpdHMgdGhhdCBrZWVwIHRoZWlyIHRhcmdldCBsYXllcnMsIGJ1dCByZW1vdmUgaW52YWxpZCB0YXJnZXRzIGJlZm9yZVxuICAvLyByZWJ1aWxkaW5nIGZpbHRlciByZWNvcmRzIHdoZW4gYSByZXF1aXJlZCBsYXllciBjb2x1bW4gd2FzIGRlbGV0ZWQuXG4gIGNvbnN0IHJlbW92ZWRMYXllcklkcyA9IG5ldyBTZXQobGF5ZXJzVG9SZW1vdmUpO1xuICBpZiAocmVtb3ZlZExheWVySWRzLnNpemUpIHtcbiAgICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5mbGF0TWFwKGZpbHRlciA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMucG9seWdvbiB8fFxuICAgICAgICAhZmlsdGVyLmxheWVySWQ/LnNvbWUoaWQgPT4gcmVtb3ZlZExheWVySWRzLmhhcyhpZCkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIFtmaWx0ZXJdO1xuICAgICAgfVxuICAgICAgZmlsdGVyLmRhdGFJZC5mb3JFYWNoKGlkID0+IGRhdGFzZXRJZHNUb1JlZmlsdGVyLmFkZChpZCkpO1xuICAgICAgY29uc3QgbGF5ZXJJZCA9IGZpbHRlci5sYXllcklkLmZpbHRlcihpZCA9PiAhcmVtb3ZlZExheWVySWRzLmhhcyhpZCkpO1xuICAgICAgcmV0dXJuIGxheWVySWQubGVuZ3RoID8gW3suLi5maWx0ZXIsIGxheWVySWR9XSA6IFtdO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVhc3NpZ24gR1BVIGNoYW5uZWxzIG5vdyB0aGF0IHRoZSBmaWx0ZXIgbGlzdCBpcyBzZXR0bGVkLlxuICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5tYXAoZmlsdGVyID0+XG4gICAgZmlsdGVyLmdwdSA/IGFzc2lnbkdwdUNoYW5uZWwoc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIG5ld0ZpbHRlcnMpLCBuZXdGaWx0ZXJzKSA6IGZpbHRlclxuICApO1xuXG4gIC8vIDQuIHJlYnVpbGQgdGhlIHRhYmxlJ3MgZmlsdGVyIHN0YXRlIHVzaW5nIG9ubHkgbGF5ZXJzIHRoYXQgd2lsbCBzdXJ2aXZlXG4gIGNvbnN0IHN1cnZpdmluZ0xheWVycyA9IG5ld0xheWVycy5maWx0ZXIobGF5ZXIgPT4gIXJlbW92ZWRMYXllcklkcy5oYXMobGF5ZXIuaWQpKTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgQXJyYXkuZnJvbShkYXRhc2V0SWRzVG9SZWZpbHRlciksXG4gICAgbmV3RGF0YXNldHMsXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdXJ2aXZpbmdMYXllcnNcbiAgKTtcblxuICAvLyA1LiByZWNvbmNpbGUgdG9vbHRpcCBmaWVsZHNUb1Nob3dcbiAgbGV0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IHRvb2x0aXAgPSBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcDtcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gdG9vbHRpcD8uY29uZmlnPy5maWVsZHNUb1Nob3c/LltkYXRhSWRdO1xuICBpZiAoZmllbGRzVG9TaG93KSB7XG4gICAgY29uc3QgbmV4dEZpZWxkc1RvU2hvdyA9IGZpZWxkc1RvU2hvdy5mbGF0TWFwKGYgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHJlbmFtZXNbZi5uYW1lXSA/PyBmLm5hbWU7XG4gICAgICByZXR1cm4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSA/IFt7Li4uZiwgbmFtZX1dIDogW107XG4gICAgfSk7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4udG9vbHRpcCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4udG9vbHRpcC5jb25maWcsXG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7Li4udG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LCBbZGF0YUlkXTogbmV4dEZpZWxkc1RvU2hvd31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgY2hhcnRzOiByZW1hcENoYXJ0c0ZvckRhdGFzZXQoc3RhdGUuY2hhcnRzLCBkYXRhSWQsIHJlbmFtZXMsIG5ld0ZpZWxkc0J5TmFtZSlcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gRmlsdGVyaW5nIGFuZCBwb2x5Z29uLWxheWVyIHJlbW92YWwgY2FuIGNoYW5nZSB0aGUgcm93cyBiZWhpbmQgdGltZWxpbmVcbiAgLy8gcGxvdHMsIHNvIHJlYnVpbGQgdGhlaXIgY2FjaGVkIGJpbnMvc2VyaWVzIGZyb20gdGhlIHJlY29uY2lsZWQgc3RhdGUuXG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmcobmV4dFN0YXRlLCBBcnJheS5mcm9tKGRhdGFzZXRJZHNUb1JlZmlsdGVyKSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYSBjb2x1bW4ncyBzdG9yZWQgaWRlbnRpdHkgKGBmaWVsZC5uYW1lYCkgYW5kIGV2ZXJ5IGxheWVyLCBmaWx0ZXIsXG4gKiB0b29sdGlwLCBhbmQgY2hhcnQgcmVmZXJlbmNlIHRoYXQgdXNlZCB0aGUgb2xkIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGZpZWxkTmFtZSwgbmV3TmFtZX0gPSBhY3Rpb247XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgIWNhbk11dGF0ZURhdGFzZXRTY2hlbWEoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IGJ1aWxkUmVuYW1lQ29sdW1uRGF0YShkYXRhc2V0LCBmaWVsZE5hbWUsIG5ld05hbWUpO1xuICBpZiAoIXBheWxvYWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YUlkLFxuICAgIGRhdGE6IHBheWxvYWQuZGF0YSxcbiAgICByZW5hbWVzOiBwYXlsb2FkLnJlbmFtZXNcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGNvbXBsZXRlIGNvbHVtbiBiZWZvcmUgY29tbWl0dGluZyBpdHMgbmV3IHR5cGUuIEEgZmFpbGVkIHZhbHVlXG4gKiBsZWF2ZXMgdGhlIHRhYmxlIGFuZCBldmVyeSByZWZlcmVuY2UgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlVGFibGVDb2x1bW5UeXBlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DaGFuZ2VUYWJsZUNvbHVtblR5cGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGZpZWxkTmFtZSwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgIWNhbk11dGF0ZURhdGFzZXRTY2hlbWEoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYnVpbGRDaGFuZ2VDb2x1bW5UeXBlRGF0YShkYXRhc2V0LCBmaWVsZE5hbWUsIG5ld1R5cGUpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBpZDogYGNvbHVtbi10eXBlLSR7ZGF0YUlkfS0ke2ZpZWxkTmFtZX1gLFxuICAgICAgICAgICAgbWVzc2FnZTogYENhbm5vdCBjaGFuZ2Ug4oCcJHtmaWVsZE5hbWV94oCdIHRvICR7bmV3VHlwZX06ICR7Zm9ybWF0Q29sdW1uVHlwZUNvbnZlcnNpb25FcnJvcihcbiAgICAgICAgICAgICAgcmVzdWx0LmVycm9yXG4gICAgICAgICAgICApfS4gTm8gdmFsdWVzIHdlcmUgY2hhbmdlZC5gXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YUlkLFxuICAgIGRhdGE6IHJlc3VsdC5wYXlsb2FkLmRhdGEsXG4gICAgcmVuYW1lczogcmVzdWx0LnBheWxvYWQucmVuYW1lc1xuICB9KTtcbn1cblxuLyoqXG4gKiBEcm9wIGEgY29sdW1uIGFuZCB0aGUgbGF5ZXJzLCBmaWx0ZXJzLCBhbmQgb3RoZXIgcmVmZXJlbmNlcyB0aGF0IHJlcXVpcmVkIGl0LlxuICogVGhlIGxhc3QgcmVtYWluaW5nIGNvbHVtbiBpcyBrZXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBmaWVsZE5hbWV9ID0gYWN0aW9uO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFjYW5NdXRhdGVEYXRhc2V0U2NoZW1hKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBidWlsZERlbGV0ZUNvbHVtbkRhdGEoZGF0YXNldCwgZmllbGROYW1lKTtcbiAgaWYgKCFwYXlsb2FkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFJZCxcbiAgICBkYXRhOiBwYXlsb2FkLmRhdGEsXG4gICAgcmVuYW1lczogcGF5bG9hZC5yZW5hbWVzXG4gIH0pO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5sZXQgbmV4dEZpbGVMb2FkSWQgPSAxO1xuXG5mdW5jdGlvbiBjcmVhdGVGaWxlTG9hZElkKCk6IG51bWJlciB7XG4gIGNvbnN0IGxvYWRJZCA9IG5leHRGaWxlTG9hZElkO1xuICBuZXh0RmlsZUxvYWRJZCArPSAxO1xuICByZXR1cm4gbG9hZElkO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hGaWxlTG9hZChcbiAgb25GaW5pc2g6IChwYXlsb2FkOiBhbnksIG9wdGlvbnM/OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzT3B0aW9ucykgPT4gYW55LFxuICBmaWxlQ2FjaGU6IGFueVtdLFxuICBvcHRpb25zOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgbG9hZElkOiBudW1iZXJcbikge1xuICBjb25zdCBhY3Rpb24gPSBvcHRpb25zID8gb25GaW5pc2goZmlsZUNhY2hlLCBvcHRpb25zKSA6IG9uRmluaXNoKGZpbGVDYWNoZSk7XG4gIHJldHVybiB7Li4uYWN0aW9uLCBsb2FkSWR9O1xufVxuXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBjb21wYW5pb25GaWxlcyA9IEFycmF5LmZyb20oZmlsZXMpO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IGdldEZpbGVzVG9QYXJzZShjb21wYW5pb25GaWxlcyk7XG5cbiAgLy8gQW5vdGhlciBkcm9wIHdoaWxlIGEgZGVmZXJyZWQgcGFyc2UgaXMgcnVubmluZyBtdXN0IGpvaW4gdGhhdCBsb2FkLlxuICAvLyBSZXBsYWNpbmcgYGZpbGVMb2FkaW5nYCBtYWtlcyB0aGUgaW4tZmxpZ2h0IGZpbGUgZmluaXNoIGFnYWluc3QgdGhlIG5ld1xuICAvLyBjYWNoZSBhbmQgZHJvcCB0aGUgZmlsZXMgdGhhdCB3ZXJlIGFscmVhZHkgYmVpbmcgcGFyc2VkLlxuICBpZiAoc3RhdGUuZmlsZUxvYWRpbmcgJiYgc3RhdGUuZmlsZUxvYWRpbmcub3B0aW9ucz8uZGVmZXJBZGRUb01hcCAmJiBvcHRpb25zPy5kZWZlckFkZFRvTWFwKSB7XG4gICAgcmV0dXJuIGFwcGVuZERlZmVycmVkRmlsZUxvYWQoc3RhdGUsIHtmaWxlc1RvTG9hZCwgY29tcGFuaW9uRmlsZXN9KTtcbiAgfVxuXG4gIGlmICghZmlsZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQSBkZWZlcnJlZCBsb2FkIGlzIGFub3RoZXIgYmF0Y2ggZm9yIHRoZSBzYW1lIEFkZCBEYXRhIGNsaWNrLiBLZWVwIGZpbGVzXG4gIC8vIGFscmVhZHkgc3RhZ2VkLCBhbmQga2VlcCB0aGVpciBlcnJvciBjYXJkcywgaW5zdGVhZCBvZiBzdGFydGluZyBvdmVyLlxuICBjb25zdCBwcmV2aW91c0Vycm9ycyA9XG4gICAgb3B0aW9ucz8uZGVmZXJBZGRUb01hcCAmJiBzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzXG4gICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWU/LmVycm9yKVxuICAgICAgICApXG4gICAgICA6IHt9O1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBmaWxlc1RvTG9hZC5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAgcHJldmlvdXNFcnJvcnNcbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBsb2FkSWQ6IGNyZWF0ZUZpbGVMb2FkSWQoKSxcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIG9uRmluaXNoLFxuICAgIC4uLihvcHRpb25zID8ge29wdGlvbnN9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtcbiAgICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICAgIGZpbGVMb2FkaW5nLFxuICAgIC4uLihvcHRpb25zPy5kZWZlckFkZFRvTWFwID8ge30gOiB7c3RhZ2VkVG9BZGQ6IG51bGx9KVxuICB9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgZHJvcCB0byB0aGUgZGVmZXJyZWQgbG9hZCB0aGF0IGlzIGFscmVhZHkgcGFyc2luZy5cbiAqIFRoZSBjdXJyZW50IGZpbGUga2VlcHMgaXRzIGNhY2hlOyB0aGUgbmV3IGZpbGVzIHJ1biBhZnRlciBpdC5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kRGVmZXJyZWRGaWxlTG9hZChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgZmlsZXNUb0xvYWQsXG4gICAgY29tcGFuaW9uRmlsZXNcbiAgfToge1xuICAgIGZpbGVzVG9Mb2FkOiBGaWxlW107XG4gICAgY29tcGFuaW9uRmlsZXM6IEZpbGVbXTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsb2FkaW5nID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGlmICghbG9hZGluZyB8fCAoIWZpbGVzVG9Mb2FkLmxlbmd0aCAmJiAhY29tcGFuaW9uRmlsZXMubGVuZ3RoKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBmaWxlc1RvTG9hZC5yZWR1Y2UoXG4gICAgKGFjY3UsIGZpbGUsIGluZGV4KSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpKShhY2N1KSxcbiAgICBzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICAgIGZpbGVMb2FkaW5nOiB7XG4gICAgICAuLi5sb2FkaW5nLFxuICAgICAgZmlsZXNUb0xvYWQ6IFsuLi5BcnJheS5mcm9tKGxvYWRpbmcuZmlsZXNUb0xvYWQpLCAuLi5maWxlc1RvTG9hZF0sXG4gICAgICBjb21wYW5pb25GaWxlczogWy4uLihsb2FkaW5nLmNvbXBhbmlvbkZpbGVzIHx8IFtdKSwgLi4uY29tcGFuaW9uRmlsZXNdXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCBsb2FkSWQgPSBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQ7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgLy8gRGVjaWRlIGFmdGVyIHRoZSBwYXVzZSwgYW5kIG9ubHkgZm9yIHRoaXMgbG9hZC4gQSBkcm9wIGR1cmluZyB0aGVzZVxuICAvLyAyMDBtcyBqb2lucyB0aGUgcXVldWU7IGNhbmNlbCBvciBhIG5ld2VyIGxvYWQgbWFrZXMgdGhpcyBjb250aW51YXRpb24gc3RhbGUuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKCgpID0+IGxvYWROZXh0RmlsZShsb2FkSWQpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUsIGFjdGlvbj86IHtsb2FkSWQ/OiBudW1iZXJ9KTogVmlzU3RhdGUge1xuICBjb25zdCBsb2FkSWQgPSBhY3Rpb24/LmxvYWRJZDtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZyB8fCAobG9hZElkICE9IG51bGwgJiYgc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkICE9PSBsb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2gsIGZpbGVDYWNoZSwgb3B0aW9ucywgbG9hZElkOiBjdXJyZW50TG9hZElkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT4gZmluaXNoRmlsZUxvYWQob25GaW5pc2gsIGZpbGVDYWNoZSwgb3B0aW9ucywgY3VycmVudExvYWRJZCkpXG4gICAgKTtcbiAgfVxuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIGlmIChpc1ppcEZpbGVOYW1lKGZpbGUubmFtZSkpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICAgIEVYUEFORF9aSVBfVEFTSyh7ZmlsZSwgZXh0ZW5zaW9uczogZGF0YXNldEV4dGVuc2lvbnNGcm9tTG9hZGVycyhsb2FkZXJzKX0pLmJpbWFwKFxuICAgICAgICBleHBhbnNpb24gPT5cbiAgICAgICAgICBleHBhbmRaaXBBcmNoaXZlU3VjY2Vzcyh7XG4gICAgICAgICAgICBsb2FkSWQ6IGN1cnJlbnRMb2FkSWQsXG4gICAgICAgICAgICBhcmNoaXZlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgZXhwYW5zaW9uXG4gICAgICAgICAgfSksXG4gICAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIsIGN1cnJlbnRMb2FkSWQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9ucyxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyA/IG5leHRTdGF0ZS5maWxlTG9hZGluZy5jb21wYW5pb25GaWxlcyA6IHVuZGVmaW5lZCxcbiAgICAgIG9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMoXG4gIGxvYWRlcnM6IEFycmF5PHtleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW119PiA9IFtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBsb2FkZXIgb2YgbG9hZGVycykge1xuICAgIGZvciAoY29uc3QgZXh0ZW5zaW9uIG9mIGxvYWRlcj8uZXh0ZW5zaW9ucyB8fCBbXSkge1xuICAgICAgY29uc3QgZXh0ID0gU3RyaW5nKGV4dGVuc2lvbikucmVwbGFjZSgvXlxcLi8sICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICghZXh0IHx8IGV4dCA9PT0gJ3ppcCcgfHwgc2Vlbi5oYXMoZXh0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGV4dCk7XG4gICAgICBleHRlbnNpb25zLnB1c2goZXh0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4dGVuc2lvbnM7XG59XG5cbmZ1bmN0aW9uIGNvbXBhbmlvbkZpbGVzRm9yQXJjaGl2ZShleHBhbnNpb246IFppcEFyY2hpdmVFeHBhbnNpb24sIGV4aXN0aW5nPzogRmlsZVtdKTogRmlsZVtdIHtcbiAgY29uc3QgZXh0cmFjdGVkID1cbiAgICBleHBhbnNpb24ua2luZCA9PT0gJ3NoYXBlZmlsZSdcbiAgICAgID8gW2V4cGFuc2lvbi5zaGFwZWZpbGUsIC4uLmV4cGFuc2lvbi5jb21wYW5pb25zXVxuICAgICAgOiBbLi4uZXhwYW5zaW9uLmRhdGFzZXRzLCAuLi5leHBhbnNpb24uY29tcGFuaW9uc107XG4gIHJldHVybiBbLi4uZXh0cmFjdGVkLCAuLi4oZXhpc3RpbmcgfHwgW10pXTtcbn1cblxuZnVuY3Rpb24gd2l0aG91dEZpbGVMb2FkaW5nUHJvZ3Jlc3NFbnRyeShcbiAgcHJvZ3Jlc3M6IFZpc1N0YXRlWydmaWxlTG9hZGluZ1Byb2dyZXNzJ10sXG4gIGZpbGVOYW1lOiBzdHJpbmdcbik6IFZpc1N0YXRlWydmaWxlTG9hZGluZ1Byb2dyZXNzJ10ge1xuICBpZiAoIXByb2dyZXNzIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvZ3Jlc3MsIGZpbGVOYW1lKSkge1xuICAgIHJldHVybiBwcm9ncmVzcztcbiAgfVxuICBjb25zdCBuZXh0ID0gey4uLnByb2dyZXNzfTtcbiAgZGVsZXRlIG5leHRbZmlsZU5hbWVdO1xuICByZXR1cm4gbmV4dDtcbn1cblxuLyoqXG4gKiBBcHBseSBhbiB1bnBhY2tlZCB6aXAuIE9uZSBzaGFwZWZpbGUga2VlcHMgdGhlIGFyY2hpdmUgbmFtZS4gQW55IG90aGVyXG4gKiBtaXggaXMgcXVldWVkIGFzIG9uZSBkYXRhc2V0IHBlciBzdXBwb3J0ZWQgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkV4cGFuZFppcEFyY2hpdmVTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxvYWRpbmcgPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgaWYgKCFsb2FkaW5nIHx8IGxvYWRpbmcubG9hZElkICE9PSBhY3Rpb24ubG9hZElkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHthcmNoaXZlTmFtZSwgZXhwYW5zaW9ufSA9IGFjdGlvbjtcbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUoZXhwYW5zaW9uLCBsb2FkaW5nLmNvbXBhbmlvbkZpbGVzKTtcblxuICBpZiAoZXhwYW5zaW9uLmtpbmQgPT09ICdzaGFwZWZpbGUnKSB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtjb21wYW5pb25GaWxlc30pKShzdGF0ZSk7XG4gICAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIG5leHRTdGF0ZSxcbiAgICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICAgIGV4cGFuc2lvbi5zaGFwZWZpbGUsXG4gICAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgICBsb2FkZXJzLFxuICAgICAgICBsb2FkT3B0aW9ucyxcbiAgICAgICAgY29tcGFuaW9uRmlsZXMsXG4gICAgICAgIGxvYWRpbmcub3B0aW9ucyxcbiAgICAgICAgYXJjaGl2ZU5hbWVcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSBleHBhbnNpb24uZGF0YXNldHM7XG4gIGNvbnN0IGZpbGVzVG9Mb2FkID0gWy4uLmRhdGFzZXRzLCAuLi5BcnJheS5mcm9tKGxvYWRpbmcuZmlsZXNUb0xvYWQpXTtcbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGRhdGFzZXRzLnJlZHVjZShcbiAgICAoYWNjdSwgZmlsZSwgaW5kZXgpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkpKGFjY3UpLFxuICAgIHdpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkoc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzcywgYXJjaGl2ZU5hbWUpXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICAgIGZpbGVMb2FkaW5nOiB7XG4gICAgICAuLi5sb2FkaW5nLFxuICAgICAgZmlsZXNUb0xvYWQsXG4gICAgICBjb21wYW5pb25GaWxlc1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlLCB7bG9hZElkOiBhY3Rpb24ubG9hZElkfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKFxuICBmaWxlLFxuICBmaWxlQ2FjaGUsXG4gIGxvYWRlcnM6IExvYWRlcltdID0gW10sXG4gIGxvYWRPcHRpb25zID0ge30sXG4gIGNvbXBhbmlvbkZpbGVzPzogRmlsZVtdLFxuICBhZGREYXRhT3B0aW9ucz86IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNPcHRpb25zLFxuICBmaWxlTmFtZT86IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gZmlsZU5hbWUgfHwgZmlsZS5uYW1lO1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe1xuICAgIGZpbGUsXG4gICAgZmlsZUNhY2hlLFxuICAgIGxvYWRlcnMsXG4gICAgbG9hZE9wdGlvbnMsXG4gICAgY29tcGFuaW9uRmlsZXMsXG4gICAgLi4uKGZpbGVOYW1lID8ge2ZpbGVOYW1lfSA6IHt9KVxuICB9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZGlzcGxheU5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgIC4uLihhZGREYXRhT3B0aW9ucz8uZGVmZXJBZGRUb01hcCAmJiBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nXG4gICAgICAgICAgICAgICAgPyB7cHJlcGFyZVByb2dyZXNzaXZlUmVwbGF5OiB0cnVlfVxuICAgICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSksXG4gICAgICAgIC4uLihhZGREYXRhT3B0aW9ucyA/IHtvcHRpb25zOiBhZGREYXRhT3B0aW9uc30gOiB7fSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGRpc3BsYXlOYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaCwgb3B0aW9uc31cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIGNvbnN0IGRlZmVyQWRkVG9NYXAgPSBCb29sZWFuKG9wdGlvbnM/LmRlZmVyQWRkVG9NYXApO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgIWRlZmVyQWRkVG9NYXAgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICAvLyBTa2lwIGNvbXBhY3Rpb24gd2hpbGUgYmF0Y2hlcyBhcmUgc3RpbGwgYXJyaXZpbmcuIFRoZSBjb21wbGV0ZWRcbiAgICAgICAgICAvLyBmaWxlIGlzIGNvbXBhY3RlZCBvbmNlIGluIHByb2Nlc3NGaWxlQ29udGVudC5cbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7XG4gICAgICAgICAgICBjb250ZW50OiB7Li4uYWNjdW11bGF0ZWQsIHNraXBBcnJvd0NvbXBhY3Q6IHRydWV9LFxuICAgICAgICAgICAgZmlsZUNhY2hlOiBbXVxuICAgICAgICAgIH0pLmJpbWFwKFxuICAgICAgICAgICAgcmVzdWx0ID0+IChvcHRpb25zID8gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQsIG9wdGlvbnMpIDogbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpKSxcbiAgICAgICAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIDogW10pLFxuICAgIFVOV1JBUF9UQVNLKGdlbi5uZXh0KCkpLmJpbWFwKFxuICAgICAgKHt2YWx1ZSwgZG9uZX0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgICA/IG9uRmluaXNoKGFjY3VtdWxhdGVkKVxuICAgICAgICAgIDogbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB2YWx1ZS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBvbkZpbmlzaCxcbiAgICAgICAgICAgICAgLi4uKG9wdGlvbnMgPyB7b3B0aW9uc30gOiB7fSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLyoqXG4gKiBEcm9wIGZpbGVzIHdhaXRpbmcgb24gdGhlIEFkZCBEYXRhIGJ1dHRvbiBhbmQgYWJvcnQgYW4gaW4tcHJvZ3Jlc3MgbW9kYWwgbG9hZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhclN0YWdlZExvYWRlZEZpbGVzVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgc3RhZ2VkVG9BZGQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGZpbGVOYW1lLCBsb2FkSWQ6IGVycm9yTG9hZElkfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZyB8fCAoZXJyb3JMb2FkSWQgIT0gbnVsbCAmJiBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQgIT09IGVycm9yTG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGNvbnN0IGxvYWRJZCA9IHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7ZXJyb3J9XG4gIH0pO1xuXG4gIC8vIFNhbWUgcGF1c2UgYXMgYSBzdWNjZXNzZnVsIGZpbGUuIFJlLWNoZWNrIHRoaXMgbG9hZCdzIHF1ZXVlIHdoZW4gaXQgZW5kcy5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIG5leHRTdGF0ZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKCgpID0+IGxvYWROZXh0RmlsZShsb2FkSWQpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV4dCA9IHsuLi5zdGF0ZS5tYXBJbmZvLCAuLi5hY3Rpb24uaW5mb307XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwSW5mbzoge1xuICAgICAgdGl0bGU6IG9wdGlvbmFsTWFwVGV4dChuZXh0LnRpdGxlKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25hbE1hcFRleHQobmV4dC5kZXNjcmlwdGlvbilcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIEFsbCBsYXllciBkb21haW4gYW5kIGxheWVyIGRhdGEgb2Ygc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRMYXllcnMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YXNldHM6IERhdGFzZXRzXG4pOiB7c3RhdGU6IFZpc1N0YXRlOyBuZXdMYXllcnM6IExheWVyW119IHtcbiAgY29uc3QgZW1wdHk6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZGVmYXVsdExheWVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLnJlZHVjZSgoYWNjdTogTGF5ZXJbXSwgZGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gZmluZERlZmF1bHRMYXllcihkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICAgIHJldHVybiBmb3VuZExheWVycyAmJiBmb3VuZExheWVycy5sZW5ndGggPyBhY2N1LmNvbmNhdChmb3VuZExheWVycykgOiBhY2N1O1xuICB9LCBlbXB0eSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIC4uLmRlZmF1bHRMYXllcnNdLFxuICAgICAgbGF5ZXJPcmRlcjogW1xuICAgICAgICAvLyBwdXQgbmV3IGxheWVycyBvbiB0b3Agb2Ygb2xkIG9uZXMgaW4gcmV2ZXJzZVxuICAgICAgICAuLi5nZXRMYXllck9yZGVyRnJvbUxheWVycyhkZWZhdWx0TGF5ZXJzKSxcbiAgICAgICAgLi4uc3RhdGUubGF5ZXJPcmRlclxuICAgICAgXVxuICAgIH0sXG4gICAgbmV3TGF5ZXJzOiBkZWZhdWx0TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogaGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgZGVmYXVsdCB0b29sdGlwc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0VG9vbHRpcHMoc3RhdGUsIGRhdGFzZXQpIHtcbiAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IGZpbmRGaWVsZHNUb1Nob3coe1xuICAgIC4uLmRhdGFzZXQsXG4gICAgbWF4RGVmYXVsdFRvb2x0aXBzOiBzdGF0ZS5tYXhEZWZhdWx0VG9vbHRpcHNcbiAgfSk7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgLi4udG9vbHRpcEZpZWxkc1xuICB9O1xuXG4gIHJldHVybiBzZXQoWydpbnRlcmFjdGlvbkNvbmZpZycsICd0b29sdGlwJywgJ2NvbmZpZycsICdmaWVsZHNUb1Nob3cnXSwgbWVyZ2VkLCBzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkge1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZSB8fCBgVW50aXRsZWQgRmlsZSAke2luZGV4fWA7XG4gIHJldHVybiB7XG4gICAgW2ZpbGVOYW1lXToge1xuICAgICAgLy8gcGVyY2VudCBvZiBjdXJyZW50IGZpbGVcbiAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge2ZpbGVOYW1lLCBwcm9ncmVzc30pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gcGlja18oJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnKShwaWNrXyhmaWxlTmFtZSkobWVyZ2VfKHByb2dyZXNzKSkpKHN0YXRlKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBsYXllciBkb21haW5zIGZvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdLFxuICB1cGRhdGVkRmlsdGVyPzogRmlsdGVyXG4pOiBTIHtcbiAgY29uc3QgZGF0YUlkcyA9IHR5cGVvZiBkYXRhSWQgPT09ICdzdHJpbmcnID8gW2RhdGFJZF0gOiBkYXRhSWQ7XG4gIGNvbnN0IG5ld0xheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllckRhdGE6IGFueVtdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2goKG9sZExheWVyLCBpKSA9PiB7XG4gICAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQgJiYgZGF0YUlkcy5pbmNsdWRlcyhvbGRMYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgLy8gTm8gbmVlZCB0byByZWNhbGN1bGF0ZSBsYXllciBkb21haW4gaWYgZmlsdGVyIGhhcyBmaXhlZCBkb21haW5cbiAgICAgIGNvbnN0IG5ld0xheWVyID1cbiAgICAgICAgdXBkYXRlZEZpbHRlciAmJiB1cGRhdGVkRmlsdGVyLmZpeGVkRG9tYWluXG4gICAgICAgICAgPyBvbGRMYXllclxuICAgICAgICAgIDogb2xkTGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMsIHVwZGF0ZWRGaWx0ZXIpO1xuXG4gICAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaV0pO1xuXG4gICAgICBuZXdMYXllcnMucHVzaChsYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChsYXllckRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllcnMucHVzaChvbGRMYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChzdGF0ZS5sYXllckRhdGFbaV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXdMYXllckRhdGFcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbmltYXRpb25Eb21haW48UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUyk6IFMge1xuICAvLyBtZXJnZSBhbGwgYW5pbWF0YWJsZSBsYXllciBkb21haW4gYW5kIHVwZGF0ZSBnbG9iYWwgY29uZmlnXG4gIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBkb21haW46IG51bGwsXG4gICAgICAgIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgdGltZVN0ZXBzOiBudWxsLFxuICAgICAgICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXllckRvbWFpbnMgPSBhbmltYXRhYmxlTGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmFuaW1hdGlvbi5kb21haW4gfHwgW10pO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1lcmdlZERvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMobGF5ZXJEb21haW5zKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIobWVyZ2VkRG9tYWluKTtcblxuICAvLyBtZXJnZSB0aW1lU3RlcHNcbiAgbGV0IG1lcmdlZFRpbWVTdGVwczogbnVtYmVyW10gfCBudWxsID0gdW5pcTxudW1iZXI+KFxuICAgIGFuaW1hdGFibGVMYXllcnMucmVkdWNlKChhY2N1LCBsYXllcikgPT4ge1xuICAgICAgYWNjdS5wdXNoKC4uLihsYXllci5jb25maWcuYW5pbWF0aW9uLnRpbWVTdGVwcyB8fCBbXSkpO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pXG4gICkuc29ydCgpO1xuXG4gIG1lcmdlZFRpbWVTdGVwcyA9IG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggPyBtZXJnZWRUaW1lU3RlcHMgOiBudWxsO1xuXG4gIC8vIFRPRE86IGJldHRlciBoYW5kbGluZyBvZiBkdXJhdGlvbiBjYWxjdWxhdGlvblxuICBjb25zdCBkdXJhdGlvbiA9IG1lcmdlZFRpbWVTdGVwc1xuICAgID8gKEJBU0VfU1BFRUQgKiAoMTAwMCAvIEZQUykpIC8gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCAvIChzdGF0ZS5hbmltYXRpb25Db25maWcuc3BlZWQgfHwgMSlcbiAgICA6IG51bGw7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgZG9tYWluOiBtZXJnZWREb21haW4sXG4gICAgICBkZWZhdWx0VGltZUZvcm1hdCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGltZVN0ZXBzOiBtZXJnZWRUaW1lU3RlcHNcbiAgICB9XG4gIH07XG5cbiAgLy8gcmVzZXQgY3VycmVudFRpbWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICBjb25zdCBzeW5jZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzPy5maW5kKGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkgYXNcbiAgICB8IFRpbWVSYW5nZUZpbHRlclxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8vIGlmIHN5bmNlZCBmaWx0ZXIgZXhpc3Qgd2VlIG5lZWQgdG8gbWVyZ2UgYW5pbWF0aW9uQ29uZmlnIGFuZCBmaWx0ZXIgZG9tYWluc1xuICAvLyBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgdGltZSBhZ2FpbnN0IHRoZSBuZXcgbWVyZ2VkIGRvbWFpblxuICBjb25zdCBuZXdBbmltYXRpb25Eb21haW4gPSBzeW5jZWRGaWx0ZXJcbiAgICA/IG1lcmdlVGltZURvbWFpbnMoW21lcmdlZERvbWFpbiwgc3luY2VkRmlsdGVyLmRvbWFpbl0pXG4gICAgOiBtZXJnZWREb21haW47XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gaXNJblJhbmdlKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSwgbmV3QW5pbWF0aW9uRG9tYWluKVxuICAgID8gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgOiBuZXdBbmltYXRpb25Eb21haW5bMF07XG5cbiAgaWYgKGN1cnJlbnRUaW1lICE9PSBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpIHtcbiAgICAvLyBpZiBjdXJyZW50VGltZSBjaGFuZ2VkLCBuZWVkIHRvIGNhbGwgYW5pbWF0aW9uVGltZVVwZGF0ZXIgdG8gcmUgY2FsbCBmb3JtYXRMYXllckRhdGFcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXh0U3RhdGUsIHt2YWx1ZTogY3VycmVudFRpbWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBzdGF0dXMgb2YgdGhlIGVkaXRvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRvck1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvck1vZGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHNrZXRjaGVzRW5hYmxlZCA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXM7XG4gIGlmIChcbiAgICAhc2tldGNoZXNFbmFibGVkICYmXG4gICAgKG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX1BPSU5UIHx8IG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX0xJTkVTVFJJTkcpXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBtb2RlLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xufTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTpcbiAgICAgICAgbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWRcbiAgICAgICAgICA/IGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJ1xuICAgICAgICAgICAgPyBzdGF0ZS5lZGl0b3IubW9kZVxuICAgICAgICAgICAgOiBFRElUT1JfTU9ERVMuRURJVFxuICAgICAgICAgIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZTogVmlzU3RhdGUsIGZlYXR1cmU/OiBGZWF0dXJlIHwgbnVsbCk6IEZlYXR1cmUgfCBudWxsIHtcbiAgaWYgKCFmZWF0dXJlPy5pZCkge1xuICAgIHJldHVybiBmZWF0dXJlIHx8IG51bGw7XG4gIH1cbiAgaWYgKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBmZWF0dXJlLmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIH1cbiAgY29uc3QgZnJvbUVkaXRvciA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmVhdHVyZS5pZCk7XG4gIGlmIChmcm9tRWRpdG9yKSB7XG4gICAgcmV0dXJuIGZyb21FZGl0b3I7XG4gIH1cbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICAgIGlmIChmaWx0ZXI/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmVhdHVyZTtcbn1cblxuLyoqXG4gKiBTZXQgdXNlci1mYWNpbmcgR2VvSlNPTiBwcm9wZXJ0aWVzIG9uIGEgc2tldGNoIG9yIHBvbHlnb24tZmlsdGVyIGZlYXR1cmUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBwcm9wZXJ0aWVzfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZSwgZmVhdHVyZSk7XG4gIGlmICghc291cmNlPy5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRGZWF0dXJlID0gbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMoc291cmNlLCBwcm9wZXJ0aWVzKTtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShuZXh0RmVhdHVyZSk7XG4gIGNvbnN0IG5leHRFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBmaWx0ZXJJZFxuICAgICAgPyBzdGF0ZS5lZGl0b3IuZmVhdHVyZXNcbiAgICAgIDogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLm1hcChpdGVtID0+IChpdGVtLmlkID09PSBuZXh0RmVhdHVyZS5pZCA/IG5leHRGZWF0dXJlIDogaXRlbSkpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTpcbiAgICAgIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBuZXh0RmVhdHVyZS5pZFxuICAgICAgICA/IG5leHRGZWF0dXJlXG4gICAgICAgIDogc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5leHRFZGl0b3JcbiAgfTtcblxuICBpZiAoIWZpbHRlcklkKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4IDwgMCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShuZXh0RmVhdHVyZSwgZmlsdGVySWQpXG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcblxuICAgIC8vIExhc3QgbGF5ZXIgcmVtb3ZlZDogdHVybiB0aGUgZmlsdGVyIHBvbHlnb24gYmFjayBpbnRvIGEgc2tldGNoXG4gICAgaWYgKCFuZXdMYXllcklkLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2tldGNoRmVhdHVyZSA9IHRvU2tldGNoRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgIGNvbnN0IHN0YXRlV2l0aG91dEZpbHRlciA9IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvci5mZWF0dXJlcywgc2tldGNoRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBza2V0Y2hGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGx5IHBvbHlnb24gZmlsdGVyIHRvIGFsbCB2aXNpYmxlIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmVhdHVyZX0gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gIGNvbnN0IG5ld1N0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZSxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHZpc2libGVMYXllcklkcyA9IGdldChwYXlsb2FkLCAndmlzaWJsZUxheWVySWRzJyk7XG4gIGNvbnN0IGFsbExheWVySWRzID0gQXJyYXkuaXNBcnJheSh2aXNpYmxlTGF5ZXJJZHMpXG4gICAgPyB2aXNpYmxlTGF5ZXJJZHNcbiAgICA6IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5pc1Zpc2libGUpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBhbGxMYXllcklkc1xuICB9KTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW4sIG1vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBzb3J0TW9kZSA9IG1vZGU7XG4gIGlmICghc29ydE1vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50TW9kZSA9IGdldChkYXRhc2V0LCBbJ3NvcnRDb2x1bW4nLCBjb2x1bW5dKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2hvdWxkIGJlIGZpeGFibGUgaW4gYSBUUyBmaWxlXG4gICAgc29ydE1vZGUgPSBjdXJyZW50TW9kZVxuICAgICAgPyBPYmplY3Qua2V5cyhTT1JUX09SREVSKS5maW5kKG0gPT4gbSAhPT0gY3VycmVudE1vZGUpXG4gICAgICA6IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gc29ydERhdGFzZXRCeUNvbHVtbihkYXRhc2V0LCBjb2x1bW4sIHNvcnRNb2RlKTtcbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc29ydGVkLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RGF0YXNldCA9IHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0LCBjb2x1bW4pO1xuXG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlVGFibGVDb2x1bW5IaWRkZW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVUYWJsZUNvbHVtbkhpZGRlblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCB0b2dnbGVIaWRkZW5UYWJsZUNvbHVtbihkYXRhc2V0LCBjb2x1bW4pLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dBbGxUYWJsZUNvbHVtbnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0FsbFRhYmxlQ29sdW1uc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzaG93QWxsVGFibGVDb2x1bW5zKGRhdGFzZXQpLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuICBjb25zdCB0ZXh0TGFiZWxMYXllckluZGV4ZXM6IG51bWJlcltdID0gW107XG5cbiAgLy8gTGF5ZXIgY29uZmlncyByZXRhaW4gdGhlaXIgb3duIGZpZWxkIG9iamVjdHMsIHNvIGtlZXAgdGhvc2UgY29waWVzIGluIHN5bmNcbiAgLy8gd2l0aCB0aGUgZGlzcGxheSBmb3JtYXQgc3RvcmVkIG9uIHRoZSBkYXRhc2V0IGZpZWxkLlxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllcnM6IG5ld1N0YXRlLmxheWVycy5tYXAoKGxheWVyLCBsYXllckluZGV4KSA9PiB7XG4gICAgICAvLyBDb2x1bW4gbmFtZXMgYXJlIG5vdCB1bmlxdWUgYWNyb3NzIGRhdGFzZXRzLiBPbmx5IHVwZGF0ZSBsYXllcnMgdGhhdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBkYXRhc2V0IHRhcmdldGVkIGJ5IHRoaXMgYWN0aW9uLlxuICAgICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbG9yRmllbGQgPSBsYXllci5jb25maWc/LmNvbG9yRmllbGQ7XG4gICAgICBjb25zdCB1cGRhdGVkQ29sb3JGaWVsZCA9XG4gICAgICAgIGNvbG9yRmllbGQ/Lm5hbWUgJiYgY29sb3JGaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgICA/IHsuLi5jb2xvckZpZWxkLCBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2NvbG9yRmllbGQubmFtZV19XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgLy8gVGV4dCBsYWJlbHMgYWxzbyBrZWVwIGZpZWxkIGNvcGllcyBpbnN0ZWFkIG9mIHJlYWRpbmcgZGF0YXNldC5maWVsZHMgYXQgcmVuZGVyIHRpbWUuXG4gICAgICBjb25zdCB0ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcChsYWJlbCA9PiB7XG4gICAgICAgIGNvbnN0IHtmaWVsZH0gPSBsYWJlbDtcbiAgICAgICAgcmV0dXJuIGZpZWxkPy5uYW1lICYmIGZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICAgID8gey4uLmxhYmVsLCBmaWVsZDogey4uLmZpZWxkLCBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2ZpZWxkLm5hbWVdfX1cbiAgICAgICAgICA6IGxhYmVsO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB1cGRhdGVUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc29tZShcbiAgICAgICAgKGxhYmVsLCBpbmRleCkgPT4gbGFiZWwgIT09IGxheWVyLmNvbmZpZy50ZXh0TGFiZWxbaW5kZXhdXG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZVRleHRMYWJlbCkge1xuICAgICAgICB0ZXh0TGFiZWxMYXllckluZGV4ZXMucHVzaChsYXllckluZGV4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZWRDb2xvckZpZWxkIHx8IHVwZGF0ZVRleHRMYWJlbFxuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIC4uLih1cGRhdGVkQ29sb3JGaWVsZCA/IHtjb2xvckZpZWxkOiB1cGRhdGVkQ29sb3JGaWVsZH0gOiB7fSksXG4gICAgICAgICAgICAuLi4odXBkYXRlVGV4dExhYmVsID8ge3RleHRMYWJlbH0gOiB7fSlcbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyO1xuICAgIH0pXG4gIH07XG5cbiAgaWYgKHRleHRMYWJlbExheWVySW5kZXhlcy5sZW5ndGgpIHtcbiAgICAvLyBMYWJlbCBhY2Nlc3NvcnMgYW5kIGNoYXJhY3RlciBzZXRzIGFyZSBjYWNoZWQgaW4gbGF5ZXJEYXRhLiBSZWJ1aWxkIHRoZW1cbiAgICAvLyBpbW1lZGlhdGVseSBzbyB0aGUgbmV3IGZvcm1hdCBhcHBlYXJzIHdpdGhvdXQgcmVtb3ZpbmcgYW5kIHJlLWFkZGluZyB0aGUgbGFiZWwgZmllbGQuXG4gICAgY29uc3QgbGF5ZXJzID0gbmV3U3RhdGUubGF5ZXJzLnNsaWNlKCk7XG4gICAgY29uc3QgbGF5ZXJEYXRhID0gbmV3U3RhdGUubGF5ZXJEYXRhLnNsaWNlKCk7XG4gICAgdGV4dExhYmVsTGF5ZXJJbmRleGVzLmZvckVhY2gobGF5ZXJJbmRleCA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJzW2xheWVySW5kZXhdLCBuZXdTdGF0ZSwgbGF5ZXJEYXRhW2xheWVySW5kZXhdKTtcbiAgICAgIGxheWVyc1tsYXllckluZGV4XSA9IHJlc3VsdC5sYXllcjtcbiAgICAgIGxheWVyRGF0YVtsYXllckluZGV4XSA9IHJlc3VsdC5sYXllckRhdGE7XG4gICAgfSk7XG4gICAgbmV3U3RhdGUgPSB7Li4ubmV3U3RhdGUsIGxheWVycywgbGF5ZXJEYXRhfTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT5cbiAgICAgICAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMsIHtcbiAgICAgICAgICBmaWVsZFR5cGU6IGYudHlwZVxuICAgICAgICB9KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+XG4gICAgICAgIGxvYWRDb2x1bW5TdGF0c0Vycm9yKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgZXJyb3IsIHtcbiAgICAgICAgICBmaWVsZFR5cGU6IGYudHlwZVxuICAgICAgICB9KVxuICAgIClcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKG5leHRTdGF0ZSwgdGFza3MpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgbG9hZGVkIGNvbHVtbiBzdGF0aXN0aWNzIG9uIHRoZSBmaWVsZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcmVzdWx0LFxuICAgIGZpbHRlclByb3BzLFxuICAgIGRhdGFJZCxcbiAgICBmaWVsZE5hbWUsXG4gICAgZmllbGRUeXBlXG4gIH06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkIHx8IChmaWVsZFR5cGUgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC50eXBlICE9PSBmaWVsZFR5cGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyUHJvcHMgPSB7XG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgY29sdW1uU3RhdHM6IHJlc3VsdFxuICB9O1xuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGZpbHRlclByb3BzOiBuZXdGaWx0ZXJQcm9wcywgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIENsZWFyIGxvYWRpbmcgZmxhZyB3aGVuIGNvbHVtbiBzdGF0aXN0aWNzIGZhaWwuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZGF0YUlkLCBmaWVsZE5hbWUsIGZpZWxkVHlwZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCB8fCAoZmllbGRUeXBlICE9PSB1bmRlZmluZWQgJiYgZmllbGQudHlwZSAhPT0gZmllbGRUeXBlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBDb25zb2xlLmVycm9yKGVycm9yKTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29weSBpbi1tZW1vcnkgcm93cyAob3IgbG9hZGVkIHZlY3Rvci10aWxlIGZlYXR1cmVzKSBpbnNpZGUgdGhlIHNlbGVjdGVkXG4gKiBEcmF3IG9uIE1hcCBwb2x5Z29uIGludG8gYSBuZXcgZGF0YXNldC4gUmFzdGVyIHRpbGVzIGRvd25sb2FkIGEgUE5HIGNsaXAgYW5kIGFcbiAqIEdlb0pTT04gc2lkZWNhciAoYmJveCByZWN0YW5nbGUgKyBzdGF0cykgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGRhdGFzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5FeHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmZWF0dXJlID0gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBjb25zdCBkYXRhSWQgPSBsYXllcj8uY29uZmlnLmRhdGFJZDtcbiAgbGV0IGRhdGFzZXQgPSBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogbnVsbDtcblxuICBpZiAoIWxheWVyIHx8ICFkYXRhc2V0IHx8ICFkYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpc1RpbGVkRXh0cmFjdCA9IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcikgfHwgaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyKGxheWVyKTtcblxuICAvLyBHUFUgcmFuZ2UvdGltZSBmaWx0ZXJzIGFyZSBub3QgcmVmbGVjdGVkIGluIGZpbHRlcmVkSW5kZXg7IGV2YWx1YXRlIHRoZW0gb24gQ1BVXG4gIC8vIHRoZSBzYW1lIHdheSBleHBvcnQgZGF0YSBkb2VzLCB0aGVuIGNsaXAgdGhlIHJlc3VsdCB0byB0aGUgZHJhd2luZy5cbiAgaWYgKCFpc1RpbGVkRXh0cmFjdCkge1xuICAgIHN0YXRlID0gZmlsdGVyRGF0YXNldENQVShzdGF0ZSwgZGF0YUlkKTtcbiAgICBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgZXh0cmFjdGVkO1xuICB0cnkge1xuICAgIGV4dHJhY3RlZCA9IGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSh7bGF5ZXIsIGRhdGFzZXQsIGZlYXR1cmV9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQucm93Q291bnQpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHJhc3RlciBwaXhlbHMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHZlY3RvciB0aWxlIGZlYXR1cmVzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiAnTm8gcm93cyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlLWVtcHR5J1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcikpIHtcbiAgICBjb25zdCBwb2x5Z29uID0gZmVhdHVyZTtcbiAgICBjb25zdCBkb3dubG9hZCA9XG4gICAgICB0eXBlb2YgKGxheWVyIGFzIGFueSkuZG93bmxvYWRDbGlwID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKChsYXllciBhcyBhbnkpLmRvd25sb2FkQ2xpcChwb2x5Z29uKSlcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoe3BuZzogZmFsc2UsIGpzb246IGZhbHNlfSk7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBVTldSQVBfVEFTSyhkb3dubG9hZCkuYmltYXAoXG4gICAgICAgIChyZXN1bHQ6IHtwbmc/OiBib29sZWFufSB8IG51bGwpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgcmVzdWx0Py5wbmdcbiAgICAgICAgICAgICAgPyBzdWNjZXNzTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdEb3dubG9hZGVkIHJhc3RlciBjbGlwIGltYWdlIGFuZCBzdGF0cyBmaWxlJyxcbiAgICAgICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdGYWlsZWQgdG8gZG93bmxvYWQgcmFzdGVyIGNsaXAgaW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgZXJyID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGRvd25sb2FkIHJhc3RlciBjbGlwOiAke1xuICAgICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKVxuICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPVxuICAgICAgZXh0cmFjdGVkLmtpbmQgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IHByb2Nlc3NHZW9qc29uKHtcbiAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBmZWF0dXJlczogZXh0cmFjdGVkLmZlYXR1cmVzXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7ZmllbGRzOiBleHRyYWN0ZWQuZmllbGRzLCByb3dzOiBleHRyYWN0ZWQucm93c307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGV4dHJhY3QtJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYEV4dHJhY3RlZCAke2RhdGFzZXQubGFiZWx9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICBjb25zdCBuZXh0VmFsdWUgPSBNYXRoLm1heChsb2FkaW5nSW5kaWNhdG9yVmFsdWUgKyBjaGFuZ2UsIDApO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihuZXh0VmFsdWUgPT09IDAgJiZcbiAgICAoT2JqZWN0LmtleXMoc3RhdGUubG9hZGluZ1Byb2dyZXNzIHx8IHt9KS5sZW5ndGggfHxcbiAgICAgIE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9KS5sZW5ndGgpXG4gICAgICA/IHtsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319XG4gICAgICA6IHt9KVxuICB9O1xufTtcblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCBoeWRyYXRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwZXJjZW50LCBwaGFzZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBjb25zdCBwcm9jZXNzaW5nID0gcGhhc2UgPT09ICdwcm9jZXNzaW5nJztcbiAgaWYgKFxuICAgIHN0YXRlLmxvYWRpbmdQcm9ncmVzcz8uW2lkXSA9PT0gbmV4dFBlcmNlbnQgJiZcbiAgICBCb29sZWFuKHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nPy5baWRdKSA9PT0gcHJvY2Vzc2luZ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9ncmVzcyxcbiAgICAgIFtpZF06IG5leHRQZXJjZW50XG4gICAgfSxcbiAgICAuLi4ocHJvY2Vzc2luZ1xuICAgICAgPyB7XG4gICAgICAgICAgbG9hZGluZ1Byb2Nlc3Npbmc6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nLFxuICAgICAgICAgICAgW2lkXTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB7fSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsYXllclRpbWVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2xheWVyVGltZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IHBsb3RCYXNlSW5kZXhCeURhdGFJZCA9IGdldFBsb3RCYXNlSW5kZXhCeURhdGFJZChzdGF0ZS5kYXRhc2V0cywgZmlsdGVyLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoXG4gICAgZmlsdGVyLFxuICAgIHVwZGF0ZWRQbG90VHlwZSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICB1bmRlZmluZWQsXG4gICAgcGxvdEJhc2VJbmRleEJ5RGF0YUlkXG4gICk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIsIHBsb3RCYXNlSW5kZXhCeURhdGFJZCk7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtkZWxldGVPcmlnaW5hbERhdGFzZXQ/OiBib29sZWFufSA9IHt9XG4pOiBUIHtcbiAgLy8gVGhlIHNhbWUgaWQgbWVhbnMgdGhlIG5ldyB0YWJsZSBvY2N1cGllcyB0aGUgb2xkIHNsb3QsIHNvIHRoZSBwcmV2aW91cyByb3dzIGhhdmUgdG8gZ28uXG4gIGNvbnN0IGRlbGV0ZU9yaWdpbmFsRGF0YXNldCA9IG9wdGlvbnMuZGVsZXRlT3JpZ2luYWxEYXRhc2V0ICE9PSBmYWxzZSB8fCBkYXRhSWQgPT09IGRhdGFJZFRvVXNlO1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGlmXyhkZWxldGVPcmlnaW5hbERhdGFzZXQsIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pKVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtkZWxldGVPcmlnaW5hbERhdGFzZXQ/OiBib29sZWFufSA9IHt9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IGRlbGV0ZU9yaWdpbmFsRGF0YXNldCA9IG9wdGlvbnMuZGVsZXRlT3JpZ2luYWxEYXRhc2V0ICE9PSBmYWxzZSB8fCBkYXRhSWQgPT09IGRhdGFJZFRvVXNlO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UsIHtkZWxldGVPcmlnaW5hbERhdGFzZXR9KTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gV2hlbiB0aGUgb3JpZ2luYWwgdGFibGUgc3RheXMsIHRoZSByZXBsYWNlbWVudCB0YWtlcyBpdHMgcGxhY2UgYW5kIHRoZSBvcmlnaW5hbCBmb2xsb3dzIGl0LlxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykuZmxhdE1hcChkID0+IHtcbiAgICBpZiAoZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gW2RdO1xuICAgIH1cbiAgICByZXR1cm4gZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID8gW2RhdGFJZFRvVXNlXSA6IFtkYXRhSWRUb1VzZSwgZF07XG4gIH0pO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllci5cbiAgICAvLyBLZWVwIHRoZSBvbmVzIG9mIGEgZGF0YXNldCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZCBub3QgbWVyZ2VkIGJhY2sgeWV0OlxuICAgIC8vIGl0cyBsYXllcnMgYXJlIG5vIGxvbmdlciBpbiB0aGUgY3VycmVudCBzcGxpdCBtYXBzLlxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoXG4gICAgICBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLFxuICAgICAgc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW11cbiAgICApO1xuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyID0gWy4uLnByZXNlcnZlTGF5ZXJPcmRlcl07XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFRoZSBvcmRlciB0byBwcmVzZXJ2ZSBmb3IgdGhlIGl0ZW1zIHRoYXQgd2lsbCBiZSBtZXJnZWQgYmFjay5cbiAqXG4gKiBgaWRzYCBjb21lcyBmcm9tIHRoZSBzZXJpYWxpemVkIHN0YXRlLCBzbyBpdCBsaXN0cyBldmVyeXRoaW5nIGJ1dCB0aGUgaXRlbXNcbiAqIGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ286IGFuIGFwcCByZWZyZXNoaW5nIHNldmVyYWxcbiAqIGRhdGFzZXRzIGluIGEgcm93IHByZXBhcmVzIHRoZSBzZWNvbmQgcmVwbGFjZW1lbnQgYmVmb3JlIHRoZSBmaXJzdCBvbmUnc1xuICogaXRlbXMgaGF2ZSBtZXJnZWQgYmFjay4gV3JpdGluZyBgaWRzYCBhcyBpdCBpcyB3b3VsZCBkcm9wIHRob3NlLCBhbmRcbiAqIGBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyYCBwdXRzIGFuIGl0ZW0gaXQgY2Fubm90IHBsYWNlIGF0IHRoZSBmcm9udCDigJRcbiAqIHNvIHRoZXkgd291bGQgY29tZSBiYWNrIHJldmVyc2VkLiBXaGVyZSB0aGV5IGJlbG9uZyBpcyB3aGF0IHRoZSBvcmRlciB3cml0dGVuXG4gKiB3aGVuIHRoZXkgd2VyZSBwYXJrZWQgYWxyZWFkeSBzYXlzLCBzbyB0aGF0IG9yZGVyIGlzIGtlcHQgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gIHByZXZpb3VzT3JkZXI6IHN0cmluZ1tdID0gW10sXG4gIGlkczogc3RyaW5nW10sXG4gIHBhcmtlZDoge2lkPzogc3RyaW5nfVtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhcmtlZElkcyA9IHBhcmtlZFxuICAgIC5tYXAoaXRlbSA9PiBpdGVtPy5pZClcbiAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiAhaWRzLmluY2x1ZGVzKGlkIGFzIHN0cmluZykpO1xuXG4gIGlmICghcGFya2VkSWRzLmxlbmd0aCkge1xuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICBjb25zdCBrbm93biA9IG5ldyBTZXQoWy4uLmlkcywgLi4ucGFya2VkSWRzXSk7XG4gIGNvbnN0IG9yZGVyZWQgPSAocHJldmlvdXNPcmRlciB8fCBbXSkuZmlsdGVyKGlkID0+IGtub3duLmhhcyhpZCkpO1xuICBjb25zdCByZXN0ID0gWy4uLmlkcywgLi4ucGFya2VkSWRzXS5maWx0ZXIoaWQgPT4gIW9yZGVyZWQuaW5jbHVkZXMoaWQpKTtcblxuICByZXR1cm4gWy4uLm9yZGVyZWQsIC4uLnJlc3RdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2RhdGFJZCwgZGF0YUlkVG9Vc2V9OiB7ZGF0YUlkOiBzdHJpbmc7IGRhdGFJZFRvVXNlOiBzdHJpbmd9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUubWVyZ2Vycy5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdVN0YXRlLFxuICAgICAge3Byb3AsIHRvTWVyZ2VQcm9wLCByZXBsYWNlUGFyZW50RGF0YXNldElkcywgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWQsIHByZXNlcnZlT3JkZXJ9XG4gICAgKSA9PiB7XG4gICAgICAvLyBnZXQgZGF0YXNldCBpZHMgdGhhdCBhcmUgZGVwZW5kcyBvbiB0aGlzIGRhdGFzZXRcbiAgICAgIGNvbnN0IHByb3BzID0gdG9BcnJheShwcm9wKTtcbiAgICAgIGNvbnN0IHRvTWVyZ2VQcm9wcyA9IHRvQXJyYXkodG9NZXJnZVByb3ApO1xuICAgICAgY29uc3Qgc2F2ZWRQcm9wcyA9IHNlcmlhbGl6ZWRTdGF0ZSA/IHByb3BzLm1hcChwID0+IHNlcmlhbGl6ZWRTdGF0ZVtwXSkgOiBbXTtcblxuICAgICAgbGV0IHJlcGxhY2VkU3RhdGUgPSBhY2N1U3RhdGU7XG4gICAgICBzYXZlZFByb3BzLmZvckVhY2goKHByb3BWYWx1ZSwgaSkgPT4ge1xuICAgICAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXaGF0IGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ28gYW5kIGhhcyBub3RcbiAgICAgICAgLy8gbWVyZ2VkIGJhY2sgeWV0LCByZWFkIGJlZm9yZSB0aGlzIG9uZSBwYXJrcyBhbnl0aGluZyBvZiBpdHMgb3duLlxuICAgICAgICBjb25zdCBwYXJrZWRFbHNld2hlcmUgPVxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0b0FycmF5KHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0gPz8gW10pXG4gICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbSA9XG4gICAgICAgICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM/Lihwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpIHx8XG4gICAgICAgICAgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gICAgICAgIHJlcGxhY2VkU3RhdGUgPSByZXBsYWNlZEl0ZW1cbiAgICAgICAgICA/IHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKHJlcGxhY2VkU3RhdGUsIHJlcGxhY2VkSXRlbSwgbWVyZ2VyT3B0aW9ucylcbiAgICAgICAgICA6IHJlcGxhY2VkU3RhdGU7XG5cbiAgICAgICAgLy8gT25seSB3aGVuIHRoaXMgZGF0YXNldCBoYWQgaXRlbXMgb2YgaXRzIG93biB0byBwYXJrLiBUaGUgdG9CZU1lcmdlZCBsaXN0XG4gICAgICAgIC8vIGNhbiBzdGlsbCBob2xkIGFub3RoZXIgZGF0YXNldCdzIGl0ZW1zLCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZFxuICAgICAgICAvLyBub3QgbWVyZ2VkIGJhY2sgeWV0OyBvdmVyd3JpdGluZyB0aGUgb3JkZXIgdGhleSB3ZXJlIHBhcmtlZCB3aXRoIHdvdWxkXG4gICAgICAgIC8vIG1lcmdlIHRoZW0gYmFjayBpbiByZXZlcnNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVwbGFjZWRJdGVtICYmXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICAgICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSxcbiAgICAgICAgICAgIHByb3BWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtLmlkKSxcbiAgICAgICAgICAgIHBhcmtlZEVsc2V3aGVyZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5jb25zdCBEQVRBU0VUX09QX0FERF9PUFRJT05TID0ge1xuICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLFxuICBjZW50ZXJNYXA6IGZhbHNlLFxuICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChzdGF0ZTogVmlzU3RhdGUsIHByb3RvOiBQcm90b0RhdGFzZXQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHJlc3VsdElkID0gcHJvdG8uaW5mby5pZDtcbiAgaWYgKCFyZXN1bHRJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoc3RhdGUuZGF0YXNldHNbcmVzdWx0SWRdKSB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRGF0YXNldFVwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IHJlc3VsdElkLCBkYXRhOiBwcm90by5kYXRhfSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBuZXh0U3RhdGUuZGF0YXNldHNbcmVzdWx0SWRdO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgfVxuICAgIGV4aXN0aW5nLm1ldGFkYXRhID0ge1xuICAgICAgLi4uZXhpc3RpbmcubWV0YWRhdGEsXG4gICAgICAuLi5wcm90by5tZXRhZGF0YVxuICAgIH07XG4gICAgZXhpc3RpbmcubGFiZWwgPSBwcm90by5pbmZvLmxhYmVsIHx8IGV4aXN0aW5nLmxhYmVsO1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHByb3RvLFxuICAgIG9wdGlvbnM6IERBVEFTRVRfT1BfQUREX09QVElPTlNcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Hcm91cEJ5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5Hcm91cEJ5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZUdyb3VwQnkoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkpvaW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1bkpvaW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlSm9pbihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuU3BhdGlhbEpvaW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1blNwYXRpYWxKb2luVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZVNwYXRpYWxKb2luKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5TdWl0YWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuU3VpdGFiaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlU3VpdGFiaWxpdHkoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IHtcbiAgYWRkR3JvdXBCeVVwZGF0ZXIsXG4gIGFkZEpvaW5VcGRhdGVyLFxuICBhZGRTcGF0aWFsSm9pblVwZGF0ZXIsXG4gIGFkZFN1aXRhYmlsaXR5VXBkYXRlcixcbiAgcmVtb3ZlRGF0YXNldE9wVXBkYXRlcixcbiAgc2V0R3JvdXBCeUNvbmZpZ1VwZGF0ZXIsXG4gIHNldEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTcGF0aWFsSm9pbkNvbmZpZ1VwZGF0ZXIsXG4gIHNldFN1aXRhYmlsaXR5Q29uZmlnVXBkYXRlclxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxTQUFRQSxJQUFJLFFBQU8sWUFBWTtBQUUvQixPQUFPQyxJQUFJLE1BQU0sbUJBQW1CO0FBQ3BDLE9BQU9DLFNBQVMsTUFBTSxXQUFXO0FBQ2pDLFNBQVFDLE9BQU8sSUFBSUMsT0FBTyxRQUFPLGVBQWU7QUFDaEQsT0FBT0MsU0FBUyxNQUFNLDZCQUE2QjtBQUNuRCxPQUFPQyxHQUFHLE1BQU0sdUJBQXVCO0FBQ3ZDLE9BQU9DLE9BQU8sTUFBTSwyQkFBMkI7QUFDL0MsT0FBT0MsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLEdBQUcsTUFBTSx1QkFBdUI7QUFDdkMsT0FBT0MsSUFBSSxJQUFHQyxxQkFBcUIsRUFBRUMsUUFBUSxRQUFPLGtCQUFrQjtBQUV0RTtBQUNBLFNBQ0VDLFVBQVUsRUFDVkMsV0FBVyxFQUNYQyxlQUFlLEVBQ2ZDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxXQUFXLFFBQ04sa0JBQWtCO0FBQ3pCO0FBQ0EsU0FDRUMsZUFBZSxFQU1mQyxnQkFBZ0IsRUFDaEJDLHVCQUF1QixFQUN2QkMsaUJBQWlCLEVBQ2pCQyxlQUFlLEVBQ2ZDLG9CQUFvQixFQUNwQkMsOEJBQThCLEVBQzlCQyxtQkFBbUIsRUFDbkJDLFlBQVksRUFDWkMs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QUssRUFBRThCLE1BQU0sQ0FBQztJQUFqRGMsU0FBUyxHQUFBcW5DLGVBQUEsQ0FBaEJqcUMsS0FBSztJQUFhNnNCLEtBQUssR0FBQW9kLGVBQUEsQ0FBTHBkLEtBQUs7RUFDOUIsT0FBT0EsS0FBSyxHQUFHaWQsd0JBQXdCLENBQUNsbkMsU0FBUyxFQUFFaXFCLEtBQUssQ0FBQyxHQUFHanFCLFNBQVM7QUFDdkU7QUFFQSxPQUFPLFNBQVNzbkMsY0FBY0EsQ0FDNUJscUMsS0FBZSxFQUNmOEIsTUFBNEMsRUFDbEM7RUFDVixJQUFBcW9DLFlBQUEsR0FBa0M1eEMsV0FBVyxDQUFDeUgsS0FBSyxFQUFFOEIsTUFBTSxDQUFDO0lBQTlDYyxTQUFTLEdBQUF1bkMsWUFBQSxDQUFoQm5xQyxLQUFLO0lBQWE2c0IsS0FBSyxHQUFBc2QsWUFBQSxDQUFMdGQsS0FBSztFQUM5QixPQUFPQSxLQUFLLEdBQUdpZCx3QkFBd0IsQ0FBQ2xuQyxTQUFTLEVBQUVpcUIsS0FBSyxDQUFDLEdBQUdqcUIsU0FBUztBQUN2RTtBQUVBLE9BQU8sU0FBU3duQyxxQkFBcUJBLENBQ25DcHFDLEtBQWUsRUFDZjhCLE1BQW1ELEVBQ3pDO0VBQ1YsSUFBQXVvQyxtQkFBQSxHQUFrQzd4QyxrQkFBa0IsQ0FBQ3dILEtBQUssRUFBRThCLE1BQU0sQ0FBQztJQUFyRGMsU0FBUyxHQUFBeW5DLG1CQUFBLENBQWhCcnFDLEtBQUs7SUFBYTZzQixLQUFLLEdBQUF3ZCxtQkFBQSxDQUFMeGQsS0FBSztFQUM5QixPQUFPQSxLQUFLLEdBQUdpZCx3QkFBd0IsQ0FBQ2xuQyxTQUFTLEVBQUVpcUIsS0FBSyxDQUFDLEdBQUdqcUIsU0FBUztBQUN2RTtBQUVBLE9BQU8sU0FBUzBuQyxxQkFBcUJBLENBQ25DdHFDLEtBQWUsRUFDZjhCLE1BQW1ELEVBQ3pDO0VBQ1YsSUFBQXlvQyxtQkFBQSxHQUFrQzl4QyxrQkFBa0IsQ0FBQ3VILEtBQUssRUFBRThCLE1BQU0sQ0FBQztJQUFyRGMsU0FBUyxHQUFBMm5DLG1CQUFBLENBQWhCdnFDLEtBQUs7SUFBYTZzQixLQUFLLEdBQUEwZCxtQkFBQSxDQUFMMWQsS0FBSztFQUM5QixPQUFPQSxLQUFLLEdBQUdpZCx3QkFBd0IsQ0FBQ2xuQyxTQUFTLEVBQUVpcUIsS0FBSyxDQUFDLEdBQUdqcUIsU0FBUztBQUN2RTtBQUVBLFNBQ0UxSyxpQkFBaUIsRUFDakJDLGNBQWMsRUFDZEMscUJBQXFCLEVBQ3JCQyxxQkFBcUIsRUFDckJLLHNCQUFzQixFQUN0QkUsdUJBQXVCLEVBQ3ZCQyxvQkFBb0IsRUFDcEJDLDJCQUEyQixFQUMzQkMsMkJBQTJCIiwiaWdub3JlTGlzdCI6W119